<?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>59064</bug_id>
          
          <creation_ts>2011-04-20 19:33:34 -0700</creation_ts>
          <short_desc>[GTK] Add support for OpenGL ES and EGL</short_desc>
          <delta_ts>2013-04-25 00:07:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>53201</dependson>
    
    <dependson>66903</dependson>
    
    <dependson>75462</dependson>
    
    <dependson>76248</dependson>
    
    <dependson>77921</dependson>
          <blocked>77011</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="ChangSeok Oh">kevin.cs.oh</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>joone.hur</cc>
    
    <cc>kbr</cc>
    
    <cc>kevin.cs.oh</cc>
    
    <cc>marc.ordinasillopis</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>work.nkulikov</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>389768</commentid>
    <comment_count>0</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2011-04-20 19:33:34 -0700</bug_when>
    <thetext>WebGL is currently running with GLX backend for GTK port on Linux based system.
This bug is for remark to add EGL backend for WebGL on same system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432291</commentid>
    <comment_count>1</comment_count>
      <attachid>99720</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2011-07-05 08:44:16 -0700</bug_when>
    <thetext>Created attachment 99720
a draft patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433909</commentid>
    <comment_count>2</comment_count>
      <attachid>100076</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2011-07-07 22:47:15 -0700</bug_when>
    <thetext>Created attachment 100076
Proposed patch

@Martin. Would you mind reviewing this patch? 
I think you&apos;re very familiar with WebGL for GTK port, so the best reviewer. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433911</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-07 22:50:52 -0700</bug_when>
    <thetext>Attachment 100076 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u...&quot; exit_code: 1

Source/WebCore/platform/graphics/gtk/egl/GraphicsContext3DInternal.cpp:23:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436935</commentid>
    <comment_count>4</comment_count>
      <attachid>100769</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2011-07-13 22:35:16 -0700</bug_when>
    <thetext>Created attachment 100769
updated patch

Fixed style issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437097</commentid>
    <comment_count>5</comment_count>
      <attachid>100769</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-07-14 08:27:42 -0700</bug_when>
    <thetext>Comment on attachment 100769
updated patch

This should be possible without copying all the code in GraphicsContext3DOpenGL.cpp, GraphicsContext3DInternal.cpp, and GraphicsContext3DGtk.cpp. Most of looks very similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437480</commentid>
    <comment_count>6</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2011-07-14 19:09:21 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 100769 [details])
&gt; This should be possible without copying all the code in GraphicsContext3DOpenGL.cpp, GraphicsContext3DInternal.cpp, and GraphicsContext3DGtk.cpp. Most of looks very similar.
You&apos;re right. They&apos;re very similar but a little different actually.

Newly added GraphicsContext3DInternal.cpp is implemented based on EGL(NOT GLX), so we can get eglContext and eglSurface.

GrahpicsContext3DGtk.cpp is in same situation like GraphicsContext3DInternal.cpp. Newly added GraphicsContext3DGtk.cpp is implemented base on OpenGLES not OpenGL. Some GL APIs need to change to fit GLES.

Each APIs of GraphicsContext3DOpenGL.cpp include extra code to convert OpenGL based parameter into OpenGLES. It means these extra codes are useless when we choose elg/opengles for gl-backend.

Why I seperate implementations for WebGL-APIs from original file is that I&apos;ve thought it looks more clear and easy to understand. Otherwise, many build flags like #if USE(EGL) may be needed to distinguish between GL-base implemetation and GLES-base implementation throughout the each files. Do you think this way is better? I don&apos;t mind whatever ways.

Thanks for comment. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440922</commentid>
    <comment_count>7</comment_count>
      <attachid>101722</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2011-07-22 06:06:37 -0700</bug_when>
    <thetext>Created attachment 101722
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443877</commentid>
    <comment_count>8</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-07-29 04:11:48 -0700</bug_when>
    <thetext>CCing cmarrin, as he might have some comments about the GraphicsContextOpenGL.cpp changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444124</commentid>
    <comment_count>9</comment_count>
      <attachid>101722</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-07-29 14:55:45 -0700</bug_when>
    <thetext>Comment on attachment 101722
updated patch

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

The #ifdefs added throughout GraphicsContext3DOpenGL.cpp are going to be poor to maintain. I think a better way to do this would be to move most of the code from GraphicsContext3DOpenGL.cpp into a GraphicsContext3DOpenGLBase.cpp. In those routines where different behavior is needed, define implementations of the methods in GraphicsContext3DOpenGL.cpp and for example GraphicsContext3DOpenGLES.cpp.

See for example Source/WebCore/platform/graphics/cg/GraphicsContext3DCG.cpp and Source/WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp .

I&apos;m refraining from touching the review bit in case others have differing opinions, since Chromium doesn&apos;t actually use this code.

&gt; Source/WebCore/platform/graphics/gtk/GraphicsContext3DGtk.cpp:94
&gt; +#if USE(EGL)
&gt; +    ::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
&gt; +    ::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
&gt; +#else
&gt;      ::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
&gt;      ::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
&gt; +#endif

GL_CLAMP_TO_EDGE should be used in both cases.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:1587
&gt; +    if (type == GL_FLOAT)
&gt; +        return false; // Not supported in GLES 2.0

If the GL_OES_texture_float extension is available, then this would be supported.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445174</commentid>
    <comment_count>10</comment_count>
      <attachid>101722</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2011-08-02 03:36:16 -0700</bug_when>
    <thetext>Comment on attachment 101722
updated patch

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

Thank you for review. :)

I split GraphicsContext3DOpenGL.cpp into three files, GraphicsContext3DOpenGLBase.cpp, GraphicsContext3DOpenGL.cpp and GraphicsContext3DOpenGLES.cpp as you mentioned.

&gt;&gt; Source/WebCore/platform/graphics/gtk/GraphicsContext3DGtk.cpp:94
&gt;&gt; +#endif
&gt; 
&gt; GL_CLAMP_TO_EDGE should be used in both cases.

Done.

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:1587
&gt;&gt; +        return false; // Not supported in GLES 2.0
&gt; 
&gt; If the GL_OES_texture_float extension is available, then this would be supported.

Done. I removed this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445176</commentid>
    <comment_count>11</comment_count>
      <attachid>102630</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2011-08-02 03:42:10 -0700</bug_when>
    <thetext>Created attachment 102630
updated patch

This patch has one style warning, but it&apos;s not mine.
I hope QT folks take care of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445177</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-02 03:45:57 -0700</bug_when>
    <thetext>Attachment 102630 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u...&quot; exit_code: 1

Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLBase.cpp:34:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445559</commentid>
    <comment_count>13</comment_count>
      <attachid>102630</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-08-02 15:06:51 -0700</bug_when>
    <thetext>Comment on attachment 102630
updated patch

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

Are you sure the style queue failure is due to the presence of the Qt header

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLBase.cpp:35
&gt; +

Are you sure the style queue failure is due to the presence of the Qt header, and not due to the name GraphicsContext3D.h (rather than GraphicsContext3DOpenGLBase.h) being used here? If it&apos;s being triggered by the latter, you could create a GraphicsContext3DOpenGLBase.h which just includes GraphicsContext3D.h as a workaround.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445683</commentid>
    <comment_count>14</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2011-08-02 19:12:47 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 102630 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=102630&amp;action=review
&gt; 
&gt; Are you sure the style queue failure is due to the presence of the Qt header
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLBase.cpp:35
&gt; &gt; +
&gt; 
&gt; Are you sure the style queue failure is due to the presence of the Qt header, and not due to the name GraphicsContext3D.h (rather than GraphicsContext3DOpenGLBase.h) being used here? If it&apos;s being triggered by the latter, you could create a GraphicsContext3DOpenGLBase.h which just includes GraphicsContext3D.h as a workaround.

O.K. Let me check it again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445795</commentid>
    <comment_count>15</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2011-08-03 03:27:05 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 102630 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=102630&amp;action=review
&gt; 
&gt; Are you sure the style queue failure is due to the presence of the Qt header
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLBase.cpp:35
&gt; &gt; +
&gt; 
&gt; Are you sure the style queue failure is due to the presence of the Qt header, and not due to the name GraphicsContext3D.h (rather than GraphicsContext3DOpenGLBase.h) being used here? If it&apos;s being triggered by the latter, you could create a GraphicsContext3DOpenGLBase.h which just includes GraphicsContext3D.h as a workaround.
Warning is gone if I move or remove Qt header.
Whereas I change the header GraphicsContext3D.h to GraphicsContext3DOpenGLBase.h, warning is still there.
Of course, I can move Qt header to avoid style warning in this patch, but I can&apos;t convince no problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446125</commentid>
    <comment_count>16</comment_count>
      <attachid>102630</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-08-03 15:16:20 -0700</bug_when>
    <thetext>Comment on attachment 102630
updated patch

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

The common code looks fine to me. I would suggest you similarly split the Gtk GraphicsContext3D implementation files to avoid all of the #if USE(EGL) constructs that have been added there. However, I&apos;d be fine r+&apos;ing this as is. I&apos;ll defer to mrobinson in case he wants to re-review, but ping me if you want me to r+ it.

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLBase.cpp:35
&gt;&gt;&gt;&gt; +
&gt;&gt;&gt; 
&gt;&gt;&gt; Are you sure the style queue failure is due to the presence of the Qt header, and not due to the name GraphicsContext3D.h (rather than GraphicsContext3DOpenGLBase.h) being used here? If it&apos;s being triggered by the latter, you could create a GraphicsContext3DOpenGLBase.h which just includes GraphicsContext3D.h as a workaround.
&gt;&gt; 
&gt;&gt; O.K. Let me check it again.
&gt; 
&gt; Warning is gone if I move or remove Qt header.
&gt; Whereas I change the header GraphicsContext3D.h to GraphicsContext3DOpenGLBase.h, warning is still there.
&gt; Of course, I can move Qt header to avoid style warning in this patch, but I can&apos;t convince no problem.

OK. Thanks for double-checking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446247</commentid>
    <comment_count>17</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2011-08-03 18:02:54 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 102630 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=102630&amp;action=review
&gt; 
&gt; The common code looks fine to me. I would suggest you similarly split the Gtk GraphicsContext3D implementation files to avoid all of the #if USE(EGL) constructs that have been added there. However, I&apos;d be fine r+&apos;ing this as is. I&apos;ll defer to mrobinson in case he wants to re-review, but ping me if you want me to r+ it.
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLBase.cpp:35
&gt; &gt;&gt;&gt;&gt; +
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; Are you sure the style queue failure is due to the presence of the Qt header, and not due to the name GraphicsContext3D.h (rather than GraphicsContext3DOpenGLBase.h) being used here? If it&apos;s being triggered by the latter, you could create a GraphicsContext3DOpenGLBase.h which just includes GraphicsContext3D.h as a workaround.
&gt; &gt;&gt; 
&gt; &gt;&gt; O.K. Let me check it again.
&gt; &gt; 
&gt; &gt; Warning is gone if I move or remove Qt header.
&gt; &gt; Whereas I change the header GraphicsContext3D.h to GraphicsContext3DOpenGLBase.h, warning is still there.
&gt; &gt; Of course, I can move Qt header to avoid style warning in this patch, but I can&apos;t convince no problem.
&gt; 
&gt; OK. Thanks for double-checking.
Thanks for kind review! :)

&gt; I would suggest you similarly split the Gtk GraphicsContext3D implementation files to avoid all of the #if USE(EGL) constructs that have been added there.
@mrobinson What do you think about this? Do you think it&apos;d be better to split GraphicsContext3DInternal.cpp &amp; GraphicsContext3DGtk.cpp?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>446344</commentid>
    <comment_count>18</comment_count>
      <attachid>102630</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-08-03 23:20:46 -0700</bug_when>
    <thetext>Comment on attachment 102630
updated patch

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

I think some of these #ifdefs can be removed entirely. For instance in GraphicsContext3DGtk, you can eliminate almost all of them. It probably makes sense to split GraphicsContext3DInternal though.

&gt; Source/WebCore/platform/graphics/gtk/GraphicsContext3DGtk.cpp:99
&gt; +#if USE(EGL)
&gt; +    ::glGenFramebuffers(1, &amp;m_fbo);
&gt; +    ::glBindFramebuffer(GL_FRAMEBUFFER, m_fbo);
&gt; +#else
&gt;      ::glGenFramebuffersEXT(1, &amp;m_fbo);
&gt;      ::glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_fbo);
&gt; +#endif

Adding an alias in OpenGLShims can eliminate this #ifdef.

&gt; Source/WebCore/platform/graphics/gtk/GraphicsContext3DGtk.cpp:171
&gt; +        if (m_attrs.stencil || m_attrs.depth) {
&gt; +            ::glDeleteRenderbuffers(1, &amp;m_depthBuffer);
&gt; +            ::glDeleteRenderbuffers(1, &amp;m_stencilBuffer);
&gt; +        }
&gt; +#else
&gt;          if (m_attrs.stencil || m_attrs.depth)

Does EGL use the OpenGLShims.h. If so you should be able to alias glDeleteFramebuffersEXT to glDeleteFramebuffers and remove this #ifdef entirely.

&gt; Source/WebCore/platform/graphics/gtk/GraphicsContext3DGtk.cpp:176
&gt; +    ::glDeleteFramebuffers(1, &amp;m_fbo);

Ditto for glDeleteFramebuffers and glDeleteFramebuffersEXT.

&gt; Source/WebCore/platform/graphics/gtk/GraphicsContext3DInternal.cpp:113
&gt; +#if USE(EGL)
&gt; +    EGLDisplay eglDisplay = eglGetDisplay(sharedDisplay());
&gt; +    if (eglDisplay == EGL_NO_DISPLAY)
&gt; +        return nullptr;
&gt; +    if (!initialized) {
&gt; +        if (!eglInitialize(eglDisplay, 0, 0))
&gt; +            return nullptr;
&gt; +        initialized = true;
&gt; +    }
&gt; +#else

Instead of doing this, why not have sharedDisplay return an EGLDisplay?

&gt; Source/WebCore/platform/graphics/gtk/GraphicsContext3DInternal.cpp:116
&gt;          success = initializeOpenGLShims();

Why shouldn&apos;t EGL use the OpenGL shims?

&gt; Source/WebCore/platform/graphics/gtk/GraphicsContext3DInternal.cpp:134
&gt; +#if USE(EGL)
&gt; +    GraphicsContext3DInternal* internal = createPbufferContext(eglDisplay);
&gt; +#else
&gt;      GraphicsContext3DInternal* internal = createPbufferContext();
&gt; +#endif
&gt;      if (!internal)
&gt; +#if USE(EGL)
&gt; +        internal = createPixmapContext(eglDisplay);
&gt; +#else
&gt;          internal = createPixmapContext();
&gt; +#endif
&gt;      if (!internal)

If you take my advice above you can remove these #ifdefs and just call sharedDisplay in these methods.

&gt; Source/WebCore/platform/graphics/gtk/GraphicsContext3DInternal.cpp:413
&gt;  } // namespace WebCore

I don&apos;t think there is any shared code in this file. Would it make sense to split it out into GraphicsContext3DInternalEGL.cpp?

&gt; Source/WebCore/platform/graphics/gtk/GraphicsContext3DInternal.h:79
&gt;  }

Almost nothing is shared here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448523</commentid>
    <comment_count>19</comment_count>
      <attachid>102630</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2011-08-09 05:10:54 -0700</bug_when>
    <thetext>Comment on attachment 102630
updated patch

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

Thanks for review!

&gt;&gt; Source/WebCore/platform/graphics/gtk/GraphicsContext3DGtk.cpp:99
&gt;&gt; +#endif
&gt; 
&gt; Adding an alias in OpenGLShims can eliminate this #ifdef.

Done.

&gt;&gt; Source/WebCore/platform/graphics/gtk/GraphicsContext3DGtk.cpp:171
&gt;&gt;          if (m_attrs.stencil || m_attrs.depth)
&gt; 
&gt; Does EGL use the OpenGLShims.h. If so you should be able to alias glDeleteFramebuffersEXT to glDeleteFramebuffers and remove this #ifdef entirely.

You&apos;re right and I&apos;ve done as your comment.
But I think this case needs #ifdef, becuase there is no way to handle depth buffer and stencil buffer at the same time.

&gt;&gt; Source/WebCore/platform/graphics/gtk/GraphicsContext3DGtk.cpp:176
&gt;&gt; +    ::glDeleteFramebuffers(1, &amp;m_fbo);
&gt; 
&gt; Ditto for glDeleteFramebuffers and glDeleteFramebuffersEXT.

Done.

&gt;&gt; Source/WebCore/platform/graphics/gtk/GraphicsContext3DInternal.cpp:113
&gt;&gt; +#else
&gt; 
&gt; Instead of doing this, why not have sharedDisplay return an EGLDisplay?

Done. I added sharedEGLDisplay() like sharedDisplay().

&gt;&gt; Source/WebCore/platform/graphics/gtk/GraphicsContext3DInternal.cpp:116
&gt;&gt;          success = initializeOpenGLShims();
&gt; 
&gt; Why shouldn&apos;t EGL use the OpenGL shims?

Hm... my understanding about OpenGLShims was not enough. :p
Now EGL uses OpenGLShims.

&gt;&gt; Source/WebCore/platform/graphics/gtk/GraphicsContext3DInternal.cpp:134
&gt;&gt;      if (!internal)
&gt; 
&gt; If you take my advice above you can remove these #ifdefs and just call sharedDisplay in these methods.

Done.

&gt;&gt; Source/WebCore/platform/graphics/gtk/GraphicsContext3DInternal.cpp:413
&gt;&gt;  } // namespace WebCore
&gt; 
&gt; I don&apos;t think there is any shared code in this file. Would it make sense to split it out into GraphicsContext3DInternalEGL.cpp?

Done. 
I added GraphicsContext3DInternalEGL.cpp and GraphicsContext3DInteranlEGL.h newly.

&gt;&gt; Source/WebCore/platform/graphics/gtk/GraphicsContext3DInternal.h:79
&gt;&gt;  }
&gt; 
&gt; Almost nothing is shared here too.

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448527</commentid>
    <comment_count>20</comment_count>
      <attachid>103348</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2011-08-09 05:27:12 -0700</bug_when>
    <thetext>Created attachment 103348
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448550</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-09 06:31:49 -0700</bug_when>
    <thetext>Attachment 103348 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u...&quot; exit_code: 1

Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLBase.cpp:34:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448973</commentid>
    <comment_count>22</comment_count>
      <attachid>103440</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2011-08-09 22:14:15 -0700</bug_when>
    <thetext>Created attachment 103440
updated patch

Fixed style warning.
I tried building qt port enabled WebGL. No issue found.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448974</commentid>
    <comment_count>23</comment_count>
      <attachid>103441</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2011-08-09 22:16:56 -0700</bug_when>
    <thetext>Created attachment 103441
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456007</commentid>
    <comment_count>24</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2011-08-24 01:25:58 -0700</bug_when>
    <thetext>@mrobinson Review please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456120</commentid>
    <comment_count>25</comment_count>
      <attachid>103441</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-08-24 09:01:42 -0700</bug_when>
    <thetext>Comment on attachment 103441
updated patch

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

It looks good to me in general, but I still would like a nod from someone more familiar with GraphicsContext3DOpenGL.cpp.

&gt; Source/WebCore/ChangeLog:11
&gt; +        Add build-flags like WTF_USE_GLX &amp; WTF_USE_EGL to seperate gl-backends.
&gt; +        Almost GL common APIs in GraphicsContext3DOpenGL.cpp are moved to GraphicsContext3DBase.cpp
&gt; +        And the others APIs needed to seperate according to gl-backend are located at GraphicsContext3DOpenGL.cpp and GraphicsContext3DOpenGLES.cpp.
&gt; +        Some GL extention parameters which are not defined in GLES are added newly in OpenGLShims.h

Do you mind evening out the ChangeLog lines here?

&gt; Source/WebCore/platform/graphics/cairo/OpenGLShims.cpp:122
&gt; +    openGLFunctionTable()-&gt;glBlitFramebuffer = ::glBlitFramebufferANGLE;

Why was this change necessary?

&gt; Source/WebCore/platform/graphics/cairo/OpenGLShims.h:54
&gt; +#if !defined(GL_FRAMEBUFFER_EXT)
&gt; +#define GL_FRAMEBUFFER_EXT GL_FRAMEBUFFER
&gt; +#endif
&gt; +#if !defined(GL_COLOR_ATTACHMENT0_EXT)
&gt; +#define GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT0
&gt; +#endif
&gt; +#if !defined(GL_RENDERBUFFER_EXT)
&gt; +#define GL_RENDERBUFFER_EXT GL_RENDERBUFFER
&gt;  #endif
&gt; +#if !defined(GL_STENCIL_ATTACHMENT_EXT)
&gt; +#define GL_STENCIL_ATTACHMENT_EXT GL_STENCIL_ATTACHMENT
&gt; +#endif
&gt; +#if !defined(GL_DEPTH_ATTACHMENT_EXT)
&gt; +#define GL_DEPTH_ATTACHMENT_EXT GL_DEPTH_ATTACHMENT
&gt; +#endif
&gt; +#if !defined(GL_FRAMEBUFFER_COMPLETE_EXT)
&gt; +#define GL_FRAMEBUFFER_COMPLETE_EXT GL_FRAMEBUFFER_COMPLETE
&gt; +#endif
&gt; +#endif // End of GL_ES_VERSION_2_0

Should these lines be EGL only or is it safe to enable them for normal GL as well?

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:36
&gt; +#if PLATFORM(GTK)
&gt; +#include &quot;OpenGLShims.h&quot;
&gt; +#endif

This should be in a separate block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456311</commentid>
    <comment_count>26</comment_count>
      <attachid>103441</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-08-24 12:34:10 -0700</bug_when>
    <thetext>Comment on attachment 103441
updated patch

The GraphicsContext3DOpenGL refactoring looks good to me personally. If you want cmarrin&apos;s review I suggest pinging him on IRC. I note that the Xcode projects haven&apos;t been updated, so this change is probably going to break the Mac port. It&apos;s too bad the EWS Mac bots don&apos;t work for non-committers but the commit queue will catch any breakage. You might have to do a couple of iterations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456512</commentid>
    <comment_count>27</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-08-24 16:07:57 -0700</bug_when>
    <thetext>I don&apos;t like the idea of restructuring the code at the same time as adding support for EGL. They should be separated. As the code stands now, it is not well structured for extension. So I think that task should be separated and this bug be made a dependency of that. I&apos;ve opened https://bugs.webkit.org/show_bug.cgi?id=66903 to discuss this.

Until then, I&apos;ve given this patch an r-</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456514</commentid>
    <comment_count>28</comment_count>
      <attachid>103441</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-08-24 16:08:28 -0700</bug_when>
    <thetext>Comment on attachment 103441
updated patch

Rejecting until issues brought up in https://bugs.webkit.org/show_bug.cgi?id=66903 are resolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837210</commentid>
    <comment_count>29</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-02-19 23:19:31 -0800</bug_when>
    <thetext>It seems that this can be closed now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837224</commentid>
    <comment_count>30</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2013-02-19 23:48:31 -0800</bug_when>
    <thetext>Yeap. I agree :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99720</attachid>
            <date>2011-07-05 08:44:16 -0700</date>
            <delta_ts>2011-07-07 22:47:15 -0700</delta_ts>
            <desc>a draft patch</desc>
            <filename>P59064.patch</filename>
            <type>text/plain</type>
            <size>78926</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDkwMzk2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDct
MDUgIENoYW5nU2VvayBPaCAgPHNoaXZhbWlkb3dAZ21haWwuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCBFR0wgYmFj
a2VuZCBmb3IgV2ViR0wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU5MDY0CisKKyAgICAgICAgQWRkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGNob29z
ZSBnbC1iYWNrZW5kCisKKyAgICAgICAgKiBjb25maWd1cmUuYWM6CisKIDIwMTEtMDctMDUgIFZz
ZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3Bl
Y3RvcjogU2hvdyBjb250ZW50IGZvciBwbHVnaW4gcmVxdWVzdHMgaW4gbmV0d29yayBwYW5lbC4K
SW5kZXg6IGNvbmZpZ3VyZS5hYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb25maWd1cmUuYWMJKHJldmlzaW9u
IDkwMzk2KQorKysgY29uZmlndXJlLmFjCSh3b3JraW5nIGNvcHkpCkBAIC0zNzgsMTIgKzM3OCw0
NiBAQCBBQ19BUkdfRU5BQkxFKHdlYmdsLAogICAgICAgICAgICAgICBbXSwgW2VuYWJsZV93ZWJn
bD0ibm8iXSkKIEFDX01TR19SRVNVTFQoWyRlbmFibGVfd2ViZ2xdKQogCisjIGRldGVybWluZSB0
aGUgR0wgYmFja2VuZAorQUNfTVNHX0NIRUNLSU5HKFt0aGUgR0wgYmFja2VuZCB0byB1c2VdKQor
QUNfQVJHX1dJVEgoZ2xfYmFja2VuZCwKKyAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdp
dGgtZ2wtYmFja2VuZD1APDpAZ2x4L2VnbEA6PkBdLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgW1NlbGVjdCBnbCBiYWNrZW5kIFtkZWZhdWx0PWdseF1dKSwKKyAgICAgICAgICAgIFtdLFt3
aXRoX2dsX2JhY2tlbmQ9ImdseCJdKQorCitjYXNlICIkd2l0aF9nbF9iYWNrZW5kIiBpbgorICAg
ICBnbHh8ZWdsKSA7OworICAgICAqKSBBQ19NU0dfRVJST1IoW0ludmFsaWQgZ2wgYmFja2VuZDog
bXVzdCBiZSBnbHgsIG9yIGVnbC5dKSA7OworZXNhYworCitBQ19NU0dfUkVTVUxUKFskd2l0aF9n
bF9iYWNrZW5kXSkKKwogaWYgdGVzdCAiJGVuYWJsZV93ZWJnbCIgPSAieWVzIjsgdGhlbgotICAg
IEFDX0NIRUNLX0hFQURFUlMoW0dML2dsLmhdLCBbXSwgQUNfTVNHX0VSUk9SKFtPcGVuR0wgaGVh
ZGVyIG5vdCBmb3VuZF0pKQotICAgIEFDX0NIRUNLX0hFQURFUlMoW0dML2dseC5oXSwgW10sIEFD
X01TR19FUlJPUihbR0xYIGhlYWRlciBub3QgZm91bmRdKSkKLSAgICBPUEVOR0xfTElCUz0tbEdM
CisgICAgY2FzZSAiJHdpdGhfZ2xfYmFja2VuZCIgaW4KKyAgICAgICAgZ2x4KSBBQ19DSEVDS19I
RUFERVJTKFtHTC9nbC5oXSwgW10sIEFDX01TR19FUlJPUihbT3BlbkdMIGhlYWRlciBub3QgZm91
bmRdKSkKKyAgICAgICAgICAgICBBQ19DSEVDS19IRUFERVJTKFtHTC9nbHguaF0sIFtdLCBBQ19N
U0dfRVJST1IoW0dMWCBoZWFkZXIgbm90IGZvdW5kXSkpCisgICAgICAgICAgICAgT1BFTkdMX0xJ
QlM9LWxHTAorICAgICAgICAgICAgIEFDX1NVQlNUKFtPUEVOR0xfTElCU10pCisgICAgICAgICAg
ICAgOzsKKyAgICAgICAgZWdsKSBBQ19DSEVDS19IRUFERVJTKFtHTEVTMi9nbDIuaF0sIFtdLCBB
Q19NU0dfRVJST1IoW09wZW5HTCBFUyBoZWFkZXIgbm90IGZvdW5kXSkpCisgICAgICAgICAgICAg
QUNfQ0hFQ0tfSEVBREVSUyhbRUdML2VnbC5oXSwgW10sIEFDX01TR19FUlJPUihbRUdMIGhlYWRl
ciBub3QgZm91bmRdKSkKKyAgICAgICAgICAgICBPUEVOR0xfTElCUz0tbEdMRVN2MgorICAgICAg
ICAgICAgIEVHTF9MSUJTPS1sRUdMCisgICAgICAgICAgICAgQUNfU1VCU1QoW09QRU5HTF9MSUJT
XSkKKyAgICAgICAgICAgICBBQ19TVUJTVChbRUdMX0xJQlNdKQorICAgICAgICAgICAgIDs7Cisg
ICAgZXNhYworIyAgICBpZiB0ZXN0ICIkd2l0aF9nbF9iYWNrZW5kIiA9ICJnbHgiOyB0aGVuCisj
ICAgICAgICBBQ19DSEVDS19IRUFERVJTKFtHTC9nbC5oXSwgW10sIEFDX01TR19FUlJPUihbT3Bl
bkdMIGhlYWRlciBub3QgZm91bmRdKSkKKyMgICAgICAgIEFDX0NIRUNLX0hFQURFUlMoW0dML2ds
eC5oXSwgW10sIEFDX01TR19FUlJPUihbR0xYIGhlYWRlciBub3QgZm91bmRdKSkKKyMgICAgICAg
IE9QRU5HTF9MSUJTPS1sR0wKKyMgICAgZWxzZQorIyAgICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhb
R0xFUzIvZ2wyLmhdLCBbXSwgQUNfTVNHX0VSUk9SKFtPcGVuR0wgRVMgaGVhZGVyIG5vdCBmb3Vu
ZF0pKQorIyAgICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhbRUdML2VnbC5oXSwgW10sIEFDX01TR19F
UlJPUihbRUdMIGhlYWRlciBub3QgZm91bmRdKSkKKyMgICAgICAgIE9QRU5HTF9MSUJTPS1sR0xF
U3YyCisjICAgIGZpCiBmaQotQUNfU1VCU1QoW09QRU5HTF9MSUJTXSkKKyNBQ19TVUJTVChbT1BF
TkdMX0xJQlNdKQogCiAjIGNoZWNrIHdoZXRoZXIgdG8gZW5hYmxlIGNoYW5uZWwgbWVzc2FnaW5n
IHN1cHBvcnQKIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgSFRNTDUgQ2hhbm5l
bCBNZXNzYWdpbmcgc3VwcG9ydF0pCkBAIC0xMTM1LDYgKzExNjksMTAgQEAgQU1fQ09ORElUSU9O
QUwoW1VTRV9HTElCX1VOSUNPREVdLCBbdGVzdAogQU1fQ09ORElUSU9OQUwoW1VTRV9GUkVFVFlQ
RV0sIFt0ZXN0ICIkd2l0aF9mb250X2JhY2tlbmQiID0gImZyZWV0eXBlIl0pCiBBTV9DT05ESVRJ
T05BTChbVVNFX1BBTkdPXSwgW3Rlc3QgIiR3aXRoX2ZvbnRfYmFja2VuZCIgPSAicGFuZ28iXSkK
IAorIyBGb250IGJhY2tlbmQgY29uZGl0aW9uYWxzCitBTV9DT05ESVRJT05BTChbVVNFX0dMWF0s
IFt0ZXN0ICIkd2l0aF9nbF9iYWNrZW5kIiA9ICJnbHgiXSkKK0FNX0NPTkRJVElPTkFMKFtVU0Vf
RUdMXSwgW3Rlc3QgIiR3aXRoX2dsX2JhY2tlbmQiID0gImVnbCJdKQorCiAjIEdTdHJlYW1lciBm
ZWF0dXJlIGNvbmRpdGlvbmFsCiBBTV9DT05ESVRJT05BTChbVVNFX0dTVFJFQU1FUl0sIFt0ZXN0
ICIkaGF2ZV9nc3RyZWFtZXIiID0gInllcyJdKQogCkBAIC0xMjQ5LDYgKzEyODcsNyBAQCBCdWls
ZCBjb25maWd1cmF0aW9uOgogIENvZGUgY292ZXJhZ2Ugc3VwcG9ydCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogJGVuYWJsZV9jb3ZlcmFnZQogIFVuaWNvZGUgYmFja2VuZCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHdpdGhfdW5pY29kZV9i
YWNrZW5kCiAgRm9udCBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiAkd2l0aF9mb250X2JhY2tlbmQKKyBHTCBiYWNrZW5kICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR3aXRoX2dsX2JhY2tlbmQKICBPcHRp
bWl6ZWQgbWVtb3J5IGFsbG9jYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRl
bmFibGVfZmFzdF9tYWxsb2MKIEZlYXR1cmVzOgogIDNEIFJlbmRlcmluZyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJGVuYWJsZV8zZF9yZW5kZXJpbmcKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwMzk2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTg5IEBACisyMDExLTA3LTA1ICBDaGFuZ1Nlb2sg
T2ggIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbR1RLXSBJbXBsZW1lbnQgRUdMIGJhY2tlbmQgZm9yIFdlYkdM
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA2NAor
CisgICAgICAgIEFkZCB0aHJlZSBmaWxlcyBuZXdseSBmb3IgZWdsLWJhY2tlbmQuIFRoZXkgaGF2
ZSBBUElzIGJhc2VkIG9uIEVHTCAmIEdMRVMgaW50ZXJmYWNlLgorICAgICAgICBBbmQgbW9kaWZ5
IEdOVW1ha2VmaWxlIHRvIGNob29zZSBwcm9wZXIgY29tcGlsZSB0YXJnZXRzIGFjY29yZGluZyB0
byBnbC1iYWNrZW5kIHdoaWNoIGNvdWxkIGJlIGVnbCBvciBnbHguCisKKyAgICAgICAgTm8gdGVz
dCByZXF1aXJlZCBuZXdseS4KKyAgICAgICAgV2UgY2FuIHZlcmlmeSB0aGlzIHBhdGNoIHVzaW5n
IGJ5IEdMLXRlc3QgY2FzZXMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIGJ1aWxk
IGZsYWdzIGxpa2UgV1RGX1VTRV9HTFgsIFdURl9VU0VfRUdMCisgICAgICAgICogR05VbWFrZWZp
bGUubGlzdC5hbTogQ2hvb3NlIGNvbXBpbGUgdGFyZ2V0IGZpbGUgdG8gbWVldCBnbC1iYWNrZW5k
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvZWdsL0dyYXBoaWNzQ29udGV4
dDNER3RrLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0Nv
bnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNz
Q29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29u
dGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmlzR0xFUzJDb21wbGlhbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9l
Z2wvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5jcHA6IEFkZGVkLgorICAgICAgICAoc2hhcmVk
RGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjphY3RpdmVHcmFwaGljc0NvbnRleHRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmFkZEFjdGl2ZUdyYXBo
aWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpyZW1vdmVBY3RpdmVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6Y2xlYW51cEFjdGl2ZUNvbnRleHRzQXRFeGl0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjcmVhdGVQYnVmZmVyQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjcmVhdGVQ
aXhtYXBDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6fkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bWFrZUNvbnRleHRDdXJyZW50
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xFUy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnZhbGlkYXRlQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpibGVuZEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpj
aGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpjbGVhckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb2xvck1hc2spOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpkZXB0aFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXRh
Y2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhBdHRy
aWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjplbmFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2gpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZyb250RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXApOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmhpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzUHJvZ3JhbSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBp
eGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwb2x5Z29u
T2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29t
cGlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNhbXBsZUNv
dmVyYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzY2lzc29yKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuY1NlcGFyYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2tTZXBhcmF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3BTZXBhcmF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0z
Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0yaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTNpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2l2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGkpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aXYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgyZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXg0ZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVzZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6dmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmdldEJvb2xlYW52KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Z2V0RmxvYXR2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFByb2dyYW1pdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3Jl
YXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFt
ZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVy
YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYXJrQ29udGV4dENoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtMYXllckNvbXBv
c2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9z
aXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9u
cyk6CisKIDIwMTEtMDYtMjIgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCShyZXZpc2lvbiA5MDM5NikKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgd2ViY29yZWd0a19jcHBm
bGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZnJlZXR5cGUKIGVuZGlmICMgRU5EIFVTRV9GUkVFVFlQRQogCi0jIC0tLQorIyAtLQogIyBQYW5n
byBmb250IGJhY2tlbmQKICMgLS0tCiBpZiBVU0VfUEFOR08KQEAgLTEzNyw2ICsxMzcsMjAgQEAg
d2ViY29yZWd0a19jcHBmbGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcGFuZ28KIGVuZGlmICMgRU5EIFVTRV9QQU5HTwogCisjIC0tCisjIEdM
WCBnbCBiYWNrZW5kCisjIC0tLQoraWYgVVNFX0dMWAord2ViY29yZWd0a19jcHBmbGFncyArPSAt
RFdURl9VU0VfR0xYPTEKK2VuZGlmICMgRU5EIFVTRV9HTFgKKworIyAtLQorIyBFR0wgZ2wgYmFj
a2VuZAorIyAtLS0KK2lmIFVTRV9FR0wKK3dlYmNvcmVndGtfY3BwZmxhZ3MgKz0gLURXVEZfVVNF
X0VHTD0xCitlbmRpZiAjIEVORCBVU0VfRUdMCisKICMgLS0tLQogIyBIVE1MIERldGFpbHMgRWxl
bWVudAogIyAtLS0tCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9u
IDkwMzk2KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBj
b3B5KQpAQCAtNDc0MCwxNCArNDc0MCwyOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBcCisJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWwuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0RyYXdpbmdCdWZm
ZXJHdGsuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCitlbmRpZiAgIyBFTkQgRU5BQkxFX1dFQkdMCisK
KyMgLS0tLQorIyBPcGVuR0wgYmFja2VuZAorIyAtLS0tCitpZiBVU0VfR0xYCit3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGlj
c0NvbnRleHQzREd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaCBcCi0JU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVu
R0wuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMLmNwcAotZW5kaWYgICMgRU5EIEVOQUJMRV9XRUJHTAorZW5kaWYgICMg
RU5EIFVTRV9HTFgKKworaWYgVVNFX0VHTAord2ViY29yZV9zb3VyY2VzICs9IFwKKwlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvZWdsL0dyYXBoaWNzQ29udGV4dDNER3RrLmNw
cCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL2VnbC9HcmFwaGljc0Nv
bnRleHQzREludGVybmFsLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCitlbmRpZiAgIyBFTkQgVVNFX0dM
WAogCiAjIC0tLQogIyBNSFRNTCBzdXBwb3J0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzRElu
dGVybmFsLmgJKHJldmlzaW9uIDkwMzk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAt
MjAsOSArMjAsMTYgQEAKICNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbF9oCiAjZGVm
aW5lIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWxfaAogCisjaWYgVVNFKEVHTCkKK3R5cGVkZWYg
dm9pZCogRUdMQ29uZmlnOwordHlwZWRlZiB2b2lkKiBFR0xDb250ZXh0OwordHlwZWRlZiB2b2lk
KiBFR0xEaXNwbGF5OwordHlwZWRlZiB2b2lkKiBFR0xTdXJmYWNlOworI2Vsc2UKIHR5cGVkZWYg
c3RydWN0IF9fR0xYY29udGV4dFJlYyAqR0xYQ29udGV4dDsKIHR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBHTFhQYnVmZmVyOwogdHlwZWRlZiB1bnNpZ25lZCBsb25nIEdMWFBpeG1hcDsKKyNlbmRpZgog
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIEdMdWJ5dGU7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgUGl4
bWFwOwogCkBAIC0zOCwxOSArNDUsMzMgQEAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bCB7CiAKICAgICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsK
KyNpZiBVU0UoRUdMKQorICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBjcmVh
dGVQYnVmZmVyQ29udGV4dChFR0xEaXNwbGF5KTsKKyAgICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbCogY3JlYXRlUGl4bWFwQ29udGV4dChFR0xEaXNwbGF5KTsKKyAgICBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsKEVHTERpc3BsYXksIEVHTENvbnRleHQsIEVHTFN1cmZhY2UpOwor
ICAgIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoRUdMRGlzcGxheSwgRUdMQ29udGV4dCwgUGl4
bWFwLCBFR0xTdXJmYWNlKTsKKyNlbHNlCiAgICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWwqIGNyZWF0ZVBidWZmZXJDb250ZXh0KCk7CiAgICAgc3RhdGljIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWwqIGNyZWF0ZVBpeG1hcENvbnRleHQoKTsKICAgICBHcmFwaGljc0NvbnRleHQz
REludGVybmFsKEdMWENvbnRleHQsIEdMWFBidWZmZXIpOwogICAgIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWwoR0xYQ29udGV4dCwgUGl4bWFwLCBHTFhQaXhtYXApOworI2VuZGlmCiAKICAgICBz
dGF0aWMgdm9pZCBhZGRBY3RpdmVHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QqKTsK
ICAgICBzdGF0aWMgdm9pZCByZW1vdmVBY3RpdmVHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250
ZXh0M0QqKTsKICAgICBzdGF0aWMgdm9pZCBjbGVhbnVwQWN0aXZlQ29udGV4dHNBdEV4aXQoKTsK
IAorI2lmIFVTRShFR0wpCisgICAgRUdMQ29udGV4dCBtX2NvbnRleHQ7CisgICAgRUdMRGlzcGxh
eSBtX2Rpc3BsYXk7CisgICAgRUdMU3VyZmFjZSBtX3BidWZmZXJTdXJmYWNlOworICAgIEVHTFN1
cmZhY2UgbV9waXhtYXBTdXJmYWNlOworI2Vsc2UKICAgICBHTFhDb250ZXh0IG1fY29udGV4dDsK
ICAgICBHTFhQYnVmZmVyIG1fcGJ1ZmZlcjsKLSAgICBQaXhtYXAgbV9waXhtYXA7CiAgICAgR0xY
UGl4bWFwIG1fZ2x4UGl4bWFwOworI2VuZGlmCisgICAgUGl4bWFwIG1fcGl4bWFwOwogfTsKIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL2VnbC9HcmFwaGlj
c0NvbnRleHQzREd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL2VnbC9HcmFwaGljc0NvbnRleHQzREd0ay5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvZWdsL0dyYXBoaWNzQ29udGV4
dDNER3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ2hhbmdTZW9rIE9o
IDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzREludGVybmFsLmgiCisjaW5jbHVkZSA8d3RmL05vdEZv
dW5kLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRyaWJ1dGVzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6UmVu
ZGVyU3R5bGUgcmVuZGVyU3R5bGUpCit7CisgICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2Vz
bid0IGN1cnJlbnRseSBzdXBwb3J0IHJlbmRlcmluZyBkaXJlY3RseSB0byB0aGUgSG9zdFdpbmRv
dy4KKyAgICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw+
IGludGVybmFsID0gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y3JlYXRlKCk7CisgICAgaWYg
KCFpbnRlcm5hbCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cmlidXRl
cywgaG9zdFdpbmRvdywgZmFsc2UpKTsKKyAgICBjb250ZXh0LT5tX2ludGVybmFsID0gaW50ZXJu
YWwucmVsZWFzZSgpOworICAgIHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsKK30KKworR3JhcGhp
Y3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBib29sKQorICAgIDogbV9jdXJyZW50V2lkdGgo
MCkKKyAgICAsIG1fY3VycmVudEhlaWdodCgwKQorICAgICwgbV9pc1Jlc291cmNlU2FmZShmYWxz
ZSkKKyAgICAsIG1fYXR0cnMoYXR0cmlidXRlcykKKyAgICAsIG1fdGV4dHVyZSgwKQorICAgICwg
bV9mYm8oMCkKKyAgICAsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKDApCisgICAgLCBtX2JvdW5kRkJP
KDApCisgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCisgICAgLCBtX211bHRpc2FtcGxlRGVwdGhT
dGVuY2lsQnVmZmVyKDApCisgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKK3sKKyAg
ICBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjphZGRBY3RpdmVHcmFwaGljc0NvbnRleHQodGhp
cyk7CisKKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKworICAgIC8vIENyZWF0ZSBhIHRleHR1
cmUgdG8gcmVuZGVyIGludG8uCisgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwor
ICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIDo6Z2xU
ZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElO
RUFSKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01J
Tl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIDo6Z2xUZXhQYXJh
bWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdF
KTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisKKyAgICAvLyBDcmVh
dGUgYW4gRkJPLgorICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKKyAgICA6Omds
QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisKKyAgICBtX2JvdW5kRkJP
ID0gbV9mYm87CisgICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAmJiAobV9hdHRycy5zdGVuY2ls
IHx8IG1fYXR0cnMuZGVwdGgpKQorICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9k
ZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIAorICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZC
Ty4KKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgOjpnbEdlbkZyYW1lYnVm
ZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIo
R0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX2JvdW5kRkJPID0g
bV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVs
dGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9h
dHRycy5kZXB0aCkKKyAgICAgICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRp
c2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisKKyAgLy8gQU5HTEUgaW5pdGlhbGl6
YXRpb24uCisgICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzOworICAgIFNoSW5p
dEJ1aWx0SW5SZXNvdXJjZXMoJkFOR0xFUmVzb3VyY2VzKTsKKworICAgIGdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5NYXhW
ZXJ0ZXhBdHRyaWJzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZF
UlRFWF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVj
dG9ycyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZF
Q1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyk7CisgICAgZ2V0SW50ZWdl
cnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFO
R0xFUmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2Vy
dihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZB
TkdMRVJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRl
Z2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJl
c291cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5N
YXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKKworICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3Ig
T3BlbkdMIEVTLgorICAgIEFOR0xFUmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0gMTsKKyAgICBt
X2NvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CisKKyAgICA6OmdsQ2xlYXJD
b2xvcigwLCAwLCAwLCAwKTsKK30KKworR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRl
eHQzRCgpCit7CisgICAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVtb3ZlQWN0aXZlR3Jh
cGhpY3NDb250ZXh0KHRoaXMpOworICAgIGlmICghbV9pbnRlcm5hbC0+bV9jb250ZXh0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRGVsZXRl
VGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7Cisg
ICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZm
ZXIpOworICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAg
ICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3Rl
bmNpbEJ1ZmZlcik7CisgICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlz
YW1wbGVGQk8pOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwg
bV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZt
X2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfQorICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnMo
MSwgJm1fZmJvKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJy
ZW50KCkKK3sKKyAgICBpZiAoIW1faW50ZXJuYWwpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lu
dGVybmFsLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpCit7Cisg
ICAgcmV0dXJuIG1faW50ZXJuYWwtPm1fY29udGV4dDsKK30KKworYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30KKworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9lZ2wvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL2VnbC9HcmFwaGlj
c0NvbnRleHQzREludGVybmFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9lZ2wvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEln
YWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93
QGdtYWlsLmNvbT4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZQorICogIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWwuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDxFR0wv
ZWdsLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+
CisKKy8vIFdlIGRvIG5vdCB3YW50IHRvIGNhbGwgZ2xYTWFrZUNvbnRleHRDdXJyZW50IHVzaW5n
IGRpZmZlcmVudCBEaXNwbGF5IHBvaW50ZXJzLAorLy8gYmVjYXVzZSBpdCBtaWdodCBsZWFkIHRv
IGNyYXNoZXMgaW4gc29tZSBkcml2ZXJzIChmZ2xyeCkuIFdlIHVzZSBhIHNoYXJlZCBkaXNwbGF5
CisvLyBwb2ludGVyIGhlcmUuCitzdGF0aWMgRGlzcGxheSogZ1NoYXJlZERpc3BsYXkgPSAwOwor
c3RhdGljIERpc3BsYXkqIHNoYXJlZERpc3BsYXkoKQoreworICAgIGlmICghZ1NoYXJlZERpc3Bs
YXkpCisgICAgICAgIGdTaGFyZWREaXNwbGF5ID0gWE9wZW5EaXNwbGF5KDApOworICAgIHJldHVy
biBnU2hhcmVkRGlzcGxheTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBCZWNhdXNl
IG9mIGRyaXZlciBidWdzLCBleGl0aW5nIHRoZSBwcm9ncmFtIHdoZW4gdGhlcmUgYXJlIGFjdGl2
ZSBwYnVmZmVycworLy8gY2FuIGNyYXNoIHRoZSBYIHNlcnZlciAodGhpcyBoYXMgYmVlbiBvYnNl
cnZlZCB3aXRoIHRoZSBvZmZpY2lhbCBOdmlkaWEgZHJpdmVycykuCisvLyBXZSBuZWVkIHRvIGVu
c3VyZSB0aGF0IHdlIGNsZWFuIGV2ZXJ5dGhpbmcgdXAgb24gZXhpdC4gVGhlcmUgYXJlIHNldmVy
YWwgcmVhc29ucworLy8gdGhhdCBHcmFwaGljc0NvbnRleHQzRHMgd2lsbCBzdGlsbCBiZSBhbGl2
ZSBhdCBleGl0LCBpbmNsdWRpbmcgdXNlciBlcnJvciAobWVtb3J5CisvLyBsZWFrcykgYW5kIHRo
ZSBwYWdlIGNhY2hlLiBJbiBhbnkgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0aGUgWCBzZXJ2ZXIgdG8g
Y3Jhc2guCitzdGF0aWMgYm9vbCBjbGVhbmluZ1VwQXRFeGl0ID0gZmFsc2U7CitzdGF0aWMgVmVj
dG9yPEdyYXBoaWNzQ29udGV4dDNEKj4mIGFjdGl2ZUdyYXBoaWNzQ29udGV4dHMoKQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPEdyYXBoaWNzQ29udGV4dDNEKj4sIGNvbnRleHRz
LCAoKSk7CisgICAgcmV0dXJuIGNvbnRleHRzOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OmFkZEFjdGl2ZUdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCkKK3sKKyAgICBzdGF0aWMgYm9vbCBhZGRlZEF0RXhpdEhhbmRsZXIgPSBmYWxzZTsKKyAg
ICBpZiAoIWFkZGVkQXRFeGl0SGFuZGxlcikgeworICAgICAgICBhdGV4aXQoJkdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OmNsZWFudXBBY3RpdmVDb250ZXh0c0F0RXhpdCk7CisgICAgICAgIGFk
ZGVkQXRFeGl0SGFuZGxlciA9IHRydWU7CisgICAgfQorICAgIGFjdGl2ZUdyYXBoaWNzQ29udGV4
dHMoKS5hcHBlbmQoY29udGV4dCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6cmVtb3ZlQWN0aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
KQoreworICAgIGlmIChjbGVhbmluZ1VwQXRFeGl0KQorICAgICAgICByZXR1cm47CisKKyAgICBW
ZWN0b3I8R3JhcGhpY3NDb250ZXh0M0QqPiYgY29udGV4dHMgPSBhY3RpdmVHcmFwaGljc0NvbnRl
eHRzKCk7CisgICAgc2l6ZV90IGxvY2F0aW9uID0gY29udGV4dHMuZmluZChjb250ZXh0KTsKKyAg
ICBpZiAobG9jYXRpb24gIT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgY29udGV4dHMucmVtb3Zl
KGxvY2F0aW9uKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjbGVhbnVw
QWN0aXZlQ29udGV4dHNBdEV4aXQoKQoreworICAgIGNsZWFuaW5nVXBBdEV4aXQgPSB0cnVlOwor
CisgICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dDNEKj4mIGNvbnRleHRzID0gYWN0aXZlR3JhcGhp
Y3NDb250ZXh0cygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29udGV4dHMuc2l6ZSgp
OyBpKyspCisgICAgICAgIGNvbnRleHRzW2ldLT5+R3JhcGhpY3NDb250ZXh0M0QoKTsKKworICAg
IGlmICghZ1NoYXJlZERpc3BsYXkpCisgICAgICAgIHJldHVybjsKKyAgICBYQ2xvc2VEaXNwbGF5
KGdTaGFyZWREaXNwbGF5KTsKKyAgICBnU2hhcmVkRGlzcGxheSA9IDA7Cit9CisKK1Bhc3NPd25Q
dHI8R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbD4gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
Y3JlYXRlKCkKK3sKKyAgICBpZiAoIXNoYXJlZERpc3BsYXkoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBFR0xEaXNwbGF5IGVnbERpc3BsYXkgPSBlZ2xHZXREaXNwbGF5KHNoYXJl
ZERpc3BsYXkoKSk7CisgICAgaWYgKGVnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFlZ2xJbml0aWFsaXplKGVnbERpc3BsYXks
IDAsIDApKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWwqIGludGVybmFsID0gY3JlYXRlUGJ1ZmZlckNvbnRleHQoZWdsRGlzcGxheSk7Cisg
ICAgaWYgKCFpbnRlcm5hbCkKKyAgICAgICAgaW50ZXJuYWwgPSBjcmVhdGVQaXhtYXBDb250ZXh0
KGVnbERpc3BsYXkpOworICAgIGlmICghaW50ZXJuYWwpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgLy8gVGhlIEdyYXBoaWNzQ29udGV4dDNEIGNvbnN0cnVjdG9yIHJlcXVpcmVzIHRo
YXQgdGhpcyBjb250ZXh0IGlzIHRoZSBjdXJyZW50IE9wZW5HTCBjb250ZXh0LgorICAgIGludGVy
bmFsLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gYWRvcHRQdHIoaW50ZXJuYWwp
OworfQorCitHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpjcmVhdGVQYnVmZmVyQ29udGV4dChFR0xEaXNwbGF5IGVnbERpc3BsYXkpCit7CisgICAg
aW50IGZiQ29uZmlnQXR0cmJzW10gPSB7CisgICAgICAgIEVHTF9CVUZGRVJfU0laRSwgRUdMX0RP
TlRfQ0FSRSwKKyAgICAgICAgRUdMX1JFRF9TSVpFLCA4LAorICAgICAgICBFR0xfR1JFRU5fU0la
RSwgOCwKKyAgICAgICAgRUdMX0JMVUVfU0laRSwgOCwKKyAgICAgICAgRUdMX0FMUEhBX1NJWkUs
IDgsCisgICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVOR0xfRVMyX0JJVCwKKyAg
ICAgICAgRUdMX1NVUkZBQ0VfVFlQRSwgRUdMX1BCVUZGRVJfQklULAorICAgICAgICBFR0xfTk9O
RQorICAgIH07CisgICAgRUdMQ29uZmlnIGVnbENvbmZpZ3NbMV07CisgICAgRUdMaW50IG51bU9m
Q29uZmlnOworICAgIGlmICghZWdsQ2hvb3NlQ29uZmlnKGVnbERpc3BsYXksIGZiQ29uZmlnQXR0
cmJzLCAmZWdsQ29uZmlnc1swXSwgMSwgJm51bU9mQ29uZmlnKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgaWYgKCFudW1PZkNvbmZpZykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBXZSB3
aWxsIGJlIHJlbmRlcmluZyB0byBhIHRleHR1cmUsIHNvIG91ciBwYnVmZmVyIGRvZXMgbm90IG5l
ZWQgdG8gYmUgbGFyZ2UuCisgICAgc3RhdGljIGNvbnN0IGludCBwYnVmZmVyQXR0cmlidXRlc1td
ID0geyBFR0xfV0lEVEgsIDEsIEVHTF9IRUlHSFQsIDEsIEVHTF9OT05FIH07CisgICAgRUdMU3Vy
ZmFjZSBlZ2xTdXJmYWNlID0gZWdsQ3JlYXRlUGJ1ZmZlclN1cmZhY2UoZWdsRGlzcGxheSwgZWds
Q29uZmlnc1swXSwgcGJ1ZmZlckF0dHJpYnV0ZXMpOworICAgIGlmIChlZ2xTdXJmYWNlID09IEVH
TF9OT19TVVJGQUNFKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEVHTGludCBlZ2xDb250ZXh0
QXR0cmJzW10gPSB7IEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLCAyLCBFR0xfTk9ORSB9Owor
ICAgIEVHTENvbnRleHQgZWdsQ29udGV4dCA9IGVnbENyZWF0ZUNvbnRleHQoZWdsRGlzcGxheSwg
ZWdsQ29uZmlnc1swXSwgRUdMX05PX0NPTlRFWFQsIGVnbENvbnRleHRBdHRyYnMpOworICAgIGlm
IChlZ2xDb250ZXh0ID09IEVHTF9OT19DT05URVhUKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChlZ2xEaXNwbGF5LCBlZ2xDb250
ZXh0LCBlZ2xTdXJmYWNlKTsKK30KKworR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCogR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6Y3JlYXRlUGl4bWFwQ29udGV4dChFR0xEaXNwbGF5IGVnbERp
c3BsYXkpCit7CisgICAgaW50IHNjcmVlbiA9IERlZmF1bHRTY3JlZW4oc2hhcmVkRGlzcGxheSgp
KTsKKyAgICBpbnQgZGVwdGggPSBEZWZhdWx0RGVwdGgoc2hhcmVkRGlzcGxheSgpLCBzY3JlZW4p
OworCisgICAgc3RhdGljIGludCBmYkNvbmZpZ0F0dHJic1tdID0geworICAgICAgICBFR0xfQlVG
RkVSX1NJWkUsIEVHTF9ET05UX0NBUkUsCisgICAgICAgIEVHTF9SRURfU0laRSwgOCwKKyAgICAg
ICAgRUdMX0dSRUVOX1NJWkUsIDgsCisgICAgICAgIEVHTF9CTFVFX1NJWkUsIDgsCisgICAgICAg
IEVHTF9BTFBIQV9TSVpFLCA4LAorICAgICAgICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BF
TkdMX0VTMl9CSVQsCisgICAgICAgIEVHTF9TVVJGQUNFX1RZUEUsIEVHTF9QQlVGRkVSX0JJVCwK
KyAgICAgICAgRUdMX05PTkUKKyAgICB9OworCisgICAgRUdMQ29uZmlnIGVnbENvbmZpZ3NbMV07
CisgICAgRUdMaW50IG51bU9mQ29uZmlnOworICAgIGlmICghZWdsQ2hvb3NlQ29uZmlnKGVnbERp
c3BsYXksIGZiQ29uZmlnQXR0cmJzLCAmZWdsQ29uZmlnc1swXSwgMSwgJm51bU9mQ29uZmlnKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFudW1PZkNvbmZpZykKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBFR0xpbnQgZWdsQ29udGV4dEF0dHJic1tdID0geyBFR0xfQ09OVEVYVF9DTElF
TlRfVkVSU0lPTiwgMiwgRUdMX05PTkUgfTsKKyAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBlZ2xD
cmVhdGVDb250ZXh0KGVnbERpc3BsYXksIGVnbENvbmZpZ3NbMF0sIEVHTF9OT19DT05URVhULCBl
Z2xDb250ZXh0QXR0cmJzKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgUGl4bWFwIHBpeG1hcCA9IFhDcmVhdGVQaXhtYXAoc2hhcmVkRGlzcGxheSgpLCBEZWZh
dWx0Um9vdFdpbmRvdyhzaGFyZWREaXNwbGF5KCkpLCAxLCAxLCBkZXB0aCk7CisgICAgaWYgKCFw
aXhtYXApCisgICAgICAgIHJldHVybiAwOworCisgICAgc3RhdGljIGNvbnN0IGludCBwaXhtYXBB
dHRyaWJ1dGVzW10gPSB7IEVHTF9XSURUSCwgMSwgRUdMX0hFSUdIVCwgMSwgRUdMX05PTkUgfTsK
KyAgICBFR0xTdXJmYWNlIGVnbFBpeG1hcFN1cmZhY2UgPSBlZ2xDcmVhdGVQaXhtYXBTdXJmYWNl
KGVnbERpc3BsYXksIGVnbENvbmZpZ3NbMF0sIHBpeG1hcCwgcGl4bWFwQXR0cmlidXRlcyk7Cisg
ICAgaWYgKCFlZ2xQaXhtYXBTdXJmYWNlKSB7CisgICAgICAgIFhGcmVlUGl4bWFwKHNoYXJlZERp
c3BsYXkoKSwgcGl4bWFwKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJu
IG5ldyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKGVnbERpc3BsYXksIGNvbnRleHQsIHBpeG1h
cCwgZWdsUGl4bWFwU3VyZmFjZSk7CisKK30KKworR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChFR0xEaXNwbGF5IGRpc3BsYXksIEVHTENvbnRleHQg
Y29udGV4dCwgRUdMU3VyZmFjZSBwYnVmZmVyU3VyZmFjZSkKKyAgICA6IG1fY29udGV4dChjb250
ZXh0KQorICAgICwgbV9kaXNwbGF5KGRpc3BsYXkpCisgICAgLCBtX3BidWZmZXJTdXJmYWNlKHBi
dWZmZXJTdXJmYWNlKQorICAgICwgbV9waXhtYXBTdXJmYWNlKDApCisgICAgLCBtX3BpeG1hcCgw
KQoreworfQorCitHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsKEVHTERpc3BsYXkgZGlzcGxheSwgRUdMQ29udGV4dCBjb250ZXh0LCBQaXhtYXAgcGl4
bWFwLCBFR0xTdXJmYWNlIHBpeG1hcFN1cmZhY2UpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkK
KyAgICAsIG1fZGlzcGxheShkaXNwbGF5KQorICAgICwgbV9wYnVmZmVyU3VyZmFjZSgwKQorICAg
ICwgbV9waXhtYXBTdXJmYWNlKHBpeG1hcFN1cmZhY2UpCisgICAgLCBtX3BpeG1hcChwaXhtYXAp
Cit7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6On5HcmFwaGljc0NvbnRleHQzRElu
dGVybmFsKCkKK3sKKyAgICBpZiAobV9jb250ZXh0KSB7CisgICAgICAgIC8vIFRoaXMgbWF5IGJl
IG5lY2Vzc2FyeSB0byBwcmV2ZW50IGNyYXNoZXMgd2l0aCBOVmlkaWEncyBjbG9zZWQgc291cmNl
IGRyaXZlcnMuIE9yaWdpbmFsbHkKKyAgICAgICAgLy8gZnJvbSBNb3ppbGxhJ3MgM0QgY2FudmFz
IGltcGxlbWVudGF0aW9uIGF0OiBodHRwOi8vYml0YnVja2V0Lm9yZy9pbG1hcmkvY2FudmFzM2Qv
CisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsKKworICAgICAg
ICBlZ2xNYWtlQ3VycmVudChtX2Rpc3BsYXksIDAsIDAsIDApOworICAgICAgICBlZ2xEZXN0cm95
Q29udGV4dChtX2Rpc3BsYXksIG1fY29udGV4dCk7CisgICAgICAgIG1fY29udGV4dCA9IDA7Cisg
ICAgfQorCisgICAgaWYgKG1fcGJ1ZmZlclN1cmZhY2UpIHsKKyAgICAgICAgZWdsRGVzdHJveVN1
cmZhY2UobV9kaXNwbGF5LCBtX3BidWZmZXJTdXJmYWNlKTsKKyAgICAgICAgbV9wYnVmZmVyU3Vy
ZmFjZSA9IDA7CisgICAgfQorICAgIGlmIChtX3BpeG1hcFN1cmZhY2UpIHsKKyAgICAgICAgZWds
RGVzdHJveVN1cmZhY2UobV9kaXNwbGF5LCBtX3BpeG1hcFN1cmZhY2UpOworICAgICAgICBtX3Bp
eG1hcFN1cmZhY2UgPSAwOworICAgIH0KKyAgICBpZiAobV9waXhtYXApIHsKKyAgICAgICAgWEZy
ZWVQaXhtYXAoc2hhcmVkRGlzcGxheSgpLCBtX3BpeG1hcCk7CisgICAgICAgIG1fcGl4bWFwID0g
MDsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bWFrZUNvbnRl
eHRDdXJyZW50KCkKK3sKKyAgICBpZiAoZWdsR2V0Q3VycmVudENvbnRleHQoKSA9PSBtX2NvbnRl
eHQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChtX3BidWZmZXJTdXJmYWNlKSB7CisgICAgICAgIGVnbE1ha2VDdXJyZW50KG1f
ZGlzcGxheSwgbV9wYnVmZmVyU3VyZmFjZSwgbV9wYnVmZmVyU3VyZmFjZSwgbV9jb250ZXh0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVnbE1ha2VDdXJyZW50KG1fZGlzcGxheSwg
bV9waXhtYXBTdXJmYWNlLCBtX3BpeG1hcFN1cmZhY2UsIG1fY29udGV4dCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRV9XRUJHTApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
RVMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5H
TEVTLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDc1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMSBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29tPgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJBcnJh
eUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgorI2luY2x1ZGUgIkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKKyNp
bmNsdWRlICJGbG9hdDMyQXJyYXkuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisj
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW50MzJBcnJheS5oIgorI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiVWludDhBcnJheS5oIgorI2luY2x1ZGUgPGNz
dHJpbmc+CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgor
I2VsaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPEdM
RVMyL2dsMmV4dC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcygp
Cit7CisgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOworICAg
IGlmIChtX2F0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgaWYgKGV4dGVuc2lvbnMtPnN1cHBvcnRz
KCJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKSkgeworICAgICAgICAgICAgZXh0ZW5zaW9u
cy0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisgICAgICAg
ICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCisgICAgICAgICAgICBtX2F0
dHJzLmRlcHRoID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2F0dHJzLnN0
ZW5jaWwgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAg
ICAgIGJvb2wgaXNWYWxpZFZlbmRvciA9IHRydWU7CisgICAgICAgIC8vIEN1cnJlbnRseSBpbiBN
YWMgd2Ugb25seSB0dXJuIG9uIGFudGlhbGlhcyBpZiB2ZW5kb3IgaXMgTlZJRElBLgorICAgICAg
ICBjb25zdCBjaGFyKiB2ZW5kb3IgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6Omds
R2V0U3RyaW5nKEdMX1ZFTkRPUikpOworICAgICAgICBpZiAoIXZlbmRvciB8fCAhc3RkOjpzdHJz
dHIodmVuZG9yLCAiTlZJRElBIikpCisgICAgICAgICAgICBpc1ZhbGlkVmVuZG9yID0gZmFsc2U7
CisgICAgICAgIGlmICghaXNWYWxpZFZlbmRvciB8fCAhZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdM
X0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikpCisgICAgICAgICAgICBtX2F0dHJzLmFu
dGlhbGlhcyA9IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleHRlbnNpb25zLT5l
bnN1cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOworICAgIH0K
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWdu
ZWQgY2hhciAqcGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSkKK3sKKyAgICBpbnQgdG90YWxCeXRlcyA9
IG1fY3VycmVudFdpZHRoICogbV9jdXJyZW50SGVpZ2h0ICogNDsKKyAgICBpZiAocGl4ZWxzU2l6
ZSA8IHRvdGFsQnl0ZXMpCisgICAgICAgIHJldHVybjsKKworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworCisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOworICAgIGlmIChtX2F0dHJz
LmFudGlhbGlhcykgeworICAgICAgICAvLyBGSVhNRSA6IEltcGxlbWVudCBhbnRpYWxpYXMgZm9y
IEdMRVMKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBp
ZiAobV9ib3VuZEZCTyAhPSBtX2ZibykgeworICAgICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0
cnVlOworICAgICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9m
Ym8pOworICAgICAgICB9CisgICAgfQorCisgICAgR0xpbnQgcGFja0FsaWdubWVudCA9IDQ7Cisg
ICAgYm9vbCBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKKyAgICA6OmdsR2V0SW50
ZWdlcnYoR0xfUEFDS19BTElHTk1FTlQsICZwYWNrQWxpZ25tZW50KTsKKyAgICBpZiAocGFja0Fs
aWdubWVudCA+IDQpIHsKKyAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5U
LCA0KTsKKyAgICAgICAgbXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gdHJ1ZTsKKyAgICB9CisK
KyAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0
LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOworCisgICAgLy8gQ29udmVydCB0
byBCR1JBCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCisgICAg
ICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOworCisgICAgaWYgKG11c3RS
ZXN0b3JlUGFja0FsaWdubWVudCkKKyAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJ
R05NRU5ULCBwYWNrQWxpZ25tZW50KTsKKworICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9ib3VuZEZCTyk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENh
bnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgSFRNTENhbnZhc0VsZW1lbnQq
IGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOworICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZl
ciA9IGNhbnZhcy0+YnVmZmVyKCk7CisKKyAgICBpbnQgcm93Qnl0ZXMgPSBtX2N1cnJlbnRXaWR0
aCAqIDQ7CisgICAgaW50IHRvdGFsQnl0ZXMgPSByb3dCeXRlcyAqIG1fY3VycmVudEhlaWdodDsK
KworICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHBpeGVscyA9IGFkb3B0QXJyYXlQdHIo
bmV3IHVuc2lnbmVkIGNoYXJbdG90YWxCeXRlc10pOworICAgIGlmICghcGl4ZWxzKQorICAgICAg
ICByZXR1cm47CisKKyAgICByZWFkUmVuZGVyaW5nUmVzdWx0cyhwaXhlbHMuZ2V0KCksIHRvdGFs
Qnl0ZXMpOworCisgICAgaWYgKCFtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBoYSkgeworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkgeworICAgICAgICAgICAg
Ly8gUHJlbXVsdGlwbHkgYWxwaGEKKyAgICAgICAgICAgIHBpeGVsc1tpICsgMF0gPSBzdGQ6Om1p
bigyNTUsIHBpeGVsc1tpICsgMF0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKKyAgICAgICAgICAg
IHBpeGVsc1tpICsgMV0gPSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsgMV0gKiBwaXhlbHNbaSAr
IDNdIC8gMjU1KTsKKyAgICAgICAgICAgIHBpeGVsc1tpICsgMl0gPSBzdGQ6Om1pbigyNTUsIHBp
eGVsc1tpICsgMl0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50
SGVpZ2h0LAorICAgICAgICAgICAgICAgICAgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdo
dCgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7Cit9CisKK1Bh
c3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEoKQoreworICAgIC8vIFJlYWRpbmcgcHJlbXVsdGlwbGllZCBhbHBoYSB3
b3VsZCBpbnZvbHZlIHVucHJlbXVsdGlwbHlpbmcsIHdoaWNoIGlzCisgICAgLy8gbG9zc3kKKyAg
ICBpZiAobV9hdHRycy5wcmVtdWx0aXBsaWVkQWxwaGEpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50U2l6
ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KSk7CisgICAgdW5zaWduZWQgY2hhciog
cGl4ZWxzID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOworICAgIGludCB0b3Rh
bEJ5dGVzID0gNCAqIG1fY3VycmVudFdpZHRoICogbV9jdXJyZW50SGVpZ2h0OworCisgICAgcmVh
ZFJlbmRlcmluZ1Jlc3VsdHMocGl4ZWxzLCB0b3RhbEJ5dGVzKTsKKworICAgIC8vIENvbnZlcnQg
dG8gUkdCQQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQorICAg
ICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKKworICAgIHJldHVybiBp
bWFnZURhdGEucmVsZWFzZSgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBl
KGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBpZiAoIXBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdp
ZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOworICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdo
dDsKKyAgICAKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB2YWxpZGF0ZUF0dHJpYnV0
ZXMoKTsKKworICAgIEdMdWludCBjb2xvckZvcm1hdCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3Jt
YXQgPSAwOworICAgIGlmIChtX2F0dHJzLmFscGhhKSB7CisgICAgICAgIG1faW50ZXJuYWxDb2xv
ckZvcm1hdCA9IEdMX1JHQkE7CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsKKyAgICB9
IGVsc2UgeworICAgICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0I7CisgICAgICAg
IGNvbG9yRm9ybWF0ID0gR0xfUkdCOworICAgIH0KKyAgICAKKyAgICBpZiAobV9hdHRycy5zdGVu
Y2lsKQorICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX1NURU5DSUxfSU5E
RVg4OworICAgIGlmIChtX2F0dHJzLmRlcHRoKQorICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNp
bEZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDE2OworCisgICAgYm9vbCBtdXN0UmVzdG9yZUZC
TyA9IGZhbHNlOworCisgICAgLy8gcmVzaXplIG11bHRpc2FtcGxlIEZCTworICAgIGlmIChtX2F0
dHJzLmFudGlhbGlhcykgeworICAgICAgICAvLyBGSVhNRSA6IGltcGxlbWVudCBtdWx0aXNhbXBs
aW5nIGZvciBHTEVTCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorCisgICAgLy8g
cmVzaXplIHJlZ3VsYXIgRkJPCisgICAgaWYgKG1fYm91bmRGQk8gIT0gbV9mYm8pIHsKKyAgICAg
ICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgfQorICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCBtX3RleHR1cmUpOworICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAs
IG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdM
X1VOU0lHTkVEX0JZVEUsIDApOworICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFN
RUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwg
MCk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1
cmUpOworICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xv
ckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUs
IDApOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICBpZiAoIW1f
YXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkpIHsK
KyAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX2RlcHRoU3Rl
bmNpbEJ1ZmZlcik7CisgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJV
RkZFUiwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAg
ICBpZiAobV9hdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJV
RkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkK
KyAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwg
R0xfREVQVEhfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZl
cik7CisgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCk7Cisg
ICAgfQorICAgIGlmIChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIpICE9
IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CisgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwCisg
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorCisgICAgaWYgKG1fYXR0cnMuYW50aWFs
aWFzKSB7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVs
dGlzYW1wbGVGQk8pOworICAgICAgICBpZiAobV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJP
KQorICAgICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBJ
bml0aWFsaXplIHJlbmRlcmJ1ZmZlcnMgdG8gMC4KKyAgICBHTGZsb2F0IGNsZWFyQ29sb3JbXSA9
IHswLCAwLCAwLCAwfSwgY2xlYXJEZXB0aCA9IDA7CisgICAgR0xpbnQgY2xlYXJTdGVuY2lsID0g
MDsKKyAgICBHTGJvb2xlYW4gY29sb3JNYXNrW10gPSB7R0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJV
RSwgR0xfVFJVRX0sIGRlcHRoTWFzayA9IEdMX1RSVUU7CisgICAgR0x1aW50IHN0ZW5jaWxNYXNr
ID0gMHhmZmZmZmZmZjsKKyAgICBHTGJvb2xlYW4gaXNTY2lzc29yRW5hYmxlZCA9IEdMX0ZBTFNF
OworICAgIEdMYm9vbGVhbiBpc0RpdGhlckVuYWJsZWQgPSBHTF9GQUxTRTsKKyAgICBHTGJpdGZp
ZWxkIGNsZWFyTWFzayA9IEdMX0NPTE9SX0JVRkZFUl9CSVQ7CisgICAgOjpnbEdldEZsb2F0dihH
TF9DT0xPUl9DTEVBUl9WQUxVRSwgY2xlYXJDb2xvcik7CisgICAgOjpnbENsZWFyQ29sb3IoMCwg
MCwgMCwgMCk7CisgICAgOjpnbEdldEJvb2xlYW52KEdMX0NPTE9SX1dSSVRFTUFTSywgY29sb3JN
YXNrKTsKKyAgICA6OmdsQ29sb3JNYXNrKEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RS
VUUpOworICAgIGlmIChtX2F0dHJzLmRlcHRoKSB7CisgICAgICAgIDo6Z2xHZXRGbG9hdHYoR0xf
REVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRlcHRoKTsKKyAgICAgICAgOjpnbENsZWFyRGVwdGhm
KDEpOworICAgICAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfREVQVEhfV1JJVEVNQVNLLCAmZGVwdGhN
YXNrKTsKKyAgICAgICAgOjpnbERlcHRoTWFzayhHTF9UUlVFKTsKKyAgICAgICAgY2xlYXJNYXNr
IHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7CisgICAgfQorICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwp
IHsKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfQ0xFQVJfVkFMVUUsICZjbGVh
clN0ZW5jaWwpOworICAgICAgICA6OmdsQ2xlYXJTdGVuY2lsKDApOworICAgICAgICA6OmdsR2V0
SW50ZWdlcnYoR0xfU1RFTkNJTF9XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigm
c3RlbmNpbE1hc2spKTsKKyAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlQs
IDB4ZmZmZmZmZmYpOworICAgICAgICBjbGVhck1hc2sgfD0gR0xfU1RFTkNJTF9CVUZGRVJfQklU
OworICAgIH0KKyAgICBpc1NjaXNzb3JFbmFibGVkID0gOjpnbElzRW5hYmxlZChHTF9TQ0lTU09S
X1RFU1QpOworICAgIDo6Z2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgaXNEaXRoZXJF
bmFibGVkID0gOjpnbElzRW5hYmxlZChHTF9ESVRIRVIpOworICAgIDo6Z2xEaXNhYmxlKEdMX0RJ
VEhFUik7CisKKyAgICA6OmdsQ2xlYXIoY2xlYXJNYXNrKTsKKworICAgIDo6Z2xDbGVhckNvbG9y
KGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3Jb
M10pOworICAgIDo6Z2xDb2xvck1hc2soY29sb3JNYXNrWzBdLCBjb2xvck1hc2tbMV0sIGNvbG9y
TWFza1syXSwgY29sb3JNYXNrWzNdKTsKKyAgICBpZiAobV9hdHRycy5kZXB0aCkgeworICAgICAg
ICA6OmdsQ2xlYXJEZXB0aGYoY2xlYXJEZXB0aCk7CisgICAgICAgIDo6Z2xEZXB0aE1hc2soZGVw
dGhNYXNrKTsKKyAgICB9CisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgeworICAgICAgICA6Omds
Q2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFy
YXRlKEdMX0ZST05ULCBzdGVuY2lsTWFzayk7CisgICAgfQorICAgIGlmIChpc1NjaXNzb3JFbmFi
bGVkKQorICAgICAgICA6OmdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgZWxzZQorICAg
ICAgICA6OmdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIGlmIChpc0RpdGhlckVuYWJs
ZWQpCisgICAgICAgIDo6Z2xFbmFibGUoR0xfRElUSEVSKTsKKyAgICBlbHNlCisgICAgICAgIDo6
Z2xEaXNhYmxlKEdMX0RJVEhFUik7CisKKyAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fYm91bmRGQk8pOworCisgICAg
OjpnbEZsdXNoKCk7Cit9CisKK0ludFNpemUgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVybmFs
RnJhbWVidWZmZXJTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZShtX2N1cnJlbnRX
aWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cHJl
cGFyZVRleHR1cmUoKQoreworICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKKyAgICAgICAgcmV0
dXJuOworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlh
cykgeworICAgICAgICAvLyBGSVhNRSA6IGltcGxlbWVudCBhbnRpYWxpYXMgZm9yIEdMRVMKKyAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKDApOworICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICA6
OmdsQ29weVRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0
LCAwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCAwKTsKKyAgICA6OmdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9ib3VuZFRleHR1cmUwKTsKKyAgICA6OmdsQWN0aXZl
VGV4dHVyZShtX2FjdGl2ZVRleHR1cmUpOworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJB
TUVCVUZGRVIsIG1fYm91bmRGQk8pOworICAgIDo6Z2xGaW5pc2goKTsKKyAgICBtX2xheWVyQ29t
cG9zaXRlZCA9IHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2ZVRleHR1
cmUoR0MzRGVudW0gdGV4dHVyZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBt
X2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKHRleHR1cmUp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQocHJv
Z3JhbSk7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBH
QzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEFTU0VSVChwcm9ncmFt
KTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmluZEF0dHJpYkxvY2F0aW9u
KHByb2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBi
dWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJpbmRCdWZmZXIo
dGFyZ2V0LCBidWZmZXIpOworfQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFt
ZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBmYm87CisgICAgaWYgKGJ1ZmZlcikK
KyAgICAgICAgZmJvID0gYnVmZmVyOworICAgIGVsc2UKKyAgICAgICAgZmJvID0gKG1fYXR0cnMu
YW50aWFsaWFzID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKKyAgICBpZiAoZmJvICE9IG1f
Ym91bmRGQk8pIHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIGZibyk7Cisg
ICAgICAgIG1fYm91bmRGQk8gPSBmYm87CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBy
ZW5kZXJidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJpbmRS
ZW5kZXJidWZmZXIodGFyZ2V0LCByZW5kZXJidWZmZXIpOworfQorCisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0
ZXh0dXJlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2FjdGl2ZVRl
eHR1cmUgJiYgdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCisgICAgICAgIG1fYm91bmRUZXh0dXJl
MCA9IHRleHR1cmU7CisgICAgOjpnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0Rj
bGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb24oR0Mz
RGVudW0gbW9kZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmxlbmRF
cXVhdGlvbihtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlv
blNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVS
R0IsIG1vZGVBbHBoYSk7Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5j
KEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKK30gICAgICAg
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNy
Y1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxw
aGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJsZW5kRnVuY1NlcGFy
YXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNp
emUsIEdDM0RlbnVtIHVzYWdlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUs
IGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRh
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCdWZmZXJTdWJEYXRhKHRh
cmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsKK30KKworR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0
M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0
YXJnZXQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKEdDM0RjbGFt
cGYgciwgR0MzRGNsYW1wZiBnLCBHQzNEY2xhbXBmIGIsIEdDM0RjbGFtcGYgYSkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbENsZWFyKG1hc2spOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbENsZWFyRGVwdGhmKGRlcHRoKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ2xlYXJTdGVuY2lsKHMpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVh
biBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBh
bHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxhdGZv
cm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisKKyAgICBpbnQgR0xzaGFkZXJUeXBlOworICAgIEFOR0xFU2hhZGVyVHlw
ZSBzaGFkZXJUeXBlOworCisgICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIFNIQURFUl9UWVBFLCAm
R0xzaGFkZXJUeXBlKTsKKyAgICAKKyAgICBpZiAoR0xzaGFkZXJUeXBlID09IFZFUlRFWF9TSEFE
RVIpCisgICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9WRVJURVg7CisgICAgZWxzZSBp
ZiAoR0xzaGFkZXJUeXBlID09IEZSQUdNRU5UX1NIQURFUikKKyAgICAgICAgc2hhZGVyVHlwZSA9
IFNIQURFUl9UWVBFX0ZSQUdNRU5UOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOyAvLyBJbnZh
bGlkIHNoYWRlciB0eXBlLgorCisgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJT
b3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hh
ZGVyKTsKKworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vj
b25kOworCisgICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CisgICAgU3RyaW5nIHNo
YWRlckluZm9Mb2c7CisKKyAgICBib29sIGlzVmFsaWQgPSBtX2NvbXBpbGVyLnZhbGlkYXRlU2hh
ZGVyU291cmNlKGVudHJ5LnNvdXJjZS51dGY4KCkuZGF0YSgpLCBzaGFkZXJUeXBlLCB0cmFuc2xh
dGVkU2hhZGVyU291cmNlLCBzaGFkZXJJbmZvTG9nKTsKKworICAgIGVudHJ5LmxvZyA9IHNoYWRl
ckluZm9Mb2c7CisgICAgZW50cnkuaXNWYWxpZCA9IGlzVmFsaWQ7CisKKyAgICBpZiAoIWlzVmFs
aWQpCisgICAgICAgIHJldHVybjsgLy8gU2hhZGVyIGRpZG4ndCB2YWxpZGF0ZSwgZG9uJ3QgbW92
ZSBmb3J3YXJkIHdpdGggY29tcGlsaW5nIHRyYW5zbGF0ZWQgc291cmNlICAgIAorCisgICAgaW50
IHRyYW5zbGF0ZWRTaGFkZXJMZW5ndGggPSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLmxlbmd0aCgp
OworCisgICAgY29uc3QgQ1N0cmluZyYgdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcgPSB0cmFuc2xh
dGVkU2hhZGVyU291cmNlLnV0ZjgoKTsKKyAgICBjb25zdCBjaGFyKiB0cmFuc2xhdGVkU2hhZGVy
UHRyID0gdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcuZGF0YSgpOworICAgIAorICAgIDo6Z2xTaGFk
ZXJTb3VyY2Uoc2hhZGVyLCAxLCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRyYW5zbGF0ZWRTaGFk
ZXJMZW5ndGgpOworICAgIAorICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7CisgICAgCisg
ICAgaW50IEdMQ29tcGlsZVN1Y2Nlc3M7CisgICAgCisgICAgOjpnbEdldFNoYWRlcml2KHNoYWRl
ciwgQ09NUElMRV9TVEFUVVMsICZHTENvbXBpbGVTdWNjZXNzKTsKKyAgICAKKyAgICAvLyBBU1NF
UlQgdGhhdCBBTkdMRSBnZW5lcmF0ZWQgR0xTTCB3aWxsIGJlIGFjY2VwdGVkIGJ5IE9wZW5HTAor
ICAgIEFTU0VSVChHTENvbXBpbGVTdWNjZXNzID09IEdMX1RSVUUpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZC
TyA9PSBtX211bHRpc2FtcGxlRkJPKSB7CisgICAgICAgIC8vIEZJWE1FIDogaW1wbGVtZW50IGFu
dGlhbGlhcyBjYXNlIGZvciBHTEVTCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQor
ICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwg
eSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYg
bV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7CisgICAgICAgIC8vIEZJWE1FIDogaW1w
bGVtZW50IGFudGlhbGlhcyBjYXNlIGZvciBHTEVTCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5
b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2F0dHJzLmFu
dGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgLy8g
RklYTUUgOiBpbXBsZW1lbnQgYW50aWFsaWFzIGNhc2UgZm9yIEdMRVMKKyAgICAgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICB9CisgICAgOjpnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIGlmIChtX2F0
dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAg
ICAgLy8gRklYTUUgOiBpbXBsZW1lbnQgYW50aWFsaWFzIGNhc2UgZm9yIEdMRVMKKyAgICAgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmN1
bGxGYWNlKEdDM0RlbnVtIG1vZGUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbEN1bGxGYWNlKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aEZ1
bmMoR0MzRGVudW0gZnVuYykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
RGVwdGhGdW5jKGZ1bmMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aE1hc2so
R0MzRGJvb2xlYW4gZmxhZykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
RGVwdGhNYXNrKGZsYWcpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdl
KEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcikKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsRGVwdGhSYW5nZWYoek5lYXIsIHpGYXIpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgQVNT
RVJUKHNoYWRlcik7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERldGFjaFNo
YWRlcihwcm9ncmFtLCBzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNh
YmxlKEdDM0RlbnVtIGNhcCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
RGlzYWJsZShjYXApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwg
R0MzRHNpemVpIGNvdW50KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xE
cmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVt
IHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8
R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZW5hYmxlKEdDM0RlbnVtIGNhcCkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsRW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZpbmlzaCgpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbEZpbmlzaCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpmbHVzaCgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEZsdXNo
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVm
ZmVydGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2ht
ZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0
YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEdD
M0RpbnQgbGV2ZWwpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEZyYW1l
YnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBs
ZXZlbCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyb250RmFjZShHQzNEZW51bSBt
b2RlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xGcm9udEZhY2UobW9k
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlwbWFwKEdDM0RlbnVt
IHRhcmdldCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2VuZXJhdGVN
aXBtYXAodGFyZ2V0KTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0
cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
IGluZm8pCit7CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIEdMaW50IG1heEF0dHJpYnV0ZVNpemUgPSAwOworICAgIDo6
Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAm
bWF4QXR0cmlidXRlU2l6ZSk7CisgICAgR0xjaGFyIG5hbWVbbWF4QXR0cmlidXRlU2l6ZV07IC8v
IEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9u
CisgICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKKyAgICBHTGludCBzaXplID0gMDsKKyAgICBH
TGVudW0gdHlwZSA9IDA7CisgICAgOjpnbEdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpbmRleCwg
bWF4QXR0cmlidXRlU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7CisgICAg
aWYgKCFuYW1lTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaW5mby5uYW1lID0g
U3RyaW5nKG5hbWUsIG5hbWVMZW5ndGgpOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5m
by5zaXplID0gc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKK2Jvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNE
dWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgbWF4VW5p
Zm9ybVNpemUgPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX1VO
SUZPUk1fTUFYX0xFTkdUSCwgJm1heFVuaWZvcm1TaXplKTsKKyAgICBHTGNoYXIgbmFtZVttYXhV
bmlmb3JtU2l6ZV07IC8vIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggaW5jbHVkZXMgbnVs
bCB0ZXJtaW5hdGlvbgorICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7CisgICAgR0xpbnQgc2l6
ZSA9IDA7CisgICAgR0xlbnVtIHR5cGUgPSAwOworICAgIDo6Z2xHZXRBY3RpdmVVbmlmb3JtKHBy
b2dyYW0sIGluZGV4LCBtYXhVbmlmb3JtU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwg
bmFtZSk7CisgICAgaWYgKCFuYW1lTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aW5mby5uYW1lID0gU3RyaW5nKG5hbWUsIG5hbWVMZW5ndGgpOworICAgIGluZm8udHlwZSA9IHR5
cGU7CisgICAgaW5mby5zaXplID0gc2l6ZTsKKworICAgIC8vIEZJWE1FIDogIlswXSIgaXMgYWRk
ZWQgYXQgdGhlIGVuZCBvZiBpbmZvLm5hbWUgaW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRB
Y3RpdmVVbmlmb3JtKCkgCisgICAgLy8gd2hlbiBpc0dMRVMyQ29tcGxpYW50IGlzIG9ubHkgZmFs
c2UuIEkgY2FuJ3QgdW5kZXJzdGFuZCB0aGUgcmVhc29uLiAKKyAgICAvLyBJIGFkZCAiWzBdIiBo
ZXJlIHRvIGF2b2lkIGZhbGluZyB3ZWJnbCBjb25mb3JtYW5jZSB0ZXN0KGdldC1hY3RpdmV0ZXN0
Lmh0bWwpCisgICAgLy8gYnV0IGlmIGl0IG1ha2VzIHNvbWV0aGluZyB3cm9uZyBsYXRlciwgcmVt
b3ZlIGZvbGxvd2luZyBsaW5lcyAKKyAgICBpZiAoaW5mby5zaXplID4gMSAmJiAhaW5mby5uYW1l
LmVuZHNXaXRoKCJbMF0iKSkgCisgICAgICAgIGluZm8ubmFtZS5hcHBlbmQoIlswXSIpOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRhY2hlZFNo
YWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQsIEdDM0Rz
aXplaSogY291bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNoYWRlcnMpCit7CisgICAgaWYgKCFwcm9n
cmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRB
dHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKK30KKwor
aW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAg
ICAgIHJldHVybiAtMTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6
OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwor
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRl
eHRBdHRyaWJ1dGVzKCkKK3sKKyAgICByZXR1cm4gbV9hdHRyczsKK30KKworR0MzRGVudW0gR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEVycm9yKCkKK3sKKyAgICBpZiAobV9zeW50aGV0aWNFcnJvcnMu
c2l6ZSgpID4gMCkgeworICAgICAgICBMaXN0SGFzaFNldDxHQzNEZW51bT46Oml0ZXJhdG9yIGl0
ZXIgPSBtX3N5bnRoZXRpY0Vycm9ycy5iZWdpbigpOworICAgICAgICBHQzNEZW51bSBlcnIgPSAq
aXRlcjsKKyAgICAgICAgbV9zeW50aGV0aWNFcnJvcnMucmVtb3ZlKGl0ZXIpOworICAgICAgICBy
ZXR1cm4gZXJyOworICAgIH0KKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVy
biA6OmdsR2V0RXJyb3IoKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTdHJp
bmcoR0MzRGVudW0gbmFtZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1
cm4gU3RyaW5nKChjb25zdCBjaGFyKikgOjpnbEdldFN0cmluZyhuYW1lKSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xIaW50KHRhcmdldCwgbW9kZSk7
Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcihQbGF0Zm9ybTNE
T2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc0J1ZmZl
cihidWZmZXIpOworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVk
KEdDM0RlbnVtIGNhcCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4g
OjpnbElzRW5hYmxlZChjYXApOworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6
aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQoreworICAgIGlmICgh
ZnJhbWVidWZmZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7Cit9
CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0oUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc1Byb2dy
YW0ocHJvZ3JhbSk7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1JlbmRl
cmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBpZiAoIXJlbmRl
cmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOworfQor
CitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNTaGFkZXIoUGxhdGZvcm0zRE9iamVj
dCBzaGFkZXIpCit7CisgICAgaWYgKCFzaGFkZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
KworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNTaGFkZXIoc2hh
ZGVyKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZShQbGF0
Zm9ybTNET2JqZWN0IHRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpn
bElzVGV4dHVyZSh0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGluZVdp
ZHRoKEdDM0RmbG9hdCB3aWR0aCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6
OmdsTGluZVdpZHRoKHdpZHRoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGlua1By
b2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsTGlua1Byb2dyYW0ocHJvZ3JhbSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1l
LCBHQzNEaW50IHBhcmFtKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xQ
aXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpw
b2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsUG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRz
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCit7CisgICAgLy8gRklYTUU6IHJlbW92ZSB0
aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwK
KyAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9y
ZSByZWFkaW5nIHBpeGVscy4KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRmx1
c2goKTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRp
c2FtcGxlRkJPKSB7CisgICAgICAgIC8vIEZJWE1FIDogaW1wbGVtZW50IGFudGlhbGlhcyBjYXNl
IGZvciBHTEVTCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorICAgIDo6Z2xSZWFk
UGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisgICAgaWYg
KG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewor
ICAgICAgICAvLyBGSVhNRSA6IGltcGxlbWVudCBhbnRpYWxpYXMgY2FzZSBmb3IgR0xFUworICAg
ICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBub3Qg
aW1wbGVtZW50ZWQgb24gZGVza3RvcCBPcGVuR0wuIFdlIG5lZWQgdG8gaGF2ZSBpZmRlZnMgZm9y
IHRoZSBkaWZmZXJlbnQgR0wgdmFyaWFudHMKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICAvLzo6Z2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU2FtcGxlQ292ZXJhZ2UodmFs
dWUsIGludmVydCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IoR0MzRGlu
dCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBBU1NFUlQoc2hh
ZGVyKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgU2hhZGVyU291cmNlRW50
cnkgZW50cnk7CisKKyAgICBlbnRyeS5zb3VyY2UgPSBzdHJpbmc7CisKKyAgICBtX3NoYWRlclNv
dXJjZU1hcC5zZXQoc2hhZGVyLCBlbnRyeSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTdGVuY2lsRnVuYyhmdW5jLCBy
ZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuY1NlcGFy
YXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBt
YXNrKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTdGVuY2lsRnVuY1Nl
cGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgOjpnbFN0ZW5jaWxNYXNrKG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUo
ZmFjZSwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcChHQzNE
ZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbFN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBm
YWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFN0ZW5jaWxPcFNlcGFyYXRlKGZhY2Us
IGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFBh
cmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHZhbHVl
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKHRh
cmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFy
YW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHZhbHVlKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKHRhcmdl
dCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFm
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJh
eSwgR0MzRHNpemVpIHNpemUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bFVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTJmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZs
b2F0IHYxKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMmYo
bG9jYXRpb24sIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0y
ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCit7
CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwg
YXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwg
djEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAvLyBG
SVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm00Zihsb2NhdGlvbiwg
djAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQorewor
ICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUsIGFy
cmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RpbnQgdjApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bFVuaWZvcm0xaShsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6
ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTFpdihsb2Nh
dGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
MmkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3Ro
IG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xVbmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBH
QzNEaW50IHYxLCBHQzNEaW50IHYyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBH
QzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVs
dGlwbGUgb2YgMworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtM2l2
KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBHQzNEaW50
IHYyLCBHQzNEaW50IHYzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xV
bmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiBhcnJheSwgR0Mz
RHNpemVpIHNpemUpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRp
cGxlIG9mIDQKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTRpdihs
b2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtTWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0Mz
RGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBu
ZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICA6OmdsVW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6
ZWkgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUg
b2YgOQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtTWF0cml4M2Z2
KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQoreworICAgIC8vIEZJ
WE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNgorICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFu
c3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbShQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbFVzZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgQVNTRVJU
KHByb2dyYW0pOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZhbGlkYXRl
UHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0
cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxv
YXQqIGFycmF5KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhB
dHRyaWIxZnYoaW5kZXgsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVy
dGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZihpbmRl
eCwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2
KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5KTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0Rm
bG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZs
b2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXpl
LCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRl
LCBHQzNEaW50cHRyIG9mZnNldCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6
OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3Ry
aWRlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZz
ZXQpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFudihHQzNEZW51bSBwbmFt
ZSwgR0MzRGJvb2xlYW4qIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xHZXRCb29sZWFudihwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
R2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFs
dWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldEZsb2F0dihwbmFt
ZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0
dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoYXR0YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpCisg
ICAgICAgIGF0dGFjaG1lbnQgPSBERVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVOQ0lMX0FUVEFD
SE1FTlQsIGVpdGhlciB3b3Jrcy4KKyAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFs
dWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldEludGVnZXJ2KHBu
YW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdihQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dy
YW0sIHBuYW1lLCB2YWx1ZSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJv
Z3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9n
cmFtKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50IGxlbmd0aDsKKyAg
ICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7
CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiAiIjsKKworICAgIEdMc2l6ZWkgc2l6
ZTsKKyAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhsZW5ndGgpOworCisg
ICAgOjpnbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0sIGxlbmd0aCwgJnNpemUsIGluZm8pOwor
ICAgIFN0cmluZyBzKGluZm8pOworICAgIGZhc3RGcmVlKGluZm8pOworICAgIHJldHVybiBzOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYo
dGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRT
aGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQq
IHZhbHVlKQoreworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisKKyAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6
aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIAor
ICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIERFTEVURV9TVEFUVVM6CisgICAgY2FzZSBT
SEFERVJfVFlQRToKKyAgICAgICAgLy8gTGV0IE9wZW5HTCBoYW5kbGUgdGhlc2UuCisgICAgICAg
IDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIHBuYW1lLCB2YWx1ZSk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAKKyAgICBjYXNlIENPTVBJTEVfU1RBVFVTOgorICAgICAgICBpZiAocmVzdWx0ID09
IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7CisgICAgICAgICAgICAoKnZhbHVlKSA9IHN0YXRp
Y19jYXN0PGludD4oZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICAoKnZhbHVlKSA9IHN0YXRpY19jYXN0PGludD4ocmVzdWx0LT5zZWNvbmQu
aXNWYWxpZCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIElORk9fTE9HX0xF
TkdUSDoKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgewor
ICAgICAgICAgICAgKCp2YWx1ZSkgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAoKnZhbHVlKSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVyKS5s
ZW5ndGgoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgU0hBREVSX1NPVVJD
RV9MRU5HVEg6CisgICAgICAgICgqdmFsdWUpID0gZ2V0U2hhZGVyU291cmNlKHNoYWRlcikubGVu
Z3RoKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihJTlZBTElEX0VOVU0pOworICAgIH0KK30KKworU3RyaW5nIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQor
eworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAg
ICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3Ig
cmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworCisgICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgIHJldHVybiAiIjsKKworICAg
ICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOworCisgICAgIGlmIChl
bnRyeS5pc1ZhbGlkKSB7CisgICAgICAgICBHTGludCBsZW5ndGg7CisgICAgICAgICA6OmdsR2V0
U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOworICAgICAgICAg
aWYgKCFsZW5ndGgpCisgICAgICAgICAgICAgcmV0dXJuICIiOworCisgICAgICAgICBHTHNpemVp
IHNpemU7CisgICAgICAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhsZW5n
dGgpOworCisgICAgICAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNp
emUsIGluZm8pOworCisgICAgICAgICBTdHJpbmcgcyhpbmZvKTsKKyAgICAgICAgIGZhc3RGcmVl
KGluZm8pOworICAgICAgICAgcmV0dXJuIHM7CisgICAgIH0gZWxzZQorICAgICAgICAgcmV0dXJu
IGVudHJ5LmxvZzsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3Vy
Y2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwg
U2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5m
aW5kKHNoYWRlcik7CisKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgp
KQorICAgICAgICByZXR1cm4gIiI7CisKKyAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQuc291cmNl
OworfQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5h
bWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVy
aXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldFRleFBhcmFtZXRlcml2KHRhcmdl
dCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9y
bWZ2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0
KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VW5pZm9y
bWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFVuaWZvcm1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xHZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKworR0MzRGludCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsR2V0VW5pZm9ybUxvY2F0aW9u
KHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0
VmVydGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFt
ZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bEdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwgdmFsdWUpOworfQorCitHQzNEc2l6ZWlw
dHIgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRl
eCwgR0MzRGVudW0gcG5hbWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBH
THZvaWQqIHBvaW50ZXIgPSAwOworICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRl
eCwgcG5hbWUsICZwb2ludGVyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0MzRHNpemVpcHRy
PihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7Cit9CisKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2
b2lkKiBwaXhlbHMpCit7CisgICAgaWYgKHdpZHRoICYmIGhlaWdodCAmJiAhcGl4ZWxzKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdDM0RlbnVtIG9w
ZW5HTEludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7CisgICAgaWYgKHR5cGUgPT0gR0xf
RkxPQVQpIHsKKyAgICAgICAgcHJpbnRmKCJbc2hpdmFtaWRvd10gJXMgKCVzICVkKVxuIiwgX19G
VU5DVElPTl9fLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgICBpZiAoZm9ybWF0ID09IEdM
X1JHQkEpCisgICAgICAgICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdMX1JHQkE7CisgICAg
ICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9SR0IpCisgICAgICAgICAgICBvcGVuR0xJbnRlcm5h
bEZvcm1hdCA9IEdMX1JHQjsKKyAgICB9CisKKyAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCBvcGVuR0xJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQs
IHR5cGUsIHBpeGVscyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
aW50IHhvZmYsIEdDM0RpbnQgeW9mZiwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQg
dG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1
ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZQorICAgIDo6Z2xUZXhTdWJJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwgcGl4ZWxzKTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQg
byA9IDA7CisgICAgZ2xHZW5CdWZmZXJzKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKworUGxh
dGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIoKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBvID0gMDsKKyAgICBnbEdlbkZy
YW1lYnVmZmVycygxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK1BsYXRmb3JtM0RPYmplY3Qg
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIHJldHVybiBnbENyZWF0ZVByb2dyYW0oKTsKK30KKworUGxhdGZvcm0zRE9i
amVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgbyA9IDA7CisgICAgZ2xHZW5SZW5kZXJidWZm
ZXJzKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5U
X1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsKK30KKwor
UGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSgpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuVGV4
dHVyZXMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZy
YW1lYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsRGVsZXRlRnJh
bWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVu
ZGVyYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsRGVsZXRlUmVu
ZGVyYnVmZmVycygxLCAmcmVuZGVyYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRl
eHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvcihH
QzNEZW51bSBlcnJvcikKK3sKKyAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrQ29udGV4dENoYW5nZWQoKQoreworICAgIG1f
bGF5ZXJDb21wb3NpdGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1h
cmtMYXllckNvbXBvc2l0ZWQoKQoreworICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gdHJ1ZTsKK30K
KworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9sYXllckNvbXBvc2l0ZWQ7Cit9CisKK0V4dGVuc2lvbnMzRCogR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQoreworICAgIGlmICghbV9leHRlbnNpb25zKQorICAg
ICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0ZW5zaW9uczNET3BlbkdMKHRoaXMp
KTsKKyAgICByZXR1cm4gbV9leHRlbnNpb25zLmdldCgpOworfQorCit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MDM5NikKKysrIFNv
dXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBA
CisyMDExLTA3LTA1ICBDaGFuZ1Nlb2sgT2ggIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBJbXBsZW1l
bnQgRUdMIGJhY2tlbmQgZm9yIFdlYkdMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01OTA2NAorCisgICAgICAgIEluY2x1ZGUgRUdMIGxpYnJhcnkgdG8g
bGluayB3aGVuIGVnbC1iYWNrZW5kIGlzIGNob29zZW4uCisKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5hbToKKwogMjAxMS0wNy0wMSAgSm9vbmUgSHVyICA8am9vbmUuaHVyQGNvbGxhYm9yYS5jby51
az4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0
ay9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gOTAzOTYpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9H
TlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsNyBAQCBsaWJ3ZWJraXRn
dGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPCiAJJCh3ZWJjb3JlX2xkZmxhZ3MpIFwKIAkk
KENBSVJPX0xJQlMpIFwKIAkkKENPVkVSQUdFX0xERkxBR1MpIFwKKwkkKEVHTF9MSUJTKSBcCiAJ
JChFTkNIQU5UX0xJQlMpIFwKIAkkKEZSRUVUWVBFX0xJQlMpIFwKIAkkKEdBSUxfTElCUykgXApJ
bmRleDogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuY3Bw
CShyZXZpc2lvbiA5MDM5NikKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJz
ZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3Niw3ICs4NzYsNyBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRfd2ViX3NldHRpbmdzX2NsYXNzX2luCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigiZW5hYmxlLXdlYmdsIiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkVuYWJs
ZSBXZWJHTCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXygiV2hldGhlciBXZWJHTCBjb250ZW50IHNob3VsZCBiZSByZW5kZXJlZCIp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmxhZ3MpKTsKIAogICAgIC8qKgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100076</attachid>
            <date>2011-07-07 22:47:15 -0700</date>
            <delta_ts>2011-07-13 22:35:16 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>P59064.patch</filename>
            <type>text/plain</type>
            <size>77212</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDkwNjEx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDct
MDcgIENoYW5nU2VvayBPaCAgPHNoaXZhbWlkb3dAZ21haWwuY29tPgorCisgICAgICAgIFtHVEtd
IFN1cHBvcnQgRUdMIGJhY2tlbmQgZm9yIFdlYkdMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBjaG9vc2Ug
Z2wtYmFja2VuZC4KKworICAgICAgICAqIGNvbmZpZ3VyZS5hYzoKKwogMjAxMS0wNy0wNiAgR3l1
eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIEFk
ZCBGdWxsc2NyZWVuIEFQSSBmZWF0dXJlCkluZGV4OiBjb25maWd1cmUuYWMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gY29uZmlndXJlLmFjCShyZXZpc2lvbiA5MDYxMSkKKysrIGNvbmZpZ3VyZS5hYwkod29ya2lu
ZyBjb3B5KQpAQCAtMzc4LDEyICszNzgsMzYgQEAgQUNfQVJHX0VOQUJMRSh3ZWJnbCwKICAgICAg
ICAgICAgICAgW10sIFtlbmFibGVfd2ViZ2w9Im5vIl0pCiBBQ19NU0dfUkVTVUxUKFskZW5hYmxl
X3dlYmdsXSkKIAorIyBkZXRlcm1pbmUgdGhlIEdMIGJhY2tlbmQKK0FDX01TR19DSEVDS0lORyhb
dGhlIEdMIGJhY2tlbmQgdG8gdXNlXSkKK0FDX0FSR19XSVRIKGdsX2JhY2tlbmQsCisgICAgICAg
ICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWdsLWJhY2tlbmQ9QDw6QGdseC9lZ2xAOj5AXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtTZWxlY3QgZ2wgYmFja2VuZCBbZGVmYXVsdD1n
bHhdXSksCisgICAgICAgICAgICBbXSxbd2l0aF9nbF9iYWNrZW5kPSJnbHgiXSkKKworY2FzZSAi
JHdpdGhfZ2xfYmFja2VuZCIgaW4KKyAgICAgZ2x4fGVnbCkgOzsKKyAgICAgKikgQUNfTVNHX0VS
Uk9SKFtJbnZhbGlkIGdsIGJhY2tlbmQ6IG11c3QgYmUgZ2x4LCBvciBlZ2wuXSkgOzsKK2VzYWMK
KworQUNfTVNHX1JFU1VMVChbJHdpdGhfZ2xfYmFja2VuZF0pCisKIGlmIHRlc3QgIiRlbmFibGVf
d2ViZ2wiID0gInllcyI7IHRoZW4KLSAgICBBQ19DSEVDS19IRUFERVJTKFtHTC9nbC5oXSwgW10s
IEFDX01TR19FUlJPUihbT3BlbkdMIGhlYWRlciBub3QgZm91bmRdKSkKLSAgICBBQ19DSEVDS19I
RUFERVJTKFtHTC9nbHguaF0sIFtdLCBBQ19NU0dfRVJST1IoW0dMWCBoZWFkZXIgbm90IGZvdW5k
XSkpCi0gICAgT1BFTkdMX0xJQlM9LWxHTAorICAgIGNhc2UgIiR3aXRoX2dsX2JhY2tlbmQiIGlu
CisgICAgICAgIGdseCkgQUNfQ0hFQ0tfSEVBREVSUyhbR0wvZ2wuaF0sIFtdLCBBQ19NU0dfRVJS
T1IoW09wZW5HTCBoZWFkZXIgbm90IGZvdW5kXSkpCisgICAgICAgICAgICAgQUNfQ0hFQ0tfSEVB
REVSUyhbR0wvZ2x4LmhdLCBbXSwgQUNfTVNHX0VSUk9SKFtHTFggaGVhZGVyIG5vdCBmb3VuZF0p
KQorICAgICAgICAgICAgIE9QRU5HTF9MSUJTPS1sR0wKKyAgICAgICAgICAgICBBQ19TVUJTVChb
T1BFTkdMX0xJQlNdKQorICAgICAgICAgICAgIDs7CisgICAgICAgIGVnbCkgQUNfQ0hFQ0tfSEVB
REVSUyhbR0xFUzIvZ2wyLmhdLCBbXSwgQUNfTVNHX0VSUk9SKFtPcGVuR0wgRVMgaGVhZGVyIG5v
dCBmb3VuZF0pKQorICAgICAgICAgICAgIEFDX0NIRUNLX0hFQURFUlMoW0VHTC9lZ2wuaF0sIFtd
LCBBQ19NU0dfRVJST1IoW0VHTCBoZWFkZXIgbm90IGZvdW5kXSkpCisgICAgICAgICAgICAgT1BF
TkdMX0xJQlM9LWxHTEVTdjIKKyAgICAgICAgICAgICBFR0xfTElCUz0tbEVHTAorICAgICAgICAg
ICAgIEFDX1NVQlNUKFtPUEVOR0xfTElCU10pCisgICAgICAgICAgICAgQUNfU1VCU1QoW0VHTF9M
SUJTXSkKKyAgICAgICAgICAgICA7OworICAgIGVzYWMKIGZpCi1BQ19TVUJTVChbT1BFTkdMX0xJ
QlNdKQogCiAjIGNoZWNrIHdoZXRoZXIgdG8gZW5hYmxlIGNoYW5uZWwgbWVzc2FnaW5nIHN1cHBv
cnQKIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgSFRNTDUgQ2hhbm5lbCBNZXNz
YWdpbmcgc3VwcG9ydF0pCkBAIC0xMTM1LDYgKzExNTksMTAgQEAgQU1fQ09ORElUSU9OQUwoW1VT
RV9HTElCX1VOSUNPREVdLCBbdGVzdAogQU1fQ09ORElUSU9OQUwoW1VTRV9GUkVFVFlQRV0sIFt0
ZXN0ICIkd2l0aF9mb250X2JhY2tlbmQiID0gImZyZWV0eXBlIl0pCiBBTV9DT05ESVRJT05BTChb
VVNFX1BBTkdPXSwgW3Rlc3QgIiR3aXRoX2ZvbnRfYmFja2VuZCIgPSAicGFuZ28iXSkKIAorIyBG
b250IGJhY2tlbmQgY29uZGl0aW9uYWxzCitBTV9DT05ESVRJT05BTChbVVNFX0dMWF0sIFt0ZXN0
ICIkd2l0aF9nbF9iYWNrZW5kIiA9ICJnbHgiXSkKK0FNX0NPTkRJVElPTkFMKFtVU0VfRUdMXSwg
W3Rlc3QgIiR3aXRoX2dsX2JhY2tlbmQiID0gImVnbCJdKQorCiAjIEdTdHJlYW1lciBmZWF0dXJl
IGNvbmRpdGlvbmFsCiBBTV9DT05ESVRJT05BTChbVVNFX0dTVFJFQU1FUl0sIFt0ZXN0ICIkaGF2
ZV9nc3RyZWFtZXIiID0gInllcyJdKQogCkBAIC0xMjQ5LDYgKzEyNzcsNyBAQCBCdWlsZCBjb25m
aWd1cmF0aW9uOgogIENvZGUgY292ZXJhZ2Ugc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogJGVuYWJsZV9jb3ZlcmFnZQogIFVuaWNvZGUgYmFja2VuZCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHdpdGhfdW5pY29kZV9iYWNrZW5k
CiAgRm9udCBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiAkd2l0aF9mb250X2JhY2tlbmQKKyBHTCBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR3aXRoX2dsX2JhY2tlbmQKICBPcHRpbWl6ZWQg
bWVtb3J5IGFsbG9jYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVf
ZmFzdF9tYWxsb2MKIEZlYXR1cmVzOgogIDNEIFJlbmRlcmluZyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogJGVuYWJsZV8zZF9yZW5kZXJpbmcKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDkwNjExKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkwIEBACisyMDExLTA3LTA3ICBDaGFuZ1Nlb2sgT2ggIDxz
aGl2YW1pZG93QGdtYWlsLmNvbT4KKworICAgICAgICBbR1RLXSBTdXBwb3J0IEVHTCBiYWNrZW5k
IGZvciBXZWJHTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTkwNjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgdGhyZWUgZmlsZXMgbmV3bHkgZm9yIGVnbC1iYWNrZW5kLiBUaGV5IGhhdmUgQVBJcyBi
YXNlZCBvbiBFR0wgJiBHTEVTIGludGVyZmFjZS4KKyAgICAgICAgQW5kIG1vZGlmeSBHTlVtYWtl
ZmlsZSB0byBjaG9vc2UgcHJvcGVyIGNvbXBpbGUgdGFyZ2V0cyBhY2NvcmRpbmcgdG8gZ2wtYmFj
a2VuZCB3aGljaCBjb3VsZCBiZSBlZ2wgb3IgZ2x4LgorCisgICAgICAgIE5vIHRlc3QgcmVxdWly
ZWQgbmV3bHkuCisgICAgICAgIFdlIGNvdWxkIHZlcmlmeSB0aGlzIGZ1bmN0aW9uYWxpdHkKKwor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgYnVpbGQtZmxhZ3MgbGlrZSBXVEZfVVNFX0dM
WCwgV1RGX1VTRV9FR0wuCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQ2hvb3NlIGNv
bXBpbGUgdGFyZ2V0IGZpbGUgdG8gbWVldCBnbC1iYWNrZW5kLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL2VnbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL2VnbC9HcmFwaGljc0NvbnRleHQzREd0ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvZWdsL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKHNoYXJlZERpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6YWN0
aXZlR3JhcGhpY3NDb250ZXh0cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjphZGRBY3RpdmVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVtb3ZlQWN0aXZlR3JhcGhpY3NDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNsZWFudXBBY3Rp
dmVDb250ZXh0c0F0RXhpdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6Y3JlYXRlUGJ1ZmZlckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6Y3JlYXRlUGl4bWFwQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6On5HcmFwaGljc0Nv
bnRleHQzREludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnJlc2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldElu
dGVybmFsRnJhbWVidWZmZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6YWN0aXZlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
YXR0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5k
QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJp
bmRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFt
ZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZFJlbmRl
cmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kQ29sb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmNsZWFyU3RlbmNpbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Y29sb3JNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb21w
aWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4
SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1
YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmN1bGxGYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aEZ1bmMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6ZW5hYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjplbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmbHVzaCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVy
VGV4dHVyZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlwbWFw
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVkU2hhZGVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRy
aWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpoaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjppc0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojppc1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVu
ZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsaW5lV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6cG9seWdvbk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3Rl
bmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
c3RlbmNpbE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5j
aWxNYXNrU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0
ZW5jaWxPcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9w
U2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFt
ZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRl
cmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFp
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTRpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtNGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1c2VQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJp
YjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIx
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJm
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFudik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2cpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpzeW50aGVzaXplR0xFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6bWFya0NvbnRleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMpOgorCiAyMDExLTA3LTA3ICBFbWlsIEEgRWtsdW5k
ICA8ZWFlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBTd2l0Y2ggSGl0VGVzdFJlc3VsdCB0byB0
byBuZXcgbGF5b3V0IHR5cGVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gOTA2
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAt
MTI4LDcgKzEyOCw3IEBAIHdlYmNvcmVndGtfY3BwZmxhZ3MgKz0gXAogCS1JJChzcmNkaXIpL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlCiBlbmRpZiAjIEVORCBVU0Vf
RlJFRVRZUEUKIAotIyAtLS0KKyMgLS0KICMgUGFuZ28gZm9udCBiYWNrZW5kCiAjIC0tLQogaWYg
VVNFX1BBTkdPCkBAIC0xMzcsNiArMTM3LDIwIEBAIHdlYmNvcmVndGtfY3BwZmxhZ3MgKz0gXAog
CS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvCiBlbmRp
ZiAjIEVORCBVU0VfUEFOR08KIAorIyAtLQorIyBHTFggZ2wgYmFja2VuZAorIyAtLS0KK2lmIFVT
RV9HTFgKK3dlYmNvcmVndGtfY3BwZmxhZ3MgKz0gLURXVEZfVVNFX0dMWD0xCitlbmRpZiAjIEVO
RCBVU0VfR0xYCisKKyMgLS0KKyMgRUdMIGdsIGJhY2tlbmQKKyMgLS0tCitpZiBVU0VfRUdMCit3
ZWJjb3JlZ3RrX2NwcGZsYWdzICs9IC1EV1RGX1VTRV9FR0w9MQorZW5kaWYgIyBFTkQgVVNFX0VH
TAorCiAjIC0tLS0KICMgSFRNTCBEZXRhaWxzIEVsZW1lbnQKICMgLS0tLQpJbmRleDogU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA5MDYxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3NDAsMTQgKzQ3NDAsMjgg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvRHJhd2luZ0J1ZmZlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9EcmF3aW5nQnVmZmVyR3RrLmNwcCBcCisJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wu
aAorZW5kaWYgICMgRU5EIEVOQUJMRV9XRUJHTAorCisjIC0tLS0KKyMgT3BlbkdMIGJhY2tlbmQK
KyMgLS0tLQoraWYgVVNFX0dMWAord2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RHdGsuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0Nv
bnRleHQzREludGVybmFsLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKLWVuZGlm
ICAjIEVORCBFTkFCTEVfV0VCR0wKK2VuZGlmICAjIEVORCBVU0VfR0xYCisKK2lmIFVTRV9FR0wK
K3dlYmNvcmVfc291cmNlcyArPSBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL2VnbC9HcmFwaGljc0NvbnRleHQzREd0ay5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9lZ2wvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTEVTLmNwcAorZW5kaWYgICMgRU5EIFVTRV9HTFgKIAogIyAtLS0KICMgTUhUTUwgc3VwcG9y
dApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oCShyZXZpc2lvbiA5MDYxMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQz
REludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDkgKzIwLDE2IEBACiAjaWZuZGVmIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWxfaAogI2RlZmluZSBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsX2gKIAorI2lmIFVTRShFR0wpCit0eXBlZGVmIHZvaWQqIEVHTENvbmZpZzsKK3R5cGVkZWYg
dm9pZCogRUdMQ29udGV4dDsKK3R5cGVkZWYgdm9pZCogRUdMRGlzcGxheTsKK3R5cGVkZWYgdm9p
ZCogRUdMU3VyZmFjZTsKKyNlbHNlCiB0eXBlZGVmIHN0cnVjdCBfX0dMWGNvbnRleHRSZWMgKkdM
WENvbnRleHQ7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgR0xYUGJ1ZmZlcjsKIHR5cGVkZWYgdW5z
aWduZWQgbG9uZyBHTFhQaXhtYXA7CisjZW5kaWYKIHR5cGVkZWYgdW5zaWduZWQgY2hhciBHTHVi
eXRlOwogdHlwZWRlZiB1bnNpZ25lZCBsb25nIFBpeG1hcDsKIApAQCAtMzgsMTkgKzQ1LDMzIEBA
IGNsYXNzIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwgewogCiAgICAgcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CisjaWYgVVNFKEVHTCkKKyAgICBzdGF0aWMg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCogY3JlYXRlUGJ1ZmZlckNvbnRleHQoRUdMRGlzcGxh
eSk7CisgICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwqIGNyZWF0ZVBpeG1hcENv
bnRleHQoRUdMRGlzcGxheSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChFR0xEaXNw
bGF5LCBFR0xDb250ZXh0LCBFR0xTdXJmYWNlKTsKKyAgICBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsKEVHTERpc3BsYXksIEVHTENvbnRleHQsIFBpeG1hcCwgRUdMU3VyZmFjZSk7CisjZWxzZQog
ICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBjcmVhdGVQYnVmZmVyQ29udGV4
dCgpOwogICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBjcmVhdGVQaXhtYXBD
b250ZXh0KCk7CiAgICAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChHTFhDb250ZXh0LCBHTFhQ
YnVmZmVyKTsKICAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdMWENvbnRleHQsIFBpeG1h
cCwgR0xYUGl4bWFwKTsKKyNlbmRpZgogCiAgICAgc3RhdGljIHZvaWQgYWRkQWN0aXZlR3JhcGhp
Y3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKik7CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlQWN0
aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKik7CiAgICAgc3RhdGljIHZvaWQg
Y2xlYW51cEFjdGl2ZUNvbnRleHRzQXRFeGl0KCk7CiAKKyNpZiBVU0UoRUdMKQorICAgIEVHTENv
bnRleHQgbV9jb250ZXh0OworICAgIEVHTERpc3BsYXkgbV9kaXNwbGF5OworICAgIEVHTFN1cmZh
Y2UgbV9wYnVmZmVyU3VyZmFjZTsKKyAgICBFR0xTdXJmYWNlIG1fcGl4bWFwU3VyZmFjZTsKKyNl
bHNlCiAgICAgR0xYQ29udGV4dCBtX2NvbnRleHQ7CiAgICAgR0xYUGJ1ZmZlciBtX3BidWZmZXI7
Ci0gICAgUGl4bWFwIG1fcGl4bWFwOwogICAgIEdMWFBpeG1hcCBtX2dseFBpeG1hcDsKKyNlbmRp
ZgorICAgIFBpeG1hcCBtX3BpeG1hcDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9lZ2wvR3JhcGhpY3NDb250ZXh0M0RHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9lZ2wvR3JhcGhpY3ND
b250ZXh0M0RHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL2VnbC9HcmFwaGljc0NvbnRleHQzREd0ay5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICog
Q29weXJpZ2h0IChDKSAyMDExIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+Cisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgorCisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaCIKKyNpbmNsdWRlIDxHTEVTMi9n
bDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKyNpbmNsdWRlIDx3dGYvTm90Rm91bmQu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1Bhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUo
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQorewor
ICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCByZW5k
ZXJpbmcgZGlyZWN0bHkgdG8gdGhlIEhvc3RXaW5kb3cuCisgICAgaWYgKHJlbmRlclN0eWxlID09
IFJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQorICAgICAgICByZXR1cm4gMDsKKworICAgIE93
blB0cjxHcmFwaGljc0NvbnRleHQzREludGVybmFsPiBpbnRlcm5hbCA9IEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmNyZWF0ZSgpOworICAgIGlmICghaW50ZXJuYWwpCisgICAgICAgIHJldHVy
biAwOworCisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYo
bmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3csIGZhbHNlKSk7Cisg
ICAgY29udGV4dC0+bV9pbnRlcm5hbCA9IGludGVybmFsLnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
Y29udGV4dC5yZWxlYXNlKCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRl
eHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93
KiwgYm9vbCkKKyAgICA6IG1fY3VycmVudFdpZHRoKDApCisgICAgLCBtX2N1cnJlbnRIZWlnaHQo
MCkKKyAgICAsIG1faXNSZXNvdXJjZVNhZmUoZmFsc2UpCisgICAgLCBtX2F0dHJzKGF0dHJpYnV0
ZXMpCisgICAgLCBtX3RleHR1cmUoMCkKKyAgICAsIG1fZmJvKDApCisgICAgLCBtX2RlcHRoU3Rl
bmNpbEJ1ZmZlcigwKQorICAgICwgbV9ib3VuZEZCTygwKQorICAgICwgbV9tdWx0aXNhbXBsZUZC
TygwKQorICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQorICAgICwgbV9t
dWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCit7CisgICAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6YWRkQWN0aXZlR3JhcGhpY3NDb250ZXh0KHRoaXMpOworCisgICAgdmFsaWRhdGVBdHRyaWJ1
dGVzKCk7CisKKyAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgorICAgIDo6
Z2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgbV90ZXh0dXJlKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgOjpnbFRleFBhcmFtZXRl
cmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAg
IDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9D
TEFNUF9UT19FREdFKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIDApOworCisgICAgLy8gQ3JlYXRlIGFuIEZCTy4KKyAgICA6OmdsR2VuRnJh
bWVidWZmZXJzKDEsICZtX2Zibyk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJV
RkZFUiwgbV9mYm8pOworCisgICAgbV9ib3VuZEZCTyA9IG1fZmJvOworICAgIGlmICghbV9hdHRy
cy5hbnRpYWxpYXMgJiYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSkKKyAgICAg
ICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAK
KyAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCisgICAgaWYgKG1fYXR0cnMuYW50aWFs
aWFzKSB7CisgICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8p
OworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX211bHRpc2Ft
cGxlRkJPKTsKKyAgICAgICAgbV9ib3VuZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87CisgICAgICAg
IDo6Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAg
ICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICA6
OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7
CisgICAgfQorCisgICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24uCisgICAgU2hCdWlsdEluUmVz
b3VyY2VzIEFOR0xFUmVzb3VyY2VzOworICAgIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMoJkFOR0xF
UmVzb3VyY2VzKTsKKworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVS
VEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJzKTsKKyAgICBnZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMsICZB
TkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7CisgICAgZ2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5N
YXhWYXJ5aW5nVmVjdG9ycyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleFRl
eHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhDb21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VV
bml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9V
TklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3Jz
KTsKKworICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgorICAgIEFOR0xFUmVz
b3VyY2VzLk1heERyYXdCdWZmZXJzID0gMTsKKyAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhB
TkdMRVJlc291cmNlcyk7CisKKyAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKK30KKwor
R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCit7CisgICAgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6cmVtb3ZlQWN0aXZlR3JhcGhpY3NDb250ZXh0KHRoaXMpOworICAg
IGlmICghbV9pbnRlcm5hbC0+bV9jb250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7
CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJi
dWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAobV9hdHRy
cy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVy
YnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIDo6
Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAg
ICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Cisg
ICAgfQorICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KCkKK3sKKyAgICBpZiAoIW1faW50
ZXJuYWwpCisgICAgICAgIHJldHVybjsKKyAgICBtX2ludGVybmFsLT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRDo6
cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPm1f
Y29udGV4dDsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShX
RUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9lZ2wvR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL2VnbC9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9lZ2wv
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjUx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQ2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaCIK
KworI2lmIEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisj
aW5jbHVkZSA8RUdML2VnbC5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPEdM
RVMyL2dsMmV4dC5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CisKK3N0YXRpYyBEaXNwbGF5KiBnU2hh
cmVkRGlzcGxheSA9IDA7CitzdGF0aWMgRGlzcGxheSogc2hhcmVkRGlzcGxheSgpCit7CisgICAg
aWYgKCFnU2hhcmVkRGlzcGxheSkKKyAgICAgICAgZ1NoYXJlZERpc3BsYXkgPSBYT3BlbkRpc3Bs
YXkoMCk7CisgICAgcmV0dXJuIGdTaGFyZWREaXNwbGF5OworfQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKy8vIEJlY2F1c2Ugb2YgZHJpdmVyIGJ1Z3MsIGV4aXRpbmcgdGhlIHByb2dyYW0gd2hl
biB0aGVyZSBhcmUgYWN0aXZlIHBidWZmZXJzCisvLyBjYW4gY3Jhc2ggdGhlIFggc2VydmVyICh0
aGlzIGhhcyBiZWVuIG9ic2VydmVkIHdpdGggdGhlIG9mZmljaWFsIE52aWRpYSBkcml2ZXJzKS4K
Ky8vIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2UgY2xlYW4gZXZlcnl0aGluZyB1cCBvbiBleGl0
LiBUaGVyZSBhcmUgc2V2ZXJhbCByZWFzb25zCisvLyB0aGF0IEdyYXBoaWNzQ29udGV4dDNEcyB3
aWxsIHN0aWxsIGJlIGFsaXZlIGF0IGV4aXQsIGluY2x1ZGluZyB1c2VyIGVycm9yIChtZW1vcnkK
Ky8vIGxlYWtzKSBhbmQgdGhlIHBhZ2UgY2FjaGUuIEluIGFueSBjYXNlLCB3ZSBkb24ndCB3YW50
IHRoZSBYIHNlcnZlciB0byBjcmFzaC4KK3N0YXRpYyBib29sIGNsZWFuaW5nVXBBdEV4aXQgPSBm
YWxzZTsKK3N0YXRpYyBWZWN0b3I8R3JhcGhpY3NDb250ZXh0M0QqPiYgYWN0aXZlR3JhcGhpY3ND
b250ZXh0cygpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8R3JhcGhpY3NDb250
ZXh0M0QqPiwgY29udGV4dHMsICgpKTsKKyAgICByZXR1cm4gY29udGV4dHM7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YWRkQWN0aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAgIHN0YXRpYyBib29sIGFkZGVkQXRFeGl0SGFu
ZGxlciA9IGZhbHNlOworICAgIGlmICghYWRkZWRBdEV4aXRIYW5kbGVyKSB7CisgICAgICAgIGF0
ZXhpdCgmR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y2xlYW51cEFjdGl2ZUNvbnRleHRzQXRF
eGl0KTsKKyAgICAgICAgYWRkZWRBdEV4aXRIYW5kbGVyID0gdHJ1ZTsKKyAgICB9CisgICAgYWN0
aXZlR3JhcGhpY3NDb250ZXh0cygpLmFwcGVuZChjb250ZXh0KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpyZW1vdmVBY3RpdmVHcmFwaGljc0NvbnRleHQoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQpCit7CisgICAgaWYgKGNsZWFuaW5nVXBBdEV4aXQpCisgICAgICAg
IHJldHVybjsKKworICAgIFZlY3RvcjxHcmFwaGljc0NvbnRleHQzRCo+JiBjb250ZXh0cyA9IGFj
dGl2ZUdyYXBoaWNzQ29udGV4dHMoKTsKKyAgICBzaXplX3QgbG9jYXRpb24gPSBjb250ZXh0cy5m
aW5kKGNvbnRleHQpOworICAgIGlmIChsb2NhdGlvbiAhPSBXVEY6Om5vdEZvdW5kKQorICAgICAg
ICBjb250ZXh0cy5yZW1vdmUobG9jYXRpb24pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OmNsZWFudXBBY3RpdmVDb250ZXh0c0F0RXhpdCgpCit7CisgICAgY2xlYW5pbmdV
cEF0RXhpdCA9IHRydWU7CisKKyAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0M0QqPiYgY29udGV4
dHMgPSBhY3RpdmVHcmFwaGljc0NvbnRleHRzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjb250ZXh0cy5zaXplKCk7IGkrKykKKyAgICAgICAgY29udGV4dHNbaV0tPn5HcmFwaGljc0Nv
bnRleHQzRCgpOworCisgICAgaWYgKCFnU2hhcmVkRGlzcGxheSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIFhDbG9zZURpc3BsYXkoZ1NoYXJlZERpc3BsYXkpOworICAgIGdTaGFyZWREaXNwbGF5ID0g
MDsKK30KKworUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzREludGVybmFsPiBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjpjcmVhdGUoKQoreworICAgIGlmICghc2hhcmVkRGlzcGxheSgpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEVHTERpc3BsYXkgZWdsRGlzcGxheSA9IGVn
bEdldERpc3BsYXkoc2hhcmVkRGlzcGxheSgpKTsKKyAgICBpZiAoZWdsRGlzcGxheSA9PSBFR0xf
Tk9fRElTUExBWSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIWVnbEluaXRp
YWxpemUoZWdsRGlzcGxheSwgMCwgMCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCogaW50ZXJuYWwgPSBjcmVhdGVQYnVmZmVyQ29udGV4
dChlZ2xEaXNwbGF5KTsKKyAgICBpZiAoIWludGVybmFsKQorICAgICAgICBpbnRlcm5hbCA9IGNy
ZWF0ZVBpeG1hcENvbnRleHQoZWdsRGlzcGxheSk7CisgICAgaWYgKCFpbnRlcm5hbCkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBUaGUgR3JhcGhpY3NDb250ZXh0M0QgY29uc3Ry
dWN0b3IgcmVxdWlyZXMgdGhhdCB0aGlzIGNvbnRleHQgaXMgdGhlIGN1cnJlbnQgT3BlbkdMIGNv
bnRleHQuCisgICAgaW50ZXJuYWwtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBh
ZG9wdFB0cihpbnRlcm5hbCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwqIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OmNyZWF0ZVBidWZmZXJDb250ZXh0KEVHTERpc3BsYXkgZWds
RGlzcGxheSkKK3sKKyAgICBpbnQgZmJDb25maWdBdHRyYnNbXSA9IHsKKyAgICAgICAgRUdMX0JV
RkZFUl9TSVpFLCBFR0xfRE9OVF9DQVJFLAorICAgICAgICBFR0xfUkVEX1NJWkUsIDgsCisgICAg
ICAgIEVHTF9HUkVFTl9TSVpFLCA4LAorICAgICAgICBFR0xfQkxVRV9TSVpFLCA4LAorICAgICAg
ICBFR0xfQUxQSEFfU0laRSwgOCwKKyAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09Q
RU5HTF9FUzJfQklULAorICAgICAgICBFR0xfU1VSRkFDRV9UWVBFLCBFR0xfUEJVRkZFUl9CSVQs
CisgICAgICAgIEVHTF9OT05FCisgICAgfTsKKyAgICBFR0xDb25maWcgZWdsQ29uZmlnc1sxXTsK
KyAgICBFR0xpbnQgbnVtT2ZDb25maWc7CisgICAgaWYgKCFlZ2xDaG9vc2VDb25maWcoZWdsRGlz
cGxheSwgZmJDb25maWdBdHRyYnMsICZlZ2xDb25maWdzWzBdLCAxLCAmbnVtT2ZDb25maWcpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIW51bU9mQ29uZmlnKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIC8vIFdlIHdpbGwgYmUgcmVuZGVyaW5nIHRvIGEgdGV4dHVyZSwgc28gb3VyIHBi
dWZmZXIgZG9lcyBub3QgbmVlZCB0byBiZSBsYXJnZS4KKyAgICBzdGF0aWMgY29uc3QgaW50IHBi
dWZmZXJBdHRyaWJ1dGVzW10gPSB7IEVHTF9XSURUSCwgMSwgRUdMX0hFSUdIVCwgMSwgRUdMX05P
TkUgfTsKKyAgICBFR0xTdXJmYWNlIGVnbFN1cmZhY2UgPSBlZ2xDcmVhdGVQYnVmZmVyU3VyZmFj
ZShlZ2xEaXNwbGF5LCBlZ2xDb25maWdzWzBdLCBwYnVmZmVyQXR0cmlidXRlcyk7CisgICAgaWYg
KGVnbFN1cmZhY2UgPT0gRUdMX05PX1NVUkZBQ0UpCisgICAgICAgIHJldHVybiAwOworCisgICAg
RUdMaW50IGVnbENvbnRleHRBdHRyYnNbXSA9IHsgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04s
IDIsIEVHTF9OT05FIH07CisgICAgRUdMQ29udGV4dCBlZ2xDb250ZXh0ID0gZWdsQ3JlYXRlQ29u
dGV4dChlZ2xEaXNwbGF5LCBlZ2xDb25maWdzWzBdLCBFR0xfTk9fQ09OVEVYVCwgZWdsQ29udGV4
dEF0dHJicyk7CisgICAgaWYgKGVnbENvbnRleHQgPT0gRUdMX05PX0NPTlRFWFQpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcmV0dXJuIG5ldyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKGVn
bERpc3BsYXksIGVnbENvbnRleHQsIGVnbFN1cmZhY2UpOworfQorCitHcmFwaGljc0NvbnRleHQz
REludGVybmFsKiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjcmVhdGVQaXhtYXBDb250ZXh0
KEVHTERpc3BsYXkgZWdsRGlzcGxheSkKK3sKKyAgICBpbnQgc2NyZWVuID0gRGVmYXVsdFNjcmVl
bihzaGFyZWREaXNwbGF5KCkpOworICAgIGNvbnN0IGludCBkZXB0aCA9IERlZmF1bHREZXB0aChz
aGFyZWREaXNwbGF5KCksIHNjcmVlbik7CisgICAgY29uc3QgaW50IHdpZHRoID0gMTsKKyAgICBj
b25zdCBpbnQgaGVpZ2h0ID0gMTsKKworICAgIHN0YXRpYyBpbnQgZWdsQ29uZmlnQXR0cnNbXSA9
IHsKKyAgICAgICAgRUdMX0JVRkZFUl9TSVpFLCBFR0xfRE9OVF9DQVJFLAorICAgICAgICBFR0xf
UkVEX1NJWkUsIDgsCisgICAgICAgIEVHTF9HUkVFTl9TSVpFLCA4LAorICAgICAgICBFR0xfQkxV
RV9TSVpFLCA4LAorICAgICAgICBFR0xfQUxQSEFfU0laRSwgOCwKKyAgICAgICAgRUdMX0RFUFRI
X1NJWkUsIGRlcHRoLAorICAgICAgICBFR0xfU1VSRkFDRV9UWVBFLCBFR0xfUElYTUFQX0JJVCwK
KyAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklULAorICAgICAg
ICBFR0xfTk9ORQorICAgIH07CisKKyAgICBFR0xDb25maWcgZWdsQ29uZmlnc1sxXTsKKyAgICBF
R0xpbnQgbnVtT2ZDb25maWc7CisgICAgaWYgKCFlZ2xDaG9vc2VDb25maWcoZWdsRGlzcGxheSwg
ZWdsQ29uZmlnQXR0cnMsICZlZ2xDb25maWdzWzBdLCAxLCAmbnVtT2ZDb25maWcpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAoIW51bU9mQ29uZmlnKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIEVHTGludCBlZ2xDb250ZXh0QXR0cmJzW10gPSB7IEVHTF9DT05URVhUX0NMSUVOVF9WRVJT
SU9OLCAyLCBFR0xfTk9ORSB9OworICAgIEVHTENvbnRleHQgY29udGV4dCA9IGVnbENyZWF0ZUNv
bnRleHQoZWdsRGlzcGxheSwgZWdsQ29uZmlnc1swXSwgRUdMX05PX0NPTlRFWFQsIGVnbENvbnRl
eHRBdHRyYnMpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBQ
aXhtYXAgcGl4bWFwID0gWENyZWF0ZVBpeG1hcChzaGFyZWREaXNwbGF5KCksIERlZmF1bHRSb290
V2luZG93KHNoYXJlZERpc3BsYXkoKSksIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKyAgICBpZiAo
IXBpeG1hcCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBzdGF0aWMgaW50IHBpeG1h
cEF0dHJzW10gPSB7IEVHTF9OT05FIH07CisgICAgRUdMU3VyZmFjZSBlZ2xQaXhtYXBTdXJmYWNl
ID0gZWdsQ3JlYXRlUGl4bWFwU3VyZmFjZShlZ2xEaXNwbGF5LCBlZ2xDb25maWdzWzBdLCBwaXht
YXAsIDApOworICAgIGlmICghZWdsUGl4bWFwU3VyZmFjZSkgeworICAgICAgICBYRnJlZVBpeG1h
cChzaGFyZWREaXNwbGF5KCksIHBpeG1hcCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChlZ2xEaXNwbGF5LCBjb250
ZXh0LCBwaXhtYXAsIGVnbFBpeG1hcFN1cmZhY2UpOworfQorCitHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsKEVHTERpc3BsYXkgZGlzcGxheSwgRUdM
Q29udGV4dCBjb250ZXh0LCBFR0xTdXJmYWNlIHBidWZmZXJTdXJmYWNlKQorICAgIDogbV9jb250
ZXh0KGNvbnRleHQpCisgICAgLCBtX2Rpc3BsYXkoZGlzcGxheSkKKyAgICAsIG1fcGJ1ZmZlclN1
cmZhY2UocGJ1ZmZlclN1cmZhY2UpCisgICAgLCBtX3BpeG1hcFN1cmZhY2UoMCkKKyAgICAsIG1f
cGl4bWFwKDApCit7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWwoRUdMRGlzcGxheSBkaXNwbGF5LCBFR0xDb250ZXh0IGNvbnRleHQsIFBp
eG1hcCBwaXhtYXAsIEVHTFN1cmZhY2UgcGl4bWFwU3VyZmFjZSkKKyAgICA6IG1fY29udGV4dChj
b250ZXh0KQorICAgICwgbV9kaXNwbGF5KGRpc3BsYXkpCisgICAgLCBtX3BidWZmZXJTdXJmYWNl
KDApCisgICAgLCBtX3BpeG1hcFN1cmZhY2UocGl4bWFwU3VyZmFjZSkKKyAgICAsIG1fcGl4bWFw
KHBpeG1hcCkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6fkdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWwoKQoreworICAgIGlmIChtX2NvbnRleHQpIHsKKyAgICAgICAgLy8gVGhp
cyBtYXkgYmUgbmVjZXNzYXJ5IHRvIHByZXZlbnQgY3Jhc2hlcyB3aXRoIE5WaWRpYSdzIGNsb3Nl
ZCBzb3VyY2UgZHJpdmVycy4gT3JpZ2luYWxseQorICAgICAgICAvLyBmcm9tIE1vemlsbGEncyAz
RCBjYW52YXMgaW1wbGVtZW50YXRpb24gYXQ6IGh0dHA6Ly9iaXRidWNrZXQub3JnL2lsbWFyaS9j
YW52YXMzZC8KKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOwor
CisgICAgICAgIGVnbE1ha2VDdXJyZW50KG1fZGlzcGxheSwgMCwgMCwgMCk7CisgICAgICAgIGVn
bERlc3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0KTsKKyAgICAgICAgbV9jb250ZXh0
ID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9wYnVmZmVyU3VyZmFjZSkgeworICAgICAgICBlZ2xE
ZXN0cm95U3VyZmFjZShtX2Rpc3BsYXksIG1fcGJ1ZmZlclN1cmZhY2UpOworICAgICAgICBtX3Bi
dWZmZXJTdXJmYWNlID0gMDsKKyAgICB9CisgICAgaWYgKG1fcGl4bWFwU3VyZmFjZSkgeworICAg
ICAgICBlZ2xEZXN0cm95U3VyZmFjZShtX2Rpc3BsYXksIG1fcGl4bWFwU3VyZmFjZSk7CisgICAg
ICAgIG1fcGl4bWFwU3VyZmFjZSA9IDA7CisgICAgfQorICAgIGlmIChtX3BpeG1hcCkgeworICAg
ICAgICBYRnJlZVBpeG1hcChzaGFyZWREaXNwbGF5KCksIG1fcGl4bWFwKTsKKyAgICAgICAgbV9w
aXhtYXAgPSAwOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpt
YWtlQ29udGV4dEN1cnJlbnQoKQoreworICAgIGlmIChlZ2xHZXRDdXJyZW50Q29udGV4dCgpID09
IG1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghbV9jb250ZXh0KQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKG1fcGJ1ZmZlclN1cmZhY2UpIHsKKyAgICAgICAgZWdsTWFrZUN1
cnJlbnQobV9kaXNwbGF5LCBtX3BidWZmZXJTdXJmYWNlLCBtX3BidWZmZXJTdXJmYWNlLCBtX2Nv
bnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZWdsTWFrZUN1cnJlbnQobV9k
aXNwbGF5LCBtX3BpeG1hcFN1cmZhY2UsIG1fcGl4bWFwU3VyZmFjZSwgbV9jb250ZXh0KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFX1dFQkdMCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0xFUy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMRVMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NjUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1
ZGUgIkFycmF5QnVmZmVyVmlldy5oIgorI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQu
aCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKKyNpbmNsdWRlICJGbG9hdDMyQXJy
YXkuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MQ2FudmFz
RWxlbWVudC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCisjaW5jbHVkZSAiSW50MzJBcnJheS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisjaW5jbHVkZSAiVWludDhBcnJheS5oIgorI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCisjaW5j
bHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSA8R0xFUzIv
Z2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQor
eworICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKKyAgICBp
ZiAobV9hdHRycy5zdGVuY2lsKSB7CisgICAgICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0cygi
R0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIikpIHsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMt
PmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOworICAgICAgICAg
ICAgLy8gRm9yY2UgZGVwdGggaWYgc3RlbmNpbCBpcyB0cnVlLgorICAgICAgICAgICAgbV9hdHRy
cy5kZXB0aCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9hdHRycy5zdGVu
Y2lsID0gZmFsc2U7CisgICAgfQorICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAg
ICBib29sIGlzVmFsaWRWZW5kb3IgPSB0cnVlOworICAgICAgICAvLyBDdXJyZW50bHkgaW4gTWFj
IHdlIG9ubHkgdHVybiBvbiBhbnRpYWxpYXMgaWYgdmVuZG9yIGlzIE5WSURJQS4KKyAgICAgICAg
Y29uc3QgY2hhciogdmVuZG9yID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdl
dFN0cmluZyhHTF9WRU5ET1IpKTsKKyAgICAgICAgaWYgKCF2ZW5kb3IgfHwgIXN0ZDo6c3Ryc3Ry
KHZlbmRvciwgIk5WSURJQSIpKQorICAgICAgICAgICAgaXNWYWxpZFZlbmRvciA9IGZhbHNlOwor
ICAgICAgICBpZiAoIWlzVmFsaWRWZW5kb3IgfHwgIWV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9B
TkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpKQorICAgICAgICAgICAgbV9hdHRycy5hbnRp
YWxpYXMgPSBmYWxzZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5z
dXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKKyAgICB9Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVk
IGNoYXIgKnBpeGVscywgaW50IHBpeGVsc1NpemUpCit7CisgICAgaW50IHRvdGFsQnl0ZXMgPSBt
X2N1cnJlbnRXaWR0aCAqIG1fY3VycmVudEhlaWdodCAqIDQ7CisgICAgaWYgKHBpeGVsc1NpemUg
PCB0b3RhbEJ5dGVzKQorICAgICAgICByZXR1cm47CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKyAgICBpZiAobV9hdHRycy5h
bnRpYWxpYXMpIHsKKyAgICAgICAgLy8gRklYTUUgOiBJbXBsZW1lbnQgYW50aWFsaWFzIGZvciBH
TEVTCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg
KG1fYm91bmRGQk8gIT0gbV9mYm8pIHsKKyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1
ZTsKKyAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJv
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdMaW50IHBhY2tBbGlnbm1lbnQgPSA0OworICAg
IGJvb2wgbXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gZmFsc2U7CisgICAgOjpnbEdldEludGVn
ZXJ2KEdMX1BBQ0tfQUxJR05NRU5ULCAmcGFja0FsaWdubWVudCk7CisgICAgaWYgKHBhY2tBbGln
bm1lbnQgPiA0KSB7CisgICAgICAgIDo6Z2xQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwg
NCk7CisgICAgICAgIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IHRydWU7CisgICAgfQorCisg
ICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsKKworICAgIC8vIENvbnZlcnQgdG8g
QkdSQQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQorICAgICAg
ICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKKworICAgIGlmIChtdXN0UmVz
dG9yZVBhY2tBbGlnbm1lbnQpCisgICAgICAgIDo6Z2xQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdO
TUVOVCwgcGFja0FsaWdubWVudCk7CisKKyAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fYm91bmRGQk8pOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52
YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQoreworICAgIEhUTUxDYW52YXNFbGVtZW50KiBj
YW52YXMgPSBjb250ZXh0LT5jYW52YXMoKTsKKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIg
PSBjYW52YXMtPmJ1ZmZlcigpOworCisgICAgaW50IHJvd0J5dGVzID0gbV9jdXJyZW50V2lkdGgg
KiA0OworICAgIGludCB0b3RhbEJ5dGVzID0gcm93Qnl0ZXMgKiBtX2N1cnJlbnRIZWlnaHQ7CisK
KyAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiBwaXhlbHMgPSBhZG9wdEFycmF5UHRyKG5l
dyB1bnNpZ25lZCBjaGFyW3RvdGFsQnl0ZXNdKTsKKyAgICBpZiAoIXBpeGVscykKKyAgICAgICAg
cmV0dXJuOworCisgICAgcmVhZFJlbmRlcmluZ1Jlc3VsdHMocGl4ZWxzLmdldCgpLCB0b3RhbEJ5
dGVzKTsKKworICAgIGlmICghbV9hdHRycy5wcmVtdWx0aXBsaWVkQWxwaGEpIHsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpIHsKKyAgICAgICAgICAgIC8v
IFByZW11bHRpcGx5IGFscGhhCisgICAgICAgICAgICBwaXhlbHNbaSArIDBdID0gc3RkOjptaW4o
MjU1LCBwaXhlbHNbaSArIDBdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7CisgICAgICAgICAgICBw
aXhlbHNbaSArIDFdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDFdICogcGl4ZWxzW2kgKyAz
XSAvIDI1NSk7CisgICAgICAgICAgICBwaXhlbHNbaSArIDJdID0gc3RkOjptaW4oMjU1LCBwaXhl
bHNbaSArIDJdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhl
aWdodCwKKyAgICAgICAgICAgICAgICAgIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQo
KSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOworfQorCitQYXNz
UmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvSW1hZ2VEYXRhKCkKK3sKKyAgICAvLyBSZWFkaW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291
bGQgaW52b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3aGljaCBpcworICAgIC8vIGxvc3N5CisgICAg
aWYgKG1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUo
bV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCkpOworICAgIHVuc2lnbmVkIGNoYXIqIHBp
eGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsKKyAgICBpbnQgdG90YWxC
eXRlcyA9IDQgKiBtX2N1cnJlbnRXaWR0aCAqIG1fY3VycmVudEhlaWdodDsKKworICAgIHJlYWRS
ZW5kZXJpbmdSZXN1bHRzKHBpeGVscywgdG90YWxCeXRlcyk7CisKKyAgICAvLyBDb252ZXJ0IHRv
IFJHQkEKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkKKyAgICAg
ICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7CisKKyAgICByZXR1cm4gaW1h
Z2VEYXRhLnJlbGVhc2UoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShp
bnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgaWYgKCFwbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0
aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsKKyAgICBtX2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7
CisgICAgCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgdmFsaWRhdGVBdHRyaWJ1dGVz
KCk7CisKKyAgICBHTHVpbnQgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0
ID0gMDsKKyAgICBpZiAobV9hdHRycy5hbHBoYSkgeworICAgICAgICBtX2ludGVybmFsQ29sb3JG
b3JtYXQgPSBHTF9SR0JBOworICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQkE7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCOworICAgICAgICBj
b2xvckZvcm1hdCA9IEdMX1JHQjsKKyAgICB9CisgICAgCisgICAgaWYgKG1fYXR0cnMuc3RlbmNp
bCkKKyAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9TVEVOQ0lMX0lOREVY
ODsKKyAgICBpZiAobV9hdHRycy5kZXB0aCkKKyAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxG
b3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQxNjsKKworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8g
PSBmYWxzZTsKKworICAgIC8vIHJlc2l6ZSBtdWx0aXNhbXBsZSBGQk8KKyAgICBpZiAobV9hdHRy
cy5hbnRpYWxpYXMpIHsKKyAgICAgICAgLy8gRklYTUUgOiBpbXBsZW1lbnQgYW50aWFsaWFzIGNh
c2UgZm9yIEdMRVMKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisKKyAgICAvLyBy
ZXNpemUgcmVndWxhciBGQk8KKyAgICBpZiAobV9ib3VuZEZCTyAhPSBtX2ZibykgeworICAgICAg
ICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICB9CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIG1fdGV4dHVyZSk7CisgICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwg
bV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xf
VU5TSUdORURfQllURSwgMCk7CisgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1F
QlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAw
KTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVy
ZSk7CisgICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9y
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwg
MCk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworICAgIGlmICghbV9h
dHRycy5hbnRpYWxpYXMgJiYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSkgewor
ICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVu
Y2lsQnVmZmVyKTsKKyAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVG
RkVSLCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAg
IGlmIChtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVG
RkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQor
ICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBH
TF9ERVBUSF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVy
KTsKKyAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCAwKTsKKyAg
ICB9CisgICAgaWYgKGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTF9GUkFNRUJVRkZFUikgIT0g
R0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgLy8gRklYTUU6IGNsZWFudXAKKyAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisKKyAgICBpZiAobV9hdHRycy5hbnRpYWxp
YXMpIHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0
aXNhbXBsZUZCTyk7CisgICAgICAgIGlmIChtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8p
CisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOworICAgIH0KKworICAgIC8vIElu
aXRpYWxpemUgcmVuZGVyYnVmZmVycyB0byAwLgorICAgIEdMZmxvYXQgY2xlYXJDb2xvcltdID0g
ezAsIDAsIDAsIDB9LCBjbGVhckRlcHRoID0gMDsKKyAgICBHTGludCBjbGVhclN0ZW5jaWwgPSAw
OworICAgIEdMYm9vbGVhbiBjb2xvck1hc2tbXSA9IHtHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVF
LCBHTF9UUlVFfSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKKyAgICBHTHVpbnQgc3RlbmNpbE1hc2sg
PSAweGZmZmZmZmZmOworICAgIEdMYm9vbGVhbiBpc1NjaXNzb3JFbmFibGVkID0gR0xfRkFMU0U7
CisgICAgR0xib29sZWFuIGlzRGl0aGVyRW5hYmxlZCA9IEdMX0ZBTFNFOworICAgIEdMYml0Zmll
bGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICA6OmdsR2V0RmxvYXR2KEdM
X0NPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKKyAgICA6OmdsQ2xlYXJDb2xvcigwLCAw
LCAwLCAwKTsKKyAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09MT1JfV1JJVEVNQVNLLCBjb2xvck1h
c2spOworICAgIDo6Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJV
RSk7CisgICAgaWYgKG1fYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgOjpnbEdldEZsb2F0dihHTF9E
RVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFyRGVwdGgpOworICAgICAgICA6OmdsQ2xlYXJEZXB0aGYo
MSk7CisgICAgICAgIDo6Z2xHZXRCb29sZWFudihHTF9ERVBUSF9XUklURU1BU0ssICZkZXB0aE1h
c2spOworICAgICAgICA6OmdsRGVwdGhNYXNrKEdMX1RSVUUpOworICAgICAgICBjbGVhck1hc2sg
fD0gR0xfREVQVEhfQlVGRkVSX0JJVDsKKyAgICB9CisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkg
eworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9DTEVBUl9WQUxVRSwgJmNsZWFy
U3RlbmNpbCk7CisgICAgICAgIDo6Z2xDbGVhclN0ZW5jaWwoMCk7CisgICAgICAgIDo6Z2xHZXRJ
bnRlZ2VydihHTF9TVEVOQ0lMX1dSSVRFTUFTSywgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+KCZz
dGVuY2lsTWFzaykpOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwg
MHhmZmZmZmZmZik7CisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7
CisgICAgfQorICAgIGlzU2Npc3NvckVuYWJsZWQgPSA6OmdsSXNFbmFibGVkKEdMX1NDSVNTT1Jf
VEVTVCk7CisgICAgOjpnbERpc2FibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBpc0RpdGhlckVu
YWJsZWQgPSA6OmdsSXNFbmFibGVkKEdMX0RJVEhFUik7CisgICAgOjpnbERpc2FibGUoR0xfRElU
SEVSKTsKKworICAgIDo6Z2xDbGVhcihjbGVhck1hc2spOworCisgICAgOjpnbENsZWFyQ29sb3Io
Y2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclsz
XSk7CisgICAgOjpnbENvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwgY29sb3JN
YXNrWzJdLCBjb2xvck1hc2tbM10pOworICAgIGlmIChtX2F0dHJzLmRlcHRoKSB7CisgICAgICAg
IDo6Z2xDbGVhckRlcHRoZihjbGVhckRlcHRoKTsKKyAgICAgICAgOjpnbERlcHRoTWFzayhkZXB0
aE1hc2spOworICAgIH0KKyAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7CisgICAgICAgIDo6Z2xD
bGVhclN0ZW5jaWwoY2xlYXJTdGVuY2lsKTsKKyAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJh
dGUoR0xfRlJPTlQsIHN0ZW5jaWxNYXNrKTsKKyAgICB9CisgICAgaWYgKGlzU2Npc3NvckVuYWJs
ZWQpCisgICAgICAgIDo6Z2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBlbHNlCisgICAg
ICAgIDo6Z2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgaWYgKGlzRGl0aGVyRW5hYmxl
ZCkKKyAgICAgICAgOjpnbEVuYWJsZShHTF9ESVRIRVIpOworICAgIGVsc2UKKyAgICAgICAgOjpn
bERpc2FibGUoR0xfRElUSEVSKTsKKworICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9ib3VuZEZCTyk7CisKKyAgICA6
OmdsRmx1c2goKTsKK30KKworSW50U2l6ZSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxG
cmFtZWJ1ZmZlclNpemUoKSBjb25zdAoreworICAgIHJldHVybiBJbnRTaXplKG1fY3VycmVudFdp
ZHRoLCBtX2N1cnJlbnRIZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVw
YXJlVGV4dHVyZSgpCit7CisgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQorICAgICAgICByZXR1
cm47CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFz
KSB7CisgICAgICAgIC8vIEZJWE1FIDogaW1wbGVtZW50IGFudGlhbGlhcyBmb3IgR0xFUworICAg
ICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgOjpnbEFjdGl2ZVRleHR1cmUoMCk7CisgICAgOjpn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgIDo6
Z2xDb3B5VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQs
IDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIDApOworICAgIDo6Z2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2JvdW5kVGV4dHVyZTApOworICAgIDo6Z2xBY3RpdmVU
ZXh0dXJlKG1fYWN0aXZlVGV4dHVyZSk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFN
RUJVRkZFUiwgbV9ib3VuZEZCTyk7CisgICAgOjpnbEZpbmlzaCgpOworICAgIG1fbGF5ZXJDb21w
b3NpdGVkID0gdHJ1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWN0aXZlVGV4dHVy
ZShHQzNEZW51bSB0ZXh0dXJlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1f
YWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7CisgICAgOjpnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChwcm9n
cmFtKTsKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICA6OmdsQXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdD
M0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0p
OworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCaW5kQXR0cmliTG9jYXRpb24o
cHJvZ3JhbSwgaW5kZXgsIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1
ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmluZEJ1ZmZlcih0
YXJnZXQsIGJ1ZmZlcik7Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1l
YnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IGZibzsKKyAgICBpZiAoYnVmZmVyKQor
ICAgICAgICBmYm8gPSBidWZmZXI7CisgICAgZWxzZQorICAgICAgICBmYm8gPSAobV9hdHRycy5h
bnRpYWxpYXMgPyBtX211bHRpc2FtcGxlRkJPIDogbV9mYm8pOworICAgIGlmIChmYm8gIT0gbV9i
b3VuZEZCTykgeworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKHRhcmdldCwgZmJvKTsKKyAg
ICAgICAgbV9ib3VuZEZCTyA9IGZibzsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHJl
bmRlcmJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmluZFJl
bmRlcmJ1ZmZlcih0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7Cit9CisKKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRl
eHR1cmUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fYWN0aXZlVGV4
dHVyZSAmJiB0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgbV9ib3VuZFRleHR1cmUw
ID0gdGV4dHVyZTsKKyAgICA6OmdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNs
YW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbihHQzNE
ZW51bSBtb2RlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCbGVuZEVx
dWF0aW9uKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9u
U2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJH
QiwgbW9kZUFscGhhKTsKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMo
R0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3RvcikKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOworfSAgICAgICAK
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3Jj
UkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBo
YSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmxlbmRGdW5jU2VwYXJh
dGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6
ZSwgR0MzRGVudW0gdXNhZ2UpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwg
Y29uc3Qgdm9pZCogZGF0YSwgR0MzRGVudW0gdXNhZ2UpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJ1ZmZlclN1YkRhdGEodGFy
Z2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOworfQorCitHQzNEZW51bSBHcmFwaGljc0NvbnRleHQz
RDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRh
cmdldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoR0MzRGNsYW1w
ZiByLCBHQzNEY2xhbXBmIGcsIEdDM0RjbGFtcGYgYiwgR0MzRGNsYW1wZiBhKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ2xlYXIobWFzayk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ2xlYXJEZXB0aGYoZGVwdGgpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhclN0ZW5jaWwoR0MzRGludCBzKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDbGVhclN0ZW5jaWwocyk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFu
IGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKworICAgIGludCBHTHNoYWRlclR5cGU7CisgICAgQU5HTEVTaGFkZXJUeXBl
IHNoYWRlclR5cGU7CisKKyAgICBnbEdldFNoYWRlcml2KHNoYWRlciwgU0hBREVSX1RZUEUsICZH
THNoYWRlclR5cGUpOworICAgIAorICAgIGlmIChHTHNoYWRlclR5cGUgPT0gVkVSVEVYX1NIQURF
UikKKyAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX1ZFUlRFWDsKKyAgICBlbHNlIGlm
IChHTHNoYWRlclR5cGUgPT0gRlJBR01FTlRfU0hBREVSKQorICAgICAgICBzaGFkZXJUeXBlID0g
U0hBREVSX1RZUEVfRlJBR01FTlQ7CisgICAgZWxzZQorICAgICAgICByZXR1cm47IC8vIEludmFs
aWQgc2hhZGVyIHR5cGUuCisKKyAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNv
dXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFk
ZXIpOworCisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNv
bmQ7CisKKyAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKKyAgICBTdHJpbmcgc2hh
ZGVySW5mb0xvZzsKKworICAgIGJvb2wgaXNWYWxpZCA9IG1fY29tcGlsZXIudmFsaWRhdGVTaGFk
ZXJTb3VyY2UoZW50cnkuc291cmNlLnV0ZjgoKS5kYXRhKCksIHNoYWRlclR5cGUsIHRyYW5zbGF0
ZWRTaGFkZXJTb3VyY2UsIHNoYWRlckluZm9Mb2cpOworCisgICAgZW50cnkubG9nID0gc2hhZGVy
SW5mb0xvZzsKKyAgICBlbnRyeS5pc1ZhbGlkID0gaXNWYWxpZDsKKworICAgIGlmICghaXNWYWxp
ZCkKKyAgICAgICAgcmV0dXJuOyAvLyBTaGFkZXIgZGlkbid0IHZhbGlkYXRlLCBkb24ndCBtb3Zl
IGZvcndhcmQgd2l0aCBjb21waWxpbmcgdHJhbnNsYXRlZCBzb3VyY2UgICAgCisKKyAgICBpbnQg
dHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UubGVuZ3RoKCk7
CisKKyAgICBjb25zdCBDU3RyaW5nJiB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZyA9IHRyYW5zbGF0
ZWRTaGFkZXJTb3VyY2UudXRmOCgpOworICAgIGNvbnN0IGNoYXIqIHRyYW5zbGF0ZWRTaGFkZXJQ
dHIgPSB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZy5kYXRhKCk7CisgICAgCisgICAgOjpnbFNoYWRl
clNvdXJjZShzaGFkZXIsIDEsICZ0cmFuc2xhdGVkU2hhZGVyUHRyLCAmdHJhbnNsYXRlZFNoYWRl
ckxlbmd0aCk7CisgICAgCisgICAgOjpnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKKyAgICAKKyAg
ICBpbnQgR0xDb21waWxlU3VjY2VzczsKKyAgICAKKyAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVy
LCBDT01QSUxFX1NUQVRVUywgJkdMQ29tcGlsZVN1Y2Nlc3MpOworICAgIAorICAgIC8vIEFTU0VS
VCB0aGF0IEFOR0xFIGdlbmVyYXRlZCBHTFNMIHdpbGwgYmUgYWNjZXB0ZWQgYnkgT3BlbkdMCisg
ICAgQVNTRVJUKEdMQ29tcGlsZVN1Y2Nlc3MgPT0gR0xfVFJVRSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJP
ID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgLy8gRklYTUUgOiBpbXBsZW1lbnQgYW50
aWFsaWFzIGNhc2UgZm9yIEdMRVMKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9Cisg
ICAgOjpnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBt
X2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgLy8gRklYTUUgOiBpbXBs
ZW1lbnQgYW50aWFsaWFzIGNhc2UgZm9yIEdMRVMKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlv
ZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fYXR0cnMuYW50
aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICAvLyBG
SVhNRSA6IGltcGxlbWVudCBhbnRpYWxpYXMgY2FzZSBmb3IgR0xFUworICAgICAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIH0KKyAgICA6OmdsQ29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgaWYgKG1fYXR0
cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgeworICAgICAg
ICAvLyBGSVhNRSA6IGltcGxlbWVudCBhbnRpYWxpYXMgY2FzZSBmb3IgR0xFUworICAgICAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3Vs
bEZhY2UoR0MzRGVudW0gbW9kZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6
OmdsQ3VsbEZhY2UobW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVu
YyhHQzNEZW51bSBmdW5jKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xE
ZXB0aEZ1bmMoZnVuYyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayhH
QzNEYm9vbGVhbiBmbGFnKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xE
ZXB0aE1hc2soZmxhZyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFuZ2Uo
R0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xEZXB0aFJhbmdlZih6TmVhciwgekZhcik7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmRldGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBs
YXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBBU1NF
UlQoc2hhZGVyKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRGV0YWNoU2hh
ZGVyKHByb2dyYW0sIHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2Fi
bGUoR0MzRGVudW0gY2FwKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xE
aXNhYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICA6OmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBH
QzNEc2l6ZWkgY291bnQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERy
YXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0g
dHlwZSwgR0MzRGludHB0ciBvZmZzZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxH
THZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjplbmFibGUoR0MzRGVudW0gY2FwKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xFbmFibGUoY2FwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZmluaXNoKCkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICA6OmdsRmluaXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmZsdXNoKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRmx1c2go
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZm
ZXJ0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1l
bnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRh
Y2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0Mz
RGludCBsZXZlbCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRnJhbWVi
dWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxl
dmVsKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1v
ZGUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEZyb250RmFjZShtb2Rl
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0g
dGFyZ2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZW5lcmF0ZU1p
cG1hcCh0YXJnZXQpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRy
aWIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYg
aW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7CisgICAgOjpn
bEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZt
YXhBdHRyaWJ1dGVTaXplKTsKKyAgICBHTGNoYXIgbmFtZVttYXhBdHRyaWJ1dGVTaXplXTsgLy8g
R0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24K
KyAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOworICAgIEdMaW50IHNpemUgPSAwOworICAgIEdM
ZW51bSB0eXBlID0gMDsKKyAgICA6OmdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBt
YXhBdHRyaWJ1dGVTaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKKyAgICBp
ZiAoIW5hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpbmZvLm5hbWUgPSBT
dHJpbmcobmFtZSwgbmFtZUxlbmd0aCk7CisgICAgaW5mby50eXBlID0gdHlwZTsKKyAgICBpbmZv
LnNpemUgPSBzaXplOworICAgIHJldHVybiB0cnVlOworfQorICAgIAorYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1
aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTGludCBtYXhVbmlm
b3JtU2l6ZSA9IDA7CisgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5J
Rk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNpemUpOworICAgIEdMY2hhciBuYW1lW21heFVu
aWZvcm1TaXplXTsgLy8gR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxs
IHRlcm1pbmF0aW9uCisgICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKKyAgICBHTGludCBzaXpl
ID0gMDsKKyAgICBHTGVudW0gdHlwZSA9IDA7CisgICAgOjpnbEdldEFjdGl2ZVVuaWZvcm0ocHJv
Z3JhbSwgaW5kZXgsIG1heFVuaWZvcm1TaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBu
YW1lKTsKKyAgICBpZiAoIW5hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
bmZvLm5hbWUgPSBTdHJpbmcobmFtZSwgbmFtZUxlbmd0aCk7CisgICAgaW5mby50eXBlID0gdHlw
ZTsKKyAgICBpbmZvLnNpemUgPSBzaXplOworCisgICAgLy8gRklYTUUgOiAiWzBdIiBpcyBhZGRl
ZCBhdCB0aGUgZW5kIG9mIGluZm8ubmFtZSBpbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFj
dGl2ZVVuaWZvcm0oKSAKKyAgICAvLyB3aGVuIGlzR0xFUzJDb21wbGlhbnQgaXMgb25seSBmYWxz
ZS4gSSBjYW4ndCB1bmRlcnN0YW5kIHRoZSByZWFzb24uIAorICAgIC8vIEkgYWRkICJbMF0iIGhl
cmUgdG8gYXZvaWQgZmFsaW5nIHdlYmdsIGNvbmZvcm1hbmNlIHRlc3QoZ2V0LWFjdGl2ZXRlc3Qu
aHRtbCkKKyAgICAvLyBidXQgaWYgaXQgbWFrZXMgc29tZXRoaW5nIHdyb25nIGxhdGVyLCByZW1v
dmUgZm9sbG93aW5nIGxpbmVzIAorICAgIGlmIChpbmZvLnNpemUgPiAxICYmICFpbmZvLm5hbWUu
ZW5kc1dpdGgoIlswXSIpKSAKKyAgICAgICAgaW5mby5uYW1lLmFwcGVuZCgiWzBdIik7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVkU2hh
ZGVycyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNp
emVpKiBjb3VudCwgUGxhdGZvcm0zRE9iamVjdCogc2hhZGVycykKK3sKKyAgICBpZiAoIXByb2dy
YW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldEF0
dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOworfQorCitp
bnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAg
ICAgcmV0dXJuIC0xOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6
Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCitH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4
dEF0dHJpYnV0ZXMoKQoreworICAgIHJldHVybiBtX2F0dHJzOworfQorCitHQzNEZW51bSBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0RXJyb3IoKQoreworICAgIGlmIChtX3N5bnRoZXRpY0Vycm9ycy5z
aXplKCkgPiAwKSB7CisgICAgICAgIExpc3RIYXNoU2V0PEdDM0RlbnVtPjo6aXRlcmF0b3IgaXRl
ciA9IG1fc3ludGhldGljRXJyb3JzLmJlZ2luKCk7CisgICAgICAgIEdDM0RlbnVtIGVyciA9ICpp
dGVyOworICAgICAgICBtX3N5bnRoZXRpY0Vycm9ycy5yZW1vdmUoaXRlcik7CisgICAgICAgIHJl
dHVybiBlcnI7CisgICAgfQorCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJu
IDo6Z2xHZXRFcnJvcigpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFN0cmlu
ZyhHQzNEZW51bSBuYW1lKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVy
biBTdHJpbmcoKGNvbnN0IGNoYXIqKSA6OmdsR2V0U3RyaW5nKG5hbWUpKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsK
K30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVyKFBsYXRmb3JtM0RP
YmplY3QgYnVmZmVyKQoreworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzQnVmZmVy
KGJ1ZmZlcik7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQo
R0MzRGVudW0gY2FwKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6
OmdsSXNFbmFibGVkKGNhcCk7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjpp
c0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFm
cmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKK30K
KworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzUHJvZ3JhbShQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0pCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzUHJvZ3Jh
bShwcm9ncmFtKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVy
YnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVy
YnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Cit9CisK
K0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0
IHNoYWRlcikKK3sKKyAgICBpZiAoIXNoYWRlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwor
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc1NoYWRlcihzaGFk
ZXIpOworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKFBsYXRm
b3JtM0RPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6Omds
SXNUZXh0dXJlKHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5lV2lk
dGgoR0MzRGZsb2F0IHdpZHRoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xMaW5lV2lkdGgod2lkdGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJv
Z3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOwor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUs
IEdDM0RpbnQgcGFyYW0pCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFBp
eGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBv
bHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkKK3sKKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRo
ZSB0d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAor
ICAgIC8vIGFsbCBwcmV2aW91cyByZW5kZXJpbmcgY2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3Jl
IHJlYWRpbmcgcGl4ZWxzLgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xGbHVz
aCgpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlz
YW1wbGVGQk8pIHsKKyAgICAgICAgLy8gRklYTUUgOiBpbXBsZW1lbnQgYW50aWFsaWFzIGNhc2Ug
Zm9yIEdMRVMKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisgICAgOjpnbFJlYWRQ
aXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKKyAgICBpZiAo
bV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Cisg
ICAgICAgIC8vIEZJWE1FIDogaW1wbGVtZW50IGFudGlhbGlhcyBjYXNlIGZvciBHTEVTCisgICAg
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBp
bXBsZW1lbnRlZCBvbiBkZXNrdG9wIE9wZW5HTC4gV2UgbmVlZCB0byBoYXZlIGlmZGVmcyBmb3Ig
dGhlIGRpZmZlcmVudCBHTCB2YXJpYW50cworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IC8vIDo6Z2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU2FtcGxlQ292ZXJhZ2UodmFs
dWUsIGludmVydCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IoR0MzRGlu
dCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBBU1NFUlQoc2hh
ZGVyKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgU2hhZGVyU291cmNlRW50
cnkgZW50cnk7CisKKyAgICBlbnRyeS5zb3VyY2UgPSBzdHJpbmc7CisKKyAgICBtX3NoYWRlclNv
dXJjZU1hcC5zZXQoc2hhZGVyLCBlbnRyeSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTdGVuY2lsRnVuYyhmdW5jLCBy
ZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuY1NlcGFy
YXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBt
YXNrKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTdGVuY2lsRnVuY1Nl
cGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgOjpnbFN0ZW5jaWxNYXNrKG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUo
ZmFjZSwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcChHQzNE
ZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbFN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBm
YWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFN0ZW5jaWxPcFNlcGFyYXRlKGZhY2Us
IGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFBh
cmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHZhbHVl
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKHRh
cmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFy
YW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHZhbHVlKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKHRhcmdl
dCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFm
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJh
eSwgR0MzRHNpemVpIHNpemUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bFVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTJmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZs
b2F0IHYxKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMmYo
bG9jYXRpb24sIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0y
ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCit7
CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwg
YXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwg
djEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAvLyBG
SVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm00Zihsb2NhdGlvbiwg
djAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQorewor
ICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUsIGFy
cmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RpbnQgdjApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bFVuaWZvcm0xaShsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6
ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTFpdihsb2Nh
dGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
MmkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3Ro
IG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xVbmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBH
QzNEaW50IHYxLCBHQzNEaW50IHYyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBH
QzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVs
dGlwbGUgb2YgMworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtM2l2
KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBHQzNEaW50
IHYyLCBHQzNEaW50IHYzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xV
bmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiBhcnJheSwgR0Mz
RHNpemVpIHNpemUpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRp
cGxlIG9mIDQKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTRpdihs
b2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtTWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0Mz
RGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBu
ZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICA6OmdsVW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6
ZWkgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUg
b2YgOQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtTWF0cml4M2Z2
KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQoreworICAgIC8vIEZJ
WE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNgorICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFu
c3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbShQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbFVzZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgQVNTRVJU
KHByb2dyYW0pOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZhbGlkYXRl
UHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0
cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxv
YXQqIGFycmF5KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhB
dHRyaWIxZnYoaW5kZXgsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVy
dGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZihpbmRl
eCwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2
KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5KTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0Rm
bG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZs
b2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXpl
LCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRl
LCBHQzNEaW50cHRyIG9mZnNldCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6
OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3Ry
aWRlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZz
ZXQpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFudihHQzNEZW51bSBwbmFt
ZSwgR0MzRGJvb2xlYW4qIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xHZXRCb29sZWFudihwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
R2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFs
dWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldEZsb2F0dihwbmFt
ZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0
dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoYXR0YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpCisg
ICAgICAgIGF0dGFjaG1lbnQgPSBERVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVOQ0lMX0FUVEFD
SE1FTlQsIGVpdGhlciB3b3Jrcy4KKyAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFs
dWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldEludGVnZXJ2KHBu
YW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdihQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dy
YW0sIHBuYW1lLCB2YWx1ZSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJv
Z3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9n
cmFtKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50IGxlbmd0aDsKKyAg
ICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7
CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiAiIjsKKworICAgIEdMc2l6ZWkgc2l6
ZTsKKyAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhsZW5ndGgpOworCisg
ICAgOjpnbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0sIGxlbmd0aCwgJnNpemUsIGluZm8pOwor
ICAgIFN0cmluZyBzKGluZm8pOworICAgIGZhc3RGcmVlKGluZm8pOworICAgIHJldHVybiBzOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYo
dGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRT
aGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQq
IHZhbHVlKQoreworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisKKyAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6
aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIAor
ICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIERFTEVURV9TVEFUVVM6CisgICAgY2FzZSBT
SEFERVJfVFlQRToKKyAgICAgICAgLy8gTGV0IE9wZW5HTCBoYW5kbGUgdGhlc2UuCisgICAgICAg
IDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIHBuYW1lLCB2YWx1ZSk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAKKyAgICBjYXNlIENPTVBJTEVfU1RBVFVTOgorICAgICAgICBpZiAocmVzdWx0ID09
IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7CisgICAgICAgICAgICAoKnZhbHVlKSA9IHN0YXRp
Y19jYXN0PGludD4oZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICAoKnZhbHVlKSA9IHN0YXRpY19jYXN0PGludD4ocmVzdWx0LT5zZWNvbmQu
aXNWYWxpZCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIElORk9fTE9HX0xF
TkdUSDoKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgewor
ICAgICAgICAgICAgKCp2YWx1ZSkgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAoKnZhbHVlKSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVyKS5s
ZW5ndGgoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgU0hBREVSX1NPVVJD
RV9MRU5HVEg6CisgICAgICAgICgqdmFsdWUpID0gZ2V0U2hhZGVyU291cmNlKHNoYWRlcikubGVu
Z3RoKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihJTlZBTElEX0VOVU0pOworICAgIH0KK30KKworU3RyaW5nIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQor
eworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAg
ICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3Ig
cmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworCisgICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgIHJldHVybiAiIjsKKworICAg
ICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOworCisgICAgIGlmIChl
bnRyeS5pc1ZhbGlkKSB7CisgICAgICAgICBHTGludCBsZW5ndGg7CisgICAgICAgICA6OmdsR2V0
U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOworICAgICAgICAg
aWYgKCFsZW5ndGgpCisgICAgICAgICAgICAgcmV0dXJuICIiOworCisgICAgICAgICBHTHNpemVp
IHNpemU7CisgICAgICAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhsZW5n
dGgpOworCisgICAgICAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNp
emUsIGluZm8pOworCisgICAgICAgICBTdHJpbmcgcyhpbmZvKTsKKyAgICAgICAgIGZhc3RGcmVl
KGluZm8pOworICAgICAgICAgcmV0dXJuIHM7CisgICAgIH0KKyAgICAgcmV0dXJuIGVudHJ5Lmxv
ZzsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZv
cm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKworICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291
cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRl
cik7CisKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAg
ICByZXR1cm4gIiI7CisKKyAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQuc291cmNlOworfQorCisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsIHZhbHVl
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUs
IHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2YWx1ZSkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VW5pZm9ybWZ2KHByb2dy
YW0sIGxvY2F0aW9uLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVu
aWZvcm1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rp
bnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRVbmlm
b3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKworR0MzRGludCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29u
c3QgU3RyaW5nJiBuYW1lKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0s
IG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZl
cnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2
YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VmVydGV4QXR0
cmliZnYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFZlcnRleEF0dHJpYml2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldFZlcnRl
eEF0dHJpYml2KGluZGV4LCBwbmFtZSwgdmFsdWUpOworfQorCitHQzNEc2l6ZWlwdHIgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVu
dW0gcG5hbWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBHTHZvaWQqIHBv
aW50ZXIgPSAwOworICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcG5hbWUs
ICZwb2ludGVyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0MzRHNpemVpcHRyPihyZWludGVy
cHJldF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50
IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhl
bHMpCit7CisgICAgaWYgKHdpZHRoICYmIGhlaWdodCAmJiAhcGl4ZWxzKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIGlmICh0eXBlID09IEdMX0ZMT0FUKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IE5vdCBzdXBwb3J0ZWQgaW4gR0xFUyAyLjAKKyAgICAKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmYsIEdDM0RpbnQgeW9mZiwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKwor
ICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1z
IHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3Vi
aW1hZ2Ugc2l6ZQorICAgIDo6Z2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlv
ZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKK30KKworUGxhdGZvcm0z
RE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgbyA9IDA7CisgICAgZ2xHZW5CdWZmZXJzKDEsICZv
KTsKKyAgICByZXR1cm4gbzsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlRnJhbWVidWZmZXIoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IEdMdWludCBvID0gMDsKKyAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmbyk7CisgICAgcmV0dXJu
IG87Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dy
YW0oKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBnbENyZWF0ZVBy
b2dyYW0oKTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRl
UmVuZGVyYnVmZmVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQg
byA9IDA7CisgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30K
KworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKEdDM0Rl
bnVtIHR5cGUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsQ3Jl
YXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIg
OiBHTF9WRVJURVhfU0hBREVSKTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
R0x1aW50IG8gPSAwOworICAgIGdsR2VuVGV4dHVyZXMoMSwgJm8pOworICAgIHJldHVybiBvOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVj
dCBidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xEZWxldGVCdWZm
ZXJzKDEsICZidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFt
ZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsRGVsZXRlUHJv
Z3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVy
YnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmcmVuZGVyYnVmZmVyKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmpl
Y3Qgc2hhZGVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsRGVsZXRlU2hh
ZGVyKHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUo
UGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvcikKK3sKKyAgICBtX3N5bnRo
ZXRpY0Vycm9ycy5hZGQoZXJyb3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJr
Q29udGV4dENoYW5nZWQoKQoreworICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gZmFsc2U7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQoreworICAgIG1f
bGF5ZXJDb21wb3NpdGVkID0gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5
ZXJDb21wb3NpdGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllckNvbXBvc2l0ZWQ7Cit9
CisKK0V4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQorewor
ICAgIGlmICghbV9leHRlbnNpb25zKQorICAgICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0cihu
ZXcgRXh0ZW5zaW9uczNET3BlbkdMKHRoaXMpKTsKKyAgICByZXR1cm4gbV9leHRlbnNpb25zLmdl
dCgpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvQ2hhbmdl
TG9nCShyZXZpc2lvbiA5MDYxMSkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDExLTA3LTA3ICBDaGFuZ1Nlb2sgT2ggIDxz
aGl2YW1pZG93QGdtYWlsLmNvbT4KKworICAgICAgICBbR1RLXSBTdXBwb3J0IEVHTCBiYWNrZW5k
IGZvciBXZWJHTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTkwNjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbmNsdWRlIEVHTCBsaWJyYXJ5IHRvIGxpbmsgd2hlbiBlZ2wtYmFja2VuZCBpcyBjaG9vc2Vu
IGZvciBXZWJHTC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorCiAyMDExLTA3LTAxICBK
b29uZSBIdXIgIDxqb29uZS5odXJAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IE1hcnRpbiBSb2JpbnNvbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxl
LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiA5MDYxMSkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5n
IGNvcHkpCkBAIC04Niw2ICs4Niw3IEBAIGxpYndlYmtpdGd0a19AV0VCS0lUR1RLX0FQSV9NQUpP
Ul9WRVJTSU8KIAkkKHdlYmNvcmVfbGRmbGFncykgXAogCSQoQ0FJUk9fTElCUykgXAogCSQoQ09W
RVJBR0VfTERGTEFHUykgXAorCSQoRUdMX0xJQlMpIFwKIAkkKEVOQ0hBTlRfTElCUykgXAogCSQo
RlJFRVRZUEVfTElCUykgXAogCSQoR0FJTF9MSUJTKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100769</attachid>
            <date>2011-07-13 22:35:16 -0700</date>
            <delta_ts>2011-07-22 06:06:37 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>P59064.patch</filename>
            <type>text/plain</type>
            <size>77321</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDkwOTc3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDct
MTMgIENoYW5nU2VvayBPaCAgPHNoaXZhbWlkb3dAZ21haWwuY29tPgorCisgICAgICAgIFtHVEtd
IFN1cHBvcnQgRUdMIGJhY2tlbmQgZm9yIFdlYkdMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBjaG9vc2Ug
Z2wtYmFja2VuZC4KKworICAgICAgICAqIGNvbmZpZ3VyZS5hYzoKKwogMjAxMS0wNy0xMyAgTU9S
SVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbU2hhZG93Q29udGVu
dEVsZW1lbnRdIGZvcndhcmRlZCBub2RlIHNob3VsZCBiZSBhYmxlIHRvIGFjY2VzcyBpdHMgaG9z
dGluZyBjb250ZW50IGVsZW1lbnQuCkluZGV4OiBjb25maWd1cmUuYWMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
Y29uZmlndXJlLmFjCShyZXZpc2lvbiA5MDk3NykKKysrIGNvbmZpZ3VyZS5hYwkod29ya2luZyBj
b3B5KQpAQCAtMzc4LDEyICszNzgsMzYgQEAgQUNfQVJHX0VOQUJMRSh3ZWJnbCwKICAgICAgICAg
ICAgICAgW10sIFtlbmFibGVfd2ViZ2w9Im5vIl0pCiBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3dl
YmdsXSkKIAorIyBkZXRlcm1pbmUgdGhlIEdMIGJhY2tlbmQKK0FDX01TR19DSEVDS0lORyhbdGhl
IEdMIGJhY2tlbmQgdG8gdXNlXSkKK0FDX0FSR19XSVRIKGdsX2JhY2tlbmQsCisgICAgICAgICAg
ICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWdsLWJhY2tlbmQ9QDw6QGdseC9lZ2xAOj5AXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFtTZWxlY3QgZ2wgYmFja2VuZCBbZGVmYXVsdD1nbHhd
XSksCisgICAgICAgICAgICBbXSxbd2l0aF9nbF9iYWNrZW5kPSJnbHgiXSkKKworY2FzZSAiJHdp
dGhfZ2xfYmFja2VuZCIgaW4KKyAgICAgZ2x4fGVnbCkgOzsKKyAgICAgKikgQUNfTVNHX0VSUk9S
KFtJbnZhbGlkIGdsIGJhY2tlbmQ6IG11c3QgYmUgZ2x4LCBvciBlZ2wuXSkgOzsKK2VzYWMKKwor
QUNfTVNHX1JFU1VMVChbJHdpdGhfZ2xfYmFja2VuZF0pCisKIGlmIHRlc3QgIiRlbmFibGVfd2Vi
Z2wiID0gInllcyI7IHRoZW4KLSAgICBBQ19DSEVDS19IRUFERVJTKFtHTC9nbC5oXSwgW10sIEFD
X01TR19FUlJPUihbT3BlbkdMIGhlYWRlciBub3QgZm91bmRdKSkKLSAgICBBQ19DSEVDS19IRUFE
RVJTKFtHTC9nbHguaF0sIFtdLCBBQ19NU0dfRVJST1IoW0dMWCBoZWFkZXIgbm90IGZvdW5kXSkp
Ci0gICAgT1BFTkdMX0xJQlM9LWxHTAorICAgIGNhc2UgIiR3aXRoX2dsX2JhY2tlbmQiIGluCisg
ICAgICAgIGdseCkgQUNfQ0hFQ0tfSEVBREVSUyhbR0wvZ2wuaF0sIFtdLCBBQ19NU0dfRVJST1Io
W09wZW5HTCBoZWFkZXIgbm90IGZvdW5kXSkpCisgICAgICAgICAgICAgQUNfQ0hFQ0tfSEVBREVS
UyhbR0wvZ2x4LmhdLCBbXSwgQUNfTVNHX0VSUk9SKFtHTFggaGVhZGVyIG5vdCBmb3VuZF0pKQor
ICAgICAgICAgICAgIE9QRU5HTF9MSUJTPS1sR0wKKyAgICAgICAgICAgICBBQ19TVUJTVChbT1BF
TkdMX0xJQlNdKQorICAgICAgICAgICAgIDs7CisgICAgICAgIGVnbCkgQUNfQ0hFQ0tfSEVBREVS
UyhbR0xFUzIvZ2wyLmhdLCBbXSwgQUNfTVNHX0VSUk9SKFtPcGVuR0wgRVMgaGVhZGVyIG5vdCBm
b3VuZF0pKQorICAgICAgICAgICAgIEFDX0NIRUNLX0hFQURFUlMoW0VHTC9lZ2wuaF0sIFtdLCBB
Q19NU0dfRVJST1IoW0VHTCBoZWFkZXIgbm90IGZvdW5kXSkpCisgICAgICAgICAgICAgT1BFTkdM
X0xJQlM9LWxHTEVTdjIKKyAgICAgICAgICAgICBFR0xfTElCUz0tbEVHTAorICAgICAgICAgICAg
IEFDX1NVQlNUKFtPUEVOR0xfTElCU10pCisgICAgICAgICAgICAgQUNfU1VCU1QoW0VHTF9MSUJT
XSkKKyAgICAgICAgICAgICA7OworICAgIGVzYWMKIGZpCi1BQ19TVUJTVChbT1BFTkdMX0xJQlNd
KQogCiAjIGNoZWNrIHdoZXRoZXIgdG8gZW5hYmxlIGNoYW5uZWwgbWVzc2FnaW5nIHN1cHBvcnQK
IEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgSFRNTDUgQ2hhbm5lbCBNZXNzYWdp
bmcgc3VwcG9ydF0pCkBAIC0xMTM1LDYgKzExNTksMTAgQEAgQU1fQ09ORElUSU9OQUwoW1VTRV9H
TElCX1VOSUNPREVdLCBbdGVzdAogQU1fQ09ORElUSU9OQUwoW1VTRV9GUkVFVFlQRV0sIFt0ZXN0
ICIkd2l0aF9mb250X2JhY2tlbmQiID0gImZyZWV0eXBlIl0pCiBBTV9DT05ESVRJT05BTChbVVNF
X1BBTkdPXSwgW3Rlc3QgIiR3aXRoX2ZvbnRfYmFja2VuZCIgPSAicGFuZ28iXSkKIAorIyBGb250
IGJhY2tlbmQgY29uZGl0aW9uYWxzCitBTV9DT05ESVRJT05BTChbVVNFX0dMWF0sIFt0ZXN0ICIk
d2l0aF9nbF9iYWNrZW5kIiA9ICJnbHgiXSkKK0FNX0NPTkRJVElPTkFMKFtVU0VfRUdMXSwgW3Rl
c3QgIiR3aXRoX2dsX2JhY2tlbmQiID0gImVnbCJdKQorCiAjIEdTdHJlYW1lciBmZWF0dXJlIGNv
bmRpdGlvbmFsCiBBTV9DT05ESVRJT05BTChbVVNFX0dTVFJFQU1FUl0sIFt0ZXN0ICIkaGF2ZV9n
c3RyZWFtZXIiID0gInllcyJdKQogCkBAIC0xMjQ5LDYgKzEyNzcsNyBAQCBCdWlsZCBjb25maWd1
cmF0aW9uOgogIENvZGUgY292ZXJhZ2Ugc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogJGVuYWJsZV9jb3ZlcmFnZQogIFVuaWNvZGUgYmFja2VuZCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHdpdGhfdW5pY29kZV9iYWNrZW5kCiAg
Rm9udCBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiAkd2l0aF9mb250X2JhY2tlbmQKKyBHTCBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6ICR3aXRoX2dsX2JhY2tlbmQKICBPcHRpbWl6ZWQgbWVt
b3J5IGFsbG9jYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfZmFz
dF9tYWxsb2MKIEZlYXR1cmVzOgogIDNEIFJlbmRlcmluZyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogJGVuYWJsZV8zZF9yZW5kZXJpbmcKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDkwOTc3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTkwIEBACisyMDExLTA3LTEzICBDaGFuZ1Nlb2sgT2ggIDxzaGl2
YW1pZG93QGdtYWlsLmNvbT4KKworICAgICAgICBbR1RLXSBTdXBwb3J0IEVHTCBiYWNrZW5kIGZv
ciBXZWJHTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTkwNjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgdGhyZWUgZmlsZXMgbmV3bHkgZm9yIGVnbC1iYWNrZW5kLiBUaGV5IGhhdmUgQVBJcyBiYXNl
ZCBvbiBFR0wgJiBHTEVTIGludGVyZmFjZS4KKyAgICAgICAgQW5kIG1vZGlmeSBHTlVtYWtlZmls
ZSB0byBjaG9vc2UgcHJvcGVyIGNvbXBpbGUgdGFyZ2V0cyBhY2NvcmRpbmcgdG8gZ2wtYmFja2Vu
ZCB3aGljaCBjb3VsZCBiZSBlZ2wgb3IgZ2x4LgorCisgICAgICAgIE5vIHRlc3QgcmVxdWlyZWQg
bmV3bHkuCisgICAgICAgIFdlIGNvdWxkIHZlcmlmeSB0aGlzIGZ1bmN0aW9uYWxpdHkKKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgYnVpbGQtZmxhZ3MgbGlrZSBXVEZfVVNFX0dMWCwg
V1RGX1VTRV9FR0wuCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQ2hvb3NlIGNvbXBp
bGUgdGFyZ2V0IGZpbGUgdG8gbWVldCBnbC1iYWNrZW5kLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL2VnbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL2VnbC9HcmFwaGljc0NvbnRleHQzREd0ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9ndGsvZWdsL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKHNoYXJlZERpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6YWN0aXZl
R3JhcGhpY3NDb250ZXh0cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjphZGRBY3RpdmVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVtb3ZlQWN0aXZlR3JhcGhpY3NDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNsZWFudXBBY3RpdmVD
b250ZXh0c0F0RXhpdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6Y3JlYXRlUGJ1ZmZlckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6Y3JlYXRlUGl4bWFwQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6On5HcmFwaGljc0NvbnRl
eHQzREludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZh
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9JbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnJlc2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVy
bmFsRnJhbWVidWZmZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
YWN0aXZlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YXR0
YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQXR0
cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZFJlbmRlcmJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmNsZWFyRGVwdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmNsZWFyU3RlbmNpbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y29sb3JNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxl
U2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1h
Z2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1Yklt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmN1bGxGYWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aEZ1bmMpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmRyYXdBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6ZW5hYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmbHVzaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4
dHVyZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlwbWFwKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVkU2hhZGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1
dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpoaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojppc0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpp
c1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVy
YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsaW5lV2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6cG9seWdvbk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpz
dGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNp
bEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3Rl
bmNpbE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxN
YXNrU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5j
aWxPcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2Vw
YXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRl
cmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9y
bTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTRpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtNGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
TWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
TWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
TWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dy
YW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFm
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2cpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpzeW50aGVzaXplR0xFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6bWFya0NvbnRleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldEV4dGVuc2lvbnMpOgorCiAyMDExLTA3LTEzICBNT1JJVEEgSGFqaW1lICA8
bW9ycml0YUBnb29nbGUuY29tPgogCiAgICAgICAgIFtTaGFkb3dDb250ZW50RWxlbWVudF0gZm9y
d2FyZGVkIG5vZGUgc2hvdWxkIGJlIGFibGUgdG8gYWNjZXNzIGl0cyBob3N0aW5nIGNvbnRlbnQg
ZWxlbWVudC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA5MDk3NykKKysrIFNv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4
LDcgQEAgd2ViY29yZWd0a19jcHBmbGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUKIGVuZGlmICMgRU5EIFVTRV9GUkVFVFlQRQog
Ci0jIC0tLQorIyAtLQogIyBQYW5nbyBmb250IGJhY2tlbmQKICMgLS0tCiBpZiBVU0VfUEFOR08K
QEAgLTEzNyw2ICsxMzcsMjAgQEAgd2ViY29yZWd0a19jcHBmbGFncyArPSBcCiAJLUkkKHNyY2Rp
cikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28KIGVuZGlmICMgRU5EIFVT
RV9QQU5HTwogCisjIC0tCisjIEdMWCBnbCBiYWNrZW5kCisjIC0tLQoraWYgVVNFX0dMWAord2Vi
Y29yZWd0a19jcHBmbGFncyArPSAtRFdURl9VU0VfR0xYPTEKK2VuZGlmICMgRU5EIFVTRV9HTFgK
KworIyAtLQorIyBFR0wgZ2wgYmFja2VuZAorIyAtLS0KK2lmIFVTRV9FR0wKK3dlYmNvcmVndGtf
Y3BwZmxhZ3MgKz0gLURXVEZfVVNFX0VHTD0xCitlbmRpZiAjIEVORCBVU0VfRUdMCisKICMgLS0t
LQogIyBIVE1MIERldGFpbHMgRWxlbWVudAogIyAtLS0tCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0JKHJldmlzaW9uIDkwOTc3KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNDc1MiwxNCArNDc1MiwyOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3
aW5nQnVmZmVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0RyYXdpbmdCdWZmZXJHdGsuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBcCisJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCitlbmRpZiAg
IyBFTkQgRU5BQkxFX1dFQkdMCisKKyMgLS0tLQorIyBPcGVuR0wgYmFja2VuZAorIyAtLS0tCitp
ZiBVU0VfR0xYCit3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWwuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAotZW5kaWYgICMgRU5EIEVO
QUJMRV9XRUJHTAorZW5kaWYgICMgRU5EIFVTRV9HTFgKKworaWYgVVNFX0VHTAord2ViY29yZV9z
b3VyY2VzICs9IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvZWdsL0dy
YXBoaWNzQ29udGV4dDNER3RrLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL2VnbC9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmNwcCBcCisJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3Bw
CitlbmRpZiAgIyBFTkQgVVNFX0dMWAogCiAjIC0tLQogIyBNSFRNTCBzdXBwb3J0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmgJKHJldmlzaW9uIDkwOTc3KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMjAsOSArMjAsMTggQEAKICNpZm5kZWYgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbF9oCiAjZGVmaW5lIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWxfaAogCisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworI2lmIFVTRShFR0wpCit0eXBlZGVmIHZvaWQq
IEVHTENvbmZpZzsKK3R5cGVkZWYgdm9pZCogRUdMQ29udGV4dDsKK3R5cGVkZWYgdm9pZCogRUdM
RGlzcGxheTsKK3R5cGVkZWYgdm9pZCogRUdMU3VyZmFjZTsKKyNlbHNlCiB0eXBlZGVmIHN0cnVj
dCBfX0dMWGNvbnRleHRSZWMgKkdMWENvbnRleHQ7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgR0xY
UGJ1ZmZlcjsKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBHTFhQaXhtYXA7CisjZW5kaWYKIHR5cGVk
ZWYgdW5zaWduZWQgY2hhciBHTHVieXRlOwogdHlwZWRlZiB1bnNpZ25lZCBsb25nIFBpeG1hcDsK
IApAQCAtMzgsMTkgKzQ3LDMzIEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwgewog
CiAgICAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CisjaWYg
VVNFKEVHTCkKKyAgICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCogY3JlYXRlUGJ1
ZmZlckNvbnRleHQoRUdMRGlzcGxheSk7CisgICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWwqIGNyZWF0ZVBpeG1hcENvbnRleHQoRUdMRGlzcGxheSk7CisgICAgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbChFR0xEaXNwbGF5LCBFR0xDb250ZXh0LCBFR0xTdXJmYWNlKTsKKyAgICBH
cmFwaGljc0NvbnRleHQzREludGVybmFsKEVHTERpc3BsYXksIEVHTENvbnRleHQsIFBpeG1hcCwg
RUdMU3VyZmFjZSk7CisjZWxzZQogICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzREludGVybmFs
KiBjcmVhdGVQYnVmZmVyQ29udGV4dCgpOwogICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsKiBjcmVhdGVQaXhtYXBDb250ZXh0KCk7CiAgICAgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbChHTFhDb250ZXh0LCBHTFhQYnVmZmVyKTsKICAgICBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsKEdMWENvbnRleHQsIFBpeG1hcCwgR0xYUGl4bWFwKTsKKyNlbmRpZgogCiAgICAgc3RhdGlj
IHZvaWQgYWRkQWN0aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKik7CiAgICAg
c3RhdGljIHZvaWQgcmVtb3ZlQWN0aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNE
Kik7CiAgICAgc3RhdGljIHZvaWQgY2xlYW51cEFjdGl2ZUNvbnRleHRzQXRFeGl0KCk7CiAKKyNp
ZiBVU0UoRUdMKQorICAgIEVHTENvbnRleHQgbV9jb250ZXh0OworICAgIEVHTERpc3BsYXkgbV9k
aXNwbGF5OworICAgIEVHTFN1cmZhY2UgbV9wYnVmZmVyU3VyZmFjZTsKKyAgICBFR0xTdXJmYWNl
IG1fcGl4bWFwU3VyZmFjZTsKKyNlbHNlCiAgICAgR0xYQ29udGV4dCBtX2NvbnRleHQ7CiAgICAg
R0xYUGJ1ZmZlciBtX3BidWZmZXI7Ci0gICAgUGl4bWFwIG1fcGl4bWFwOwogICAgIEdMWFBpeG1h
cCBtX2dseFBpeG1hcDsKKyNlbmRpZgorICAgIFBpeG1hcCBtX3BpeG1hcDsKIH07CiAKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9lZ2wvR3JhcGhpY3NDb250
ZXh0M0RHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9lZ2wvR3JhcGhpY3NDb250ZXh0M0RHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL2VnbC9HcmFwaGljc0NvbnRleHQzREd0
ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDExIENoYW5nU2VvayBPaCA8c2hp
dmFtaWRvd0BnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1ZGUgIkV4
dGVuc2lvbnMzRE9wZW5HTC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwu
aCIKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKyNp
bmNsdWRlIDx3dGYvTm90Rm91bmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBo
aWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmli
dXRlcywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0
eWxlIHJlbmRlclN0eWxlKQoreworICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lc24ndCBj
dXJyZW50bHkgc3VwcG9ydCByZW5kZXJpbmcgZGlyZWN0bHkgdG8gdGhlIEhvc3RXaW5kb3cuCisg
ICAgaWYgKHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzREludGVybmFsPiBpbnRl
cm5hbCA9IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNyZWF0ZSgpOworICAgIGlmICghaW50
ZXJuYWwpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJpYnV0ZXMsIGhv
c3RXaW5kb3csIGZhbHNlKSk7CisgICAgY29udGV4dC0+bV9pbnRlcm5hbCA9IGludGVybmFsLnJl
bGVhc2UoKTsKKyAgICByZXR1cm4gY29udGV4dC5yZWxlYXNlKCk7Cit9CisKK0dyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgYm9vbCkKKyAgICA6IG1fY3VycmVudFdpZHRoKDApCisg
ICAgLCBtX2N1cnJlbnRIZWlnaHQoMCkKKyAgICAsIG1faXNSZXNvdXJjZVNhZmUoZmFsc2UpCisg
ICAgLCBtX2F0dHJzKGF0dHJpYnV0ZXMpCisgICAgLCBtX3RleHR1cmUoMCkKKyAgICAsIG1fZmJv
KDApCisgICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQorICAgICwgbV9ib3VuZEZCTygwKQor
ICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQorICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNp
bEJ1ZmZlcigwKQorICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCit7CisgICAgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YWRkQWN0aXZlR3JhcGhpY3NDb250ZXh0KHRoaXMpOwor
CisgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisKKyAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRv
IHJlbmRlciBpbnRvLgorICAgIDo6Z2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKKyAgICA6OmdsVGV4UGFy
YW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7
CisgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklM
VEVSLCBHTF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVy
aShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Cisg
ICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworCisgICAgLy8gQ3JlYXRlIGFu
IEZCTy4KKyAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworCisgICAgbV9ib3VuZEZCTyA9IG1f
ZmJvOworICAgIGlmICghbV9hdHRycy5hbnRpYWxpYXMgJiYgKG1fYXR0cnMuc3RlbmNpbCB8fCBt
X2F0dHJzLmRlcHRoKSkKKyAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhT
dGVuY2lsQnVmZmVyKTsKKyAgICAKKyAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCisg
ICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMo
MSwgJm1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZS
QU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgbV9ib3VuZEZCTyA9IG1fbXVs
dGlzYW1wbGVGQk87CisgICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2Ft
cGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMu
ZGVwdGgpCisgICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBs
ZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfQorCisgICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRp
b24uCisgICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzOworICAgIFNoSW5pdEJ1
aWx0SW5SZXNvdXJjZXMoJkFOR0xFUmVzb3VyY2VzKTsKKworICAgIGdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0
ZXhBdHRyaWJzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRF
WF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9y
cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RP
UlMsICZBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyk7CisgICAgZ2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xF
UmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdM
RVJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2Vy
dihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291
cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250
ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhG
cmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKKworICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3Bl
bkdMIEVTLgorICAgIEFOR0xFUmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0gMTsKKyAgICBtX2Nv
bXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CisKKyAgICA6OmdsQ2xlYXJDb2xv
cigwLCAwLCAwLCAwKTsKK30KKworR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQz
RCgpCit7CisgICAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVtb3ZlQWN0aXZlR3JhcGhp
Y3NDb250ZXh0KHRoaXMpOworICAgIGlmICghbV9pbnRlcm5hbC0+bV9jb250ZXh0KQorICAgICAg
ICByZXR1cm47CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRGVsZXRlVGV4
dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAg
ICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIp
OworICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAg
ICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNp
bEJ1ZmZlcik7CisgICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1w
bGVGQk8pOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9h
dHRycy5kZXB0aCkKKyAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2Rl
cHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfQorICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwg
Jm1fZmJvKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50
KCkKK3sKKyAgICBpZiAoIW1faW50ZXJuYWwpCisgICAgICAgIHJldHVybjsKKyAgICBtX2ludGVy
bmFsLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHQz
RCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpCit7CisgICAg
cmV0dXJuIG1faW50ZXJuYWwtPm1fY29udGV4dDsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30K
KworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9lZ2wvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL2VnbC9HcmFwaGljc0Nv
bnRleHQzREludGVybmFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9lZ2wvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxp
YSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93QGdt
YWlsLmNvbT4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQor
ICogIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaCIKKworI2lm
IEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVk
ZSA8RUdML2VnbC5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPEdMRVMyL2ds
MmV4dC5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CisKK3N0YXRpYyBEaXNwbGF5KiBnU2hhcmVkRGlz
cGxheSA9IDA7CitzdGF0aWMgRGlzcGxheSogc2hhcmVkRGlzcGxheSgpCit7CisgICAgaWYgKCFn
U2hhcmVkRGlzcGxheSkKKyAgICAgICAgZ1NoYXJlZERpc3BsYXkgPSBYT3BlbkRpc3BsYXkoMCk7
CisgICAgcmV0dXJuIGdTaGFyZWREaXNwbGF5OworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIEJlY2F1c2Ugb2YgZHJpdmVyIGJ1Z3MsIGV4aXRpbmcgdGhlIHByb2dyYW0gd2hlbiB0aGVy
ZSBhcmUgYWN0aXZlIHBidWZmZXJzCisvLyBjYW4gY3Jhc2ggdGhlIFggc2VydmVyICh0aGlzIGhh
cyBiZWVuIG9ic2VydmVkIHdpdGggdGhlIG9mZmljaWFsIE52aWRpYSBkcml2ZXJzKS4KKy8vIFdl
IG5lZWQgdG8gZW5zdXJlIHRoYXQgd2UgY2xlYW4gZXZlcnl0aGluZyB1cCBvbiBleGl0LiBUaGVy
ZSBhcmUgc2V2ZXJhbCByZWFzb25zCisvLyB0aGF0IEdyYXBoaWNzQ29udGV4dDNEcyB3aWxsIHN0
aWxsIGJlIGFsaXZlIGF0IGV4aXQsIGluY2x1ZGluZyB1c2VyIGVycm9yIChtZW1vcnkKKy8vIGxl
YWtzKSBhbmQgdGhlIHBhZ2UgY2FjaGUuIEluIGFueSBjYXNlLCB3ZSBkb24ndCB3YW50IHRoZSBY
IHNlcnZlciB0byBjcmFzaC4KK3N0YXRpYyBib29sIGNsZWFuaW5nVXBBdEV4aXQgPSBmYWxzZTsK
K3N0YXRpYyBWZWN0b3I8R3JhcGhpY3NDb250ZXh0M0QqPiYgYWN0aXZlR3JhcGhpY3NDb250ZXh0
cygpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8R3JhcGhpY3NDb250ZXh0M0Qq
PiwgY29udGV4dHMsICgpKTsKKyAgICByZXR1cm4gY29udGV4dHM7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6YWRkQWN0aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0KQoreworICAgIHN0YXRpYyBib29sIGFkZGVkQXRFeGl0SGFuZGxlciA9
IGZhbHNlOworICAgIGlmICghYWRkZWRBdEV4aXRIYW5kbGVyKSB7CisgICAgICAgIGF0ZXhpdCgm
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y2xlYW51cEFjdGl2ZUNvbnRleHRzQXRFeGl0KTsK
KyAgICAgICAgYWRkZWRBdEV4aXRIYW5kbGVyID0gdHJ1ZTsKKyAgICB9CisgICAgYWN0aXZlR3Jh
cGhpY3NDb250ZXh0cygpLmFwcGVuZChjb250ZXh0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpyZW1vdmVBY3RpdmVHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQpCit7CisgICAgaWYgKGNsZWFuaW5nVXBBdEV4aXQpCisgICAgICAgIHJldHVy
bjsKKworICAgIFZlY3RvcjxHcmFwaGljc0NvbnRleHQzRCo+JiBjb250ZXh0cyA9IGFjdGl2ZUdy
YXBoaWNzQ29udGV4dHMoKTsKKyAgICBzaXplX3QgbG9jYXRpb24gPSBjb250ZXh0cy5maW5kKGNv
bnRleHQpOworICAgIGlmIChsb2NhdGlvbiAhPSBXVEY6Om5vdEZvdW5kKQorICAgICAgICBjb250
ZXh0cy5yZW1vdmUobG9jYXRpb24pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OmNsZWFudXBBY3RpdmVDb250ZXh0c0F0RXhpdCgpCit7CisgICAgY2xlYW5pbmdVcEF0RXhp
dCA9IHRydWU7CisKKyAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0M0QqPiYgY29udGV4dHMgPSBh
Y3RpdmVHcmFwaGljc0NvbnRleHRzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb250
ZXh0cy5zaXplKCk7IGkrKykKKyAgICAgICAgY29udGV4dHNbaV0tPn5HcmFwaGljc0NvbnRleHQz
RCgpOworCisgICAgaWYgKCFnU2hhcmVkRGlzcGxheSkKKyAgICAgICAgcmV0dXJuOworICAgIFhD
bG9zZURpc3BsYXkoZ1NoYXJlZERpc3BsYXkpOworICAgIGdTaGFyZWREaXNwbGF5ID0gMDsKK30K
KworUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzREludGVybmFsPiBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpjcmVhdGUoKQoreworICAgIGlmICghc2hhcmVkRGlzcGxheSgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIEVHTERpc3BsYXkgZWdsRGlzcGxheSA9IGVnbEdldERp
c3BsYXkoc2hhcmVkRGlzcGxheSgpKTsKKyAgICBpZiAoZWdsRGlzcGxheSA9PSBFR0xfTk9fRElT
UExBWSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIWVnbEluaXRpYWxpemUo
ZWdsRGlzcGxheSwgMCwgMCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbCogaW50ZXJuYWwgPSBjcmVhdGVQYnVmZmVyQ29udGV4dChlZ2xE
aXNwbGF5KTsKKyAgICBpZiAoIWludGVybmFsKQorICAgICAgICBpbnRlcm5hbCA9IGNyZWF0ZVBp
eG1hcENvbnRleHQoZWdsRGlzcGxheSk7CisgICAgaWYgKCFpbnRlcm5hbCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICAvLyBUaGUgR3JhcGhpY3NDb250ZXh0M0QgY29uc3RydWN0b3Ig
cmVxdWlyZXMgdGhhdCB0aGlzIGNvbnRleHQgaXMgdGhlIGN1cnJlbnQgT3BlbkdMIGNvbnRleHQu
CisgICAgaW50ZXJuYWwtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBhZG9wdFB0
cihpbnRlcm5hbCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwqIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OmNyZWF0ZVBidWZmZXJDb250ZXh0KEVHTERpc3BsYXkgZWdsRGlzcGxh
eSkKK3sKKyAgICBpbnQgZmJDb25maWdBdHRyYnNbXSA9IHsKKyAgICAgICAgRUdMX0JVRkZFUl9T
SVpFLCBFR0xfRE9OVF9DQVJFLAorICAgICAgICBFR0xfUkVEX1NJWkUsIDgsCisgICAgICAgIEVH
TF9HUkVFTl9TSVpFLCA4LAorICAgICAgICBFR0xfQkxVRV9TSVpFLCA4LAorICAgICAgICBFR0xf
QUxQSEFfU0laRSwgOCwKKyAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9F
UzJfQklULAorICAgICAgICBFR0xfU1VSRkFDRV9UWVBFLCBFR0xfUEJVRkZFUl9CSVQsCisgICAg
ICAgIEVHTF9OT05FCisgICAgfTsKKyAgICBFR0xDb25maWcgZWdsQ29uZmlnc1sxXTsKKyAgICBF
R0xpbnQgbnVtT2ZDb25maWc7CisgICAgaWYgKCFlZ2xDaG9vc2VDb25maWcoZWdsRGlzcGxheSwg
ZmJDb25maWdBdHRyYnMsICZlZ2xDb25maWdzWzBdLCAxLCAmbnVtT2ZDb25maWcpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAoIW51bU9mQ29uZmlnKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIC8vIFdlIHdpbGwgYmUgcmVuZGVyaW5nIHRvIGEgdGV4dHVyZSwgc28gb3VyIHBidWZmZXIg
ZG9lcyBub3QgbmVlZCB0byBiZSBsYXJnZS4KKyAgICBzdGF0aWMgY29uc3QgaW50IHBidWZmZXJB
dHRyaWJ1dGVzW10gPSB7IEVHTF9XSURUSCwgMSwgRUdMX0hFSUdIVCwgMSwgRUdMX05PTkUgfTsK
KyAgICBFR0xTdXJmYWNlIGVnbFN1cmZhY2UgPSBlZ2xDcmVhdGVQYnVmZmVyU3VyZmFjZShlZ2xE
aXNwbGF5LCBlZ2xDb25maWdzWzBdLCBwYnVmZmVyQXR0cmlidXRlcyk7CisgICAgaWYgKGVnbFN1
cmZhY2UgPT0gRUdMX05PX1NVUkZBQ0UpCisgICAgICAgIHJldHVybiAwOworCisgICAgRUdMaW50
IGVnbENvbnRleHRBdHRyYnNbXSA9IHsgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sIDIsIEVH
TF9OT05FIH07CisgICAgRUdMQ29udGV4dCBlZ2xDb250ZXh0ID0gZWdsQ3JlYXRlQ29udGV4dChl
Z2xEaXNwbGF5LCBlZ2xDb25maWdzWzBdLCBFR0xfTk9fQ09OVEVYVCwgZWdsQ29udGV4dEF0dHJi
cyk7CisgICAgaWYgKGVnbENvbnRleHQgPT0gRUdMX05PX0NPTlRFWFQpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIG5ldyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKGVnbERpc3Bs
YXksIGVnbENvbnRleHQsIGVnbFN1cmZhY2UpOworfQorCitHcmFwaGljc0NvbnRleHQzREludGVy
bmFsKiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjcmVhdGVQaXhtYXBDb250ZXh0KEVHTERp
c3BsYXkgZWdsRGlzcGxheSkKK3sKKyAgICBpbnQgc2NyZWVuID0gRGVmYXVsdFNjcmVlbihzaGFy
ZWREaXNwbGF5KCkpOworICAgIGNvbnN0IGludCBkZXB0aCA9IERlZmF1bHREZXB0aChzaGFyZWRE
aXNwbGF5KCksIHNjcmVlbik7CisgICAgY29uc3QgaW50IHdpZHRoID0gMTsKKyAgICBjb25zdCBp
bnQgaGVpZ2h0ID0gMTsKKworICAgIHN0YXRpYyBpbnQgZWdsQ29uZmlnQXR0cnNbXSA9IHsKKyAg
ICAgICAgRUdMX0JVRkZFUl9TSVpFLCBFR0xfRE9OVF9DQVJFLAorICAgICAgICBFR0xfUkVEX1NJ
WkUsIDgsCisgICAgICAgIEVHTF9HUkVFTl9TSVpFLCA4LAorICAgICAgICBFR0xfQkxVRV9TSVpF
LCA4LAorICAgICAgICBFR0xfQUxQSEFfU0laRSwgOCwKKyAgICAgICAgRUdMX0RFUFRIX1NJWkUs
IGRlcHRoLAorICAgICAgICBFR0xfU1VSRkFDRV9UWVBFLCBFR0xfUElYTUFQX0JJVCwKKyAgICAg
ICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklULAorICAgICAgICBFR0xf
Tk9ORQorICAgIH07CisKKyAgICBFR0xDb25maWcgZWdsQ29uZmlnc1sxXTsKKyAgICBFR0xpbnQg
bnVtT2ZDb25maWc7CisgICAgaWYgKCFlZ2xDaG9vc2VDb25maWcoZWdsRGlzcGxheSwgZWdsQ29u
ZmlnQXR0cnMsICZlZ2xDb25maWdzWzBdLCAxLCAmbnVtT2ZDb25maWcpKQorICAgICAgICByZXR1
cm4gMDsKKyAgICBpZiAoIW51bU9mQ29uZmlnKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEVH
TGludCBlZ2xDb250ZXh0QXR0cmJzW10gPSB7IEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLCAy
LCBFR0xfTk9ORSB9OworICAgIEVHTENvbnRleHQgY29udGV4dCA9IGVnbENyZWF0ZUNvbnRleHQo
ZWdsRGlzcGxheSwgZWdsQ29uZmlnc1swXSwgRUdMX05PX0NPTlRFWFQsIGVnbENvbnRleHRBdHRy
YnMpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBQaXhtYXAg
cGl4bWFwID0gWENyZWF0ZVBpeG1hcChzaGFyZWREaXNwbGF5KCksIERlZmF1bHRSb290V2luZG93
KHNoYXJlZERpc3BsYXkoKSksIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKyAgICBpZiAoIXBpeG1h
cCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBFR0xTdXJmYWNlIGVnbFBpeG1hcFN1cmZhY2Ug
PSBlZ2xDcmVhdGVQaXhtYXBTdXJmYWNlKGVnbERpc3BsYXksIGVnbENvbmZpZ3NbMF0sIHBpeG1h
cCwgMCk7CisgICAgaWYgKCFlZ2xQaXhtYXBTdXJmYWNlKSB7CisgICAgICAgIFhGcmVlUGl4bWFw
KHNoYXJlZERpc3BsYXkoKSwgcGl4bWFwKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgcmV0dXJuIG5ldyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKGVnbERpc3BsYXksIGNvbnRl
eHQsIHBpeG1hcCwgZWdsUGl4bWFwU3VyZmFjZSk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoRUdMRGlzcGxheSBkaXNwbGF5LCBFR0xD
b250ZXh0IGNvbnRleHQsIEVHTFN1cmZhY2UgcGJ1ZmZlclN1cmZhY2UpCisgICAgOiBtX2NvbnRl
eHQoY29udGV4dCkKKyAgICAsIG1fZGlzcGxheShkaXNwbGF5KQorICAgICwgbV9wYnVmZmVyU3Vy
ZmFjZShwYnVmZmVyU3VyZmFjZSkKKyAgICAsIG1fcGl4bWFwU3VyZmFjZSgwKQorICAgICwgbV9w
aXhtYXAoMCkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbChFR0xEaXNwbGF5IGRpc3BsYXksIEVHTENvbnRleHQgY29udGV4dCwgUGl4
bWFwIHBpeG1hcCwgRUdMU3VyZmFjZSBwaXhtYXBTdXJmYWNlKQorICAgIDogbV9jb250ZXh0KGNv
bnRleHQpCisgICAgLCBtX2Rpc3BsYXkoZGlzcGxheSkKKyAgICAsIG1fcGJ1ZmZlclN1cmZhY2Uo
MCkKKyAgICAsIG1fcGl4bWFwU3VyZmFjZShwaXhtYXBTdXJmYWNlKQorICAgICwgbV9waXhtYXAo
cGl4bWFwKQoreworfQorCitHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp+R3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbCgpCit7CisgICAgaWYgKG1fY29udGV4dCkgeworICAgICAgICAvLyBUaGlz
IG1heSBiZSBuZWNlc3NhcnkgdG8gcHJldmVudCBjcmFzaGVzIHdpdGggTlZpZGlhJ3MgY2xvc2Vk
IHNvdXJjZSBkcml2ZXJzLiBPcmlnaW5hbGx5CisgICAgICAgIC8vIGZyb20gTW96aWxsYSdzIDNE
IGNhbnZhcyBpbXBsZW1lbnRhdGlvbiBhdDogaHR0cDovL2JpdGJ1Y2tldC5vcmcvaWxtYXJpL2Nh
bnZhczNkLworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7CisK
KyAgICAgICAgZWdsTWFrZUN1cnJlbnQobV9kaXNwbGF5LCAwLCAwLCAwKTsKKyAgICAgICAgZWds
RGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2NvbnRleHQpOworICAgICAgICBtX2NvbnRleHQg
PSAwOworICAgIH0KKworICAgIGlmIChtX3BidWZmZXJTdXJmYWNlKSB7CisgICAgICAgIGVnbERl
c3Ryb3lTdXJmYWNlKG1fZGlzcGxheSwgbV9wYnVmZmVyU3VyZmFjZSk7CisgICAgICAgIG1fcGJ1
ZmZlclN1cmZhY2UgPSAwOworICAgIH0KKyAgICBpZiAobV9waXhtYXBTdXJmYWNlKSB7CisgICAg
ICAgIGVnbERlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheSwgbV9waXhtYXBTdXJmYWNlKTsKKyAgICAg
ICAgbV9waXhtYXBTdXJmYWNlID0gMDsKKyAgICB9CisgICAgaWYgKG1fcGl4bWFwKSB7CisgICAg
ICAgIFhGcmVlUGl4bWFwKHNoYXJlZERpc3BsYXkoKSwgbV9waXhtYXApOworICAgICAgICBtX3Bp
eG1hcCA9IDA7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om1h
a2VDb250ZXh0Q3VycmVudCgpCit7CisgICAgaWYgKGVnbEdldEN1cnJlbnRDb250ZXh0KCkgPT0g
bV9jb250ZXh0KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAobV9wYnVmZmVyU3VyZmFjZSkgeworICAgICAgICBlZ2xNYWtlQ3Vy
cmVudChtX2Rpc3BsYXksIG1fcGJ1ZmZlclN1cmZhY2UsIG1fcGJ1ZmZlclN1cmZhY2UsIG1fY29u
dGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlZ2xNYWtlQ3VycmVudChtX2Rp
c3BsYXksIG1fcGl4bWFwU3VyZmFjZSwgbV9waXhtYXBTdXJmYWNlLCBtX2NvbnRleHQpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEVfV0VCR0wKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTEVTLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0xFUy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ2NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQ2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQorCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVk
ZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5o
IgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgorI2luY2x1ZGUgIkZsb2F0MzJBcnJh
eS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxDYW52YXNF
bGVtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEu
aCIKKyNpbmNsdWRlICJJbnQzMkFycmF5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJVaW50OEFycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKKyNpbmNs
dWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlIDxHTEVTMi9n
bDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcygpCit7
CisgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOworICAgIGlm
IChtX2F0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgaWYgKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJH
TF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKSkgeworICAgICAgICAgICAgZXh0ZW5zaW9ucy0+
ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisgICAgICAgICAg
ICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCisgICAgICAgICAgICBtX2F0dHJz
LmRlcHRoID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2F0dHJzLnN0ZW5j
aWwgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAg
IGJvb2wgaXNWYWxpZFZlbmRvciA9IHRydWU7CisgICAgICAgIC8vIEN1cnJlbnRseSBpbiBNYWMg
d2Ugb25seSB0dXJuIG9uIGFudGlhbGlhcyBpZiB2ZW5kb3IgaXMgTlZJRElBLgorICAgICAgICBj
b25zdCBjaGFyKiB2ZW5kb3IgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0
U3RyaW5nKEdMX1ZFTkRPUikpOworICAgICAgICBpZiAoIXZlbmRvciB8fCAhc3RkOjpzdHJzdHIo
dmVuZG9yLCAiTlZJRElBIikpCisgICAgICAgICAgICBpc1ZhbGlkVmVuZG9yID0gZmFsc2U7Cisg
ICAgICAgIGlmICghaXNWYWxpZFZlbmRvciB8fCAhZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FO
R0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikpCisgICAgICAgICAgICBtX2F0dHJzLmFudGlh
bGlhcyA9IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleHRlbnNpb25zLT5lbnN1
cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOworICAgIH0KK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQg
Y2hhciAqcGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSkKK3sKKyAgICBpbnQgdG90YWxCeXRlcyA9IG1f
Y3VycmVudFdpZHRoICogbV9jdXJyZW50SGVpZ2h0ICogNDsKKyAgICBpZiAocGl4ZWxzU2l6ZSA8
IHRvdGFsQnl0ZXMpCisgICAgICAgIHJldHVybjsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworCisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOworICAgIGlmIChtX2F0dHJzLmFu
dGlhbGlhcykgeworICAgICAgICAvLyBGSVhNRSA6IEltcGxlbWVudCBhbnRpYWxpYXMgZm9yIEdM
RVMKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
bV9ib3VuZEZCTyAhPSBtX2ZibykgeworICAgICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVl
OworICAgICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8p
OworICAgICAgICB9CisgICAgfQorCisgICAgR0xpbnQgcGFja0FsaWdubWVudCA9IDQ7CisgICAg
Ym9vbCBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKKyAgICA6OmdsR2V0SW50ZWdl
cnYoR0xfUEFDS19BTElHTk1FTlQsICZwYWNrQWxpZ25tZW50KTsKKyAgICBpZiAocGFja0FsaWdu
bWVudCA+IDQpIHsKKyAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5ULCA0
KTsKKyAgICAgICAgbXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAg
ICA6OmdsUmVhZFBpeGVscygwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBH
TF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOworCisgICAgLy8gQ29udmVydCB0byBC
R1JBCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCisgICAgICAg
IHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOworCisgICAgaWYgKG11c3RSZXN0
b3JlUGFja0FsaWdubWVudCkKKyAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05N
RU5ULCBwYWNrQWxpZ25tZW50KTsKKworICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9ib3VuZEZCTyk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNh
bnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOworICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9
IGNhbnZhcy0+YnVmZmVyKCk7CisKKyAgICBpbnQgcm93Qnl0ZXMgPSBtX2N1cnJlbnRXaWR0aCAq
IDQ7CisgICAgaW50IHRvdGFsQnl0ZXMgPSByb3dCeXRlcyAqIG1fY3VycmVudEhlaWdodDsKKwor
ICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHBpeGVscyA9IGFkb3B0QXJyYXlQdHIobmV3
IHVuc2lnbmVkIGNoYXJbdG90YWxCeXRlc10pOworICAgIGlmICghcGl4ZWxzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICByZWFkUmVuZGVyaW5nUmVzdWx0cyhwaXhlbHMuZ2V0KCksIHRvdGFsQnl0
ZXMpOworCisgICAgaWYgKCFtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBoYSkgeworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkgeworICAgICAgICAgICAgLy8g
UHJlbXVsdGlwbHkgYWxwaGEKKyAgICAgICAgICAgIHBpeGVsc1tpICsgMF0gPSBzdGQ6Om1pbigy
NTUsIHBpeGVsc1tpICsgMF0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKKyAgICAgICAgICAgIHBp
eGVsc1tpICsgMV0gPSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsgMV0gKiBwaXhlbHNbaSArIDNd
IC8gMjU1KTsKKyAgICAgICAgICAgIHBpeGVsc1tpICsgMl0gPSBzdGQ6Om1pbigyNTUsIHBpeGVs
c1tpICsgMl0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVp
Z2h0LAorICAgICAgICAgICAgICAgICAgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgp
LCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7Cit9CisKK1Bhc3NS
ZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9JbWFnZURhdGEoKQoreworICAgIC8vIFJlYWRpbmcgcHJlbXVsdGlwbGllZCBhbHBoYSB3b3Vs
ZCBpbnZvbHZlIHVucHJlbXVsdGlwbHlpbmcsIHdoaWNoIGlzCisgICAgLy8gbG9zc3kKKyAgICBp
ZiAobV9hdHRycy5wcmVtdWx0aXBsaWVkQWxwaGEpCisgICAgICAgIHJldHVybiAwOworCisgICAg
UmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50U2l6ZSht
X2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KSk7CisgICAgdW5zaWduZWQgY2hhciogcGl4
ZWxzID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOworICAgIGludCB0b3RhbEJ5
dGVzID0gNCAqIG1fY3VycmVudFdpZHRoICogbV9jdXJyZW50SGVpZ2h0OworCisgICAgcmVhZFJl
bmRlcmluZ1Jlc3VsdHMocGl4ZWxzLCB0b3RhbEJ5dGVzKTsKKworICAgIC8vIENvbnZlcnQgdG8g
UkdCQQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQorICAgICAg
ICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKKworICAgIHJldHVybiBpbWFn
ZURhdGEucmVsZWFzZSgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBpZiAoIXBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0QoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRo
ICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOworICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsK
KyAgICAKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMo
KTsKKworICAgIEdMdWludCBjb2xvckZvcm1hdCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQg
PSAwOworICAgIGlmIChtX2F0dHJzLmFscGhhKSB7CisgICAgICAgIG1faW50ZXJuYWxDb2xvckZv
cm1hdCA9IEdMX1JHQkE7CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsKKyAgICB9IGVs
c2UgeworICAgICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0I7CisgICAgICAgIGNv
bG9yRm9ybWF0ID0gR0xfUkdCOworICAgIH0KKyAgICAKKyAgICBpZiAobV9hdHRycy5zdGVuY2ls
KQorICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX1NURU5DSUxfSU5ERVg4
OworICAgIGlmIChtX2F0dHJzLmRlcHRoKQorICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZv
cm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDE2OworCisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9
IGZhbHNlOworCisgICAgLy8gcmVzaXplIG11bHRpc2FtcGxlIEZCTworICAgIGlmIChtX2F0dHJz
LmFudGlhbGlhcykgeworICAgICAgICAvLyBGSVhNRSA6IGltcGxlbWVudCBhbnRpYWxpYXMgY2Fz
ZSBmb3IgR0xFUworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKworICAgIC8vIHJl
c2l6ZSByZWd1bGFyIEZCTworICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7CisgICAgICAg
IG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgbV9mYm8pOworICAgIH0KKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgbV90ZXh0dXJlKTsKKyAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBt
X2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9V
TlNJR05FRF9CWVRFLCAwKTsKKyAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVC
VUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDAp
OworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJl
KTsKKyAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JG
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAw
KTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisgICAgaWYgKCFtX2F0
dHJzLmFudGlhbGlhcyAmJiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpKSB7Cisg
ICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5j
aWxCdWZmZXIpOworICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTF9SRU5ERVJCVUZG
RVIsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAg
aWYgKG1fYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZG
RVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpCisg
ICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdM
X0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIp
OworICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIDApOworICAg
IH0KKyAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKSAhPSBH
TF9GUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgICAgICAvLyBGSVhNRTogY2xlYW51cAorICAg
ICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKworICAgIGlmIChtX2F0dHJzLmFudGlhbGlh
cykgeworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX211bHRp
c2FtcGxlRkJPKTsKKyAgICAgICAgaWYgKG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykK
KyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gSW5p
dGlhbGl6ZSByZW5kZXJidWZmZXJzIHRvIDAuCisgICAgR0xmbG9hdCBjbGVhckNvbG9yW10gPSB7
MCwgMCwgMCwgMH0sIGNsZWFyRGVwdGggPSAwOworICAgIEdMaW50IGNsZWFyU3RlbmNpbCA9IDA7
CisgICAgR0xib29sZWFuIGNvbG9yTWFza1tdID0ge0dMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUs
IEdMX1RSVUV9LCBkZXB0aE1hc2sgPSBHTF9UUlVFOworICAgIEdMdWludCBzdGVuY2lsTWFzayA9
IDB4ZmZmZmZmZmY7CisgICAgR0xib29sZWFuIGlzU2Npc3NvckVuYWJsZWQgPSBHTF9GQUxTRTsK
KyAgICBHTGJvb2xlYW4gaXNEaXRoZXJFbmFibGVkID0gR0xfRkFMU0U7CisgICAgR0xiaXRmaWVs
ZCBjbGVhck1hc2sgPSBHTF9DT0xPUl9CVUZGRVJfQklUOworICAgIDo6Z2xHZXRGbG9hdHYoR0xf
Q09MT1JfQ0xFQVJfVkFMVUUsIGNsZWFyQ29sb3IpOworICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAs
IDAsIDApOworICAgIDo6Z2xHZXRCb29sZWFudihHTF9DT0xPUl9XUklURU1BU0ssIGNvbG9yTWFz
ayk7CisgICAgOjpnbENvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVF
KTsKKyAgICBpZiAobV9hdHRycy5kZXB0aCkgeworICAgICAgICA6OmdsR2V0RmxvYXR2KEdMX0RF
UFRIX0NMRUFSX1ZBTFVFLCAmY2xlYXJEZXB0aCk7CisgICAgICAgIDo6Z2xDbGVhckRlcHRoZigx
KTsKKyAgICAgICAgOjpnbEdldEJvb2xlYW52KEdMX0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFz
ayk7CisgICAgICAgIDo6Z2xEZXB0aE1hc2soR0xfVFJVRSk7CisgICAgICAgIGNsZWFyTWFzayB8
PSBHTF9ERVBUSF9CVUZGRVJfQklUOworICAgIH0KKyAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7
CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFLCAmY2xlYXJT
dGVuY2lsKTsKKyAgICAgICAgOjpnbENsZWFyU3RlbmNpbCgwKTsKKyAgICAgICAgOjpnbEdldElu
dGVnZXJ2KEdMX1NURU5DSUxfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0
ZW5jaWxNYXNrKSk7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCAw
eGZmZmZmZmZmKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsK
KyAgICB9CisgICAgaXNTY2lzc29yRW5hYmxlZCA9IDo6Z2xJc0VuYWJsZWQoR0xfU0NJU1NPUl9U
RVNUKTsKKyAgICA6OmdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIGlzRGl0aGVyRW5h
YmxlZCA9IDo6Z2xJc0VuYWJsZWQoR0xfRElUSEVSKTsKKyAgICA6OmdsRGlzYWJsZShHTF9ESVRI
RVIpOworCisgICAgOjpnbENsZWFyKGNsZWFyTWFzayk7CisKKyAgICA6OmdsQ2xlYXJDb2xvcihj
bGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNd
KTsKKyAgICA6OmdsQ29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1h
c2tbMl0sIGNvbG9yTWFza1szXSk7CisgICAgaWYgKG1fYXR0cnMuZGVwdGgpIHsKKyAgICAgICAg
OjpnbENsZWFyRGVwdGhmKGNsZWFyRGVwdGgpOworICAgICAgICA6OmdsRGVwdGhNYXNrKGRlcHRo
TWFzayk7CisgICAgfQorICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgOjpnbENs
ZWFyU3RlbmNpbChjbGVhclN0ZW5jaWwpOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0
ZShHTF9GUk9OVCwgc3RlbmNpbE1hc2spOworICAgIH0KKyAgICBpZiAoaXNTY2lzc29yRW5hYmxl
ZCkKKyAgICAgICAgOjpnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIGVsc2UKKyAgICAg
ICAgOjpnbERpc2FibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBpZiAoaXNEaXRoZXJFbmFibGVk
KQorICAgICAgICA6OmdsRW5hYmxlKEdMX0RJVEhFUik7CisgICAgZWxzZQorICAgICAgICA6Omds
RGlzYWJsZShHTF9ESVRIRVIpOworCisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2JvdW5kRkJPKTsKKworICAgIDo6
Z2xGbHVzaCgpOworfQorCitJbnRTaXplIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZy
YW1lYnVmZmVyU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFNpemUobV9jdXJyZW50V2lk
dGgsIG1fY3VycmVudEhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnByZXBh
cmVUZXh0dXJlKCkKK3sKKyAgICBpZiAobV9sYXllckNvbXBvc2l0ZWQpCisgICAgICAgIHJldHVy
bjsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMp
IHsKKyAgICAgICAgLy8gRklYTUUgOiBpbXBsZW1lbnQgYW50aWFsaWFzIGZvciBHTEVTCisgICAg
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICA6OmdsQWN0aXZlVGV4dHVyZSgwKTsKKyAgICA6Omds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgOjpn
bENvcHlUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwg
MCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgMCk7CisgICAgOjpnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fYm91bmRUZXh0dXJlMCk7CisgICAgOjpnbEFjdGl2ZVRl
eHR1cmUobV9hY3RpdmVUZXh0dXJlKTsKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBtX2JvdW5kRkJPKTsKKyAgICA6OmdsRmluaXNoKCk7CisgICAgbV9sYXllckNvbXBv
c2l0ZWQgPSB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJl
KEdDM0RlbnVtIHRleHR1cmUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9h
Y3RpdmVUZXh0dXJlID0gdGV4dHVyZTsKKyAgICA6OmdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHByb2dy
YW0pOworICAgIEFTU0VSVChzaGFkZXIpOworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xBdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0Mz
RHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJpbmRBdHRyaWJMb2NhdGlvbihw
cm9ncmFtLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVm
ZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCaW5kQnVmZmVyKHRh
cmdldCwgYnVmZmVyKTsKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVi
dWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgZmJvOworICAgIGlmIChidWZmZXIpCisg
ICAgICAgIGZibyA9IGJ1ZmZlcjsKKyAgICBlbHNlCisgICAgICAgIGZibyA9IChtX2F0dHJzLmFu
dGlhbGlhcyA/IG1fbXVsdGlzYW1wbGVGQk8gOiBtX2Zibyk7CisgICAgaWYgKGZibyAhPSBtX2Jv
dW5kRkJPKSB7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBmYm8pOworICAg
ICAgICBtX2JvdW5kRkJPID0gZmJvOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgcmVu
ZGVyYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCaW5kUmVu
ZGVyYnVmZmVyKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKK30KKworCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4
dHVyZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9hY3RpdmVUZXh0
dXJlICYmIHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQorICAgICAgICBtX2JvdW5kVGV4dHVyZTAg
PSB0ZXh0dXJlOworICAgIDo6Z2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xh
bXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uKEdDM0Rl
bnVtIG1vZGUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJsZW5kRXF1
YXRpb24obW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb25T
ZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdC
LCBtb2RlQWxwaGEpOworfQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuYyhH
QzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Cit9ICAgICAgIAor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNS
R0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhh
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCbGVuZEZ1bmNTZXBhcmF0
ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXpl
LCBHQzNEZW51bSB1c2FnZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
QnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBj
b25zdCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsQnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQnVmZmVyU3ViRGF0YSh0YXJn
ZXQsIG9mZnNldCwgc2l6ZSwgZGF0YSk7Cit9CisKK0dDM0RlbnVtIEdyYXBoaWNzQ29udGV4dDNE
OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXModGFy
Z2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJDb2xvcihHQzNEY2xhbXBm
IHIsIEdDM0RjbGFtcGYgZywgR0MzRGNsYW1wZiBiLCBHQzNEY2xhbXBmIGEpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbENsZWFyQ29sb3IociwgZywgYiwgYSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDbGVhcihtYXNrKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDbGVhckRlcHRoZihkZXB0aCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyU3RlbmNpbChHQzNEaW50IHMpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbENsZWFyU3RlbmNpbChzKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4g
Z3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworCisgICAgaW50IEdMc2hhZGVyVHlwZTsKKyAgICBBTkdMRVNoYWRlclR5cGUg
c2hhZGVyVHlwZTsKKworICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBTSEFERVJfVFlQRSwgJkdM
c2hhZGVyVHlwZSk7CisgICAgCisgICAgaWYgKEdMc2hhZGVyVHlwZSA9PSBWRVJURVhfU0hBREVS
KQorICAgICAgICBzaGFkZXJUeXBlID0gU0hBREVSX1RZUEVfVkVSVEVYOworICAgIGVsc2UgaWYg
KEdMc2hhZGVyVHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpCisgICAgICAgIHNoYWRlclR5cGUgPSBT
SEFERVJfVFlQRV9GUkFHTUVOVDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybjsgLy8gSW52YWxp
ZCBzaGFkZXIgdHlwZS4KKworICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291
cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRl
cik7CisKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29u
ZDsKKworICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlOworICAgIFN0cmluZyBzaGFk
ZXJJbmZvTG9nOworCisgICAgYm9vbCBpc1ZhbGlkID0gbV9jb21waWxlci52YWxpZGF0ZVNoYWRl
clNvdXJjZShlbnRyeS5zb3VyY2UudXRmOCgpLmRhdGEoKSwgc2hhZGVyVHlwZSwgdHJhbnNsYXRl
ZFNoYWRlclNvdXJjZSwgc2hhZGVySW5mb0xvZyk7CisKKyAgICBlbnRyeS5sb2cgPSBzaGFkZXJJ
bmZvTG9nOworICAgIGVudHJ5LmlzVmFsaWQgPSBpc1ZhbGlkOworCisgICAgaWYgKCFpc1ZhbGlk
KQorICAgICAgICByZXR1cm47IC8vIFNoYWRlciBkaWRuJ3QgdmFsaWRhdGUsIGRvbid0IG1vdmUg
Zm9yd2FyZCB3aXRoIGNvbXBpbGluZyB0cmFuc2xhdGVkIHNvdXJjZSAgICAKKworICAgIGludCB0
cmFuc2xhdGVkU2hhZGVyTGVuZ3RoID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKTsK
KworICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nID0gdHJhbnNsYXRl
ZFNoYWRlclNvdXJjZS51dGY4KCk7CisgICAgY29uc3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclB0
ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRhdGEoKTsKKyAgICAKKyAgICA6OmdsU2hhZGVy
U291cmNlKHNoYWRlciwgMSwgJnRyYW5zbGF0ZWRTaGFkZXJQdHIsICZ0cmFuc2xhdGVkU2hhZGVy
TGVuZ3RoKTsKKyAgICAKKyAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOworICAgIAorICAg
IGludCBHTENvbXBpbGVTdWNjZXNzOworICAgIAorICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIs
IENPTVBJTEVfU1RBVFVTLCAmR0xDb21waWxlU3VjY2Vzcyk7CisgICAgCisgICAgLy8gQVNTRVJU
IHRoYXQgQU5HTEUgZ2VuZXJhdGVkIEdMU0wgd2lsbCBiZSBhY2NlcHRlZCBieSBPcGVuR0wKKyAg
ICBBU1NFUlQoR0xDb21waWxlU3VjY2VzcyA9PSBHTF9UUlVFKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8g
PT0gbV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICAvLyBGSVhNRSA6IGltcGxlbWVudCBhbnRp
YWxpYXMgY2FzZSBmb3IgR0xFUworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKyAg
ICA6OmdsQ29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1f
Ym91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICAvLyBGSVhNRSA6IGltcGxl
bWVudCBhbnRpYWxpYXMgY2FzZSBmb3IgR0xFUworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9m
ZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9hdHRycy5hbnRp
YWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7CisgICAgICAgIC8vIEZJ
WE1FIDogaW1wbGVtZW50IGFudGlhbGlhcyBjYXNlIGZvciBHTEVTCisgICAgICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgfQorICAgIDo6Z2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAobV9hdHRy
cy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7CisgICAgICAg
IC8vIEZJWE1FIDogaW1wbGVtZW50IGFudGlhbGlhcyBjYXNlIGZvciBHTEVTCisgICAgICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjdWxs
RmFjZShHQzNEZW51bSBtb2RlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xDdWxsRmFjZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhGdW5j
KEdDM0RlbnVtIGZ1bmMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERl
cHRoRnVuYyhmdW5jKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKEdD
M0Rib29sZWFuIGZsYWcpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERl
cHRoTWFzayhmbGFnKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZShH
QzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbERlcHRoUmFuZ2VmKHpOZWFyLCB6RmFyKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxh
dGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIEFTU0VS
VChzaGFkZXIpOworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZXRhY2hTaGFk
ZXIocHJvZ3JhbSwgc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJs
ZShHQzNEZW51bSBjYXApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERp
c2FibGUoY2FwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZVZlcnRleEF0
dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdD
M0RzaXplaSBjb3VudCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRHJh
d0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0
eXBlLCBHQzNEaW50cHRyIG9mZnNldCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICA6OmdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdM
dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmVuYWJsZShHQzNEZW51bSBjYXApCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbEVuYWJsZShjYXApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2goKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xGaW5pc2goKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Zmx1c2goKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xGbHVzaCgp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVu
dCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFj
aG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNE
aW50IGxldmVsKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xGcmFtZWJ1
ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2
ZWwpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UoR0MzRGVudW0gbW9k
ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRnJvbnRGYWNlKG1vZGUp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0
YXJnZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdlbmVyYXRlTWlw
bWFwKHRhcmdldCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJp
YihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBp
bmZvKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJ
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBHTGludCBtYXhBdHRyaWJ1dGVTaXplID0gMDsKKyAgICA6Omds
R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1h
eEF0dHJpYnV0ZVNpemUpOworICAgIEdMY2hhciBuYW1lW21heEF0dHJpYnV0ZVNpemVdOyAvLyBH
TF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbgor
ICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9IDA7CisgICAgR0xl
bnVtIHR5cGUgPSAwOworICAgIDo6Z2xHZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIG1h
eEF0dHJpYnV0ZVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUpOworICAgIGlm
ICghbmFtZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGluZm8ubmFtZSA9IFN0
cmluZyhuYW1lLCBuYW1lTGVuZ3RoKTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8u
c2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisgICAgCitib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVp
bnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50IG1heFVuaWZv
cm1TaXplID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklG
T1JNX01BWF9MRU5HVEgsICZtYXhVbmlmb3JtU2l6ZSk7CisgICAgR0xjaGFyIG5hbWVbbWF4VW5p
Zm9ybVNpemVdOyAvLyBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwg
dGVybWluYXRpb24KKyAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOworICAgIEdMaW50IHNpemUg
PSAwOworICAgIEdMZW51bSB0eXBlID0gMDsKKyAgICA6OmdsR2V0QWN0aXZlVW5pZm9ybShwcm9n
cmFtLCBpbmRleCwgbWF4VW5pZm9ybVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5h
bWUpOworICAgIGlmICghbmFtZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlu
Zm8ubmFtZSA9IFN0cmluZyhuYW1lLCBuYW1lTGVuZ3RoKTsKKyAgICBpbmZvLnR5cGUgPSB0eXBl
OworICAgIGluZm8uc2l6ZSA9IHNpemU7CisKKyAgICAvLyBGSVhNRSA6ICJbMF0iIGlzIGFkZGVk
IGF0IHRoZSBlbmQgb2YgaW5mby5uYW1lIGluIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0
aXZlVW5pZm9ybSgpIAorICAgIC8vIHdoZW4gaXNHTEVTMkNvbXBsaWFudCBpcyBvbmx5IGZhbHNl
LiBJIGNhbid0IHVuZGVyc3RhbmQgdGhlIHJlYXNvbi4gCisgICAgLy8gSSBhZGQgIlswXSIgaGVy
ZSB0byBhdm9pZCBmYWxpbmcgd2ViZ2wgY29uZm9ybWFuY2UgdGVzdChnZXQtYWN0aXZldGVzdC5o
dG1sKQorICAgIC8vIGJ1dCBpZiBpdCBtYWtlcyBzb21ldGhpbmcgd3JvbmcgbGF0ZXIsIHJlbW92
ZSBmb2xsb3dpbmcgbGluZXMgCisgICAgaWYgKGluZm8uc2l6ZSA+IDEgJiYgIWluZm8ubmFtZS5l
bmRzV2l0aCgiWzBdIikpIAorICAgICAgICBpbmZvLm5hbWUuYXBwZW5kKCJbMF0iKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFk
ZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNEc2l6
ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKQoreworICAgIGlmICghcHJvZ3Jh
bSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0QXR0
YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50LCBjb3VudCwgc2hhZGVycyk7Cit9CisKK2lu
dCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAg
ICByZXR1cm4gLTE7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpn
bEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK0dy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDb250ZXh0
QXR0cmlidXRlcygpCit7CisgICAgcmV0dXJuIG1fYXR0cnM7Cit9CisKK0dDM0RlbnVtIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRFcnJvcigpCit7CisgICAgaWYgKG1fc3ludGhldGljRXJyb3JzLnNp
emUoKSA+IDApIHsKKyAgICAgICAgTGlzdEhhc2hTZXQ8R0MzRGVudW0+OjppdGVyYXRvciBpdGVy
ID0gbV9zeW50aGV0aWNFcnJvcnMuYmVnaW4oKTsKKyAgICAgICAgR0MzRGVudW0gZXJyID0gKml0
ZXI7CisgICAgICAgIG1fc3ludGhldGljRXJyb3JzLnJlbW92ZShpdGVyKTsKKyAgICAgICAgcmV0
dXJuIGVycjsKKyAgICB9CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4g
OjpnbEdldEVycm9yKCk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5n
KEdDM0RlbnVtIG5hbWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJu
IFN0cmluZygoY29uc3QgY2hhciopIDo6Z2xHZXRTdHJpbmcobmFtZSkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsSGludCh0YXJnZXQsIG1vZGUpOwor
fQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNCdWZmZXIoUGxhdGZvcm0zRE9i
amVjdCBidWZmZXIpCit7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNCdWZmZXIo
YnVmZmVyKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzRW5hYmxlZChH
QzNEZW51bSBjYXApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6
Z2xJc0VuYWJsZWQoY2FwKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6Omlz
RnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWZy
YW1lYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOworfQor
CitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNQcm9ncmFtKFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSkKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNQcm9ncmFt
KHByb2dyYW0pOworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNSZW5kZXJi
dWZmZXIoUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKCFyZW5kZXJi
dWZmZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIHJldHVybiA6OmdsSXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKK30KKwor
R0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qg
c2hhZGVyKQoreworICAgIGlmICghc2hhZGVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzU2hhZGVyKHNoYWRl
cik7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1RleHR1cmUoUGxhdGZv
cm0zRE9iamVjdCB0ZXh0dXJlKQoreworICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJ
c1RleHR1cmUodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmVXaWR0
aChHQzNEZmxvYXQgd2lkdGgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bExpbmVXaWR0aCh3aWR0aCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9n
cmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbExpbmtQcm9ncmFtKHByb2dyYW0pOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwg
R0MzRGludCBwYXJhbSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsUGl4
ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cG9s
eWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNE
aW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKQoreworICAgIC8vIEZJWE1FOiByZW1vdmUgdGhl
IHR3byBnbEZsdXNoIGNhbGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGkuZS4sCisg
ICAgLy8gYWxsIHByZXZpb3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUg
cmVhZGluZyBwaXhlbHMuCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEZsdXNo
KCk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNh
bXBsZUZCTykgeworICAgICAgICAvLyBGSVhNRSA6IGltcGxlbWVudCBhbnRpYWxpYXMgY2FzZSBm
b3IgR0xFUworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKyAgICA6OmdsUmVhZFBp
eGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworICAgIGlmICht
X2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAg
ICAgICAgLy8gRklYTUUgOiBpbXBsZW1lbnQgYW50aWFsaWFzIGNhc2UgZm9yIEdMRVMKKyAgICAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCit7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGlt
cGxlbWVudGVkIG9uIGRlc2t0b3AgT3BlbkdMLiBXZSBuZWVkIHRvIGhhdmUgaWZkZWZzIGZvciB0
aGUgZGlmZmVyZW50IEdMIHZhcmlhbnRzCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
Ly8gOjpnbFJlbGVhc2VTaGFkZXJDb21waWxlcigpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6c2FtcGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTYW1wbGVDb3ZlcmFnZSh2YWx1
ZSwgaW52ZXJ0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2Npc3NvcihHQzNEaW50
IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTY2lzc29yKHgsIHksIHdpZHRoLCBoZWln
aHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm0z
RE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIEFTU0VSVChzaGFk
ZXIpOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBTaGFkZXJTb3VyY2VFbnRy
eSBlbnRyeTsKKworICAgIGVudHJ5LnNvdXJjZSA9IHN0cmluZzsKKworICAgIG1fc2hhZGVyU291
cmNlTWFwLnNldChzaGFkZXIsIGVudHJ5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
c3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFN0ZW5jaWxGdW5jKGZ1bmMsIHJl
ZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jU2VwYXJh
dGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1h
c2spCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFN0ZW5jaWxGdW5jU2Vw
YXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6c3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsU3RlbmNpbE1hc2sobWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShm
YWNlLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wKEdDM0Rl
bnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZh
Y2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwg
ZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFy
YW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgdmFsdWUp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFRleFBhcmFtZXRlcmYodGFy
Z2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJh
bWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgdmFsdWUpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFRleFBhcmFtZXRlcmkodGFyZ2V0
LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xVbmlmb3JtMWYobG9jYXRpb24sIHYwKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIGFycmF5
LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
VW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtMmYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxv
YXQgdjEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0yZihs
b2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJm
dihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sK
KyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgorICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCBh
cnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZihHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2
MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQoreworICAgIC8vIEZJ
WE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzCisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0zZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmKEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTRmKGxvY2F0aW9uLCB2
MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZnYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCit7Cisg
ICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6ZSwgYXJy
YXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWkoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGludCB2MCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
VW5pZm9ybTFpKGxvY2F0aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0xaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogYXJyYXksIEdDM0RzaXplaSBzaXpl
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMWl2KGxvY2F0
aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0y
aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMmkobG9jYXRpb24sIHYwLCB2MSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaXYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRGludCogYXJyYXksIEdDM0RzaXplaSBzaXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGgg
bmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbFVuaWZvcm0yaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdD
M0RpbnQgdjEsIEdDM0RpbnQgdjIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbFVuaWZvcm0zaShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogYXJyYXksIEdD
M0RzaXplaSBzaXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0
aXBsZSBvZiAzCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0zaXYo
bG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEsIEdDM0RpbnQg
djIsIEdDM0RpbnQgdjMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVu
aWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBHQzNE
c2l6ZWkgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlw
bGUgb2YgNAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtNGl2KGxv
Y2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm1NYXRyaXgyZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNE
ZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5l
ZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXpl
aSBzaXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBv
ZiA5CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm1NYXRyaXgzZnYo
bG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRy
YW5zcG9zZSwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCit7CisgICAgLy8gRklY
TUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDE2CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5z
cG9zZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICA6OmdsVXNlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQo
cHJvZ3JhbSk7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmFsaWRhdGVQ
cm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRy
aWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9h
dCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0
dHJpYjFmdihpbmRleCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0
ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjJmKGluZGV4
LCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZs
b2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgs
IEdDM0RmbG9hdCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bFZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxv
YXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbFZlcnRleEF0dHJpYjRmdihpbmRleCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUs
IEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUs
IEdDM0RpbnRwdHIgb2Zmc2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJp
ZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNl
dCkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmlld3BvcnQoR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJvb2xlYW52KEdDM0RlbnVtIHBuYW1l
LCBHQzNEYm9vbGVhbiogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbEdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUs
IEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xH
ZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dihHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1
ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0RmxvYXR2KHBuYW1l
LCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwg
R0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmIChhdHRhY2htZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkKKyAg
ICAgICAgYXR0YWNobWVudCA9IERFUFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5DSUxfQVRUQUNI
TUVOVCwgZWl0aGVyIHdvcmtzLgorICAgIDo6Z2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1
ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0SW50ZWdlcnYocG5h
bWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3Jh
bSwgcG5hbWUsIHZhbHVlKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9n
cmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dy
YW0pOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgbGVuZ3RoOworICAg
IDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsK
KyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgR0xzaXplaSBzaXpl
OworICAgIEdMY2hhciogaW5mbyA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKGxlbmd0aCk7CisKKyAg
ICA6OmdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7Cisg
ICAgU3RyaW5nIHMoaW5mbyk7CisgICAgZmFzdEZyZWUoaW5mbyk7CisgICAgcmV0dXJuIHM7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0
YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNo
YWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCog
dmFsdWUpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKworICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+Ojpp
dGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgCisg
ICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgREVMRVRFX1NUQVRVUzoKKyAgICBjYXNlIFNI
QURFUl9UWVBFOgorICAgICAgICAvLyBMZXQgT3BlbkdMIGhhbmRsZSB0aGVzZS4KKyAgICAgICAg
OjpnbEdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUsIHZhbHVlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgIAorICAgIGNhc2UgQ09NUElMRV9TVEFUVVM6CisgICAgICAgIGlmIChyZXN1bHQgPT0g
bV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgICgqdmFsdWUpID0gc3RhdGlj
X2Nhc3Q8aW50PihmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgICgqdmFsdWUpID0gc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQtPnNlY29uZC5p
c1ZhbGlkKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgSU5GT19MT0dfTEVO
R1RIOgorICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7Cisg
ICAgICAgICAgICAoKnZhbHVlKSA9IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgICgqdmFsdWUpID0gZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpLmxl
bmd0aCgpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBTSEFERVJfU09VUkNF
X0xFTkdUSDoKKyAgICAgICAgKCp2YWx1ZSkgPSBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS5sZW5n
dGgoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKElOVkFMSURfRU5VTSk7CisgICAgfQorfQorCitTdHJpbmcgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7
CisgICAgQVNTRVJUKHNoYWRlcik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAg
IEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciBy
ZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisKKyAgICBpZiAocmVzdWx0
ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICAgcmV0dXJuICIiOworCisgICAg
IFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisKKyAgICAgaWYgKGVu
dHJ5LmlzVmFsaWQpIHsKKyAgICAgICAgIEdMaW50IGxlbmd0aDsKKyAgICAgICAgIDo6Z2xHZXRT
aGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CisgICAgICAgICBp
ZiAoIWxlbmd0aCkKKyAgICAgICAgICAgICByZXR1cm4gIiI7CisKKyAgICAgICAgIEdMc2l6ZWkg
c2l6ZTsKKyAgICAgICAgIEdMY2hhciogaW5mbyA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKGxlbmd0
aCk7CisKKyAgICAgICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6
ZSwgaW5mbyk7CisKKyAgICAgICAgIFN0cmluZyBzKGluZm8pOworICAgICAgICAgZmFzdEZyZWUo
aW5mbyk7CisgICAgICAgICByZXR1cm4gczsKKyAgICAgfQorICAgICByZXR1cm4gZW50cnkubG9n
OworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworCisgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3Vy
Y2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVy
KTsKKworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAg
IHJldHVybiAiIjsKKworICAgIHJldHVybiByZXN1bHQtPnNlY29uZC5zb3VyY2U7Cit9CisKKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsR2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwgdmFsdWUp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwg
dmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYoUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZhbHVlKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRVbmlmb3JtZnYocHJvZ3Jh
bSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5p
Zm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGlu
dCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldFVuaWZv
cm1pdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOworfQorCitHQzNEaW50IEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25z
dCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwg
bmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVy
dGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZh
bHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRWZXJ0ZXhBdHRy
aWJmdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VmVydGV4QXR0cmliaXYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50
KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VmVydGV4
QXR0cmliaXYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK0dDM0RzaXplaXB0ciBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51
bSBwbmFtZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIEdMdm9pZCogcG9p
bnRlciA9IDA7CisgICAgOjpnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwg
JnBvaW50ZXIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGlu
dGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQg
Ym9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVs
cykKK3sKKyAgICBpZiAod2lkdGggJiYgaGVpZ2h0ICYmICFwaXhlbHMpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgaWYgKHR5cGUgPT0gR0xfRkxPQVQpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
Tm90IHN1cHBvcnRlZCBpbiBHTEVTIDIuMAorICAgIAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZiwgR0MzRGludCB5b2ZmLCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisg
ICAgLy8gRklYTUU6IHdlIHdpbGwgbmVlZCB0byBkZWFsIHdpdGggUGl4ZWxTdG9yZSBwYXJhbXMg
d2hlbiBkZWFsaW5nIHdpdGggaW1hZ2UgYnVmZmVycyB0aGF0IGRpZmZlciBmcm9tIHRoZSBzdWJp
bWFnZSBzaXplCisgICAgOjpnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9m
Ziwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworfQorCitQbGF0Zm9ybTNE
T2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVCdWZmZXIoKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBvID0gMDsKKyAgICBnbEdlbkJ1ZmZlcnMoMSwgJm8p
OworICAgIHJldHVybiBvOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
R0x1aW50IG8gPSAwOworICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZvKTsKKyAgICByZXR1cm4g
bzsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3Jh
bSgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsQ3JlYXRlUHJv
Z3JhbSgpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVS
ZW5kZXJidWZmZXIoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBv
ID0gMDsKKyAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm8pOworICAgIHJldHVybiBvOworfQor
CitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIoR0MzRGVu
dW0gdHlwZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2xDcmVh
dGVTaGFkZXIoKHR5cGUgPT0gRlJBR01FTlRfU0hBREVSKSA/IEdMX0ZSQUdNRU5UX1NIQURFUiA6
IEdMX1ZFUlRFWF9TSEFERVIpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBH
THVpbnQgbyA9IDA7CisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0
IGJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZUJ1ZmZl
cnMoMSwgJmJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1l
YnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0pCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xEZWxldGVQcm9n
cmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJi
dWZmZXIoUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZyZW5kZXJidWZmZXIpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVTaGFkZXIoUGxhdGZvcm0zRE9iamVj
dCBzaGFkZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xEZWxldGVTaGFk
ZXIoc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZShQ
bGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yKQoreworICAgIG1fc3ludGhl
dGljRXJyb3JzLmFkZChlcnJvcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtD
b250ZXh0Q2hhbmdlZCgpCit7CisgICAgbV9sYXllckNvbXBvc2l0ZWQgPSBmYWxzZTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRlZCgpCit7CisgICAgbV9s
YXllckNvbXBvc2l0ZWQgPSB0cnVlOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXll
ckNvbXBvc2l0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyQ29tcG9zaXRlZDsKK30K
KworRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygpCit7Cisg
ICAgaWYgKCFtX2V4dGVuc2lvbnMpCisgICAgICAgIG1fZXh0ZW5zaW9ucyA9IGFkb3B0UHRyKG5l
dyBFeHRlbnNpb25zM0RPcGVuR0wodGhpcykpOworICAgIHJldHVybiBtX2V4dGVuc2lvbnMuZ2V0
KCk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VM
b2cJKHJldmlzaW9uIDkwOTc3KQorKysgU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDctMTMgIENoYW5nU2VvayBPaCAgPHNo
aXZhbWlkb3dAZ21haWwuY29tPgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgRUdMIGJhY2tlbmQg
Zm9yIFdlYkdMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01OTA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEluY2x1ZGUgRUdMIGxpYnJhcnkgdG8gbGluayB3aGVuIGVnbC1iYWNrZW5kIGlzIGNob29zZW4g
Zm9yIFdlYkdMLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisKIDIwMTEtMDctMTIgIEpv
c2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KIAogICAgICAgICBBcHBsaWNhdGlv
bkNhY2hlIHVwZGF0ZSBzaG91bGQgbm90IGltbWVkaWF0ZWx5IGZhaWwgd2hlbiByZWFjaGluZyBw
ZXItb3JpZ2luIHF1b3RhCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24g
OTA5NzcpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5
KQpAQCAtODYsNiArODYsNyBAQCBsaWJ3ZWJraXRndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVS
U0lPCiAJJCh3ZWJjb3JlX2xkZmxhZ3MpIFwKIAkkKENBSVJPX0xJQlMpIFwKIAkkKENPVkVSQUdF
X0xERkxBR1MpIFwKKwkkKEVHTF9MSUJTKSBcCiAJJChFTkNIQU5UX0xJQlMpIFwKIAkkKEZSRUVU
WVBFX0xJQlMpIFwKIAkkKEdBSUxfTElCUykgXAo=
</data>
<flag name="review"
          id="95507"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101722</attachid>
            <date>2011-07-22 06:06:37 -0700</date>
            <delta_ts>2011-08-02 03:48:43 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>P59064.patch</filename>
            <type>text/plain</type>
            <size>45277</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDkxNDM2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDct
MjAgIENoYW5nU2VvayBPaCAgPHNoaXZhbWlkb3dAZ21haWwuY29tPgorCisgICAgICAgIFtHVEtd
IFN1cHBvcnQgRUdMIGJhY2tlbmQgZm9yIFdlYkdMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBjb25maWctb3B0aW9uIHRvIGNob29zZSBnbC1iYWNr
ZW5kIGJldHdlZW4gZ2x4IGFuZCBlZ2wuCisKKyAgICAgICAgKiBjb25maWd1cmUuYWM6CisKIDIw
MTEtMDctMjAgIFBpZXJyZSBSb3NzaSAgPHBpZXJyZS5yb3NzaUBnbWFpbC5jb20+CiAKICAgICAg
ICAgW1F0XSBRdDUgQnVpbGQgRml4OiBEaXNhYmxlIHRoZSBsZWdhY3kgbWFjIGFzc2VydCBtYWNy
b3MuCkluZGV4OiBjb25maWd1cmUuYWMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29uZmlndXJlLmFjCShyZXZp
c2lvbiA5MTQzNikKKysrIGNvbmZpZ3VyZS5hYwkod29ya2luZyBjb3B5KQpAQCAtMzgzLDEyICsz
ODMsMzYgQEAgQUNfQVJHX0VOQUJMRSh3ZWJnbCwKICAgICAgICAgICAgICAgW10sIFtlbmFibGVf
d2ViZ2w9Im5vIl0pCiBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3dlYmdsXSkKIAorIyBkZXRlcm1p
bmUgdGhlIEdMIGJhY2tlbmQKK0FDX01TR19DSEVDS0lORyhbdGhlIEdMIGJhY2tlbmQgdG8gdXNl
XSkKK0FDX0FSR19XSVRIKGdsX2JhY2tlbmQsCisgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhb
LS13aXRoLWdsLWJhY2tlbmQ9QDw6QGdseC9lZ2xAOj5AXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFtTZWxlY3QgZ2wgYmFja2VuZCBbZGVmYXVsdD1nbHhdXSksCisgICAgICAgICAgICBb
XSxbd2l0aF9nbF9iYWNrZW5kPSJnbHgiXSkKKworY2FzZSAiJHdpdGhfZ2xfYmFja2VuZCIgaW4K
KyAgICAgZ2x4fGVnbCkgOzsKKyAgICAgKikgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIGdsIGJhY2tl
bmQ6IG11c3QgYmUgZ2x4LCBvciBlZ2wuXSkgOzsKK2VzYWMKKworQUNfTVNHX1JFU1VMVChbJHdp
dGhfZ2xfYmFja2VuZF0pCisKIGlmIHRlc3QgIiRlbmFibGVfd2ViZ2wiID0gInllcyI7IHRoZW4K
LSAgICBBQ19DSEVDS19IRUFERVJTKFtHTC9nbC5oXSwgW10sIEFDX01TR19FUlJPUihbT3BlbkdM
IGhlYWRlciBub3QgZm91bmRdKSkKLSAgICBBQ19DSEVDS19IRUFERVJTKFtHTC9nbHguaF0sIFtd
LCBBQ19NU0dfRVJST1IoW0dMWCBoZWFkZXIgbm90IGZvdW5kXSkpCi0gICAgT1BFTkdMX0xJQlM9
LWxHTAorICAgIGNhc2UgIiR3aXRoX2dsX2JhY2tlbmQiIGluCisgICAgICAgIGdseCkgQUNfQ0hF
Q0tfSEVBREVSUyhbR0wvZ2wuaF0sIFtdLCBBQ19NU0dfRVJST1IoW09wZW5HTCBoZWFkZXIgbm90
IGZvdW5kXSkpCisgICAgICAgICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhbR0wvZ2x4LmhdLCBbXSwg
QUNfTVNHX0VSUk9SKFtHTFggaGVhZGVyIG5vdCBmb3VuZF0pKQorICAgICAgICAgICAgIE9QRU5H
TF9MSUJTPS1sR0wKKyAgICAgICAgICAgICBBQ19TVUJTVChbT1BFTkdMX0xJQlNdKQorICAgICAg
ICAgICAgIDs7CisgICAgICAgIGVnbCkgQUNfQ0hFQ0tfSEVBREVSUyhbR0xFUzIvZ2wyLmhdLCBb
XSwgQUNfTVNHX0VSUk9SKFtPcGVuR0wgRVMgaGVhZGVyIG5vdCBmb3VuZF0pKQorICAgICAgICAg
ICAgIEFDX0NIRUNLX0hFQURFUlMoW0VHTC9lZ2wuaF0sIFtdLCBBQ19NU0dfRVJST1IoW0VHTCBo
ZWFkZXIgbm90IGZvdW5kXSkpCisgICAgICAgICAgICAgT1BFTkdMX0xJQlM9LWxHTEVTdjIKKyAg
ICAgICAgICAgICBFR0xfTElCUz0tbEVHTAorICAgICAgICAgICAgIEFDX1NVQlNUKFtPUEVOR0xf
TElCU10pCisgICAgICAgICAgICAgQUNfU1VCU1QoW0VHTF9MSUJTXSkKKyAgICAgICAgICAgICA7
OworICAgIGVzYWMKIGZpCi1BQ19TVUJTVChbT1BFTkdMX0xJQlNdKQogCiAjIGNoZWNrIHdoZXRo
ZXIgdG8gZW5hYmxlIGNoYW5uZWwgbWVzc2FnaW5nIHN1cHBvcnQKIEFDX01TR19DSEVDS0lORyhb
d2hldGhlciB0byBlbmFibGUgSFRNTDUgQ2hhbm5lbCBNZXNzYWdpbmcgc3VwcG9ydF0pCkBAIC0x
MTQ5LDYgKzExNzMsMTAgQEAgQU1fQ09ORElUSU9OQUwoW1VTRV9HTElCX1VOSUNPREVdLCBbdGVz
dAogQU1fQ09ORElUSU9OQUwoW1VTRV9GUkVFVFlQRV0sIFt0ZXN0ICIkd2l0aF9mb250X2JhY2tl
bmQiID0gImZyZWV0eXBlIl0pCiBBTV9DT05ESVRJT05BTChbVVNFX1BBTkdPXSwgW3Rlc3QgIiR3
aXRoX2ZvbnRfYmFja2VuZCIgPSAicGFuZ28iXSkKIAorIyBGb250IGJhY2tlbmQgY29uZGl0aW9u
YWxzCitBTV9DT05ESVRJT05BTChbVVNFX0dMWF0sIFt0ZXN0ICIkd2l0aF9nbF9iYWNrZW5kIiA9
ICJnbHgiXSkKK0FNX0NPTkRJVElPTkFMKFtVU0VfRUdMXSwgW3Rlc3QgIiR3aXRoX2dsX2JhY2tl
bmQiID0gImVnbCJdKQorCiAjIEdTdHJlYW1lciBmZWF0dXJlIGNvbmRpdGlvbmFsCiBBTV9DT05E
SVRJT05BTChbVVNFX0dTVFJFQU1FUl0sIFt0ZXN0ICIkaGF2ZV9nc3RyZWFtZXIiID0gInllcyJd
KQogCkBAIC0xMjYzLDYgKzEyOTEsNyBAQCBCdWlsZCBjb25maWd1cmF0aW9uOgogIENvZGUgY292
ZXJhZ2Ugc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJGVuYWJs
ZV9jb3ZlcmFnZQogIFVuaWNvZGUgYmFja2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogJHdpdGhfdW5pY29kZV9iYWNrZW5kCiAgRm9udCBiYWNrZW5kICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkd2l0aF9mb250X2JhY2tl
bmQKKyBHTCBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6ICR3aXRoX2dsX2JhY2tlbmQKICBPcHRpbWl6ZWQgbWVtb3J5IGFsbG9jYXRvciAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfZmFzdF9tYWxsb2MKIEZlYXR1cmVz
OgogIDNEIFJlbmRlcmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogJGVuYWJsZV8zZF9yZW5kZXJpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxNDM2
KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MzQgQEAKKzIwMTEtMDctMjAgIENoYW5nU2VvayBPaCAgPHNoaXZhbWlkb3dAZ21haWwuY29tPgor
CisgICAgICAgIFtHVEtdIFN1cHBvcnQgRUdMIGJhY2tlbmQgZm9yIFdlYkdMCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA2NAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNvbWUgQVBJcyBhcmUgaW1wbGVt
ZW50ZWQgbmV3bHkgdG8gbWVldCBFR0wvT3BlbkdMRVMgaW50ZXJmYWNlLgorICAgICAgICBBZGQg
YnVpbGQtZmxhZ3MgbGlrZSBXVEZfVVNFX0dMWCwgV1RGX1VTRV9FR0wgdG8gc2VwZXJhdGUgZ2wt
YmFja2VuZHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3QgcmVxdWlyZWQuCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREd0ay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNyZWF0ZVBidWZm
ZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OmNyZWF0ZVBpeG1hcENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjptYWtlQ29udGV4
dEN1cnJlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRl
eHQzREludGVybmFsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpyZXNoYXBlKToKKwogMjAxMS0wNy0yMCAgTGV2aSBXZWludHJhdWIgIDxsZXZp
d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU3dpdGNoIGdldFRyYW5zZm9ybUZyb21Db250YWlu
ZXIgYW5kIGl0cyB1c2VzIHRvIG5ldyBsYXlvdXQgdHlwZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCShyZXZpc2lvbiA5MTQzNikKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzcsNiArMTM3LDIwIEBAIHdlYmNvcmVndGtfY3BwZmxhZ3MgKz0g
XAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvCiBl
bmRpZiAjIEVORCBVU0VfUEFOR08KIAorIyAtLS0KKyMgR0xYIGdsIGJhY2tlbmQKKyMgLS0tCitp
ZiBVU0VfR0xYCit3ZWJjb3JlZ3RrX2NwcGZsYWdzICs9IC1EV1RGX1VTRV9HTFg9MQorZW5kaWYg
IyBFTkQgVVNFX0dMWAorCisjIC0tLQorIyBFR0wgZ2wgYmFja2VuZAorIyAtLS0KK2lmIFVTRV9F
R0wKK3dlYmNvcmVndGtfY3BwZmxhZ3MgKz0gLURXVEZfVVNFX0VHTD0xCitlbmRpZiAjIEVORCBV
U0VfRUdMCisKICMgLS0tLQogIyBIVE1MIERldGFpbHMgRWxlbWVudAogIyAtLS0tCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmgJKHJldmlzaW9uIDkxNDM2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtOTI1LDcgKzkyNSwxMiBA
QCBwdWJsaWM6CiAKICAgICBHQzNEdWludCBtX3RleHR1cmUsIG1fY29tcG9zaXRvclRleHR1cmU7
CiAgICAgR0MzRHVpbnQgbV9mYm87CisjaWYgVVNFKEVHTCkKKyAgICBHQzNEdWludCBtX2RlcHRo
QnVmZmVyOworICAgIEdDM0R1aW50IG1fc3RlbmNpbEJ1ZmZlcjsKKyNlbHNlCiAgICAgR0MzRHVp
bnQgbV9kZXB0aFN0ZW5jaWxCdWZmZXI7CisjZW5kaWYKICAgICBib29sIG1fbGF5ZXJDb21wb3Np
dGVkOwogICAgIEdDM0R1aW50IG1faW50ZXJuYWxDb2xvckZvcm1hdDsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNER3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhp
Y3NDb250ZXh0M0RHdGsuY3BwCShyZXZpc2lvbiA5MTQzNikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREd0ay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgor
ICogQ29weXJpZ2h0IChDKSAyMDExIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDExICsyOSwxNiBAQAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKICNpZiBFTkFCTEUoV0VCR0wpCi0jaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzREludGVybmFsLmgiCisjaWYgVVNFKEVHTCkKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUg
PEdMRVMyL2dsMmV4dC5oPgorI2Vsc2UKICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgogI2luY2x1
ZGUgIlNoYWRlckxhbmcuaCIKKyNlbmRpZgogI2luY2x1ZGUgPHd0Zi9Ob3RGb3VuZC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01OSw3ICs2NSwxMiBAQCBHcmFwaGljc0NvbnRleHQzRDo6
R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAgICAgLCBtX2F0dHJzKGF0dHJpYnV0ZXMpCiAgICAgLCBt
X3RleHR1cmUoMCkKICAgICAsIG1fZmJvKDApCisjaWYgVVNFKEVHTCkKKyAgICAsIG1fZGVwdGhC
dWZmZXIoMCkKKyAgICAsIG1fc3RlbmNpbEJ1ZmZlcigwKQorIyBlbHNlCiAgICAgLCBtX2RlcHRo
U3RlbmNpbEJ1ZmZlcigwKQorI2VuZGlmCiAgICAgLCBtX2JvdW5kRkJPKDApCiAgICAgLCBtX211
bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDAp
CkBAIC03NCwyNiArODUsNDUgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNE
KEdyYQogICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwogICAg
IDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwg
R0xfTElORUFSKTsKICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisjaWYgVVNFKEVHTCkKKyAgICA6OmdsVGV4UGFy
YW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURH
RSk7CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQ
X1QsIEdMX0NMQU1QX1RPX0VER0UpOworI2Vsc2UKICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVApOwogICAgIDo6Z2xUZXhQYXJh
bWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUCk7CisjZW5k
aWYKICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CiAKICAgICAvLyBDcmVh
dGUgYW4gRkJPLgorI2lmIFVTRShFR0wpCisgICAgOjpnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9m
Ym8pOworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKyNl
bHNlCiAgICAgOjpnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOwogICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisjZW5kaWYKIAogICAg
IG1fYm91bmRGQk8gPSBtX2ZibzsKICAgICBpZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmIChtX2F0
dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkpCisjaWYgVVNFKEVHTCkKKyAgICAgICAgOjpn
bEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIpOworICAgICAgICA6OmdsR2VuUmVu
ZGVyYnVmZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKKyNlbHNlCiAgICAgICAgIDo6Z2xHZW5S
ZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisjZW5kaWYKICAgICAK
ICAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCiAgICAgaWYgKG1fYXR0cnMuYW50aWFs
aWFzKSB7CisjaWYgVVNFKEVHTCkKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyNlbHNlCiAg
ICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOwogICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNh
bXBsZUZCTyk7CiAgICAgICAgIG1fYm91bmRGQk8gPSBtX211bHRpc2FtcGxlRkJPOwogICAgICAg
ICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsK
ICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQogICAgICAgICAg
ICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxC
dWZmZXIpOworI2VuZGlmCiAgICAgfQogCiAgICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24uCkBA
IC0xMTIsOCArMTQyLDEwIEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChH
cmEKICAgICBBTkdMRVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7CiAgICAgbV9jb21waWxl
ci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwogCisjaWYgIVVTRShFR0wpCiAgICAgOjpn
bEVuYWJsZShHTF9WRVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsKICAgICA6OmdsRW5hYmxlKEdM
X1BPSU5UX1NQUklURSk7CisjZW5kaWYKICAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsK
IH0KIApAQCAtMTI2LDE1ICsxNTgsMzAgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0Nv
bnRleHQzRCgpCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbERlbGV0ZVRleHR1
cmVzKDEsICZtX3RleHR1cmUpOwogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworI2lmIFVT
RShFR0wpCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisjZWxzZQogICAgICAgICA6OmdsRGVs
ZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKICAgICAg
ICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQogICAgICAgICAgICAgOjpn
bERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZm
ZXIpOwogICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxl
RkJPKTsKKyNlbmRpZgogICAgIH0gZWxzZSB7CisjaWYgVVNFKEVHTCkKKyAgICAgICAgaWYgKG1f
YXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSB7CisgICAgICAgICAgICA6OmdsRGVsZXRl
UmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgICAgICA6OmdsRGVsZXRl
UmVuZGVyYnVmZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgfQorI2Vsc2UKICAg
ICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQogICAgICAgICAgICAg
OjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyNl
bmRpZgogICAgIH0KKyNpZiBVU0UoRUdMKQorICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwg
Jm1fZmJvKTsKKyNlbHNlCiAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8p
OworI2VuZGlmCiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVu
dCgpCkBAIC0xNTEsNyArMTk4LDExIEBAIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhp
Y3NDb250ZXgKIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCgpIGNv
bnN0CiB7CisjaWYgVVNFKEVHTCkKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCiAgICAgcmV0dXJu
IGZhbHNlOworI2VuZGlmCiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbC5jcHAJKHJldmlzaW9uIDkxNDM2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICog
Q29weXJpZ2h0IChDKSAyMDExIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCkBAIC0xOCwxNCArMTksMjAgQEAKICAqLwogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWwuaCIKIAogI2lmIEVOQUJMRShXRUJHTCkKIAogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCisjaWYgVVNFKEVHTCkKKyNpbmNsdWRlIDxFR0wvZWdsLmg+
CisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisjZWxz
ZQogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjaW5jbHVkZSA8R0wvZ2x4Lmg+CisjZW5kaWYK
ICNpbmNsdWRlIDxkbGZjbi5oPgogCiAvLyBXZSBkbyBub3Qgd2FudCB0byBjYWxsIGdsWE1ha2VD
b250ZXh0Q3VycmVudCB1c2luZyBkaWZmZXJlbnQgRGlzcGxheSBwb2ludGVycywKQEAgLTk0LDYg
KzEwMSwxNiBAQCBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw+IEdyCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxz
ZTsKKyNpZiBVU0UoRUdMKQorICAgIEVHTERpc3BsYXkgZWdsRGlzcGxheSA9IGVnbEdldERpc3Bs
YXkoc2hhcmVkRGlzcGxheSgpKTsKKyAgICBpZiAoZWdsRGlzcGxheSA9PSBFR0xfTk9fRElTUExB
WSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAg
ICAgICBpZiAoIWVnbEluaXRpYWxpemUoZWdsRGlzcGxheSwgMCwgMCkpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH0KKyNlbHNl
CiAgICAgc3RhdGljIGJvb2wgc3VjY2VzcyA9IHRydWU7CiAgICAgaWYgKCFpbml0aWFsaXplZCkg
ewogICAgICAgICBzdWNjZXNzID0gaW5pdGlhbGl6ZU9wZW5HTFNoaW1zKCk7CkBAIC0xMDEsMTAg
KzExOCwxOSBAQCBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw+IEdyCiAgICAg
fQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKIAor
I2lmIFVTRShFR0wpCisgICAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCogaW50ZXJuYWwgPSBj
cmVhdGVQYnVmZmVyQ29udGV4dChlZ2xEaXNwbGF5KTsKKyNlbHNlCiAgICAgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbCogaW50ZXJuYWwgPSBjcmVhdGVQYnVmZmVyQ29udGV4dCgpOworI2VuZGlm
CiAgICAgaWYgKCFpbnRlcm5hbCkKKyNpZiBVU0UoRUdMKQorICAgICAgICBpbnRlcm5hbCA9IGNy
ZWF0ZVBpeG1hcENvbnRleHQoZWdsRGlzcGxheSk7CisjZWxzZQogICAgICAgICBpbnRlcm5hbCA9
IGNyZWF0ZVBpeG1hcENvbnRleHQoKTsKKyNlbmRpZgogICAgIGlmICghaW50ZXJuYWwpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xMTMsNiArMTM5LDQwIEBAIFBhc3NPd25QdHI8R3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbD4gR3IKICAgICByZXR1cm4gYWRvcHRQdHIoaW50ZXJuYWwp
OwogfQogCisjaWYgVVNFKEVHTCkKK0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwqIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmNyZWF0ZVBidWZmZXJDb250ZXh0KEVHTERpc3BsYXkgZWdsRGlz
cGxheSkKK3sKKyAgICBpbnQgZmJDb25maWdBdHRyYnNbXSA9IHsKKyAgICAgICAgRUdMX0JVRkZF
Ul9TSVpFLCBFR0xfRE9OVF9DQVJFLAorICAgICAgICBFR0xfUkVEX1NJWkUsIDgsCisgICAgICAg
IEVHTF9HUkVFTl9TSVpFLCA4LAorICAgICAgICBFR0xfQkxVRV9TSVpFLCA4LAorICAgICAgICBF
R0xfQUxQSEFfU0laRSwgOCwKKyAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5H
TF9FUzJfQklULAorICAgICAgICBFR0xfU1VSRkFDRV9UWVBFLCBFR0xfUEJVRkZFUl9CSVQsCisg
ICAgICAgIEVHTF9OT05FCisgICAgfTsKKyAgICBFR0xDb25maWcgZWdsQ29uZmlnc1sxXTsKKyAg
ICBFR0xpbnQgbnVtT2ZDb25maWc7CisgICAgaWYgKCFlZ2xDaG9vc2VDb25maWcoZWdsRGlzcGxh
eSwgZmJDb25maWdBdHRyYnMsICZlZ2xDb25maWdzWzBdLCAxLCAmbnVtT2ZDb25maWcpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBpZiAoIW51bU9mQ29uZmlnKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIC8vIFdlIHdpbGwgYmUgcmVuZGVyaW5nIHRvIGEgdGV4dHVyZSwgc28gb3VyIHBidWZm
ZXIgZG9lcyBub3QgbmVlZCB0byBiZSBsYXJnZS4KKyAgICBzdGF0aWMgY29uc3QgaW50IHBidWZm
ZXJBdHRyaWJ1dGVzW10gPSB7IEVHTF9XSURUSCwgMSwgRUdMX0hFSUdIVCwgMSwgRUdMX05PTkUg
fTsKKyAgICBFR0xTdXJmYWNlIGVnbFN1cmZhY2UgPSBlZ2xDcmVhdGVQYnVmZmVyU3VyZmFjZShl
Z2xEaXNwbGF5LCBlZ2xDb25maWdzWzBdLCBwYnVmZmVyQXR0cmlidXRlcyk7CisgICAgaWYgKGVn
bFN1cmZhY2UgPT0gRUdMX05PX1NVUkZBQ0UpCisgICAgICAgIHJldHVybiAwOworCisgICAgRUdM
aW50IGVnbENvbnRleHRBdHRyYnNbXSA9IHsgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sIDIs
IEVHTF9OT05FIH07CisgICAgRUdMQ29udGV4dCBlZ2xDb250ZXh0ID0gZWdsQ3JlYXRlQ29udGV4
dChlZ2xEaXNwbGF5LCBlZ2xDb25maWdzWzBdLCBFR0xfTk9fQ09OVEVYVCwgZWdsQ29udGV4dEF0
dHJicyk7CisgICAgaWYgKGVnbENvbnRleHQgPT0gRUdMX05PX0NPTlRFWFQpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgcmV0dXJuIG5ldyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKGVnbERp
c3BsYXksIGVnbENvbnRleHQsIGVnbFN1cmZhY2UpOworfQorI2Vsc2UKIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWwqIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNyZWF0ZVBidWZmZXJDb250
ZXh0KCkKIHsKICAgICBpbnQgZmJDb25maWdBdHRyaWJ1dGVzW10gPSB7CkBAIC0xNTQsNyArMjE0
LDUzIEBAIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwqIEdyYXBoaWNzQ29udGUKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgcmV0dXJuIG5ldyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKGNvbnRl
eHQsIHBidWZmZXIpOwogfQorI2VuZGlmCiAKKyNpZiBVU0UoRUdMKQorR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbCogR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y3JlYXRlUGl4bWFwQ29udGV4
dChFR0xEaXNwbGF5IGVnbERpc3BsYXkpCit7CisgICAgaW50IHNjcmVlbiA9IERlZmF1bHRTY3Jl
ZW4oc2hhcmVkRGlzcGxheSgpKTsKKyAgICBjb25zdCBpbnQgZGVwdGggPSBEZWZhdWx0RGVwdGgo
c2hhcmVkRGlzcGxheSgpLCBzY3JlZW4pOworICAgIGNvbnN0IGludCB3aWR0aCA9IDE7CisgICAg
Y29uc3QgaW50IGhlaWdodCA9IDE7CisKKyAgICBzdGF0aWMgaW50IGVnbENvbmZpZ0F0dHJzW10g
PSB7CisgICAgICAgIEVHTF9CVUZGRVJfU0laRSwgRUdMX0RPTlRfQ0FSRSwKKyAgICAgICAgRUdM
X1JFRF9TSVpFLCA4LAorICAgICAgICBFR0xfR1JFRU5fU0laRSwgOCwKKyAgICAgICAgRUdMX0JM
VUVfU0laRSwgOCwKKyAgICAgICAgRUdMX0FMUEhBX1NJWkUsIDgsCisgICAgICAgIEVHTF9ERVBU
SF9TSVpFLCBkZXB0aCwKKyAgICAgICAgRUdMX1NVUkZBQ0VfVFlQRSwgRUdMX1BJWE1BUF9CSVQs
CisgICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVOR0xfRVMyX0JJVCwKKyAgICAg
ICAgRUdMX05PTkUKKyAgICB9OworCisgICAgRUdMQ29uZmlnIGVnbENvbmZpZ3NbMV07CisgICAg
RUdMaW50IG51bU9mQ29uZmlnOworICAgIGlmICghZWdsQ2hvb3NlQ29uZmlnKGVnbERpc3BsYXks
IGVnbENvbmZpZ0F0dHJzLCAmZWdsQ29uZmlnc1swXSwgMSwgJm51bU9mQ29uZmlnKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKCFudW1PZkNvbmZpZykKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBFR0xpbnQgZWdsQ29udGV4dEF0dHJic1tdID0geyBFR0xfQ09OVEVYVF9DTElFTlRfVkVS
U0lPTiwgMiwgRUdMX05PTkUgfTsKKyAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBlZ2xDcmVhdGVD
b250ZXh0KGVnbERpc3BsYXksIGVnbENvbmZpZ3NbMF0sIEVHTF9OT19DT05URVhULCBlZ2xDb250
ZXh0QXR0cmJzKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiAwOworCisgICAg
UGl4bWFwIHBpeG1hcCA9IFhDcmVhdGVQaXhtYXAoc2hhcmVkRGlzcGxheSgpLCBEZWZhdWx0Um9v
dFdpbmRvdyhzaGFyZWREaXNwbGF5KCkpLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgaWYg
KCFwaXhtYXApCisgICAgICAgIHJldHVybiAwOworCisgICAgRUdMU3VyZmFjZSBlZ2xQaXhtYXBT
dXJmYWNlID0gZWdsQ3JlYXRlUGl4bWFwU3VyZmFjZShlZ2xEaXNwbGF5LCBlZ2xDb25maWdzWzBd
LCBwaXhtYXAsIDApOworICAgIGlmICghZWdsUGl4bWFwU3VyZmFjZSkgeworICAgICAgICBYRnJl
ZVBpeG1hcChzaGFyZWREaXNwbGF5KCksIHBpeG1hcCk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChlZ2xEaXNwbGF5
LCBjb250ZXh0LCBwaXhtYXAsIGVnbFBpeG1hcFN1cmZhY2UpOworfQorI2Vsc2UKIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWwqIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNyZWF0ZVBpeG1h
cENvbnRleHQoKQogewogICAgIHN0YXRpYyBpbnQgdmlzdWFsQXR0cmlidXRlc1tdID0gewpAQCAt
MTkyLDcgKzI5OCwxOCBAQCBHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBHcmFwaGljc0NvbnRl
CiAKICAgICByZXR1cm4gbmV3IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoY29udGV4dCwgcGl4
bWFwLCBnbHhQaXhtYXApOwogfQorI2VuZGlmCiAKKyNpZiBVU0UoRUdMKQorR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChFR0xEaXNwbGF5IGRpc3Bs
YXksIEVHTENvbnRleHQgY29udGV4dCwgRUdMU3VyZmFjZSBwYnVmZmVyU3VyZmFjZSkKKyAgICA6
IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9kaXNwbGF5KGRpc3BsYXkpCisgICAgLCBtX3Bi
dWZmZXJTdXJmYWNlKHBidWZmZXJTdXJmYWNlKQorICAgICwgbV9waXhtYXBTdXJmYWNlKDApCisg
ICAgLCBtX3BpeG1hcCgwKQoreworfQorI2Vsc2UKIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoR0xYQ29udGV4dCBjb250ZXh0LCBHTFhQYnVmZmVy
IHBidWZmZXIpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fcGJ1ZmZlcihwYnVm
ZmVyKQpAQCAtMjAwLDcgKzMxNywxOCBAQCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFw
aGljc0NvbnRlCiAgICAgLCBtX2dseFBpeG1hcCgwKQogewogfQorI2VuZGlmCiAKKyNpZiBVU0Uo
RUdMKQorR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bChFR0xEaXNwbGF5IGRpc3BsYXksIEVHTENvbnRleHQgY29udGV4dCwgUGl4bWFwIHBpeG1hcCwg
RUdMU3VyZmFjZSBwaXhtYXBTdXJmYWNlKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAg
LCBtX2Rpc3BsYXkoZGlzcGxheSkKKyAgICAsIG1fcGJ1ZmZlclN1cmZhY2UoMCkKKyAgICAsIG1f
cGl4bWFwU3VyZmFjZShwaXhtYXBTdXJmYWNlKQorICAgICwgbV9waXhtYXAocGl4bWFwKQorewor
fQorI2Vsc2UKIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWwoR0xYQ29udGV4dCBjb250ZXh0LCBQaXhtYXAgcGl4bWFwLCBHTFhQaXhtYXAgZ2x4UGl4
bWFwKQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX3BidWZmZXIoMCkKQEAgLTIw
OCwxOSArMzM2LDM3IEBAIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdyYXBoaWNzQ29udGUK
ICAgICAsIG1fZ2x4UGl4bWFwKGdseFBpeG1hcCkKIHsKIH0KKyNlbmRpZgogCiBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjp+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpCiB7CiAgICAgaWYg
KG1fY29udGV4dCkgewogICAgICAgICAvLyBUaGlzIG1heSBiZSBuZWNlc3NhcnkgdG8gcHJldmVu
dCBjcmFzaGVzIHdpdGggTlZpZGlhJ3MgY2xvc2VkIHNvdXJjZSBkcml2ZXJzLiBPcmlnaW5hbGx5
CiAgICAgICAgIC8vIGZyb20gTW96aWxsYSdzIDNEIGNhbnZhcyBpbXBsZW1lbnRhdGlvbiBhdDog
aHR0cDovL2JpdGJ1Y2tldC5vcmcvaWxtYXJpL2NhbnZhczNkLworI2lmIFVTRShFR0wpCisgICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOworCisgICAgICAgIGVn
bE1ha2VDdXJyZW50KG1fZGlzcGxheSwgMCwgMCwgMCk7CisgICAgICAgIGVnbERlc3Ryb3lDb250
ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0KTsKKyNlbHNlCiAgICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCAwKTsKIAogICAgICAgICA6OmdsWE1ha2VDb250
ZXh0Q3VycmVudChzaGFyZWREaXNwbGF5KCksIDAsIDAsIDApOwogICAgICAgICA6OmdsWERlc3Ry
b3lDb250ZXh0KHNoYXJlZERpc3BsYXkoKSwgbV9jb250ZXh0KTsKKyNlbmRpZgogICAgICAgICBt
X2NvbnRleHQgPSAwOwogICAgIH0KIAorI2lmIFVTRShFR0wpCisgICAgaWYgKG1fcGJ1ZmZlclN1
cmZhY2UpIHsKKyAgICAgICAgZWdsRGVzdHJveVN1cmZhY2UobV9kaXNwbGF5LCBtX3BidWZmZXJT
dXJmYWNlKTsKKyAgICAgICAgbV9wYnVmZmVyU3VyZmFjZSA9IDA7CisgICAgfQorICAgIGlmICht
X3BpeG1hcFN1cmZhY2UpIHsKKyAgICAgICAgZWdsRGVzdHJveVN1cmZhY2UobV9kaXNwbGF5LCBt
X3BpeG1hcFN1cmZhY2UpOworICAgICAgICBtX3BpeG1hcFN1cmZhY2UgPSAwOworICAgIH0KKyNl
bHNlCiAgICAgaWYgKG1fcGJ1ZmZlcikgewogICAgICAgICA6OmdsWERlc3Ryb3lQYnVmZmVyKHNo
YXJlZERpc3BsYXkoKSwgbV9wYnVmZmVyKTsKICAgICAgICAgbV9wYnVmZmVyID0gMDsKQEAgLTIy
OSw2ICszNzUsNyBAQCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp+R3JhcGhpY3NDb250CiAg
ICAgICAgIGdsWERlc3Ryb3lHTFhQaXhtYXAoc2hhcmVkRGlzcGxheSgpLCBtX2dseFBpeG1hcCk7
CiAgICAgICAgIG1fZ2x4UGl4bWFwID0gMDsKICAgICB9CisjZW5kaWYKICAgICBpZiAobV9waXht
YXApIHsKICAgICAgICAgWEZyZWVQaXhtYXAoc2hhcmVkRGlzcGxheSgpLCBtX3BpeG1hcCk7CiAg
ICAgICAgIG1fcGl4bWFwID0gMDsKQEAgLTIzNywxMCArMzg0LDIyIEBAIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6On5HcmFwaGljc0NvbnQKIAogdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjptYWtlQ29udGV4dEN1cnJlbnQoKQogeworI2lmIFVTRShFR0wpCisgICAgaWYgKGVnbEdl
dEN1cnJlbnRDb250ZXh0KCkgPT0gbV9jb250ZXh0KQorI2Vsc2UKICAgICBpZiAoOjpnbFhHZXRD
dXJyZW50Q29udGV4dCgpID09IG1fY29udGV4dCkKKyNlbmRpZgogICAgICAgICByZXR1cm47CiAg
ICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJldHVybjsKKyNpZiBVU0UoRUdMKQorICAgIGlm
IChtX3BidWZmZXJTdXJmYWNlKSB7CisgICAgICAgIGVnbE1ha2VDdXJyZW50KG1fZGlzcGxheSwg
bV9wYnVmZmVyU3VyZmFjZSwgbV9wYnVmZmVyU3VyZmFjZSwgbV9jb250ZXh0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGVnbE1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9waXhtYXBT
dXJmYWNlLCBtX3BpeG1hcFN1cmZhY2UsIG1fY29udGV4dCk7CisjZWxzZQogICAgIGlmIChtX3Bi
dWZmZXIpIHsKICAgICAgICAgOjpnbFhNYWtlQ3VycmVudChzaGFyZWREaXNwbGF5KCksIG1fcGJ1
ZmZlciwgbV9jb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjQ4LDYgKzQwNyw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bWFrZUNvbnQKIAogICAgIEFTU0VSVChtX2ds
eFBpeG1hcCk7CiAgICAgOjpnbFhNYWtlQ3VycmVudChzaGFyZWREaXNwbGF5KCksIG1fZ2x4UGl4
bWFwLCBtX2NvbnRleHQpOworI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQz
REludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaAkocmV2aXNpb24gOTE0MzYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw5ICsyMCwxOCBAQAogI2lmbmRlZiBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsX2gKICNkZWZpbmUgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbF9o
CiAKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCisjaWYgVVNFKEVHTCkKK3R5cGVkZWYg
dm9pZCogRUdMQ29uZmlnOwordHlwZWRlZiB2b2lkKiBFR0xDb250ZXh0OwordHlwZWRlZiB2b2lk
KiBFR0xEaXNwbGF5OwordHlwZWRlZiB2b2lkKiBFR0xTdXJmYWNlOworI2Vsc2UKIHR5cGVkZWYg
c3RydWN0IF9fR0xYY29udGV4dFJlYyAqR0xYQ29udGV4dDsKIHR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBHTFhQYnVmZmVyOwogdHlwZWRlZiB1bnNpZ25lZCBsb25nIEdMWFBpeG1hcDsKKyNlbmRpZgog
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIEdMdWJ5dGU7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgUGl4
bWFwOwogCkBAIC0zOCwxOSArNDcsMzMgQEAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bCB7CiAKICAgICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsK
KyNpZiBVU0UoRUdMKQorICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBjcmVh
dGVQYnVmZmVyQ29udGV4dChFR0xEaXNwbGF5KTsKKyAgICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbCogY3JlYXRlUGl4bWFwQ29udGV4dChFR0xEaXNwbGF5KTsKKyAgICBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsKEVHTERpc3BsYXksIEVHTENvbnRleHQsIEVHTFN1cmZhY2UpOwor
ICAgIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoRUdMRGlzcGxheSwgRUdMQ29udGV4dCwgUGl4
bWFwLCBFR0xTdXJmYWNlKTsKKyNlbHNlCiAgICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWwqIGNyZWF0ZVBidWZmZXJDb250ZXh0KCk7CiAgICAgc3RhdGljIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWwqIGNyZWF0ZVBpeG1hcENvbnRleHQoKTsKICAgICBHcmFwaGljc0NvbnRleHQz
REludGVybmFsKEdMWENvbnRleHQsIEdMWFBidWZmZXIpOwogICAgIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWwoR0xYQ29udGV4dCwgUGl4bWFwLCBHTFhQaXhtYXApOworI2VuZGlmCiAKICAgICBz
dGF0aWMgdm9pZCBhZGRBY3RpdmVHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QqKTsK
ICAgICBzdGF0aWMgdm9pZCByZW1vdmVBY3RpdmVHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250
ZXh0M0QqKTsKICAgICBzdGF0aWMgdm9pZCBjbGVhbnVwQWN0aXZlQ29udGV4dHNBdEV4aXQoKTsK
IAorI2lmIFVTRShFR0wpCisgICAgRUdMQ29udGV4dCBtX2NvbnRleHQ7CisgICAgRUdMRGlzcGxh
eSBtX2Rpc3BsYXk7CisgICAgRUdMU3VyZmFjZSBtX3BidWZmZXJTdXJmYWNlOworICAgIEVHTFN1
cmZhY2UgbV9waXhtYXBTdXJmYWNlOworI2Vsc2UKICAgICBHTFhDb250ZXh0IG1fY29udGV4dDsK
ICAgICBHTFhQYnVmZmVyIG1fcGJ1ZmZlcjsKLSAgICBQaXhtYXAgbV9waXhtYXA7CiAgICAgR0xY
UGl4bWFwIG1fZ2x4UGl4bWFwOworI2VuZGlmCisgICAgUGl4bWFwIG1fcGl4bWFwOwogfTsKIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCShyZXZpc2lvbiA5
MTQzNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29tPgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OSw4ICs1MCwxNCBAQAogI2lmIFBM
QVRGT1JNKE1BQykKICNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KICNlbGlmIFBMQVRGT1JNKEdUSykK
KyNpZiBVU0UoRUdMKQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPEdMRVMyL2ds
MmV4dC5oPgorI2Vsc2UKICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgogI2VuZGlmCisjZW5kaWYK
KwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY5LDcgKzc2LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dAogICAgICAgICBib29sIGlzVmFsaWRWZW5kb3Ig
PSB0cnVlOwogICAgICAgICAvLyBDdXJyZW50bHkgaW4gTWFjIHdlIG9ubHkgdHVybiBvbiBhbnRp
YWxpYXMgaWYgdmVuZG9yIGlzIE5WSURJQS4KICAgICAgICAgY29uc3QgY2hhciogdmVuZG9yID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9WRU5ET1IpKTsK
LSAgICAgICAgaWYgKCFzdGQ6OnN0cnN0cih2ZW5kb3IsICJOVklESUEiKSkKKyAgICAgICAgaWYg
KCF2ZW5kb3IgfHwgIXN0ZDo6c3Ryc3RyKHZlbmRvciwgIk5WSURJQSIpKQogICAgICAgICAgICAg
aXNWYWxpZFZlbmRvciA9IGZhbHNlOwogICAgICAgICBpZiAoIWlzVmFsaWRWZW5kb3IgfHwgIWV4
dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpKQog
ICAgICAgICAgICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKQEAgLTgwLDIyICs4NywzMSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIgKnBpeGVscywg
aW50IHBpeGVsc1NpemUpCiB7Ci0gICAgaWYgKHBpeGVsc1NpemUgPCBtX2N1cnJlbnRXaWR0aCAq
IG1fY3VycmVudEhlaWdodCAqIDQpCisgICAgaW50IHRvdGFsQnl0ZXMgPSBtX2N1cnJlbnRXaWR0
aCAqIG1fY3VycmVudEhlaWdodCAqIDQ7CisgICAgaWYgKHBpeGVsc1NpemUgPCB0b3RhbEJ5dGVz
KQogICAgICAgICByZXR1cm47CiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAogICAgIGJv
b2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsK
KyNpZiBVU0UoRUdMKQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNh
bXBsZUZCTyk7CiAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJV
RkZFUl9FWFQsIG1fZmJvKTsKICAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCgwLCAwLCBt
X2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCAwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9j
dXJyZW50SGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwogICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwogICAgICAg
ICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisjZW5kaWYKICAgICB9IGVsc2UgewogICAgICAgICBp
ZiAobV9ib3VuZEZCTyAhPSBtX2ZibykgewogICAgICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0
cnVlOworI2lmIFVTRShFR0wpCisgICAgICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZS
QU1FQlVGRkVSLCBtX2Zibyk7CisjZWxzZQogICAgICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyNlbmRpZgogICAgICAgICB9CiAgICAg
fQogCkBAIC0xMDcsMTMgKzEyMywyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUmVu
ZGVyaW5nUmVzCiAgICAgICAgIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IHRydWU7CiAgICAg
fQogCisjaWYgVVNFKEVHTCkKKyAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBtX2N1cnJlbnRXaWR0
aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwor
ICAgIC8vIENvbnZlcnQgdG8gQkdSQQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRl
czsgaSArPSA0KQorICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsK
KyNlbHNlCiAgICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVu
dEhlaWdodCwgR0xfQkdSQSwgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBwaXhlbHMpOwor
I2VuZGlmCiAKICAgICBpZiAobXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50KQogICAgICAgICA6Omds
UGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tBbGlnbm1lbnQpOwogCiAgICAgaWYg
KG11c3RSZXN0b3JlRkJPKQorI2lmIFVTRShFR0wpCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIG1fYm91bmRGQk8pOworI2Vsc2UKICAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOworI2VuZGlmCiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCkBAIC0xNzcsMTQgKzIwNCwyNSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0CiAgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CiAgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CiAKLSAgICBHTHVpbnQgY29sb3JG
b3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gMDsKKyAgICBHTHVpbnQgY29sb3JG
b3JtYXQgPSAwOwogICAgIGlmIChtX2F0dHJzLmFscGhhKSB7CisjaWYgVVNFKEVHTCkKKyAgICAg
ICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCQTsKKyNlbHNlCiAgICAgICAgIG1faW50
ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQkE4OworI2VuZGlmCiAgICAgICAgIGNvbG9yRm9ybWF0
ID0gR0xfUkdCQTsKICAgICB9IGVsc2UgeworI2lmIFVTRShFR0wpCisgICAgICAgIG1faW50ZXJu
YWxDb2xvckZvcm1hdCA9IEdMX1JHQjsKKyNlbHNlCiAgICAgICAgIG1faW50ZXJuYWxDb2xvckZv
cm1hdCA9IEdMX1JHQjg7CisjZW5kaWYKICAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7CiAg
ICAgfQorCisjaWYgIVVTRShFR0wpCisgICAgR0x1aW50IGludGVybmFsRGVwdGhTdGVuY2lsRm9y
bWF0ID0gMDsKICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKICAg
ICAgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0ZW5jaWwgaXMgcmVxdWly
ZWQgYW5kIGRlcHRoIGlzIG5vdC4KICAgICAgICAgLy8gU2VlIEdyYXBoaWNzQ29udGV4dDNEOjp2
YWxpZGF0ZUF0dHJpYnV0ZXMuCkBAIC0xOTYsMTEgKzIzNCwxNSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpyZXNoYXBlKGludCB3aWR0CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGludGVy
bmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UOwogICAgIH0KKyNlbmRp
ZgogCiAgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwogCiAgICAgLy8gcmVzaXplIG11
bHRpc2FtcGxlIEZCTwogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworI2lmIFVTRShFR0wp
CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisjZWxzZQogICAgICAgICBHTGludCBtYXhTYW1w
bGVDb3VudDsKICAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9TQU1QTEVTX0VYVCwgJm1h
eFNhbXBsZUNvdW50KTsKICAgICAgICAgR0xpbnQgc2FtcGxlQ291bnQgPSBzdGQ6Om1pbig4LCBt
YXhTYW1wbGVDb3VudCk7CkBAIC0yMjYsMjAgKzI2OCw0MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpyZXNoYXBlKGludCB3aWR0CiAgICAgICAgICAgICAvLyBGSVhNRTogY2xlYW51cC4KICAg
ICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgICAgIH0KKyNlbmRpZgogICAgIH0KIAog
ICAgIC8vIHJlc2l6ZSByZWd1bGFyIEZCTwogICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7
CiAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyNpZiBVU0UoRUdMKQorICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisjZWxzZQogICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworI2Vu
ZGlmCiAgICAgfQogICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUp
OwogICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDAp
OworI2lmIFVTRShFR0wpCisgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVG
RkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsK
KyNlbHNlCiAgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDAp
OworI2VuZGlmCiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRv
clRleHR1cmUpOwogICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJu
YWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVE
X0JZVEUsIDApOwogICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKICAgICBp
ZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0
aCkpIHsKKyNpZiBVU0UoRUdMKQorICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5E
RVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9y
YWdlKEdMX1JFTkRFUkJVRkZFUiwgR0xfU1RFTkNJTF9JTkRFWDgsIHdpZHRoLCBoZWlnaHQpOwor
ICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JF
TkRFUkJVRkZFUiwgbV9zdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZm
ZXIoR0xfUkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKKyAgICAgICAgOjpnbFJlbmRlcmJ1
ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9ERVBUSF9DT01QT05FTlQxNiwgd2lkdGgs
IGhlaWdodCk7CisgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgOjpnbEZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9ERVBUSF9BVFRBQ0hNRU5U
LCBHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOworICAgICAgICA6OmdsQmluZFJlbmRl
cmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIDApOworI2Vsc2UKICAgICAgICAgOjpnbEJpbmRSZW5k
ZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwog
ICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBp
bnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgIGlmICht
X2F0dHJzLnN0ZW5jaWwpCkBAIC0yNDcsMTYgKzMwOSwyNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpyZXNoYXBlKGludCB3aWR0CiAgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQogICAgICAg
ICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwg
R0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVu
Y2lsQnVmZmVyKTsKICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVG
RkVSX0VYVCwgMCk7CisjZW5kaWYKICAgICB9CisjaWYgVVNFKEVHTCkKKyAgICBpZiAoZ2xDaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01Q
TEVURSkgeworI2Vsc2UKICAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZS
QU1FQlVGRkVSX0VYVCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7CisjZW5kaWYK
ICAgICAgICAgLy8gRklYTUU6IGNsZWFudXAKICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAg
ICB9CiAKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyNpZiBVU0UoRUdMKQorICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwogICAgICAgICBpZiAobV9i
b3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQogICAgICAgICAgICAgbXVzdFJlc3RvcmVGQk8g
PSBmYWxzZTsKKyNlbmRpZgogICAgIH0KIAogICAgIC8vIEluaXRpYWxpemUgcmVuZGVyYnVmZmVy
cyB0byAwLgpAQCAtMjczLDcgKzM0NCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNo
YXBlKGludCB3aWR0CiAgICAgOjpnbENvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVF
LCBHTF9UUlVFKTsKICAgICBpZiAobV9hdHRycy5kZXB0aCkgewogICAgICAgICA6OmdsR2V0Rmxv
YXR2KEdMX0RFUFRIX0NMRUFSX1ZBTFVFLCAmY2xlYXJEZXB0aCk7CisjaWYgVVNFKEVHTCkKKyAg
ICAgICAgOjpnbENsZWFyRGVwdGhmKDEpOworI2Vsc2UKICAgICAgICAgOjpnbENsZWFyRGVwdGgo
MSk7CisjZW5kaWYKICAgICAgICAgOjpnbEdldEJvb2xlYW52KEdMX0RFUFRIX1dSSVRFTUFTSywg
JmRlcHRoTWFzayk7CiAgICAgICAgIDo6Z2xEZXB0aE1hc2soR0xfVFJVRSk7CiAgICAgICAgIGNs
ZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOwpAQCAtMjk1LDcgKzM3MCwxMSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0CiAgICAgOjpnbENsZWFyQ29sb3Io
Y2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclsz
XSk7CiAgICAgOjpnbENvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwgY29sb3JN
YXNrWzJdLCBjb2xvck1hc2tbM10pOwogICAgIGlmIChtX2F0dHJzLmRlcHRoKSB7CisjaWYgVVNF
KEVHTCkKKyAgICAgICAgOjpnbENsZWFyRGVwdGhmKGNsZWFyRGVwdGgpOworI2Vsc2UKICAgICAg
ICAgOjpnbENsZWFyRGVwdGgoY2xlYXJEZXB0aCk7CisjZW5kaWYKICAgICAgICAgOjpnbERlcHRo
TWFzayhkZXB0aE1hc2spOwogICAgIH0KICAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7CkBAIC0z
MTIsNyArMzkxLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHQK
ICAgICAgICAgOjpnbERpc2FibGUoR0xfRElUSEVSKTsKIAogICAgIGlmIChtdXN0UmVzdG9yZUZC
TykKKyNpZiBVU0UoRUdMKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVG
RkVSLCBtX2JvdW5kRkJPKTsKKyNlbHNlCiAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKKyNlbmRpZgogCiAgICAgOjpnbEZsdXNo
KCk7CiB9CkBAIC0zMjgsMTcgKzQxMSwyOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVw
YXJlVGV4dHVyZSgpCiAgICAgICAgIHJldHVybjsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyNpZiBVU0UoRUdMKQorICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9S
RUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CiAgICAgICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKICAgICAgICAg
OjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVp
Z2h0LCAwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9DT0xPUl9CVUZG
RVJfQklULCBHTF9MSU5FQVIpOworI2VuZGlmCiAgICAgfQorI2lmIFVTRShFR0wpCisgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworI2Vsc2UKICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgIDo6Z2xB
Y3RpdmVUZXh0dXJlKDApOworI2VuZGlmCisgICAgOjpnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVS
RTApOwogICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0
dXJlKTsKICAgICA6OmdsQ29weVRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5h
bENvbG9yRm9ybWF0LCAwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCAwKTsK
ICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9ib3VuZFRleHR1cmUwKTsKICAg
ICA6OmdsQWN0aXZlVGV4dHVyZShtX2FjdGl2ZVRleHR1cmUpOworI2lmIFVTRShFR0wpCisgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9ib3VuZEZCTyk7CisjZWxzZQog
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJP
KTsKKyNlbmRpZgogICAgIDo6Z2xGaW5pc2goKTsKICAgICBtX2xheWVyQ29tcG9zaXRlZCA9IHRy
dWU7CiB9CkBAIC0zNzksOSArNDc0LDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRG
cmFtZWJ1ZmZlcigKICAgICBpZiAoYnVmZmVyKQogICAgICAgICBmYm8gPSBidWZmZXI7CiAgICAg
ZWxzZQorI2lmIFVTRShFR0wpCisgICAgICAgIGZibyA9IG1fZmJvOworI2Vsc2UKICAgICAgICAg
ZmJvID0gKG1fYXR0cnMuYW50aWFsaWFzID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKKyNl
bmRpZgogICAgIGlmIChmYm8gIT0gbV9ib3VuZEZCTykgeworI2lmIFVTRShFR0wpCisgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBmYm8pOworI2Vsc2UKICAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZibyk7CisjZW5kaWYKICAgICAgICAgbV9ib3VuZEZC
TyA9IGZibzsKICAgICB9CiB9CkBAIC0zODksNyArNDkyLDExIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcigKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5k
ZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikK
IHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNpZiBVU0UoRUdMKQorICAgIDo6Z2xCaW5k
UmVuZGVyYnVmZmVyKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKKyNlbHNlCiAgICAgOjpnbEJpbmRS
ZW5kZXJidWZmZXJFWFQodGFyZ2V0LCByZW5kZXJidWZmZXIpOworI2VuZGlmCiB9CiAKIApAQCAt
NDUzLDcgKzU2MCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKEdD
CiBHQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNE
ZW51bSB0YXJnZXQpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgVVNFKEVHTCkK
KyAgICByZXR1cm4gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKKyNlbHNlCiAg
ICAgcmV0dXJuIDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdldCk7CisjZW5kaWYK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJDb2xvcihHQzNEY2xhbXBmIHIsIEdD
M0RjbGFtcGYgZywgR0MzRGNsYW1wZiBiLCBHQzNEY2xhbXBmIGEpCkBAIC00NzEsNyArNTgyLDEx
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyKEdDM0RiaXRmaWUKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKIHsKICAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyNpZiBVU0UoRUdMKQorICAgIDo6Z2xDbGVhckRlcHRoZihkZXB0aCk7
CisjZWxzZQogICAgIDo6Z2xDbGVhckRlcHRoKGRlcHRoKTsKKyNlbmRpZgogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpjbGVhclN0ZW5jaWwoR0MzRGludCBzKQpAQCAtNTQyLDI4ICs2NTcs
NDQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQoRwogewogICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5k
RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyNpZiBVU0UoRUdMKQorICAgICAgICBub3RJbXBs
ZW1lbnRlZCgpOworI2Vsc2UKICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFE
X0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CiAgICAgICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKICAgICAgICAgOjpn
bEJsaXRGcmFtZWJ1ZmZlckVYVCh4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHgsIHksIHgg
KyB3aWR0aCwgeSArIGhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKICAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsK
KyNlbmRpZgogICAgIH0KICAgICA6OmdsQ29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CiAgICAgaWYgKG1fYXR0
cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyNpZiBVU0Uo
RUdMKQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworI2Vu
ZGlmCiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZz
ZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgaWYgKG1fYXR0cnMuYW50aWFs
aWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgeworI2lmIFVTRShFR0wpCisg
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisjZWxzZQogICAgICAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKICAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8p
OwogICAgICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKHgsIHksIHggKyB3aWR0aCwgeSArIGhl
aWdodCwgeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBH
TF9MSU5FQVIpOwogICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVS
X0VYVCwgbV9mYm8pOworI2VuZGlmCiAgICAgfQogICAgIDo6Z2xDb3B5VGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAg
ICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJP
KQorI2lmIFVTRShFR0wpCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisjZWxzZQogICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBs
ZUZCTyk7CisjZW5kaWYKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UoR0Mz
RGVudW0gbW9kZSkKQEAgLTU4Nyw3ICs3MTgsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZGVwdGhNYXNrKEdDM0Ribwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZShHQzNE
Y2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisjaWYgVVNFKEVHTCkKKyAgICA6OmdsRGVwdGhSYW5nZWYoek5lYXIsIHpGYXIpOworI2Vs
c2UKICAgICA6OmdsRGVwdGhSYW5nZSh6TmVhciwgekZhcik7CisjZW5kaWYKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
UGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCkBAIC02NDksMTMgKzc4NCwyMSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpmbHVzaCgpCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0Rl
bnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCiB7CiAgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgVVNFKEVHTCkKKyAgICA6OmdsRnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZl
cik7CisjZWxzZQogICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIGF0
dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKKyNlbmRpZgogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgUGxhdGZvcm0zRE9iamVj
dCB0ZXh0dXJlLCBHQzNEaW50IGxldmVsKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
I2lmIFVTRShFR0wpCisgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNo
bWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7CisjZWxzZQogICAgIDo6Z2xGcmFtZWJ1
ZmZlclRleHR1cmUyREVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwg
bGV2ZWwpOworI2VuZGlmCiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyb250RmFjZShH
QzNEZW51bSBtb2RlKQpAQCAtNjY3LDcgKzgxMCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojpmcm9udEZhY2UoR0MzRGVuCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1h
cChHQzNEZW51bSB0YXJnZXQpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgVVNF
KEVHTCkKKyAgICA6OmdsR2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKKyNlbHNlCiAgICAgOjpnbEdl
bmVyYXRlTWlwbWFwRVhUKHRhcmdldCk7CisjZW5kaWYKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCkBAIC03MTEsNiArODU4LDE1IEBAIGJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0KICAgICBpbmZvLm5hbWUgPSBTdHJpbmcobmFt
ZSwgbmFtZUxlbmd0aCk7CiAgICAgaW5mby50eXBlID0gdHlwZTsKICAgICBpbmZvLnNpemUgPSBz
aXplOworCisjaWYgVVNFKEVHTCkKKyAgICAvLyBGSVhNRSA6ICJbMF0iIGlzIGFkZGVkIGF0IHRo
ZSBlbmQgb2YgaW5mby5uYW1lIGluIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlVW5p
Zm9ybSgpIAorICAgIC8vIHdoZW4gaXNHTEVTMkNvbXBsaWFudCBpcyBvbmx5IGZhbHNlLiBJIGNh
bid0IHVuZGVyc3RhbmQgdGhlIHJlYXNvbi4gCisgICAgLy8gSSBhZGQgIlswXSIgaGVyZSB0byBh
dm9pZCBmYWxpbmcgd2ViZ2wgY29uZm9ybWFuY2UgdGVzdChnZXQtYWN0aXZldGVzdC5odG1sKQor
ICAgIC8vIGJ1dCBpZiBpdCBtYWtlcyBzb21ldGhpbmcgd3JvbmcgbGF0ZXIsIHJlbW92ZSBmb2xs
b3dpbmcgbGluZXMgCisgICAgaWYgKGluZm8uc2l6ZSA+IDEgJiYgIWluZm8ubmFtZS5lbmRzV2l0
aCgiWzBdIikpIAorICAgICAgICBpbmZvLm5hbWUuYXBwZW5kKCJbMF0iKTsKKyNlbmRpZgogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC03ODQsNyArOTQwLDExIEBAIEdDM0Rib29sZWFuIEdyYXBo
aWNzQ29udGV4dDNEOjppc0ZyYW1lYnUKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCiAgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgVVNFKEVHTCkKKyAgICByZXR1cm4gOjpnbElzRnJh
bWVidWZmZXIoZnJhbWVidWZmZXIpOworI2Vsc2UKICAgICByZXR1cm4gOjpnbElzRnJhbWVidWZm
ZXJFWFQoZnJhbWVidWZmZXIpOworI2VuZGlmCiB9CiAKIEdDM0Rib29sZWFuIEdyYXBoaWNzQ29u
dGV4dDNEOjppc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQpAQCAtODAyLDcgKzk2
MiwxMSBAQCBHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNSZW5kZXJiCiAgICAgICAg
IHJldHVybiBHTF9GQUxTRTsKIAogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworI2lmIFVTRShF
R0wpCisgICAgcmV0dXJuIDo6Z2xJc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOworI2Vsc2UK
ICAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVyRVhUKHJlbmRlcmJ1ZmZlcik7CisjZW5kaWYK
IH0KIAogR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFBsYXRmb3JtM0RP
YmplY3Qgc2hhZGVyKQpAQCAtODU1LDE1ICsxMDE5LDIzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnJlYWRQaXhlbHMoR0MzRGkKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6Omds
Rmx1c2goKTsKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211
bHRpc2FtcGxlRkJPKSB7CisjaWYgVVNFKEVHTCkKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyNlbHNlCiAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZF
Ul9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwogICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CiAgICAgICAgIDo6Z2xCbGl0RnJhbWVi
dWZmZXJFWFQoeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4LCB5LCB4ICsgd2lkdGgsIHkg
KyBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CiAgICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CiAgICAgICAgIDo6
Z2xGbHVzaCgpOworI2VuZGlmCiAgICAgfQogICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CiAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFz
ICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyNpZiBVU0UoRUdMKQorICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworI2VuZGlmCiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCkBAIC04NzYsNiAr
MTA0OCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb20KIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworI2lmIFVTRShFR0wpCisgICAgOjpnbFJl
bmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
CisjZWxzZQogICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKICAgICBjYXNlIERFUFRIX1NU
RU5DSUw6CiAgICAgICAgIGludGVybmFsZm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMOF9FWFQ7
CkBAIC04OTIsNiArMTA2Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZl
clN0b3IKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdl
RVhUKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworI2VuZGlmCiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUs
IEdDM0Rib29sZWFuIGludmVydCkKQEAgLTExODcsNyArMTM2MywxMSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAg
ICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQogICAgICAgICBh
dHRhY2htZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBl
aXRoZXIgd29ya3MuCisjaWYgVVNFKEVHTCkKKyAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOworI2Vsc2UK
ICAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBh
dHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOworI2VuZGlmCiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKQEAgLTEx
OTcsNiArMTM3Nyw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KEdDM0QK
ICAgICAvLyB3aGVyZWFzIEdMRVMyIHJldHVybiB0aGUgbnVtYmVyIG9mIHZlY3RvcnMgKGVhY2gg
dmVjdG9yIGhhcyA0IGNvbXBvbmVudHMpLgogICAgIC8vIFRoZXJlZm9yZSwgdGhlIHZhbHVlIHJl
dHVybmVkIGJ5IGRlc2t0b3AgR0wgbmVlZHMgdG8gYmUgZGl2aWRlZCBieSA0LgogICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworI2lmIFVTRShFR0wpCisgICAgOjpnbEdldEludGVnZXJ2KHBuYW1l
LCB2YWx1ZSk7CisjZWxzZQogICAgIHN3aXRjaCAocG5hbWUpIHsKICAgICBjYXNlIE1BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlM6CiAgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfRlJB
R01FTlRfVU5JRk9STV9DT01QT05FTlRTLCB2YWx1ZSk7CkBAIC0xMjEzLDYgKzEzOTYsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VydihHQzNECiAgICAgZGVmYXVsdDoKICAg
ICAgICAgOjpnbEdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7CiAgICAgfQorI2VuZGlmCiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKQEAgLTEyNDMsNyArMTQyNywx
MSBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyNpZiBVU0UoRUdMKQorICAgIDo6Z2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0
YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CisjZWxzZQogICAgIDo6Z2xHZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXJpdkVYVCh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CisjZW5kaWYKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEdDM0Rl
bnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKQEAgLTEyNTUsMzcgKzE0NDMsMzcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoUGxhdAogICAgIEhhc2hNYXA8UGxhdGZvcm0z
RE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNv
dXJjZU1hcC5maW5kKHNoYWRlcik7CiAgICAgCiAgICAgc3dpdGNoIChwbmFtZSkgewotICAgICAg
ICBjYXNlIERFTEVURV9TVEFUVVM6Ci0gICAgICAgIGNhc2UgU0hBREVSX1RZUEU6Ci0gICAgICAg
ICAgICAvLyBMZXQgT3BlbkdMIGhhbmRsZSB0aGVzZS4KKyAgICBjYXNlIERFTEVURV9TVEFUVVM6
CisgICAgY2FzZSBTSEFERVJfVFlQRToKKyAgICAgICAgLy8gTGV0IE9wZW5HTCBoYW5kbGUgdGhl
c2UuCiAgICAgICAgIAotICAgICAgICAgICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUs
IHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICA6OmdsR2V0U2hhZGVyaXYoc2hh
ZGVyLCBwbmFtZSwgdmFsdWUpOworICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgICAgIGNh
c2UgQ09NUElMRV9TVEFUVVM6Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291
cmNlTWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgKCp2YWx1ZSkgPSBzdGF0aWNfY2FzdDxp
bnQ+KGZhbHNlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAg
Y2FzZSBDT01QSUxFX1NUQVRVUzoKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJj
ZU1hcC5lbmQoKSkgeworICAgICAgICAgICAgKCp2YWx1ZSkgPSBzdGF0aWNfY2FzdDxpbnQ+KGZh
bHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
ICAgICgqdmFsdWUpID0gc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQtPnNlY29uZC5pc1ZhbGlkKTsK
LSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAoKnZhbHVlKSA9IHN0YXRpY19jYXN0PGludD4o
cmVzdWx0LT5zZWNvbmQuaXNWYWxpZCk7CisgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAg
ICAgY2FzZSBJTkZPX0xPR19MRU5HVEg6Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hh
ZGVyU291cmNlTWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgKCp2YWx1ZSkgPSAwOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KKyAgICBjYXNlIElORk9fTE9HX0xF
TkdUSDoKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgewor
ICAgICAgICAgICAgKCp2YWx1ZSkgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICAgICAgKCp2YWx1ZSkgPSBnZXRTaGFkZXJJbmZvTG9nKHNoYWRl
cikubGVuZ3RoKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgKCp2YWx1ZSkgPSBnZXRT
aGFkZXJJbmZvTG9nKHNoYWRlcikubGVuZ3RoKCk7CisgICAgICAgIGJyZWFrOwogICAgICAgICAK
LSAgICAgICAgY2FzZSBTSEFERVJfU09VUkNFX0xFTkdUSDoKLSAgICAgICAgICAgICgqdmFsdWUp
ID0gZ2V0U2hhZGVyU291cmNlKHNoYWRlcikubGVuZ3RoKCk7Ci0gICAgICAgICAgICBicmVhazsK
KyAgICBjYXNlIFNIQURFUl9TT1VSQ0VfTEVOR1RIOgorICAgICAgICAoKnZhbHVlKSA9IGdldFNo
YWRlclNvdXJjZShzaGFkZXIpLmxlbmd0aCgpOworICAgICAgICBicmVhazsKICAgICAgICAgCi0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX0VO
VU0pOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfRU5V
TSk7CiAgICAgfQogfQogCkBAIC0xMzg4LDE0ICsxNTc2LDIyIEBAIEdDM0RzaXplaXB0ciBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0VmVydGUKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0MzRHNpemVp
cHRyPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7CiB9CiAKLWJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25z
dCB2b2lkKiBwaXhlbHMpCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQogewogICAgIGlmICh3aWR0
aCAmJiBoZWlnaHQgJiYgIXBpeGVscykgewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZB
TElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyNpZiBVU0UoRUdMKQor
ICAgIGlmICh0eXBlID09IEdMX0ZMT0FUKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vdCBz
dXBwb3J0ZWQgaW4gR0xFUyAyLjAKKyNlbmRpZgorICAgIAogICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIEdDM0RlbnVtIG9wZW5HTEludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7
CisjaWYgVVNFKEVHTCkKKyAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Cisj
ZWxzZQorICAgIEdDM0RlbnVtIG9wZW5HTEludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7
CiAgICAgaWYgKHR5cGUgPT0gR0xfRkxPQVQpIHsKICAgICAgICAgaWYgKGZvcm1hdCA9PSBHTF9S
R0JBKQogICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9SR0JBMzJGX0FSQjsK
QEAgLTE0MDQsNiArMTYwMCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQo
R0MzRGUKICAgICB9CiAKICAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBvcGVuR0xJ
bnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVs
cyk7CisjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTQyNyw3ICsxNjI0LDExIEBA
IFBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWEKIHsKICAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICAgICBHTHVpbnQgbyA9IDA7CisjaWYgVVNFKEVHTCkKKyAgICBnbEdl
bkZyYW1lYnVmZmVycygxLCAmbyk7CisjZWxzZQogICAgIGdsR2VuRnJhbWVidWZmZXJzRVhUKDEs
ICZvKTsKKyNlbmRpZgogICAgIHJldHVybiBvOwogfQogCkBAIC0xNDQxLDcgKzE2NDIsMTEgQEAg
UGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYQogewogICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwogICAgIEdMdWludCBvID0gMDsKKyNpZiBVU0UoRUdMKQorICAgIGdsR2Vu
UmVuZGVyYnVmZmVycygxLCAmbyk7CisjZWxzZQogICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgx
LCAmbyk7CisjZW5kaWYKICAgICByZXR1cm4gbzsKIH0KIApAQCAtMTQ2OCw3ICsxNjczLDExIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcihQbGEKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIp
CiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgVVNFKEVHTCkKKyAgICBnbERlbGV0
ZUZyYW1lYnVmZmVycygxLCAmZnJhbWVidWZmZXIpOworI2Vsc2UKICAgICBnbERlbGV0ZUZyYW1l
YnVmZmVyc0VYVCgxLCAmZnJhbWVidWZmZXIpOworI2VuZGlmCiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQpAQCAtMTQ4
MCw3ICsxNjg5LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0oUGwK
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2Jq
ZWN0IHJlbmRlcmJ1ZmZlcikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNpZiBVU0Uo
RUdMKQorICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmcmVuZGVyYnVmZmVyKTsKKyNlbHNl
CiAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZyZW5kZXJidWZmZXIpOworI2VuZGlm
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNET2Jq
ZWN0IHNoYWRlcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxNDM2KQorKysgU291
cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTEtMDctMjAgIENoYW5nU2VvayBPaCAgPHNoaXZhbWlkb3dAZ21haWwuY29tPgorCisgICAg
ICAgIFtHVEtdIFN1cHBvcnQgRUdMIGJhY2tlbmQgZm9yIFdlYkdMCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA2NAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluY2x1ZGUgRUdMIGxpYnJhcnkgdG8gbGlu
ayB3aGVuIGVnbC1iYWNrZW5kIGlzIGNob29zZW4gZm9yIFdlYkdMLgorCisgICAgICAgICogR05V
bWFrZWZpbGUuYW06CisKIDIwMTEtMDctMTEgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGduc0Bn
bm9tZS5vcmc+CiAKICAgICAgICAgW0dUS10gR29vZ2xlIENhbGVuZGFyIHRoaW5rcyB3ZSdyZSBt
b2JpbGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA5MTQzNikKKysr
IFNvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2
ICs4Nyw3IEBAIGxpYndlYmtpdGd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU8KIAkkKHdl
YmNvcmVfbGRmbGFncykgXAogCSQoQ0FJUk9fTElCUykgXAogCSQoQ09WRVJBR0VfTERGTEFHUykg
XAorCSQoRUdMX0xJQlMpIFwKIAkkKEVOQ0hBTlRfTElCUykgXAogCSQoRlJFRVRZUEVfTElCUykg
XAogCSQoR0FJTF9MSUJTKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102630</attachid>
            <date>2011-08-02 03:42:10 -0700</date>
            <delta_ts>2011-08-09 05:27:12 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>P59064.patch</filename>
            <type>text/plain</type>
            <size>116046</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDkyMTY5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDgt
MDIgIENoYW5nU2VvayBPaCAgPHNoaXZhbWlkb3dAZ21haWwuY29tPgorCisgICAgICAgIFtHVEtd
IFN1cHBvcnQgRUdMIGJhY2tlbmQgZm9yIFdlYkdMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBjb25maWctb3B0aW9uIHRvIGNob29zZSBnbC1iYWNr
ZW5kIGJldHdlZW4gZ2x4IGFuZCBlZ2wuCisKKyAgICAgICAgKiBjb25maWd1cmUuYWM6CisKIDIw
MTEtMDgtMDEgIFNjb3R0IEdyYWhhbSAgPHNjb3R0bWdAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJFR1JFU1NJT04gKHIzOTcyNT8pOiBSZXNvdXJjZXMgcmVtb3ZlZCBmcm9tIGRvY3VtZW50IGNh
biBub3QgYmUgZnJlZWQgdW50aWwgdGhlIGRvY3VtZW50IGlzIGRlbGV0ZWQKSW5kZXg6IGNvbmZp
Z3VyZS5hYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBjb25maWd1cmUuYWMJKHJldmlzaW9uIDkyMTY5KQorKysg
Y29uZmlndXJlLmFjCSh3b3JraW5nIGNvcHkpCkBAIC0zODMsMTIgKzM4MywzNiBAQCBBQ19BUkdf
RU5BQkxFKHdlYmdsLAogICAgICAgICAgICAgICBbXSwgW2VuYWJsZV93ZWJnbD0ibm8iXSkKIEFD
X01TR19SRVNVTFQoWyRlbmFibGVfd2ViZ2xdKQogCisjIGRldGVybWluZSB0aGUgR0wgYmFja2Vu
ZAorQUNfTVNHX0NIRUNLSU5HKFt0aGUgR0wgYmFja2VuZCB0byB1c2VdKQorQUNfQVJHX1dJVEgo
Z2xfYmFja2VuZCwKKyAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtZ2wtYmFja2Vu
ZD1APDpAZ2x4L2VnbEA6PkBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NlbGVjdCBn
bCBiYWNrZW5kIFtkZWZhdWx0PWdseF1dKSwKKyAgICAgICAgICAgIFtdLFt3aXRoX2dsX2JhY2tl
bmQ9ImdseCJdKQorCitjYXNlICIkd2l0aF9nbF9iYWNrZW5kIiBpbgorICAgICBnbHh8ZWdsKSA7
OworICAgICAqKSBBQ19NU0dfRVJST1IoW0ludmFsaWQgZ2wgYmFja2VuZDogbXVzdCBiZSBnbHgs
IG9yIGVnbC5dKSA7OworZXNhYworCitBQ19NU0dfUkVTVUxUKFskd2l0aF9nbF9iYWNrZW5kXSkK
KwogaWYgdGVzdCAiJGVuYWJsZV93ZWJnbCIgPSAieWVzIjsgdGhlbgotICAgIEFDX0NIRUNLX0hF
QURFUlMoW0dML2dsLmhdLCBbXSwgQUNfTVNHX0VSUk9SKFtPcGVuR0wgaGVhZGVyIG5vdCBmb3Vu
ZF0pKQotICAgIEFDX0NIRUNLX0hFQURFUlMoW0dML2dseC5oXSwgW10sIEFDX01TR19FUlJPUihb
R0xYIGhlYWRlciBub3QgZm91bmRdKSkKLSAgICBPUEVOR0xfTElCUz0tbEdMCisgICAgY2FzZSAi
JHdpdGhfZ2xfYmFja2VuZCIgaW4KKyAgICAgICAgZ2x4KSBBQ19DSEVDS19IRUFERVJTKFtHTC9n
bC5oXSwgW10sIEFDX01TR19FUlJPUihbT3BlbkdMIGhlYWRlciBub3QgZm91bmRdKSkKKyAgICAg
ICAgICAgICBBQ19DSEVDS19IRUFERVJTKFtHTC9nbHguaF0sIFtdLCBBQ19NU0dfRVJST1IoW0dM
WCBoZWFkZXIgbm90IGZvdW5kXSkpCisgICAgICAgICAgICAgT1BFTkdMX0xJQlM9LWxHTAorICAg
ICAgICAgICAgIEFDX1NVQlNUKFtPUEVOR0xfTElCU10pCisgICAgICAgICAgICAgOzsKKyAgICAg
ICAgZWdsKSBBQ19DSEVDS19IRUFERVJTKFtHTEVTMi9nbDIuaF0sIFtdLCBBQ19NU0dfRVJST1Io
W09wZW5HTCBFUyBoZWFkZXIgbm90IGZvdW5kXSkpCisgICAgICAgICAgICAgQUNfQ0hFQ0tfSEVB
REVSUyhbRUdML2VnbC5oXSwgW10sIEFDX01TR19FUlJPUihbRUdMIGhlYWRlciBub3QgZm91bmRd
KSkKKyAgICAgICAgICAgICBPUEVOR0xfTElCUz0tbEdMRVN2MgorICAgICAgICAgICAgIEVHTF9M
SUJTPS1sRUdMCisgICAgICAgICAgICAgQUNfU1VCU1QoW09QRU5HTF9MSUJTXSkKKyAgICAgICAg
ICAgICBBQ19TVUJTVChbRUdMX0xJQlNdKQorICAgICAgICAgICAgIDs7CisgICAgZXNhYwogZmkK
LUFDX1NVQlNUKFtPUEVOR0xfTElCU10pCiAKICMgY2hlY2sgd2hldGhlciB0byBlbmFibGUgY2hh
bm5lbCBtZXNzYWdpbmcgc3VwcG9ydAogQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJs
ZSBIVE1MNSBDaGFubmVsIE1lc3NhZ2luZyBzdXBwb3J0XSkKQEAgLTExNDksNiArMTE3MywxMCBA
QCBBTV9DT05ESVRJT05BTChbVVNFX0dMSUJfVU5JQ09ERV0sIFt0ZXN0CiBBTV9DT05ESVRJT05B
TChbVVNFX0ZSRUVUWVBFXSwgW3Rlc3QgIiR3aXRoX2ZvbnRfYmFja2VuZCIgPSAiZnJlZXR5cGUi
XSkKIEFNX0NPTkRJVElPTkFMKFtVU0VfUEFOR09dLCBbdGVzdCAiJHdpdGhfZm9udF9iYWNrZW5k
IiA9ICJwYW5nbyJdKQogCisjIEZvbnQgYmFja2VuZCBjb25kaXRpb25hbHMKK0FNX0NPTkRJVElP
TkFMKFtVU0VfR0xYXSwgW3Rlc3QgIiR3aXRoX2dsX2JhY2tlbmQiID0gImdseCJdKQorQU1fQ09O
RElUSU9OQUwoW1VTRV9FR0xdLCBbdGVzdCAiJHdpdGhfZ2xfYmFja2VuZCIgPSAiZWdsIl0pCisK
ICMgR1N0cmVhbWVyIGZlYXR1cmUgY29uZGl0aW9uYWwKIEFNX0NPTkRJVElPTkFMKFtVU0VfR1NU
UkVBTUVSXSwgW3Rlc3QgIiRoYXZlX2dzdHJlYW1lciIgPSAieWVzIl0pCiAKQEAgLTEyNjMsNiAr
MTI5MSw3IEBAIEJ1aWxkIGNvbmZpZ3VyYXRpb246CiAgQ29kZSBjb3ZlcmFnZSBzdXBwb3J0ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2NvdmVyYWdlCiAgVW5p
Y29kZSBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAk
d2l0aF91bmljb2RlX2JhY2tlbmQKICBGb250IGJhY2tlbmQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6ICR3aXRoX2ZvbnRfYmFja2VuZAorIEdMIGJhY2tlbmQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHdpdGhfZ2xf
YmFja2VuZAogIE9wdGltaXplZCBtZW1vcnkgYWxsb2NhdG9yICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogJGVuYWJsZV9mYXN0X21hbGxvYwogRmVhdHVyZXM6CiAgM0QgUmVuZGVyaW5n
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlXzNk
X3JlbmRlcmluZwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTIxNjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOTkgQEAKKzIwMTEtMDgt
MDIgIENoYW5nU2VvayBPaCAgPHNoaXZhbWlkb3dAZ21haWwuY29tPgorCisgICAgICAgIFtHVEtd
IFN1cHBvcnQgRUdMIGJhY2tlbmQgZm9yIFdlYkdMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBidWlsZC1mbGFncyBsaWtlIFdURl9VU0VfR0xYICYg
V1RGX1VTRV9FR0wgdG8gc2VwZXJhdGUgZ2wtYmFja2VuZHMuCisgICAgICAgIEFsbW9zdCBHTCBj
b21tb24gQVBJcyBpbiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgYXJlIG1vdmVkIHRvIEdy
YXBoaWNzQ29udGV4dDNEQmFzZS5jcHAKKyAgICAgICAgQW5kIHRoZSBvdGhlcnMgQVBJcyBuZWVk
ZWQgdG8gc2VwZXJhdGUgYWNjb3JkaW5nIHRvIGdsLWJhY2tlbmQgYXJlIGxvY2F0ZWQgYXQgR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIGFuZCBHcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cC4KKworICAgICAgICBObyBuZXcgdGVzdHMgcmVxdWlyZWQuCisKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5hbToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNER3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y3JlYXRlUGJ1ZmZlckNvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y3JlYXRlUGl4bWFw
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpH
cmFwaGljc0NvbnRleHQzREludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6On5HcmFwaGljc0NvbnRleHQzREludGVybmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om1ha2VDb250ZXh0Q3VycmVudCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5k
ZXJpbmdSZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNo
YXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzRnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0
SW50ZWdlcnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJi
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1l
YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5k
ZXJidWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTEJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFt
ZWJ1ZmZlclNpemUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2
ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNo
YWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0dHJpYkxv
Y2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y2xlYXJTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb2xv
ck1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmN1bGxGYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aEZ1bmMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6ZW5hYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjplbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmbHVzaCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZnJvbnRGYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpoaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjppc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1By
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1RleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpzY2lzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpzaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnN0ZW5jaWxGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVu
Y2lsRnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpz
dGVuY2lsTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNp
bE1hc2tTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3Rl
bmNpbE9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3BT
ZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1l
dGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVy
aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWZ2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTRmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaXYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtM2l2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm00aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm1NYXRyaXgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm1NYXRyaXgzZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm1NYXRyaXg0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVzZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmli
MWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2YpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliUG9pbnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmlld3BvcnQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEJvb2xlYW52KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RmxvYXR2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpjcmVhdGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVs
ZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYXJrQ29udGV4dENoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtMYXllckNvbXBv
c2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9z
aXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9u
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMRVMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpyZWFkUmVuZGVyaW5nUmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cHJl
cGFyZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRG
cmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZFJl
bmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y2xlYXJEZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29weVRl
eEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhT
dWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVi
dWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Omdl
bmVyYXRlTWlwbWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRB
Y3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0Zy
YW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1JlbmRl
cmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVs
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3Rv
cmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisKIDIwMTEtMDgtMDIgIFBhdmVsIEZlbGRt
YW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGFycm93
IGlzIGEgcGFpbiB0byBjbGljayBpbiBjb25zb2xlLiBEcml2ZS1ieSBzZWxlY3Rpb24gcmVzZXQg
Zml4LgpJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDkyMTY5KQorKysgU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEzNyw2ICsxMzcsMjAg
QEAgd2ViY29yZWd0a19jcHBmbGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28KIGVuZGlmICMgRU5EIFVTRV9QQU5HTwogCisjIC0tLQor
IyBHTFggZ2wgYmFja2VuZAorIyAtLS0KK2lmIFVTRV9HTFgKK3dlYmNvcmVndGtfY3BwZmxhZ3Mg
Kz0gLURXVEZfVVNFX0dMWD0xCitlbmRpZiAjIEVORCBVU0VfR0xYCisKKyMgLS0tCisjIEVHTCBn
bCBiYWNrZW5kCisjIC0tLQoraWYgVVNFX0VHTAord2ViY29yZWd0a19jcHBmbGFncyArPSAtRFdU
Rl9VU0VfRUdMPTEKK2VuZGlmICMgRU5EIFVTRV9FR0wKKwogIyAtLS0tCiAjIEhUTUwgRGV0YWls
cyBFbGVtZW50CiAjIC0tLS0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2
aXNpb24gOTIxNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nzg0LDEwICs0Nzg0LDIyIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWwuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAorCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEJhc2UuY3Bw
CiBlbmRpZiAgIyBFTkQgRU5BQkxFX1dFQkdMCiAKICMgLS0tCisjIE9wZW5HTCBiYWNrZW5kIAor
IyAtLS0KK2lmIFVTRV9HTFgKK3dlYmNvcmVfc291cmNlcyArPSBcCisJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAorZW5k
aWYgICMgRU5EIFVTRV9HTFgKK2lmIFVTRV9FR0wKK3dlYmNvcmVfc291cmNlcyArPSBcCisJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMRVMuY3BwCitlbmRpZiAgIyBFTkQgVVNFX0VHTAorCisjIC0tLQogIyBNSFRNTCBzdXBwb3J0
CiAjIC0tLQogaWYgRU5BQkxFX01IVE1MCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDkyMTY5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAko
d29ya2luZyBjb3B5KQpAQCAtOTMxLDcgKzkzMSwxMiBAQCBwdWJsaWM6CiAKICAgICBHQzNEdWlu
dCBtX3RleHR1cmUsIG1fY29tcG9zaXRvclRleHR1cmU7CiAgICAgR0MzRHVpbnQgbV9mYm87Cisj
aWYgVVNFKEVHTCkKKyAgICBHQzNEdWludCBtX2RlcHRoQnVmZmVyOworICAgIEdDM0R1aW50IG1f
c3RlbmNpbEJ1ZmZlcjsKKyNlbHNlCiAgICAgR0MzRHVpbnQgbV9kZXB0aFN0ZW5jaWxCdWZmZXI7
CisjZW5kaWYKICAgICBib29sIG1fbGF5ZXJDb21wb3NpdGVkOwogICAgIEdDM0R1aW50IG1faW50
ZXJuYWxDb2xvckZvcm1hdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNER3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RHdGsuY3BwCShyZXZp
c2lvbiA5MjE2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFw
aGljc0NvbnRleHQzREd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDExIENo
YW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI4LDExICsyOSwxNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCiAKICNpZiBFTkFCTEUoV0VCR0wpCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNp
bmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
REludGVybmFsLmgiCisjaWYgVVNFKEVHTCkKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgor
I2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgorI2Vsc2UK
ICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgogI2luY2x1ZGUgIlNoYWRlckxhbmcuaCIKKyNlbmRp
ZgogI2luY2x1ZGUgPHd0Zi9Ob3RGb3VuZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01
OSw3ICs2NSwxMiBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAg
ICAgLCBtX2F0dHJzKGF0dHJpYnV0ZXMpCiAgICAgLCBtX3RleHR1cmUoMCkKICAgICAsIG1fZmJv
KDApCisjaWYgVVNFKEVHTCkKKyAgICAsIG1fZGVwdGhCdWZmZXIoMCkKKyAgICAsIG1fc3RlbmNp
bEJ1ZmZlcigwKQorIyBlbHNlCiAgICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQorI2VuZGlm
CiAgICAgLCBtX2JvdW5kRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAgICAgLCBt
X211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCkBAIC03NCwyNiArODUsNDAgQEAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYQogICAgIDo6Z2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwogICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKICAgICA6OmdsVGV4
UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVB
Uik7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQ
X1MsIEdMX0NMQU1QKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVApOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICA6OmdsVGV4
UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9f
RURHRSk7CiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwogCiAgICAgLy8g
Q3JlYXRlIGFuIEZCTy4KKyNpZiBVU0UoRUdMKQorICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwg
Jm1fZmJvKTsKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7
CisjZWxzZQogICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworI2VuZGlmCiAK
ICAgICBtX2JvdW5kRkJPID0gbV9mYm87CiAgICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAmJiAo
bV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpKQorI2lmIFVTRShFR0wpCisgICAgICAg
IDo6Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKKyAgICAgICAgOjpnbEdl
blJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7CisjZWxzZQogICAgICAgICA6Omds
R2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworI2VuZGlmCiAg
ICAgCiAgICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgogICAgIGlmIChtX2F0dHJzLmFu
dGlhbGlhcykgeworI2lmIFVTRShFR0wpCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisjZWxz
ZQogICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsK
ICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVs
dGlzYW1wbGVGQk8pOwogICAgICAgICBtX2JvdW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKICAg
ICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZl
cik7CiAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKICAgICAg
ICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVu
Y2lsQnVmZmVyKTsKKyNlbmRpZgogICAgIH0KIAogICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9u
LgpAQCAtMTEyLDggKzEzNywxMCBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0
M0QoR3JhCiAgICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOwogICAgIG1fY29t
cGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKIAorI2lmICFVU0UoRUdMKQogICAg
IDo6Z2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRfU0laRSk7CiAgICAgOjpnbEVuYWJs
ZShHTF9QT0lOVF9TUFJJVEUpOworI2VuZGlmCiAgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwg
MCk7CiB9CiAKQEAgLTEyNiwxNSArMTUzLDMwIEBAIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhp
Y3NDb250ZXh0M0QoKQogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xEZWxldGVU
ZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyNp
ZiBVU0UoRUdMKQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICAgICAgOjpn
bERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CiAg
ICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKICAgICAgICAgICAg
IDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2ls
QnVmZmVyKTsKICAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNh
bXBsZUZCTyk7CisjZW5kaWYKICAgICB9IGVsc2UgeworI2lmIFVTRShFR0wpCisgICAgICAgIGlm
IChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkgeworICAgICAgICAgICAgOjpnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIpOworICAgICAgICAgICAgOjpnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0KKyNlbHNl
CiAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKICAgICAgICAg
ICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7
CisjZW5kaWYKICAgICB9CisjaWYgVVNFKEVHTCkKKyAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJz
KDEsICZtX2Zibyk7CisjZWxzZQogICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1f
ZmJvKTsKKyNlbmRpZgogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1
cnJlbnQoKQpAQCAtMTUxLDcgKzE5MywxMSBAQCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdy
YXBoaWNzQ29udGV4CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQo
KSBjb25zdAogeworI2lmIFVTRShFR0wpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQogICAgIHJl
dHVybiBmYWxzZTsKKyNlbmRpZgogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWwuY3BwCShyZXZpc2lvbiA5MjE2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29t
PgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTgsMTQgKzE5LDIwIEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzREludGVybmFsLmgiCiAKICNpZiBFTkFCTEUoV0VCR0wpCiAKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lmIFVTRShFR0wpCisjaW5jbHVkZSA8RUdML2Vn
bC5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgor
I2Vsc2UKICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgogI2luY2x1ZGUgPEdML2dseC5oPgorI2Vu
ZGlmCiAjaW5jbHVkZSA8ZGxmY24uaD4KIAogLy8gV2UgZG8gbm90IHdhbnQgdG8gY2FsbCBnbFhN
YWtlQ29udGV4dEN1cnJlbnQgdXNpbmcgZGlmZmVyZW50IERpc3BsYXkgcG9pbnRlcnMsCkBAIC05
NCw2ICsxMDEsMTYgQEAgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzREludGVybmFsPiBHcgog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0g
ZmFsc2U7CisjaWYgVVNFKEVHTCkKKyAgICBFR0xEaXNwbGF5IGVnbERpc3BsYXkgPSBlZ2xHZXRE
aXNwbGF5KHNoYXJlZERpc3BsYXkoKSk7CisgICAgaWYgKGVnbERpc3BsYXkgPT0gRUdMX05PX0RJ
U1BMQVkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsK
KyAgICAgICAgaWYgKCFlZ2xJbml0aWFsaXplKGVnbERpc3BsYXksIDAsIDApKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9Cisj
ZWxzZQogICAgIHN0YXRpYyBib29sIHN1Y2Nlc3MgPSB0cnVlOwogICAgIGlmICghaW5pdGlhbGl6
ZWQpIHsKICAgICAgICAgc3VjY2VzcyA9IGluaXRpYWxpemVPcGVuR0xTaGltcygpOwpAQCAtMTAx
LDEwICsxMTgsMTkgQEAgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzREludGVybmFsPiBHcgog
ICAgIH0KICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBudWxscHRyOworI2VuZGlm
CiAKKyNpZiBVU0UoRUdMKQorICAgIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwqIGludGVybmFs
ID0gY3JlYXRlUGJ1ZmZlckNvbnRleHQoZWdsRGlzcGxheSk7CisjZWxzZQogICAgIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWwqIGludGVybmFsID0gY3JlYXRlUGJ1ZmZlckNvbnRleHQoKTsKKyNl
bmRpZgogICAgIGlmICghaW50ZXJuYWwpCisjaWYgVVNFKEVHTCkKKyAgICAgICAgaW50ZXJuYWwg
PSBjcmVhdGVQaXhtYXBDb250ZXh0KGVnbERpc3BsYXkpOworI2Vsc2UKICAgICAgICAgaW50ZXJu
YWwgPSBjcmVhdGVQaXhtYXBDb250ZXh0KCk7CisjZW5kaWYKICAgICBpZiAoIWludGVybmFsKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTEzLDYgKzEzOSw0MCBAQCBQYXNzT3duUHRy
PEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw+IEdyCiAgICAgcmV0dXJuIGFkb3B0UHRyKGludGVy
bmFsKTsKIH0KIAorI2lmIFVTRShFR0wpCitHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjpjcmVhdGVQYnVmZmVyQ29udGV4dChFR0xEaXNwbGF5IGVn
bERpc3BsYXkpCit7CisgICAgaW50IGZiQ29uZmlnQXR0cmJzW10gPSB7CisgICAgICAgIEVHTF9C
VUZGRVJfU0laRSwgRUdMX0RPTlRfQ0FSRSwKKyAgICAgICAgRUdMX1JFRF9TSVpFLCA4LAorICAg
ICAgICBFR0xfR1JFRU5fU0laRSwgOCwKKyAgICAgICAgRUdMX0JMVUVfU0laRSwgOCwKKyAgICAg
ICAgRUdMX0FMUEhBX1NJWkUsIDgsCisgICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9P
UEVOR0xfRVMyX0JJVCwKKyAgICAgICAgRUdMX1NVUkZBQ0VfVFlQRSwgRUdMX1BCVUZGRVJfQklU
LAorICAgICAgICBFR0xfTk9ORQorICAgIH07CisgICAgRUdMQ29uZmlnIGVnbENvbmZpZ3NbMV07
CisgICAgRUdMaW50IG51bU9mQ29uZmlnOworICAgIGlmICghZWdsQ2hvb3NlQ29uZmlnKGVnbERp
c3BsYXksIGZiQ29uZmlnQXR0cmJzLCAmZWdsQ29uZmlnc1swXSwgMSwgJm51bU9mQ29uZmlnKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFudW1PZkNvbmZpZykKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICAvLyBXZSB3aWxsIGJlIHJlbmRlcmluZyB0byBhIHRleHR1cmUsIHNvIG91ciBw
YnVmZmVyIGRvZXMgbm90IG5lZWQgdG8gYmUgbGFyZ2UuCisgICAgc3RhdGljIGNvbnN0IGludCBw
YnVmZmVyQXR0cmlidXRlc1tdID0geyBFR0xfV0lEVEgsIDEsIEVHTF9IRUlHSFQsIDEsIEVHTF9O
T05FIH07CisgICAgRUdMU3VyZmFjZSBlZ2xTdXJmYWNlID0gZWdsQ3JlYXRlUGJ1ZmZlclN1cmZh
Y2UoZWdsRGlzcGxheSwgZWdsQ29uZmlnc1swXSwgcGJ1ZmZlckF0dHJpYnV0ZXMpOworICAgIGlm
IChlZ2xTdXJmYWNlID09IEVHTF9OT19TVVJGQUNFKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IEVHTGludCBlZ2xDb250ZXh0QXR0cmJzW10gPSB7IEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9O
LCAyLCBFR0xfTk9ORSB9OworICAgIEVHTENvbnRleHQgZWdsQ29udGV4dCA9IGVnbENyZWF0ZUNv
bnRleHQoZWdsRGlzcGxheSwgZWdsQ29uZmlnc1swXSwgRUdMX05PX0NPTlRFWFQsIGVnbENvbnRl
eHRBdHRyYnMpOworICAgIGlmIChlZ2xDb250ZXh0ID09IEVHTF9OT19DT05URVhUKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChl
Z2xEaXNwbGF5LCBlZ2xDb250ZXh0LCBlZ2xTdXJmYWNlKTsKK30KKyNlbHNlCiBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsKiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjcmVhdGVQYnVmZmVy
Q29udGV4dCgpCiB7CiAgICAgaW50IGZiQ29uZmlnQXR0cmlidXRlc1tdID0gewpAQCAtMTU0LDcg
KzIxNCw1MyBAQCBHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBHcmFwaGljc0NvbnRlCiAgICAg
ICAgIHJldHVybiAwOwogICAgIHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChj
b250ZXh0LCBwYnVmZmVyKTsKIH0KKyNlbmRpZgogCisjaWYgVVNFKEVHTCkKK0dyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWwqIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNyZWF0ZVBpeG1hcENv
bnRleHQoRUdMRGlzcGxheSBlZ2xEaXNwbGF5KQoreworICAgIGludCBzY3JlZW4gPSBEZWZhdWx0
U2NyZWVuKHNoYXJlZERpc3BsYXkoKSk7CisgICAgY29uc3QgaW50IGRlcHRoID0gRGVmYXVsdERl
cHRoKHNoYXJlZERpc3BsYXkoKSwgc2NyZWVuKTsKKyAgICBjb25zdCBpbnQgd2lkdGggPSAxOwor
ICAgIGNvbnN0IGludCBoZWlnaHQgPSAxOworCisgICAgc3RhdGljIGludCBlZ2xDb25maWdBdHRy
c1tdID0geworICAgICAgICBFR0xfQlVGRkVSX1NJWkUsIEVHTF9ET05UX0NBUkUsCisgICAgICAg
IEVHTF9SRURfU0laRSwgOCwKKyAgICAgICAgRUdMX0dSRUVOX1NJWkUsIDgsCisgICAgICAgIEVH
TF9CTFVFX1NJWkUsIDgsCisgICAgICAgIEVHTF9BTFBIQV9TSVpFLCA4LAorICAgICAgICBFR0xf
REVQVEhfU0laRSwgZGVwdGgsCisgICAgICAgIEVHTF9TVVJGQUNFX1RZUEUsIEVHTF9QSVhNQVBf
QklULAorICAgICAgICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCisg
ICAgICAgIEVHTF9OT05FCisgICAgfTsKKworICAgIEVHTENvbmZpZyBlZ2xDb25maWdzWzFdOwor
ICAgIEVHTGludCBudW1PZkNvbmZpZzsKKyAgICBpZiAoIWVnbENob29zZUNvbmZpZyhlZ2xEaXNw
bGF5LCBlZ2xDb25maWdBdHRycywgJmVnbENvbmZpZ3NbMF0sIDEsICZudW1PZkNvbmZpZykpCisg
ICAgICAgIHJldHVybiAwOworICAgIGlmICghbnVtT2ZDb25maWcpCisgICAgICAgIHJldHVybiAw
OworCisgICAgRUdMaW50IGVnbENvbnRleHRBdHRyYnNbXSA9IHsgRUdMX0NPTlRFWFRfQ0xJRU5U
X1ZFUlNJT04sIDIsIEVHTF9OT05FIH07CisgICAgRUdMQ29udGV4dCBjb250ZXh0ID0gZWdsQ3Jl
YXRlQ29udGV4dChlZ2xEaXNwbGF5LCBlZ2xDb25maWdzWzBdLCBFR0xfTk9fQ09OVEVYVCwgZWds
Q29udGV4dEF0dHJicyk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIFBpeG1hcCBwaXhtYXAgPSBYQ3JlYXRlUGl4bWFwKHNoYXJlZERpc3BsYXkoKSwgRGVmYXVs
dFJvb3RXaW5kb3coc2hhcmVkRGlzcGxheSgpKSwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOworICAg
IGlmICghcGl4bWFwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEVHTFN1cmZhY2UgZWdsUGl4
bWFwU3VyZmFjZSA9IGVnbENyZWF0ZVBpeG1hcFN1cmZhY2UoZWdsRGlzcGxheSwgZWdsQ29uZmln
c1swXSwgcGl4bWFwLCAwKTsKKyAgICBpZiAoIWVnbFBpeG1hcFN1cmZhY2UpIHsKKyAgICAgICAg
WEZyZWVQaXhtYXAoc2hhcmVkRGlzcGxheSgpLCBwaXhtYXApOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICByZXR1cm4gbmV3IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoZWdsRGlz
cGxheSwgY29udGV4dCwgcGl4bWFwLCBlZ2xQaXhtYXBTdXJmYWNlKTsKK30KKyNlbHNlCiBHcmFw
aGljc0NvbnRleHQzREludGVybmFsKiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjcmVhdGVQ
aXhtYXBDb250ZXh0KCkKIHsKICAgICBzdGF0aWMgaW50IHZpc3VhbEF0dHJpYnV0ZXNbXSA9IHsK
QEAgLTE5Miw3ICsyOTgsMTggQEAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCogR3JhcGhpY3ND
b250ZQogCiAgICAgcmV0dXJuIG5ldyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKGNvbnRleHQs
IHBpeG1hcCwgZ2x4UGl4bWFwKTsKIH0KKyNlbmRpZgogCisjaWYgVVNFKEVHTCkKK0dyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoRUdMRGlzcGxheSBk
aXNwbGF5LCBFR0xDb250ZXh0IGNvbnRleHQsIEVHTFN1cmZhY2UgcGJ1ZmZlclN1cmZhY2UpCisg
ICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fZGlzcGxheShkaXNwbGF5KQorICAgICwg
bV9wYnVmZmVyU3VyZmFjZShwYnVmZmVyU3VyZmFjZSkKKyAgICAsIG1fcGl4bWFwU3VyZmFjZSgw
KQorICAgICwgbV9waXhtYXAoMCkKK3sKK30KKyNlbHNlCiBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdMWENvbnRleHQgY29udGV4dCwgR0xYUGJ1
ZmZlciBwYnVmZmVyKQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX3BidWZmZXIo
cGJ1ZmZlcikKQEAgLTIwMCw3ICszMTcsMTggQEAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
R3JhcGhpY3NDb250ZQogICAgICwgbV9nbHhQaXhtYXAoMCkKIHsKIH0KKyNlbmRpZgogCisjaWYg
VVNFKEVHTCkKK0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWwoRUdMRGlzcGxheSBkaXNwbGF5LCBFR0xDb250ZXh0IGNvbnRleHQsIFBpeG1hcCBwaXht
YXAsIEVHTFN1cmZhY2UgcGl4bWFwU3VyZmFjZSkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQor
ICAgICwgbV9kaXNwbGF5KGRpc3BsYXkpCisgICAgLCBtX3BidWZmZXJTdXJmYWNlKDApCisgICAg
LCBtX3BpeG1hcFN1cmZhY2UocGl4bWFwU3VyZmFjZSkKKyAgICAsIG1fcGl4bWFwKHBpeG1hcCkK
K3sKK30KKyNlbHNlCiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQz
REludGVybmFsKEdMWENvbnRleHQgY29udGV4dCwgUGl4bWFwIHBpeG1hcCwgR0xYUGl4bWFwIGds
eFBpeG1hcCkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9wYnVmZmVyKDApCkBA
IC0yMDgsMTkgKzMzNiwzNyBAQCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0Nv
bnRlCiAgICAgLCBtX2dseFBpeG1hcChnbHhQaXhtYXApCiB7CiB9CisjZW5kaWYKIAogR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6fkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKQogewogICAg
IGlmIChtX2NvbnRleHQpIHsKICAgICAgICAgLy8gVGhpcyBtYXkgYmUgbmVjZXNzYXJ5IHRvIHBy
ZXZlbnQgY3Jhc2hlcyB3aXRoIE5WaWRpYSdzIGNsb3NlZCBzb3VyY2UgZHJpdmVycy4gT3JpZ2lu
YWxseQogICAgICAgICAvLyBmcm9tIE1vemlsbGEncyAzRCBjYW52YXMgaW1wbGVtZW50YXRpb24g
YXQ6IGh0dHA6Ly9iaXRidWNrZXQub3JnL2lsbWFyaS9jYW52YXMzZC8KKyNpZiBVU0UoRUdMKQor
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsKKworICAgICAg
ICBlZ2xNYWtlQ3VycmVudChtX2Rpc3BsYXksIDAsIDAsIDApOworICAgICAgICBlZ2xEZXN0cm95
Q29udGV4dChtX2Rpc3BsYXksIG1fY29udGV4dCk7CisjZWxzZQogICAgICAgICA6OmdsQmluZEZy
YW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgMCk7CiAKICAgICAgICAgOjpnbFhNYWtl
Q29udGV4dEN1cnJlbnQoc2hhcmVkRGlzcGxheSgpLCAwLCAwLCAwKTsKICAgICAgICAgOjpnbFhE
ZXN0cm95Q29udGV4dChzaGFyZWREaXNwbGF5KCksIG1fY29udGV4dCk7CisjZW5kaWYKICAgICAg
ICAgbV9jb250ZXh0ID0gMDsKICAgICB9CiAKKyNpZiBVU0UoRUdMKQorICAgIGlmIChtX3BidWZm
ZXJTdXJmYWNlKSB7CisgICAgICAgIGVnbERlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheSwgbV9wYnVm
ZmVyU3VyZmFjZSk7CisgICAgICAgIG1fcGJ1ZmZlclN1cmZhY2UgPSAwOworICAgIH0KKyAgICBp
ZiAobV9waXhtYXBTdXJmYWNlKSB7CisgICAgICAgIGVnbERlc3Ryb3lTdXJmYWNlKG1fZGlzcGxh
eSwgbV9waXhtYXBTdXJmYWNlKTsKKyAgICAgICAgbV9waXhtYXBTdXJmYWNlID0gMDsKKyAgICB9
CisjZWxzZQogICAgIGlmIChtX3BidWZmZXIpIHsKICAgICAgICAgOjpnbFhEZXN0cm95UGJ1ZmZl
cihzaGFyZWREaXNwbGF5KCksIG1fcGJ1ZmZlcik7CiAgICAgICAgIG1fcGJ1ZmZlciA9IDA7CkBA
IC0yMjksNiArMzc1LDcgQEAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6fkdyYXBoaWNzQ29u
dAogICAgICAgICBnbFhEZXN0cm95R0xYUGl4bWFwKHNoYXJlZERpc3BsYXkoKSwgbV9nbHhQaXht
YXApOwogICAgICAgICBtX2dseFBpeG1hcCA9IDA7CiAgICAgfQorI2VuZGlmCiAgICAgaWYgKG1f
cGl4bWFwKSB7CiAgICAgICAgIFhGcmVlUGl4bWFwKHNoYXJlZERpc3BsYXkoKSwgbV9waXhtYXAp
OwogICAgICAgICBtX3BpeG1hcCA9IDA7CkBAIC0yMzcsMTAgKzM4NCwyMiBAQCBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjp+R3JhcGhpY3NDb250CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKKyNpZiBVU0UoRUdMKQorICAgIGlmIChl
Z2xHZXRDdXJyZW50Q29udGV4dCgpID09IG1fY29udGV4dCkKKyNlbHNlCiAgICAgaWYgKDo6Z2xY
R2V0Q3VycmVudENvbnRleHQoKSA9PSBtX2NvbnRleHQpCisjZW5kaWYKICAgICAgICAgcmV0dXJu
OwogICAgIGlmICghbV9jb250ZXh0KQogICAgICAgICByZXR1cm47CisjaWYgVVNFKEVHTCkKKyAg
ICBpZiAobV9wYnVmZmVyU3VyZmFjZSkgeworICAgICAgICBlZ2xNYWtlQ3VycmVudChtX2Rpc3Bs
YXksIG1fcGJ1ZmZlclN1cmZhY2UsIG1fcGJ1ZmZlclN1cmZhY2UsIG1fY29udGV4dCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlZ2xNYWtlQ3VycmVudChtX2Rpc3BsYXksIG1fcGl4
bWFwU3VyZmFjZSwgbV9waXhtYXBTdXJmYWNlLCBtX2NvbnRleHQpOworI2Vsc2UKICAgICBpZiAo
bV9wYnVmZmVyKSB7CiAgICAgICAgIDo6Z2xYTWFrZUN1cnJlbnQoc2hhcmVkRGlzcGxheSgpLCBt
X3BidWZmZXIsIG1fY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKQEAgLTI0OCw2ICs0MDcsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om1ha2VDb250CiAKICAgICBBU1NFUlQo
bV9nbHhQaXhtYXApOwogICAgIDo6Z2xYTWFrZUN1cnJlbnQoc2hhcmVkRGlzcGxheSgpLCBtX2ds
eFBpeG1hcCwgbV9jb250ZXh0KTsKKyNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmgJKHJldmlzaW9uIDkyMTY5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsOSArMjAsMTggQEAKICNpZm5kZWYgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbF9oCiAjZGVmaW5lIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWxfaAogCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworI2lmIFVTRShFR0wpCit0eXBl
ZGVmIHZvaWQqIEVHTENvbmZpZzsKK3R5cGVkZWYgdm9pZCogRUdMQ29udGV4dDsKK3R5cGVkZWYg
dm9pZCogRUdMRGlzcGxheTsKK3R5cGVkZWYgdm9pZCogRUdMU3VyZmFjZTsKKyNlbHNlCiB0eXBl
ZGVmIHN0cnVjdCBfX0dMWGNvbnRleHRSZWMgKkdMWENvbnRleHQ7CiB0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgR0xYUGJ1ZmZlcjsKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBHTFhQaXhtYXA7CisjZW5k
aWYKIHR5cGVkZWYgdW5zaWduZWQgY2hhciBHTHVieXRlOwogdHlwZWRlZiB1bnNpZ25lZCBsb25n
IFBpeG1hcDsKIApAQCAtMzgsMTkgKzQ3LDMzIEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWwgewogCiAgICAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0
M0Q7CisjaWYgVVNFKEVHTCkKKyAgICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCog
Y3JlYXRlUGJ1ZmZlckNvbnRleHQoRUdMRGlzcGxheSk7CisgICAgc3RhdGljIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWwqIGNyZWF0ZVBpeG1hcENvbnRleHQoRUdMRGlzcGxheSk7CisgICAgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbChFR0xEaXNwbGF5LCBFR0xDb250ZXh0LCBFR0xTdXJmYWNl
KTsKKyAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKEVHTERpc3BsYXksIEVHTENvbnRleHQs
IFBpeG1hcCwgRUdMU3VyZmFjZSk7CisjZWxzZQogICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQz
REludGVybmFsKiBjcmVhdGVQYnVmZmVyQ29udGV4dCgpOwogICAgIHN0YXRpYyBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsKiBjcmVhdGVQaXhtYXBDb250ZXh0KCk7CiAgICAgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbChHTFhDb250ZXh0LCBHTFhQYnVmZmVyKTsKICAgICBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsKEdMWENvbnRleHQsIFBpeG1hcCwgR0xYUGl4bWFwKTsKKyNlbmRpZgogCiAg
ICAgc3RhdGljIHZvaWQgYWRkQWN0aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNE
Kik7CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlQWN0aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNz
Q29udGV4dDNEKik7CiAgICAgc3RhdGljIHZvaWQgY2xlYW51cEFjdGl2ZUNvbnRleHRzQXRFeGl0
KCk7CiAKKyNpZiBVU0UoRUdMKQorICAgIEVHTENvbnRleHQgbV9jb250ZXh0OworICAgIEVHTERp
c3BsYXkgbV9kaXNwbGF5OworICAgIEVHTFN1cmZhY2UgbV9wYnVmZmVyU3VyZmFjZTsKKyAgICBF
R0xTdXJmYWNlIG1fcGl4bWFwU3VyZmFjZTsKKyNlbHNlCiAgICAgR0xYQ29udGV4dCBtX2NvbnRl
eHQ7CiAgICAgR0xYUGJ1ZmZlciBtX3BidWZmZXI7Ci0gICAgUGl4bWFwIG1fcGl4bWFwOwogICAg
IEdMWFBpeG1hcCBtX2dseFBpeG1hcDsKKyNlbmRpZgorICAgIFBpeG1hcCBtX3BpeG1hcDsKIH07
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAkocmV2aXNp
b24gOTIxNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywyMiArMzMsOCBA
QAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKIAotI2luY2x1ZGUgIkFycmF5QnVm
ZmVyLmgiCi0jaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCi0jaW5jbHVkZSAiV2ViR0xPYmpl
Y3QuaCIKLSNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiRXh0
ZW5zaW9uczNET3BlbkdMLmgiCi0jaW5jbHVkZSAiRmxvYXQzMkFycmF5LmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKLSNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIklu
dDMyQXJyYXkuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlVpbnQ4
QXJyYXkuaCIKLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKICNp
bmNsdWRlIDxPcGVuR0wvZ2wuaD4KQEAgLTYwLDMzICs0NiwxMCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcygpCi17
Ci0gICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwotICAgIGlm
IChtX2F0dHJzLnN0ZW5jaWwpIHsKLSAgICAgICAgaWYgKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJH
TF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKSkgewotICAgICAgICAgICAgZXh0ZW5zaW9ucy0+
ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7Ci0gICAgICAgICAg
ICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCi0gICAgICAgICAgICBtX2F0dHJz
LmRlcHRoID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2F0dHJzLnN0ZW5j
aWwgPSBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7Ci0gICAgICAg
IGJvb2wgaXNWYWxpZFZlbmRvciA9IHRydWU7Ci0gICAgICAgIC8vIEN1cnJlbnRseSBpbiBNYWMg
d2Ugb25seSB0dXJuIG9uIGFudGlhbGlhcyBpZiB2ZW5kb3IgaXMgTlZJRElBLgotICAgICAgICBj
b25zdCBjaGFyKiB2ZW5kb3IgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0
U3RyaW5nKEdMX1ZFTkRPUikpOwotICAgICAgICBpZiAoIXN0ZDo6c3Ryc3RyKHZlbmRvciwgIk5W
SURJQSIpKQotICAgICAgICAgICAgaXNWYWxpZFZlbmRvciA9IGZhbHNlOwotICAgICAgICBpZiAo
IWlzVmFsaWRWZW5kb3IgfHwgIWV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1
ZmZlcl9tdWx0aXNhbXBsZSIpKQotICAgICAgICAgICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxz
ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgi
R0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKLSAgICB9Ci19Ci0KIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIgKnBpeGVs
cywgaW50IHBpeGVsc1NpemUpCiB7Ci0gICAgaWYgKHBpeGVsc1NpemUgPCBtX2N1cnJlbnRXaWR0
aCAqIG1fY3VycmVudEhlaWdodCAqIDQpCisgICAgaW50IHRvdGFsQnl0ZXMgPSBtX2N1cnJlbnRX
aWR0aCAqIG1fY3VycmVudEhlaWdodCAqIDQ7CisgICAgaWYgKHBpeGVsc1NpemUgPCB0b3RhbEJ5
dGVzKQogICAgICAgICByZXR1cm47CiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTEy
Miw1NSArODUsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUmVuZGVyaW5nUmVzCiAg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5k
RkJPKTsKIH0KIAotI2lmICFQTEFURk9STShRVCkKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQpCi17Ci0gICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygp
OwotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7Ci0KLSAg
ICBpbnQgcm93Qnl0ZXMgPSBtX2N1cnJlbnRXaWR0aCAqIDQ7Ci0gICAgaW50IHRvdGFsQnl0ZXMg
PSByb3dCeXRlcyAqIG1fY3VycmVudEhlaWdodDsKLQotICAgIE93bkFycmF5UHRyPHVuc2lnbmVk
IGNoYXI+IHBpeGVscyA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJbdG90YWxCeXRl
c10pOwotICAgIGlmICghcGl4ZWxzKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZWFkUmVuZGVy
aW5nUmVzdWx0cyhwaXhlbHMuZ2V0KCksIHRvdGFsQnl0ZXMpOwotCi0gICAgaWYgKCFtX2F0dHJz
LnByZW11bHRpcGxpZWRBbHBoYSkgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFs
Qnl0ZXM7IGkgKz0gNCkgewotICAgICAgICAgICAgLy8gUHJlbXVsdGlwbHkgYWxwaGEKLSAgICAg
ICAgICAgIHBpeGVsc1tpICsgMF0gPSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsgMF0gKiBwaXhl
bHNbaSArIDNdIC8gMjU1KTsKLSAgICAgICAgICAgIHBpeGVsc1tpICsgMV0gPSBzdGQ6Om1pbigy
NTUsIHBpeGVsc1tpICsgMV0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKLSAgICAgICAgICAgIHBp
eGVsc1tpICsgMl0gPSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsgMl0gKiBwaXhlbHNbaSArIDNd
IC8gMjU1KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdl
dCgpLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
Y2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgp
LT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0jZW5kaWYKLQotUGFzc1JlZlB0cjxJbWFnZURhdGE+
IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCi17
Ci0gICAgLy8gUmVhZGluZyBwcmVtdWx0aXBsaWVkIGFscGhhIHdvdWxkIGludm9sdmUgdW5wcmVt
dWx0aXBseWluZywgd2hpY2ggaXMKLSAgICAvLyBsb3NzeQotICAgIGlmIChtX2F0dHJzLnByZW11
bHRpcGxpZWRBbHBoYSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKG1fY3VycmVudFdpZHRoLCBt
X2N1cnJlbnRIZWlnaHQpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURhdGEt
PmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7Ci0gICAgaW50IHRvdGFsQnl0ZXMgPSA0ICogbV9jdXJy
ZW50V2lkdGggKiBtX2N1cnJlbnRIZWlnaHQ7Ci0KLSAgICByZWFkUmVuZGVyaW5nUmVzdWx0cyhw
aXhlbHMsIHRvdGFsQnl0ZXMpOwotCi0gICAgLy8gQ29udmVydCB0byBSR0JBCi0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCi0gICAgICAgIHN0ZDo6c3dhcChwaXhl
bHNbaV0sIHBpeGVsc1tpICsgMl0pOwotCi0gICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7
Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQogewogICAgIGlmICghcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKQpAQCAtMTg1LDcg
Kzk5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdAogICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwogCi0gICAgR0x1
aW50IGNvbG9yRm9ybWF0LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IDA7CisgICAgR0x1
aW50IGNvbG9yRm9ybWF0ID0gMDsKICAgICBpZiAobV9hdHRycy5hbHBoYSkgewogICAgICAgICBt
X2ludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0JBODsKICAgICAgICAgY29sb3JGb3JtYXQgPSBH
TF9SR0JBOwpAQCAtMTkzLDYgKzEwNyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hh
cGUoaW50IHdpZHQKICAgICAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCODsKICAg
ICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7CiAgICAgfQorCisgICAgR0x1aW50IGludGVybmFs
RGVwdGhTdGVuY2lsRm9ybWF0ID0gMDsKICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0
cnMuZGVwdGgpIHsKICAgICAgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0
ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KICAgICAgICAgLy8gU2VlIEdyYXBo
aWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMuCkBAIC0zMjUsMTEgKzI0MSw2IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHQKICAgICA6OmdsRmx1c2goKTsK
IH0KIAotSW50U2l6ZSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKSBjb25zdAotewotICAgIHJldHVybiBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJl
bnRIZWlnaHQpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgp
CiB7CiAgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQpAQCAtMzUxLDM1ICsyNjIsNiBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCiAgICAgbV9sYXllckNvbXBvc2l0
ZWQgPSB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKEdD
M0RlbnVtIHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hY3Rp
dmVUZXh0dXJlID0gdGV4dHVyZTsKLSAgICA6OmdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0p
OwotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xBdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVp
bnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJpbmRBdHRyaWJMb2NhdGlvbihwcm9n
cmFtLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVy
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCaW5kQnVmZmVyKHRhcmdl
dCwgYnVmZmVyKTsKLX0KLQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZm
ZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKIHsKICAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKQEAgLTM4OCw2ICsyNzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kRnJhbWVidWZmZXIoCiAgICAgICAgIGZibyA9IGJ1ZmZlcjsKICAgICBlbHNlCiAg
ICAgICAgIGZibyA9IChtX2F0dHJzLmFudGlhbGlhcyA/IG1fbXVsdGlzYW1wbGVGQk8gOiBtX2Zi
byk7CisgICAgCiAgICAgaWYgKGZibyAhPSBtX2JvdW5kRkJPKSB7CiAgICAgICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQodGFyZ2V0LCBmYm8pOwogICAgICAgICBtX2JvdW5kRkJPID0gZmJvOwpA
QCAtNDAwLDE1MiArMjgzLDE4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJi
dWZmZXIKICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7
CiB9CiAKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgaWYgKG1fYWN0aXZlVGV4dHVyZSAmJiB0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkK
LSAgICAgICAgbV9ib3VuZFRleHR1cmUwID0gdGV4dHVyZTsKLSAgICA6OmdsQmluZFRleHR1cmUo
dGFyZ2V0LCB0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xv
cihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNE
Y2xhbXBmIGFscGhhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCbGVu
ZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIDo6Z2xCbGVuZEVxdWF0aW9uKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVu
dW0gbW9kZUFscGhhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCbGVu
ZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKLX0KLQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3Rv
cikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmxlbmRGdW5jKHNmYWN0
b3IsIGRmYWN0b3IpOwotfSAgICAgICAKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRG
dW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNy
Y0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICA6OmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RB
bHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2Fn
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgR0MzRGVudW0gdXNhZ2Up
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0
LCBzaXplLCBkYXRhLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZl
clN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRy
IHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOwotfQotCiBH
QzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51
bSB0YXJnZXQpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgcmV0dXJuIDo6Z2xD
aGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdldCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmNsZWFyQ29sb3IoR0MzRGNsYW1wZiByLCBHQzNEY2xhbXBmIGcsIEdDM0RjbGFtcGYg
YiwgR0MzRGNsYW1wZiBhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xD
bGVhckNvbG9yKHIsIGcsIGIsIGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVh
cihHQzNEYml0ZmllbGQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsQ2xlYXIobWFzayk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgo
R0MzRGNsYW1wZiBkZXB0aCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6Omds
Q2xlYXJEZXB0aChkZXB0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyU3Rl
bmNpbChHQzNEaW50IHMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbENs
ZWFyU3RlbmNpbChzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29sb3JNYXNrKEdD
M0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Ri
b29sZWFuIGFscGhhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xDb2xv
ck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VS
VChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgaW50IEdMc2hhZGVy
VHlwZTsKLSAgICBBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlwZTsKLQotICAgIGdsR2V0U2hhZGVy
aXYoc2hhZGVyLCBTSEFERVJfVFlQRSwgJkdMc2hhZGVyVHlwZSk7Ci0gICAgCi0gICAgaWYgKEdM
c2hhZGVyVHlwZSA9PSBWRVJURVhfU0hBREVSKQotICAgICAgICBzaGFkZXJUeXBlID0gU0hBREVS
X1RZUEVfVkVSVEVYOwotICAgIGVsc2UgaWYgKEdMc2hhZGVyVHlwZSA9PSBGUkFHTUVOVF9TSEFE
RVIpCi0gICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9GUkFHTUVOVDsKLSAgICBlbHNl
Ci0gICAgICAgIHJldHVybjsgLy8gSW52YWxpZCBzaGFkZXIgdHlwZS4KLQotICAgIEhhc2hNYXA8
UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBt
X3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0KLSAgICBpZiAocmVzdWx0ID09IG1fc2hh
ZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTaGFkZXJTb3VyY2VF
bnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKLQotICAgIFN0cmluZyB0cmFuc2xhdGVkU2hh
ZGVyU291cmNlOwotICAgIFN0cmluZyBzaGFkZXJJbmZvTG9nOwotCi0gICAgYm9vbCBpc1ZhbGlk
ID0gbV9jb21waWxlci52YWxpZGF0ZVNoYWRlclNvdXJjZShlbnRyeS5zb3VyY2UudXRmOCgpLmRh
dGEoKSwgc2hhZGVyVHlwZSwgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSwgc2hhZGVySW5mb0xvZyk7
Ci0KLSAgICBlbnRyeS5sb2cgPSBzaGFkZXJJbmZvTG9nOwotICAgIGVudHJ5LmlzVmFsaWQgPSBp
c1ZhbGlkOwotCi0gICAgaWYgKCFpc1ZhbGlkKQotICAgICAgICByZXR1cm47IC8vIFNoYWRlciBk
aWRuJ3QgdmFsaWRhdGUsIGRvbid0IG1vdmUgZm9yd2FyZCB3aXRoIGNvbXBpbGluZyB0cmFuc2xh
dGVkIHNvdXJjZSAgICAKLQotICAgIGludCB0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoID0gdHJhbnNs
YXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKTsKLQotICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0
ZWRTaGFkZXJDU3RyaW5nID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS51dGY4KCk7Ci0gICAgY29u
c3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclB0ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRh
dGEoKTsKLSAgICAKLSAgICA6OmdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnRyYW5zbGF0ZWRT
aGFkZXJQdHIsICZ0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoKTsKLSAgICAKLSAgICA6OmdsQ29tcGls
ZVNoYWRlcihzaGFkZXIpOwotICAgIAotICAgIGludCBHTENvbXBpbGVTdWNjZXNzOwotICAgIAot
ICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmR0xDb21waWxlU3Vj
Y2Vzcyk7Ci0gICAgCi0gICAgLy8gQVNTRVJUIHRoYXQgQU5HTEUgZ2VuZXJhdGVkIEdMU0wgd2ls
bCBiZSBhY2NlcHRlZCBieSBPcGVuR0wKLSAgICBBU1NFUlQoR0xDb21waWxlU3VjY2VzcyA9PSBH
TF9UUlVFKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGludCBib3JkZXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CkBAIC01NzQsODYgKzMy
MywxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyCiAgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxl
RkJPKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9k
ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ3VsbEZhY2UobW9kZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVuYyhHQzNEZW51bSBmdW5jKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEZXB0aEZ1bmMoZnVuYyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEZXB0aE1hc2soZmxhZyk7Ci19
Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwg
R0MzRGNsYW1wZiB6RmFyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xE
ZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0
YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFk
ZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVy
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZShHQzNEZW51bSBjYXApCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbERpc2FibGUoY2FwKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50
IGluZGV4KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3
QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRHJhd0FycmF5cyhtb2RlLCBmaXJz
dCwgY291bnQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3RWxlbWVudHMoR0Mz
RGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9m
ZnNldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRHJhd0VsZW1lbnRz
KG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0
PGludHB0cl90PihvZmZzZXQpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJs
ZShHQzNEZW51bSBjYXApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEVu
YWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShHQzNEdWludCBpbmRleCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpmaW5pc2goKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xGaW5pc2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Zmx1c2goKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xGbHVzaCgpOwotfQotCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0z
RE9iamVjdCBidWZmZXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CkBAIC02NjYsNDAg
KzM0MSwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1CiAgICAg
OjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0
LCB0ZXh0dXJlLCBsZXZlbCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyb250RmFj
ZShHQzNEZW51bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xG
cm9udEZhY2UobW9kZSk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlw
bWFwKEdDM0RlbnVtIHRhcmdldCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6
OmdsR2VuZXJhdGVNaXBtYXBFWFQodGFyZ2V0KTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5k
ZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMaW50IG1heEF0dHJpYnV0ZVNp
emUgPSAwOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVU
RV9NQVhfTEVOR1RILCAmbWF4QXR0cmlidXRlU2l6ZSk7Ci0gICAgR0xjaGFyIG5hbWVbbWF4QXR0
cmlidXRlU2l6ZV07IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCBpbmNsdWRlcyBu
dWxsIHRlcm1pbmF0aW9uCi0gICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKLSAgICBHTGludCBz
aXplID0gMDsKLSAgICBHTGVudW0gdHlwZSA9IDA7Ci0gICAgOjpnbEdldEFjdGl2ZUF0dHJpYihw
cm9ncmFtLCBpbmRleCwgbWF4QXR0cmlidXRlU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlw
ZSwgbmFtZSk7Ci0gICAgaWYgKCFuYW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaW5mby5uYW1lID0gU3RyaW5nKG5hbWUsIG5hbWVMZW5ndGgpOwotICAgIGluZm8udHlwZSA9
IHR5cGU7Ci0gICAgaW5mby5zaXplID0gc2l6ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAK
IGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsKICAgICBpZiAo
IXByb2dyYW0pIHsKQEAgLTcxOSw0ODYgKzM2Niw3NiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRBY3RpdmVVbmlmb3JtCiAgICAgaW5mby5uYW1lID0gU3RyaW5nKG5hbWUsIG5hbWVMZW5n
dGgpOwogICAgIGluZm8udHlwZSA9IHR5cGU7CiAgICAgaW5mby5zaXplID0gc2l6ZTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFk
ZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNEc2l6
ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKQotewotICAgIGlmICghcHJvZ3Jh
bSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0QXR0
YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50LCBjb3VudCwgc2hhZGVycyk7CisgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24o
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCitHQzNEYm9vbGVh
biBHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1l
YnVmZmVyKQogewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIC0xOworICAgIGlm
ICghZnJhbWVidWZmZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAogICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwg
bmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKLXsKLSAgICByZXR1cm4g
bV9hdHRyczsKKyAgICByZXR1cm4gOjpnbElzRnJhbWVidWZmZXJFWFQoZnJhbWVidWZmZXIpOwog
fQogCi1HQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IoKQorR0MzRGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVy
YnVmZmVyKQogewotICAgIGlmIChtX3N5bnRoZXRpY0Vycm9ycy5zaXplKCkgPiAwKSB7Ci0gICAg
ICAgIExpc3RIYXNoU2V0PEdDM0RlbnVtPjo6aXRlcmF0b3IgaXRlciA9IG1fc3ludGhldGljRXJy
b3JzLmJlZ2luKCk7Ci0gICAgICAgIEdDM0RlbnVtIGVyciA9ICppdGVyOwotICAgICAgICBtX3N5
bnRoZXRpY0Vycm9ycy5yZW1vdmUoaXRlcik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQor
ICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKICAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbEdldEVycm9yKCk7CisgICAgcmV0
dXJuIDo6Z2xJc1JlbmRlcmJ1ZmZlckVYVChyZW5kZXJidWZmZXIpOwogfQogCi1TdHJpbmcgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFN0cmluZyhHQzNEZW51bSBuYW1lKQordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQq
IGRhdGEpCiB7CisgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hl
biB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKKyAgICAvLyBhbGwgcHJldmlvdXMgcmVu
ZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KICAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gU3RyaW5nKChjb25zdCBjaGFyKikgOjpn
bEdldFN0cmluZyhuYW1lKSk7CisgICAgOjpnbEZsdXNoKCk7CisgICAgaWYgKG1fYXR0cnMuYW50
aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxl
RkJPKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVS
X0VYVCwgbV9mYm8pOworICAgICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKHgsIHksIHggKyB3
aWR0aCwgeSArIGhlaWdodCwgeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCBHTF9DT0xPUl9C
VUZGRVJfQklULCBHTF9MSU5FQVIpOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICA6OmdsRmx1c2goKTsKKyAgICB9Cisg
ICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRh
KTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2Ft
cGxlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmhpbnQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCiB7CiAgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsKKyAgICBzd2l0Y2ggKGlu
dGVybmFsZm9ybWF0KSB7CisgICAgY2FzZSBERVBUSF9TVEVOQ0lMOgorICAgICAgICBpbnRlcm5h
bGZvcm1hdCA9IEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIERFUFRIX0NPTVBPTkVOVDE2OgorICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX0RFUFRI
X0NPTVBPTkVOVDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSR0JBNDoKKyAgICBjYXNlIFJH
QjVfQTE6CisgICAgICAgIGludGVybmFsZm9ybWF0ID0gR0xfUkdCQTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBSR0I1NjU6CisgICAgICAgIGludGVybmFsZm9ybWF0ID0gR0xfUkdCOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQodGFyZ2V0
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKLUdDM0Rib29sZWFuIEdyYXBo
aWNzQ29udGV4dDNEOjppc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQq
IHZhbHVlKQogewotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0K
ICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbElzQnVmZmVyKGJ1ZmZl
cik7CisgICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQorICAg
ICAgICBhdHRhY2htZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hN
RU5ULCBlaXRoZXIgd29ya3MuCisgICAgOjpnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcml2RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZhbHVlKTsKIH0KIAotR0MzRGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzRW5hYmxlZChHQzNEZW51bSBjYXApCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xJc0VuYWJsZWQoY2FwKTsKLX0K
LQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm0z
RE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAoIWZyYW1lYnVmZmVyKQotICAgICAgICBy
ZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4g
OjpnbElzRnJhbWVidWZmZXJFWFQoZnJhbWVidWZmZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFw
aGljc0NvbnRleHQzRDo6aXNQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAg
ICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsSXNQcm9ncmFtKHByb2dyYW0pOwotfQotCi1H
QzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9i
amVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgaWYgKCFyZW5kZXJidWZmZXIpCi0gICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6
OmdsSXNSZW5kZXJidWZmZXJFWFQocmVuZGVyYnVmZmVyKTsKLX0KLQotR0MzRGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAg
IGlmICghc2hhZGVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbElzU2hhZGVyKHNoYWRlcik7Ci19Ci0KLUdDM0Ri
b29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0
dXJlKQotewotICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xJc1RleHR1cmUodGV4dHVy
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lk
dGgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbExpbmVXaWR0aCh3aWR0
aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgOjpnbExpbmtQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsUGl4ZWxTdG9yZWkocG5hbWUs
IHBhcmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cG9seWdvbk9mZnNldChHQzNE
ZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgOjpnbFBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCB2b2lkKiBkYXRhKQotewotICAgIC8vIEZJWE1FOiByZW1vdmUgdGhlIHR3byBnbEZsdXNoIGNh
bGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGkuZS4sCi0gICAgLy8gYWxsIHByZXZp
b3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhlbHMu
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEZsdXNoKCk7Ci0gICAgaWYgKG1f
YXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewotICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211
bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZS
QU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKHgs
IHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCBH
TF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgICAgICA6OmdsRmx1c2goKTsK
LSAgICB9Ci0gICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCBkYXRhKTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBt
X211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgbm90
IGltcGxlbWVudGVkIG9uIGRlc2t0b3AgT3BlbkdMLiBXZSBuZWVkIHRvIGhhdmUgaWZkZWZzIGZv
ciB0aGUgZGlmZmVyZW50IEdMIHZhcmlhbnRzCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgLy86OmdsUmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKLSAgICBj
YXNlIERFUFRIX1NURU5DSUw6Ci0gICAgICAgIGludGVybmFsZm9ybWF0ID0gR0xfREVQVEgyNF9T
VEVOQ0lMOF9FWFQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgREVQVEhfQ09NUE9ORU5UMTY6
Ci0gICAgICAgIGludGVybmFsZm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFJHQkE0OgotICAgIGNhc2UgUkdCNV9BMToKLSAgICAgICAgaW50ZXJu
YWxmb3JtYXQgPSBHTF9SR0JBOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJHQjU2NToKLSAg
ICAgICAgaW50ZXJuYWxmb3JtYXQgPSBHTF9SR0I7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVCh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2FtcGxlQ292ZXJhZ2Uo
R0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xTYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIDo6Z2xTY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIGNv
bnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0KLSAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeTsKLQotICAgIGVu
dHJ5LnNvdXJjZSA9IHN0cmluZzsKLQotICAgIG1fc2hhZGVyU291cmNlTWFwLnNldChzaGFkZXIs
IGVudHJ5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmMoR0MzRGVu
dW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwg
R0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywg
cmVmLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2soR0Mz
RHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsU3RlbmNp
bE1hc2sobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2Vw
YXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVt
IHpmYWlsLCBHQzNEZW51bSB6cGFzcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICA6OmdsU3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWws
IEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICA6OmdsU3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNz
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgdmFsdWUp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRGZsb2F0IHYwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlm
b3JtMWYobG9jYXRpb24sIHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9y
bTFmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTFmdihsb2NhdGlv
biwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogbGVu
Z3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIDo6Z2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQg
djAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIDo6Z2xVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9h
dCogYXJyYXksIEdDM0RzaXplaSBzaXplKQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMg
dG8gYmUgYSBtdWx0aXBsZSBvZiAzCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bFVuaWZvcm0zZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTRmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZs
b2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0
aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICA6OmdsVW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTFpKGxvY2F0aW9u
LCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaXYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGludCogYXJyYXksIEdDM0RzaXplaSBzaXplKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtMWl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaShHQzNEaW50IGxvY2F0aW9u
LCBHQzNEaW50IHYwLCBHQzNEaW50IHYxKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIDo6Z2xVbmlmb3JtMmkobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogYXJyYXksIEdD
M0RzaXplaSBzaXplKQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0
aXBsZSBvZiAyCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0yaXYo
bG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEsIEdDM0RpbnQg
djIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0zaShsb2Nh
dGlvbiwgdjAsIHYxLCB2Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0z
aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogYXJyYXksIEdDM0RzaXplaSBzaXplKQotewot
ICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUsIGFy
cmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEsIEdDM0RpbnQgdjIsIEdDM0RpbnQgdjMpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm00aShsb2NhdGlvbiwg
djAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAg
ICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCBhcnJh
eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgyZnYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNE
c2l6ZWkgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlw
bGUgb2YgNAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtTWF0cml4
MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQotewotICAgIC8v
IEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA5Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRy
YW5zcG9zZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0
cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0
KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0
byBiZSBhIG11bHRpcGxlIG9mIDE2Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVXNlUHJvZ3JhbShw
cm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRl
eCwgR0MzRGZsb2F0IHYwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xW
ZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2
ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJy
YXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZihHQzNEdWlu
dCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgOjpnbFZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZl
cnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQg
djEsIEdDM0RmbG9hdCB2MikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
VmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogYXJyYXkp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZlcnRleEF0dHJpYjNmdihp
bmRleCwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0
ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2
MiwgR0MzRGZsb2F0IHYzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xW
ZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogYXJy
YXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZlcnRleEF0dHJpYjRm
dihpbmRleCwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRy
aWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdD
M0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWJQb2lu
dGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nh
c3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICA6OmdsVmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEJvb2xlYW52KEdDM0RlbnVtIHBuYW1lLCBHQzNEYm9vbGVhbiogdmFs
dWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldEJvb2xlYW52KHBu
YW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFt
ZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRCdWZmZXJQYXJhbWV0ZXJp
dih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEZsb2F0dihHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0RmxvYXR2KHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEdD
M0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChhdHRh
Y2htZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkKLSAgICAgICAgYXR0YWNobWVudCA9
IERFUFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5DSUxfQVRUQUNITUVOVCwgZWl0aGVyIHdvcmtz
LgotICAgIDo6Z2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdkVYVCh0YXJnZXQs
IGF0dGFjaG1lbnQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkK
IHsKICAgICAvLyBOZWVkIHRvIGVtdWxhdGUgTUFYX0ZSQUdNRU5UL1ZFUlRFWF9VTklGT1JNX1ZF
Q1RPUlMgYW5kIE1BWF9WQVJZSU5HX1ZFQ1RPUlMKICAgICAvLyBiZWNhdXNlIGRlc2t0b3AgR0wn
cyBjb3JyZXNwb25kaW5nIHF1ZXJpZXMgcmV0dXJuIHRoZSBudW1iZXIgb2YgY29tcG9uZW50cwpA
QCAtMTIyMywxODcgKzQ2MCwyMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2Vy
dihHQzNECiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9n
cmFtLCBwbmFtZSwgdmFsdWUpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFBy
b2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBBU1NFUlQocHJv
Z3JhbSk7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTGludCBsZW5ndGg7Ci0g
ICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgp
OwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gIiI7Ci0KLSAgICBHTHNpemVpIHNp
emU7Ci0gICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZhc3RNYWxsb2MobGVuZ3RoKTsKLQot
ICAgIDo6Z2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsZW5ndGgsICZzaXplLCBpbmZvKTsK
LSAgICBTdHJpbmcgcyhpbmZvKTsKLSAgICBmYXN0RnJlZShpbmZvKTsKLSAgICByZXR1cm4gczsK
LX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCiB7CiAgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2
RVhUKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50KiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLQotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotCi0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRy
eT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAg
ICAKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgICAgIGNhc2UgREVMRVRFX1NUQVRVUzoKLSAg
ICAgICAgY2FzZSBTSEFERVJfVFlQRToKLSAgICAgICAgICAgIC8vIExldCBPcGVuR0wgaGFuZGxl
IHRoZXNlLgotICAgICAgICAKLSAgICAgICAgICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIHBu
YW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgICAgIGNhc2Ug
Q09NUElMRV9TVEFUVVM6Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNl
TWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgKCp2YWx1ZSkgPSBzdGF0aWNfY2FzdDxpbnQ+
KGZhbHNlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICAgICAgKCp2YWx1ZSkgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+c2Vjb25k
LmlzVmFsaWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBjYXNlIElO
Rk9fTE9HX0xFTkdUSDoKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VN
YXAuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICAoKnZhbHVlKSA9IDA7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgICAgICgqdmFsdWUp
ID0gZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpLmxlbmd0aCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIAotICAgICAgICBjYXNlIFNIQURFUl9TT1VSQ0VfTEVOR1RIOgotICAgICAgICAg
ICAgKCp2YWx1ZSkgPSBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS5sZW5ndGgoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKElOVkFMSURfRU5VTSk7Ci0gICAgfQotfQotCi1TdHJpbmcgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0g
ICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIEhh
c2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1
bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0KLSAgICBpZiAocmVzdWx0ID09
IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICAgcmV0dXJuICIiOwotCi0gICAgIFNo
YWRlclNvdXJjZUVudHJ5IGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7Ci0KLSAgICAgaWYgKGVudHJ5
LmlzVmFsaWQpIHsKLSAgICAgICAgIEdMaW50IGxlbmd0aDsKLSAgICAgICAgIDo6Z2xHZXRTaGFk
ZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7Ci0gICAgICAgICBpZiAo
IWxlbmd0aCkKLSAgICAgICAgICAgICByZXR1cm4gIiI7Ci0KLSAgICAgICAgIEdMc2l6ZWkgc2l6
ZTsKLSAgICAgICAgIEdMY2hhciogaW5mbyA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKGxlbmd0aCk7
Ci0KLSAgICAgICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwg
aW5mbyk7Ci0KLSAgICAgICAgIFN0cmluZyBzKGluZm8pOwotICAgICAgICAgZmFzdEZyZWUoaW5m
byk7Ci0gICAgICAgICByZXR1cm4gczsKLSAgICAgfSBlbHNlCi0gICAgICAgICByZXR1cm4gZW50
cnkubG9nOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZShQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLQotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFk
ZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQo
c2hhZGVyKTsKLQotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0g
ICAgICAgIHJldHVybiAiIjsKLQotICAgIHJldHVybiByZXN1bHQtPnNlY29uZC5zb3VyY2U7Ci19
Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwg
dmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBw
bmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZh
bHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRVbmlmb3JtZnYo
cHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwg
R0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdl
dFVuaWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwotfQotCi1HQzNEaW50IEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJv
Z3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxv
YXQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRWZXJ0
ZXhBdHRyaWJmdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VmVydGV4QXR0cmliaXYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBH
QzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0
VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLUdDM0RzaXplaXB0ciBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBH
QzNEZW51bSBwbmFtZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIEdMdm9p
ZCogcG9pbnRlciA9IDA7Ci0gICAgOjpnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBw
bmFtZSwgJnBvaW50ZXIpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKTsKLX0KLQotYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQq
IHBpeGVscykKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCiB7CiAgICAgaWYgKHdpZHRoICYmIGhl
aWdodCAmJiAhcGl4ZWxzKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFM
VUUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIAogICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIEdDM0RlbnVtIG9wZW5HTEludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxm
b3JtYXQ7CisgICAgR0MzRGVudW0gb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBpbnRlcm5hbEZvcm1h
dDsKICAgICBpZiAodHlwZSA9PSBHTF9GTE9BVCkgewogICAgICAgICBpZiAoZm9ybWF0ID09IEdM
X1JHQkEpCiAgICAgICAgICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdMX1JHQkEzMkZfQVJC
OwpAQCAtMTQxNSwxMjMgKzQ4NiwzNCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFn
ZTJEKEdDM0RlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmYsIEdDM0RpbnQgeW9mZiwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQgdG8gZGVh
bCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1ZmZlcnMg
dGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZQotICAgIDo6Z2xUZXhTdWJJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
cGl4ZWxzKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRl
QnVmZmVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgbyA9IDA7
Ci0gICAgZ2xHZW5CdWZmZXJzKDEsICZvKTsKLSAgICByZXR1cm4gbzsKLX0KLQogUGxhdGZvcm0z
RE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIoKQogewogICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlbkZyYW1lYnVm
ZmVyc0VYVCgxLCAmbyk7CisgICAgOjpnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbyk7CiAgICAg
cmV0dXJuIG87CiB9CiAKLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZVByb2dyYW0oKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbENy
ZWF0ZVByb2dyYW0oKTsKLX0KLQogUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlUmVuZGVyYnVmZmVyKCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBH
THVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZvKTsKKyAgICA6Omds
R2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbyk7CiAgICAgcmV0dXJuIG87CiB9CiAKLVBsYXRmb3Jt
M0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbENyZWF0ZVNoYWRlcigo
dHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVY
X1NIQURFUik7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZVRleHR1cmUoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBvID0g
MDsKLSAgICBnbEdlblRleHR1cmVzKDEsICZvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlQnVmZmVycygxLCAmYnVm
ZmVyKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxh
dGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmZnJhbWVidWZmZXIpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZVByb2dyYW0ocHJv
Z3JhbSk7CisgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmZnJhbWVidWZmZXIpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm0z
RE9iamVjdCByZW5kZXJidWZmZXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZyZW5kZXJidWZmZXIpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkZWxldGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xEZWxldGVTaGFkZXIoc2hhZGVyKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybTNET2Jq
ZWN0IHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xEZWxldGVU
ZXh0dXJlcygxLCAmdGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRo
ZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yKQotewotICAgIG1fc3ludGhldGljRXJyb3JzLmFk
ZChlcnJvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtDb250ZXh0Q2hhbmdl
ZCgpCi17Ci0gICAgbV9sYXllckNvbXBvc2l0ZWQgPSBmYWxzZTsKKyAgICA6OmdsRGVsZXRlUmVu
ZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6bWFya0xheWVyQ29tcG9zaXRlZCgpCi17Ci0gICAgbV9sYXllckNvbXBvc2l0ZWQgPSB0
cnVlOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoKSBjb25z
dAotewotICAgIHJldHVybiBtX2xheWVyQ29tcG9zaXRlZDsKLX0KLQotI2lmICFQTEFURk9STShR
VCkKLUV4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQotewot
ICAgIGlmICghbV9leHRlbnNpb25zKQotICAgICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0cihu
ZXcgRXh0ZW5zaW9uczNET3BlbkdMKHRoaXMpKTsKLSAgICByZXR1cm4gbV9leHRlbnNpb25zLmdl
dCgpOwotfQotI2VuZGlmCi0KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEJhc2UuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMQmFzZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA3OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPFF0
R2xvYmFsPgorI2VuZGlmCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJBcnJh
eUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5j
bHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCisjaW5jbHVkZSAiRmxvYXQzMkFycmF5LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2lu
Y2x1ZGUgIkludDMyQXJyYXkuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1
ZGUgIlVpbnQ4QXJyYXkuaCIKKyNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgorI2luY2x1ZGUgPGNz
dHJpbmc+CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgor
I2VsaWYgUExBVEZPUk0oR1RLKQorI2lmIFVTRShFR0wpCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+
CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisjZWxzZQorI2luY2x1ZGUgIk9wZW5HTFNoaW1z
LmgiCisjZW5kaWYKKyNlbGlmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPGNhaXJvL09wZW5HTFNo
aW1zLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQoreworICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5z
aW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKKyAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7CisgICAg
ICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2ls
IikpIHsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9wYWNr
ZWRfZGVwdGhfc3RlbmNpbCIpOworICAgICAgICAgICAgLy8gRm9yY2UgZGVwdGggaWYgc3RlbmNp
bCBpcyB0cnVlLgorICAgICAgICAgICAgbV9hdHRycy5kZXB0aCA9IHRydWU7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7CisgICAgfQorICAgIGlm
IChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICBib29sIGlzVmFsaWRWZW5kb3IgPSB0cnVl
OworICAgICAgICAvLyBDdXJyZW50bHkgaW4gTWFjIHdlIG9ubHkgdHVybiBvbiBhbnRpYWxpYXMg
aWYgdmVuZG9yIGlzIE5WSURJQS4KKyAgICAgICAgY29uc3QgY2hhciogdmVuZG9yID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9WRU5ET1IpKTsKKyAgICAg
ICAgaWYgKCFzdGQ6OnN0cnN0cih2ZW5kb3IsICJOVklESUEiKSkKKyAgICAgICAgICAgIGlzVmFs
aWRWZW5kb3IgPSBmYWxzZTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkVmVuZG9yIHx8ICFleHRlbnNp
b25zLT5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKSkKKyAgICAg
ICAgICAgIG1fYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRp
c2FtcGxlIik7CisgICAgfQorfQorCisjaWYgIVBMQVRGT1JNKFFUKQordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCogY29udGV4dCkKK3sKKyAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4
dC0+Y2FudmFzKCk7CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZm
ZXIoKTsKKworICAgIGludCByb3dCeXRlcyA9IG1fY3VycmVudFdpZHRoICogNDsKKyAgICBpbnQg
dG90YWxCeXRlcyA9IHJvd0J5dGVzICogbV9jdXJyZW50SGVpZ2h0OworCisgICAgT3duQXJyYXlQ
dHI8dW5zaWduZWQgY2hhcj4gcGl4ZWxzID0gYWRvcHRBcnJheVB0cihuZXcgdW5zaWduZWQgY2hh
clt0b3RhbEJ5dGVzXSk7CisgICAgaWYgKCFwaXhlbHMpCisgICAgICAgIHJldHVybjsKKworICAg
IHJlYWRSZW5kZXJpbmdSZXN1bHRzKHBpeGVscy5nZXQoKSwgdG90YWxCeXRlcyk7CisKKyAgICBp
ZiAoIW1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgdG90YWxCeXRlczsgaSArPSA0KSB7CisgICAgICAgICAgICAvLyBQcmVtdWx0aXBseSBh
bHBoYQorICAgICAgICAgICAgcGl4ZWxzW2kgKyAwXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kg
KyAwXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICAgICAgcGl4ZWxzW2kgKyAxXSA9
IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAxXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOworICAg
ICAgICAgICAgcGl4ZWxzW2kgKyAyXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAyXSAqIHBp
eGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICB9CisgICAgfQorCisgICAgcGFpbnRUb0NhbnZh
cyhwaXhlbHMuZ2V0KCksIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsCisgICAgICAg
ICAgICAgICAgICBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIGltYWdlQnVmZmVy
LT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKK30KKyNlbmRpZgorCitQYXNzUmVmUHRy
PEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1h
Z2VEYXRhKCkKK3sKKyAgICAvLyBSZWFkaW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52
b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3aGljaCBpcworICAgIC8vIGxvc3N5CisgICAgaWYgKG1f
YXR0cnMucHJlbXVsdGlwbGllZEFscGhhKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0
cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUobV9jdXJy
ZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCkpOworICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9
IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsKKyAgICBpbnQgdG90YWxCeXRlcyA9
IDQgKiBtX2N1cnJlbnRXaWR0aCAqIG1fY3VycmVudEhlaWdodDsKKworICAgIHJlYWRSZW5kZXJp
bmdSZXN1bHRzKHBpeGVscywgdG90YWxCeXRlcyk7CisKKyAgICAvLyBDb252ZXJ0IHRvIFJHQkEK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkKKyAgICAgICAgc3Rk
Ojpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7CisKKyAgICByZXR1cm4gaW1hZ2VEYXRh
LnJlbGVhc2UoKTsKK30KKworSW50U2l6ZSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxG
cmFtZWJ1ZmZlclNpemUoKSBjb25zdAoreworICAgIHJldHVybiBJbnRTaXplKG1fY3VycmVudFdp
ZHRoLCBtX2N1cnJlbnRIZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphY3Rp
dmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgbV9hY3RpdmVUZXh0dXJlID0gdGV4dHVyZTsKKyAgICA6OmdsQWN0aXZlVGV4dHVyZSh0
ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNoU2hhZGVyKFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNT
RVJUKHByb2dyYW0pOworICAgIEFTU0VSVChzaGFkZXIpOworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xBdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQo
cHJvZ3JhbSk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJpbmRBdHRyaWJM
b2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RP
YmplY3QgYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCaW5k
QnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Ymlu
ZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fYWN0aXZlVGV4dHVyZSAmJiB0YXJn
ZXQgPT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgbV9ib3VuZFRleHR1cmUwID0gdGV4dHVyZTsK
KyAgICA6OmdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwg
R0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCbGVuZEVxdWF0aW9uKG1vZGUp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0Mz
RGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhh
KTsKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMoR0MzRGVudW0gc2Zh
Y3RvciwgR0MzRGVudW0gZGZhY3RvcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICA6OmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOworfSAgICAgICAKKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51
bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBk
c3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgR0MzRGVudW0g
dXNhZ2UpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJ1ZmZlckRhdGEo
dGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1
ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCog
ZGF0YSwgR0MzRGVudW0gdXNhZ2UpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRy
IG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQs
IHNpemUsIGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKEdD
M0RjbGFtcGYgciwgR0MzRGNsYW1wZiBnLCBHQzNEY2xhbXBmIGIsIEdDM0RjbGFtcGYgYSkKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ2xlYXJDb2xvcihyLCBnLCBiLCBh
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2sp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbENsZWFyKG1hc2spOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhclN0ZW5jaWwoR0MzRGludCBzKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDbGVhclN0ZW5jaWwocyk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29s
ZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcihQbGF0
Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKworICAgIGludCBHTHNoYWRlclR5cGU7CisgICAgQU5HTEVTaGFkZXJU
eXBlIHNoYWRlclR5cGU7CisKKyAgICBnbEdldFNoYWRlcml2KHNoYWRlciwgU0hBREVSX1RZUEUs
ICZHTHNoYWRlclR5cGUpOworICAgIAorICAgIGlmIChHTHNoYWRlclR5cGUgPT0gVkVSVEVYX1NI
QURFUikKKyAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX1ZFUlRFWDsKKyAgICBlbHNl
IGlmIChHTHNoYWRlclR5cGUgPT0gRlJBR01FTlRfU0hBREVSKQorICAgICAgICBzaGFkZXJUeXBl
ID0gU0hBREVSX1RZUEVfRlJBR01FTlQ7CisgICAgZWxzZQorICAgICAgICByZXR1cm47IC8vIElu
dmFsaWQgc2hhZGVyIHR5cGUuCisKKyAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRl
clNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChz
aGFkZXIpOworCisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5z
ZWNvbmQ7CisKKyAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKKyAgICBTdHJpbmcg
c2hhZGVySW5mb0xvZzsKKworICAgIGJvb2wgaXNWYWxpZCA9IG1fY29tcGlsZXIudmFsaWRhdGVT
aGFkZXJTb3VyY2UoZW50cnkuc291cmNlLnV0ZjgoKS5kYXRhKCksIHNoYWRlclR5cGUsIHRyYW5z
bGF0ZWRTaGFkZXJTb3VyY2UsIHNoYWRlckluZm9Mb2cpOworCisgICAgZW50cnkubG9nID0gc2hh
ZGVySW5mb0xvZzsKKyAgICBlbnRyeS5pc1ZhbGlkID0gaXNWYWxpZDsKKworICAgIGlmICghaXNW
YWxpZCkKKyAgICAgICAgcmV0dXJuOyAvLyBTaGFkZXIgZGlkbid0IHZhbGlkYXRlLCBkb24ndCBt
b3ZlIGZvcndhcmQgd2l0aCBjb21waWxpbmcgdHJhbnNsYXRlZCBzb3VyY2UgICAgCisKKyAgICBp
bnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UubGVuZ3Ro
KCk7CisKKyAgICBjb25zdCBDU3RyaW5nJiB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZyA9IHRyYW5z
bGF0ZWRTaGFkZXJTb3VyY2UudXRmOCgpOworICAgIGNvbnN0IGNoYXIqIHRyYW5zbGF0ZWRTaGFk
ZXJQdHIgPSB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZy5kYXRhKCk7CisgICAgCisgICAgOjpnbFNo
YWRlclNvdXJjZShzaGFkZXIsIDEsICZ0cmFuc2xhdGVkU2hhZGVyUHRyLCAmdHJhbnNsYXRlZFNo
YWRlckxlbmd0aCk7CisgICAgCisgICAgOjpnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKKyAgICAK
KyAgICBpbnQgR0xDb21waWxlU3VjY2VzczsKKyAgICAKKyAgICA6OmdsR2V0U2hhZGVyaXYoc2hh
ZGVyLCBDT01QSUxFX1NUQVRVUywgJkdMQ29tcGlsZVN1Y2Nlc3MpOworICAgIAorICAgIC8vIEFT
U0VSVCB0aGF0IEFOR0xFIGdlbmVyYXRlZCBHTFNMIHdpbGwgYmUgYWNjZXB0ZWQgYnkgT3BlbkdM
CisgICAgQVNTRVJUKEdMQ29tcGlsZVN1Y2Nlc3MgPT0gR0xfVFJVRSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbEN1bGxGYWNlKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsRGVwdGhGdW5jKGZ1bmMpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpkZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxhZykKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsRGVwdGhNYXNrKGZsYWcpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNE
T2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgQVNTRVJUKHNoYWRl
cik7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERldGFjaFNoYWRlcihwcm9n
cmFtLCBzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlKEdDM0Rl
bnVtIGNhcCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRGlzYWJsZShj
YXApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkoR0MzRHVpbnQgaW5kZXgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVp
IGNvdW50KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEcmF3QXJyYXlz
KG1vZGUsIGZpcnN0LCBjb3VudCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdF
bGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdD
M0RpbnRwdHIgb2Zmc2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xE
cmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4o
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZW5hYmxlKEdDM0RlbnVtIGNhcCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICA6OmdsRW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZpbmlzaCgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgOjpnbEZpbmlzaCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmbHVz
aCgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEZsdXNoKCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyb250RmFjZShHQzNEZW51bSBtb2RlKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xGcm9udEZhY2UobW9kZSk7Cit9CisKK2Jv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJv
Z3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBH
TGludCBtYXhBdHRyaWJ1dGVTaXplID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0s
IEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heEF0dHJpYnV0ZVNpemUpOworICAg
IEdMY2hhciBuYW1lW21heEF0dHJpYnV0ZVNpemVdOyAvLyBHTF9BQ1RJVkVfQVRUUklCVVRFX01B
WF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbgorICAgIEdMc2l6ZWkgbmFtZUxlbmd0
aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9IDA7CisgICAgR0xlbnVtIHR5cGUgPSAwOworICAgIDo6
Z2xHZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIG1heEF0dHJpYnV0ZVNpemUsICZuYW1l
TGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUpOworICAgIGlmICghbmFtZUxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGluZm8ubmFtZSA9IFN0cmluZyhuYW1lLCBuYW1lTGVuZ3Ro
KTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8uc2l6ZSA9IHNpemU7CisgICAgcmV0
dXJuIHRydWU7Cit9CisgICAgCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRhY2hlZFNo
YWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQsIEdDM0Rz
aXplaSogY291bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNoYWRlcnMpCit7CisgICAgaWYgKCFwcm9n
cmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRB
dHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKK30KKwor
aW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAg
ICAgIHJldHVybiAtMTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6
OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwor
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRl
eHRBdHRyaWJ1dGVzKCkKK3sKKyAgICByZXR1cm4gbV9hdHRyczsKK30KKworR0MzRGVudW0gR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEVycm9yKCkKK3sKKyAgICBpZiAobV9zeW50aGV0aWNFcnJvcnMu
c2l6ZSgpID4gMCkgeworICAgICAgICBMaXN0SGFzaFNldDxHQzNEZW51bT46Oml0ZXJhdG9yIGl0
ZXIgPSBtX3N5bnRoZXRpY0Vycm9ycy5iZWdpbigpOworICAgICAgICBHQzNEZW51bSBlcnIgPSAq
aXRlcjsKKyAgICAgICAgbV9zeW50aGV0aWNFcnJvcnMucmVtb3ZlKGl0ZXIpOworICAgICAgICBy
ZXR1cm4gZXJyOworICAgIH0KKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVy
biA6OmdsR2V0RXJyb3IoKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTdHJp
bmcoR0MzRGVudW0gbmFtZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1
cm4gU3RyaW5nKChjb25zdCBjaGFyKikgOjpnbEdldFN0cmluZyhuYW1lKSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xIaW50KHRhcmdldCwgbW9kZSk7
Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcihQbGF0Zm9ybTNE
T2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc0J1ZmZl
cihidWZmZXIpOworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVk
KEdDM0RlbnVtIGNhcCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4g
OjpnbElzRW5hYmxlZChjYXApOworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6
aXNQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBpZiAoIXByb2dyYW0p
CisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIHJldHVybiA6OmdsSXNQcm9ncmFtKHByb2dyYW0pOworfQorCitHQzNEYm9vbGVhbiBHcmFw
aGljc0NvbnRleHQzRDo6aXNTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAg
aWYgKCFzaGFkZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNTaGFkZXIoc2hhZGVyKTsKK30KKworR0MzRGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1
cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzVGV4dHVyZSh0ZXh0dXJl
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0
aCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsTGluZVdpZHRoKHdpZHRo
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGlua1Byb2dyYW0oUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsTGlua1Byb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xQaXhlbFN0b3JlaShwbmFtZSwg
cGFyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0KEdDM0Rm
bG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsUG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAgICAvLyBGSVhNRTog
VGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgb24gZGVza3RvcCBPcGVuR0wuIFdlIG5lZWQgdG8gaGF2
ZSBpZmRlZnMgZm9yIHRoZSBkaWZmZXJlbnQgR0wgdmFyaWFudHMKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICAvLyA6OmdsUmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Ri
b29sZWFuIGludmVydCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU2Ft
cGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU2Npc3Nvcih4
LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVy
U291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sK
KyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAg
U2hhZGVyU291cmNlRW50cnkgZW50cnk7CisKKyAgICBlbnRyeS5zb3VyY2UgPSBzdHJpbmc7CisK
KyAgICBtX3NoYWRlclNvdXJjZU1hcC5zZXQoc2hhZGVyLCBlbnRyeSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBH
QzNEdWludCBtYXNrKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTdGVu
Y2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
dGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQg
cmVmLCBHQzNEdWludCBtYXNrKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFN0ZW5jaWxNYXNrKG1hc2spOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdD
M0R1aW50IG1hc2spCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFN0ZW5j
aWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3Mp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFN0ZW5jaWxPcChmYWlsLCB6
ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3BTZXBh
cmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVu
dW0genBhc3MpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFN0ZW5jaWxP
cFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwg
R0MzRGZsb2F0IHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xU
ZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBH
QzNEaW50IHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xUZXhQ
YXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTFmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZnYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbFVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rm
bG9hdCB2MCwgR0MzRGZsb2F0IHYxKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xVbmlmb3JtMmYobG9jYXRpb24sIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0Mz
RHNpemVpIHNpemUpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRp
cGxlIG9mIDIKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTJmdihs
b2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtM2YoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0Rm
bG9hdCB2MikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTNm
KGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6
ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMwor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCBz
aXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBH
QzNEZmxvYXQgdjMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZv
cm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogYXJyYXksIEdDM0Rz
aXplaSBzaXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBs
ZSBvZiA0CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm00ZnYobG9j
YXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9y
bTFpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjApCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbFVuaWZvcm0xaShsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFycmF5
LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
VW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtMmkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2
MSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTJpKGxvY2F0
aW9uLCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMml2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAv
LyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgorICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaShHQzNEaW50IGxvY2F0aW9u
LCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBHQzNEaW50IHYyKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5l
ZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNE
aW50IHYxLCBHQzNEaW50IHYyLCBHQzNEaW50IHYzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
aW50KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVk
cyB0byBiZSBhIG11bHRpcGxlIG9mIDQKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6
OmdsVW5pZm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFu
IHRyYW5zcG9zZSwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCit7CisgICAgLy8g
RklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJh
bnNwb3NlLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRy
aXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQq
IGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRv
IGJlIGEgbXVsdGlwbGUgb2YgOQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xV
bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXpl
KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNgor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0
aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbFVzZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0p
Cit7CisgICAgQVNTRVJUKHByb2dyYW0pOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbFZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliMWYoaW5kZXgsIHYw
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwg
R0MzRGZsb2F0IHYxKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0
ZXhBdHRyaWIyZihpbmRleCwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5KQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFy
cmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2YoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjNmKGluZGV4LCB2
MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2
KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5KTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0Rm
bG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliNGYoaW5kZXgsIHYw
LCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmli
NGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRl
eCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBH
QzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50cHRyIG9mZnNldCkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwg
bm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0
PGludHB0cl90PihvZmZzZXQpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdw
b3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZpZXdwb3J0KHgsIHks
IHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFu
dihHQzNEZW51bSBwbmFtZSwgR0MzRGJvb2xlYW4qIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xHZXRCb29sZWFudihwbmFtZSwgdmFsdWUpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsR2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUs
IEdDM0RmbG9hdCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bEdldEZsb2F0dihwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRQcm9ncmFtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldFBy
b2dyYW1pdihwcm9ncmFtLCBwbmFtZSwgdmFsdWUpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAg
ICBBU1NFUlQocHJvZ3JhbSk7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTGlu
dCBsZW5ndGg7CisgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9JTkZPX0xPR19MRU5H
VEgsICZsZW5ndGgpOworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gIiI7CisKKyAg
ICBHTHNpemVpIHNpemU7CisgICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZhc3RNYWxsb2Mo
bGVuZ3RoKTsKKworICAgIDo6Z2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsZW5ndGgsICZz
aXplLCBpbmZvKTsKKyAgICBTdHJpbmcgcyhpbmZvKTsKKyAgICBmYXN0RnJlZShpbmZvKTsKKyAg
ICByZXR1cm4gczsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoUGxh
dGZvcm0zRE9iamVjdCBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sK
KyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAg
SGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJl
c3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICAKKyAgICBzd2l0Y2gg
KHBuYW1lKSB7CisgICAgY2FzZSBERUxFVEVfU1RBVFVTOgorICAgIGNhc2UgU0hBREVSX1RZUEU6
CisgICAgICAgIC8vIExldCBPcGVuR0wgaGFuZGxlIHRoZXNlLgorICAgICAgICAKKyAgICAgICAg
OjpnbEdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUsIHZhbHVlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgIAorICAgIGNhc2UgQ09NUElMRV9TVEFUVVM6CisgICAgICAgIGlmIChyZXN1bHQgPT0g
bV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgICgqdmFsdWUpID0gc3RhdGlj
X2Nhc3Q8aW50PihmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAK
KyAgICAgICAgKCp2YWx1ZSkgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+c2Vjb25kLmlzVmFs
aWQpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBJTkZPX0xPR19MRU5HVEg6
CisgICAgICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKKyAgICAg
ICAgICAgICgqdmFsdWUpID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IAorICAgICAgICAoKnZhbHVlKSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVyKS5sZW5ndGgoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgU0hBREVSX1NPVVJDRV9MRU5HVEg6
CisgICAgICAgICgqdmFsdWUpID0gZ2V0U2hhZGVyU291cmNlKHNoYWRlcikubGVuZ3RoKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKElOVkFMSURfRU5VTSk7CisgICAgfQorfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJU
KHNoYWRlcik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIEhhc2hNYXA8UGxh
dGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3No
YWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVy
U291cmNlTWFwLmVuZCgpKQorICAgICAgICAgcmV0dXJuICIiOworCisgICAgIFNoYWRlclNvdXJj
ZUVudHJ5IGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisKKyAgICAgaWYgKGVudHJ5LmlzVmFsaWQp
IHsKKyAgICAgICAgIEdMaW50IGxlbmd0aDsKKyAgICAgICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFk
ZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CisgICAgICAgICBpZiAoIWxlbmd0aCkK
KyAgICAgICAgICAgICByZXR1cm4gIiI7CisKKyAgICAgICAgIEdMc2l6ZWkgc2l6ZTsKKyAgICAg
ICAgIEdMY2hhciogaW5mbyA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKGxlbmd0aCk7CisKKyAgICAg
ICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7CisK
KyAgICAgICAgIFN0cmluZyBzKGluZm8pOworICAgICAgICAgZmFzdEZyZWUoaW5mbyk7CisgICAg
ICAgICByZXR1cm4gczsKKyAgICAgfQorICAgIHJldHVybiBlbnRyeS5sb2c7Cit9CisKK1N0cmlu
ZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisKKyAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRl
cmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworCisgICAgaWYg
KHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuICIiOwor
CisgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kLnNvdXJjZTsKK30KKworCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBu
YW1lLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdmFsdWUpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbiwg
dmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1ZSkKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VW5pZm9ybWl2KHByb2dyYW0s
IGxvY2F0aW9uLCB2YWx1ZSk7Cit9CisKK0dDM0RpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVu
aWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFt
ZSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICByZXR1cm4gOjpnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5k
YXRhKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdihH
QzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBw
bmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRy
aWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdihpbmRl
eCwgcG5hbWUsIHZhbHVlKTsKK30KKworR0MzRHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgR0x2b2lkKiBwb2ludGVyID0gMDsKKyAg
ICA6OmdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYoaW5kZXgsIHBuYW1lLCAmcG9pbnRlcik7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4ocmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4ocG9pbnRlcikpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2ZmLCBHQzNEaW50
IHlvZmYsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisKKyAgICAvLyBGSVhNRTogd2Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBQaXhl
bFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxpbmcgd2l0aCBpbWFnZSBidWZmZXJzIHRoYXQgZGlmZmVy
IGZyb20gdGhlIHN1YmltYWdlIHNpemUKKyAgICA6OmdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Cit9
CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IG8gPSAwOworICAgIDo6Z2xH
ZW5CdWZmZXJzKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKworUGxhdGZvcm0zRE9iamVjdCBH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSgpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgcmV0dXJuIGdsQ3JlYXRlUHJvZ3JhbSgpOworfQorCitQbGF0Zm9ybTNET2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbENyZWF0ZVNoYWRlcigodHlw
ZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NI
QURFUik7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRl
eHR1cmUoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBvID0gMDsK
KyAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERlbGV0ZUJ1ZmZlcnMoMSwgJmJ1
ZmZlcik7Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbShQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICA6OmdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAm
dGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9y
KEdDM0RlbnVtIGVycm9yKQoreworICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtDb250ZXh0Q2hhbmdlZCgpCit7CisgICAg
bV9sYXllckNvbXBvc2l0ZWQgPSBmYWxzZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
bWFya0xheWVyQ29tcG9zaXRlZCgpCit7CisgICAgbV9sYXllckNvbXBvc2l0ZWQgPSB0cnVlOwor
fQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2xheWVyQ29tcG9zaXRlZDsKK30KKworI2lmICFQTEFURk9STShRVCkKK0V4
dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQoreworICAgIGlm
ICghbV9leHRlbnNpb25zKQorICAgICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0
ZW5zaW9uczNET3BlbkdMKHRoaXMpKTsKKyAgICByZXR1cm4gbV9leHRlbnNpb25zLmdldCgpOwor
fQorI2VuZGlmCisKK30KKworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVT
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xF
Uy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDMwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2lmIFBMQVRGT1JN
KEdUSykKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4K
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIgKnBpeGVscywgaW50IHBpeGVsc1Np
emUpCit7CisgICAgaW50IHRvdGFsQnl0ZXMgPSBtX2N1cnJlbnRXaWR0aCAqIG1fY3VycmVudEhl
aWdodCAqIDQ7CisgICAgaWYgKHBpeGVsc1NpemUgPCB0b3RhbEJ5dGVzKQorICAgICAgICByZXR1
cm47CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGJvb2wgbXVzdFJlc3RvcmVG
Qk8gPSBmYWxzZTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpCisgICAgICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7
CisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBHTGludCBwYWNrQWxpZ25tZW50ID0gNDsKKyAgICBib29sIG11c3RSZXN0b3JlUGFja0Fs
aWdubWVudCA9IGZhbHNlOworICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9QQUNLX0FMSUdOTUVOVCwg
JnBhY2tBbGlnbm1lbnQpOworICAgIGlmIChwYWNrQWxpZ25tZW50ID4gNCkgeworICAgICAgICA6
OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIDQpOworICAgICAgICBtdXN0UmVzdG9y
ZVBhY2tBbGlnbm1lbnQgPSB0cnVlOworICAgIH0KKworICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAs
IG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZ
VEUsIHBpeGVscyk7CisgICAgLy8gQ29udmVydCB0byBCR1JBCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCisgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBp
eGVsc1tpICsgMl0pOworCisgICAgaWYgKG11c3RSZXN0b3JlUGFja0FsaWdubWVudCkKKyAgICAg
ICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5ULCBwYWNrQWxpZ25tZW50KTsKKwor
ICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgbV9ib3VuZEZCTyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJl
c2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlmICghcGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQzRCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAod2lkdGggPT0gbV9jdXJy
ZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7CisgICAgbV9jdXJyZW50SGVpZ2h0ID0g
aGVpZ2h0OworICAgIAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHZhbGlkYXRlQXR0
cmlidXRlcygpOworCisgICAgR0x1aW50IGNvbG9yRm9ybWF0ID0gMDsKKyAgICBpZiAobV9hdHRy
cy5hbHBoYSkgeworICAgICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0JBOworICAg
ICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQkE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9pbnRl
cm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCOworICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQjsK
KyAgICB9CisKKyAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CisKKyAgICAvLyByZXNp
emUgbXVsdGlzYW1wbGUgRkJPCisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKQorICAgICAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIAorICAgIC8vIHJlc2l6ZSByZWd1bGFyIEZCTworICAgIGlm
IChtX2JvdW5kRkJPICE9IG1fZmJvKSB7CisgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsK
KyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworICAg
IH0KKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKKyAgICA6
OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICA6
OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1F
TlQwLCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOworICAgIDo6Z2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICA6OmdsVGV4SW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAs
IGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICA6OmdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgMCk7CisgICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAmJiAobV9hdHRy
cy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpKSB7CisgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVm
ZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9zdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgOjpnbFJlbmRl
cmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9TVEVOQ0lMX0lOREVYOCwgd2lkdGgs
IGhlaWdodCk7CisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAgICAgICA6Omds
RnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRUQUNI
TUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsQmlu
ZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOworICAgICAgICA6
OmdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTF9SRU5ERVJCVUZGRVIsIEdMX0RFUFRIX0NPTVBPTkVO
VDE2LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpCisgICAgICAg
ICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRI
X0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgIDo6
Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCk7CisgICAgfQorICAgIGlmIChn
bENoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIpICE9IEdMX0ZSQU1FQlVGRkVS
X0NPTVBMRVRFKSB7CisgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwCisgICAgICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgfQorCisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKQorICAgICAgICBu
b3RJbXBsZW1lbnRlZCgpOworCisKKyAgICAvLyBJbml0aWFsaXplIHJlbmRlcmJ1ZmZlcnMgdG8g
MC4KKyAgICBHTGZsb2F0IGNsZWFyQ29sb3JbXSA9IHswLCAwLCAwLCAwfSwgY2xlYXJEZXB0aCA9
IDA7CisgICAgR0xpbnQgY2xlYXJTdGVuY2lsID0gMDsKKyAgICBHTGJvb2xlYW4gY29sb3JNYXNr
W10gPSB7R0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRX0sIGRlcHRoTWFzayA9IEdM
X1RSVUU7CisgICAgR0x1aW50IHN0ZW5jaWxNYXNrID0gMHhmZmZmZmZmZjsKKyAgICBHTGJvb2xl
YW4gaXNTY2lzc29yRW5hYmxlZCA9IEdMX0ZBTFNFOworICAgIEdMYm9vbGVhbiBpc0RpdGhlckVu
YWJsZWQgPSBHTF9GQUxTRTsKKyAgICBHTGJpdGZpZWxkIGNsZWFyTWFzayA9IEdMX0NPTE9SX0JV
RkZFUl9CSVQ7CisgICAgOjpnbEdldEZsb2F0dihHTF9DT0xPUl9DTEVBUl9WQUxVRSwgY2xlYXJD
b2xvcik7CisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgOjpnbEdldEJvb2xl
YW52KEdMX0NPTE9SX1dSSVRFTUFTSywgY29sb3JNYXNrKTsKKyAgICA6OmdsQ29sb3JNYXNrKEdM
X1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUpOworICAgIGlmIChtX2F0dHJzLmRlcHRo
KSB7CisgICAgICAgIDo6Z2xHZXRGbG9hdHYoR0xfREVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRl
cHRoKTsKKyAgICAgICAgOjpnbENsZWFyRGVwdGhmKDEpOworICAgICAgICA6OmdsR2V0Qm9vbGVh
bnYoR0xfREVQVEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsKKyAgICAgICAgOjpnbERlcHRoTWFz
ayhHTF9UUlVFKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7Cisg
ICAgfQorICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgOjpnbEdldEludGVnZXJ2
KEdMX1NURU5DSUxfQ0xFQVJfVkFMVUUsICZjbGVhclN0ZW5jaWwpOworICAgICAgICA6OmdsQ2xl
YXJTdGVuY2lsKDApOworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9XUklURU1B
U0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmc3RlbmNpbE1hc2spKTsKKyAgICAgICAgOjpn
bFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlQsIDB4ZmZmZmZmZmYpOworICAgICAgICBjbGVh
ck1hc2sgfD0gR0xfU1RFTkNJTF9CVUZGRVJfQklUOworICAgIH0KKyAgICBpc1NjaXNzb3JFbmFi
bGVkID0gOjpnbElzRW5hYmxlZChHTF9TQ0lTU09SX1RFU1QpOworICAgIDo6Z2xEaXNhYmxlKEdM
X1NDSVNTT1JfVEVTVCk7CisgICAgaXNEaXRoZXJFbmFibGVkID0gOjpnbElzRW5hYmxlZChHTF9E
SVRIRVIpOworICAgIDo6Z2xEaXNhYmxlKEdMX0RJVEhFUik7CisKKyAgICA6OmdsQ2xlYXIoY2xl
YXJNYXNrKTsKKworICAgIDo6Z2xDbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3Jb
MV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pOworICAgIDo6Z2xDb2xvck1hc2soY29s
b3JNYXNrWzBdLCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsKKyAg
ICBpZiAobV9hdHRycy5kZXB0aCkgeworICAgICAgICA6OmdsQ2xlYXJEZXB0aGYoY2xlYXJEZXB0
aCk7CisgICAgICAgIDo6Z2xEZXB0aE1hc2soZGVwdGhNYXNrKTsKKyAgICB9CisgICAgaWYgKG1f
YXR0cnMuc3RlbmNpbCkgeworICAgICAgICA6OmdsQ2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7
CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCBzdGVuY2lsTWFzayk7
CisgICAgfQorICAgIGlmIChpc1NjaXNzb3JFbmFibGVkKQorICAgICAgICA6OmdsRW5hYmxlKEdM
X1NDSVNTT1JfVEVTVCk7CisgICAgZWxzZQorICAgICAgICA6OmdsRGlzYWJsZShHTF9TQ0lTU09S
X1RFU1QpOworICAgIGlmIChpc0RpdGhlckVuYWJsZWQpCisgICAgICAgIDo6Z2xFbmFibGUoR0xf
RElUSEVSKTsKKyAgICBlbHNlCisgICAgICAgIDo6Z2xEaXNhYmxlKEdMX0RJVEhFUik7CisKKyAg
ICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJB
TUVCVUZGRVIsIG1fYm91bmRGQk8pOworCisgICAgOjpnbEZsdXNoKCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKCkKK3sKKyAgICBpZiAobV9sYXllckNvbXBv
c2l0ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAobV9hdHRycy5hbnRpYWxpYXMpCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisKKyAgICA6
OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgOjpnbEFjdGl2
ZVRleHR1cmUoR0xfVEVYVFVSRTApOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJE
LCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICA6OmdsQ29weVRleEltYWdlMkQoR0xfVEVYVFVS
RV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCAwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9j
dXJyZW50SGVpZ2h0LCAwKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9i
b3VuZFRleHR1cmUwKTsKKyAgICA6OmdsQWN0aXZlVGV4dHVyZShtX2FjdGl2ZVRleHR1cmUpOwor
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fYm91bmRGQk8pOworICAg
IDo6Z2xGaW5pc2goKTsKKyAgICBtX2xheWVyQ29tcG9zaXRlZCA9IHRydWU7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRm
b3JtM0RPYmplY3QgYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdM
dWludCBmYm87CisgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgZmJvID0gYnVmZmVyOworICAgIGVs
c2UKKyAgICAgICAgZmJvID0gbV9mYm87CisKKyAgICBpZiAoZmJvICE9IG1fYm91bmRGQk8pIHsK
KyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIGZibyk7CisgICAgICAgIG1fYm91
bmRGQk8gPSBmYm87CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVu
ZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIo
dGFyZ2V0LCByZW5kZXJidWZmZXIpOworfQorCitHQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdl
dCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBk
ZXB0aCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ2xlYXJEZXB0aGYo
ZGVwdGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNE
aW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
aW50IGJvcmRlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9hdHRy
cy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIAorICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKKyAgICBp
ZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQor
ICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpj
b3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQg
eG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVG
Qk8pCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisKKyAgICA6OmdsQ29weVRleFN1YkltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7
CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBs
ZUZCTykKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERlcHRoUmFuZ2VmKHpOZWFyLCB6RmFy
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZm
ZXJ0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1l
bnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRh
Y2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0Mz
RGludCBsZXZlbCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRnJhbWVi
dWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxl
dmVsKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVu
dW0gdGFyZ2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZW5lcmF0
ZU1pcG1hcCh0YXJnZXQpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVV
bmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUlu
Zm8mIGluZm8pCit7CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50IG1heFVuaWZvcm1TaXplID0gMDsKKyAgICA6
OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsICZt
YXhVbmlmb3JtU2l6ZSk7CisgICAgR0xjaGFyIG5hbWVbbWF4VW5pZm9ybVNpemVdOyAvLyBHTF9B
Q1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24KKyAgICBH
THNpemVpIG5hbWVMZW5ndGggPSAwOworICAgIEdMaW50IHNpemUgPSAwOworICAgIEdMZW51bSB0
eXBlID0gMDsKKyAgICA6OmdsR2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4VW5p
Zm9ybVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUpOworICAgIGlmICghbmFt
ZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGluZm8ubmFtZSA9IFN0cmluZyhu
YW1lLCBuYW1lTGVuZ3RoKTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8uc2l6ZSA9
IHNpemU7CisKKyAgICAvLyBGSVhNRSA6ICJbMF0iIGlzIGFkZGVkIGF0IHRoZSBlbmQgb2YgaW5m
by5uYW1lIGluIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlVW5pZm9ybSgpIAorICAg
IC8vIHdoZW4gaXNHTEVTMkNvbXBsaWFudCBpcyBvbmx5IGZhbHNlLiBJIGNhbid0IHVuZGVyc3Rh
bmQgdGhlIHJlYXNvbi4gCisgICAgLy8gSSBhZGQgIlswXSIgaGVyZSB0byBhdm9pZCBmYWxpbmcg
d2ViZ2wgY29uZm9ybWFuY2UgdGVzdChnZXQtYWN0aXZldGVzdC5odG1sKQorICAgIC8vIGJ1dCBp
ZiBpdCBtYWtlcyBzb21ldGhpbmcgd3JvbmcgbGF0ZXIsIHJlbW92ZSBmb2xsb3dpbmcgbGluZXMg
CisgICAgaWYgKGluZm8uc2l6ZSA+IDEgJiYgIWluZm8ubmFtZS5lbmRzV2l0aCgiWzBdIikpIAor
ICAgICAgICBpbmZvLm5hbWUuYXBwZW5kKCJbMF0iKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzRnJhbWVidWZmZXIoUGxhdGZv
cm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWZyYW1lYnVmZmVyKQorICAgICAg
ICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1
cm4gOjpnbElzRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOworfQorCitHQzNEYm9vbGVhbiBHcmFw
aGljc0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZm
ZXIpCit7CisgICAgaWYgKCFyZW5kZXJidWZmZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
KworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNSZW5kZXJidWZm
ZXIocmVuZGVyYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVs
cyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCit7CisgICAgLy8g
RklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBp
cyBmaXhlZCwgaS5lLiwKKyAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3Vs
ZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsRmx1c2goKTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3Vu
ZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworCisg
ICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRh
KTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2Ft
cGxlRkJPKQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhf
U1RFTkNJTF9BVFRBQ0hNRU5UKQorICAgICAgICBhdHRhY2htZW50ID0gREVQVEhfQVRUQUNITUVO
VDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3MuCisgICAgOjpnbEdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUs
IHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYoR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIC8vIE5lZWQgdG8gZW11bGF0ZSBNQVhf
RlJBR01FTlQvVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyBhbmQgTUFYX1ZBUllJTkdfVkVDVE9SUwor
ICAgIC8vIGJlY2F1c2UgZGVza3RvcCBHTCdzIGNvcnJlc3BvbmRpbmcgcXVlcmllcyByZXR1cm4g
dGhlIG51bWJlciBvZiBjb21wb25lbnRzCisgICAgLy8gd2hlcmVhcyBHTEVTMiByZXR1cm4gdGhl
IG51bWJlciBvZiB2ZWN0b3JzIChlYWNoIHZlY3RvciBoYXMgNCBjb21wb25lbnRzKS4KKyAgICAv
LyBUaGVyZWZvcmUsIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBkZXNrdG9wIEdMIG5lZWRzIHRvIGJl
IGRpdmlkZWQgYnkgNC4KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0SW50
ZWdlcnYocG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKworYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNv
bnN0IHZvaWQqIHBpeGVscykKK3sKKyAgICBpZiAod2lkdGggJiYgaGVpZ2h0ICYmICFwaXhlbHMp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIHJldHVybiB0cnVlOworfQor
CitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcigp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IG8gPSAwOworICAgIDo6
Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCitQbGF0Zm9ybTNE
T2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIoKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBvID0gMDsKKyAgICA6OmdsR2VuUmVuZGVy
YnVmZmVycygxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAm
ZnJhbWVidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJi
dWZmZXIoUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJnJlbmRlcmJ1ZmZlcik7
Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDkyMTY5KQorKysgU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDgtMDIgIENoYW5nU2VvayBPaCAgPHNoaXZh
bWlkb3dAZ21haWwuY29tPgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgRUdMIGJhY2tlbmQgZm9y
IFdlYkdMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
OTA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElu
Y2x1ZGUgRUdMIGxpYnJhcnkgdG8gbGluayB3aGVuIGVnbC1iYWNrZW5kIGlzIGNob29zZW4gZm9y
IFdlYkdMLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisKIDIwMTEtMDctMzAgIFBhdHJp
Y2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIGluY2x1
c2lvbiBvZiBNYWluVGhyZWFkLmggZnJvbSBUaHJlYWRpbmcuaApJbmRleDogU291cmNlL1dlYktp
dC9ndGsvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvR05V
bWFrZWZpbGUuYW0JKHJldmlzaW9uIDkyMTY5KQorKysgU291cmNlL1dlYktpdC9ndGsvR05VbWFr
ZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgbGlid2Via2l0Z3RrX0BX
RUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJTwogCSQod2ViY29yZV9sZGZsYWdzKSBcCiAJJChDQUlS
T19MSUJTKSBcCiAJJChDT1ZFUkFHRV9MREZMQUdTKSBcCisJJChFR0xfTElCUykgXAogCSQoRU5D
SEFOVF9MSUJTKSBcCiAJJChGUkVFVFlQRV9MSUJTKSBcCiAJJChHQUlMX0xJQlMpIFwK
</data>
<flag name="review"
          id="97932"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103348</attachid>
            <date>2011-08-09 05:27:12 -0700</date>
            <delta_ts>2011-08-09 22:14:15 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>P59064.patch</filename>
            <type>text/plain</type>
            <size>122724</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDkyNjc0
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDgt
MDkgIENoYW5nU2VvayBPaCAgPHNoaXZhbWlkb3dAZ21haWwuY29tPgorCisgICAgICAgIFtHVEtd
IFN1cHBvcnQgRUdMIGJhY2tlbmQgZm9yIFdlYkdMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBjb25maWctb3B0aW9uIHRvIGNob29zZSBnbC1iYWNr
ZW5kIGJldHdlZW4gZ2x4IGFuZCBlZ2wuCisKKyAgICAgICAgKiBjb25maWd1cmUuYWM6CisKIDIw
MTEtMDgtMDYgIEFyb24gUm9zZW5iZXJnICA8YXJvc2VuYmVyZ0Bsb2dpdGVjaC5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQmVuamFtaW4gUG91bGFpbi4KSW5kZXg6IGNvbmZpZ3VyZS5hYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBjb25maWd1cmUuYWMJKHJldmlzaW9uIDkyNjc0KQorKysgY29uZmlndXJl
LmFjCSh3b3JraW5nIGNvcHkpCkBAIC0zODMsMTIgKzM4MywzNiBAQCBBQ19BUkdfRU5BQkxFKHdl
YmdsLAogICAgICAgICAgICAgICBbXSwgW2VuYWJsZV93ZWJnbD0ibm8iXSkKIEFDX01TR19SRVNV
TFQoWyRlbmFibGVfd2ViZ2xdKQogCisjIGRldGVybWluZSB0aGUgR0wgYmFja2VuZAorQUNfTVNH
X0NIRUNLSU5HKFt0aGUgR0wgYmFja2VuZCB0byB1c2VdKQorQUNfQVJHX1dJVEgoZ2xfYmFja2Vu
ZCwKKyAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtZ2wtYmFja2VuZD1APDpAZ2x4
L2VnbEA6PkBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NlbGVjdCBnbCBiYWNrZW5k
IFtkZWZhdWx0PWdseF1dKSwKKyAgICAgICAgICAgIFtdLFt3aXRoX2dsX2JhY2tlbmQ9ImdseCJd
KQorCitjYXNlICIkd2l0aF9nbF9iYWNrZW5kIiBpbgorICAgICBnbHh8ZWdsKSA7OworICAgICAq
KSBBQ19NU0dfRVJST1IoW0ludmFsaWQgZ2wgYmFja2VuZDogbXVzdCBiZSBnbHgsIG9yIGVnbC5d
KSA7OworZXNhYworCitBQ19NU0dfUkVTVUxUKFskd2l0aF9nbF9iYWNrZW5kXSkKKwogaWYgdGVz
dCAiJGVuYWJsZV93ZWJnbCIgPSAieWVzIjsgdGhlbgotICAgIEFDX0NIRUNLX0hFQURFUlMoW0dM
L2dsLmhdLCBbXSwgQUNfTVNHX0VSUk9SKFtPcGVuR0wgaGVhZGVyIG5vdCBmb3VuZF0pKQotICAg
IEFDX0NIRUNLX0hFQURFUlMoW0dML2dseC5oXSwgW10sIEFDX01TR19FUlJPUihbR0xYIGhlYWRl
ciBub3QgZm91bmRdKSkKLSAgICBPUEVOR0xfTElCUz0tbEdMCisgICAgY2FzZSAiJHdpdGhfZ2xf
YmFja2VuZCIgaW4KKyAgICAgICAgZ2x4KSBBQ19DSEVDS19IRUFERVJTKFtHTC9nbC5oXSwgW10s
IEFDX01TR19FUlJPUihbT3BlbkdMIGhlYWRlciBub3QgZm91bmRdKSkKKyAgICAgICAgICAgICBB
Q19DSEVDS19IRUFERVJTKFtHTC9nbHguaF0sIFtdLCBBQ19NU0dfRVJST1IoW0dMWCBoZWFkZXIg
bm90IGZvdW5kXSkpCisgICAgICAgICAgICAgT1BFTkdMX0xJQlM9LWxHTAorICAgICAgICAgICAg
IEFDX1NVQlNUKFtPUEVOR0xfTElCU10pCisgICAgICAgICAgICAgOzsKKyAgICAgICAgZWdsKSBB
Q19DSEVDS19IRUFERVJTKFtHTEVTMi9nbDIuaF0sIFtdLCBBQ19NU0dfRVJST1IoW09wZW5HTCBF
UyBoZWFkZXIgbm90IGZvdW5kXSkpCisgICAgICAgICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhbRUdM
L2VnbC5oXSwgW10sIEFDX01TR19FUlJPUihbRUdMIGhlYWRlciBub3QgZm91bmRdKSkKKyAgICAg
ICAgICAgICBPUEVOR0xfTElCUz0tbEdMRVN2MgorICAgICAgICAgICAgIEVHTF9MSUJTPS1sRUdM
CisgICAgICAgICAgICAgQUNfU1VCU1QoW09QRU5HTF9MSUJTXSkKKyAgICAgICAgICAgICBBQ19T
VUJTVChbRUdMX0xJQlNdKQorICAgICAgICAgICAgIDs7CisgICAgZXNhYwogZmkKLUFDX1NVQlNU
KFtPUEVOR0xfTElCU10pCiAKICMgY2hlY2sgd2hldGhlciB0byBlbmFibGUgY2hhbm5lbCBtZXNz
YWdpbmcgc3VwcG9ydAogQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBIVE1MNSBD
aGFubmVsIE1lc3NhZ2luZyBzdXBwb3J0XSkKQEAgLTExNDksNiArMTE3MywxMCBAQCBBTV9DT05E
SVRJT05BTChbVVNFX0dMSUJfVU5JQ09ERV0sIFt0ZXN0CiBBTV9DT05ESVRJT05BTChbVVNFX0ZS
RUVUWVBFXSwgW3Rlc3QgIiR3aXRoX2ZvbnRfYmFja2VuZCIgPSAiZnJlZXR5cGUiXSkKIEFNX0NP
TkRJVElPTkFMKFtVU0VfUEFOR09dLCBbdGVzdCAiJHdpdGhfZm9udF9iYWNrZW5kIiA9ICJwYW5n
byJdKQogCisjIEZvbnQgYmFja2VuZCBjb25kaXRpb25hbHMKK0FNX0NPTkRJVElPTkFMKFtVU0Vf
R0xYXSwgW3Rlc3QgIiR3aXRoX2dsX2JhY2tlbmQiID0gImdseCJdKQorQU1fQ09ORElUSU9OQUwo
W1VTRV9FR0xdLCBbdGVzdCAiJHdpdGhfZ2xfYmFja2VuZCIgPSAiZWdsIl0pCisKICMgR1N0cmVh
bWVyIGZlYXR1cmUgY29uZGl0aW9uYWwKIEFNX0NPTkRJVElPTkFMKFtVU0VfR1NUUkVBTUVSXSwg
W3Rlc3QgIiRoYXZlX2dzdHJlYW1lciIgPSAieWVzIl0pCiAKQEAgLTEyNjMsNiArMTI5MSw3IEBA
IEJ1aWxkIGNvbmZpZ3VyYXRpb246CiAgQ29kZSBjb3ZlcmFnZSBzdXBwb3J0ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2NvdmVyYWdlCiAgVW5pY29kZSBiYWNr
ZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkd2l0aF91bmlj
b2RlX2JhY2tlbmQKICBGb250IGJhY2tlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6ICR3aXRoX2ZvbnRfYmFja2VuZAorIEdMIGJhY2tlbmQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHdpdGhfZ2xfYmFja2VuZAog
IE9wdGltaXplZCBtZW1vcnkgYWxsb2NhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogJGVuYWJsZV9mYXN0X21hbGxvYwogRmVhdHVyZXM6CiAgM0QgUmVuZGVyaW5nICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlXzNkX3JlbmRlcmlu
ZwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTI2NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMDIgQEAKKzIwMTEtMDgtMDkgIENoYW5n
U2VvayBPaCAgPHNoaXZhbWlkb3dAZ21haWwuY29tPgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQg
RUdMIGJhY2tlbmQgZm9yIFdlYkdMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01OTA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBidWlsZC1mbGFncyBsaWtlIFdURl9VU0VfR0xYICYgV1RGX1VTRV9F
R0wgdG8gc2VwZXJhdGUgZ2wtYmFja2VuZHMuCisgICAgICAgIEFsbW9zdCBHTCBjb21tb24gQVBJ
cyBpbiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgYXJlIG1vdmVkIHRvIEdyYXBoaWNzQ29u
dGV4dDNEQmFzZS5jcHAKKyAgICAgICAgQW5kIHRoZSBvdGhlcnMgQVBJcyBuZWVkZWQgdG8gc2Vw
ZXJhdGUgYWNjb3JkaW5nIHRvIGdsLWJhY2tlbmQgYXJlIGxvY2F0ZWQgYXQgR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0wuY3BwIGFuZCBHcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcC4KKyAgICAg
ICAgU29tZSBHTCBleHRlbnRpb24gcGFyYW1ldGVycyB3aGljaCBhcmUgbm90IGRlZmluZWQgaW4g
R0xFUyBhcmUgYWRkZWQgbmV3bHkgaW4gT3BlbkdMU2hpbXMuaAorCisgICAgICAgIE5vIG5ldyB0
ZXN0cyByZXF1aXJlZC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9PcGVuR0xTaGlt
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRQcm9jQWRkcmVzcyk6CisgICAgICAgIChXZWJD
b3JlOjppbml0aWFsaXplT3BlbkdMU2hpbXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL09wZW5HTFNoaW1zLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dy
YXBoaWNzQ29udGV4dDNER3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
dGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbEVHTC5jcHA6IEFkZGVkLgorICAgICAgICAoc2hh
cmVkRGlzcGxheSk6CisgICAgICAgIChzaGFyZWRFR0xEaXNwbGF5KToKKyAgICAgICAgKFdlYkNv
cmU6OmFjdGl2ZUdyYXBoaWNzQ29udGV4dHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6YWRkQWN0aXZlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnJlbW92ZUFjdGl2ZUdyYXBoaWNzQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjbGVh
bnVwQWN0aXZlQ29udGV4dHNBdEV4aXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmNyZWF0ZVBidWZmZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNyZWF0ZVBpeG1hcENvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp+R3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsRUdMLmg6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVhZFJlbmRlcmluZ1Jlc3Vs
dHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQmFzZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmli
dXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YWN0aXZlVGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpibGVuZEVxdWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNs
ZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmRlcHRoRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXB0
aFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjplbmFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlwbWFwKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2gpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFN0cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aGludCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6aXNCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6aXNGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Omlz
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNTaGFkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bGluZVdpZHRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6c2FtcGxlQ292ZXJhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6c3RlbmNpbEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0
ZW5jaWxGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnN0ZW5jaWxNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVu
Y2lsTWFza1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpz
dGVuY2lsT3ApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxP
cFNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJh
bWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0
ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZnYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtNGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm00ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0x
aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMml2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2kpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm00aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTRpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybU1hdHJpeDJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybU1hdHJpeDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybU1hdHJpeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dXNl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRy
aWIxZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmli
MWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIy
Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0Zik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2aWV3cG9ydCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRGbG9hdHYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpkZWxldGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRl
bGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRl
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6
ZUdMRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtDb250
ZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bWFya0xh
eWVyQ29tcG9zaXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bGF5
ZXJDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRF
eHRlbnNpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0xFUy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y29weVRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnJlYWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRl
cmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFn
ZTJEKToKKwogMjAxMS0wOC0wOSAgVnNldm9sb2QgVmxhc292ICA8dnNldmlrQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgIlJlZnJlc2giIHRvIGNvbnRleHQgbWVu
dSBvZiByZXNvdXJjZXMgcGFuZWwgY29va2llcyB2aWV3LgpJbmRleDogU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0JKHJldmlzaW9uIDkyNjc0KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdv
cmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsMjAgQEAgd2ViY29yZWd0a19jcHBmbGFncyArPSBc
CiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28KIGVu
ZGlmICMgRU5EIFVTRV9QQU5HTwogCisjIC0tLQorIyBHTFggZ2wgYmFja2VuZAorIyAtLS0KK2lm
IFVTRV9HTFgKK3dlYmNvcmVndGtfY3BwZmxhZ3MgKz0gLURXVEZfVVNFX0dMWD0xCitlbmRpZiAj
IEVORCBVU0VfR0xYCisKKyMgLS0tCisjIEVHTCBnbCBiYWNrZW5kCisjIC0tLQoraWYgVVNFX0VH
TAord2ViY29yZWd0a19jcHBmbGFncyArPSAtRFdURl9VU0VfRUdMPTEKK2VuZGlmICMgRU5EIFVT
RV9FR0wKKwogIyAtLS0tCiAjIEhUTUwgRGV0YWlscyBFbGVtZW50CiAjIC0tLS0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gOTI2NzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC00Nzk2LDE0ICs0Nzk2
LDI4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0RyYXdpbmdCdWZmZXJHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzRElu
dGVybmFsLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0wuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKKwlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xCYXNlLmNw
cAogZW5kaWYgICMgRU5EIEVOQUJMRV9XRUJHTAogCiAjIC0tLQorIyBPcGVuR0wgYmFja2VuZCAK
KyMgLS0tCitpZiBVU0VfR0xYCit3ZWJjb3JlX3NvdXJjZXMgKz0gXAorCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmNwcCBcCisJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWwuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMLmNwcAorZW5kaWYgICMgRU5EIFVTRV9HTFgKK2lmIFVTRV9FR0wK
K3dlYmNvcmVfc291cmNlcyArPSBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWxFR0wuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbEVHTC5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xFUy5jcHAKK2VuZGlmICAjIEVORCBVU0VfRUdMCisKKyMgLS0tCiAjIE1IVE1MIHN1cHBv
cnQKICMgLS0tCiBpZiBFTkFCTEVfTUhUTUwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gOTI2NzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5o
CSh3b3JraW5nIGNvcHkpCkBAIC05MzIsNyArOTMyLDEyIEBAIHB1YmxpYzoKIAogICAgIEdDM0R1
aW50IG1fdGV4dHVyZSwgbV9jb21wb3NpdG9yVGV4dHVyZTsKICAgICBHQzNEdWludCBtX2ZibzsK
KyNpZiBVU0UoRUdMKQorICAgIEdDM0R1aW50IG1fZGVwdGhCdWZmZXI7CisgICAgR0MzRHVpbnQg
bV9zdGVuY2lsQnVmZmVyOworI2Vsc2UKICAgICBHQzNEdWludCBtX2RlcHRoU3RlbmNpbEJ1ZmZl
cjsKKyNlbmRpZgogICAgIGJvb2wgbV9sYXllckNvbXBvc2l0ZWQ7CiAgICAgR0MzRHVpbnQgbV9p
bnRlcm5hbENvbG9yRm9ybWF0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9PcGVuR0xTaGltcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vT3BlbkdMU2hpbXMuY3BwCShyZXZpc2lvbiA5MjY3NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL09wZW5HTFNoaW1zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDExIElnYWxpYSBTLkwuCisgKiAgQ29weXJpZ2h0IChDKSAyMDExIENoYW5nU2VvayBPaCA8c2hp
dmFtaWRvd0BnbWFpbC5jb20+IAogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNTIsOSArNTMsMTMg
QEAgc3RhdGljIHZvaWQqIGdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIqCiAgICAgc3RhdGljIGds
R2V0UHJvY0FkZHJlc3NUeXBlIGdldFByb2NBZGRyZXNzRnVuY3Rpb24gPSAwOwogCiAgICAgaWYg
KCFpbml0aWFsaXplZCkgeworI2lmIFVTRShFR0wpCisgICAgICAgIGdldFByb2NBZGRyZXNzRnVu
Y3Rpb24gPSByZWludGVycHJldF9jYXN0PGdsR2V0UHJvY0FkZHJlc3NUeXBlPihkbHN5bShSVExE
X0RFRkFVTFQsICJlZ2xHZXRQcm9jQWRkcmVzcyIpKTsKKyNlbHNlCiAgICAgICAgIGdldFByb2NB
ZGRyZXNzRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PGdsR2V0UHJvY0FkZHJlc3NUeXBlPihk
bHN5bShSVExEX0RFRkFVTFQsICJnbFhHZXRQcm9jQWRkcmVzcyIpKTsKICAgICAgICAgaWYgKCFn
ZXRQcm9jQWRkcmVzc0Z1bmN0aW9uKQogICAgICAgICAgICAgZ2V0UHJvY0FkZHJlc3NGdW5jdGlv
biA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRQcm9jQWRkcmVzc1R5cGU+KGRsc3ltKFJUTERfREVG
QVVMVCwgImdsWEdldFByb2NBZGRyZXNzQVJCIikpOworI2VuZGlmCiAgICAgfQogCiAgICAgaWYg
KCFnZXRQcm9jQWRkcmVzc0Z1bmN0aW9uKQpAQCAtMTEzLDggKzExOCw4IEBAIGJvb2wgaW5pdGlh
bGl6ZU9wZW5HTFNoaW1zKCkKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xCbGVu
ZEZ1bmNTZXBhcmF0ZSwgc3VjY2Vzcyk7CiAjaWYgZGVmaW5lZChHTF9FU19WRVJTSU9OXzJfMCkK
IAotI2lmIGRlZmluZWQoR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCkKLSAgICBvcGVuR0xGdW5j
dGlvblRhYmxlKCktPmdsQmxpdEZyYW1lYnVmZmVyID0gOjpHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9i
bGl0OworI2lmIGRlZmluZWQoR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCkgJiYgIVVTRShFR0wp
CisgICAgb3BlbkdMRnVuY3Rpb25UYWJsZSgpLT5nbEJsaXRGcmFtZWJ1ZmZlciA9IDo6Z2xCbGl0
RnJhbWVidWZmZXJBTkdMRTsKICNlbHNlCiAgICAgb3BlbkdMRnVuY3Rpb25UYWJsZSgpLT5nbEJs
aXRGcmFtZWJ1ZmZlciA9IDA7CiAjZW5kaWYKQEAgLTEyNSw2ICsxMzAsOSBAQCBib29sIGluaXRp
YWxpemVPcGVuR0xTaGltcygpCiAgICAgQVNTSUdOX0ZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsQnVm
ZmVyRGF0YSwgc3VjY2Vzcyk7CiAgICAgQVNTSUdOX0ZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsQnVm
ZmVyU3ViRGF0YSwgc3VjY2Vzcyk7CiAgICAgQVNTSUdOX0ZVTkNUSU9OX1RBQkxFX0VOVFJZKGds
Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1cywgc3VjY2Vzcyk7CisjaWYgZGVmaW5lZChHTF9FU19WRVJT
SU9OXzJfMCkKKyAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xDbGVhckRlcHRoZiwg
c3VjY2Vzcyk7CisjZW5kaWYKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xDb21w
aWxlU2hhZGVyLCBzdWNjZXNzKTsKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xD
cmVhdGVQcm9ncmFtLCBzdWNjZXNzKTsKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlko
Z2xDcmVhdGVTaGFkZXIsIHN1Y2Nlc3MpOwpAQCAtMTMzLDYgKzE0MSw5IEBAIGJvb2wgaW5pdGlh
bGl6ZU9wZW5HTFNoaW1zKCkKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xEZWxl
dGVQcm9ncmFtLCBzdWNjZXNzKTsKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xE
ZWxldGVSZW5kZXJidWZmZXJzLCBzdWNjZXNzKTsKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVf
RU5UUlkoZ2xEZWxldGVTaGFkZXIsIHN1Y2Nlc3MpOworI2lmIGRlZmluZWQoR0xfRVNfVkVSU0lP
Tl8yXzApCisgICAgQVNTSUdOX0ZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsRGVwdGhSYW5nZWYsIHN1
Y2Nlc3MpOworI2VuZGlmCiAgICAgQVNTSUdOX0ZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsRGV0YWNo
U2hhZGVyLCBzdWNjZXNzKTsKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xEaXNh
YmxlVmVydGV4QXR0cmliQXJyYXksIHN1Y2Nlc3MpOwogICAgIEFTU0lHTl9GVU5DVElPTl9UQUJM
RV9FTlRSWShnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5LCBzdWNjZXNzKTsKQEAgLTE3MSw3ICsx
ODIsNyBAQCBib29sIGluaXRpYWxpemVPcGVuR0xTaGltcygpCiAKICNpZiBkZWZpbmVkKEdMX0FQ
UExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlKQogICAgIG9wZW5HTEZ1bmN0aW9uVGFibGUoKS0+
Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUgPSA6OmdsUmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlQVBQTEU7Ci0jZWxpZiBkZWZpbmVkKEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211
bHRpc2FtcGxlKQorI2VsaWYgZGVmaW5lZChHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBs
ZSkgJiYgIVVTRShFR0wpCiAgICAgb3BlbkdMRnVuY3Rpb25UYWJsZSgpLT5nbFJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSA9IDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVB
TkdMRTsKICNlbHNlCiAgICAgb3BlbkdMRnVuY3Rpb25UYWJsZSgpLT5nbFJlbmRlcmJ1ZmZlclN0
b3JhZ2VNdWx0aXNhbXBsZSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9PcGVuR0xTaGltcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL09wZW5HTFNoaW1zLmgJKHJldmlzaW9uIDkyNjc0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vT3BlbkdMU2hpbXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFRp
ZXRvIENvcnBvcmF0aW9uLgogICogIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICog
IENvcHlyaWdodCAoQykgMjAxMSBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29tPgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsMTMgKzIxLDM3IEBACiAjaWYgUExBVEZPUk0oUVQp
CiAjaW5jbHVkZSA8UUdMQ29udGV4dD4KICNlbHNlCisjaWYgVVNFKEVHTCkKKyNpbmNsdWRlIDxH
TEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKyNlbHNlCiAjaW5jbHVkZSA8
R0wvZ2wuaD4KICNlbmRpZgorI2VuZGlmCiAKICNpZiBkZWZpbmVkKEdMX0VTX1ZFUlNJT05fMl8w
KQogLy8gU29tZSBvcGVuR0wgRVMgc3lzdGVtcyBtaXNzIHRoaXMgdHlwZWRlZi4KIHR5cGVkZWYg
Y2hhciBHTGNoYXI7CisKKyNpZiAhZGVmaW5lZChHTF9GUkFNRUJVRkZFUl9FWFQpCisjZGVmaW5l
IEdMX0ZSQU1FQlVGRkVSX0VYVCBHTF9GUkFNRUJVRkZFUgorI2VuZGlmCisjaWYgIWRlZmluZWQo
R0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUKQorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9F
WFQgR0xfQ09MT1JfQVRUQUNITUVOVDAKKyNlbmRpZgorI2lmICFkZWZpbmVkKEdMX1JFTkRFUkJV
RkZFUl9FWFQpCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9FWFQgR0xfUkVOREVSQlVGRkVSCiAj
ZW5kaWYKKyNpZiAhZGVmaW5lZChHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhUKQorI2RlZmluZSBH
TF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhUIEdMX1NURU5DSUxfQVRUQUNITUVOVAorI2VuZGlmCisj
aWYgIWRlZmluZWQoR0xfREVQVEhfQVRUQUNITUVOVF9FWFQpCisjZGVmaW5lIEdMX0RFUFRIX0FU
VEFDSE1FTlRfRVhUIEdMX0RFUFRIX0FUVEFDSE1FTlQKKyNlbmRpZgorI2lmICFkZWZpbmVkKEdM
X0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQ09NUExF
VEVfRVhUIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFCisjZW5kaWYKKyNlbmRpZiAvLyBFbmQgb2Yg
R0xfRVNfVkVSU0lPTl8yXzAKIAogdHlwZWRlZiBzdHJ1Y3QgX09wZW5HTEZ1bmN0aW9uVGFibGUg
T3BlbkdMRnVuY3Rpb25UYWJsZTsKIApAQCAtNDksNiArNzQsOSBAQCB0eXBlZGVmIHZvaWQgKCpn
bEJsaXRGcmFtZWJ1ZmZlclR5cGUpIChHCiB0eXBlZGVmIHZvaWQgKCpnbEJ1ZmZlckRhdGFUeXBl
KSAoR0xlbnVtLCBHTHNpemVpcHRyLCBjb25zdCBHTHZvaWQqLCBHTGVudW0pOwogdHlwZWRlZiB2
b2lkICgqZ2xCdWZmZXJTdWJEYXRhVHlwZSkgKEdMZW51bSwgR0xpbnRwdHIsIEdMc2l6ZWlwdHIs
IGNvbnN0IEdMdm9pZCopOwogdHlwZWRlZiBHTGVudW0gKCpnbENoZWNrRnJhbWVidWZmZXJTdGF0
dXNUeXBlKSAoR0xlbnVtKTsKKyNpZiBkZWZpbmVkKEdMX0VTX1ZFUlNJT05fMl8wKQordHlwZWRl
ZiB2b2lkICgqZ2xDbGVhckRlcHRoZlR5cGUpIChHTGZsb2F0KTsKKyNlbmRpZgogdHlwZWRlZiB2
b2lkICgqZ2xDb21waWxlU2hhZGVyVHlwZSkgKEdMdWludCk7CiB0eXBlZGVmIEdMdWludCAoKmds
Q3JlYXRlUHJvZ3JhbVR5cGUpICgpOwogdHlwZWRlZiBHTHVpbnQgKCpnbENyZWF0ZVNoYWRlclR5
cGUpIChHTGVudW0pOwpAQCAtNTgsNiArODYsOSBAQCB0eXBlZGVmIHZvaWQgKCpnbERlbGV0ZVBy
b2dyYW1UeXBlKSAoR0x1CiB0eXBlZGVmIHZvaWQgKCpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNUeXBl
KSAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqKTsKIHR5cGVkZWYgdm9pZCAoKmdsRGVsZXRlU2hh
ZGVyVHlwZSkgKEdMdWludCk7CiB0eXBlZGVmIHZvaWQgKCpnbERldGFjaFNoYWRlclR5cGUpIChH
THVpbnQsIEdMdWludCk7CisjaWYgZGVmaW5lZChHTF9FU19WRVJTSU9OXzJfMCkKK3R5cGVkZWYg
dm9pZCAoKmdsRGVwdGhSYW5nZWZUeXBlKSAoR0xmbG9hdCwgR0xmbG9hdCk7CisjZW5kaWYKIHR5
cGVkZWYgdm9pZCAoKmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5VHlwZSkgKEdMdWludCk7CiB0
eXBlZGVmIHZvaWQgKCpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5VHlwZSkgKEdMdWludCk7CiB0
eXBlZGVmIHZvaWQgKCpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyVHlwZSkgKEdMZW51bSwgR0xl
bnVtLCBHTGVudW0sIEdMdWludCk7CkBAIC0xNDUsNiArMTc2LDkgQEAgdHlwZWRlZiBzdHJ1Y3Qg
X09wZW5HTEZ1bmN0aW9uVGFibGUgewogICAgIEZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsQnVmZmVy
RGF0YSk7CiAgICAgRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xCdWZmZXJTdWJEYXRhKTsKICAgICBG
VU5DVElPTl9UQUJMRV9FTlRSWShnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMpOworI2lmIGRlZmlu
ZWQoR0xfRVNfVkVSU0lPTl8yXzApCisgICAgRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xDbGVhckRl
cHRoZik7CisjZW5kaWYKICAgICBGVU5DVElPTl9UQUJMRV9FTlRSWShnbENvbXBpbGVTaGFkZXIp
OwogICAgIEZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsQ3JlYXRlUHJvZ3JhbSk7CiAgICAgRlVOQ1RJ
T05fVEFCTEVfRU5UUlkoZ2xDcmVhdGVTaGFkZXIpOwpAQCAtMTUzLDYgKzE4Nyw5IEBAIHR5cGVk
ZWYgc3RydWN0IF9PcGVuR0xGdW5jdGlvblRhYmxlIHsKICAgICBGVU5DVElPTl9UQUJMRV9FTlRS
WShnbERlbGV0ZVByb2dyYW0pOwogICAgIEZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsRGVsZXRlUmVu
ZGVyYnVmZmVycyk7CiAgICAgRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xEZWxldGVTaGFkZXIpOwor
I2lmIGRlZmluZWQoR0xfRVNfVkVSU0lPTl8yXzApCisgICAgRlVOQ1RJT05fVEFCTEVfRU5UUlko
Z2xEZXB0aFJhbmdlZik7CisjZW5kaWYKICAgICBGVU5DVElPTl9UQUJMRV9FTlRSWShnbERldGFj
aFNoYWRlcik7CiAgICAgRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xEaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkpOwogICAgIEZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsRW5hYmxlVmVydGV4QXR0cmliQXJy
YXkpOwpAQCAtMjQ2LDYgKzI4MywxMCBAQCB0eXBlZGVmIHN0cnVjdCBfT3BlbkdMRnVuY3Rpb25U
YWJsZSB7CiAjZGVmaW5lIGdsQnVmZmVyU3ViRGF0YSAgICAgICAgICAgICAgICAgICAgICAgIExP
T0tVUF9HTF9GVU5DVElPTihnbEJ1ZmZlclN1YkRhdGEpCiAjZGVmaW5lIGdsQ2hlY2tGcmFtZWJ1
ZmZlclN0YXR1c0VYVCAgICAgICAgICAgIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cwogI2RlZmlu
ZSBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMgICAgICAgICAgICAgICBMT09LVVBfR0xfRlVOQ1RJ
T04oZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKQorI2lmIGRlZmluZWQoR0xfRVNfVkVSU0lPTl8y
XzApCisjZGVmaW5lIGdsQ2xlYXJEZXB0aCAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsQ2xl
YXJEZXB0aGYKKyNkZWZpbmUgZ2xDbGVhckRlcHRoZiAgICAgICAgICAgICAgICAgICAgICAgICAg
TE9PS1VQX0dMX0ZVTkNUSU9OKGdsQ2xlYXJEZXB0aGYpCisjZW5kaWYKICNkZWZpbmUgZ2xDb21w
aWxlU2hhZGVyICAgICAgICAgICAgICAgICAgICAgICAgTE9PS1VQX0dMX0ZVTkNUSU9OKGdsQ29t
cGlsZVNoYWRlcikKICNkZWZpbmUgZ2xDcmVhdGVQcm9ncmFtICAgICAgICAgICAgICAgICAgICAg
ICAgTE9PS1VQX0dMX0ZVTkNUSU9OKGdsQ3JlYXRlUHJvZ3JhbSkKICNkZWZpbmUgZ2xDcmVhdGVT
aGFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgTE9PS1VQX0dMX0ZVTkNUSU9OKGdsQ3JlYXRl
U2hhZGVyKQpAQCAtMjU2LDYgKzI5NywxMCBAQCB0eXBlZGVmIHN0cnVjdCBfT3BlbkdMRnVuY3Rp
b25UYWJsZSB7CiAjZGVmaW5lIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCAgICAgICAgICAgICAg
IGdsRGVsZXRlUmVuZGVyYnVmZmVycwogI2RlZmluZSBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMgICAg
ICAgICAgICAgICAgICBMT09LVVBfR0xfRlVOQ1RJT04oZ2xEZWxldGVSZW5kZXJidWZmZXJzKQog
I2RlZmluZSBnbERlbGV0ZVNoYWRlciAgICAgICAgICAgICAgICAgICAgICAgICBMT09LVVBfR0xf
RlVOQ1RJT04oZ2xEZWxldGVTaGFkZXIpCisjaWYgZGVmaW5lZChHTF9FU19WRVJTSU9OXzJfMCkK
KyNkZWZpbmUgZ2xEZXB0aFJhbmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xEZXB0aFJh
bmdlZgorI2RlZmluZSBnbERlcHRoUmFuZ2VmICAgICAgICAgICAgICAgICAgICAgICAgICBMT09L
VVBfR0xfRlVOQ1RJT04oZ2xEZXB0aFJhbmdlZikKKyNlbmRpZgogI2RlZmluZSBnbERldGFjaFNo
YWRlciAgICAgICAgICAgICAgICAgICAgICAgICBMT09LVVBfR0xfRlVOQ1RJT04oZ2xEZXRhY2hT
aGFkZXIpCiAjZGVmaW5lIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5ICAgICAgICAgICAgIExP
T0tVUF9HTF9GVU5DVElPTihnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSkKICNkZWZpbmUgZ2xF
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheSAgICAgICAgICAgICAgTE9PS1VQX0dMX0ZVTkNUSU9OKGds
RW5hYmxlVmVydGV4QXR0cmliQXJyYXkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREd0ay5jcHAJ
KHJldmlzaW9uIDkyNjc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0dyYXBoaWNzQ29udGV4dDNER3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQ2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjgsOSArMjksOSBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCiAKICNpZiBFTkFCTEUoV0VCR0wpCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
ICNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzREludGVybmFsLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJP
cGVuR0xTaGltcy5oIgogI2luY2x1ZGUgIlNoYWRlckxhbmcuaCIKICNpbmNsdWRlIDx3dGYvTm90
Rm91bmQuaD4KQEAgLTU5LDcgKzYwLDEyIEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0Nv
bnRleHQzRChHcmEKICAgICAsIG1fYXR0cnMoYXR0cmlidXRlcykKICAgICAsIG1fdGV4dHVyZSgw
KQogICAgICwgbV9mYm8oMCkKKyNpZiBVU0UoRUdMKQorICAgICwgbV9kZXB0aEJ1ZmZlcigwKQor
ICAgICwgbV9zdGVuY2lsQnVmZmVyKDApCisjIGVsc2UKICAgICAsIG1fZGVwdGhTdGVuY2lsQnVm
ZmVyKDApCisjZW5kaWYKICAgICAsIG1fYm91bmRGQk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVG
Qk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKQEAgLTc0LDgg
KzgwLDggQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYQogICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwogICAgIDo6Z2xUZXhQYXJh
bWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsK
ICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVApOworICAgIDo6Z2xUZXhQYXJhbWV0
ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsK
KyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwg
R0xfQ0xBTVBfVE9fRURHRSk7CiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDAp
OwogCiAgICAgLy8gQ3JlYXRlIGFuIEZCTy4KQEAgLTgzLDE3ICs4OSwyNyBAQCBHcmFwaGljc0Nv
bnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKIAogICAgIG1fYm91bmRGQk8gPSBtX2ZibzsK
LSAgICBpZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRy
cy5kZXB0aCkpCisgICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAmJiAobV9hdHRycy5zdGVuY2ls
IHx8IG1fYXR0cnMuZGVwdGgpKSB7CisjaWYgVVNFKEVHTCkKKyAgICAgICAgOjpnbEdlblJlbmRl
cmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhCdWZmZXIpOworICAgICAgICA6OmdsR2VuUmVuZGVyYnVm
ZmVyc0VYVCgxLCAmbV9zdGVuY2lsQnVmZmVyKTsKKyNlbHNlCiAgICAgICAgIDo6Z2xHZW5SZW5k
ZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisjZW5kaWYKKyAgICB9CiAg
ICAgCiAgICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgogICAgIGlmIChtX2F0dHJzLmFu
dGlhbGlhcykgeworI2lmIFVTRShFR0wpCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisjZWxz
ZQogICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsK
ICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVs
dGlzYW1wbGVGQk8pOwogICAgICAgICBtX2JvdW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKICAg
ICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZl
cik7CiAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKICAgICAg
ICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVu
Y2lsQnVmZmVyKTsKKyNlbmRpZgogICAgIH0KIAogICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9u
LgpAQCAtMTEyLDggKzEyOCwxMCBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0
M0QoR3JhCiAgICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOwogICAgIG1fY29t
cGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKIAorI2lmICFVU0UoRUdMKQogICAg
IDo6Z2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRfU0laRSk7CiAgICAgOjpnbEVuYWJs
ZShHTF9QT0lOVF9TUFJJVEUpOworI2VuZGlmCiAgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwg
MCk7CiB9CiAKQEAgLTEyNiwxMyArMTQ0LDIzIEBAIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhp
Y3NDb250ZXh0M0QoKQogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xEZWxldGVU
ZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyNp
ZiBVU0UoRUdMKQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICAgICAgOjpn
bERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CiAg
ICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKICAgICAgICAgICAg
IDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2ls
QnVmZmVyKTsKICAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNh
bXBsZUZCTyk7CisjZW5kaWYKICAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9hdHRycy5zdGVu
Y2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9h
dHRycy5kZXB0aCkgeworI2lmIFVTRShFR0wpCisgICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVy
YnVmZmVyc0VYVCgxLCAmbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgICAgICA6OmdsRGVsZXRlUmVu
ZGVyYnVmZmVyc0VYVCgxLCAmbV9zdGVuY2lsQnVmZmVyKTsKKyNlbHNlCiAgICAgICAgICAgICA6
OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworI2Vu
ZGlmCisgICAgICAgIH0KICAgICB9CiAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAm
bV9mYm8pOwogfQpAQCAtMTUxLDcgKzE3OSwxMSBAQCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
IEdyYXBoaWNzQ29udGV4CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlh
bnQoKSBjb25zdAogeworI2lmIFVTRShFR0wpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQogICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbEVHTC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWxFR0wuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWxFR0wuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDExIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0Bn
bWFpbC5jb20+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUK
KyAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzREludGVybmFsRUdMLmgiCisK
KyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lu
Y2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjaW5jbHVkZSA8RUdML2VnbC5oPgorI2luY2x1ZGUgPGRs
ZmNuLmg+CisKKworc3RhdGljIERpc3BsYXkqIGdTaGFyZWREaXNwbGF5ID0gMDsKK3N0YXRpYyBE
aXNwbGF5KiBzaGFyZWREaXNwbGF5KCkKK3sKKyAgICBpZiAoIWdTaGFyZWREaXNwbGF5KQorICAg
ICAgICBnU2hhcmVkRGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKKyAgICByZXR1cm4gZ1NoYXJl
ZERpc3BsYXk7Cit9CisKK3N0YXRpYyBFR0xEaXNwbGF5IGdTaGFyZWRFR0xEaXNwbGF5ID0gRUdM
X05PX0RJU1BMQVk7CitzdGF0aWMgRUdMRGlzcGxheSBzaGFyZWRFR0xEaXNwbGF5KCkKK3sKKyAg
ICBpZiAoZ1NoYXJlZEVHTERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCisgICAgICAgIGdTaGFy
ZWRFR0xEaXNwbGF5ID0gZWdsR2V0RGlzcGxheShzaGFyZWREaXNwbGF5KCkpOworICAgIHJldHVy
biBnU2hhcmVkRUdMRGlzcGxheTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBCZWNh
dXNlIG9mIGRyaXZlciBidWdzLCBleGl0aW5nIHRoZSBwcm9ncmFtIHdoZW4gdGhlcmUgYXJlIGFj
dGl2ZSBwYnVmZmVycworLy8gY2FuIGNyYXNoIHRoZSBYIHNlcnZlciAodGhpcyBoYXMgYmVlbiBv
YnNlcnZlZCB3aXRoIHRoZSBvZmZpY2lhbCBOdmlkaWEgZHJpdmVycykuCisvLyBXZSBuZWVkIHRv
IGVuc3VyZSB0aGF0IHdlIGNsZWFuIGV2ZXJ5dGhpbmcgdXAgb24gZXhpdC4gVGhlcmUgYXJlIHNl
dmVyYWwgcmVhc29ucworLy8gdGhhdCBHcmFwaGljc0NvbnRleHQzRHMgd2lsbCBzdGlsbCBiZSBh
bGl2ZSBhdCBleGl0LCBpbmNsdWRpbmcgdXNlciBlcnJvciAobWVtb3J5CisvLyBsZWFrcykgYW5k
IHRoZSBwYWdlIGNhY2hlLiBJbiBhbnkgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0aGUgWCBzZXJ2ZXIg
dG8gY3Jhc2guCitzdGF0aWMgYm9vbCBjbGVhbmluZ1VwQXRFeGl0ID0gZmFsc2U7CitzdGF0aWMg
VmVjdG9yPEdyYXBoaWNzQ29udGV4dDNEKj4mIGFjdGl2ZUdyYXBoaWNzQ29udGV4dHMoKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPEdyYXBoaWNzQ29udGV4dDNEKj4sIGNvbnRl
eHRzLCAoKSk7CisgICAgcmV0dXJuIGNvbnRleHRzOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmFkZEFjdGl2ZUdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCkKK3sKKyAgICBzdGF0aWMgYm9vbCBhZGRlZEF0RXhpdEhhbmRsZXIgPSBmYWxzZTsK
KyAgICBpZiAoIWFkZGVkQXRFeGl0SGFuZGxlcikgeworICAgICAgICBhdGV4aXQoJkdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmNsZWFudXBBY3RpdmVDb250ZXh0c0F0RXhpdCk7CisgICAgICAg
IGFkZGVkQXRFeGl0SGFuZGxlciA9IHRydWU7CisgICAgfQorICAgIGFjdGl2ZUdyYXBoaWNzQ29u
dGV4dHMoKS5hcHBlbmQoY29udGV4dCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6cmVtb3ZlQWN0aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KQoreworICAgIGlmIChjbGVhbmluZ1VwQXRFeGl0KQorICAgICAgICByZXR1cm47CisKKyAg
ICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0M0QqPiYgY29udGV4dHMgPSBhY3RpdmVHcmFwaGljc0Nv
bnRleHRzKCk7CisgICAgc2l6ZV90IGxvY2F0aW9uID0gY29udGV4dHMuZmluZChjb250ZXh0KTsK
KyAgICBpZiAobG9jYXRpb24gIT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgY29udGV4dHMucmVt
b3ZlKGxvY2F0aW9uKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjbGVh
bnVwQWN0aXZlQ29udGV4dHNBdEV4aXQoKQoreworICAgIGNsZWFuaW5nVXBBdEV4aXQgPSB0cnVl
OworCisgICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dDNEKj4mIGNvbnRleHRzID0gYWN0aXZlR3Jh
cGhpY3NDb250ZXh0cygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29udGV4dHMuc2l6
ZSgpOyBpKyspCisgICAgICAgIGNvbnRleHRzW2ldLT5+R3JhcGhpY3NDb250ZXh0M0QoKTsKKwor
ICAgIGlmICghZ1NoYXJlZERpc3BsYXkpCisgICAgICAgIHJldHVybjsKKyAgICBYQ2xvc2VEaXNw
bGF5KGdTaGFyZWREaXNwbGF5KTsKKyAgICBnU2hhcmVkRGlzcGxheSA9IDA7CisKKyAgICBpZiAo
Z1NoYXJlZEVHTERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCisgICAgICAgIHJldHVybjsKKyAg
ICBlZ2xUZXJtaW5hdGUoZ1NoYXJlZEVHTERpc3BsYXkpOworICAgIGdTaGFyZWRFR0xEaXNwbGF5
ID0gRUdMX05PX0RJU1BMQVk7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbD4gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y3JlYXRlKCkKK3sKKyAgICBpZiAoIXNo
YXJlZERpc3BsYXkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzdGF0aWMgYm9v
bCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIHN1Y2Nlc3MgPSB0cnVlOwor
ICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgaWYgKCFlZ2xJbml0aWFsaXplKHNoYXJl
ZEVHTERpc3BsYXkoKSwgMCwgMCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgc3VjY2VzcyA9IGluaXRpYWxpemVPcGVuR0xTaGltcygpOworICAgICAgICBpbml0aWFsaXpl
ZCA9IHRydWU7CisgICAgfQorICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBpbnRlcm5hbCA9IGNyZWF0ZVBi
dWZmZXJDb250ZXh0KCk7CisgICAgaWYgKCFpbnRlcm5hbCkKKyAgICAgICAgaW50ZXJuYWwgPSBj
cmVhdGVQaXhtYXBDb250ZXh0KCk7CisgICAgaWYgKCFpbnRlcm5hbCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICAvLyBUaGUgR3JhcGhpY3NDb250ZXh0M0QgY29uc3RydWN0b3IgcmVx
dWlyZXMgdGhhdCB0aGlzIGNvbnRleHQgaXMgdGhlIGN1cnJlbnQgT3BlbkdMIGNvbnRleHQuCisg
ICAgaW50ZXJuYWwtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBhZG9wdFB0cihp
bnRlcm5hbCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwqIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmNyZWF0ZVBidWZmZXJDb250ZXh0KCkKK3sKKyAgICBpbnQgZmJDb25maWdB
dHRyYnNbXSA9IHsKKyAgICAgICAgRUdMX0JVRkZFUl9TSVpFLCBFR0xfRE9OVF9DQVJFLAorICAg
ICAgICBFR0xfUkVEX1NJWkUsIDgsCisgICAgICAgIEVHTF9HUkVFTl9TSVpFLCA4LAorICAgICAg
ICBFR0xfQkxVRV9TSVpFLCA4LAorICAgICAgICBFR0xfQUxQSEFfU0laRSwgOCwKKyAgICAgICAg
RUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklULAorICAgICAgICBFR0xfU1VS
RkFDRV9UWVBFLCBFR0xfUEJVRkZFUl9CSVQsCisgICAgICAgIEVHTF9OT05FCisgICAgfTsKKyAg
ICBFR0xDb25maWcgZWdsQ29uZmlnc1sxXTsKKyAgICBFR0xpbnQgbnVtT2ZDb25maWc7CisgICAg
aWYgKCFlZ2xDaG9vc2VDb25maWcoc2hhcmVkRUdMRGlzcGxheSgpLCBmYkNvbmZpZ0F0dHJicywg
JmVnbENvbmZpZ3NbMF0sIDEsICZudW1PZkNvbmZpZykpCisgICAgICAgIHJldHVybiAwOworICAg
IGlmICghbnVtT2ZDb25maWcpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gV2Ugd2lsbCBi
ZSByZW5kZXJpbmcgdG8gYSB0ZXh0dXJlLCBzbyBvdXIgcGJ1ZmZlciBkb2VzIG5vdCBuZWVkIHRv
IGJlIGxhcmdlLgorICAgIHN0YXRpYyBjb25zdCBpbnQgcGJ1ZmZlckF0dHJpYnV0ZXNbXSA9IHsg
RUdMX1dJRFRILCAxLCBFR0xfSEVJR0hULCAxLCBFR0xfTk9ORSB9OworICAgIEVHTFN1cmZhY2Ug
ZWdsU3VyZmFjZSA9IGVnbENyZWF0ZVBidWZmZXJTdXJmYWNlKHNoYXJlZEVHTERpc3BsYXkoKSwg
ZWdsQ29uZmlnc1swXSwgcGJ1ZmZlckF0dHJpYnV0ZXMpOworICAgIGlmIChlZ2xTdXJmYWNlID09
IEVHTF9OT19TVVJGQUNFKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEVHTGludCBlZ2xDb250
ZXh0QXR0cmJzW10gPSB7IEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLCAyLCBFR0xfTk9ORSB9
OworICAgIEVHTENvbnRleHQgZWdsQ29udGV4dCA9IGVnbENyZWF0ZUNvbnRleHQoc2hhcmVkRUdM
RGlzcGxheSgpLCBlZ2xDb25maWdzWzBdLCBFR0xfTk9fQ09OVEVYVCwgZWdsQ29udGV4dEF0dHJi
cyk7CisgICAgaWYgKGVnbENvbnRleHQgPT0gRUdMX05PX0NPTlRFWFQpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIG5ldyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKGVnbENvbnRl
eHQsIGVnbFN1cmZhY2UpOworfQorCitHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpjcmVhdGVQaXhtYXBDb250ZXh0KCkKK3sKKyAgICBpbnQgc2Ny
ZWVuID0gRGVmYXVsdFNjcmVlbihzaGFyZWREaXNwbGF5KCkpOworICAgIGNvbnN0IGludCBkZXB0
aCA9IERlZmF1bHREZXB0aChzaGFyZWREaXNwbGF5KCksIHNjcmVlbik7CisgICAgY29uc3QgaW50
IHdpZHRoID0gMTsKKyAgICBjb25zdCBpbnQgaGVpZ2h0ID0gMTsKKworICAgIHN0YXRpYyBpbnQg
ZWdsQ29uZmlnQXR0cnNbXSA9IHsKKyAgICAgICAgRUdMX0JVRkZFUl9TSVpFLCBFR0xfRE9OVF9D
QVJFLAorICAgICAgICBFR0xfUkVEX1NJWkUsIDgsCisgICAgICAgIEVHTF9HUkVFTl9TSVpFLCA4
LAorICAgICAgICBFR0xfQkxVRV9TSVpFLCA4LAorICAgICAgICBFR0xfQUxQSEFfU0laRSwgOCwK
KyAgICAgICAgRUdMX0RFUFRIX1NJWkUsIGRlcHRoLAorICAgICAgICBFR0xfU1VSRkFDRV9UWVBF
LCBFR0xfUElYTUFQX0JJVCwKKyAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5H
TF9FUzJfQklULAorICAgICAgICBFR0xfTk9ORQorICAgIH07CisKKyAgICBFR0xDb25maWcgZWds
Q29uZmlnc1sxXTsKKyAgICBFR0xpbnQgbnVtT2ZDb25maWc7CisgICAgaWYgKCFlZ2xDaG9vc2VD
b25maWcoc2hhcmVkRUdMRGlzcGxheSgpLCBlZ2xDb25maWdBdHRycywgJmVnbENvbmZpZ3NbMF0s
IDEsICZudW1PZkNvbmZpZykpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICghbnVtT2ZDb25m
aWcpCisgICAgICAgIHJldHVybiAwOworCisgICAgRUdMaW50IGVnbENvbnRleHRBdHRyYnNbXSA9
IHsgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sIDIsIEVHTF9OT05FIH07CisgICAgRUdMQ29u
dGV4dCBjb250ZXh0ID0gZWdsQ3JlYXRlQ29udGV4dChzaGFyZWRFR0xEaXNwbGF5KCksIGVnbENv
bmZpZ3NbMF0sIEVHTF9OT19DT05URVhULCBlZ2xDb250ZXh0QXR0cmJzKTsKKyAgICBpZiAoIWNv
bnRleHQpCisgICAgICAgIHJldHVybiAwOworCisgICAgUGl4bWFwIHBpeG1hcCA9IFhDcmVhdGVQ
aXhtYXAoc2hhcmVkRGlzcGxheSgpLCBEZWZhdWx0Um9vdFdpbmRvdyhzaGFyZWREaXNwbGF5KCkp
LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgaWYgKCFwaXhtYXApCisgICAgICAgIHJldHVy
biAwOworCisgICAgRUdMU3VyZmFjZSBlZ2xQaXhtYXBTdXJmYWNlID0gZWdsQ3JlYXRlUGl4bWFw
U3VyZmFjZShzaGFyZWRFR0xEaXNwbGF5KCksIGVnbENvbmZpZ3NbMF0sIHBpeG1hcCwgMCk7Cisg
ICAgaWYgKCFlZ2xQaXhtYXBTdXJmYWNlKSB7CisgICAgICAgIFhGcmVlUGl4bWFwKHNoYXJlZERp
c3BsYXkoKSwgcGl4bWFwKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJu
IG5ldyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKGNvbnRleHQsIHBpeG1hcCwgZWdsUGl4bWFw
U3VyZmFjZSk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWwoRUdMQ29udGV4dCBjb250ZXh0LCBFR0xTdXJmYWNlIHBidWZmZXJTdXJmYWNl
KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3BidWZmZXJTdXJmYWNlKHBidWZm
ZXJTdXJmYWNlKQorICAgICwgbV9waXhtYXBTdXJmYWNlKDApCisgICAgLCBtX3BpeG1hcCgwKQor
eworfQorCitHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVy
bmFsKEVHTENvbnRleHQgY29udGV4dCwgUGl4bWFwIHBpeG1hcCwgRUdMU3VyZmFjZSBwaXhtYXBT
dXJmYWNlKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3BidWZmZXJTdXJmYWNl
KDApCisgICAgLCBtX3BpeG1hcFN1cmZhY2UocGl4bWFwU3VyZmFjZSkKKyAgICAsIG1fcGl4bWFw
KHBpeG1hcCkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6fkdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWwoKQoreworICAgIGlmIChtX2NvbnRleHQpIHsKKyAgICAgICAgLy8gVGhp
cyBtYXkgYmUgbmVjZXNzYXJ5IHRvIHByZXZlbnQgY3Jhc2hlcyB3aXRoIE5WaWRpYSdzIGNsb3Nl
ZCBzb3VyY2UgZHJpdmVycy4gT3JpZ2luYWxseQorICAgICAgICAvLyBmcm9tIE1vemlsbGEncyAz
RCBjYW52YXMgaW1wbGVtZW50YXRpb24gYXQ6IGh0dHA6Ly9iaXRidWNrZXQub3JnL2lsbWFyaS9j
YW52YXMzZC8KKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIDApOworCisgICAgICAgIGVnbE1ha2VDdXJyZW50KHNoYXJlZEVHTERpc3BsYXkoKSwgMCwg
MCwgMCk7CisgICAgICAgIGVnbERlc3Ryb3lDb250ZXh0KHNoYXJlZEVHTERpc3BsYXkoKSwgbV9j
b250ZXh0KTsKKyAgICAgICAgbV9jb250ZXh0ID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9wYnVm
ZmVyU3VyZmFjZSkgeworICAgICAgICBlZ2xEZXN0cm95U3VyZmFjZShzaGFyZWRFR0xEaXNwbGF5
KCksIG1fcGJ1ZmZlclN1cmZhY2UpOworICAgICAgICBtX3BidWZmZXJTdXJmYWNlID0gMDsKKyAg
ICB9CisgICAgaWYgKG1fcGl4bWFwU3VyZmFjZSkgeworICAgICAgICBlZ2xEZXN0cm95U3VyZmFj
ZShzaGFyZWRFR0xEaXNwbGF5KCksIG1fcGl4bWFwU3VyZmFjZSk7CisgICAgICAgIG1fcGl4bWFw
U3VyZmFjZSA9IDA7CisgICAgfQorICAgIGlmIChtX3BpeG1hcCkgeworICAgICAgICBYRnJlZVBp
eG1hcChzaGFyZWREaXNwbGF5KCksIG1fcGl4bWFwKTsKKyAgICAgICAgbV9waXhtYXAgPSAwOwor
ICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjptYWtlQ29udGV4dEN1
cnJlbnQoKQoreworICAgIGlmIChlZ2xHZXRDdXJyZW50Q29udGV4dCgpID09IG1fY29udGV4dCkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKG1fcGJ1ZmZlclN1cmZhY2UpIHsKKyAgICAgICAgZWdsTWFrZUN1cnJlbnQoc2hhcmVk
RUdMRGlzcGxheSgpLCBtX3BidWZmZXJTdXJmYWNlLCBtX3BidWZmZXJTdXJmYWNlLCBtX2NvbnRl
eHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZWdsTWFrZUN1cnJlbnQoc2hhcmVk
RUdMRGlzcGxheSgpLCBtX3BpeG1hcFN1cmZhY2UsIG1fcGl4bWFwU3VyZmFjZSwgbV9jb250ZXh0
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFX1dFQkdM
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbEVHTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsRUdMLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbEVHTC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ2hhbmdT
ZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZQorICogIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT
QQorICovCisKKyNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbEVHTF9oCisjZGVmaW5l
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWxFR0xfaAorCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKwordHlwZWRlZiB2b2lkKiBFR0xDb25maWc7Cit0eXBlZGVmIHZvaWQqIEVHTENvbnRl
eHQ7Cit0eXBlZGVmIHZvaWQqIEVHTERpc3BsYXk7Cit0eXBlZGVmIHZvaWQqIEVHTFN1cmZhY2U7
Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgR0x1Ynl0ZTsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBQ
aXhtYXA7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7
CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwgeworICAgIHB1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzREludGVybmFsPiBjcmVhdGUoKTsKKyAg
ICB+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpOworICAgIHZvaWQgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisKKyAgICBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQz
RDsKKyAgICAKKyAgICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCogY3JlYXRlUGJ1
ZmZlckNvbnRleHQoKTsKKyAgICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCogY3Jl
YXRlUGl4bWFwQ29udGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoRUdMQ29u
dGV4dCwgRUdMU3VyZmFjZSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChFR0xDb250
ZXh0LCBQaXhtYXAsIEVHTFN1cmZhY2UpOworCisgICAgc3RhdGljIHZvaWQgYWRkQWN0aXZlR3Jh
cGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgc3RhdGljIHZvaWQgcmVtb3Zl
QWN0aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgc3RhdGljIHZv
aWQgY2xlYW51cEFjdGl2ZUNvbnRleHRzQXRFeGl0KCk7CisKKyAgICBFR0xDb250ZXh0IG1fY29u
dGV4dDsKKyAgICBFR0xTdXJmYWNlIG1fcGJ1ZmZlclN1cmZhY2U7CisgICAgRUdMU3VyZmFjZSBt
X3BpeG1hcFN1cmZhY2U7CisgICAgUGl4bWFwIG1fcGl4bWFwOworfTsKKworfQorCisjZW5kaWYg
Ly8gR3JhcGhpY3NDb250ZXh0M0RJdGVybmFsRUdMX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMLmNwcAkocmV2aXNpb24gOTI2NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMywyMiArMzMsOCBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKIAotI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAiQXJyYXlCdWZmZXJW
aWV3LmgiCi0jaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKLSNpbmNsdWRlICJDYW52YXNSZW5kZXJp
bmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCi0jaW5jbHVkZSAi
RmxvYXQzMkFycmF5LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
SFRNTENhbnZhc0VsZW1lbnQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkludDMyQXJyYXkuaCIKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotI2luY2x1ZGUgIlVpbnQ4QXJyYXkuaCIKLSNpbmNsdWRlIDxjc3RyaW5nPgot
I2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KIAogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KQEAgLTYwLDMw
ICs0Niw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKLXsKLSAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMg
PSBnZXRFeHRlbnNpb25zKCk7Ci0gICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgewotICAgICAgICBp
ZiAoZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpKSB7
Ci0gICAgICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfcGFja2VkX2Rl
cHRoX3N0ZW5jaWwiKTsKLSAgICAgICAgICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5jaWwgaXMg
dHJ1ZS4KLSAgICAgICAgICAgIG1fYXR0cnMuZGVwdGggPSB0cnVlOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIG1fYXR0cnMuc3RlbmNpbCA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAobV9h
dHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgYm9vbCBpc1ZhbGlkVmVuZG9yID0gdHJ1ZTsKLSAg
ICAgICAgLy8gQ3VycmVudGx5IGluIE1hYyB3ZSBvbmx5IHR1cm4gb24gYW50aWFsaWFzIGlmIHZl
bmRvciBpcyBOVklESUEuCi0gICAgICAgIGNvbnN0IGNoYXIqIHZlbmRvciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfVkVORE9SKSk7Ci0gICAgICAgIGlm
ICghc3RkOjpzdHJzdHIodmVuZG9yLCAiTlZJRElBIikpCi0gICAgICAgICAgICBpc1ZhbGlkVmVu
ZG9yID0gZmFsc2U7Ci0gICAgICAgIGlmICghaXNWYWxpZFZlbmRvciB8fCAhZXh0ZW5zaW9ucy0+
c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikpCi0gICAgICAgICAg
ICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBl
eHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBs
ZSIpOwotICAgIH0KLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFJlbmRlcmluZ1Jl
c3VsdHModW5zaWduZWQgY2hhciAqcGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSkKIHsKICAgICBpZiAo
cGl4ZWxzU2l6ZSA8IG1fY3VycmVudFdpZHRoICogbV9jdXJyZW50SGVpZ2h0ICogNCkKQEAgLTEy
Miw1NSArODQsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUmVuZGVyaW5nUmVzCiAg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5k
RkJPKTsKIH0KIAotI2lmICFQTEFURk9STShRVCkKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQpCi17Ci0gICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygp
OwotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7Ci0KLSAg
ICBpbnQgcm93Qnl0ZXMgPSBtX2N1cnJlbnRXaWR0aCAqIDQ7Ci0gICAgaW50IHRvdGFsQnl0ZXMg
PSByb3dCeXRlcyAqIG1fY3VycmVudEhlaWdodDsKLQotICAgIE93bkFycmF5UHRyPHVuc2lnbmVk
IGNoYXI+IHBpeGVscyA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJbdG90YWxCeXRl
c10pOwotICAgIGlmICghcGl4ZWxzKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZWFkUmVuZGVy
aW5nUmVzdWx0cyhwaXhlbHMuZ2V0KCksIHRvdGFsQnl0ZXMpOwotCi0gICAgaWYgKCFtX2F0dHJz
LnByZW11bHRpcGxpZWRBbHBoYSkgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFs
Qnl0ZXM7IGkgKz0gNCkgewotICAgICAgICAgICAgLy8gUHJlbXVsdGlwbHkgYWxwaGEKLSAgICAg
ICAgICAgIHBpeGVsc1tpICsgMF0gPSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsgMF0gKiBwaXhl
bHNbaSArIDNdIC8gMjU1KTsKLSAgICAgICAgICAgIHBpeGVsc1tpICsgMV0gPSBzdGQ6Om1pbigy
NTUsIHBpeGVsc1tpICsgMV0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKLSAgICAgICAgICAgIHBp
eGVsc1tpICsgMl0gPSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsgMl0gKiBwaXhlbHNbaSArIDNd
IC8gMjU1KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdl
dCgpLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
Y2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgp
LT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0jZW5kaWYKLQotUGFzc1JlZlB0cjxJbWFnZURhdGE+
IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCi17
Ci0gICAgLy8gUmVhZGluZyBwcmVtdWx0aXBsaWVkIGFscGhhIHdvdWxkIGludm9sdmUgdW5wcmVt
dWx0aXBseWluZywgd2hpY2ggaXMKLSAgICAvLyBsb3NzeQotICAgIGlmIChtX2F0dHJzLnByZW11
bHRpcGxpZWRBbHBoYSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKG1fY3VycmVudFdpZHRoLCBt
X2N1cnJlbnRIZWlnaHQpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURhdGEt
PmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7Ci0gICAgaW50IHRvdGFsQnl0ZXMgPSA0ICogbV9jdXJy
ZW50V2lkdGggKiBtX2N1cnJlbnRIZWlnaHQ7Ci0KLSAgICByZWFkUmVuZGVyaW5nUmVzdWx0cyhw
aXhlbHMsIHRvdGFsQnl0ZXMpOwotCi0gICAgLy8gQ29udmVydCB0byBSR0JBCi0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCi0gICAgICAgIHN0ZDo6c3dhcChwaXhl
bHNbaV0sIHBpeGVsc1tpICsgMl0pOwotCi0gICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7
Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQogewogICAgIGlmICghcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKQpAQCAtMzI1LDEx
ICsyMzgsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0CiAgICAg
OjpnbEZsdXNoKCk7CiB9CiAKLUludFNpemUgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVybmFs
RnJhbWVidWZmZXJTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZShtX2N1cnJlbnRX
aWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cHJl
cGFyZVRleHR1cmUoKQogewogICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKQEAgLTM1MSwzNSAr
MjU5LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUoKQogICAgIG1f
bGF5ZXJDb21wb3NpdGVkID0gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWN0
aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIG1fYWN0aXZlVGV4dHVyZSA9IHRleHR1cmU7Ci0gICAgOjpnbEFjdGl2ZVRleHR1cmUo
dGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcihQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFT
U0VSVChwcm9ncmFtKTsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICA6OmdsQXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJU
KHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCaW5kQXR0cmli
TG9jYXRpb24ocHJvZ3JhbSwgaW5kZXgsIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNE
T2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmlu
ZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIp
CiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CkBAIC0zOTQsMTU4ICsyNzMsNiBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIoCiAgICAgfQogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZv
cm0zRE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCByZW5kZXJidWZmZXIpOwotfQotCi0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxh
dGZvcm0zRE9iamVjdCB0ZXh0dXJlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGlmIChtX2FjdGl2ZVRleHR1cmUgJiYgdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAg
IG1fYm91bmRUZXh0dXJlMCA9IHRleHR1cmU7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKHRhcmdldCwg
dGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kQ29sb3IoR0MzRGNs
YW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBh
bHBoYSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmxlbmRDb2xvcihy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJs
ZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICA6OmdsQmxlbmRFcXVhdGlvbihtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVB
bHBoYSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmxlbmRFcXVhdGlv
blNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFj
dG9yKTsKLX0gICAgICAgCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFy
YXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwg
R0MzRGVudW0gZHN0QWxwaGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bEJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwg
R0MzRHNpemVpcHRyIHNpemUsIEdDM0RlbnVtIHVzYWdlKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwg
ZGF0YSwgdXNhZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRh
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBj
b25zdCB2b2lkKiBkYXRhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xC
dWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsKLX0KLQotR0MzRGVudW0g
R3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsQ2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1c0VYVCh0YXJnZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpj
bGVhckNvbG9yKEdDM0RjbGFtcGYgciwgR0MzRGNsYW1wZiBnLCBHQzNEY2xhbXBmIGIsIEdDM0Rj
bGFtcGYgYSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ2xlYXJDb2xv
cihyLCBnLCBiLCBhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXIoR0MzRGJp
dGZpZWxkIG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbENsZWFy
KG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKEdDM0RjbGFt
cGYgZGVwdGgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbENsZWFyRGVw
dGgoZGVwdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhclN0ZW5jaWwoR0Mz
RGludCBzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xDbGVhclN0ZW5j
aWwocyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbG9yTWFzayhHQzNEYm9vbGVh
biByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBh
bHBoYSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ29sb3JNYXNrKHJl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29t
cGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hhZGVy
KTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGludCBHTHNoYWRlclR5cGU7Ci0g
ICAgQU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGU7Ci0KLSAgICBnbEdldFNoYWRlcml2KHNoYWRl
ciwgU0hBREVSX1RZUEUsICZHTHNoYWRlclR5cGUpOwotICAgIAotICAgIGlmIChHTHNoYWRlclR5
cGUgPT0gVkVSVEVYX1NIQURFUikKLSAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX1ZF
UlRFWDsKLSAgICBlbHNlIGlmIChHTHNoYWRlclR5cGUgPT0gRlJBR01FTlRfU0hBREVSKQotICAg
ICAgICBzaGFkZXJUeXBlID0gU0hBREVSX1RZUEVfRlJBR01FTlQ7Ci0gICAgZWxzZQotICAgICAg
ICByZXR1cm47IC8vIEludmFsaWQgc2hhZGVyIHR5cGUuCi0KLSAgICBIYXNoTWFwPFBsYXRmb3Jt
M0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJT
b3VyY2VNYXAuZmluZChzaGFkZXIpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJj
ZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2hhZGVyU291cmNlRW50cnkmIGVu
dHJ5ID0gcmVzdWx0LT5zZWNvbmQ7Ci0KLSAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJj
ZTsKLSAgICBTdHJpbmcgc2hhZGVySW5mb0xvZzsKLQotICAgIGJvb2wgaXNWYWxpZCA9IG1fY29t
cGlsZXIudmFsaWRhdGVTaGFkZXJTb3VyY2UoZW50cnkuc291cmNlLnV0ZjgoKS5kYXRhKCksIHNo
YWRlclR5cGUsIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsIHNoYWRlckluZm9Mb2cpOwotCi0gICAg
ZW50cnkubG9nID0gc2hhZGVySW5mb0xvZzsKLSAgICBlbnRyeS5pc1ZhbGlkID0gaXNWYWxpZDsK
LQotICAgIGlmICghaXNWYWxpZCkKLSAgICAgICAgcmV0dXJuOyAvLyBTaGFkZXIgZGlkbid0IHZh
bGlkYXRlLCBkb24ndCBtb3ZlIGZvcndhcmQgd2l0aCBjb21waWxpbmcgdHJhbnNsYXRlZCBzb3Vy
Y2UgICAgCi0KLSAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFk
ZXJTb3VyY2UubGVuZ3RoKCk7Ci0KLSAgICBjb25zdCBDU3RyaW5nJiB0cmFuc2xhdGVkU2hhZGVy
Q1N0cmluZyA9IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UudXRmOCgpOwotICAgIGNvbnN0IGNoYXIq
IHRyYW5zbGF0ZWRTaGFkZXJQdHIgPSB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZy5kYXRhKCk7Ci0g
ICAgCi0gICAgOjpnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZ0cmFuc2xhdGVkU2hhZGVyUHRy
LCAmdHJhbnNsYXRlZFNoYWRlckxlbmd0aCk7Ci0gICAgCi0gICAgOjpnbENvbXBpbGVTaGFkZXIo
c2hhZGVyKTsKLSAgICAKLSAgICBpbnQgR0xDb21waWxlU3VjY2VzczsKLSAgICAKLSAgICA6Omds
R2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxFX1NUQVRVUywgJkdMQ29tcGlsZVN1Y2Nlc3MpOwot
ICAgIAotICAgIC8vIEFTU0VSVCB0aGF0IEFOR0xFIGdlbmVyYXRlZCBHTFNMIHdpbGwgYmUgYWNj
ZXB0ZWQgYnkgT3BlbkdMCi0gICAgQVNTRVJUKEdMQ29tcGlsZVN1Y2Nlc3MgPT0gR0xfVFJVRSk7
Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9y
ZGVyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwpAQCAtNTc0LDEzMiArMzAxLDYgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMgogICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEN1bGxGYWNlKG1vZGUpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRGVwdGhGdW5jKGZ1bmMpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxhZykKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRGVwdGhNYXNrKGZsYWcpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFt
cGYgekZhcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRGVwdGhSYW5n
ZSh6TmVhciwgekZhcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRldGFjaFNoYWRl
cihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewot
ICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICA6OmdsRGV0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUoR0MzRGVudW0gY2FwKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEaXNhYmxlKGNhcCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyhH
QzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbERyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1v
ZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbERyYXdFbGVtZW50cyhtb2RlLCBj
b3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJf
dD4ob2Zmc2V0KSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGUoR0MzRGVu
dW0gY2FwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xFbmFibGUoY2Fw
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXko
R0MzRHVpbnQgaW5kZXgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZmluaXNoKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRmluaXNo
KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKCkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRmx1c2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBh
dHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3Qg
YnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xGcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwg
YnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJn
ZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGludCBsZXZlbCkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQodGFyZ2V0
LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbEZyb250RmFjZShtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZW5lcmF0ZU1pcG1hcEVYVCh0YXJnZXQpOwotfQot
Ci1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBpZiAo
IXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgR0xpbnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9n
cmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhBdHRyaWJ1dGVTaXplKTsK
LSAgICBHTGNoYXIgbmFtZVttYXhBdHRyaWJ1dGVTaXplXTsgLy8gR0xfQUNUSVZFX0FUVFJJQlVU
RV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24KLSAgICBHTHNpemVpIG5hbWVM
ZW5ndGggPSAwOwotICAgIEdMaW50IHNpemUgPSAwOwotICAgIEdMZW51bSB0eXBlID0gMDsKLSAg
ICA6OmdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBtYXhBdHRyaWJ1dGVTaXplLCAm
bmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKLSAgICBpZiAoIW5hbWVMZW5ndGgpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbmZvLm5hbWUgPSBTdHJpbmcobmFtZSwgbmFtZUxl
bmd0aCk7Ci0gICAgaW5mby50eXBlID0gdHlwZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotICAg
IHJldHVybiB0cnVlOwotfQotICAgIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZl
VW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJ
bmZvJiBpbmZvKQogewogICAgIGlmICghcHJvZ3JhbSkgewpAQCAtNzIyLDQ4MyArMzIzLDQ2IEBA
IGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0KICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNEc2l6ZWkqIGNvdW50
LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVh
ZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCiB7Ci0g
ICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFM
VUUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIC8vIEZJWE1FOiByZW1vdmUgdGhlIHR3
byBnbEZsdXNoIGNhbGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGkuZS4sCisgICAg
Ly8gYWxsIHByZXZpb3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgcmVh
ZGluZyBwaXhlbHMuCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldEF0dGFj
aGVkU2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOworICAgIDo6Z2xG
bHVzaCgpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVs
dGlzYW1wbGVGQk8pIHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZS
QU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgOjpnbEJs
aXRGcmFtZWJ1ZmZlckVYVCh4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHgsIHksIHggKyB3
aWR0aCwgeSArIGhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKKyAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAg
ICAgICAgOjpnbEZsdXNoKCk7CisgICAgfQorICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFz
ICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwogfQogCi1p
bnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVu
ZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCiB7Ci0gICAgaWYgKCFwcm9ncmFt
KQotICAgICAgICByZXR1cm4gLTE7Ci0KICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBy
ZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7
CisgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgeworICAgIGNhc2UgREVQVEhfU1RFTkNJTDoK
KyAgICAgICAgaW50ZXJuYWxmb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBERVBUSF9DT01QT05FTlQxNjoKKyAgICAgICAgaW50ZXJuYWxm
b3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUkdC
QTQ6CisgICAgY2FzZSBSR0I1X0ExOgorICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX1JHQkE7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUkdCNTY1OgorICAgICAgICBpbnRlcm5hbGZvcm1h
dCA9IEdMX1JHQjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIDo6Z2xSZW5kZXJidWZmZXJT
dG9yYWdlRVhUKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCi1H
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4
dEF0dHJpYnV0ZXMoKQotewotICAgIHJldHVybiBtX2F0dHJzOwotfQotCi1HQzNEZW51bSBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0RXJyb3IoKQotewotICAgIGlmIChtX3N5bnRoZXRpY0Vycm9ycy5z
aXplKCkgPiAwKSB7Ci0gICAgICAgIExpc3RIYXNoU2V0PEdDM0RlbnVtPjo6aXRlcmF0b3IgaXRl
ciA9IG1fc3ludGhldGljRXJyb3JzLmJlZ2luKCk7Ci0gICAgICAgIEdDM0RlbnVtIGVyciA9ICpp
dGVyOwotICAgICAgICBtX3N5bnRoZXRpY0Vycm9ycy5yZW1vdmUoaXRlcik7Ci0gICAgICAgIHJl
dHVybiBlcnI7Ci0gICAgfQotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJu
IDo6Z2xHZXRFcnJvcigpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFN0cmlu
ZyhHQzNEZW51bSBuYW1lKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVy
biBTdHJpbmcoKGNvbnN0IGNoYXIqKSA6OmdsR2V0U3RyaW5nKG5hbWUpKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsK
LX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVyKFBsYXRmb3JtM0RP
YmplY3QgYnVmZmVyKQotewotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gR0xfRkFM
U0U7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbElzQnVmZmVy
KGJ1ZmZlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQo
R0MzRGVudW0gY2FwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6
OmdsSXNFbmFibGVkKGNhcCk7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjpp
c0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCi17Ci0gICAgaWYgKCFm
cmFtZWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVmZmVyKTsK
LX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzUHJvZ3JhbShQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0pCi17Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gR0xf
RkFMU0U7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbElzUHJv
Z3JhbShwcm9ncmFtKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVu
ZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIGlmICghcmVu
ZGVyYnVmZmVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVyRVhUKHJlbmRlcmJ1ZmZlcik7
Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcihQbGF0Zm9ybTNE
T2JqZWN0IHNoYWRlcikKLXsKLSAgICBpZiAoIXNoYWRlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xJc1NoYWRl
cihzaGFkZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJl
KFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgICAg
IHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVy
biA6OmdsSXNUZXh0dXJlKHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjps
aW5lV2lkdGgoR0MzRGZsb2F0IHdpZHRoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIDo6Z2xMaW5lV2lkdGgod2lkdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjps
aW5rUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgQVNTRVJUKHByb2dy
YW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xMaW5rUHJvZ3JhbShwcm9n
cmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkoR0MzRGVudW0g
cG5hbWUsIEdDM0RpbnQgcGFyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
OjpnbFBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KGZhY3Rvciwg
dW5pdHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkKLXsKLSAgICAvLyBGSVhNRTogcmVt
b3ZlIHRoZSB0d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBp
LmUuLAotICAgIC8vIGFsbCBwcmV2aW91cyByZW5kZXJpbmcgY2FsbHMgc2hvdWxkIGJlIGRvbmUg
YmVmb3JlIHJlYWRpbmcgcGl4ZWxzLgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xGbHVzaCgpOwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1f
bXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFE
X0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICAgICAgOjpn
bEJsaXRGcmFtZWJ1ZmZlckVYVCh4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHgsIHksIHgg
KyB3aWR0aCwgeSArIGhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKLSAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsK
LSAgICAgICAgOjpnbEZsdXNoKCk7Ci0gICAgfQotICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7Ci0gICAgaWYgKG1fYXR0cnMuYW50aWFs
aWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKLSAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQotewotICAg
IC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBkZXNrdG9wIE9wZW5HTC4gV2Ug
bmVlZCB0byBoYXZlIGlmZGVmcyBmb3IgdGhlIGRpZmZlcmVudCBHTCB2YXJpYW50cwotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIC8vOjpnbFJlbGVhc2VTaGFkZXJDb21waWxlcigpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBzd2l0Y2ggKGlu
dGVybmFsZm9ybWF0KSB7Ci0gICAgY2FzZSBERVBUSF9TVEVOQ0lMOgotICAgICAgICBpbnRlcm5h
bGZvcm1hdCA9IEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIERFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX0RFUFRI
X0NPTVBPTkVOVDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSR0JBNDoKLSAgICBjYXNlIFJH
QjVfQTE6Ci0gICAgICAgIGludGVybmFsZm9ybWF0ID0gR0xfUkdCQTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBSR0I1NjU6Ci0gICAgICAgIGludGVybmFsZm9ybWF0ID0gR0xfUkdCOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQodGFyZ2V0
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVy
dCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsU2FtcGxlQ292ZXJhZ2Uo
dmFsdWUsIGludmVydCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IoR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsU2Npc3Nvcih4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFBsYXRm
b3JtM0RPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBBU1NFUlQo
c2hhZGVyKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgU2hhZGVyU291cmNl
RW50cnkgZW50cnk7Ci0KLSAgICBlbnRyeS5zb3VyY2UgPSBzdHJpbmc7Ci0KLSAgICBtX3NoYWRl
clNvdXJjZU1hcC5zZXQoc2hhZGVyLCBlbnRyeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNr
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTdGVuY2lsRnVuYyhmdW5j
LCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuY1Nl
cGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWlu
dCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTdGVuY2lsRnVu
Y1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxNYXNrKG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2sp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJh
dGUoZmFjZSwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcChH
QzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3Mp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51
bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxPcFNlcGFyYXRlKGZh
Y2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRl
eFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHZh
bHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJm
KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4
UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHZhbHVl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKHRh
cmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9y
bTFmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBh
cnJheSwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
OjpnbFVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTJmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwgR0Mz
RGZsb2F0IHYxKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3Jt
MmYobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUp
Ci17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6
ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2
MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmdihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICAv
LyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMwotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm00Zihsb2NhdGlv
biwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQot
ewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUs
IGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RpbnQgdjApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
OjpnbFVuaWZvcm0xaShsb2NhdGlvbiwgdjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkg
c2l6ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTFpdihs
b2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtMmkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogbGVu
Z3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIDo6Z2xVbmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYw
LCBHQzNEaW50IHYxLCBHQzNEaW50IHYyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIDo6Z2xVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFycmF5
LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEg
bXVsdGlwbGUgb2YgMwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3Jt
M2l2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBHQzNE
aW50IHYyLCBHQzNEaW50IHYzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiBhcnJheSwg
R0MzRHNpemVpIHNpemUpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11
bHRpcGxlIG9mIDQKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTRp
dihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtTWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwg
R0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0
aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICA6OmdsVW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJh
eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNE
c2l6ZWkgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlw
bGUgb2YgOQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtTWF0cml4
M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQotewotICAgIC8v
IEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNgotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0
cmFuc3Bvc2UsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3Jh
bShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgOjpnbFVzZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgQVNT
RVJUKHByb2dyYW0pOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZhbGlk
YXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4
QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICA6OmdsVmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNE
ZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0
ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYx
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZihp
bmRleCwgdjAsIHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmli
MmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdD
M0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbFZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0Mz
RGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICA6OmdsVmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYz
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBz
aXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3Ry
aWRlLCBHQzNEaW50cHRyIG9mZnNldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwg
c3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90Pihv
ZmZzZXQpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWln
aHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFudihHQzNEZW51bSBw
bmFtZSwgR0MzRGJvb2xlYW4qIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIDo6Z2xHZXRCb29sZWFudihwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBu
YW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsR2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCog
dmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldEZsb2F0dihw
bmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1l
bnQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBpZiAoYXR0YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQp
Ci0gICAgICAgIGF0dGFjaG1lbnQgPSBERVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVOQ0lMX0FU
VEFDSE1FTlQsIGVpdGhlciB3b3Jrcy4KLSAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCogdmFsdWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VydihHQzNEZW51bSBw
bmFtZSwgR0MzRGludCogdmFsdWUpCiB7CiAgICAgLy8gTmVlZCB0byBlbXVsYXRlIE1BWF9GUkFH
TUVOVC9WRVJURVhfVU5JRk9STV9WRUNUT1JTIGFuZCBNQVhfVkFSWUlOR19WRUNUT1JTCiAgICAg
Ly8gYmVjYXVzZSBkZXNrdG9wIEdMJ3MgY29ycmVzcG9uZGluZyBxdWVyaWVzIHJldHVybiB0aGUg
bnVtYmVyIG9mIGNvbXBvbmVudHMKQEAgLTEyMjMsMTc5ICszODcsNiBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRJbnRlZ2VydihHQzNECiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRQcm9ncmFtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBw
bmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
OjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBwbmFtZSwgdmFsdWUpOwotfQotCi1TdHJpbmcgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBHTGludCBsZW5ndGg7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9JTkZP
X0xPR19MRU5HVEgsICZsZW5ndGgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4g
IiI7Ci0KLSAgICBHTHNpemVpIHNpemU7Ci0gICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZh
c3RNYWxsb2MobGVuZ3RoKTsKLQotICAgIDo6Z2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBs
ZW5ndGgsICZzaXplLCBpbmZvKTsKLSAgICBTdHJpbmcgcyhpbmZvKTsKLSAgICBmYXN0RnJlZShp
bmZvKTsKLSAgICByZXR1cm4gczsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhUKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsK
LQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2Jq
ZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNl
TWFwLmZpbmQoc2hhZGVyKTsKLSAgICAKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgICAgIGNh
c2UgREVMRVRFX1NUQVRVUzoKLSAgICAgICAgY2FzZSBTSEFERVJfVFlQRToKLSAgICAgICAgICAg
IC8vIExldCBPcGVuR0wgaGFuZGxlIHRoZXNlLgotICAgICAgICAKLSAgICAgICAgICAgIDo6Z2xH
ZXRTaGFkZXJpdihzaGFkZXIsIHBuYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgCi0gICAgICAgIGNhc2UgQ09NUElMRV9TVEFUVVM6Ci0gICAgICAgICAgICBpZiAocmVz
dWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgKCp2YWx1
ZSkgPSBzdGF0aWNfY2FzdDxpbnQ+KGZhbHNlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgICAgKCp2YWx1ZSkgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHJlc3VsdC0+c2Vjb25kLmlzVmFsaWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIAotICAgICAgICBjYXNlIElORk9fTE9HX0xFTkdUSDoKLSAgICAgICAgICAgIGlmIChyZXN1
bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICAoKnZhbHVl
KSA9IDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgICAgICgqdmFsdWUpID0gZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpLmxlbmd0aCgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBjYXNlIFNIQURFUl9TT1VS
Q0VfTEVOR1RIOgotICAgICAgICAgICAgKCp2YWx1ZSkgPSBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVy
KS5sZW5ndGgoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfRU5VTSk7Ci0gICAgfQot
fQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0z
RE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLQotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNl
RW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7
Ci0KLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICAg
cmV0dXJuICIiOwotCi0gICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5ID0gcmVzdWx0LT5zZWNv
bmQ7Ci0KLSAgICAgaWYgKGVudHJ5LmlzVmFsaWQpIHsKLSAgICAgICAgIEdMaW50IGxlbmd0aDsK
LSAgICAgICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxl
bmd0aCk7Ci0gICAgICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgICAgICByZXR1cm4gIiI7Ci0K
LSAgICAgICAgIEdMc2l6ZWkgc2l6ZTsKLSAgICAgICAgIEdMY2hhciogaW5mbyA9IChHTGNoYXIq
KSBmYXN0TWFsbG9jKGxlbmd0aCk7Ci0KLSAgICAgICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNo
YWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7Ci0KLSAgICAgICAgIFN0cmluZyBzKGluZm8pOwot
ICAgICAgICAgZmFzdEZyZWUoaW5mbyk7Ci0gICAgICAgICByZXR1cm4gczsKLSAgICAgfSBlbHNl
Ci0gICAgICAgICByZXR1cm4gZW50cnkubG9nOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NF
UlQoc2hhZGVyKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgSGFzaE1hcDxQ
bGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1f
c2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLQotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFk
ZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIHJldHVybiByZXN1
bHQtPnNlY29uZC5zb3VyY2U7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4
UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2
YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0VGV4UGFyYW1l
dGVyZnYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRUZXhQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0VGV4
UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIDo6Z2xHZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgOjpnbEdldFVuaWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUp
OwotfQotCi1HQzNEaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJU
KHByb2dyYW0pOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xH
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsR2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7
Ci19Ci0KLUdDM0RzaXplaXB0ciBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zm
c2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLQotICAgIEdMdm9pZCogcG9pbnRlciA9IDA7Ci0gICAgOjpnbEdldFZlcnRleEF0
dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOwotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxHQzNEc2l6ZWlwdHI+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKTsK
LX0KLQogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKICAgICBpZiAod2lkdGggJiYgaGVpZ2h0
ICYmICFwaXhlbHMpIHsKQEAgLTE0MTUsMTIxICs0MDYsNiBAQCBib29sIEdyYXBoaWNzQ29udGV4
dDNEOjp0ZXhJbWFnZTJEKEdDM0RlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEaW50IHhvZmYsIEdDM0RpbnQgeW9mZiwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVs
cykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIC8vIEZJWE1FOiB3ZSB3aWxs
IG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGlt
YWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZQotICAgIDo6Z2xU
ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgcGl4ZWxzKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBH
THVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5CdWZmZXJzKDEsICZvKTsKLSAgICByZXR1cm4gbzsKLX0K
LQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIo
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBvID0gMDsKLSAgICBn
bEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRmb3Jt
M0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbENyZWF0ZVByb2dyYW0oKTsKLX0KLQotUGxh
dGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5S
ZW5kZXJidWZmZXJzRVhUKDEsICZvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGxhdGZvcm0zRE9i
amVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBl
ID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hB
REVSKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlVGV4
dHVyZSgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IG8gPSAwOwot
ICAgIGdsR2VuVGV4dHVyZXMoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9y
bTNET2JqZWN0IGZyYW1lYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZmcmFtZWJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFt
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRm
b3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVy
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRl
cik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm0z
RE9iamVjdCB0ZXh0dXJlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVs
ZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
eW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvcikKLXsKLSAgICBtX3N5bnRoZXRpY0Vycm9y
cy5hZGQoZXJyb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrQ29udGV4dENo
YW5nZWQoKQotewotICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQotewotICAgIG1fbGF5ZXJDb21w
b3NpdGVkID0gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3Np
dGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9sYXllckNvbXBvc2l0ZWQ7Ci19Ci0KLUV4dGVu
c2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQotewotICAgIGlmICgh
bV9leHRlbnNpb25zKQotICAgICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0ZW5z
aW9uczNET3BlbkdMKHRoaXMpKTsKLSAgICByZXR1cm4gbV9leHRlbnNpb25zLmdldCgpOwotfQot
CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0xCYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEJhc2UuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxRdEdsb2JhbD4KKyNlbmRpZgor
CisjaWYgRU5BQkxFKFdFQkdMKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKwor
I2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisj
aW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMz
RE9wZW5HTC5oIgorI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnQzMkFycmF5
LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJVaW50OEFycmF5Lmgi
CisjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUg
PHd0Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lm
IFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KKyNlbGlmIFBMQVRGT1JNKEdU
SykKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VsaWYgUExBVEZPUk0oUVQpCisjaW5jbHVk
ZSA8Y2Fpcm8vT3BlbkdMU2hpbXMuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcygpCit7CisgICAgRXh0
ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOworICAgIGlmIChtX2F0dHJz
LnN0ZW5jaWwpIHsKKyAgICAgICAgaWYgKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfcGFj
a2VkX2RlcHRoX3N0ZW5jaWwiKSkgeworICAgICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5h
YmxlZCgiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisgICAgICAgICAgICAvLyBGb3Jj
ZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCisgICAgICAgICAgICBtX2F0dHJzLmRlcHRoID0g
dHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2F0dHJzLnN0ZW5jaWwgPSBmYWxz
ZTsKKyAgICB9CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIGJvb2wgaXNW
YWxpZFZlbmRvciA9IHRydWU7CisgICAgICAgIC8vIEN1cnJlbnRseSBpbiBNYWMgd2Ugb25seSB0
dXJuIG9uIGFudGlhbGlhcyBpZiB2ZW5kb3IgaXMgTlZJRElBLgorICAgICAgICBjb25zdCBjaGFy
KiB2ZW5kb3IgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdM
X1ZFTkRPUikpOworICAgICAgICBpZiAoIXN0ZDo6c3Ryc3RyKHZlbmRvciwgIk5WSURJQSIpKQor
ICAgICAgICAgICAgaXNWYWxpZFZlbmRvciA9IGZhbHNlOworICAgICAgICBpZiAoIWlzVmFsaWRW
ZW5kb3IgfHwgIWV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0
aXNhbXBsZSIpKQorICAgICAgICAgICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVf
ZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKKyAgICB9Cit9CisKKyNpZiAhUExBVEZPUk0oUVQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhD
YW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQoreworICAgIEhUTUxDYW52YXNFbGVtZW50
KiBjYW52YXMgPSBjb250ZXh0LT5jYW52YXMoKTsKKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZm
ZXIgPSBjYW52YXMtPmJ1ZmZlcigpOworCisgICAgaW50IHJvd0J5dGVzID0gbV9jdXJyZW50V2lk
dGggKiA0OworICAgIGludCB0b3RhbEJ5dGVzID0gcm93Qnl0ZXMgKiBtX2N1cnJlbnRIZWlnaHQ7
CisKKyAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiBwaXhlbHMgPSBhZG9wdEFycmF5UHRy
KG5ldyB1bnNpZ25lZCBjaGFyW3RvdGFsQnl0ZXNdKTsKKyAgICBpZiAoIXBpeGVscykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgcmVhZFJlbmRlcmluZ1Jlc3VsdHMocGl4ZWxzLmdldCgpLCB0b3Rh
bEJ5dGVzKTsKKworICAgIGlmICghbV9hdHRycy5wcmVtdWx0aXBsaWVkQWxwaGEpIHsKKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpIHsKKyAgICAgICAgICAg
IC8vIFByZW11bHRpcGx5IGFscGhhCisgICAgICAgICAgICBwaXhlbHNbaSArIDBdID0gc3RkOjpt
aW4oMjU1LCBwaXhlbHNbaSArIDBdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7CisgICAgICAgICAg
ICBwaXhlbHNbaSArIDFdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDFdICogcGl4ZWxzW2kg
KyAzXSAvIDI1NSk7CisgICAgICAgICAgICBwaXhlbHNbaSArIDJdID0gc3RkOjptaW4oMjU1LCBw
aXhlbHNbaSArIDJdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVu
dEhlaWdodCwKKyAgICAgICAgICAgICAgICAgIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWln
aHQoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOworfQorI2Vu
ZGlmCisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQoreworICAgIC8vIFJlYWRpbmcgcHJlbXVsdGlwbGll
ZCBhbHBoYSB3b3VsZCBpbnZvbHZlIHVucHJlbXVsdGlwbHlpbmcsIHdoaWNoIGlzCisgICAgLy8g
bG9zc3kKKyAgICBpZiAobV9hdHRycy5wcmVtdWx0aXBsaWVkQWxwaGEpCisgICAgICAgIHJldHVy
biAwOworCisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVh
dGUoSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KSk7CisgICAgdW5zaWdu
ZWQgY2hhciogcGl4ZWxzID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOworICAg
IGludCB0b3RhbEJ5dGVzID0gNCAqIG1fY3VycmVudFdpZHRoICogbV9jdXJyZW50SGVpZ2h0Owor
CisgICAgcmVhZFJlbmRlcmluZ1Jlc3VsdHMocGl4ZWxzLCB0b3RhbEJ5dGVzKTsKKworICAgIC8v
IENvbnZlcnQgdG8gUkdCQQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSAr
PSA0KQorICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKKworICAg
IHJldHVybiBpbWFnZURhdGEucmVsZWFzZSgpOworfQorCitJbnRTaXplIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIElu
dFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOworICAgIDo6
Z2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjph
dHRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNo
YWRlcikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFk
ZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICA6OmdsQmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRh
KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRh
cmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgOjpnbEJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmpl
Y3QgdGV4dHVyZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9hY3Rp
dmVUZXh0dXJlICYmIHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQorICAgICAgICBtX2JvdW5kVGV4
dHVyZTAgPSB0ZXh0dXJlOworICAgIDo6Z2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRh
cmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCByZW5kZXJidWZm
ZXIpOworfQorCitHQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyhHQzNEZW51bSB0YXJnZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
cmV0dXJuIDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdldCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYg
Z3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBo
YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb24oR0MzRGVudW0g
bW9kZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmxlbmRFcXVhdGlv
bihtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFy
YXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1v
ZGVBbHBoYSk7Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jKEdDM0Rl
bnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgOjpnbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKK30gICAgICAgCisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwg
R0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJsZW5kRnVuY1NlcGFyYXRlKHNy
Y1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIEdD
M0RlbnVtIHVzYWdlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCdWZm
ZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0
IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCdWZmZXJTdWJEYXRhKHRhcmdldCwg
b2Zmc2V0LCBzaXplLCBkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXIo
R0MzRGJpdGZpZWxkIG1hc2spCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bENsZWFyKG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKEdD
M0RjbGFtcGYgciwgR0MzRGNsYW1wZiBnLCBHQzNEY2xhbXBmIGIsIEdDM0RjbGFtcGYgYSkKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ2xlYXJDb2xvcihyLCBnLCBiLCBh
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRl
cHRoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDbGVhckRlcHRoKGRl
cHRoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQg
cykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ2xlYXJTdGVuY2lsKHMp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVk
LCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbENvbG9yTWFzayhyZWQsIGdy
ZWVuLCBibHVlLCBhbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVT
aGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBpbnQgR0xzaGFkZXJUeXBlOworICAgIEFO
R0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlOworCisgICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIFNI
QURFUl9UWVBFLCAmR0xzaGFkZXJUeXBlKTsKKyAgICAKKyAgICBpZiAoR0xzaGFkZXJUeXBlID09
IFZFUlRFWF9TSEFERVIpCisgICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9WRVJURVg7
CisgICAgZWxzZSBpZiAoR0xzaGFkZXJUeXBlID09IEZSQUdNRU5UX1NIQURFUikKKyAgICAgICAg
c2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX0ZSQUdNRU5UOworICAgIGVsc2UKKyAgICAgICAgcmV0
dXJuOyAvLyBJbnZhbGlkIHNoYWRlciB0eXBlLgorCisgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2Jq
ZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNl
TWFwLmZpbmQoc2hhZGVyKTsKKworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAu
ZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9
IHJlc3VsdC0+c2Vjb25kOworCisgICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7Cisg
ICAgU3RyaW5nIHNoYWRlckluZm9Mb2c7CisKKyAgICBib29sIGlzVmFsaWQgPSBtX2NvbXBpbGVy
LnZhbGlkYXRlU2hhZGVyU291cmNlKGVudHJ5LnNvdXJjZS51dGY4KCkuZGF0YSgpLCBzaGFkZXJU
eXBlLCB0cmFuc2xhdGVkU2hhZGVyU291cmNlLCBzaGFkZXJJbmZvTG9nKTsKKworICAgIGVudHJ5
LmxvZyA9IHNoYWRlckluZm9Mb2c7CisgICAgZW50cnkuaXNWYWxpZCA9IGlzVmFsaWQ7CisKKyAg
ICBpZiAoIWlzVmFsaWQpCisgICAgICAgIHJldHVybjsgLy8gU2hhZGVyIGRpZG4ndCB2YWxpZGF0
ZSwgZG9uJ3QgbW92ZSBmb3J3YXJkIHdpdGggY29tcGlsaW5nIHRyYW5zbGF0ZWQgc291cmNlICAg
IAorCisgICAgaW50IHRyYW5zbGF0ZWRTaGFkZXJMZW5ndGggPSB0cmFuc2xhdGVkU2hhZGVyU291
cmNlLmxlbmd0aCgpOworCisgICAgY29uc3QgQ1N0cmluZyYgdHJhbnNsYXRlZFNoYWRlckNTdHJp
bmcgPSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLnV0ZjgoKTsKKyAgICBjb25zdCBjaGFyKiB0cmFu
c2xhdGVkU2hhZGVyUHRyID0gdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcuZGF0YSgpOworICAgIAor
ICAgIDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRy
YW5zbGF0ZWRTaGFkZXJMZW5ndGgpOworICAgIAorICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRl
cik7CisgICAgCisgICAgaW50IEdMQ29tcGlsZVN1Y2Nlc3M7CisgICAgCisgICAgOjpnbEdldFNo
YWRlcml2KHNoYWRlciwgQ09NUElMRV9TVEFUVVMsICZHTENvbXBpbGVTdWNjZXNzKTsKKyAgICAK
KyAgICAvLyBBU1NFUlQgdGhhdCBBTkdMRSBnZW5lcmF0ZWQgR0xTTCB3aWxsIGJlIGFjY2VwdGVk
IGJ5IE9wZW5HTAorICAgIEFTU0VSVChHTENvbXBpbGVTdWNjZXNzID09IEdMX1RSVUUpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjdWxsRmFjZShHQzNEZW51bSBtb2RlKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDdWxsRmFjZShtb2RlKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERlcHRoRnVuYyhmdW5jKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZsYWcpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERlcHRoTWFzayhmbGFnKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBm
IHpGYXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERlcHRoUmFuZ2Uo
ek5lYXIsIHpGYXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAg
ICBBU1NFUlQocHJvZ3JhbSk7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbERldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlKEdDM0RlbnVtIGNhcCkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRGlzYWJsZShjYXApOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJheXMoR0Mz
RGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50KQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2Rl
LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEcmF3RWxlbWVudHMobW9kZSwgY291
bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+
KG9mZnNldCkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlKEdDM0RlbnVt
IGNhcCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRW5hYmxlKGNhcCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdD
M0R1aW50IGluZGV4KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xFbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNo
bWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZl
cikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRnJhbWVidWZmZXJSZW5k
ZXJidWZmZXJFWFQodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZl
cik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBQ
bGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEdDM0RpbnQgbGV2ZWwpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKHRhcmdldCwgYXR0
YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdlbmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdldCkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2VuZXJhdGVNaXBtYXBFWFQodGFyZ2V0KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZmluaXNoKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsRmluaXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZs
dXNoKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRmx1c2goKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEZyb250RmFjZShtb2RlKTsKK30KKwor
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgaWYgKCFw
cm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IEdMaW50IG1heEF0dHJpYnV0ZVNpemUgPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3Jh
bSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4QXR0cmlidXRlU2l6ZSk7Cisg
ICAgR0xjaGFyIG5hbWVbbWF4QXR0cmlidXRlU2l6ZV07IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVf
TUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uCisgICAgR0xzaXplaSBuYW1lTGVu
Z3RoID0gMDsKKyAgICBHTGludCBzaXplID0gMDsKKyAgICBHTGVudW0gdHlwZSA9IDA7CisgICAg
OjpnbEdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpbmRleCwgbWF4QXR0cmlidXRlU2l6ZSwgJm5h
bWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7CisgICAgaWYgKCFuYW1lTGVuZ3RoKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaW5mby5uYW1lID0gU3RyaW5nKG5hbWUsIG5hbWVMZW5n
dGgpOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby5zaXplID0gc2l6ZTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKyAgICAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVk
U2hhZGVycyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0Mz
RHNpemVpKiBjb3VudCwgUGxhdGZvcm0zRE9iamVjdCogc2hhZGVycykKK3sKKyAgICBpZiAoIXBy
b2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdl
dEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOworfQor
CitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAg
ICAgICAgcmV0dXJuIC0xOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJu
IDo6Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQor
CitHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29u
dGV4dEF0dHJpYnV0ZXMoKQoreworICAgIHJldHVybiBtX2F0dHJzOworfQorCitHQzNEZW51bSBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IoKQoreworICAgIGlmIChtX3N5bnRoZXRpY0Vycm9y
cy5zaXplKCkgPiAwKSB7CisgICAgICAgIExpc3RIYXNoU2V0PEdDM0RlbnVtPjo6aXRlcmF0b3Ig
aXRlciA9IG1fc3ludGhldGljRXJyb3JzLmJlZ2luKCk7CisgICAgICAgIEdDM0RlbnVtIGVyciA9
ICppdGVyOworICAgICAgICBtX3N5bnRoZXRpY0Vycm9ycy5yZW1vdmUoaXRlcik7CisgICAgICAg
IHJldHVybiBlcnI7CisgICAgfQorCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0
dXJuIDo6Z2xHZXRFcnJvcigpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0
dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoYXR0YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFD
SE1FTlQpCisgICAgICAgIGF0dGFjaG1lbnQgPSBERVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVO
Q0lMX0FUVEFDSE1FTlQsIGVpdGhlciB3b3Jrcy4KKyAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZF
WFQodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFN0cmluZyhHQzNEZW51bSBuYW1lKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIHJldHVybiBTdHJpbmcoKGNvbnN0IGNoYXIqKSA6OmdsR2V0U3RyaW5nKG5hbWUpKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IG1vZGUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEhpbnQodGFyZ2V0
LCBtb2RlKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVyKFBs
YXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpn
bElzQnVmZmVyKGJ1ZmZlcik7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjpp
c0VuYWJsZWQoR0MzRGVudW0gY2FwKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29u
dGV4dDNEOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCit7Cisg
ICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1l
YnVmZmVyKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVm
ZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVm
ZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVyRVhUKHJlbmRlcmJ1ZmZlcik7Cit9CisK
K0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNF
OworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc1Byb2dyYW0o
cHJvZ3JhbSk7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcihQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBpZiAoIXNoYWRlcikKKyAgICAgICAgcmV0
dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6
Z2xJc1NoYWRlcihzaGFkZXIpOworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6
aXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUp
CisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdpZHRoKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xMaW5lV2lkdGgod2lkdGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgQVNT
RVJUKHByb2dyYW0pOworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xMaW5rUHJv
Z3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWko
R0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgOjpnbFBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVu
aXRzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xQb2x5Z29uT2Zmc2V0
KGZhY3RvciwgdW5pdHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hh
ZGVyQ29tcGlsZXIoKQoreworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBv
biBkZXNrdG9wIE9wZW5HTC4gV2UgbmVlZCB0byBoYXZlIGlmZGVmcyBmb3IgdGhlIGRpZmZlcmVu
dCBHTCB2YXJpYW50cworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIC8vIDo6Z2xSZWxl
YXNlU2hhZGVyQ29tcGlsZXIoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2FtcGxl
Q292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2Npc3NvcihHQzNEaW50IHgsIEdDM0Rp
bnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIEFTU0VSVChzaGFkZXIpOworCisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeTsK
KworICAgIGVudHJ5LnNvdXJjZSA9IHN0cmluZzsKKworICAgIG1fc2hhZGVyU291cmNlTWFwLnNl
dChzaGFkZXIsIGVudHJ5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1
bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVu
dW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFj
ZSwgZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNp
bE1hc2soR0MzRHVpbnQgbWFzaykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6
OmdsU3RlbmNpbE1hc2sobWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5j
aWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNr
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWws
IEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsU3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0Rl
bnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZh
aWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyZihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgdmFsdWUpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFt
ZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgdmFsdWUpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwg
dmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGZsb2F0IHYwKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xVbmlmb3JtMWYobG9jYXRpb24sIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6
ZWkgc2l6ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTFm
dihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtMmYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0yZihsb2NhdGlvbiwg
djAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAvLyBG
SVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgorICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQoreworICAgIC8vIEZJWE1FOiBsZW5n
dGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbFVuaWZvcm0zZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2
MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYy
LCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZnYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCit7CisgICAgLy8gRklY
TUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWkoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGludCB2MCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTFp
KGxvY2F0aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaXYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogYXJyYXksIEdDM0RzaXplaSBzaXplKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMWl2KGxvY2F0aW9uLCBzaXpl
LCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaShHQzNEaW50
IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xVbmlmb3JtMmkobG9jYXRpb24sIHYwLCB2MSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCog
YXJyYXksIEdDM0RzaXplaSBzaXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8g
YmUgYSBtdWx0aXBsZSBvZiAyCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVu
aWZvcm0yaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEs
IEdDM0RpbnQgdjIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZv
cm0zaShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogYXJyYXksIEdDM0RzaXplaSBz
aXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAz
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0zaXYobG9jYXRpb24s
IHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEsIEdDM0RpbnQgdjIsIEdDM0Rp
bnQgdjMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm00aShs
b2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6
ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtNGl2KGxvY2F0aW9uLCBz
aXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgy
ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIGFy
cmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJl
IGEgbXVsdGlwbGUgb2YgNAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlm
b3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQor
eworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA5CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24s
IHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwg
R0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCit7CisgICAgLy8gRklYTUU6IGxlbmd0
aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDE2CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJy
YXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVXNl
UHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVQ
cm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7
CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmFsaWRhdGVQcm9ncmFtKHBy
b2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZihHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0IHYwKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogYXJyYXkp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjFmdihp
bmRleCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIy
ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQg
aW5kZXgsIEdDM0RmbG9hdCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbFZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBH
QzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICA6OmdsVmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9h
dCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0
dHJpYjNmdihpbmRleCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0
ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdD
M0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0Rm
bG9hdCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRl
eEF0dHJpYjRmdihpbmRleCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2
ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVt
IHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRw
dHIgb2Zmc2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhB
dHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHJlaW50
ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHks
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsVmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJvb2xlYW52KEdDM0RlbnVtIHBuYW1lLCBHQzNEYm9v
bGVhbiogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldEJv
b2xlYW52KHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1
ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQq
IHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRCdWZmZXJQ
YXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEZsb2F0dihHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0RmxvYXR2KHBuYW1lLCB2YWx1ZSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdihQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCB2
YWx1ZSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2co
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50IGxlbmd0aDsKKyAgICA6OmdsR2V0UHJv
Z3JhbWl2KHByb2dyYW0sIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CisgICAgaWYgKCFs
ZW5ndGgpCisgICAgICAgIHJldHVybiAiIjsKKworICAgIEdMc2l6ZWkgc2l6ZTsKKyAgICBHTGNo
YXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhsZW5ndGgpOworCisgICAgOjpnbEdldFBy
b2dyYW1JbmZvTG9nKHByb2dyYW0sIGxlbmd0aCwgJnNpemUsIGluZm8pOworICAgIFN0cmluZyBz
KGluZm8pOworICAgIGZhc3RGcmVlKGluZm8pOworICAgIHJldHVybiBzOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0Mz
RGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIEFTU0VSVChzaGFkZXIpOworCisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3Qs
IFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAu
ZmluZChzaGFkZXIpOworICAgIAorICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIERFTEVU
RV9TVEFUVVM6CisgICAgY2FzZSBTSEFERVJfVFlQRToKKyAgICAgICAgLy8gTGV0IE9wZW5HTCBo
YW5kbGUgdGhlc2UuCisgICAgICAgIAorICAgICAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBw
bmFtZSwgdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBDT01QSUxF
X1NUQVRVUzoKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkg
eworICAgICAgICAgICAgKCp2YWx1ZSkgPSBzdGF0aWNfY2FzdDxpbnQ+KGZhbHNlKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIAorICAgICAgICAoKnZhbHVlKSA9IHN0YXRp
Y19jYXN0PGludD4ocmVzdWx0LT5zZWNvbmQuaXNWYWxpZCk7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAKKyAgICBjYXNlIElORk9fTE9HX0xFTkdUSDoKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBt
X3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgeworICAgICAgICAgICAgKCp2YWx1ZSkgPSAwOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgCisgICAgICAgICgqdmFsdWUpID0gZ2V0
U2hhZGVySW5mb0xvZyhzaGFkZXIpLmxlbmd0aCgpOworICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgY2FzZSBTSEFERVJfU09VUkNFX0xFTkdUSDoKKyAgICAgICAgKCp2YWx1ZSkgPSBnZXRT
aGFkZXJTb3VyY2Uoc2hhZGVyKS5sZW5ndGgoKTsKKyAgICAgICAgYnJlYWs7CisgICAgCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9FTlVNKTsKKyAgICB9
Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworCisgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3Vy
Y2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVy
KTsKKworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAg
ICByZXR1cm4gIiI7CisKKyAgICAgU2hhZGVyU291cmNlRW50cnkgZW50cnkgPSByZXN1bHQtPnNl
Y29uZDsKKworICAgICBpZiAoZW50cnkuaXNWYWxpZCkgeworICAgICAgICAgR0xpbnQgbGVuZ3Ro
OworICAgICAgICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAm
bGVuZ3RoKTsKKyAgICAgICAgIGlmICghbGVuZ3RoKQorICAgICAgICAgICAgIHJldHVybiAiIjsK
KworICAgICAgICAgR0xzaXplaSBzaXplOworICAgICAgICAgR0xjaGFyKiBpbmZvID0gKEdMY2hh
ciopIGZhc3RNYWxsb2MobGVuZ3RoKTsKKworICAgICAgICAgOjpnbEdldFNoYWRlckluZm9Mb2co
c2hhZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvKTsKKworICAgICAgICAgU3RyaW5nIHMoaW5mbyk7
CisgICAgICAgICBmYXN0RnJlZShpbmZvKTsKKyAgICAgICAgIHJldHVybiBzOworICAgICB9Cisg
ICAgcmV0dXJuIGVudHJ5LmxvZzsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRT
aGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRl
cik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIEhhc2hNYXA8UGxhdGZvcm0z
RE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNv
dXJjZU1hcC5maW5kKHNoYWRlcik7CisKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNl
TWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gIiI7CisKKyAgICByZXR1cm4gcmVzdWx0LT5zZWNv
bmQuc291cmNlOworfQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRl
cmZ2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldFRleFBhcmFtZXRlcmZ2KHRh
cmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4
UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFs
dWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldFRleFBhcmFtZXRl
cml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwg
R0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
R2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xHZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKwor
R0MzRGludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEFTU0VSVChwcm9ncmFt
KTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsR2V0VW5pZm9y
bUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBw
bmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICA6OmdsR2V0VmVydGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KEdDM0R1aW50IGluZGV4LCBHQzNE
ZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbEdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwgdmFsdWUpOworfQorCitH
QzNEc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQzNE
dWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisKKyAgICBHTHZvaWQqIHBvaW50ZXIgPSAwOworICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2lu
dGVydihpbmRleCwgcG5hbWUsICZwb2ludGVyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0Mz
RHNpemVpcHRyPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW50IHhvZmYsIEdDM0RpbnQgeW9mZiwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZv
aWQqIHBpeGVscykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIC8vIEZJWE1F
OiB3ZSB3aWxsIG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGlu
ZyB3aXRoIGltYWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZQor
ICAgIDo6Z2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBHTHVpbnQgbyA9IDA7CisgICAgOjpnbEdlbkJ1ZmZlcnMoMSwgJm8pOworICAgIHJl
dHVybiBvOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVG
cmFtZWJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IG8g
PSAwOworICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOworICAgIHJldHVybiBvOwor
fQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFtKCkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFt
KCk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRl
cmJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IG8gPSAw
OworICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30K
KworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKEdDM0Rl
bnVtIHR5cGUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xD
cmVhdGVTaGFkZXIoKHR5cGUgPT0gRlJBR01FTlRfU0hBREVSKSA/IEdMX0ZSQUdNRU5UX1NIQURF
UiA6IEdMX1ZFUlRFWF9TSEFERVIpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29u
dGV4dDNEOjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBHTHVpbnQgbyA9IDA7CisgICAgOjpnbEdlblRleHR1cmVzKDEsICZvKTsKKyAgICByZXR1cm4g
bzsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RP
YmplY3QgYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZWxl
dGVCdWZmZXJzKDEsICZidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxl
dGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJmZyYW1l
YnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbShQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgx
LCAmcmVuZGVyYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hh
ZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xEZWxldGVTaGFkZXIoc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0g
ZXJyb3IpCit7CisgICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKK3sKKyAgICBtX2xheWVyQ29t
cG9zaXRlZCA9IGZhbHNlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrTGF5ZXJD
b21wb3NpdGVkKCkKK3sKKyAgICBtX2xheWVyQ29tcG9zaXRlZCA9IHRydWU7Cit9CisKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fbGF5ZXJDb21wb3NpdGVkOworfQorCitFeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRFeHRlbnNpb25zKCkKK3sKKyAgICBpZiAoIW1fZXh0ZW5zaW9ucykKKyAgICAgICAgbV9l
eHRlbnNpb25zID0gYWRvcHRQdHIobmV3IEV4dGVuc2lvbnMzRE9wZW5HTCh0aGlzKSk7CisgICAg
cmV0dXJuIG1fZXh0ZW5zaW9ucy5nZXQoKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMjIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5j
b20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKwor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFJl
bmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciAqcGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSkKK3sK
KyAgICBpbnQgdG90YWxCeXRlcyA9IG1fY3VycmVudFdpZHRoICogbV9jdXJyZW50SGVpZ2h0ICog
NDsKKyAgICBpZiAocGl4ZWxzU2l6ZSA8IHRvdGFsQnl0ZXMpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZh
bHNlOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykKKyAgICAgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKG1fYm91bmRGQk8gIT0gbV9mYm8pIHsKKyAgICAg
ICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBHTGludCBwYWNrQWxpZ25tZW50ID0gNDsKKyAgICBib29sIG11c3RSZXN0b3JlUGFja0Fs
aWdubWVudCA9IGZhbHNlOworICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9QQUNLX0FMSUdOTUVOVCwg
JnBhY2tBbGlnbm1lbnQpOworICAgIGlmIChwYWNrQWxpZ25tZW50ID4gNCkgeworICAgICAgICA6
OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIDQpOworICAgICAgICBtdXN0UmVzdG9y
ZVBhY2tBbGlnbm1lbnQgPSB0cnVlOworICAgIH0KKworICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAs
IG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZ
VEUsIHBpeGVscyk7CisgICAgLy8gQ29udmVydCB0byBCR1JBCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCisgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBp
eGVsc1tpICsgMl0pOworCisgICAgaWYgKG11c3RSZXN0b3JlUGFja0FsaWdubWVudCkKKyAgICAg
ICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5ULCBwYWNrQWxpZ25tZW50KTsKKwor
ICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
TF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBpZiAoIXBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHdpZHRoID09
IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOworICAgIG1fY3VycmVudEhl
aWdodCA9IGhlaWdodDsKKyAgICAKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB2YWxp
ZGF0ZUF0dHJpYnV0ZXMoKTsKKworICAgIEdMdWludCBjb2xvckZvcm1hdCA9IDA7CisgICAgaWYg
KG1fYXR0cnMuYWxwaGEpIHsKKyAgICAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdC
QTsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0JBOworICAgIH0gZWxzZSB7CisgICAgICAg
IG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQjsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBH
TF9SR0I7CisgICAgfQorCisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOworCisgICAg
Ly8gcmVzaXplIG11bHRpc2FtcGxlIEZCTworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykKKyAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAKKyAgICAvLyByZXNpemUgcmVndWxhciBGQk8K
KyAgICBpZiAobV9ib3VuZEZCTyAhPSBtX2ZibykgeworICAgICAgICBtdXN0UmVzdG9yZUZCTyA9
IHRydWU7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBtX2Zibyk7CisgICAgfQorICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3Rl
eHR1cmUpOworICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxD
b2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZ
VEUsIDApOworICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAw
KTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVy
ZSk7CisgICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9y
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwg
MCk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworICAgIGlmICghbV9h
dHRycy5hbnRpYWxpYXMgJiYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSkgewor
ICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX3N0
ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5E
RVJCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0lOREVYOCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAg
IGlmIChtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJi
dWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBH
TF9SRU5ERVJCVUZGRVJfRVhULCBtX3N0ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsQmluZFJl
bmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKKyAgICAg
ICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgR0xfREVQ
VEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBpZiAobV9hdHRycy5kZXB0
aCkKKyAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJV
RkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBt
X2RlcHRoQnVmZmVyKTsKKyAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVS
QlVGRkVSX0VYVCwgMCk7CisgICAgfQorICAgIGlmIChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNF
WFQoR0xfRlJBTUVCVUZGRVJfRVhUKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsK
KyAgICAgICAgLy8gRklYTUU6IGNsZWFudXAKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICB9CisKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpCisgICAgICAgIG5vdEltcGxlbWVudGVk
KCk7CisKKworICAgIC8vIEluaXRpYWxpemUgcmVuZGVyYnVmZmVycyB0byAwLgorICAgIEdMZmxv
YXQgY2xlYXJDb2xvcltdID0gezAsIDAsIDAsIDB9LCBjbGVhckRlcHRoID0gMDsKKyAgICBHTGlu
dCBjbGVhclN0ZW5jaWwgPSAwOworICAgIEdMYm9vbGVhbiBjb2xvck1hc2tbXSA9IHtHTF9UUlVF
LCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFfSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKKyAgICBH
THVpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZmZmZmOworICAgIEdMYm9vbGVhbiBpc1NjaXNzb3JF
bmFibGVkID0gR0xfRkFMU0U7CisgICAgR0xib29sZWFuIGlzRGl0aGVyRW5hYmxlZCA9IEdMX0ZB
TFNFOworICAgIEdMYml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAg
ICA6OmdsR2V0RmxvYXR2KEdMX0NPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKKyAgICA6
OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09MT1Jf
V1JJVEVNQVNLLCBjb2xvck1hc2spOworICAgIDo6Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJV
RSwgR0xfVFJVRSwgR0xfVFJVRSk7CisgICAgaWYgKG1fYXR0cnMuZGVwdGgpIHsKKyAgICAgICAg
OjpnbEdldEZsb2F0dihHTF9ERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFyRGVwdGgpOworICAgICAg
ICA6OmdsQ2xlYXJEZXB0aCgxKTsKKyAgICAgICAgOjpnbEdldEJvb2xlYW52KEdMX0RFUFRIX1dS
SVRFTUFTSywgJmRlcHRoTWFzayk7CisgICAgICAgIDo6Z2xEZXB0aE1hc2soR0xfVFJVRSk7Cisg
ICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOworICAgIH0KKyAgICBpZiAo
bV9hdHRycy5zdGVuY2lsKSB7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0NM
RUFSX1ZBTFVFLCAmY2xlYXJTdGVuY2lsKTsKKyAgICAgICAgOjpnbENsZWFyU3RlbmNpbCgwKTsK
KyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfV1JJVEVNQVNLLCByZWludGVycHJl
dF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNrKSk7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1Nl
cGFyYXRlKEdMX0ZST05ULCAweGZmZmZmZmZmKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NU
RU5DSUxfQlVGRkVSX0JJVDsKKyAgICB9CisgICAgaXNTY2lzc29yRW5hYmxlZCA9IDo6Z2xJc0Vu
YWJsZWQoR0xfU0NJU1NPUl9URVNUKTsKKyAgICA6OmdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1Qp
OworICAgIGlzRGl0aGVyRW5hYmxlZCA9IDo6Z2xJc0VuYWJsZWQoR0xfRElUSEVSKTsKKyAgICA6
OmdsRGlzYWJsZShHTF9ESVRIRVIpOworCisgICAgOjpnbENsZWFyKGNsZWFyTWFzayk7CisKKyAg
ICA6OmdsQ2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9y
WzJdLCBjbGVhckNvbG9yWzNdKTsKKyAgICA6OmdsQ29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29s
b3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9yTWFza1szXSk7CisgICAgaWYgKG1fYXR0cnMu
ZGVwdGgpIHsKKyAgICAgICAgOjpnbENsZWFyRGVwdGgoY2xlYXJEZXB0aCk7CisgICAgICAgIDo6
Z2xEZXB0aE1hc2soZGVwdGhNYXNrKTsKKyAgICB9CisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkg
eworICAgICAgICA6OmdsQ2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7CisgICAgICAgIDo6Z2xT
dGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCBzdGVuY2lsTWFzayk7CisgICAgfQorICAgIGlm
IChpc1NjaXNzb3JFbmFibGVkKQorICAgICAgICA6OmdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7
CisgICAgZWxzZQorICAgICAgICA6OmdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIGlm
IChpc0RpdGhlckVuYWJsZWQpCisgICAgICAgIDo6Z2xFbmFibGUoR0xfRElUSEVSKTsKKyAgICBl
bHNlCisgICAgICAgIDo6Z2xEaXNhYmxlKEdMX0RJVEhFUik7CisKKyAgICBpZiAobXVzdFJlc3Rv
cmVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBtX2JvdW5kRkJPKTsKKworICAgIDo6Z2xGbHVzaCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCit7CisgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQor
ICAgICAgICByZXR1cm47CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fYXR0
cnMuYW50aWFsaWFzKQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworCisgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICA6OmdsQWN0aXZl
VGV4dHVyZShHTF9URVhUVVJFMCk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IG1fY29tcG9zaXRvclRleHR1cmUpOworICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1
cnJlbnRIZWlnaHQsIDApOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2Jv
dW5kVGV4dHVyZTApOworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKG1fYWN0aXZlVGV4dHVyZSk7Cisg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8p
OworICAgIDo6Z2xGaW5pc2goKTsKKyAgICBtX2xheWVyQ29tcG9zaXRlZCA9IHRydWU7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQs
IFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIEdMdWludCBmYm87CisgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgZmJvID0gYnVmZmVyOwor
ICAgIGVsc2UKKyAgICAgICAgZmJvID0gbV9mYm87CisKKyAgICBpZiAoZmJvICE9IG1fYm91bmRG
Qk8pIHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZibyk7CisgICAg
ICAgIG1fYm91bmRGQk8gPSBmYm87CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVt
IGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRp
c2FtcGxlRkJPKQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIAorICAgIDo6Z2xDb3B5
VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhl
aWdodCwgYm9yZGVyKTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9
PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5k
RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisKKyAg
ICA6OmdsQ29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
eCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91
bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIGlm
ICghcHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBHTGludCBtYXhVbmlmb3JtU2l6ZSA9IDA7CisgICAgOjpnbEdldFByb2dyYW1pdihwcm9n
cmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNpemUpOworICAg
IEdMY2hhciBuYW1lW21heFVuaWZvcm1TaXplXTsgLy8gR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xF
TkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uCisgICAgR0xzaXplaSBuYW1lTGVuZ3RoID0g
MDsKKyAgICBHTGludCBzaXplID0gMDsKKyAgICBHTGVudW0gdHlwZSA9IDA7CisgICAgOjpnbEdl
dEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgsIG1heFVuaWZvcm1TaXplLCAmbmFtZUxlbmd0
aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKKyAgICBpZiAoIW5hbWVMZW5ndGgpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpbmZvLm5hbWUgPSBTdHJpbmcobmFtZSwgbmFtZUxlbmd0aCk7Cisg
ICAgaW5mby50eXBlID0gdHlwZTsKKyAgICBpbmZvLnNpemUgPSBzaXplOworCisgICAgLy8gRklY
TUUgOiAiWzBdIiBpcyBhZGRlZCBhdCB0aGUgZW5kIG9mIGluZm8ubmFtZSBpbiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldEFjdGl2ZVVuaWZvcm0oKSAKKyAgICAvLyB3aGVuIGlzR0xFUzJDb21w
bGlhbnQgaXMganVzdCBmYWxzZS4gSSBjYW4ndCB1bmRlcnN0YW5kIHRoZSByZWFzb24uIAorICAg
IC8vIEkgYWRkICJbMF0iIGhlcmUgdG8gYXZvaWQgZmFsaW5nIHdlYmdsIGNvbmZvcm1hbmNlIHRl
c3QoZ2V0LWFjdGl2ZXRlc3QuaHRtbCkKKyAgICAvLyBidXQgaWYgaXQgbWFrZXMgc29tZXRoaW5n
IHdyb25nIGxhdGVyLCByZW1vdmUgZm9sbG93aW5nIGxpbmVzIAorICAgIGlmIChpbmZvLnNpemUg
PiAxICYmICFpbmZvLm5hbWUuZW5kc1dpdGgoIlswXSIpKSAKKyAgICAgICAgaW5mby5uYW1lLmFw
cGVuZCgiWzBdIik7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lk
KiBkYXRhKQoreworICAgIC8vIEZJWE1FOiByZW1vdmUgdGhlIHR3byBnbEZsdXNoIGNhbGxzIHdo
ZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGkuZS4sCisgICAgLy8gYWxsIHByZXZpb3VzIHJl
bmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhlbHMuCisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEZsdXNoKCk7CisgICAgaWYgKG1fYXR0cnMu
YW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgbm90
SW1wbGVtZW50ZWQoKTsKKworICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgZGF0YSk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91
bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFJlbmRlcmJ1
ZmZlclN0b3JhZ2VFWFQodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBH
QzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0
SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Rm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVy
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3sK
KyAgICBpZiAod2lkdGggJiYgaGVpZ2h0ICYmICFwaXhlbHMpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0
eXBlLCBwaXhlbHMpOworICAgIHJldHVybiB0cnVlOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MjY3NCkKKysrIFNvdXJj
ZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisy
MDExLTA4LTA5ICBDaGFuZ1Nlb2sgT2ggIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKworICAgICAg
ICBbR1RLXSBTdXBwb3J0IEVHTCBiYWNrZW5kIGZvciBXZWJHTAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTkwNjQKKworICAgICAgICBJbmNsdWRlIEVH
TCBsaWJyYXJ5IHRvIGxpbmsgd2hlbiBlZ2wtYmFja2VuZCBpcyBjaG9vc2VuIGZvciBXZWJHTC4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOgorCiAyMDExLTA4LTAzICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xl
LmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbVGltZWxpbmVdIEhvdmVyIG9uIHBhaW50
IGV2ZW50cyBhbmQgc2VlIHJlY3Qgb3V0bGluZSBhcm91bmQgdGhhdCBhcmVhLgpJbmRleDogU291
cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9ndGsvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDkyNjc0KQorKysgU291cmNlL1dlYktpdC9n
dGsvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgbGlid2Vi
a2l0Z3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJTwogCSQod2ViY29yZV9sZGZsYWdzKSBc
CiAJJChDQUlST19MSUJTKSBcCiAJJChDT1ZFUkFHRV9MREZMQUdTKSBcCisJJChFR0xfTElCUykg
XAogCSQoRU5DSEFOVF9MSUJTKSBcCiAJJChGUkVFVFlQRV9MSUJTKSBcCiAJJChHQUlMX0xJQlMp
IFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103440</attachid>
            <date>2011-08-09 22:14:15 -0700</date>
            <delta_ts>2011-08-09 22:16:56 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>P59064.patch</filename>
            <type>text/plain</type>
            <size>122790</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDkyNzQ1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDgt
MDkgIENoYW5nU2VvayBPaCAgPHNoaXZhbWlkb3dAZ21haWwuY29tPgorCisgICAgICAgIFtHVEtd
IFN1cHBvcnQgRUdMIGJhY2tlbmQgZm9yIFdlYkdMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBjb25maWctb3B0aW9uIHRvIGNob29zZSBnbC1iYWNr
ZW5kIGJldHdlZW4gZ2x4IGFuZCBlZ2wuCisKKyAgICAgICAgKiBjb25maWd1cmUuYWM6CisKIDIw
MTEtMDgtMDggIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KIAogICAgICAgICBB
ZGQgdGVzdGluZyBmb3IgLS1mb3JjZS1jb21wb3NpdGluZy1tb2RlIHRvIHdpbmRvd3MuaW50ZXJu
YWwKSW5kZXg6IGNvbmZpZ3VyZS5hYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb25maWd1cmUuYWMJKHJldmlz
aW9uIDkyNzQ1KQorKysgY29uZmlndXJlLmFjCSh3b3JraW5nIGNvcHkpCkBAIC0zODMsMTIgKzM4
MywzNiBAQCBBQ19BUkdfRU5BQkxFKHdlYmdsLAogICAgICAgICAgICAgICBbXSwgW2VuYWJsZV93
ZWJnbD0ibm8iXSkKIEFDX01TR19SRVNVTFQoWyRlbmFibGVfd2ViZ2xdKQogCisjIGRldGVybWlu
ZSB0aGUgR0wgYmFja2VuZAorQUNfTVNHX0NIRUNLSU5HKFt0aGUgR0wgYmFja2VuZCB0byB1c2Vd
KQorQUNfQVJHX1dJVEgoZ2xfYmFja2VuZCwKKyAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFst
LXdpdGgtZ2wtYmFja2VuZD1APDpAZ2x4L2VnbEA6PkBdLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgW1NlbGVjdCBnbCBiYWNrZW5kIFtkZWZhdWx0PWdseF1dKSwKKyAgICAgICAgICAgIFtd
LFt3aXRoX2dsX2JhY2tlbmQ9ImdseCJdKQorCitjYXNlICIkd2l0aF9nbF9iYWNrZW5kIiBpbgor
ICAgICBnbHh8ZWdsKSA7OworICAgICAqKSBBQ19NU0dfRVJST1IoW0ludmFsaWQgZ2wgYmFja2Vu
ZDogbXVzdCBiZSBnbHgsIG9yIGVnbC5dKSA7OworZXNhYworCitBQ19NU0dfUkVTVUxUKFskd2l0
aF9nbF9iYWNrZW5kXSkKKwogaWYgdGVzdCAiJGVuYWJsZV93ZWJnbCIgPSAieWVzIjsgdGhlbgot
ICAgIEFDX0NIRUNLX0hFQURFUlMoW0dML2dsLmhdLCBbXSwgQUNfTVNHX0VSUk9SKFtPcGVuR0wg
aGVhZGVyIG5vdCBmb3VuZF0pKQotICAgIEFDX0NIRUNLX0hFQURFUlMoW0dML2dseC5oXSwgW10s
IEFDX01TR19FUlJPUihbR0xYIGhlYWRlciBub3QgZm91bmRdKSkKLSAgICBPUEVOR0xfTElCUz0t
bEdMCisgICAgY2FzZSAiJHdpdGhfZ2xfYmFja2VuZCIgaW4KKyAgICAgICAgZ2x4KSBBQ19DSEVD
S19IRUFERVJTKFtHTC9nbC5oXSwgW10sIEFDX01TR19FUlJPUihbT3BlbkdMIGhlYWRlciBub3Qg
Zm91bmRdKSkKKyAgICAgICAgICAgICBBQ19DSEVDS19IRUFERVJTKFtHTC9nbHguaF0sIFtdLCBB
Q19NU0dfRVJST1IoW0dMWCBoZWFkZXIgbm90IGZvdW5kXSkpCisgICAgICAgICAgICAgT1BFTkdM
X0xJQlM9LWxHTAorICAgICAgICAgICAgIEFDX1NVQlNUKFtPUEVOR0xfTElCU10pCisgICAgICAg
ICAgICAgOzsKKyAgICAgICAgZWdsKSBBQ19DSEVDS19IRUFERVJTKFtHTEVTMi9nbDIuaF0sIFtd
LCBBQ19NU0dfRVJST1IoW09wZW5HTCBFUyBoZWFkZXIgbm90IGZvdW5kXSkpCisgICAgICAgICAg
ICAgQUNfQ0hFQ0tfSEVBREVSUyhbRUdML2VnbC5oXSwgW10sIEFDX01TR19FUlJPUihbRUdMIGhl
YWRlciBub3QgZm91bmRdKSkKKyAgICAgICAgICAgICBPUEVOR0xfTElCUz0tbEdMRVN2MgorICAg
ICAgICAgICAgIEVHTF9MSUJTPS1sRUdMCisgICAgICAgICAgICAgQUNfU1VCU1QoW09QRU5HTF9M
SUJTXSkKKyAgICAgICAgICAgICBBQ19TVUJTVChbRUdMX0xJQlNdKQorICAgICAgICAgICAgIDs7
CisgICAgZXNhYwogZmkKLUFDX1NVQlNUKFtPUEVOR0xfTElCU10pCiAKICMgY2hlY2sgd2hldGhl
ciB0byBlbmFibGUgY2hhbm5lbCBtZXNzYWdpbmcgc3VwcG9ydAogQUNfTVNHX0NIRUNLSU5HKFt3
aGV0aGVyIHRvIGVuYWJsZSBIVE1MNSBDaGFubmVsIE1lc3NhZ2luZyBzdXBwb3J0XSkKQEAgLTEx
NDksNiArMTE3MywxMCBAQCBBTV9DT05ESVRJT05BTChbVVNFX0dMSUJfVU5JQ09ERV0sIFt0ZXN0
CiBBTV9DT05ESVRJT05BTChbVVNFX0ZSRUVUWVBFXSwgW3Rlc3QgIiR3aXRoX2ZvbnRfYmFja2Vu
ZCIgPSAiZnJlZXR5cGUiXSkKIEFNX0NPTkRJVElPTkFMKFtVU0VfUEFOR09dLCBbdGVzdCAiJHdp
dGhfZm9udF9iYWNrZW5kIiA9ICJwYW5nbyJdKQogCisjIEZvbnQgYmFja2VuZCBjb25kaXRpb25h
bHMKK0FNX0NPTkRJVElPTkFMKFtVU0VfR0xYXSwgW3Rlc3QgIiR3aXRoX2dsX2JhY2tlbmQiID0g
ImdseCJdKQorQU1fQ09ORElUSU9OQUwoW1VTRV9FR0xdLCBbdGVzdCAiJHdpdGhfZ2xfYmFja2Vu
ZCIgPSAiZWdsIl0pCisKICMgR1N0cmVhbWVyIGZlYXR1cmUgY29uZGl0aW9uYWwKIEFNX0NPTkRJ
VElPTkFMKFtVU0VfR1NUUkVBTUVSXSwgW3Rlc3QgIiRoYXZlX2dzdHJlYW1lciIgPSAieWVzIl0p
CiAKQEAgLTEyNjMsNiArMTI5MSw3IEBAIEJ1aWxkIGNvbmZpZ3VyYXRpb246CiAgQ29kZSBjb3Zl
cmFnZSBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxl
X2NvdmVyYWdlCiAgVW5pY29kZSBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiAkd2l0aF91bmljb2RlX2JhY2tlbmQKICBGb250IGJhY2tlbmQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR3aXRoX2ZvbnRfYmFja2Vu
ZAorIEdMIGJhY2tlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogJHdpdGhfZ2xfYmFja2VuZAogIE9wdGltaXplZCBtZW1vcnkgYWxsb2NhdG9yICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogJGVuYWJsZV9mYXN0X21hbGxvYwogRmVhdHVyZXM6
CiAgM0QgUmVuZGVyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiAkZW5hYmxlXzNkX3JlbmRlcmluZwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTI3NDUp
CisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
MDIgQEAKKzIwMTEtMDgtMDkgIENoYW5nU2VvayBPaCAgPHNoaXZhbWlkb3dAZ21haWwuY29tPgor
CisgICAgICAgIFtHVEtdIFN1cHBvcnQgRUdMIGJhY2tlbmQgZm9yIFdlYkdMCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA2NAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBidWlsZC1mbGFncyBsaWtl
IFdURl9VU0VfR0xYICYgV1RGX1VTRV9FR0wgdG8gc2VwZXJhdGUgZ2wtYmFja2VuZHMuCisgICAg
ICAgIEFsbW9zdCBHTCBjb21tb24gQVBJcyBpbiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAg
YXJlIG1vdmVkIHRvIEdyYXBoaWNzQ29udGV4dDNEQmFzZS5jcHAKKyAgICAgICAgQW5kIHRoZSBv
dGhlcnMgQVBJcyBuZWVkZWQgdG8gc2VwZXJhdGUgYWNjb3JkaW5nIHRvIGdsLWJhY2tlbmQgYXJl
IGxvY2F0ZWQgYXQgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIGFuZCBHcmFwaGljc0NvbnRl
eHQzRE9wZW5HTEVTLmNwcC4KKyAgICAgICAgU29tZSBHTCBleHRlbnRpb24gcGFyYW1ldGVycyB3
aGljaCBhcmUgbm90IGRlZmluZWQgaW4gR0xFUyBhcmUgYWRkZWQgbmV3bHkgaW4gT3BlbkdMU2hp
bXMuaAorCisgICAgICAgIE5vIG5ldyB0ZXN0cyByZXF1aXJlZC4KKworICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9PcGVuR0xTaGltcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRQcm9j
QWRkcmVzcyk6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplT3BlbkdMU2hpbXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL09wZW5HTFNoaW1zLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNER3RrLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbEVHTC5j
cHA6IEFkZGVkLgorICAgICAgICAoc2hhcmVkRGlzcGxheSk6CisgICAgICAgIChzaGFyZWRFR0xE
aXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OmFjdGl2ZUdyYXBoaWNzQ29udGV4dHMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YWRkQWN0aXZlR3JhcGhp
Y3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OnJlbW92ZUFjdGl2ZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpjbGVhbnVwQWN0aXZlQ29udGV4dHNBdEV4aXQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNyZWF0ZVBidWZmZXJDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNyZWF0ZVBp
eG1hcENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjp+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjptYWtlQ29udGV4dEN1cnJlbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVy
bmFsRUdMLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnJlc2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmJpbmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVy
YnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4
SW1hZ2UyRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMQmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1l
YnVmZmVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YWN0aXZl
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNoU2hh
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQXR0cmliTG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZENvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpjbGVhckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpjbGVhckRlcHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpj
bGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbG9y
TWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVuYyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6ZHJhd0FycmF5cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpl
bmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmdlbmVyYXRlTWlwbWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEVycm9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aGlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzRW5hYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6aXNTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmlzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
bGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2FtcGxlQ292ZXJhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3ApOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcFNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0xZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0yZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTFpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtMml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2kp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaXYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDJmdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dmVydGV4QXR0cmliM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp2ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6dmVydGV4QXR0cmliNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp2aWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0
Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZl
clBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRG
bG9hdHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1p
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9M
b2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6Om1hcmtDb250ZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKToKKwogMjAxMS0wOC0wOSAgQWJoaXNoZWsgQXJ5
YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFN0eWxlIGNoYW5nZSBub3QgcHJv
cGFnYXRpbmcgZm9yIGJlZm9yZSwgYWZ0ZXIgY29udGVudApJbmRleDogU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0JKHJldmlzaW9uIDkyNzQ1KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdv
cmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsMjAgQEAgd2ViY29yZWd0a19jcHBmbGFncyArPSBc
CiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28KIGVu
ZGlmICMgRU5EIFVTRV9QQU5HTwogCisjIC0tLQorIyBHTFggZ2wgYmFja2VuZAorIyAtLS0KK2lm
IFVTRV9HTFgKK3dlYmNvcmVndGtfY3BwZmxhZ3MgKz0gLURXVEZfVVNFX0dMWD0xCitlbmRpZiAj
IEVORCBVU0VfR0xYCisKKyMgLS0tCisjIEVHTCBnbCBiYWNrZW5kCisjIC0tLQoraWYgVVNFX0VH
TAord2ViY29yZWd0a19jcHBmbGFncyArPSAtRFdURl9VU0VfRUdMPTEKK2VuZGlmICMgRU5EIFVT
RV9FR0wKKwogIyAtLS0tCiAjIEhUTUwgRGV0YWlscyBFbGVtZW50CiAjIC0tLS0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gOTI3NDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC00Nzk3LDE0ICs0Nzk3
LDI4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0RyYXdpbmdCdWZmZXJHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzRElu
dGVybmFsLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0wuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKKwlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xCYXNlLmNw
cAogZW5kaWYgICMgRU5EIEVOQUJMRV9XRUJHTAogCiAjIC0tLQorIyBPcGVuR0wgYmFja2VuZCAK
KyMgLS0tCitpZiBVU0VfR0xYCit3ZWJjb3JlX3NvdXJjZXMgKz0gXAorCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmNwcCBcCisJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWwuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMLmNwcAorZW5kaWYgICMgRU5EIFVTRV9HTFgKK2lmIFVTRV9FR0wK
K3dlYmNvcmVfc291cmNlcyArPSBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWxFR0wuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbEVHTC5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xFUy5jcHAKK2VuZGlmICAjIEVORCBVU0VfRUdMCisKKyMgLS0tCiAjIE1IVE1MIHN1cHBv
cnQKICMgLS0tCiBpZiBFTkFCTEVfTUhUTUwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gOTI3NDUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5o
CSh3b3JraW5nIGNvcHkpCkBAIC05MzIsNyArOTMyLDEyIEBAIHB1YmxpYzoKIAogICAgIEdDM0R1
aW50IG1fdGV4dHVyZSwgbV9jb21wb3NpdG9yVGV4dHVyZTsKICAgICBHQzNEdWludCBtX2ZibzsK
KyNpZiBVU0UoRUdMKQorICAgIEdDM0R1aW50IG1fZGVwdGhCdWZmZXI7CisgICAgR0MzRHVpbnQg
bV9zdGVuY2lsQnVmZmVyOworI2Vsc2UKICAgICBHQzNEdWludCBtX2RlcHRoU3RlbmNpbEJ1ZmZl
cjsKKyNlbmRpZgogICAgIGJvb2wgbV9sYXllckNvbXBvc2l0ZWQ7CiAgICAgR0MzRHVpbnQgbV9p
bnRlcm5hbENvbG9yRm9ybWF0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9PcGVuR0xTaGltcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vT3BlbkdMU2hpbXMuY3BwCShyZXZpc2lvbiA5Mjc0NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL09wZW5HTFNoaW1zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDExIElnYWxpYSBTLkwuCisgKiAgQ29weXJpZ2h0IChDKSAyMDExIENoYW5nU2VvayBPaCA8c2hp
dmFtaWRvd0BnbWFpbC5jb20+IAogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNTIsOSArNTMsMTMg
QEAgc3RhdGljIHZvaWQqIGdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIqCiAgICAgc3RhdGljIGds
R2V0UHJvY0FkZHJlc3NUeXBlIGdldFByb2NBZGRyZXNzRnVuY3Rpb24gPSAwOwogCiAgICAgaWYg
KCFpbml0aWFsaXplZCkgeworI2lmIFVTRShFR0wpCisgICAgICAgIGdldFByb2NBZGRyZXNzRnVu
Y3Rpb24gPSByZWludGVycHJldF9jYXN0PGdsR2V0UHJvY0FkZHJlc3NUeXBlPihkbHN5bShSVExE
X0RFRkFVTFQsICJlZ2xHZXRQcm9jQWRkcmVzcyIpKTsKKyNlbHNlCiAgICAgICAgIGdldFByb2NB
ZGRyZXNzRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PGdsR2V0UHJvY0FkZHJlc3NUeXBlPihk
bHN5bShSVExEX0RFRkFVTFQsICJnbFhHZXRQcm9jQWRkcmVzcyIpKTsKICAgICAgICAgaWYgKCFn
ZXRQcm9jQWRkcmVzc0Z1bmN0aW9uKQogICAgICAgICAgICAgZ2V0UHJvY0FkZHJlc3NGdW5jdGlv
biA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRQcm9jQWRkcmVzc1R5cGU+KGRsc3ltKFJUTERfREVG
QVVMVCwgImdsWEdldFByb2NBZGRyZXNzQVJCIikpOworI2VuZGlmCiAgICAgfQogCiAgICAgaWYg
KCFnZXRQcm9jQWRkcmVzc0Z1bmN0aW9uKQpAQCAtMTEzLDggKzExOCw4IEBAIGJvb2wgaW5pdGlh
bGl6ZU9wZW5HTFNoaW1zKCkKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xCbGVu
ZEZ1bmNTZXBhcmF0ZSwgc3VjY2Vzcyk7CiAjaWYgZGVmaW5lZChHTF9FU19WRVJTSU9OXzJfMCkK
IAotI2lmIGRlZmluZWQoR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCkKLSAgICBvcGVuR0xGdW5j
dGlvblRhYmxlKCktPmdsQmxpdEZyYW1lYnVmZmVyID0gOjpHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9i
bGl0OworI2lmIGRlZmluZWQoR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCkgJiYgIVVTRShFR0wp
CisgICAgb3BlbkdMRnVuY3Rpb25UYWJsZSgpLT5nbEJsaXRGcmFtZWJ1ZmZlciA9IDo6Z2xCbGl0
RnJhbWVidWZmZXJBTkdMRTsKICNlbHNlCiAgICAgb3BlbkdMRnVuY3Rpb25UYWJsZSgpLT5nbEJs
aXRGcmFtZWJ1ZmZlciA9IDA7CiAjZW5kaWYKQEAgLTEyNSw2ICsxMzAsOSBAQCBib29sIGluaXRp
YWxpemVPcGVuR0xTaGltcygpCiAgICAgQVNTSUdOX0ZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsQnVm
ZmVyRGF0YSwgc3VjY2Vzcyk7CiAgICAgQVNTSUdOX0ZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsQnVm
ZmVyU3ViRGF0YSwgc3VjY2Vzcyk7CiAgICAgQVNTSUdOX0ZVTkNUSU9OX1RBQkxFX0VOVFJZKGds
Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1cywgc3VjY2Vzcyk7CisjaWYgZGVmaW5lZChHTF9FU19WRVJT
SU9OXzJfMCkKKyAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xDbGVhckRlcHRoZiwg
c3VjY2Vzcyk7CisjZW5kaWYKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xDb21w
aWxlU2hhZGVyLCBzdWNjZXNzKTsKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xD
cmVhdGVQcm9ncmFtLCBzdWNjZXNzKTsKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlko
Z2xDcmVhdGVTaGFkZXIsIHN1Y2Nlc3MpOwpAQCAtMTMzLDYgKzE0MSw5IEBAIGJvb2wgaW5pdGlh
bGl6ZU9wZW5HTFNoaW1zKCkKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xEZWxl
dGVQcm9ncmFtLCBzdWNjZXNzKTsKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xE
ZWxldGVSZW5kZXJidWZmZXJzLCBzdWNjZXNzKTsKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVf
RU5UUlkoZ2xEZWxldGVTaGFkZXIsIHN1Y2Nlc3MpOworI2lmIGRlZmluZWQoR0xfRVNfVkVSU0lP
Tl8yXzApCisgICAgQVNTSUdOX0ZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsRGVwdGhSYW5nZWYsIHN1
Y2Nlc3MpOworI2VuZGlmCiAgICAgQVNTSUdOX0ZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsRGV0YWNo
U2hhZGVyLCBzdWNjZXNzKTsKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xEaXNh
YmxlVmVydGV4QXR0cmliQXJyYXksIHN1Y2Nlc3MpOwogICAgIEFTU0lHTl9GVU5DVElPTl9UQUJM
RV9FTlRSWShnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5LCBzdWNjZXNzKTsKQEAgLTE3MSw3ICsx
ODIsNyBAQCBib29sIGluaXRpYWxpemVPcGVuR0xTaGltcygpCiAKICNpZiBkZWZpbmVkKEdMX0FQ
UExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlKQogICAgIG9wZW5HTEZ1bmN0aW9uVGFibGUoKS0+
Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUgPSA6OmdsUmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlQVBQTEU7Ci0jZWxpZiBkZWZpbmVkKEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211
bHRpc2FtcGxlKQorI2VsaWYgZGVmaW5lZChHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBs
ZSkgJiYgIVVTRShFR0wpCiAgICAgb3BlbkdMRnVuY3Rpb25UYWJsZSgpLT5nbFJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSA9IDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVB
TkdMRTsKICNlbHNlCiAgICAgb3BlbkdMRnVuY3Rpb25UYWJsZSgpLT5nbFJlbmRlcmJ1ZmZlclN0
b3JhZ2VNdWx0aXNhbXBsZSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9PcGVuR0xTaGltcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL09wZW5HTFNoaW1zLmgJKHJldmlzaW9uIDkyNzQ1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vT3BlbkdMU2hpbXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFRp
ZXRvIENvcnBvcmF0aW9uLgogICogIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICog
IENvcHlyaWdodCAoQykgMjAxMSBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29tPgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsMTMgKzIxLDM3IEBACiAjaWYgUExBVEZPUk0oUVQp
CiAjaW5jbHVkZSA8UUdMQ29udGV4dD4KICNlbHNlCisjaWYgVVNFKEVHTCkKKyNpbmNsdWRlIDxH
TEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKyNlbHNlCiAjaW5jbHVkZSA8
R0wvZ2wuaD4KICNlbmRpZgorI2VuZGlmCiAKICNpZiBkZWZpbmVkKEdMX0VTX1ZFUlNJT05fMl8w
KQogLy8gU29tZSBvcGVuR0wgRVMgc3lzdGVtcyBtaXNzIHRoaXMgdHlwZWRlZi4KIHR5cGVkZWYg
Y2hhciBHTGNoYXI7CisKKyNpZiAhZGVmaW5lZChHTF9GUkFNRUJVRkZFUl9FWFQpCisjZGVmaW5l
IEdMX0ZSQU1FQlVGRkVSX0VYVCBHTF9GUkFNRUJVRkZFUgorI2VuZGlmCisjaWYgIWRlZmluZWQo
R0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUKQorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9F
WFQgR0xfQ09MT1JfQVRUQUNITUVOVDAKKyNlbmRpZgorI2lmICFkZWZpbmVkKEdMX1JFTkRFUkJV
RkZFUl9FWFQpCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9FWFQgR0xfUkVOREVSQlVGRkVSCiAj
ZW5kaWYKKyNpZiAhZGVmaW5lZChHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhUKQorI2RlZmluZSBH
TF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhUIEdMX1NURU5DSUxfQVRUQUNITUVOVAorI2VuZGlmCisj
aWYgIWRlZmluZWQoR0xfREVQVEhfQVRUQUNITUVOVF9FWFQpCisjZGVmaW5lIEdMX0RFUFRIX0FU
VEFDSE1FTlRfRVhUIEdMX0RFUFRIX0FUVEFDSE1FTlQKKyNlbmRpZgorI2lmICFkZWZpbmVkKEdM
X0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQ09NUExF
VEVfRVhUIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFCisjZW5kaWYKKyNlbmRpZiAvLyBFbmQgb2Yg
R0xfRVNfVkVSU0lPTl8yXzAKIAogdHlwZWRlZiBzdHJ1Y3QgX09wZW5HTEZ1bmN0aW9uVGFibGUg
T3BlbkdMRnVuY3Rpb25UYWJsZTsKIApAQCAtNDksNiArNzQsOSBAQCB0eXBlZGVmIHZvaWQgKCpn
bEJsaXRGcmFtZWJ1ZmZlclR5cGUpIChHCiB0eXBlZGVmIHZvaWQgKCpnbEJ1ZmZlckRhdGFUeXBl
KSAoR0xlbnVtLCBHTHNpemVpcHRyLCBjb25zdCBHTHZvaWQqLCBHTGVudW0pOwogdHlwZWRlZiB2
b2lkICgqZ2xCdWZmZXJTdWJEYXRhVHlwZSkgKEdMZW51bSwgR0xpbnRwdHIsIEdMc2l6ZWlwdHIs
IGNvbnN0IEdMdm9pZCopOwogdHlwZWRlZiBHTGVudW0gKCpnbENoZWNrRnJhbWVidWZmZXJTdGF0
dXNUeXBlKSAoR0xlbnVtKTsKKyNpZiBkZWZpbmVkKEdMX0VTX1ZFUlNJT05fMl8wKQordHlwZWRl
ZiB2b2lkICgqZ2xDbGVhckRlcHRoZlR5cGUpIChHTGZsb2F0KTsKKyNlbmRpZgogdHlwZWRlZiB2
b2lkICgqZ2xDb21waWxlU2hhZGVyVHlwZSkgKEdMdWludCk7CiB0eXBlZGVmIEdMdWludCAoKmds
Q3JlYXRlUHJvZ3JhbVR5cGUpICgpOwogdHlwZWRlZiBHTHVpbnQgKCpnbENyZWF0ZVNoYWRlclR5
cGUpIChHTGVudW0pOwpAQCAtNTgsNiArODYsOSBAQCB0eXBlZGVmIHZvaWQgKCpnbERlbGV0ZVBy
b2dyYW1UeXBlKSAoR0x1CiB0eXBlZGVmIHZvaWQgKCpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNUeXBl
KSAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqKTsKIHR5cGVkZWYgdm9pZCAoKmdsRGVsZXRlU2hh
ZGVyVHlwZSkgKEdMdWludCk7CiB0eXBlZGVmIHZvaWQgKCpnbERldGFjaFNoYWRlclR5cGUpIChH
THVpbnQsIEdMdWludCk7CisjaWYgZGVmaW5lZChHTF9FU19WRVJTSU9OXzJfMCkKK3R5cGVkZWYg
dm9pZCAoKmdsRGVwdGhSYW5nZWZUeXBlKSAoR0xmbG9hdCwgR0xmbG9hdCk7CisjZW5kaWYKIHR5
cGVkZWYgdm9pZCAoKmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5VHlwZSkgKEdMdWludCk7CiB0
eXBlZGVmIHZvaWQgKCpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5VHlwZSkgKEdMdWludCk7CiB0
eXBlZGVmIHZvaWQgKCpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyVHlwZSkgKEdMZW51bSwgR0xl
bnVtLCBHTGVudW0sIEdMdWludCk7CkBAIC0xNDUsNiArMTc2LDkgQEAgdHlwZWRlZiBzdHJ1Y3Qg
X09wZW5HTEZ1bmN0aW9uVGFibGUgewogICAgIEZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsQnVmZmVy
RGF0YSk7CiAgICAgRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xCdWZmZXJTdWJEYXRhKTsKICAgICBG
VU5DVElPTl9UQUJMRV9FTlRSWShnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMpOworI2lmIGRlZmlu
ZWQoR0xfRVNfVkVSU0lPTl8yXzApCisgICAgRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xDbGVhckRl
cHRoZik7CisjZW5kaWYKICAgICBGVU5DVElPTl9UQUJMRV9FTlRSWShnbENvbXBpbGVTaGFkZXIp
OwogICAgIEZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsQ3JlYXRlUHJvZ3JhbSk7CiAgICAgRlVOQ1RJ
T05fVEFCTEVfRU5UUlkoZ2xDcmVhdGVTaGFkZXIpOwpAQCAtMTUzLDYgKzE4Nyw5IEBAIHR5cGVk
ZWYgc3RydWN0IF9PcGVuR0xGdW5jdGlvblRhYmxlIHsKICAgICBGVU5DVElPTl9UQUJMRV9FTlRS
WShnbERlbGV0ZVByb2dyYW0pOwogICAgIEZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsRGVsZXRlUmVu
ZGVyYnVmZmVycyk7CiAgICAgRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xEZWxldGVTaGFkZXIpOwor
I2lmIGRlZmluZWQoR0xfRVNfVkVSU0lPTl8yXzApCisgICAgRlVOQ1RJT05fVEFCTEVfRU5UUlko
Z2xEZXB0aFJhbmdlZik7CisjZW5kaWYKICAgICBGVU5DVElPTl9UQUJMRV9FTlRSWShnbERldGFj
aFNoYWRlcik7CiAgICAgRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xEaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkpOwogICAgIEZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsRW5hYmxlVmVydGV4QXR0cmliQXJy
YXkpOwpAQCAtMjQ2LDYgKzI4MywxMCBAQCB0eXBlZGVmIHN0cnVjdCBfT3BlbkdMRnVuY3Rpb25U
YWJsZSB7CiAjZGVmaW5lIGdsQnVmZmVyU3ViRGF0YSAgICAgICAgICAgICAgICAgICAgICAgIExP
T0tVUF9HTF9GVU5DVElPTihnbEJ1ZmZlclN1YkRhdGEpCiAjZGVmaW5lIGdsQ2hlY2tGcmFtZWJ1
ZmZlclN0YXR1c0VYVCAgICAgICAgICAgIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cwogI2RlZmlu
ZSBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMgICAgICAgICAgICAgICBMT09LVVBfR0xfRlVOQ1RJ
T04oZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKQorI2lmIGRlZmluZWQoR0xfRVNfVkVSU0lPTl8y
XzApCisjZGVmaW5lIGdsQ2xlYXJEZXB0aCAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsQ2xl
YXJEZXB0aGYKKyNkZWZpbmUgZ2xDbGVhckRlcHRoZiAgICAgICAgICAgICAgICAgICAgICAgICAg
TE9PS1VQX0dMX0ZVTkNUSU9OKGdsQ2xlYXJEZXB0aGYpCisjZW5kaWYKICNkZWZpbmUgZ2xDb21w
aWxlU2hhZGVyICAgICAgICAgICAgICAgICAgICAgICAgTE9PS1VQX0dMX0ZVTkNUSU9OKGdsQ29t
cGlsZVNoYWRlcikKICNkZWZpbmUgZ2xDcmVhdGVQcm9ncmFtICAgICAgICAgICAgICAgICAgICAg
ICAgTE9PS1VQX0dMX0ZVTkNUSU9OKGdsQ3JlYXRlUHJvZ3JhbSkKICNkZWZpbmUgZ2xDcmVhdGVT
aGFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgTE9PS1VQX0dMX0ZVTkNUSU9OKGdsQ3JlYXRl
U2hhZGVyKQpAQCAtMjU2LDYgKzI5NywxMCBAQCB0eXBlZGVmIHN0cnVjdCBfT3BlbkdMRnVuY3Rp
b25UYWJsZSB7CiAjZGVmaW5lIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCAgICAgICAgICAgICAg
IGdsRGVsZXRlUmVuZGVyYnVmZmVycwogI2RlZmluZSBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMgICAg
ICAgICAgICAgICAgICBMT09LVVBfR0xfRlVOQ1RJT04oZ2xEZWxldGVSZW5kZXJidWZmZXJzKQog
I2RlZmluZSBnbERlbGV0ZVNoYWRlciAgICAgICAgICAgICAgICAgICAgICAgICBMT09LVVBfR0xf
RlVOQ1RJT04oZ2xEZWxldGVTaGFkZXIpCisjaWYgZGVmaW5lZChHTF9FU19WRVJTSU9OXzJfMCkK
KyNkZWZpbmUgZ2xEZXB0aFJhbmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xEZXB0aFJh
bmdlZgorI2RlZmluZSBnbERlcHRoUmFuZ2VmICAgICAgICAgICAgICAgICAgICAgICAgICBMT09L
VVBfR0xfRlVOQ1RJT04oZ2xEZXB0aFJhbmdlZikKKyNlbmRpZgogI2RlZmluZSBnbERldGFjaFNo
YWRlciAgICAgICAgICAgICAgICAgICAgICAgICBMT09LVVBfR0xfRlVOQ1RJT04oZ2xEZXRhY2hT
aGFkZXIpCiAjZGVmaW5lIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5ICAgICAgICAgICAgIExP
T0tVUF9HTF9GVU5DVElPTihnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSkKICNkZWZpbmUgZ2xF
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheSAgICAgICAgICAgICAgTE9PS1VQX0dMX0ZVTkNUSU9OKGds
RW5hYmxlVmVydGV4QXR0cmliQXJyYXkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREd0ay5jcHAJ
KHJldmlzaW9uIDkyNzQ1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0dyYXBoaWNzQ29udGV4dDNER3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQ2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjgsOSArMjksOSBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCiAKICNpZiBFTkFCTEUoV0VCR0wpCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
ICNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzREludGVybmFsLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJP
cGVuR0xTaGltcy5oIgogI2luY2x1ZGUgIlNoYWRlckxhbmcuaCIKICNpbmNsdWRlIDx3dGYvTm90
Rm91bmQuaD4KQEAgLTU5LDcgKzYwLDEyIEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0Nv
bnRleHQzRChHcmEKICAgICAsIG1fYXR0cnMoYXR0cmlidXRlcykKICAgICAsIG1fdGV4dHVyZSgw
KQogICAgICwgbV9mYm8oMCkKKyNpZiBVU0UoRUdMKQorICAgICwgbV9kZXB0aEJ1ZmZlcigwKQor
ICAgICwgbV9zdGVuY2lsQnVmZmVyKDApCisjIGVsc2UKICAgICAsIG1fZGVwdGhTdGVuY2lsQnVm
ZmVyKDApCisjZW5kaWYKICAgICAsIG1fYm91bmRGQk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVG
Qk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKQEAgLTc0LDgg
KzgwLDggQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYQogICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwogICAgIDo6Z2xUZXhQYXJh
bWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsK
ICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVApOworICAgIDo6Z2xUZXhQYXJhbWV0
ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsK
KyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwg
R0xfQ0xBTVBfVE9fRURHRSk7CiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDAp
OwogCiAgICAgLy8gQ3JlYXRlIGFuIEZCTy4KQEAgLTgzLDE3ICs4OSwyNyBAQCBHcmFwaGljc0Nv
bnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKIAogICAgIG1fYm91bmRGQk8gPSBtX2ZibzsK
LSAgICBpZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRy
cy5kZXB0aCkpCisgICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAmJiAobV9hdHRycy5zdGVuY2ls
IHx8IG1fYXR0cnMuZGVwdGgpKSB7CisjaWYgVVNFKEVHTCkKKyAgICAgICAgOjpnbEdlblJlbmRl
cmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhCdWZmZXIpOworICAgICAgICA6OmdsR2VuUmVuZGVyYnVm
ZmVyc0VYVCgxLCAmbV9zdGVuY2lsQnVmZmVyKTsKKyNlbHNlCiAgICAgICAgIDo6Z2xHZW5SZW5k
ZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisjZW5kaWYKKyAgICB9CiAg
ICAgCiAgICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgogICAgIGlmIChtX2F0dHJzLmFu
dGlhbGlhcykgeworI2lmIFVTRShFR0wpCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisjZWxz
ZQogICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsK
ICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVs
dGlzYW1wbGVGQk8pOwogICAgICAgICBtX2JvdW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKICAg
ICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZl
cik7CiAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKICAgICAg
ICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVu
Y2lsQnVmZmVyKTsKKyNlbmRpZgogICAgIH0KIAogICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9u
LgpAQCAtMTEyLDggKzEyOCwxMCBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0
M0QoR3JhCiAgICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOwogICAgIG1fY29t
cGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKIAorI2lmICFVU0UoRUdMKQogICAg
IDo6Z2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRfU0laRSk7CiAgICAgOjpnbEVuYWJs
ZShHTF9QT0lOVF9TUFJJVEUpOworI2VuZGlmCiAgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwg
MCk7CiB9CiAKQEAgLTEyNiwxMyArMTQ0LDIzIEBAIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhp
Y3NDb250ZXh0M0QoKQogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xEZWxldGVU
ZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyNp
ZiBVU0UoRUdMKQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICAgICAgOjpn
bERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CiAg
ICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKICAgICAgICAgICAg
IDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2ls
QnVmZmVyKTsKICAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNh
bXBsZUZCTyk7CisjZW5kaWYKICAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9hdHRycy5zdGVu
Y2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9h
dHRycy5kZXB0aCkgeworI2lmIFVTRShFR0wpCisgICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVy
YnVmZmVyc0VYVCgxLCAmbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgICAgICA6OmdsRGVsZXRlUmVu
ZGVyYnVmZmVyc0VYVCgxLCAmbV9zdGVuY2lsQnVmZmVyKTsKKyNlbHNlCiAgICAgICAgICAgICA6
OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworI2Vu
ZGlmCisgICAgICAgIH0KICAgICB9CiAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAm
bV9mYm8pOwogfQpAQCAtMTUxLDcgKzE3OSwxMSBAQCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
IEdyYXBoaWNzQ29udGV4CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlh
bnQoKSBjb25zdAogeworI2lmIFVTRShFR0wpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQogICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbEVHTC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWxFR0wuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWxFR0wuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDExIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0Bn
bWFpbC5jb20+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUK
KyAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzREludGVybmFsRUdMLmgiCisK
KyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lu
Y2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjaW5jbHVkZSA8RUdML2VnbC5oPgorI2luY2x1ZGUgPGRs
ZmNuLmg+CisKKworc3RhdGljIERpc3BsYXkqIGdTaGFyZWREaXNwbGF5ID0gMDsKK3N0YXRpYyBE
aXNwbGF5KiBzaGFyZWREaXNwbGF5KCkKK3sKKyAgICBpZiAoIWdTaGFyZWREaXNwbGF5KQorICAg
ICAgICBnU2hhcmVkRGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKKyAgICByZXR1cm4gZ1NoYXJl
ZERpc3BsYXk7Cit9CisKK3N0YXRpYyBFR0xEaXNwbGF5IGdTaGFyZWRFR0xEaXNwbGF5ID0gRUdM
X05PX0RJU1BMQVk7CitzdGF0aWMgRUdMRGlzcGxheSBzaGFyZWRFR0xEaXNwbGF5KCkKK3sKKyAg
ICBpZiAoZ1NoYXJlZEVHTERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCisgICAgICAgIGdTaGFy
ZWRFR0xEaXNwbGF5ID0gZWdsR2V0RGlzcGxheShzaGFyZWREaXNwbGF5KCkpOworICAgIHJldHVy
biBnU2hhcmVkRUdMRGlzcGxheTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBCZWNh
dXNlIG9mIGRyaXZlciBidWdzLCBleGl0aW5nIHRoZSBwcm9ncmFtIHdoZW4gdGhlcmUgYXJlIGFj
dGl2ZSBwYnVmZmVycworLy8gY2FuIGNyYXNoIHRoZSBYIHNlcnZlciAodGhpcyBoYXMgYmVlbiBv
YnNlcnZlZCB3aXRoIHRoZSBvZmZpY2lhbCBOdmlkaWEgZHJpdmVycykuCisvLyBXZSBuZWVkIHRv
IGVuc3VyZSB0aGF0IHdlIGNsZWFuIGV2ZXJ5dGhpbmcgdXAgb24gZXhpdC4gVGhlcmUgYXJlIHNl
dmVyYWwgcmVhc29ucworLy8gdGhhdCBHcmFwaGljc0NvbnRleHQzRHMgd2lsbCBzdGlsbCBiZSBh
bGl2ZSBhdCBleGl0LCBpbmNsdWRpbmcgdXNlciBlcnJvciAobWVtb3J5CisvLyBsZWFrcykgYW5k
IHRoZSBwYWdlIGNhY2hlLiBJbiBhbnkgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0aGUgWCBzZXJ2ZXIg
dG8gY3Jhc2guCitzdGF0aWMgYm9vbCBjbGVhbmluZ1VwQXRFeGl0ID0gZmFsc2U7CitzdGF0aWMg
VmVjdG9yPEdyYXBoaWNzQ29udGV4dDNEKj4mIGFjdGl2ZUdyYXBoaWNzQ29udGV4dHMoKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPEdyYXBoaWNzQ29udGV4dDNEKj4sIGNvbnRl
eHRzLCAoKSk7CisgICAgcmV0dXJuIGNvbnRleHRzOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmFkZEFjdGl2ZUdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCkKK3sKKyAgICBzdGF0aWMgYm9vbCBhZGRlZEF0RXhpdEhhbmRsZXIgPSBmYWxzZTsK
KyAgICBpZiAoIWFkZGVkQXRFeGl0SGFuZGxlcikgeworICAgICAgICBhdGV4aXQoJkdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmNsZWFudXBBY3RpdmVDb250ZXh0c0F0RXhpdCk7CisgICAgICAg
IGFkZGVkQXRFeGl0SGFuZGxlciA9IHRydWU7CisgICAgfQorICAgIGFjdGl2ZUdyYXBoaWNzQ29u
dGV4dHMoKS5hcHBlbmQoY29udGV4dCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6cmVtb3ZlQWN0aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KQoreworICAgIGlmIChjbGVhbmluZ1VwQXRFeGl0KQorICAgICAgICByZXR1cm47CisKKyAg
ICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0M0QqPiYgY29udGV4dHMgPSBhY3RpdmVHcmFwaGljc0Nv
bnRleHRzKCk7CisgICAgc2l6ZV90IGxvY2F0aW9uID0gY29udGV4dHMuZmluZChjb250ZXh0KTsK
KyAgICBpZiAobG9jYXRpb24gIT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgY29udGV4dHMucmVt
b3ZlKGxvY2F0aW9uKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjbGVh
bnVwQWN0aXZlQ29udGV4dHNBdEV4aXQoKQoreworICAgIGNsZWFuaW5nVXBBdEV4aXQgPSB0cnVl
OworCisgICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dDNEKj4mIGNvbnRleHRzID0gYWN0aXZlR3Jh
cGhpY3NDb250ZXh0cygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29udGV4dHMuc2l6
ZSgpOyBpKyspCisgICAgICAgIGNvbnRleHRzW2ldLT5+R3JhcGhpY3NDb250ZXh0M0QoKTsKKwor
ICAgIGlmICghZ1NoYXJlZERpc3BsYXkpCisgICAgICAgIHJldHVybjsKKyAgICBYQ2xvc2VEaXNw
bGF5KGdTaGFyZWREaXNwbGF5KTsKKyAgICBnU2hhcmVkRGlzcGxheSA9IDA7CisKKyAgICBpZiAo
Z1NoYXJlZEVHTERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCisgICAgICAgIHJldHVybjsKKyAg
ICBlZ2xUZXJtaW5hdGUoZ1NoYXJlZEVHTERpc3BsYXkpOworICAgIGdTaGFyZWRFR0xEaXNwbGF5
ID0gRUdMX05PX0RJU1BMQVk7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbD4gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y3JlYXRlKCkKK3sKKyAgICBpZiAoIXNo
YXJlZERpc3BsYXkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzdGF0aWMgYm9v
bCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIHN1Y2Nlc3MgPSB0cnVlOwor
ICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgaWYgKCFlZ2xJbml0aWFsaXplKHNoYXJl
ZEVHTERpc3BsYXkoKSwgMCwgMCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgc3VjY2VzcyA9IGluaXRpYWxpemVPcGVuR0xTaGltcygpOworICAgICAgICBpbml0aWFsaXpl
ZCA9IHRydWU7CisgICAgfQorICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBpbnRlcm5hbCA9IGNyZWF0ZVBi
dWZmZXJDb250ZXh0KCk7CisgICAgaWYgKCFpbnRlcm5hbCkKKyAgICAgICAgaW50ZXJuYWwgPSBj
cmVhdGVQaXhtYXBDb250ZXh0KCk7CisgICAgaWYgKCFpbnRlcm5hbCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICAvLyBUaGUgR3JhcGhpY3NDb250ZXh0M0QgY29uc3RydWN0b3IgcmVx
dWlyZXMgdGhhdCB0aGlzIGNvbnRleHQgaXMgdGhlIGN1cnJlbnQgT3BlbkdMIGNvbnRleHQuCisg
ICAgaW50ZXJuYWwtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBhZG9wdFB0cihp
bnRlcm5hbCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwqIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmNyZWF0ZVBidWZmZXJDb250ZXh0KCkKK3sKKyAgICBpbnQgZmJDb25maWdB
dHRyYnNbXSA9IHsKKyAgICAgICAgRUdMX0JVRkZFUl9TSVpFLCBFR0xfRE9OVF9DQVJFLAorICAg
ICAgICBFR0xfUkVEX1NJWkUsIDgsCisgICAgICAgIEVHTF9HUkVFTl9TSVpFLCA4LAorICAgICAg
ICBFR0xfQkxVRV9TSVpFLCA4LAorICAgICAgICBFR0xfQUxQSEFfU0laRSwgOCwKKyAgICAgICAg
RUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklULAorICAgICAgICBFR0xfU1VS
RkFDRV9UWVBFLCBFR0xfUEJVRkZFUl9CSVQsCisgICAgICAgIEVHTF9OT05FCisgICAgfTsKKyAg
ICBFR0xDb25maWcgZWdsQ29uZmlnc1sxXTsKKyAgICBFR0xpbnQgbnVtT2ZDb25maWc7CisgICAg
aWYgKCFlZ2xDaG9vc2VDb25maWcoc2hhcmVkRUdMRGlzcGxheSgpLCBmYkNvbmZpZ0F0dHJicywg
JmVnbENvbmZpZ3NbMF0sIDEsICZudW1PZkNvbmZpZykpCisgICAgICAgIHJldHVybiAwOworICAg
IGlmICghbnVtT2ZDb25maWcpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gV2Ugd2lsbCBi
ZSByZW5kZXJpbmcgdG8gYSB0ZXh0dXJlLCBzbyBvdXIgcGJ1ZmZlciBkb2VzIG5vdCBuZWVkIHRv
IGJlIGxhcmdlLgorICAgIHN0YXRpYyBjb25zdCBpbnQgcGJ1ZmZlckF0dHJpYnV0ZXNbXSA9IHsg
RUdMX1dJRFRILCAxLCBFR0xfSEVJR0hULCAxLCBFR0xfTk9ORSB9OworICAgIEVHTFN1cmZhY2Ug
ZWdsU3VyZmFjZSA9IGVnbENyZWF0ZVBidWZmZXJTdXJmYWNlKHNoYXJlZEVHTERpc3BsYXkoKSwg
ZWdsQ29uZmlnc1swXSwgcGJ1ZmZlckF0dHJpYnV0ZXMpOworICAgIGlmIChlZ2xTdXJmYWNlID09
IEVHTF9OT19TVVJGQUNFKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEVHTGludCBlZ2xDb250
ZXh0QXR0cmJzW10gPSB7IEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLCAyLCBFR0xfTk9ORSB9
OworICAgIEVHTENvbnRleHQgZWdsQ29udGV4dCA9IGVnbENyZWF0ZUNvbnRleHQoc2hhcmVkRUdM
RGlzcGxheSgpLCBlZ2xDb25maWdzWzBdLCBFR0xfTk9fQ09OVEVYVCwgZWdsQ29udGV4dEF0dHJi
cyk7CisgICAgaWYgKGVnbENvbnRleHQgPT0gRUdMX05PX0NPTlRFWFQpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIG5ldyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKGVnbENvbnRl
eHQsIGVnbFN1cmZhY2UpOworfQorCitHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpjcmVhdGVQaXhtYXBDb250ZXh0KCkKK3sKKyAgICBpbnQgc2Ny
ZWVuID0gRGVmYXVsdFNjcmVlbihzaGFyZWREaXNwbGF5KCkpOworICAgIGNvbnN0IGludCBkZXB0
aCA9IERlZmF1bHREZXB0aChzaGFyZWREaXNwbGF5KCksIHNjcmVlbik7CisgICAgY29uc3QgaW50
IHdpZHRoID0gMTsKKyAgICBjb25zdCBpbnQgaGVpZ2h0ID0gMTsKKworICAgIHN0YXRpYyBpbnQg
ZWdsQ29uZmlnQXR0cnNbXSA9IHsKKyAgICAgICAgRUdMX0JVRkZFUl9TSVpFLCBFR0xfRE9OVF9D
QVJFLAorICAgICAgICBFR0xfUkVEX1NJWkUsIDgsCisgICAgICAgIEVHTF9HUkVFTl9TSVpFLCA4
LAorICAgICAgICBFR0xfQkxVRV9TSVpFLCA4LAorICAgICAgICBFR0xfQUxQSEFfU0laRSwgOCwK
KyAgICAgICAgRUdMX0RFUFRIX1NJWkUsIGRlcHRoLAorICAgICAgICBFR0xfU1VSRkFDRV9UWVBF
LCBFR0xfUElYTUFQX0JJVCwKKyAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5H
TF9FUzJfQklULAorICAgICAgICBFR0xfTk9ORQorICAgIH07CisKKyAgICBFR0xDb25maWcgZWds
Q29uZmlnc1sxXTsKKyAgICBFR0xpbnQgbnVtT2ZDb25maWc7CisgICAgaWYgKCFlZ2xDaG9vc2VD
b25maWcoc2hhcmVkRUdMRGlzcGxheSgpLCBlZ2xDb25maWdBdHRycywgJmVnbENvbmZpZ3NbMF0s
IDEsICZudW1PZkNvbmZpZykpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICghbnVtT2ZDb25m
aWcpCisgICAgICAgIHJldHVybiAwOworCisgICAgRUdMaW50IGVnbENvbnRleHRBdHRyYnNbXSA9
IHsgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sIDIsIEVHTF9OT05FIH07CisgICAgRUdMQ29u
dGV4dCBjb250ZXh0ID0gZWdsQ3JlYXRlQ29udGV4dChzaGFyZWRFR0xEaXNwbGF5KCksIGVnbENv
bmZpZ3NbMF0sIEVHTF9OT19DT05URVhULCBlZ2xDb250ZXh0QXR0cmJzKTsKKyAgICBpZiAoIWNv
bnRleHQpCisgICAgICAgIHJldHVybiAwOworCisgICAgUGl4bWFwIHBpeG1hcCA9IFhDcmVhdGVQ
aXhtYXAoc2hhcmVkRGlzcGxheSgpLCBEZWZhdWx0Um9vdFdpbmRvdyhzaGFyZWREaXNwbGF5KCkp
LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgaWYgKCFwaXhtYXApCisgICAgICAgIHJldHVy
biAwOworCisgICAgRUdMU3VyZmFjZSBlZ2xQaXhtYXBTdXJmYWNlID0gZWdsQ3JlYXRlUGl4bWFw
U3VyZmFjZShzaGFyZWRFR0xEaXNwbGF5KCksIGVnbENvbmZpZ3NbMF0sIHBpeG1hcCwgMCk7Cisg
ICAgaWYgKCFlZ2xQaXhtYXBTdXJmYWNlKSB7CisgICAgICAgIFhGcmVlUGl4bWFwKHNoYXJlZERp
c3BsYXkoKSwgcGl4bWFwKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJu
IG5ldyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKGNvbnRleHQsIHBpeG1hcCwgZWdsUGl4bWFw
U3VyZmFjZSk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWwoRUdMQ29udGV4dCBjb250ZXh0LCBFR0xTdXJmYWNlIHBidWZmZXJTdXJmYWNl
KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3BidWZmZXJTdXJmYWNlKHBidWZm
ZXJTdXJmYWNlKQorICAgICwgbV9waXhtYXBTdXJmYWNlKDApCisgICAgLCBtX3BpeG1hcCgwKQor
eworfQorCitHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVy
bmFsKEVHTENvbnRleHQgY29udGV4dCwgUGl4bWFwIHBpeG1hcCwgRUdMU3VyZmFjZSBwaXhtYXBT
dXJmYWNlKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3BidWZmZXJTdXJmYWNl
KDApCisgICAgLCBtX3BpeG1hcFN1cmZhY2UocGl4bWFwU3VyZmFjZSkKKyAgICAsIG1fcGl4bWFw
KHBpeG1hcCkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6fkdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWwoKQoreworICAgIGlmIChtX2NvbnRleHQpIHsKKyAgICAgICAgLy8gVGhp
cyBtYXkgYmUgbmVjZXNzYXJ5IHRvIHByZXZlbnQgY3Jhc2hlcyB3aXRoIE5WaWRpYSdzIGNsb3Nl
ZCBzb3VyY2UgZHJpdmVycy4gT3JpZ2luYWxseQorICAgICAgICAvLyBmcm9tIE1vemlsbGEncyAz
RCBjYW52YXMgaW1wbGVtZW50YXRpb24gYXQ6IGh0dHA6Ly9iaXRidWNrZXQub3JnL2lsbWFyaS9j
YW52YXMzZC8KKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIDApOworCisgICAgICAgIGVnbE1ha2VDdXJyZW50KHNoYXJlZEVHTERpc3BsYXkoKSwgMCwg
MCwgMCk7CisgICAgICAgIGVnbERlc3Ryb3lDb250ZXh0KHNoYXJlZEVHTERpc3BsYXkoKSwgbV9j
b250ZXh0KTsKKyAgICAgICAgbV9jb250ZXh0ID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9wYnVm
ZmVyU3VyZmFjZSkgeworICAgICAgICBlZ2xEZXN0cm95U3VyZmFjZShzaGFyZWRFR0xEaXNwbGF5
KCksIG1fcGJ1ZmZlclN1cmZhY2UpOworICAgICAgICBtX3BidWZmZXJTdXJmYWNlID0gMDsKKyAg
ICB9CisgICAgaWYgKG1fcGl4bWFwU3VyZmFjZSkgeworICAgICAgICBlZ2xEZXN0cm95U3VyZmFj
ZShzaGFyZWRFR0xEaXNwbGF5KCksIG1fcGl4bWFwU3VyZmFjZSk7CisgICAgICAgIG1fcGl4bWFw
U3VyZmFjZSA9IDA7CisgICAgfQorICAgIGlmIChtX3BpeG1hcCkgeworICAgICAgICBYRnJlZVBp
eG1hcChzaGFyZWREaXNwbGF5KCksIG1fcGl4bWFwKTsKKyAgICAgICAgbV9waXhtYXAgPSAwOwor
ICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjptYWtlQ29udGV4dEN1
cnJlbnQoKQoreworICAgIGlmIChlZ2xHZXRDdXJyZW50Q29udGV4dCgpID09IG1fY29udGV4dCkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKG1fcGJ1ZmZlclN1cmZhY2UpIHsKKyAgICAgICAgZWdsTWFrZUN1cnJlbnQoc2hhcmVk
RUdMRGlzcGxheSgpLCBtX3BidWZmZXJTdXJmYWNlLCBtX3BidWZmZXJTdXJmYWNlLCBtX2NvbnRl
eHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZWdsTWFrZUN1cnJlbnQoc2hhcmVk
RUdMRGlzcGxheSgpLCBtX3BpeG1hcFN1cmZhY2UsIG1fcGl4bWFwU3VyZmFjZSwgbV9jb250ZXh0
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFX1dFQkdM
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbEVHTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsRUdMLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbEVHTC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ2hhbmdT
ZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZQorICogIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT
QQorICovCisKKyNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbEVHTF9oCisjZGVmaW5l
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWxFR0xfaAorCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKwordHlwZWRlZiB2b2lkKiBFR0xDb25maWc7Cit0eXBlZGVmIHZvaWQqIEVHTENvbnRl
eHQ7Cit0eXBlZGVmIHZvaWQqIEVHTERpc3BsYXk7Cit0eXBlZGVmIHZvaWQqIEVHTFN1cmZhY2U7
Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgR0x1Ynl0ZTsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBQ
aXhtYXA7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7
CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwgeworICAgIHB1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzREludGVybmFsPiBjcmVhdGUoKTsKKyAg
ICB+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpOworICAgIHZvaWQgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisKKyAgICBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQz
RDsKKyAgICAKKyAgICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCogY3JlYXRlUGJ1
ZmZlckNvbnRleHQoKTsKKyAgICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCogY3Jl
YXRlUGl4bWFwQ29udGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoRUdMQ29u
dGV4dCwgRUdMU3VyZmFjZSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChFR0xDb250
ZXh0LCBQaXhtYXAsIEVHTFN1cmZhY2UpOworCisgICAgc3RhdGljIHZvaWQgYWRkQWN0aXZlR3Jh
cGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgc3RhdGljIHZvaWQgcmVtb3Zl
QWN0aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgc3RhdGljIHZv
aWQgY2xlYW51cEFjdGl2ZUNvbnRleHRzQXRFeGl0KCk7CisKKyAgICBFR0xDb250ZXh0IG1fY29u
dGV4dDsKKyAgICBFR0xTdXJmYWNlIG1fcGJ1ZmZlclN1cmZhY2U7CisgICAgRUdMU3VyZmFjZSBt
X3BpeG1hcFN1cmZhY2U7CisgICAgUGl4bWFwIG1fcGl4bWFwOworfTsKKworfQorCisjZW5kaWYg
Ly8gR3JhcGhpY3NDb250ZXh0M0RJdGVybmFsRUdMX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMLmNwcAkocmV2aXNpb24gOTI3NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw2NSArMjUsMjQgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0j
aWYgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSA8UXRHbG9iYWw+Ci0jZW5kaWYKLQogI2lmIEVOQUJM
RShXRUJHTCkKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKLSNpbmNsdWRlICJB
cnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgotI2luY2x1ZGUgIldl
YkdMT2JqZWN0LmgiCi0jaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1
ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgotI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNs
dWRlICJJbnQzMkFycmF5LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRl
ICJVaW50OEFycmF5LmgiCi0jaW5jbHVkZSA8Y3N0cmluZz4KLSNpbmNsdWRlIDx3dGYvVW51c2Vk
UGFyYW0uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBQTEFURk9STShN
QUMpCiAjaW5jbHVkZSA8T3BlbkdML2dsLmg+CiAjZWxpZiBQTEFURk9STShHVEspCiAjaW5jbHVk
ZSAiT3BlbkdMU2hpbXMuaCIKICNlbGlmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPFF0R2xvYmFs
PgogI2luY2x1ZGUgPGNhaXJvL09wZW5HTFNoaW1zLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQot
ewotICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKLSAgICBp
ZiAobV9hdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0cygi
R0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIikpIHsKLSAgICAgICAgICAgIGV4dGVuc2lvbnMt
PmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwotICAgICAgICAg
ICAgLy8gRm9yY2UgZGVwdGggaWYgc3RlbmNpbCBpcyB0cnVlLgotICAgICAgICAgICAgbV9hdHRy
cy5kZXB0aCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9hdHRycy5zdGVu
Y2lsID0gZmFsc2U7Ci0gICAgfQotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgewotICAgICAg
ICBib29sIGlzVmFsaWRWZW5kb3IgPSB0cnVlOwotICAgICAgICAvLyBDdXJyZW50bHkgaW4gTWFj
IHdlIG9ubHkgdHVybiBvbiBhbnRpYWxpYXMgaWYgdmVuZG9yIGlzIE5WSURJQS4KLSAgICAgICAg
Y29uc3QgY2hhciogdmVuZG9yID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdl
dFN0cmluZyhHTF9WRU5ET1IpKTsKLSAgICAgICAgaWYgKCFzdGQ6OnN0cnN0cih2ZW5kb3IsICJO
VklESUEiKSkKLSAgICAgICAgICAgIGlzVmFsaWRWZW5kb3IgPSBmYWxzZTsKLSAgICAgICAgaWYg
KCFpc1ZhbGlkVmVuZG9yIHx8ICFleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVi
dWZmZXJfbXVsdGlzYW1wbGUiKSkKLSAgICAgICAgICAgIG1fYXR0cnMuYW50aWFsaWFzID0gZmFs
c2U7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQo
IkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7Ci0gICAgfQotfQotCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhl
bHMsIGludCBwaXhlbHNTaXplKQogewogICAgIGlmIChwaXhlbHNTaXplIDwgbV9jdXJyZW50V2lk
dGggKiBtX2N1cnJlbnRIZWlnaHQgKiA0KQpAQCAtMTIyLDU1ICs4MSw2IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXMKICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOwogfQogCi0jaWYgIVBMQVRGT1JN
KFFUKQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBIVE1MQ2FudmFzRWxl
bWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdl
QnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKLQotICAgIGludCByb3dCeXRlcyA9IG1fY3VycmVu
dFdpZHRoICogNDsKLSAgICBpbnQgdG90YWxCeXRlcyA9IHJvd0J5dGVzICogbV9jdXJyZW50SGVp
Z2h0OwotCi0gICAgT3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gcGl4ZWxzID0gYWRvcHRBcnJh
eVB0cihuZXcgdW5zaWduZWQgY2hhclt0b3RhbEJ5dGVzXSk7Ci0gICAgaWYgKCFwaXhlbHMpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHJlYWRSZW5kZXJpbmdSZXN1bHRzKHBpeGVscy5nZXQoKSwg
dG90YWxCeXRlcyk7Ci0KLSAgICBpZiAoIW1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhKSB7Ci0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KSB7Ci0gICAgICAg
ICAgICAvLyBQcmVtdWx0aXBseSBhbHBoYQotICAgICAgICAgICAgcGl4ZWxzW2kgKyAwXSA9IHN0
ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAwXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOwotICAgICAg
ICAgICAgcGl4ZWxzW2kgKyAxXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAxXSAqIHBpeGVs
c1tpICsgM10gLyAyNTUpOwotICAgICAgICAgICAgcGl4ZWxzW2kgKyAyXSA9IHN0ZDo6bWluKDI1
NSwgcGl4ZWxzW2kgKyAyXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcGFpbnRUb0NhbnZhcyhwaXhlbHMuZ2V0KCksIG1fY3VycmVudFdpZHRoLCBtX2N1
cnJlbnRIZWlnaHQsCi0gICAgICAgICAgICAgICAgICBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+
aGVpZ2h0KCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKLX0K
LSNlbmRpZgotCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKLXsKLSAgICAvLyBSZWFkaW5nIHByZW11bHRp
cGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3aGljaCBpcwotICAg
IC8vIGxvc3N5Ci0gICAgaWYgKG1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6
Y3JlYXRlKEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCkpOwotICAgIHVu
c2lnbmVkIGNoYXIqIHBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsK
LSAgICBpbnQgdG90YWxCeXRlcyA9IDQgKiBtX2N1cnJlbnRXaWR0aCAqIG1fY3VycmVudEhlaWdo
dDsKLQotICAgIHJlYWRSZW5kZXJpbmdSZXN1bHRzKHBpeGVscywgdG90YWxCeXRlcyk7Ci0KLSAg
ICAvLyBDb252ZXJ0IHRvIFJHQkEKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7
IGkgKz0gNCkKLSAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7Ci0K
LSAgICByZXR1cm4gaW1hZ2VEYXRhLnJlbGVhc2UoKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgaWYgKCFwbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEKCkpCkBAIC0zMjUsMTEgKzIzNSw2IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHQKICAgICA6OmdsRmx1c2goKTsKIH0KIAotSW50U2l6
ZSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSBjb25zdAot
ewotICAgIHJldHVybiBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOwot
fQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCiB7CiAgICAgaWYg
KG1fbGF5ZXJDb21wb3NpdGVkKQpAQCAtMzUxLDM1ICsyNTYsNiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCiAgICAgbV9sYXllckNvbXBvc2l0ZWQgPSB0cnVlOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1
cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hY3RpdmVUZXh0dXJlID0g
dGV4dHVyZTsKLSAgICA6OmdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxh
dGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIEFTU0VS
VChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xBdHRhY2hTaGFk
ZXIocHJvZ3JhbSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0
dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNv
bnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwg
bmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1
ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsK
LX0KLQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKQEAgLTM5NCwxNTggKzI3MCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRG
cmFtZWJ1ZmZlcigKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5k
ZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVY
VCh0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fYWN0aXZlVGV4dHVyZSAmJiB0
YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgbV9ib3VuZFRleHR1cmUwID0gdGV4dHVy
ZTsKLSAgICA6OmdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVl
biwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2Rl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCbGVuZEVxdWF0aW9uKG1v
ZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUo
R0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFs
cGhhKTsKLX0KLQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMoR0MzRGVudW0g
c2ZhY3RvciwgR0MzRGVudW0gZGZhY3RvcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICA6OmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwotfSAgICAgICAKLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNE
ZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdC
LCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgR0MzRGVu
dW0gdXNhZ2UpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJ1ZmZlckRh
dGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9p
ZCogZGF0YSwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZz
ZXQsIHNpemUsIGRhdGEpOwotfQotCi1HQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdldCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoR0MzRGNsYW1wZiByLCBH
QzNEY2xhbXBmIGcsIEdDM0RjbGFtcGYgYiwgR0MzRGNsYW1wZiBhKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ2xlYXIobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ2xlYXJEZXB0aChkZXB0aCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNsZWFyU3RlbmNpbChHQzNEaW50IHMpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbENsZWFyU3RlbmNpbChzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4s
IEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmpl
Y3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotCi0gICAgaW50IEdMc2hhZGVyVHlwZTsKLSAgICBBTkdMRVNoYWRlclR5cGUgc2hhZGVy
VHlwZTsKLQotICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBTSEFERVJfVFlQRSwgJkdMc2hhZGVy
VHlwZSk7Ci0gICAgCi0gICAgaWYgKEdMc2hhZGVyVHlwZSA9PSBWRVJURVhfU0hBREVSKQotICAg
ICAgICBzaGFkZXJUeXBlID0gU0hBREVSX1RZUEVfVkVSVEVYOwotICAgIGVsc2UgaWYgKEdMc2hh
ZGVyVHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpCi0gICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJf
VFlQRV9GUkFHTUVOVDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybjsgLy8gSW52YWxpZCBzaGFk
ZXIgdHlwZS4KLQotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50
cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0K
LSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKLQot
ICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlOwotICAgIFN0cmluZyBzaGFkZXJJbmZv
TG9nOwotCi0gICAgYm9vbCBpc1ZhbGlkID0gbV9jb21waWxlci52YWxpZGF0ZVNoYWRlclNvdXJj
ZShlbnRyeS5zb3VyY2UudXRmOCgpLmRhdGEoKSwgc2hhZGVyVHlwZSwgdHJhbnNsYXRlZFNoYWRl
clNvdXJjZSwgc2hhZGVySW5mb0xvZyk7Ci0KLSAgICBlbnRyeS5sb2cgPSBzaGFkZXJJbmZvTG9n
OwotICAgIGVudHJ5LmlzVmFsaWQgPSBpc1ZhbGlkOwotCi0gICAgaWYgKCFpc1ZhbGlkKQotICAg
ICAgICByZXR1cm47IC8vIFNoYWRlciBkaWRuJ3QgdmFsaWRhdGUsIGRvbid0IG1vdmUgZm9yd2Fy
ZCB3aXRoIGNvbXBpbGluZyB0cmFuc2xhdGVkIHNvdXJjZSAgICAKLQotICAgIGludCB0cmFuc2xh
dGVkU2hhZGVyTGVuZ3RoID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKTsKLQotICAg
IGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nID0gdHJhbnNsYXRlZFNoYWRl
clNvdXJjZS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclB0ciA9IHRy
YW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRhdGEoKTsKLSAgICAKLSAgICA6OmdsU2hhZGVyU291cmNl
KHNoYWRlciwgMSwgJnRyYW5zbGF0ZWRTaGFkZXJQdHIsICZ0cmFuc2xhdGVkU2hhZGVyTGVuZ3Ro
KTsKLSAgICAKLSAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOwotICAgIAotICAgIGludCBH
TENvbXBpbGVTdWNjZXNzOwotICAgIAotICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJ
TEVfU1RBVFVTLCAmR0xDb21waWxlU3VjY2Vzcyk7Ci0gICAgCi0gICAgLy8gQVNTRVJUIHRoYXQg
QU5HTEUgZ2VuZXJhdGVkIEdMU0wgd2lsbCBiZSBhY2NlcHRlZCBieSBPcGVuR0wKLSAgICBBU1NF
UlQoR0xDb21waWxlU3VjY2VzcyA9PSBHTF9UUlVFKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCiB7CiAgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CkBAIC01NzQsMTMyICsyOTgsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpj
b3B5VGV4U3ViSW1hZ2UyCiAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVC
VUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICA6OmdsQ3VsbEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRl
cHRoRnVuYyhHQzNEZW51bSBmdW5jKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xEZXB0aEZ1bmMoZnVuYyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRo
TWFzayhHQzNEYm9vbGVhbiBmbGFnKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xEZXB0aE1hc2soZmxhZyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRo
UmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAg
IEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEZXRh
Y2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZGlzYWJsZShHQzNEZW51bSBjYXApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
OjpnbERpc2FibGUoY2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIDo6Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmly
c3QsIEdDM0RzaXplaSBjb3VudCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsRHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNE
ZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9j
YXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZShHQzNEZW51bSBjYXApCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbEVuYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5k
ZXgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2goKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xGaW5pc2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Zmx1c2goKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xG
bHVzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRl
cmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwg
YXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0
dXJlLCBHQzNEaW50IGxldmVsKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwg
dGV4dHVyZSwgbGV2ZWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2Uo
R0MzRGVudW0gbW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRnJv
bnRGYWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1h
cChHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bEdlbmVyYXRlTWlwbWFwRVhUKHRhcmdldCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4
LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIGlmICghcHJvZ3JhbSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTGludCBtYXhBdHRyaWJ1dGVTaXpl
ID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVf
TUFYX0xFTkdUSCwgJm1heEF0dHJpYnV0ZVNpemUpOwotICAgIEdMY2hhciBuYW1lW21heEF0dHJp
YnV0ZVNpemVdOyAvLyBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVs
bCB0ZXJtaW5hdGlvbgotICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7Ci0gICAgR0xpbnQgc2l6
ZSA9IDA7Ci0gICAgR0xlbnVtIHR5cGUgPSAwOwotICAgIDo6Z2xHZXRBY3RpdmVBdHRyaWIocHJv
Z3JhbSwgaW5kZXgsIG1heEF0dHJpYnV0ZVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUs
IG5hbWUpOwotICAgIGlmICghbmFtZUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGluZm8ubmFtZSA9IFN0cmluZyhuYW1lLCBuYW1lTGVuZ3RoKTsKLSAgICBpbmZvLnR5cGUgPSB0
eXBlOwotICAgIGluZm8uc2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0gICAgCiBi
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCiB7CiAgICAgaWYgKCFw
cm9ncmFtKSB7CkBAIC03MjIsMTY2ICszMjAsMjUgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0QWN0aXZlVW5pZm9ybQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNE
c2l6ZWkgbWF4Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNoYWRl
cnMpCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElO
VkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIDo6Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNv
dW50LCBzaGFkZXJzKTsKLX0KLQotaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2Nh
dGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCB2b2lkKiBkYXRhKQogewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIC0x
OwotCisgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUg
ZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKKyAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5n
IGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KICAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0s
IG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDb250ZXh0QXR0cmlidXRlcygpCi17Ci0gICAgcmV0dXJu
IG1fYXR0cnM7Ci19Ci0KLUdDM0RlbnVtIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcigpCi17
Ci0gICAgaWYgKG1fc3ludGhldGljRXJyb3JzLnNpemUoKSA+IDApIHsKLSAgICAgICAgTGlzdEhh
c2hTZXQ8R0MzRGVudW0+OjppdGVyYXRvciBpdGVyID0gbV9zeW50aGV0aWNFcnJvcnMuYmVnaW4o
KTsKLSAgICAgICAgR0MzRGVudW0gZXJyID0gKml0ZXI7Ci0gICAgICAgIG1fc3ludGhldGljRXJy
b3JzLnJlbW92ZShpdGVyKTsKLSAgICAgICAgcmV0dXJuIGVycjsKKyAgICA6OmdsRmx1c2goKTsK
KyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxl
RkJPKSB7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZF
Ul9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6Z2xCbGl0RnJhbWVi
dWZmZXJFWFQoeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4LCB5LCB4ICsgd2lkdGgsIHkg
KyBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisgICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6
Z2xGbHVzaCgpOwogICAgIH0KLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVy
biA6OmdsR2V0RXJyb3IoKTsKKyAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2Jv
dW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotU3RyaW5nIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gU3RyaW5nKChjb25zdCBjaGFyKikgOjpnbEdldFN0
cmluZyhuYW1lKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmhpbnQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xIaW50KHRhcmdldCwgbW9kZSk7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4
dDNEOjppc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgcmV0dXJuIDo6Z2xJc0J1ZmZlcihidWZmZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFw
aGljc0NvbnRleHQzRDo6aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbElzRW5hYmxlZChjYXApOwotfQotCi1HQzNEYm9v
bGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZy
YW1lYnVmZmVyKQotewotICAgIGlmICghZnJhbWVidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9G
QUxTRTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsSXNGcmFt
ZWJ1ZmZlckVYVChmcmFtZWJ1ZmZlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4
dDNEOjppc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIGlmICghcHJv
Z3JhbSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgcmV0dXJuIDo6Z2xJc1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLUdDM0Rib29sZWFu
IEdyYXBoaWNzQ29udGV4dDNEOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRl
cmJ1ZmZlcikKLXsKLSAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xJc1JlbmRl
cmJ1ZmZlckVYVChyZW5kZXJidWZmZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHQzRDo6aXNTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgaWYgKCFzaGFk
ZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIHJldHVybiA6OmdsSXNTaGFkZXIoc2hhZGVyKTsKLX0KLQotR0MzRGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0g
ICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbElzVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsTGluZVdpZHRoKHdpZHRoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGlua1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICA6OmdsTGlua1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0
b3IsIEdDM0RmbG9hdCB1bml0cykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsUG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRh
dGEpCi17Ci0gICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0
aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKLSAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVy
aW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRmx1c2goKTsKLSAgICBpZiAobV9hdHRycy5hbnRp
YWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVG
Qk8pOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJf
RVhULCBtX2Zibyk7Ci0gICAgICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoeCwgeSwgeCArIHdp
ZHRoLCB5ICsgaGVpZ2h0LCB4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIEdMX0NPTE9SX0JV
RkZFUl9CSVQsIEdMX0xJTkVBUik7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgICAgIDo6Z2xGbHVzaCgpOwotICAgIH0KLSAg
ICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEp
OwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1w
bGVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBtX211bHRpc2FtcGxlRkJPKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFz
ZVNoYWRlckNvbXBpbGVyKCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgaW1wbGVtZW50
ZWQgb24gZGVza3RvcCBPcGVuR0wuIFdlIG5lZWQgdG8gaGF2ZSBpZmRlZnMgZm9yIHRoZSBkaWZm
ZXJlbnQgR0wgdmFyaWFudHMKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAvLzo6Z2xS
ZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVu
ZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKIHsKICAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CkBAIC05MDIs
MzAyICszNTksNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yCiAg
ICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdl
KEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICA6OmdsU2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICA6OmdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBj
b25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLQotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotCi0gICAgU2hhZGVyU291cmNlRW50cnkgZW50cnk7Ci0KLSAgICBl
bnRyeS5zb3VyY2UgPSBzdHJpbmc7Ci0KLSAgICBtX3NoYWRlclNvdXJjZU1hcC5zZXQoc2hhZGVy
LCBlbnRyeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jKEdDM0Rl
bnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xTdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2Us
IEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMs
IHJlZiwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrKEdD
M0R1aW50IG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5j
aWxNYXNrKG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFza1Nl
cGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51
bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbFN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWls
LCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFz
cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmYoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHZhbHVlKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHZhbHVl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyaShHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmKEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RmbG9hdCB2MCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5p
Zm9ybTFmKGxvY2F0aW9uLCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0xZnYobG9jYXRp
b24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJm
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtMmYobG9jYXRpb24sIHYwLCB2MSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlv
biwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgLy8gRklYTUU6IGxl
bmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsVW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0
IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICA6OmdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxv
YXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRz
IHRvIGJlIGEgbXVsdGlwbGUgb2YgMwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0Rm
bG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQotewotICAgIC8vIEZJWE1FOiBsZW5n
dGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgOjpnbFVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0xaShsb2NhdGlv
biwgdjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmkoR0MzRGludCBsb2NhdGlv
biwgR0MzRGludCB2MCwgR0MzRGludCB2MSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICA6OmdsVW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBH
QzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVs
dGlwbGUgb2YgMgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtMml2
KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0zaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBHQzNEaW50
IHYyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtM2kobG9j
YXRpb24sIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
M2l2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKLXsK
LSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMwotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCBh
cnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aShHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBHQzNEaW50IHYyLCBHQzNEaW50IHYzKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtNGkobG9jYXRpb24s
IHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRp
dihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCi17Ci0g
ICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwgYXJy
YXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiBhcnJheSwgR0Mz
RHNpemVpIHNpemUpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRp
cGxlIG9mIDQKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybU1hdHJp
eDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICAv
LyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOQotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0
cmFuc3Bvc2UsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1h
dHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9h
dCogYXJyYXksIEdDM0RzaXplaSBzaXplKQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMg
dG8gYmUgYSBtdWx0aXBsZSBvZiAxNgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVzZVByb2dyYW0o
cHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbShQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCB2MCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
VmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5KQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFy
cmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmYoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZihpbmRleCwgdjAsIHYxKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBH
QzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xW
ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0
IHYxLCBHQzNEZmxvYXQgdjIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bFZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZnYo
aW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmli
NGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQg
djIsIEdDM0RmbG9hdCB2MykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
VmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIGFy
cmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0
ZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0
cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBH
QzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50cHRyIG9mZnNl
dCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVmVydGV4QXR0cmliUG9p
bnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9j
YXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgOjpnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRCb29sZWFudihHQzNEZW51bSBwbmFtZSwgR0MzRGJvb2xlYW4qIHZh
bHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRCb29sZWFudihw
bmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJh
bWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0QnVmZmVyUGFyYW1ldGVy
aXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldEZsb2F0dihwbmFtZSwgdmFsdWUpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJp
dihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBH
QzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAoYXR0
YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpCi0gICAgICAgIGF0dGFjaG1lbnQg
PSBERVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVOQ0lMX0FUVEFDSE1FTlQsIGVpdGhlciB3b3Jr
cy4KLSAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQodGFyZ2V0
LCBhdHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCiB7CiAgICAgLy8g
TmVlZCB0byBlbXVsYXRlIE1BWF9GUkFHTUVOVC9WRVJURVhfVU5JRk9STV9WRUNUT1JTIGFuZCBN
QVhfVkFSWUlOR19WRUNUT1JTCkBAIC0xMjIzLDE3OSArMzg0LDYgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0SW50ZWdlcnYoR0MzRAogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5h
bWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0p
Ci17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgR0xpbnQgbGVuZ3RoOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19M
T0dfTEVOR1RILCAmbGVuZ3RoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuICIi
OwotCi0gICAgR0xzaXplaSBzaXplOwotICAgIEdMY2hhciogaW5mbyA9IChHTGNoYXIqKSBmYXN0
TWFsbG9jKGxlbmd0aCk7Ci0KLSAgICA6OmdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSwgbGVu
Z3RoLCAmc2l6ZSwgaW5mbyk7Ci0gICAgU3RyaW5nIHMoaW5mbyk7Ci0gICAgZmFzdEZyZWUoaW5m
byk7Ci0gICAgcmV0dXJuIHM7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0Rp
bnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRSZW5k
ZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBH
QzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0K
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVj
dCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1h
cC5maW5kKHNoYWRlcik7Ci0gICAgCi0gICAgc3dpdGNoIChwbmFtZSkgewotICAgICAgICBjYXNl
IERFTEVURV9TVEFUVVM6Ci0gICAgICAgIGNhc2UgU0hBREVSX1RZUEU6Ci0gICAgICAgICAgICAv
LyBMZXQgT3BlbkdMIGhhbmRsZSB0aGVzZS4KLSAgICAgICAgCi0gICAgICAgICAgICA6OmdsR2V0
U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIAotICAgICAgICBjYXNlIENPTVBJTEVfU1RBVFVTOgotICAgICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgewotICAgICAgICAgICAgICAgICgqdmFsdWUp
ID0gc3RhdGljX2Nhc3Q8aW50PihmYWxzZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgICAgICgqdmFsdWUpID0gc3RhdGljX2Nhc3Q8
aW50PihyZXN1bHQtPnNlY29uZC5pc1ZhbGlkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAKLSAgICAgICAgY2FzZSBJTkZPX0xPR19MRU5HVEg6Ci0gICAgICAgICAgICBpZiAocmVzdWx0
ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgKCp2YWx1ZSkg
PSAwOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgICAgICAoKnZhbHVlKSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVyKS5sZW5ndGgoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAgY2FzZSBTSEFERVJfU09VUkNF
X0xFTkdUSDoKLSAgICAgICAgICAgICgqdmFsdWUpID0gZ2V0U2hhZGVyU291cmNlKHNoYWRlciku
bGVuZ3RoKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX0VOVU0pOwotICAgIH0KLX0K
LQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RP
YmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0KLSAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVu
dHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwot
Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgIHJl
dHVybiAiIjsKLQotICAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeSA9IHJlc3VsdC0+c2Vjb25k
OwotCi0gICAgIGlmIChlbnRyeS5pc1ZhbGlkKSB7Ci0gICAgICAgICBHTGludCBsZW5ndGg7Ci0g
ICAgICAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5n
dGgpOwotICAgICAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgICAgICAgcmV0dXJuICIiOwotCi0g
ICAgICAgICBHTHNpemVpIHNpemU7Ci0gICAgICAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikg
ZmFzdE1hbGxvYyhsZW5ndGgpOwotCi0gICAgICAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFk
ZXIsIGxlbmd0aCwgJnNpemUsIGluZm8pOwotCi0gICAgICAgICBTdHJpbmcgcyhpbmZvKTsKLSAg
ICAgICAgIGZhc3RGcmVlKGluZm8pOwotICAgICAgICAgcmV0dXJuIHM7Ci0gICAgIH0gZWxzZQot
ICAgICAgICAgcmV0dXJuIGVudHJ5LmxvZzsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJU
KHNoYWRlcik7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIEhhc2hNYXA8UGxh
dGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3No
YWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0KLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVy
U291cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gIiI7Ci0KLSAgICByZXR1cm4gcmVzdWx0
LT5zZWNvbmQuc291cmNlOwotfQotCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBh
cmFtZXRlcmZ2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFs
dWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldFRleFBhcmFtZXRl
cmZ2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldFRleFBh
cmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICA6OmdsR2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0s
IEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIDo6Z2xHZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsK
LX0KLQotR0MzRGludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEFTU0VSVChw
cm9ncmFtKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsR2V0
VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNE
ZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsR2V0VmVydGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KEdDM0R1aW50IGluZGV4
LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgOjpnbEdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwot
fQotCi1HQzNEc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNl
dChHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0KLSAgICBHTHZvaWQqIHBvaW50ZXIgPSAwOwotICAgIDo6Z2xHZXRWZXJ0ZXhBdHRy
aWJQb2ludGVydihpbmRleCwgcG5hbWUsICZwb2ludGVyKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8R0MzRHNpemVpcHRyPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7Ci19
Ci0KIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCiB7CiAgICAgaWYgKHdpZHRoICYmIGhlaWdodCAm
JiAhcGl4ZWxzKSB7CkBAIC0xNDE1LDEyMSArNDAzLDYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6dGV4SW1hZ2UyRChHQzNEZQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2ZmLCBHQzNEaW50IHlvZmYsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICAvLyBGSVhNRTogd2Ugd2lsbCBu
ZWVkIHRvIGRlYWwgd2l0aCBQaXhlbFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxpbmcgd2l0aCBpbWFn
ZSBidWZmZXJzIHRoYXQgZGlmZmVyIGZyb20gdGhlIHN1YmltYWdlIHNpemUKLSAgICA6OmdsVGV4
U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHBpeGVscyk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0
M0Q6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1
aW50IG8gPSAwOwotICAgIGdsR2VuQnVmZmVycygxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0K
LVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKCkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xH
ZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQotCi1QbGF0Zm9ybTNE
T2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFtKCkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Ci19Ci0KLVBsYXRm
b3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsR2VuUmVu
ZGVyYnVmZmVyc0VYVCgxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRmb3JtM0RPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbENyZWF0ZVNoYWRlcigodHlwZSA9
PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURF
Uik7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1
cmUoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBvID0gMDsKLSAg
ICBnbEdlblRleHR1cmVzKDEsICZvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0z
RE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmZnJhbWVidWZmZXIpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9y
bTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJnJlbmRlcmJ1ZmZlcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RP
YmplY3QgdGV4dHVyZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0
ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3lu
dGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IpCi17Ci0gICAgbV9zeW50aGV0aWNFcnJvcnMu
YWRkKGVycm9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0NvbnRleHRDaGFu
Z2VkKCkKLXsKLSAgICBtX2xheWVyQ29tcG9zaXRlZCA9IGZhbHNlOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKLXsKLSAgICBtX2xheWVyQ29tcG9z
aXRlZCA9IHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRl
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGVkOwotfQotCi1FeHRlbnNp
b25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkKLXsKLSAgICBpZiAoIW1f
ZXh0ZW5zaW9ucykKLSAgICAgICAgbV9leHRlbnNpb25zID0gYWRvcHRQdHIobmV3IEV4dGVuc2lv
bnMzRE9wZW5HTCh0aGlzKSk7Ci0gICAgcmV0dXJuIG1fZXh0ZW5zaW9ucy5nZXQoKTsKLX0KLQog
fQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMQmFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xCYXNlLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3
LmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkV4dGVu
c2lvbnMzRE9wZW5HTC5oIgorI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnQz
MkFycmF5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJVaW50OEFy
cmF5LmgiCisjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKKyNpbmNsdWRlIDxjc3RyaW5nPgorI2lu
Y2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KKyNlbGlmIFBMQVRG
T1JNKEdUSykKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VsaWYgUExBVEZPUk0oUVQpCisj
aW5jbHVkZSA8UXRHbG9iYWw+CisjaW5jbHVkZSA8Y2Fpcm8vT3BlbkdMU2hpbXMuaD4KKyNlbmRp
ZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlk
YXRlQXR0cmlidXRlcygpCit7CisgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0
ZW5zaW9ucygpOworICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgaWYgKGV4dGVu
c2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKSkgeworICAgICAg
ICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVu
Y2lsIik7CisgICAgICAgICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCisg
ICAgICAgICAgICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBtX2F0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKG1fYXR0cnMuYW50
aWFsaWFzKSB7CisgICAgICAgIGJvb2wgaXNWYWxpZFZlbmRvciA9IHRydWU7CisgICAgICAgIC8v
IEN1cnJlbnRseSBpbiBNYWMgd2Ugb25seSB0dXJuIG9uIGFudGlhbGlhcyBpZiB2ZW5kb3IgaXMg
TlZJRElBLgorICAgICAgICBjb25zdCBjaGFyKiB2ZW5kb3IgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX1ZFTkRPUikpOworICAgICAgICBpZiAoIXN0ZDo6
c3Ryc3RyKHZlbmRvciwgIk5WSURJQSIpKQorICAgICAgICAgICAgaXNWYWxpZFZlbmRvciA9IGZh
bHNlOworICAgICAgICBpZiAoIWlzVmFsaWRWZW5kb3IgfHwgIWV4dGVuc2lvbnMtPnN1cHBvcnRz
KCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpKQorICAgICAgICAgICAgbV9hdHRy
cy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXh0ZW5zaW9u
cy0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKKyAg
ICB9Cit9CisKKyNpZiAhUExBVEZPUk0oUVQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
KQoreworICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52YXMoKTsK
KyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOworCisgICAg
aW50IHJvd0J5dGVzID0gbV9jdXJyZW50V2lkdGggKiA0OworICAgIGludCB0b3RhbEJ5dGVzID0g
cm93Qnl0ZXMgKiBtX2N1cnJlbnRIZWlnaHQ7CisKKyAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBj
aGFyPiBwaXhlbHMgPSBhZG9wdEFycmF5UHRyKG5ldyB1bnNpZ25lZCBjaGFyW3RvdGFsQnl0ZXNd
KTsKKyAgICBpZiAoIXBpeGVscykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVhZFJlbmRlcmlu
Z1Jlc3VsdHMocGl4ZWxzLmdldCgpLCB0b3RhbEJ5dGVzKTsKKworICAgIGlmICghbV9hdHRycy5w
cmVtdWx0aXBsaWVkQWxwaGEpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5
dGVzOyBpICs9IDQpIHsKKyAgICAgICAgICAgIC8vIFByZW11bHRpcGx5IGFscGhhCisgICAgICAg
ICAgICBwaXhlbHNbaSArIDBdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDBdICogcGl4ZWxz
W2kgKyAzXSAvIDI1NSk7CisgICAgICAgICAgICBwaXhlbHNbaSArIDFdID0gc3RkOjptaW4oMjU1
LCBwaXhlbHNbaSArIDFdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7CisgICAgICAgICAgICBwaXhl
bHNbaSArIDJdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDJdICogcGl4ZWxzW2kgKyAzXSAv
IDI1NSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQo
KSwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwKKyAgICAgICAgICAgICAgICAgIGNh
bnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+
cGxhdGZvcm1Db250ZXh0KCkpOworfQorI2VuZGlmCisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBH
cmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQorewor
ICAgIC8vIFJlYWRpbmcgcHJlbXVsdGlwbGllZCBhbHBoYSB3b3VsZCBpbnZvbHZlIHVucHJlbXVs
dGlwbHlpbmcsIHdoaWNoIGlzCisgICAgLy8gbG9zc3kKKyAgICBpZiAobV9hdHRycy5wcmVtdWx0
aXBsaWVkQWxwaGEpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPEltYWdlRGF0YT4g
aW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9j
dXJyZW50SGVpZ2h0KSk7CisgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gaW1hZ2VEYXRhLT5k
YXRhKCktPmRhdGEoKS0+ZGF0YSgpOworICAgIGludCB0b3RhbEJ5dGVzID0gNCAqIG1fY3VycmVu
dFdpZHRoICogbV9jdXJyZW50SGVpZ2h0OworCisgICAgcmVhZFJlbmRlcmluZ1Jlc3VsdHMocGl4
ZWxzLCB0b3RhbEJ5dGVzKTsKKworICAgIC8vIENvbnZlcnQgdG8gUkdCQQorICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQorICAgICAgICBzdGQ6OnN3YXAocGl4ZWxz
W2ldLCBwaXhlbHNbaSArIDJdKTsKKworICAgIHJldHVybiBpbWFnZURhdGEucmVsZWFzZSgpOwor
fQorCitJbnRTaXplIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVu
dEhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUoR0Mz
RGVudW0gdGV4dHVyZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2FjdGl2
ZVRleHR1cmUgPSB0ZXh0dXJlOworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7
CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWlu
dCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmluZEF0dHJpYkxvY2F0aW9uKHByb2dy
YW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJpbmRCdWZmZXIodGFyZ2V0
LCBidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZShHQzNE
ZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAobV9hY3RpdmVUZXh0dXJlICYmIHRhcmdldCA9PSBHTF9URVhU
VVJFXzJEKQorICAgICAgICBtX2JvdW5kVGV4dHVyZTAgPSB0ZXh0dXJlOworICAgIDo6Z2xCaW5k
VGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
aW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJi
dWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJpbmRSZW5kZXJi
dWZmZXJFWFQodGFyZ2V0LCByZW5kZXJidWZmZXIpOworfQorCitHQzNEZW51bSBHcmFwaGljc0Nv
bnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzRVhUKHRhcmdldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kQ29sb3Io
R0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNs
YW1wZiBhbHBoYSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmxlbmRD
b2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsQmxlbmRFcXVhdGlvbihtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVt
IG1vZGVBbHBoYSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmxlbmRF
cXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Cit9CisKKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3Ip
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJsZW5kRnVuYyhzZmFjdG9y
LCBkZmFjdG9yKTsKK30gICAgICAgCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVu
Y1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNB
bHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbEJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxw
aGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRh
cmdldCwgR0MzRHNpemVpcHRyIHNpemUsIEdDM0RlbnVtIHVzYWdlKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2Up
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwg
c2l6ZSwgZGF0YSwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJT
dWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBz
aXplLCBjb25zdCB2b2lkKiBkYXRhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbENsZWFyKG1hc2spOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKEdDM0RjbGFtcGYgciwgR0MzRGNsYW1wZiBnLCBHQzNE
Y2xhbXBmIGIsIEdDM0RjbGFtcGYgYSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICA6OmdsQ2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xDbGVhckRlcHRoKGRlcHRoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsQ2xlYXJTdGVuY2lsKHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xl
YW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIp
Cit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAg
ICBpbnQgR0xzaGFkZXJUeXBlOworICAgIEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlOworCisg
ICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIFNIQURFUl9UWVBFLCAmR0xzaGFkZXJUeXBlKTsKKyAg
ICAKKyAgICBpZiAoR0xzaGFkZXJUeXBlID09IFZFUlRFWF9TSEFERVIpCisgICAgICAgIHNoYWRl
clR5cGUgPSBTSEFERVJfVFlQRV9WRVJURVg7CisgICAgZWxzZSBpZiAoR0xzaGFkZXJUeXBlID09
IEZSQUdNRU5UX1NIQURFUikKKyAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX0ZSQUdN
RU5UOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOyAvLyBJbnZhbGlkIHNoYWRlciB0eXBlLgor
CisgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJh
dG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKworICAgIGlmIChy
ZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOworCisgICAgU3RyaW5n
IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CisgICAgU3RyaW5nIHNoYWRlckluZm9Mb2c7CisKKyAg
ICBib29sIGlzVmFsaWQgPSBtX2NvbXBpbGVyLnZhbGlkYXRlU2hhZGVyU291cmNlKGVudHJ5LnNv
dXJjZS51dGY4KCkuZGF0YSgpLCBzaGFkZXJUeXBlLCB0cmFuc2xhdGVkU2hhZGVyU291cmNlLCBz
aGFkZXJJbmZvTG9nKTsKKworICAgIGVudHJ5LmxvZyA9IHNoYWRlckluZm9Mb2c7CisgICAgZW50
cnkuaXNWYWxpZCA9IGlzVmFsaWQ7CisKKyAgICBpZiAoIWlzVmFsaWQpCisgICAgICAgIHJldHVy
bjsgLy8gU2hhZGVyIGRpZG4ndCB2YWxpZGF0ZSwgZG9uJ3QgbW92ZSBmb3J3YXJkIHdpdGggY29t
cGlsaW5nIHRyYW5zbGF0ZWQgc291cmNlICAgIAorCisgICAgaW50IHRyYW5zbGF0ZWRTaGFkZXJM
ZW5ndGggPSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLmxlbmd0aCgpOworCisgICAgY29uc3QgQ1N0
cmluZyYgdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcgPSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLnV0
ZjgoKTsKKyAgICBjb25zdCBjaGFyKiB0cmFuc2xhdGVkU2hhZGVyUHRyID0gdHJhbnNsYXRlZFNo
YWRlckNTdHJpbmcuZGF0YSgpOworICAgIAorICAgIDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAx
LCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRyYW5zbGF0ZWRTaGFkZXJMZW5ndGgpOworICAgIAor
ICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7CisgICAgCisgICAgaW50IEdMQ29tcGlsZVN1
Y2Nlc3M7CisgICAgCisgICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgQ09NUElMRV9TVEFUVVMs
ICZHTENvbXBpbGVTdWNjZXNzKTsKKyAgICAKKyAgICAvLyBBU1NFUlQgdGhhdCBBTkdMRSBnZW5l
cmF0ZWQgR0xTTCB3aWxsIGJlIGFjY2VwdGVkIGJ5IE9wZW5HTAorICAgIEFTU0VSVChHTENvbXBp
bGVTdWNjZXNzID09IEdMX1RSVUUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjdWxs
RmFjZShHQzNEZW51bSBtb2RlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xDdWxsRmFjZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhGdW5j
KEdDM0RlbnVtIGZ1bmMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERl
cHRoRnVuYyhmdW5jKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKEdD
M0Rib29sZWFuIGZsYWcpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERl
cHRoTWFzayhmbGFnKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZShH
QzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbERlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0
Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgQVNTRVJU
KHNoYWRlcik7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERldGFjaFNoYWRl
cihwcm9ncmFtLCBzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxl
KEdDM0RlbnVtIGNhcCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRGlz
YWJsZShjYXApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0Mz
RHNpemVpIGNvdW50KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEcmF3
QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5
cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2
b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZW5hYmxlKEdDM0RlbnVtIGNhcCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsRW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFy
Z2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCBhdHRhY2htZW50
LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNo
bWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEdDM0Rp
bnQgbGV2ZWwpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEZyYW1lYnVm
ZmVyVGV4dHVyZTJERVhUKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBs
ZXZlbCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlwbWFwKEdDM0Rl
bnVtIHRhcmdldCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2VuZXJh
dGVNaXBtYXBFWFQodGFyZ2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZmluaXNo
KCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRmluaXNoKCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsRmx1c2goKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJv
bnRGYWNlKEdDM0RlbnVtIG1vZGUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbEZyb250RmFjZShtb2RlKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0
aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2
ZUluZm8mIGluZm8pCit7CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50IG1heEF0dHJpYnV0ZVNpemUgPSAwOwor
ICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVO
R1RILCAmbWF4QXR0cmlidXRlU2l6ZSk7CisgICAgR0xjaGFyIG5hbWVbbWF4QXR0cmlidXRlU2l6
ZV07IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1p
bmF0aW9uCisgICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKKyAgICBHTGludCBzaXplID0gMDsK
KyAgICBHTGVudW0gdHlwZSA9IDA7CisgICAgOjpnbEdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBp
bmRleCwgbWF4QXR0cmlidXRlU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7
CisgICAgaWYgKCFuYW1lTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaW5mby5u
YW1lID0gU3RyaW5nKG5hbWUsIG5hbWVMZW5ndGgpOworICAgIGluZm8udHlwZSA9IHR5cGU7Cisg
ICAgaW5mby5zaXplID0gc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNpemVpKiBjb3VudCwgUGxhdGZvcm0zRE9iamVj
dCogc2hhZGVycykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhD
b3VudCwgY291bnQsIHNoYWRlcnMpOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0
dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFt
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCitHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQoreworICAgIHJldHVy
biBtX2F0dHJzOworfQorCitHQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IoKQor
eworICAgIGlmIChtX3N5bnRoZXRpY0Vycm9ycy5zaXplKCkgPiAwKSB7CisgICAgICAgIExpc3RI
YXNoU2V0PEdDM0RlbnVtPjo6aXRlcmF0b3IgaXRlciA9IG1fc3ludGhldGljRXJyb3JzLmJlZ2lu
KCk7CisgICAgICAgIEdDM0RlbnVtIGVyciA9ICppdGVyOworICAgICAgICBtX3N5bnRoZXRpY0Vy
cm9ycy5yZW1vdmUoaXRlcik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xHZXRFcnJvcigpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoYXR0YWNo
bWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpCisgICAgICAgIGF0dGFjaG1lbnQgPSBE
RVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVOQ0lMX0FUVEFDSE1FTlQsIGVpdGhlciB3b3Jrcy4K
KyAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBh
dHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQor
CitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFN0cmluZyhHQzNEZW51bSBuYW1lKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBTdHJpbmcoKGNvbnN0IGNoYXIq
KSA6OmdsR2V0U3RyaW5nKG5hbWUpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6aGlu
dChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKworR0MzRGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAg
IGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzQnVmZmVyKGJ1ZmZlcik7Cit9CisKK0dDM0Ri
b29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQoR0MzRGVudW0gY2FwKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7Cit9
CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3Jt
M0RPYmplY3QgZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJu
IDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVmZmVyKTsKK30KKworR0MzRGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVm
ZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVm
ZmVyRVhUKHJlbmRlcmJ1ZmZlcik7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNE
Ojppc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIGlmICghcHJvZ3Jh
bSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgcmV0dXJuIDo6Z2xJc1Byb2dyYW0ocHJvZ3JhbSk7Cit9CisKK0dDM0Rib29sZWFuIEdy
YXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAg
ICBpZiAoIXNoYWRlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc1NoYWRlcihzaGFkZXIpOworfQorCitHQzNE
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4
dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRleHR1
cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdp
ZHRoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xMaW5lV2lkdGgod2lk
dGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0p
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFBpeGVsU3RvcmVpKHBuYW1l
LCBwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQoR0Mz
RGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIC8vIEZJWE1F
OiBUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBkZXNrdG9wIE9wZW5HTC4gV2UgbmVlZCB0byBo
YXZlIGlmZGVmcyBmb3IgdGhlIGRpZmZlcmVudCBHTCB2YXJpYW50cworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIC8vIDo6Z2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6c2FtcGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0Mz
RGJvb2xlYW4gaW52ZXJ0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xT
YW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6c2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTY2lzc29y
KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaGFk
ZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQor
eworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAg
ICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeTsKKworICAgIGVudHJ5LnNvdXJjZSA9IHN0cmluZzsK
KworICAgIG1fc2hhZGVyU291cmNlTWFwLnNldChzaGFkZXIsIGVudHJ5KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYs
IEdDM0R1aW50IG1hc2spCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFN0
ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGlu
dCByZWYsIEdDM0R1aW50IG1hc2spCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNpbE1hc2sobWFzayk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwg
R0MzRHVpbnQgbWFzaykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3Rl
bmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFz
cykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNpbE9wKGZhaWws
IHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcFNl
cGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNE
ZW51bSB6cGFzcykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNp
bE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEZmxvYXQgdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUs
IEdDM0RpbnQgdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFRl
eFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtMWYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMWYobG9jYXRpb24sIHYwKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmYoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbFVuaWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIGFycmF5LCBH
QzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVs
dGlwbGUgb2YgMgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMmZ2
KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0Mz
RGZsb2F0IHYyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3Jt
M2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBz
aXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAz
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0zZnYobG9jYXRpb24s
IHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmKEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIs
IEdDM0RmbG9hdCB2MykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5p
Zm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0Mz
RHNpemVpIHNpemUpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRp
cGxlIG9mIDQKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTRmdihs
b2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtMWkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTFpKGxvY2F0aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogYXJy
YXksIEdDM0RzaXplaSBzaXplKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xVbmlmb3JtMWl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0yaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50
IHYxKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMmkobG9j
YXRpb24sIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaXYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogYXJyYXksIEdDM0RzaXplaSBzaXplKQoreworICAg
IC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyCisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0yaXYobG9jYXRpb24sIHNpemUsIGFycmF5
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEsIEdDM0RpbnQgdjIpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0zaShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRGludCogYXJyYXksIEdDM0RzaXplaSBzaXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGgg
bmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbFVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdD
M0RpbnQgdjEsIEdDM0RpbnQgdjIsIEdDM0RpbnQgdjMpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbFVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5l
ZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xVbmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgyZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAv
LyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAorICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0
cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1h
dHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9h
dCogYXJyYXksIEdDM0RzaXplaSBzaXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMg
dG8gYmUgYSBtdWx0aXBsZSBvZiA5CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRp
b24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNp
emUpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDE2
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm1NYXRyaXg0ZnYobG9j
YXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1c2VQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVXNlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICA6OmdsVmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZihpbmRleCwg
djApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbFZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYw
LCBHQzNEZmxvYXQgdjEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZl
cnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogYXJyYXkpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjJmdihpbmRleCwg
YXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZihHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliM2YoaW5kZXgs
IHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIz
ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZihpbmRleCwg
djAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRy
aWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjRmdihpbmRleCwgYXJyYXkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGlu
ZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQs
IEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBl
LCBub3JtYWxpemVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmll
d3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmlld3BvcnQoeCwg
eSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJvb2xl
YW52KEdDM0RlbnVtIHBuYW1lLCBHQzNEYm9vbGVhbiogdmFsdWUpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbEdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xHZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dihHQzNEZW51bSBwbmFt
ZSwgR0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6
OmdsR2V0RmxvYXR2KHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBH
QzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0
UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCB2YWx1ZSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQorewor
ICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdM
aW50IGxlbmd0aDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0lORk9fTE9HX0xF
TkdUSCwgJmxlbmd0aCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiAiIjsKKwor
ICAgIEdMc2l6ZWkgc2l6ZTsKKyAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxv
YyhsZW5ndGgpOworCisgICAgOjpnbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0sIGxlbmd0aCwg
JnNpemUsIGluZm8pOworICAgIFN0cmluZyBzKGluZm8pOworICAgIGZhc3RGcmVlKGluZm8pOwor
ICAgIHJldHVybiBzOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQor
eworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAg
ICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3Ig
cmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIAorICAgIHN3aXRj
aCAocG5hbWUpIHsKKyAgICBjYXNlIERFTEVURV9TVEFUVVM6CisgICAgY2FzZSBTSEFERVJfVFlQ
RToKKyAgICAgICAgLy8gTGV0IE9wZW5HTCBoYW5kbGUgdGhlc2UuCisgICAgICAgIAorICAgICAg
ICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgdmFsdWUpOworICAgICAgICBicmVhazsK
KyAgICAgICAgCisgICAgY2FzZSBDT01QSUxFX1NUQVRVUzoKKyAgICAgICAgaWYgKHJlc3VsdCA9
PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgeworICAgICAgICAgICAgKCp2YWx1ZSkgPSBzdGF0
aWNfY2FzdDxpbnQ+KGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IAorICAgICAgICAoKnZhbHVlKSA9IHN0YXRpY19jYXN0PGludD4ocmVzdWx0LT5zZWNvbmQuaXNW
YWxpZCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIElORk9fTE9HX0xFTkdU
SDoKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgeworICAg
ICAgICAgICAgKCp2YWx1ZSkgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgCisgICAgICAgICgqdmFsdWUpID0gZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpLmxlbmd0aCgp
OworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBTSEFERVJfU09VUkNFX0xFTkdU
SDoKKyAgICAgICAgKCp2YWx1ZSkgPSBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS5sZW5ndGgoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoSU5WQUxJRF9FTlVNKTsKKyAgICB9Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NF
UlQoc2hhZGVyKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgSGFzaE1hcDxQ
bGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1f
c2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFk
ZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgICByZXR1cm4gIiI7CisKKyAgICAgU2hhZGVyU291
cmNlRW50cnkgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKworICAgICBpZiAoZW50cnkuaXNWYWxp
ZCkgeworICAgICAgICAgR0xpbnQgbGVuZ3RoOworICAgICAgICAgOjpnbEdldFNoYWRlcml2KHNo
YWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICAgICAgIGlmICghbGVuZ3Ro
KQorICAgICAgICAgICAgIHJldHVybiAiIjsKKworICAgICAgICAgR0xzaXplaSBzaXplOworICAg
ICAgICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZhc3RNYWxsb2MobGVuZ3RoKTsKKworICAg
ICAgICAgOjpnbEdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvKTsK
KworICAgICAgICAgU3RyaW5nIHMoaW5mbyk7CisgICAgICAgICBmYXN0RnJlZShpbmZvKTsKKyAg
ICAgICAgIHJldHVybiBzOworICAgICB9CisgICAgcmV0dXJuIGVudHJ5LmxvZzsKK30KKworU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKworICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+Ojpp
dGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisKKyAgICBp
ZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gIiI7
CisKKyAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQuc291cmNlOworfQorCisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
cG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgOjpnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9u
LCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pdihQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHZhbHVlKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRVbmlmb3JtaXYocHJvZ3Jh
bSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKworR0MzRGludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIHJldHVybiA6OmdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgp
LmRhdGEoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2
KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VmVydGV4QXR0cmliZnYoaW5kZXgs
IHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0
dHJpYml2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldFZlcnRleEF0dHJpYml2KGlu
ZGV4LCBwbmFtZSwgdmFsdWUpOworfQorCitHQzNEc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBHTHZvaWQqIHBvaW50ZXIgPSAwOwor
ICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcG5hbWUsICZwb2ludGVyKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0MzRHNpemVpcHRyPihyZWludGVycHJldF9jYXN0PGlu
dHB0cl90Pihwb2ludGVyKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1Yklt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmYsIEdDM0Rp
bnQgeW9mZiwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKworICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQgdG8gZGVhbCB3aXRoIFBp
eGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1ZmZlcnMgdGhhdCBkaWZm
ZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZQorICAgIDo6Z2xUZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsK
K30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKCkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgbyA9IDA7CisgICAgOjpn
bEdlbkJ1ZmZlcnMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCitQbGF0Zm9ybTNET2JqZWN0
IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgR0x1aW50IG8gPSAwOworICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNF
WFQoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNz
Q29udGV4dDNEOjpjcmVhdGVQcm9ncmFtKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgR0x1aW50IG8gPSAwOworICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhU
KDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xDcmVhdGVTaGFkZXIoKHR5cGUgPT0gRlJBR01FTlRf
U0hBREVSKSA/IEdMX0ZSQUdNRU5UX1NIQURFUiA6IEdMX1ZFUlRFWF9TSEFERVIpOworfQorCitQ
bGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgbyA9IDA7CisgICAgOjpnbEdlblRl
eHR1cmVzKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0
IGZyYW1lYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZWxl
dGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJmZyYW1lYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNE
T2JqZWN0IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6
OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZWxldGVTaGFkZXIoc2hhZGVy
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybTNE
T2JqZWN0IHRleHR1cmUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERl
bGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
c3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IpCit7CisgICAgbV9zeW50aGV0aWNFcnJv
cnMuYWRkKGVycm9yKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0NvbnRleHRD
aGFuZ2VkKCkKK3sKKyAgICBtX2xheWVyQ29tcG9zaXRlZCA9IGZhbHNlOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKK3sKKyAgICBtX2xheWVyQ29t
cG9zaXRlZCA9IHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9z
aXRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGVkOworfQorCitFeHRl
bnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkKK3sKKyAgICBpZiAo
IW1fZXh0ZW5zaW9ucykKKyAgICAgICAgbV9leHRlbnNpb25zID0gYWRvcHRQdHIobmV3IEV4dGVu
c2lvbnMzRE9wZW5HTCh0aGlzKSk7CisgICAgcmV0dXJuIG1fZXh0ZW5zaW9ucy5nZXQoKTsKK30K
KworfQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTEVTLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIENoYW5n
U2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNs
dWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciAq
cGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSkKK3sKKyAgICBpbnQgdG90YWxCeXRlcyA9IG1fY3VycmVu
dFdpZHRoICogbV9jdXJyZW50SGVpZ2h0ICogNDsKKyAgICBpZiAocGl4ZWxzU2l6ZSA8IHRvdGFs
Qnl0ZXMpCisgICAgICAgIHJldHVybjsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisg
ICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlh
cykKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKG1f
Ym91bmRGQk8gIT0gbV9mYm8pIHsKKyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsK
KyAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBt
X2Zibyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHTGludCBwYWNrQWxpZ25tZW50ID0gNDsK
KyAgICBib29sIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IGZhbHNlOworICAgIDo6Z2xHZXRJ
bnRlZ2VydihHTF9QQUNLX0FMSUdOTUVOVCwgJnBhY2tBbGlnbm1lbnQpOworICAgIGlmIChwYWNr
QWxpZ25tZW50ID4gNCkgeworICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1F
TlQsIDQpOworICAgICAgICBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSB0cnVlOworICAgIH0K
KworICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWln
aHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7CisgICAgLy8gQ29udmVydCB0
byBCR1JBCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCisgICAg
ICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOworCisgICAgaWYgKG11c3RS
ZXN0b3JlUGFja0FsaWdubWVudCkKKyAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJ
R05NRU5ULCBwYWNrQWxpZ25tZW50KTsKKworICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8p
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhl
aWdodCkKK3sKKyAgICBpZiAoIXBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBt
X2N1cnJlbnRIZWlnaHQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2N1cnJlbnRXaWR0
aCA9IHdpZHRoOworICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKKyAgICAKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKworICAgIEdMdWlu
dCBjb2xvckZvcm1hdCA9IDA7CisgICAgaWYgKG1fYXR0cnMuYWxwaGEpIHsKKyAgICAgICAgbV9p
bnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCQTsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9S
R0JBOworICAgIH0gZWxzZSB7CisgICAgICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JH
QjsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7CisgICAgfQorCisgICAgYm9vbCBtdXN0
UmVzdG9yZUZCTyA9IGZhbHNlOworCisgICAgLy8gcmVzaXplIG11bHRpc2FtcGxlIEZCTworICAg
IGlmIChtX2F0dHJzLmFudGlhbGlhcykKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAK
KyAgICAvLyByZXNpemUgcmVndWxhciBGQk8KKyAgICBpZiAobV9ib3VuZEZCTyAhPSBtX2Zibykg
eworICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgfQorICAgIDo6Z2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIDo6Z2xUZXhJbWFnZTJEKEdM
X1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwg
Y29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgIDo6Z2xGcmFtZWJ1ZmZlclRl
eHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwg
R0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgOjpnbFRleEltYWdlMkQoR0xfVEVY
VFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xv
ckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIDApOworICAgIGlmICghbV9hdHRycy5hbnRpYWxpYXMgJiYgKG1fYXR0cnMuc3Rl
bmNpbCB8fCBtX2F0dHJzLmRlcHRoKSkgeworICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVY
VChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX3N0ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsUmVu
ZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0lOREVY
OCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAg
ICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBH
TF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX3N0ZW5jaWxC
dWZmZXIpOworICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJf
RVhULCBtX2RlcHRoQnVmZmVyKTsKKyAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQo
R0xfUkVOREVSQlVGRkVSX0VYVCwgR0xfREVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQp
OworICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRf
RVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKKyAgICAgICAgOjpnbEJp
bmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7CisgICAgfQorICAgIGlm
IChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKSAhPSBHTF9G
UkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKKyAgICAgICAgLy8gRklYTUU6IGNsZWFudXAKKyAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisKKyAgICBpZiAobV9hdHRycy5hbnRpYWxp
YXMpCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisKKworICAgIC8vIEluaXRpYWxpemUgcmVu
ZGVyYnVmZmVycyB0byAwLgorICAgIEdMZmxvYXQgY2xlYXJDb2xvcltdID0gezAsIDAsIDAsIDB9
LCBjbGVhckRlcHRoID0gMDsKKyAgICBHTGludCBjbGVhclN0ZW5jaWwgPSAwOworICAgIEdMYm9v
bGVhbiBjb2xvck1hc2tbXSA9IHtHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFfSwg
ZGVwdGhNYXNrID0gR0xfVFJVRTsKKyAgICBHTHVpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZmZmZm
OworICAgIEdMYm9vbGVhbiBpc1NjaXNzb3JFbmFibGVkID0gR0xfRkFMU0U7CisgICAgR0xib29s
ZWFuIGlzRGl0aGVyRW5hYmxlZCA9IEdMX0ZBTFNFOworICAgIEdMYml0ZmllbGQgY2xlYXJNYXNr
ID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICA6OmdsR2V0RmxvYXR2KEdMX0NPTE9SX0NMRUFS
X1ZBTFVFLCBjbGVhckNvbG9yKTsKKyAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyAg
ICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09MT1JfV1JJVEVNQVNLLCBjb2xvck1hc2spOworICAgIDo6
Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7CisgICAgaWYg
KG1fYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgOjpnbEdldEZsb2F0dihHTF9ERVBUSF9DTEVBUl9W
QUxVRSwgJmNsZWFyRGVwdGgpOworICAgICAgICA6OmdsQ2xlYXJEZXB0aCgxKTsKKyAgICAgICAg
OjpnbEdldEJvb2xlYW52KEdMX0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7CisgICAgICAg
IDo6Z2xEZXB0aE1hc2soR0xfVFJVRSk7CisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9C
VUZGRVJfQklUOworICAgIH0KKyAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7CisgICAgICAgIDo6
Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFLCAmY2xlYXJTdGVuY2lsKTsKKyAg
ICAgICAgOjpnbENsZWFyU3RlbmNpbCgwKTsKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NU
RU5DSUxfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNrKSk7
CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCAweGZmZmZmZmZmKTsK
KyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAgICB9CisgICAg
aXNTY2lzc29yRW5hYmxlZCA9IDo6Z2xJc0VuYWJsZWQoR0xfU0NJU1NPUl9URVNUKTsKKyAgICA6
OmdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIGlzRGl0aGVyRW5hYmxlZCA9IDo6Z2xJ
c0VuYWJsZWQoR0xfRElUSEVSKTsKKyAgICA6OmdsRGlzYWJsZShHTF9ESVRIRVIpOworCisgICAg
OjpnbENsZWFyKGNsZWFyTWFzayk7CisKKyAgICA6OmdsQ2xlYXJDb2xvcihjbGVhckNvbG9yWzBd
LCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKKyAgICA6Omds
Q29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9y
TWFza1szXSk7CisgICAgaWYgKG1fYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgOjpnbENsZWFyRGVw
dGgoY2xlYXJEZXB0aCk7CisgICAgICAgIDo6Z2xEZXB0aE1hc2soZGVwdGhNYXNrKTsKKyAgICB9
CisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgeworICAgICAgICA6OmdsQ2xlYXJTdGVuY2lsKGNs
ZWFyU3RlbmNpbCk7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCBz
dGVuY2lsTWFzayk7CisgICAgfQorICAgIGlmIChpc1NjaXNzb3JFbmFibGVkKQorICAgICAgICA6
OmdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgZWxzZQorICAgICAgICA6OmdsRGlzYWJs
ZShHTF9TQ0lTU09SX1RFU1QpOworICAgIGlmIChpc0RpdGhlckVuYWJsZWQpCisgICAgICAgIDo6
Z2xFbmFibGUoR0xfRElUSEVSKTsKKyAgICBlbHNlCisgICAgICAgIDo6Z2xEaXNhYmxlKEdMX0RJ
VEhFUik7CisKKyAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKKworICAgIDo6Z2xGbHVz
aCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCit7Cisg
ICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQorICAgICAgICByZXR1cm47CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKQorICAgICAgICBub3RJbXBs
ZW1lbnRlZCgpOworCisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIG1fZmJvKTsKKyAgICA6OmdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7CisgICAgOjpn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgIDo6
Z2xDb3B5VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQs
IDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIDApOworICAgIDo6Z2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2JvdW5kVGV4dHVyZTApOworICAgIDo6Z2xBY3RpdmVU
ZXh0dXJlKG1fYWN0aXZlVGV4dHVyZSk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOworICAgIDo6Z2xGaW5pc2goKTsKKyAgICBtX2xh
eWVyQ29tcG9zaXRlZCA9IHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRG
cmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBmYm87CisgICAgaWYgKGJ1ZmZl
cikKKyAgICAgICAgZmJvID0gYnVmZmVyOworICAgIGVsc2UKKyAgICAgICAgZmJvID0gbV9mYm87
CisKKyAgICBpZiAoZmJvICE9IG1fYm91bmRGQk8pIHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVCh0YXJnZXQsIGZibyk7CisgICAgICAgIG1fYm91bmRGQk8gPSBmYm87CisgICAgfQor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
cikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxp
YXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIAorICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKKyAgICBpZiAobV9hdHRy
cy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3Vi
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwg
R0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICht
X2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCisgICAg
ICAgIG5vdEltcGxlbWVudGVkKCk7CisKKyAgICA6OmdsQ29weVRleFN1YkltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgaWYg
KG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBB
Y3RpdmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTGludCBtYXhVbmlmb3JtU2l6ZSA9IDA7
CisgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVO
R1RILCAmbWF4VW5pZm9ybVNpemUpOworICAgIEdMY2hhciBuYW1lW21heFVuaWZvcm1TaXplXTsg
Ly8gR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9u
CisgICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKKyAgICBHTGludCBzaXplID0gMDsKKyAgICBH
TGVudW0gdHlwZSA9IDA7CisgICAgOjpnbEdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgs
IG1heFVuaWZvcm1TaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKKyAgICBp
ZiAoIW5hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpbmZvLm5hbWUgPSBT
dHJpbmcobmFtZSwgbmFtZUxlbmd0aCk7CisgICAgaW5mby50eXBlID0gdHlwZTsKKyAgICBpbmZv
LnNpemUgPSBzaXplOworCisgICAgLy8gRklYTUUgOiAiWzBdIiBpcyBhZGRlZCBhdCB0aGUgZW5k
IG9mIGluZm8ubmFtZSBpbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZVVuaWZvcm0o
KSAKKyAgICAvLyB3aGVuIGlzR0xFUzJDb21wbGlhbnQgaXMganVzdCBmYWxzZS4gSSBjYW4ndCB1
bmRlcnN0YW5kIHRoZSByZWFzb24uIAorICAgIC8vIEkgYWRkICJbMF0iIGhlcmUgdG8gYXZvaWQg
ZmFsaW5nIHdlYmdsIGNvbmZvcm1hbmNlIHRlc3QoZ2V0LWFjdGl2ZXRlc3QuaHRtbCkKKyAgICAv
LyBidXQgaWYgaXQgbWFrZXMgc29tZXRoaW5nIHdyb25nIGxhdGVyLCByZW1vdmUgZm9sbG93aW5n
IGxpbmVzIAorICAgIGlmIChpbmZvLnNpemUgPiAxICYmICFpbmZvLm5hbWUuZW5kc1dpdGgoIlsw
XSIpKSAKKyAgICAgICAgaW5mby5uYW1lLmFwcGVuZCgiWzBdIik7CisgICAgCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKQoreworICAgIC8vIEZJWE1FOiByZW1v
dmUgdGhlIHR3byBnbEZsdXNoIGNhbGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGku
ZS4sCisgICAgLy8gYWxsIHByZXZpb3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBi
ZWZvcmUgcmVhZGluZyBwaXhlbHMuCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bEZsdXNoKCk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9t
dWx0aXNhbXBsZUZCTykKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKworICAgIDo6Z2xSZWFk
UGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisgICAgaWYg
KG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVu
ZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQodGFyZ2V0LCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKK30KKwor
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3sKKyAgICBpZiAod2lkdGggJiYgaGVpZ2h0ICYmICFw
aXhlbHMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIHJldHVybiB0cnVl
OworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CShyZXZpc2lvbiA5Mjc0NSkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDExLTA4LTA5ICBDaGFuZ1Nlb2sgT2ggIDxzaGl2
YW1pZG93QGdtYWlsLmNvbT4KKworICAgICAgICBbR1RLXSBTdXBwb3J0IEVHTCBiYWNrZW5kIGZv
ciBXZWJHTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTkwNjQKKworICAgICAgICBJbmNsdWRlIEVHTCBsaWJyYXJ5IHRvIGxpbmsgd2hlbiBlZ2wtYmFj
a2VuZCBpcyBjaG9vc2VuIGZvciBXZWJHTC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorCiAyMDExLTA4LTAzICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9y
OiBbVGltZWxpbmVdIEhvdmVyIG9uIHBhaW50IGV2ZW50cyBhbmQgc2VlIHJlY3Qgb3V0bGluZSBh
cm91bmQgdGhhdCBhcmVhLgpJbmRleDogU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9u
IDkyNzQ1KQorKysgU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29w
eSkKQEAgLTg3LDYgKzg3LDcgQEAgbGlid2Via2l0Z3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZF
UlNJTwogCSQod2ViY29yZV9sZGZsYWdzKSBcCiAJJChDQUlST19MSUJTKSBcCiAJJChDT1ZFUkFH
RV9MREZMQUdTKSBcCisJJChFR0xfTElCUykgXAogCSQoRU5DSEFOVF9MSUJTKSBcCiAJJChGUkVF
VFlQRV9MSUJTKSBcCiAJJChHQUlMX0xJQlMpIFwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmNwcAkocmV2aXNpb24gOTI3NDUpCisrKyBTb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MDYsNyArOTA2LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl9zZXR0aW5nc19jbGFz
c19pbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Jv
b2xlYW4oImVuYWJsZS13ZWJnbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJFbmFibGUgV2ViR0wiKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIldoZXRoZXIgV2Vi
R0wgY29udGVudCBzaG91bGQgYmUgcmVuZGVyZWQiKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSk7
CiAKICAgICAvKioK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103441</attachid>
            <date>2011-08-09 22:16:56 -0700</date>
            <delta_ts>2013-04-25 00:07:32 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>P59064.patch</filename>
            <type>text/plain</type>
            <size>122010</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDkyNzQ1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDgt
MDkgIENoYW5nU2VvayBPaCAgPHNoaXZhbWlkb3dAZ21haWwuY29tPgorCisgICAgICAgIFtHVEtd
IFN1cHBvcnQgRUdMIGJhY2tlbmQgZm9yIFdlYkdMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBjb25maWctb3B0aW9uIHRvIGNob29zZSBnbC1iYWNr
ZW5kIGJldHdlZW4gZ2x4IGFuZCBlZ2wuCisKKyAgICAgICAgKiBjb25maWd1cmUuYWM6CisKIDIw
MTEtMDgtMDggIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KIAogICAgICAgICBB
ZGQgdGVzdGluZyBmb3IgLS1mb3JjZS1jb21wb3NpdGluZy1tb2RlIHRvIHdpbmRvd3MuaW50ZXJu
YWwKSW5kZXg6IGNvbmZpZ3VyZS5hYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb25maWd1cmUuYWMJKHJldmlz
aW9uIDkyNzQ1KQorKysgY29uZmlndXJlLmFjCSh3b3JraW5nIGNvcHkpCkBAIC0zODMsMTIgKzM4
MywzNiBAQCBBQ19BUkdfRU5BQkxFKHdlYmdsLAogICAgICAgICAgICAgICBbXSwgW2VuYWJsZV93
ZWJnbD0ibm8iXSkKIEFDX01TR19SRVNVTFQoWyRlbmFibGVfd2ViZ2xdKQogCisjIGRldGVybWlu
ZSB0aGUgR0wgYmFja2VuZAorQUNfTVNHX0NIRUNLSU5HKFt0aGUgR0wgYmFja2VuZCB0byB1c2Vd
KQorQUNfQVJHX1dJVEgoZ2xfYmFja2VuZCwKKyAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFst
LXdpdGgtZ2wtYmFja2VuZD1APDpAZ2x4L2VnbEA6PkBdLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgW1NlbGVjdCBnbCBiYWNrZW5kIFtkZWZhdWx0PWdseF1dKSwKKyAgICAgICAgICAgIFtd
LFt3aXRoX2dsX2JhY2tlbmQ9ImdseCJdKQorCitjYXNlICIkd2l0aF9nbF9iYWNrZW5kIiBpbgor
ICAgICBnbHh8ZWdsKSA7OworICAgICAqKSBBQ19NU0dfRVJST1IoW0ludmFsaWQgZ2wgYmFja2Vu
ZDogbXVzdCBiZSBnbHgsIG9yIGVnbC5dKSA7OworZXNhYworCitBQ19NU0dfUkVTVUxUKFskd2l0
aF9nbF9iYWNrZW5kXSkKKwogaWYgdGVzdCAiJGVuYWJsZV93ZWJnbCIgPSAieWVzIjsgdGhlbgot
ICAgIEFDX0NIRUNLX0hFQURFUlMoW0dML2dsLmhdLCBbXSwgQUNfTVNHX0VSUk9SKFtPcGVuR0wg
aGVhZGVyIG5vdCBmb3VuZF0pKQotICAgIEFDX0NIRUNLX0hFQURFUlMoW0dML2dseC5oXSwgW10s
IEFDX01TR19FUlJPUihbR0xYIGhlYWRlciBub3QgZm91bmRdKSkKLSAgICBPUEVOR0xfTElCUz0t
bEdMCisgICAgY2FzZSAiJHdpdGhfZ2xfYmFja2VuZCIgaW4KKyAgICAgICAgZ2x4KSBBQ19DSEVD
S19IRUFERVJTKFtHTC9nbC5oXSwgW10sIEFDX01TR19FUlJPUihbT3BlbkdMIGhlYWRlciBub3Qg
Zm91bmRdKSkKKyAgICAgICAgICAgICBBQ19DSEVDS19IRUFERVJTKFtHTC9nbHguaF0sIFtdLCBB
Q19NU0dfRVJST1IoW0dMWCBoZWFkZXIgbm90IGZvdW5kXSkpCisgICAgICAgICAgICAgT1BFTkdM
X0xJQlM9LWxHTAorICAgICAgICAgICAgIEFDX1NVQlNUKFtPUEVOR0xfTElCU10pCisgICAgICAg
ICAgICAgOzsKKyAgICAgICAgZWdsKSBBQ19DSEVDS19IRUFERVJTKFtHTEVTMi9nbDIuaF0sIFtd
LCBBQ19NU0dfRVJST1IoW09wZW5HTCBFUyBoZWFkZXIgbm90IGZvdW5kXSkpCisgICAgICAgICAg
ICAgQUNfQ0hFQ0tfSEVBREVSUyhbRUdML2VnbC5oXSwgW10sIEFDX01TR19FUlJPUihbRUdMIGhl
YWRlciBub3QgZm91bmRdKSkKKyAgICAgICAgICAgICBPUEVOR0xfTElCUz0tbEdMRVN2MgorICAg
ICAgICAgICAgIEVHTF9MSUJTPS1sRUdMCisgICAgICAgICAgICAgQUNfU1VCU1QoW09QRU5HTF9M
SUJTXSkKKyAgICAgICAgICAgICBBQ19TVUJTVChbRUdMX0xJQlNdKQorICAgICAgICAgICAgIDs7
CisgICAgZXNhYwogZmkKLUFDX1NVQlNUKFtPUEVOR0xfTElCU10pCiAKICMgY2hlY2sgd2hldGhl
ciB0byBlbmFibGUgY2hhbm5lbCBtZXNzYWdpbmcgc3VwcG9ydAogQUNfTVNHX0NIRUNLSU5HKFt3
aGV0aGVyIHRvIGVuYWJsZSBIVE1MNSBDaGFubmVsIE1lc3NhZ2luZyBzdXBwb3J0XSkKQEAgLTEx
NDksNiArMTE3MywxMCBAQCBBTV9DT05ESVRJT05BTChbVVNFX0dMSUJfVU5JQ09ERV0sIFt0ZXN0
CiBBTV9DT05ESVRJT05BTChbVVNFX0ZSRUVUWVBFXSwgW3Rlc3QgIiR3aXRoX2ZvbnRfYmFja2Vu
ZCIgPSAiZnJlZXR5cGUiXSkKIEFNX0NPTkRJVElPTkFMKFtVU0VfUEFOR09dLCBbdGVzdCAiJHdp
dGhfZm9udF9iYWNrZW5kIiA9ICJwYW5nbyJdKQogCisjIEZvbnQgYmFja2VuZCBjb25kaXRpb25h
bHMKK0FNX0NPTkRJVElPTkFMKFtVU0VfR0xYXSwgW3Rlc3QgIiR3aXRoX2dsX2JhY2tlbmQiID0g
ImdseCJdKQorQU1fQ09ORElUSU9OQUwoW1VTRV9FR0xdLCBbdGVzdCAiJHdpdGhfZ2xfYmFja2Vu
ZCIgPSAiZWdsIl0pCisKICMgR1N0cmVhbWVyIGZlYXR1cmUgY29uZGl0aW9uYWwKIEFNX0NPTkRJ
VElPTkFMKFtVU0VfR1NUUkVBTUVSXSwgW3Rlc3QgIiRoYXZlX2dzdHJlYW1lciIgPSAieWVzIl0p
CiAKQEAgLTEyNjMsNiArMTI5MSw3IEBAIEJ1aWxkIGNvbmZpZ3VyYXRpb246CiAgQ29kZSBjb3Zl
cmFnZSBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxl
X2NvdmVyYWdlCiAgVW5pY29kZSBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiAkd2l0aF91bmljb2RlX2JhY2tlbmQKICBGb250IGJhY2tlbmQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR3aXRoX2ZvbnRfYmFja2Vu
ZAorIEdMIGJhY2tlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogJHdpdGhfZ2xfYmFja2VuZAogIE9wdGltaXplZCBtZW1vcnkgYWxsb2NhdG9yICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogJGVuYWJsZV9mYXN0X21hbGxvYwogRmVhdHVyZXM6
CiAgM0QgUmVuZGVyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiAkZW5hYmxlXzNkX3JlbmRlcmluZwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTI3NDUp
CisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
MDIgQEAKKzIwMTEtMDgtMDkgIENoYW5nU2VvayBPaCAgPHNoaXZhbWlkb3dAZ21haWwuY29tPgor
CisgICAgICAgIFtHVEtdIFN1cHBvcnQgRUdMIGJhY2tlbmQgZm9yIFdlYkdMCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA2NAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBidWlsZC1mbGFncyBsaWtl
IFdURl9VU0VfR0xYICYgV1RGX1VTRV9FR0wgdG8gc2VwZXJhdGUgZ2wtYmFja2VuZHMuCisgICAg
ICAgIEFsbW9zdCBHTCBjb21tb24gQVBJcyBpbiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAg
YXJlIG1vdmVkIHRvIEdyYXBoaWNzQ29udGV4dDNEQmFzZS5jcHAKKyAgICAgICAgQW5kIHRoZSBv
dGhlcnMgQVBJcyBuZWVkZWQgdG8gc2VwZXJhdGUgYWNjb3JkaW5nIHRvIGdsLWJhY2tlbmQgYXJl
IGxvY2F0ZWQgYXQgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIGFuZCBHcmFwaGljc0NvbnRl
eHQzRE9wZW5HTEVTLmNwcC4KKyAgICAgICAgU29tZSBHTCBleHRlbnRpb24gcGFyYW1ldGVycyB3
aGljaCBhcmUgbm90IGRlZmluZWQgaW4gR0xFUyBhcmUgYWRkZWQgbmV3bHkgaW4gT3BlbkdMU2hp
bXMuaAorCisgICAgICAgIE5vIG5ldyB0ZXN0cyByZXF1aXJlZC4KKworICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9PcGVuR0xTaGltcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRQcm9j
QWRkcmVzcyk6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplT3BlbkdMU2hpbXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL09wZW5HTFNoaW1zLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNER3RrLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbEVHTC5j
cHA6IEFkZGVkLgorICAgICAgICAoc2hhcmVkRGlzcGxheSk6CisgICAgICAgIChzaGFyZWRFR0xE
aXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OmFjdGl2ZUdyYXBoaWNzQ29udGV4dHMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YWRkQWN0aXZlR3JhcGhp
Y3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OnJlbW92ZUFjdGl2ZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpjbGVhbnVwQWN0aXZlQ29udGV4dHNBdEV4aXQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNyZWF0ZVBidWZmZXJDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNyZWF0ZVBp
eG1hcENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjp+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjptYWtlQ29udGV4dEN1cnJlbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVy
bmFsRUdMLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnJlc2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmJpbmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVy
YnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4
SW1hZ2UyRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMQmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1l
YnVmZmVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YWN0aXZl
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNoU2hh
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQXR0cmliTG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZENvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpjbGVhckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpjbGVhckRlcHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpj
bGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbG9y
TWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVuYyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6ZHJhd0FycmF5cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpl
bmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmdlbmVyYXRlTWlwbWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEVycm9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aGlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzRW5hYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6aXNTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmlzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
bGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2FtcGxlQ292ZXJhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3ApOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcFNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0xZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0yZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTFpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtMml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2kp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaXYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDJmdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dmVydGV4QXR0cmliM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp2ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6dmVydGV4QXR0cmliNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp2aWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0
Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZl
clBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRG
bG9hdHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1p
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9M
b2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6Om1hcmtDb250ZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKToKKwogMjAxMS0wOC0wOSAgQWJoaXNoZWsgQXJ5
YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFN0eWxlIGNoYW5nZSBub3QgcHJv
cGFnYXRpbmcgZm9yIGJlZm9yZSwgYWZ0ZXIgY29udGVudApJbmRleDogU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0JKHJldmlzaW9uIDkyNzQ1KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdv
cmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsMjAgQEAgd2ViY29yZWd0a19jcHBmbGFncyArPSBc
CiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28KIGVu
ZGlmICMgRU5EIFVTRV9QQU5HTwogCisjIC0tLQorIyBHTFggZ2wgYmFja2VuZAorIyAtLS0KK2lm
IFVTRV9HTFgKK3dlYmNvcmVndGtfY3BwZmxhZ3MgKz0gLURXVEZfVVNFX0dMWD0xCitlbmRpZiAj
IEVORCBVU0VfR0xYCisKKyMgLS0tCisjIEVHTCBnbCBiYWNrZW5kCisjIC0tLQoraWYgVVNFX0VH
TAord2ViY29yZWd0a19jcHBmbGFncyArPSAtRFdURl9VU0VfRUdMPTEKK2VuZGlmICMgRU5EIFVT
RV9FR0wKKwogIyAtLS0tCiAjIEhUTUwgRGV0YWlscyBFbGVtZW50CiAjIC0tLS0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gOTI3NDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC00Nzk3LDE0ICs0Nzk3
LDI4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0RyYXdpbmdCdWZmZXJHdGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzRElu
dGVybmFsLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0wuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKKwlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xCYXNlLmNw
cAogZW5kaWYgICMgRU5EIEVOQUJMRV9XRUJHTAogCiAjIC0tLQorIyBPcGVuR0wgYmFja2VuZCAK
KyMgLS0tCitpZiBVU0VfR0xYCit3ZWJjb3JlX3NvdXJjZXMgKz0gXAorCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmNwcCBcCisJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWwuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMLmNwcAorZW5kaWYgICMgRU5EIFVTRV9HTFgKK2lmIFVTRV9FR0wK
K3dlYmNvcmVfc291cmNlcyArPSBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWxFR0wuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbEVHTC5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xFUy5jcHAKK2VuZGlmICAjIEVORCBVU0VfRUdMCisKKyMgLS0tCiAjIE1IVE1MIHN1cHBv
cnQKICMgLS0tCiBpZiBFTkFCTEVfTUhUTUwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gOTI3NDUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5o
CSh3b3JraW5nIGNvcHkpCkBAIC05MzIsNyArOTMyLDEyIEBAIHB1YmxpYzoKIAogICAgIEdDM0R1
aW50IG1fdGV4dHVyZSwgbV9jb21wb3NpdG9yVGV4dHVyZTsKICAgICBHQzNEdWludCBtX2ZibzsK
KyNpZiBVU0UoRUdMKQorICAgIEdDM0R1aW50IG1fZGVwdGhCdWZmZXI7CisgICAgR0MzRHVpbnQg
bV9zdGVuY2lsQnVmZmVyOworI2Vsc2UKICAgICBHQzNEdWludCBtX2RlcHRoU3RlbmNpbEJ1ZmZl
cjsKKyNlbmRpZgogICAgIGJvb2wgbV9sYXllckNvbXBvc2l0ZWQ7CiAgICAgR0MzRHVpbnQgbV9p
bnRlcm5hbENvbG9yRm9ybWF0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9PcGVuR0xTaGltcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vT3BlbkdMU2hpbXMuY3BwCShyZXZpc2lvbiA5Mjc0NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL09wZW5HTFNoaW1zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDExIElnYWxpYSBTLkwuCisgKiAgQ29weXJpZ2h0IChDKSAyMDExIENoYW5nU2VvayBPaCA8c2hp
dmFtaWRvd0BnbWFpbC5jb20+IAogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNTIsOSArNTMsMTMg
QEAgc3RhdGljIHZvaWQqIGdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIqCiAgICAgc3RhdGljIGds
R2V0UHJvY0FkZHJlc3NUeXBlIGdldFByb2NBZGRyZXNzRnVuY3Rpb24gPSAwOwogCiAgICAgaWYg
KCFpbml0aWFsaXplZCkgeworI2lmIFVTRShFR0wpCisgICAgICAgIGdldFByb2NBZGRyZXNzRnVu
Y3Rpb24gPSByZWludGVycHJldF9jYXN0PGdsR2V0UHJvY0FkZHJlc3NUeXBlPihkbHN5bShSVExE
X0RFRkFVTFQsICJlZ2xHZXRQcm9jQWRkcmVzcyIpKTsKKyNlbHNlCiAgICAgICAgIGdldFByb2NB
ZGRyZXNzRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PGdsR2V0UHJvY0FkZHJlc3NUeXBlPihk
bHN5bShSVExEX0RFRkFVTFQsICJnbFhHZXRQcm9jQWRkcmVzcyIpKTsKICAgICAgICAgaWYgKCFn
ZXRQcm9jQWRkcmVzc0Z1bmN0aW9uKQogICAgICAgICAgICAgZ2V0UHJvY0FkZHJlc3NGdW5jdGlv
biA9IHJlaW50ZXJwcmV0X2Nhc3Q8Z2xHZXRQcm9jQWRkcmVzc1R5cGU+KGRsc3ltKFJUTERfREVG
QVVMVCwgImdsWEdldFByb2NBZGRyZXNzQVJCIikpOworI2VuZGlmCiAgICAgfQogCiAgICAgaWYg
KCFnZXRQcm9jQWRkcmVzc0Z1bmN0aW9uKQpAQCAtMTEzLDggKzExOCw4IEBAIGJvb2wgaW5pdGlh
bGl6ZU9wZW5HTFNoaW1zKCkKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xCbGVu
ZEZ1bmNTZXBhcmF0ZSwgc3VjY2Vzcyk7CiAjaWYgZGVmaW5lZChHTF9FU19WRVJTSU9OXzJfMCkK
IAotI2lmIGRlZmluZWQoR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCkKLSAgICBvcGVuR0xGdW5j
dGlvblRhYmxlKCktPmdsQmxpdEZyYW1lYnVmZmVyID0gOjpHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9i
bGl0OworI2lmIGRlZmluZWQoR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCkgJiYgIVVTRShFR0wp
CisgICAgb3BlbkdMRnVuY3Rpb25UYWJsZSgpLT5nbEJsaXRGcmFtZWJ1ZmZlciA9IDo6Z2xCbGl0
RnJhbWVidWZmZXJBTkdMRTsKICNlbHNlCiAgICAgb3BlbkdMRnVuY3Rpb25UYWJsZSgpLT5nbEJs
aXRGcmFtZWJ1ZmZlciA9IDA7CiAjZW5kaWYKQEAgLTEyNSw2ICsxMzAsOSBAQCBib29sIGluaXRp
YWxpemVPcGVuR0xTaGltcygpCiAgICAgQVNTSUdOX0ZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsQnVm
ZmVyRGF0YSwgc3VjY2Vzcyk7CiAgICAgQVNTSUdOX0ZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsQnVm
ZmVyU3ViRGF0YSwgc3VjY2Vzcyk7CiAgICAgQVNTSUdOX0ZVTkNUSU9OX1RBQkxFX0VOVFJZKGds
Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1cywgc3VjY2Vzcyk7CisjaWYgZGVmaW5lZChHTF9FU19WRVJT
SU9OXzJfMCkKKyAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xDbGVhckRlcHRoZiwg
c3VjY2Vzcyk7CisjZW5kaWYKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xDb21w
aWxlU2hhZGVyLCBzdWNjZXNzKTsKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xD
cmVhdGVQcm9ncmFtLCBzdWNjZXNzKTsKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlko
Z2xDcmVhdGVTaGFkZXIsIHN1Y2Nlc3MpOwpAQCAtMTMzLDYgKzE0MSw5IEBAIGJvb2wgaW5pdGlh
bGl6ZU9wZW5HTFNoaW1zKCkKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xEZWxl
dGVQcm9ncmFtLCBzdWNjZXNzKTsKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xE
ZWxldGVSZW5kZXJidWZmZXJzLCBzdWNjZXNzKTsKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVf
RU5UUlkoZ2xEZWxldGVTaGFkZXIsIHN1Y2Nlc3MpOworI2lmIGRlZmluZWQoR0xfRVNfVkVSU0lP
Tl8yXzApCisgICAgQVNTSUdOX0ZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsRGVwdGhSYW5nZWYsIHN1
Y2Nlc3MpOworI2VuZGlmCiAgICAgQVNTSUdOX0ZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsRGV0YWNo
U2hhZGVyLCBzdWNjZXNzKTsKICAgICBBU1NJR05fRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xEaXNh
YmxlVmVydGV4QXR0cmliQXJyYXksIHN1Y2Nlc3MpOwogICAgIEFTU0lHTl9GVU5DVElPTl9UQUJM
RV9FTlRSWShnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5LCBzdWNjZXNzKTsKQEAgLTE3MSw3ICsx
ODIsNyBAQCBib29sIGluaXRpYWxpemVPcGVuR0xTaGltcygpCiAKICNpZiBkZWZpbmVkKEdMX0FQ
UExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlKQogICAgIG9wZW5HTEZ1bmN0aW9uVGFibGUoKS0+
Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUgPSA6OmdsUmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlQVBQTEU7Ci0jZWxpZiBkZWZpbmVkKEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211
bHRpc2FtcGxlKQorI2VsaWYgZGVmaW5lZChHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBs
ZSkgJiYgIVVTRShFR0wpCiAgICAgb3BlbkdMRnVuY3Rpb25UYWJsZSgpLT5nbFJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSA9IDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVB
TkdMRTsKICNlbHNlCiAgICAgb3BlbkdMRnVuY3Rpb25UYWJsZSgpLT5nbFJlbmRlcmJ1ZmZlclN0
b3JhZ2VNdWx0aXNhbXBsZSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9PcGVuR0xTaGltcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL09wZW5HTFNoaW1zLmgJKHJldmlzaW9uIDkyNzQ1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vT3BlbkdMU2hpbXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFRp
ZXRvIENvcnBvcmF0aW9uLgogICogIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICog
IENvcHlyaWdodCAoQykgMjAxMSBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29tPgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsMTMgKzIxLDM3IEBACiAjaWYgUExBVEZPUk0oUVQp
CiAjaW5jbHVkZSA8UUdMQ29udGV4dD4KICNlbHNlCisjaWYgVVNFKEVHTCkKKyNpbmNsdWRlIDxH
TEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKyNlbHNlCiAjaW5jbHVkZSA8
R0wvZ2wuaD4KICNlbmRpZgorI2VuZGlmCiAKICNpZiBkZWZpbmVkKEdMX0VTX1ZFUlNJT05fMl8w
KQogLy8gU29tZSBvcGVuR0wgRVMgc3lzdGVtcyBtaXNzIHRoaXMgdHlwZWRlZi4KIHR5cGVkZWYg
Y2hhciBHTGNoYXI7CisKKyNpZiAhZGVmaW5lZChHTF9GUkFNRUJVRkZFUl9FWFQpCisjZGVmaW5l
IEdMX0ZSQU1FQlVGRkVSX0VYVCBHTF9GUkFNRUJVRkZFUgorI2VuZGlmCisjaWYgIWRlZmluZWQo
R0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUKQorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9F
WFQgR0xfQ09MT1JfQVRUQUNITUVOVDAKKyNlbmRpZgorI2lmICFkZWZpbmVkKEdMX1JFTkRFUkJV
RkZFUl9FWFQpCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9FWFQgR0xfUkVOREVSQlVGRkVSCiAj
ZW5kaWYKKyNpZiAhZGVmaW5lZChHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhUKQorI2RlZmluZSBH
TF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhUIEdMX1NURU5DSUxfQVRUQUNITUVOVAorI2VuZGlmCisj
aWYgIWRlZmluZWQoR0xfREVQVEhfQVRUQUNITUVOVF9FWFQpCisjZGVmaW5lIEdMX0RFUFRIX0FU
VEFDSE1FTlRfRVhUIEdMX0RFUFRIX0FUVEFDSE1FTlQKKyNlbmRpZgorI2lmICFkZWZpbmVkKEdM
X0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQ09NUExF
VEVfRVhUIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFCisjZW5kaWYKKyNlbmRpZiAvLyBFbmQgb2Yg
R0xfRVNfVkVSU0lPTl8yXzAKIAogdHlwZWRlZiBzdHJ1Y3QgX09wZW5HTEZ1bmN0aW9uVGFibGUg
T3BlbkdMRnVuY3Rpb25UYWJsZTsKIApAQCAtNDksNiArNzQsOSBAQCB0eXBlZGVmIHZvaWQgKCpn
bEJsaXRGcmFtZWJ1ZmZlclR5cGUpIChHCiB0eXBlZGVmIHZvaWQgKCpnbEJ1ZmZlckRhdGFUeXBl
KSAoR0xlbnVtLCBHTHNpemVpcHRyLCBjb25zdCBHTHZvaWQqLCBHTGVudW0pOwogdHlwZWRlZiB2
b2lkICgqZ2xCdWZmZXJTdWJEYXRhVHlwZSkgKEdMZW51bSwgR0xpbnRwdHIsIEdMc2l6ZWlwdHIs
IGNvbnN0IEdMdm9pZCopOwogdHlwZWRlZiBHTGVudW0gKCpnbENoZWNrRnJhbWVidWZmZXJTdGF0
dXNUeXBlKSAoR0xlbnVtKTsKKyNpZiBkZWZpbmVkKEdMX0VTX1ZFUlNJT05fMl8wKQordHlwZWRl
ZiB2b2lkICgqZ2xDbGVhckRlcHRoZlR5cGUpIChHTGZsb2F0KTsKKyNlbmRpZgogdHlwZWRlZiB2
b2lkICgqZ2xDb21waWxlU2hhZGVyVHlwZSkgKEdMdWludCk7CiB0eXBlZGVmIEdMdWludCAoKmds
Q3JlYXRlUHJvZ3JhbVR5cGUpICgpOwogdHlwZWRlZiBHTHVpbnQgKCpnbENyZWF0ZVNoYWRlclR5
cGUpIChHTGVudW0pOwpAQCAtNTgsNiArODYsOSBAQCB0eXBlZGVmIHZvaWQgKCpnbERlbGV0ZVBy
b2dyYW1UeXBlKSAoR0x1CiB0eXBlZGVmIHZvaWQgKCpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNUeXBl
KSAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqKTsKIHR5cGVkZWYgdm9pZCAoKmdsRGVsZXRlU2hh
ZGVyVHlwZSkgKEdMdWludCk7CiB0eXBlZGVmIHZvaWQgKCpnbERldGFjaFNoYWRlclR5cGUpIChH
THVpbnQsIEdMdWludCk7CisjaWYgZGVmaW5lZChHTF9FU19WRVJTSU9OXzJfMCkKK3R5cGVkZWYg
dm9pZCAoKmdsRGVwdGhSYW5nZWZUeXBlKSAoR0xmbG9hdCwgR0xmbG9hdCk7CisjZW5kaWYKIHR5
cGVkZWYgdm9pZCAoKmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5VHlwZSkgKEdMdWludCk7CiB0
eXBlZGVmIHZvaWQgKCpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5VHlwZSkgKEdMdWludCk7CiB0
eXBlZGVmIHZvaWQgKCpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyVHlwZSkgKEdMZW51bSwgR0xl
bnVtLCBHTGVudW0sIEdMdWludCk7CkBAIC0xNDUsNiArMTc2LDkgQEAgdHlwZWRlZiBzdHJ1Y3Qg
X09wZW5HTEZ1bmN0aW9uVGFibGUgewogICAgIEZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsQnVmZmVy
RGF0YSk7CiAgICAgRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xCdWZmZXJTdWJEYXRhKTsKICAgICBG
VU5DVElPTl9UQUJMRV9FTlRSWShnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMpOworI2lmIGRlZmlu
ZWQoR0xfRVNfVkVSU0lPTl8yXzApCisgICAgRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xDbGVhckRl
cHRoZik7CisjZW5kaWYKICAgICBGVU5DVElPTl9UQUJMRV9FTlRSWShnbENvbXBpbGVTaGFkZXIp
OwogICAgIEZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsQ3JlYXRlUHJvZ3JhbSk7CiAgICAgRlVOQ1RJ
T05fVEFCTEVfRU5UUlkoZ2xDcmVhdGVTaGFkZXIpOwpAQCAtMTUzLDYgKzE4Nyw5IEBAIHR5cGVk
ZWYgc3RydWN0IF9PcGVuR0xGdW5jdGlvblRhYmxlIHsKICAgICBGVU5DVElPTl9UQUJMRV9FTlRS
WShnbERlbGV0ZVByb2dyYW0pOwogICAgIEZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsRGVsZXRlUmVu
ZGVyYnVmZmVycyk7CiAgICAgRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xEZWxldGVTaGFkZXIpOwor
I2lmIGRlZmluZWQoR0xfRVNfVkVSU0lPTl8yXzApCisgICAgRlVOQ1RJT05fVEFCTEVfRU5UUlko
Z2xEZXB0aFJhbmdlZik7CisjZW5kaWYKICAgICBGVU5DVElPTl9UQUJMRV9FTlRSWShnbERldGFj
aFNoYWRlcik7CiAgICAgRlVOQ1RJT05fVEFCTEVfRU5UUlkoZ2xEaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkpOwogICAgIEZVTkNUSU9OX1RBQkxFX0VOVFJZKGdsRW5hYmxlVmVydGV4QXR0cmliQXJy
YXkpOwpAQCAtMjQ2LDYgKzI4MywxMCBAQCB0eXBlZGVmIHN0cnVjdCBfT3BlbkdMRnVuY3Rpb25U
YWJsZSB7CiAjZGVmaW5lIGdsQnVmZmVyU3ViRGF0YSAgICAgICAgICAgICAgICAgICAgICAgIExP
T0tVUF9HTF9GVU5DVElPTihnbEJ1ZmZlclN1YkRhdGEpCiAjZGVmaW5lIGdsQ2hlY2tGcmFtZWJ1
ZmZlclN0YXR1c0VYVCAgICAgICAgICAgIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cwogI2RlZmlu
ZSBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMgICAgICAgICAgICAgICBMT09LVVBfR0xfRlVOQ1RJ
T04oZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKQorI2lmIGRlZmluZWQoR0xfRVNfVkVSU0lPTl8y
XzApCisjZGVmaW5lIGdsQ2xlYXJEZXB0aCAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsQ2xl
YXJEZXB0aGYKKyNkZWZpbmUgZ2xDbGVhckRlcHRoZiAgICAgICAgICAgICAgICAgICAgICAgICAg
TE9PS1VQX0dMX0ZVTkNUSU9OKGdsQ2xlYXJEZXB0aGYpCisjZW5kaWYKICNkZWZpbmUgZ2xDb21w
aWxlU2hhZGVyICAgICAgICAgICAgICAgICAgICAgICAgTE9PS1VQX0dMX0ZVTkNUSU9OKGdsQ29t
cGlsZVNoYWRlcikKICNkZWZpbmUgZ2xDcmVhdGVQcm9ncmFtICAgICAgICAgICAgICAgICAgICAg
ICAgTE9PS1VQX0dMX0ZVTkNUSU9OKGdsQ3JlYXRlUHJvZ3JhbSkKICNkZWZpbmUgZ2xDcmVhdGVT
aGFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgTE9PS1VQX0dMX0ZVTkNUSU9OKGdsQ3JlYXRl
U2hhZGVyKQpAQCAtMjU2LDYgKzI5NywxMCBAQCB0eXBlZGVmIHN0cnVjdCBfT3BlbkdMRnVuY3Rp
b25UYWJsZSB7CiAjZGVmaW5lIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCAgICAgICAgICAgICAg
IGdsRGVsZXRlUmVuZGVyYnVmZmVycwogI2RlZmluZSBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMgICAg
ICAgICAgICAgICAgICBMT09LVVBfR0xfRlVOQ1RJT04oZ2xEZWxldGVSZW5kZXJidWZmZXJzKQog
I2RlZmluZSBnbERlbGV0ZVNoYWRlciAgICAgICAgICAgICAgICAgICAgICAgICBMT09LVVBfR0xf
RlVOQ1RJT04oZ2xEZWxldGVTaGFkZXIpCisjaWYgZGVmaW5lZChHTF9FU19WRVJTSU9OXzJfMCkK
KyNkZWZpbmUgZ2xEZXB0aFJhbmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xEZXB0aFJh
bmdlZgorI2RlZmluZSBnbERlcHRoUmFuZ2VmICAgICAgICAgICAgICAgICAgICAgICAgICBMT09L
VVBfR0xfRlVOQ1RJT04oZ2xEZXB0aFJhbmdlZikKKyNlbmRpZgogI2RlZmluZSBnbERldGFjaFNo
YWRlciAgICAgICAgICAgICAgICAgICAgICAgICBMT09LVVBfR0xfRlVOQ1RJT04oZ2xEZXRhY2hT
aGFkZXIpCiAjZGVmaW5lIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5ICAgICAgICAgICAgIExP
T0tVUF9HTF9GVU5DVElPTihnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSkKICNkZWZpbmUgZ2xF
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheSAgICAgICAgICAgICAgTE9PS1VQX0dMX0ZVTkNUSU9OKGds
RW5hYmxlVmVydGV4QXR0cmliQXJyYXkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREd0ay5jcHAJ
KHJldmlzaW9uIDkyNzQ1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0dyYXBoaWNzQ29udGV4dDNER3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQ2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjgsOSArMjksOSBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCiAKICNpZiBFTkFCTEUoV0VCR0wpCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
ICNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzREludGVybmFsLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJP
cGVuR0xTaGltcy5oIgogI2luY2x1ZGUgIlNoYWRlckxhbmcuaCIKICNpbmNsdWRlIDx3dGYvTm90
Rm91bmQuaD4KQEAgLTU5LDcgKzYwLDEyIEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0Nv
bnRleHQzRChHcmEKICAgICAsIG1fYXR0cnMoYXR0cmlidXRlcykKICAgICAsIG1fdGV4dHVyZSgw
KQogICAgICwgbV9mYm8oMCkKKyNpZiBVU0UoRUdMKQorICAgICwgbV9kZXB0aEJ1ZmZlcigwKQor
ICAgICwgbV9zdGVuY2lsQnVmZmVyKDApCisjIGVsc2UKICAgICAsIG1fZGVwdGhTdGVuY2lsQnVm
ZmVyKDApCisjZW5kaWYKICAgICAsIG1fYm91bmRGQk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVG
Qk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKQEAgLTc0LDgg
KzgwLDggQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYQogICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwogICAgIDo6Z2xUZXhQYXJh
bWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsK
ICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVApOworICAgIDo6Z2xUZXhQYXJhbWV0
ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsK
KyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwg
R0xfQ0xBTVBfVE9fRURHRSk7CiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDAp
OwogCiAgICAgLy8gQ3JlYXRlIGFuIEZCTy4KQEAgLTgzLDE3ICs4OSwyNyBAQCBHcmFwaGljc0Nv
bnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKIAogICAgIG1fYm91bmRGQk8gPSBtX2ZibzsK
LSAgICBpZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRy
cy5kZXB0aCkpCisgICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAmJiAobV9hdHRycy5zdGVuY2ls
IHx8IG1fYXR0cnMuZGVwdGgpKSB7CisjaWYgVVNFKEVHTCkKKyAgICAgICAgOjpnbEdlblJlbmRl
cmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhCdWZmZXIpOworICAgICAgICA6OmdsR2VuUmVuZGVyYnVm
ZmVyc0VYVCgxLCAmbV9zdGVuY2lsQnVmZmVyKTsKKyNlbHNlCiAgICAgICAgIDo6Z2xHZW5SZW5k
ZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisjZW5kaWYKKyAgICB9CiAg
ICAgCiAgICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgogICAgIGlmIChtX2F0dHJzLmFu
dGlhbGlhcykgeworI2lmIFVTRShFR0wpCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisjZWxz
ZQogICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsK
ICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVs
dGlzYW1wbGVGQk8pOwogICAgICAgICBtX2JvdW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKICAg
ICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZl
cik7CiAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKICAgICAg
ICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVu
Y2lsQnVmZmVyKTsKKyNlbmRpZgogICAgIH0KIAogICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9u
LgpAQCAtMTEyLDggKzEyOCwxMCBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0
M0QoR3JhCiAgICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOwogICAgIG1fY29t
cGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKIAorI2lmICFVU0UoRUdMKQogICAg
IDo6Z2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRfU0laRSk7CiAgICAgOjpnbEVuYWJs
ZShHTF9QT0lOVF9TUFJJVEUpOworI2VuZGlmCiAgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwg
MCk7CiB9CiAKQEAgLTEyNiwxMyArMTQ0LDIzIEBAIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhp
Y3NDb250ZXh0M0QoKQogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xEZWxldGVU
ZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyNp
ZiBVU0UoRUdMKQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKICAgICAgICAgOjpn
bERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CiAg
ICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKICAgICAgICAgICAg
IDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2ls
QnVmZmVyKTsKICAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNh
bXBsZUZCTyk7CisjZW5kaWYKICAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9hdHRycy5zdGVu
Y2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9h
dHRycy5kZXB0aCkgeworI2lmIFVTRShFR0wpCisgICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVy
YnVmZmVyc0VYVCgxLCAmbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgICAgICA6OmdsRGVsZXRlUmVu
ZGVyYnVmZmVyc0VYVCgxLCAmbV9zdGVuY2lsQnVmZmVyKTsKKyNlbHNlCiAgICAgICAgICAgICA6
OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworI2Vu
ZGlmCisgICAgICAgIH0KICAgICB9CiAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAm
bV9mYm8pOwogfQpAQCAtMTUxLDcgKzE3OSwxMSBAQCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
IEdyYXBoaWNzQ29udGV4CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlh
bnQoKSBjb25zdAogeworI2lmIFVTRShFR0wpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQogICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbEVHTC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWxFR0wuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWxFR0wuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDExIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0Bn
bWFpbC5jb20+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUK
KyAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzREludGVybmFsRUdMLmgiCisK
KyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lu
Y2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjaW5jbHVkZSA8RUdML2VnbC5oPgorI2luY2x1ZGUgPGRs
ZmNuLmg+CisKKworc3RhdGljIERpc3BsYXkqIGdTaGFyZWREaXNwbGF5ID0gMDsKK3N0YXRpYyBE
aXNwbGF5KiBzaGFyZWREaXNwbGF5KCkKK3sKKyAgICBpZiAoIWdTaGFyZWREaXNwbGF5KQorICAg
ICAgICBnU2hhcmVkRGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKKyAgICByZXR1cm4gZ1NoYXJl
ZERpc3BsYXk7Cit9CisKK3N0YXRpYyBFR0xEaXNwbGF5IGdTaGFyZWRFR0xEaXNwbGF5ID0gRUdM
X05PX0RJU1BMQVk7CitzdGF0aWMgRUdMRGlzcGxheSBzaGFyZWRFR0xEaXNwbGF5KCkKK3sKKyAg
ICBpZiAoZ1NoYXJlZEVHTERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCisgICAgICAgIGdTaGFy
ZWRFR0xEaXNwbGF5ID0gZWdsR2V0RGlzcGxheShzaGFyZWREaXNwbGF5KCkpOworICAgIHJldHVy
biBnU2hhcmVkRUdMRGlzcGxheTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBCZWNh
dXNlIG9mIGRyaXZlciBidWdzLCBleGl0aW5nIHRoZSBwcm9ncmFtIHdoZW4gdGhlcmUgYXJlIGFj
dGl2ZSBwYnVmZmVycworLy8gY2FuIGNyYXNoIHRoZSBYIHNlcnZlciAodGhpcyBoYXMgYmVlbiBv
YnNlcnZlZCB3aXRoIHRoZSBvZmZpY2lhbCBOdmlkaWEgZHJpdmVycykuCisvLyBXZSBuZWVkIHRv
IGVuc3VyZSB0aGF0IHdlIGNsZWFuIGV2ZXJ5dGhpbmcgdXAgb24gZXhpdC4gVGhlcmUgYXJlIHNl
dmVyYWwgcmVhc29ucworLy8gdGhhdCBHcmFwaGljc0NvbnRleHQzRHMgd2lsbCBzdGlsbCBiZSBh
bGl2ZSBhdCBleGl0LCBpbmNsdWRpbmcgdXNlciBlcnJvciAobWVtb3J5CisvLyBsZWFrcykgYW5k
IHRoZSBwYWdlIGNhY2hlLiBJbiBhbnkgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0aGUgWCBzZXJ2ZXIg
dG8gY3Jhc2guCitzdGF0aWMgYm9vbCBjbGVhbmluZ1VwQXRFeGl0ID0gZmFsc2U7CitzdGF0aWMg
VmVjdG9yPEdyYXBoaWNzQ29udGV4dDNEKj4mIGFjdGl2ZUdyYXBoaWNzQ29udGV4dHMoKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPEdyYXBoaWNzQ29udGV4dDNEKj4sIGNvbnRl
eHRzLCAoKSk7CisgICAgcmV0dXJuIGNvbnRleHRzOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmFkZEFjdGl2ZUdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCkKK3sKKyAgICBzdGF0aWMgYm9vbCBhZGRlZEF0RXhpdEhhbmRsZXIgPSBmYWxzZTsK
KyAgICBpZiAoIWFkZGVkQXRFeGl0SGFuZGxlcikgeworICAgICAgICBhdGV4aXQoJkdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmNsZWFudXBBY3RpdmVDb250ZXh0c0F0RXhpdCk7CisgICAgICAg
IGFkZGVkQXRFeGl0SGFuZGxlciA9IHRydWU7CisgICAgfQorICAgIGFjdGl2ZUdyYXBoaWNzQ29u
dGV4dHMoKS5hcHBlbmQoY29udGV4dCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6cmVtb3ZlQWN0aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KQoreworICAgIGlmIChjbGVhbmluZ1VwQXRFeGl0KQorICAgICAgICByZXR1cm47CisKKyAg
ICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0M0QqPiYgY29udGV4dHMgPSBhY3RpdmVHcmFwaGljc0Nv
bnRleHRzKCk7CisgICAgc2l6ZV90IGxvY2F0aW9uID0gY29udGV4dHMuZmluZChjb250ZXh0KTsK
KyAgICBpZiAobG9jYXRpb24gIT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgY29udGV4dHMucmVt
b3ZlKGxvY2F0aW9uKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjbGVh
bnVwQWN0aXZlQ29udGV4dHNBdEV4aXQoKQoreworICAgIGNsZWFuaW5nVXBBdEV4aXQgPSB0cnVl
OworCisgICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dDNEKj4mIGNvbnRleHRzID0gYWN0aXZlR3Jh
cGhpY3NDb250ZXh0cygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29udGV4dHMuc2l6
ZSgpOyBpKyspCisgICAgICAgIGNvbnRleHRzW2ldLT5+R3JhcGhpY3NDb250ZXh0M0QoKTsKKwor
ICAgIGlmICghZ1NoYXJlZERpc3BsYXkpCisgICAgICAgIHJldHVybjsKKyAgICBYQ2xvc2VEaXNw
bGF5KGdTaGFyZWREaXNwbGF5KTsKKyAgICBnU2hhcmVkRGlzcGxheSA9IDA7CisKKyAgICBpZiAo
Z1NoYXJlZEVHTERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCisgICAgICAgIHJldHVybjsKKyAg
ICBlZ2xUZXJtaW5hdGUoZ1NoYXJlZEVHTERpc3BsYXkpOworICAgIGdTaGFyZWRFR0xEaXNwbGF5
ID0gRUdMX05PX0RJU1BMQVk7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbD4gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y3JlYXRlKCkKK3sKKyAgICBpZiAoIXNo
YXJlZERpc3BsYXkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzdGF0aWMgYm9v
bCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIHN1Y2Nlc3MgPSB0cnVlOwor
ICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgaWYgKCFlZ2xJbml0aWFsaXplKHNoYXJl
ZEVHTERpc3BsYXkoKSwgMCwgMCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgc3VjY2VzcyA9IGluaXRpYWxpemVPcGVuR0xTaGltcygpOworICAgICAgICBpbml0aWFsaXpl
ZCA9IHRydWU7CisgICAgfQorICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBpbnRlcm5hbCA9IGNyZWF0ZVBi
dWZmZXJDb250ZXh0KCk7CisgICAgaWYgKCFpbnRlcm5hbCkKKyAgICAgICAgaW50ZXJuYWwgPSBj
cmVhdGVQaXhtYXBDb250ZXh0KCk7CisgICAgaWYgKCFpbnRlcm5hbCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICAvLyBUaGUgR3JhcGhpY3NDb250ZXh0M0QgY29uc3RydWN0b3IgcmVx
dWlyZXMgdGhhdCB0aGlzIGNvbnRleHQgaXMgdGhlIGN1cnJlbnQgT3BlbkdMIGNvbnRleHQuCisg
ICAgaW50ZXJuYWwtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBhZG9wdFB0cihp
bnRlcm5hbCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwqIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmNyZWF0ZVBidWZmZXJDb250ZXh0KCkKK3sKKyAgICBpbnQgZmJDb25maWdB
dHRyYnNbXSA9IHsKKyAgICAgICAgRUdMX0JVRkZFUl9TSVpFLCBFR0xfRE9OVF9DQVJFLAorICAg
ICAgICBFR0xfUkVEX1NJWkUsIDgsCisgICAgICAgIEVHTF9HUkVFTl9TSVpFLCA4LAorICAgICAg
ICBFR0xfQkxVRV9TSVpFLCA4LAorICAgICAgICBFR0xfQUxQSEFfU0laRSwgOCwKKyAgICAgICAg
RUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklULAorICAgICAgICBFR0xfU1VS
RkFDRV9UWVBFLCBFR0xfUEJVRkZFUl9CSVQsCisgICAgICAgIEVHTF9OT05FCisgICAgfTsKKyAg
ICBFR0xDb25maWcgZWdsQ29uZmlnc1sxXTsKKyAgICBFR0xpbnQgbnVtT2ZDb25maWc7CisgICAg
aWYgKCFlZ2xDaG9vc2VDb25maWcoc2hhcmVkRUdMRGlzcGxheSgpLCBmYkNvbmZpZ0F0dHJicywg
JmVnbENvbmZpZ3NbMF0sIDEsICZudW1PZkNvbmZpZykpCisgICAgICAgIHJldHVybiAwOworICAg
IGlmICghbnVtT2ZDb25maWcpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gV2Ugd2lsbCBi
ZSByZW5kZXJpbmcgdG8gYSB0ZXh0dXJlLCBzbyBvdXIgcGJ1ZmZlciBkb2VzIG5vdCBuZWVkIHRv
IGJlIGxhcmdlLgorICAgIHN0YXRpYyBjb25zdCBpbnQgcGJ1ZmZlckF0dHJpYnV0ZXNbXSA9IHsg
RUdMX1dJRFRILCAxLCBFR0xfSEVJR0hULCAxLCBFR0xfTk9ORSB9OworICAgIEVHTFN1cmZhY2Ug
ZWdsU3VyZmFjZSA9IGVnbENyZWF0ZVBidWZmZXJTdXJmYWNlKHNoYXJlZEVHTERpc3BsYXkoKSwg
ZWdsQ29uZmlnc1swXSwgcGJ1ZmZlckF0dHJpYnV0ZXMpOworICAgIGlmIChlZ2xTdXJmYWNlID09
IEVHTF9OT19TVVJGQUNFKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEVHTGludCBlZ2xDb250
ZXh0QXR0cmJzW10gPSB7IEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLCAyLCBFR0xfTk9ORSB9
OworICAgIEVHTENvbnRleHQgZWdsQ29udGV4dCA9IGVnbENyZWF0ZUNvbnRleHQoc2hhcmVkRUdM
RGlzcGxheSgpLCBlZ2xDb25maWdzWzBdLCBFR0xfTk9fQ09OVEVYVCwgZWdsQ29udGV4dEF0dHJi
cyk7CisgICAgaWYgKGVnbENvbnRleHQgPT0gRUdMX05PX0NPTlRFWFQpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIG5ldyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKGVnbENvbnRl
eHQsIGVnbFN1cmZhY2UpOworfQorCitHcmFwaGljc0NvbnRleHQzREludGVybmFsKiBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpjcmVhdGVQaXhtYXBDb250ZXh0KCkKK3sKKyAgICBpbnQgc2Ny
ZWVuID0gRGVmYXVsdFNjcmVlbihzaGFyZWREaXNwbGF5KCkpOworICAgIGNvbnN0IGludCBkZXB0
aCA9IERlZmF1bHREZXB0aChzaGFyZWREaXNwbGF5KCksIHNjcmVlbik7CisgICAgY29uc3QgaW50
IHdpZHRoID0gMTsKKyAgICBjb25zdCBpbnQgaGVpZ2h0ID0gMTsKKworICAgIHN0YXRpYyBpbnQg
ZWdsQ29uZmlnQXR0cnNbXSA9IHsKKyAgICAgICAgRUdMX0JVRkZFUl9TSVpFLCBFR0xfRE9OVF9D
QVJFLAorICAgICAgICBFR0xfUkVEX1NJWkUsIDgsCisgICAgICAgIEVHTF9HUkVFTl9TSVpFLCA4
LAorICAgICAgICBFR0xfQkxVRV9TSVpFLCA4LAorICAgICAgICBFR0xfQUxQSEFfU0laRSwgOCwK
KyAgICAgICAgRUdMX0RFUFRIX1NJWkUsIGRlcHRoLAorICAgICAgICBFR0xfU1VSRkFDRV9UWVBF
LCBFR0xfUElYTUFQX0JJVCwKKyAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5H
TF9FUzJfQklULAorICAgICAgICBFR0xfTk9ORQorICAgIH07CisKKyAgICBFR0xDb25maWcgZWds
Q29uZmlnc1sxXTsKKyAgICBFR0xpbnQgbnVtT2ZDb25maWc7CisgICAgaWYgKCFlZ2xDaG9vc2VD
b25maWcoc2hhcmVkRUdMRGlzcGxheSgpLCBlZ2xDb25maWdBdHRycywgJmVnbENvbmZpZ3NbMF0s
IDEsICZudW1PZkNvbmZpZykpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICghbnVtT2ZDb25m
aWcpCisgICAgICAgIHJldHVybiAwOworCisgICAgRUdMaW50IGVnbENvbnRleHRBdHRyYnNbXSA9
IHsgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sIDIsIEVHTF9OT05FIH07CisgICAgRUdMQ29u
dGV4dCBjb250ZXh0ID0gZWdsQ3JlYXRlQ29udGV4dChzaGFyZWRFR0xEaXNwbGF5KCksIGVnbENv
bmZpZ3NbMF0sIEVHTF9OT19DT05URVhULCBlZ2xDb250ZXh0QXR0cmJzKTsKKyAgICBpZiAoIWNv
bnRleHQpCisgICAgICAgIHJldHVybiAwOworCisgICAgUGl4bWFwIHBpeG1hcCA9IFhDcmVhdGVQ
aXhtYXAoc2hhcmVkRGlzcGxheSgpLCBEZWZhdWx0Um9vdFdpbmRvdyhzaGFyZWREaXNwbGF5KCkp
LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgaWYgKCFwaXhtYXApCisgICAgICAgIHJldHVy
biAwOworCisgICAgRUdMU3VyZmFjZSBlZ2xQaXhtYXBTdXJmYWNlID0gZWdsQ3JlYXRlUGl4bWFw
U3VyZmFjZShzaGFyZWRFR0xEaXNwbGF5KCksIGVnbENvbmZpZ3NbMF0sIHBpeG1hcCwgMCk7Cisg
ICAgaWYgKCFlZ2xQaXhtYXBTdXJmYWNlKSB7CisgICAgICAgIFhGcmVlUGl4bWFwKHNoYXJlZERp
c3BsYXkoKSwgcGl4bWFwKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJu
IG5ldyBHcmFwaGljc0NvbnRleHQzREludGVybmFsKGNvbnRleHQsIHBpeG1hcCwgZWdsUGl4bWFw
U3VyZmFjZSk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWwoRUdMQ29udGV4dCBjb250ZXh0LCBFR0xTdXJmYWNlIHBidWZmZXJTdXJmYWNl
KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3BidWZmZXJTdXJmYWNlKHBidWZm
ZXJTdXJmYWNlKQorICAgICwgbV9waXhtYXBTdXJmYWNlKDApCisgICAgLCBtX3BpeG1hcCgwKQor
eworfQorCitHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVy
bmFsKEVHTENvbnRleHQgY29udGV4dCwgUGl4bWFwIHBpeG1hcCwgRUdMU3VyZmFjZSBwaXhtYXBT
dXJmYWNlKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3BidWZmZXJTdXJmYWNl
KDApCisgICAgLCBtX3BpeG1hcFN1cmZhY2UocGl4bWFwU3VyZmFjZSkKKyAgICAsIG1fcGl4bWFw
KHBpeG1hcCkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6fkdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWwoKQoreworICAgIGlmIChtX2NvbnRleHQpIHsKKyAgICAgICAgLy8gVGhp
cyBtYXkgYmUgbmVjZXNzYXJ5IHRvIHByZXZlbnQgY3Jhc2hlcyB3aXRoIE5WaWRpYSdzIGNsb3Nl
ZCBzb3VyY2UgZHJpdmVycy4gT3JpZ2luYWxseQorICAgICAgICAvLyBmcm9tIE1vemlsbGEncyAz
RCBjYW52YXMgaW1wbGVtZW50YXRpb24gYXQ6IGh0dHA6Ly9iaXRidWNrZXQub3JnL2lsbWFyaS9j
YW52YXMzZC8KKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIDApOworCisgICAgICAgIGVnbE1ha2VDdXJyZW50KHNoYXJlZEVHTERpc3BsYXkoKSwgMCwg
MCwgMCk7CisgICAgICAgIGVnbERlc3Ryb3lDb250ZXh0KHNoYXJlZEVHTERpc3BsYXkoKSwgbV9j
b250ZXh0KTsKKyAgICAgICAgbV9jb250ZXh0ID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9wYnVm
ZmVyU3VyZmFjZSkgeworICAgICAgICBlZ2xEZXN0cm95U3VyZmFjZShzaGFyZWRFR0xEaXNwbGF5
KCksIG1fcGJ1ZmZlclN1cmZhY2UpOworICAgICAgICBtX3BidWZmZXJTdXJmYWNlID0gMDsKKyAg
ICB9CisgICAgaWYgKG1fcGl4bWFwU3VyZmFjZSkgeworICAgICAgICBlZ2xEZXN0cm95U3VyZmFj
ZShzaGFyZWRFR0xEaXNwbGF5KCksIG1fcGl4bWFwU3VyZmFjZSk7CisgICAgICAgIG1fcGl4bWFw
U3VyZmFjZSA9IDA7CisgICAgfQorICAgIGlmIChtX3BpeG1hcCkgeworICAgICAgICBYRnJlZVBp
eG1hcChzaGFyZWREaXNwbGF5KCksIG1fcGl4bWFwKTsKKyAgICAgICAgbV9waXhtYXAgPSAwOwor
ICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjptYWtlQ29udGV4dEN1
cnJlbnQoKQoreworICAgIGlmIChlZ2xHZXRDdXJyZW50Q29udGV4dCgpID09IG1fY29udGV4dCkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKG1fcGJ1ZmZlclN1cmZhY2UpIHsKKyAgICAgICAgZWdsTWFrZUN1cnJlbnQoc2hhcmVk
RUdMRGlzcGxheSgpLCBtX3BidWZmZXJTdXJmYWNlLCBtX3BidWZmZXJTdXJmYWNlLCBtX2NvbnRl
eHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZWdsTWFrZUN1cnJlbnQoc2hhcmVk
RUdMRGlzcGxheSgpLCBtX3BpeG1hcFN1cmZhY2UsIG1fcGl4bWFwU3VyZmFjZSwgbV9jb250ZXh0
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFX1dFQkdM
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbEVHTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREludGVybmFsRUdMLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbEVHTC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ2hhbmdT
ZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZQorICogIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT
QQorICovCisKKyNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbEVHTF9oCisjZGVmaW5l
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWxFR0xfaAorCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKwordHlwZWRlZiB2b2lkKiBFR0xDb25maWc7Cit0eXBlZGVmIHZvaWQqIEVHTENvbnRl
eHQ7Cit0eXBlZGVmIHZvaWQqIEVHTERpc3BsYXk7Cit0eXBlZGVmIHZvaWQqIEVHTFN1cmZhY2U7
Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgR0x1Ynl0ZTsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBQ
aXhtYXA7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7
CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwgeworICAgIHB1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzREludGVybmFsPiBjcmVhdGUoKTsKKyAg
ICB+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpOworICAgIHZvaWQgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisKKyAgICBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQz
RDsKKyAgICAKKyAgICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCogY3JlYXRlUGJ1
ZmZlckNvbnRleHQoKTsKKyAgICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCogY3Jl
YXRlUGl4bWFwQ29udGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoRUdMQ29u
dGV4dCwgRUdMU3VyZmFjZSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChFR0xDb250
ZXh0LCBQaXhtYXAsIEVHTFN1cmZhY2UpOworCisgICAgc3RhdGljIHZvaWQgYWRkQWN0aXZlR3Jh
cGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgc3RhdGljIHZvaWQgcmVtb3Zl
QWN0aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgc3RhdGljIHZv
aWQgY2xlYW51cEFjdGl2ZUNvbnRleHRzQXRFeGl0KCk7CisKKyAgICBFR0xDb250ZXh0IG1fY29u
dGV4dDsKKyAgICBFR0xTdXJmYWNlIG1fcGJ1ZmZlclN1cmZhY2U7CisgICAgRUdMU3VyZmFjZSBt
X3BpeG1hcFN1cmZhY2U7CisgICAgUGl4bWFwIG1fcGl4bWFwOworfTsKKworfQorCisjZW5kaWYg
Ly8gR3JhcGhpY3NDb250ZXh0M0RJdGVybmFsRUdMX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMLmNwcAkocmV2aXNpb24gOTI3NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw2NSArMjUsMjQgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0j
aWYgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSA8UXRHbG9iYWw+Ci0jZW5kaWYKLQogI2lmIEVOQUJM
RShXRUJHTCkKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKLSNpbmNsdWRlICJB
cnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgotI2luY2x1ZGUgIldl
YkdMT2JqZWN0LmgiCi0jaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1
ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgotI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNs
dWRlICJJbnQzMkFycmF5LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRl
ICJVaW50OEFycmF5LmgiCi0jaW5jbHVkZSA8Y3N0cmluZz4KLSNpbmNsdWRlIDx3dGYvVW51c2Vk
UGFyYW0uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBQTEFURk9STShN
QUMpCiAjaW5jbHVkZSA8T3BlbkdML2dsLmg+CiAjZWxpZiBQTEFURk9STShHVEspCiAjaW5jbHVk
ZSAiT3BlbkdMU2hpbXMuaCIKICNlbGlmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPFF0R2xvYmFs
PgogI2luY2x1ZGUgPGNhaXJvL09wZW5HTFNoaW1zLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQot
ewotICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKLSAgICBp
ZiAobV9hdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0cygi
R0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIikpIHsKLSAgICAgICAgICAgIGV4dGVuc2lvbnMt
PmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwotICAgICAgICAg
ICAgLy8gRm9yY2UgZGVwdGggaWYgc3RlbmNpbCBpcyB0cnVlLgotICAgICAgICAgICAgbV9hdHRy
cy5kZXB0aCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9hdHRycy5zdGVu
Y2lsID0gZmFsc2U7Ci0gICAgfQotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgewotICAgICAg
ICBib29sIGlzVmFsaWRWZW5kb3IgPSB0cnVlOwotICAgICAgICAvLyBDdXJyZW50bHkgaW4gTWFj
IHdlIG9ubHkgdHVybiBvbiBhbnRpYWxpYXMgaWYgdmVuZG9yIGlzIE5WSURJQS4KLSAgICAgICAg
Y29uc3QgY2hhciogdmVuZG9yID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdl
dFN0cmluZyhHTF9WRU5ET1IpKTsKLSAgICAgICAgaWYgKCFzdGQ6OnN0cnN0cih2ZW5kb3IsICJO
VklESUEiKSkKLSAgICAgICAgICAgIGlzVmFsaWRWZW5kb3IgPSBmYWxzZTsKLSAgICAgICAgaWYg
KCFpc1ZhbGlkVmVuZG9yIHx8ICFleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVi
dWZmZXJfbXVsdGlzYW1wbGUiKSkKLSAgICAgICAgICAgIG1fYXR0cnMuYW50aWFsaWFzID0gZmFs
c2U7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQo
IkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7Ci0gICAgfQotfQotCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhl
bHMsIGludCBwaXhlbHNTaXplKQogewogICAgIGlmIChwaXhlbHNTaXplIDwgbV9jdXJyZW50V2lk
dGggKiBtX2N1cnJlbnRIZWlnaHQgKiA0KQpAQCAtMTIyLDU1ICs4MSw2IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXMKICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOwogfQogCi0jaWYgIVBMQVRGT1JN
KFFUKQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBIVE1MQ2FudmFzRWxl
bWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdl
QnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKLQotICAgIGludCByb3dCeXRlcyA9IG1fY3VycmVu
dFdpZHRoICogNDsKLSAgICBpbnQgdG90YWxCeXRlcyA9IHJvd0J5dGVzICogbV9jdXJyZW50SGVp
Z2h0OwotCi0gICAgT3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gcGl4ZWxzID0gYWRvcHRBcnJh
eVB0cihuZXcgdW5zaWduZWQgY2hhclt0b3RhbEJ5dGVzXSk7Ci0gICAgaWYgKCFwaXhlbHMpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHJlYWRSZW5kZXJpbmdSZXN1bHRzKHBpeGVscy5nZXQoKSwg
dG90YWxCeXRlcyk7Ci0KLSAgICBpZiAoIW1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhKSB7Ci0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KSB7Ci0gICAgICAg
ICAgICAvLyBQcmVtdWx0aXBseSBhbHBoYQotICAgICAgICAgICAgcGl4ZWxzW2kgKyAwXSA9IHN0
ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAwXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOwotICAgICAg
ICAgICAgcGl4ZWxzW2kgKyAxXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAxXSAqIHBpeGVs
c1tpICsgM10gLyAyNTUpOwotICAgICAgICAgICAgcGl4ZWxzW2kgKyAyXSA9IHN0ZDo6bWluKDI1
NSwgcGl4ZWxzW2kgKyAyXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcGFpbnRUb0NhbnZhcyhwaXhlbHMuZ2V0KCksIG1fY3VycmVudFdpZHRoLCBtX2N1
cnJlbnRIZWlnaHQsCi0gICAgICAgICAgICAgICAgICBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+
aGVpZ2h0KCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKLX0K
LSNlbmRpZgotCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKLXsKLSAgICAvLyBSZWFkaW5nIHByZW11bHRp
cGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3aGljaCBpcwotICAg
IC8vIGxvc3N5Ci0gICAgaWYgKG1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6
Y3JlYXRlKEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCkpOwotICAgIHVu
c2lnbmVkIGNoYXIqIHBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsK
LSAgICBpbnQgdG90YWxCeXRlcyA9IDQgKiBtX2N1cnJlbnRXaWR0aCAqIG1fY3VycmVudEhlaWdo
dDsKLQotICAgIHJlYWRSZW5kZXJpbmdSZXN1bHRzKHBpeGVscywgdG90YWxCeXRlcyk7Ci0KLSAg
ICAvLyBDb252ZXJ0IHRvIFJHQkEKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7
IGkgKz0gNCkKLSAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7Ci0K
LSAgICByZXR1cm4gaW1hZ2VEYXRhLnJlbGVhc2UoKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgaWYgKCFwbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEKCkpCkBAIC0zMjUsMTEgKzIzNSw2IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHQKICAgICA6OmdsRmx1c2goKTsKIH0KIAotSW50U2l6
ZSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSBjb25zdAot
ewotICAgIHJldHVybiBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOwot
fQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCiB7CiAgICAgaWYg
KG1fbGF5ZXJDb21wb3NpdGVkKQpAQCAtMzUxLDM1ICsyNTYsNiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCiAgICAgbV9sYXllckNvbXBvc2l0ZWQgPSB0cnVlOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1
cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9hY3RpdmVUZXh0dXJlID0g
dGV4dHVyZTsKLSAgICA6OmdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxh
dGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIEFTU0VS
VChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xBdHRhY2hTaGFk
ZXIocHJvZ3JhbSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0
dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNv
bnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwg
bmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1
ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsK
LX0KLQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKQEAgLTM5NCwxNTggKzI3MCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRG
cmFtZWJ1ZmZlcigKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5k
ZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVY
VCh0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fYWN0aXZlVGV4dHVyZSAmJiB0
YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgbV9ib3VuZFRleHR1cmUwID0gdGV4dHVy
ZTsKLSAgICA6OmdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVl
biwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2Rl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCbGVuZEVxdWF0aW9uKG1v
ZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUo
R0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFs
cGhhKTsKLX0KLQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMoR0MzRGVudW0g
c2ZhY3RvciwgR0MzRGVudW0gZGZhY3RvcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICA6OmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwotfSAgICAgICAKLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNE
ZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdC
LCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgR0MzRGVu
dW0gdXNhZ2UpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJ1ZmZlckRh
dGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9p
ZCogZGF0YSwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZz
ZXQsIHNpemUsIGRhdGEpOwotfQotCi1HQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdldCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoR0MzRGNsYW1wZiByLCBH
QzNEY2xhbXBmIGcsIEdDM0RjbGFtcGYgYiwgR0MzRGNsYW1wZiBhKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ2xlYXIobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ2xlYXJEZXB0aChkZXB0aCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNsZWFyU3RlbmNpbChHQzNEaW50IHMpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbENsZWFyU3RlbmNpbChzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4s
IEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmpl
Y3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotCi0gICAgaW50IEdMc2hhZGVyVHlwZTsKLSAgICBBTkdMRVNoYWRlclR5cGUgc2hhZGVy
VHlwZTsKLQotICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBTSEFERVJfVFlQRSwgJkdMc2hhZGVy
VHlwZSk7Ci0gICAgCi0gICAgaWYgKEdMc2hhZGVyVHlwZSA9PSBWRVJURVhfU0hBREVSKQotICAg
ICAgICBzaGFkZXJUeXBlID0gU0hBREVSX1RZUEVfVkVSVEVYOwotICAgIGVsc2UgaWYgKEdMc2hh
ZGVyVHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpCi0gICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJf
VFlQRV9GUkFHTUVOVDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybjsgLy8gSW52YWxpZCBzaGFk
ZXIgdHlwZS4KLQotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50
cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0K
LSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKLQot
ICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlOwotICAgIFN0cmluZyBzaGFkZXJJbmZv
TG9nOwotCi0gICAgYm9vbCBpc1ZhbGlkID0gbV9jb21waWxlci52YWxpZGF0ZVNoYWRlclNvdXJj
ZShlbnRyeS5zb3VyY2UudXRmOCgpLmRhdGEoKSwgc2hhZGVyVHlwZSwgdHJhbnNsYXRlZFNoYWRl
clNvdXJjZSwgc2hhZGVySW5mb0xvZyk7Ci0KLSAgICBlbnRyeS5sb2cgPSBzaGFkZXJJbmZvTG9n
OwotICAgIGVudHJ5LmlzVmFsaWQgPSBpc1ZhbGlkOwotCi0gICAgaWYgKCFpc1ZhbGlkKQotICAg
ICAgICByZXR1cm47IC8vIFNoYWRlciBkaWRuJ3QgdmFsaWRhdGUsIGRvbid0IG1vdmUgZm9yd2Fy
ZCB3aXRoIGNvbXBpbGluZyB0cmFuc2xhdGVkIHNvdXJjZSAgICAKLQotICAgIGludCB0cmFuc2xh
dGVkU2hhZGVyTGVuZ3RoID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKTsKLQotICAg
IGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nID0gdHJhbnNsYXRlZFNoYWRl
clNvdXJjZS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclB0ciA9IHRy
YW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRhdGEoKTsKLSAgICAKLSAgICA6OmdsU2hhZGVyU291cmNl
KHNoYWRlciwgMSwgJnRyYW5zbGF0ZWRTaGFkZXJQdHIsICZ0cmFuc2xhdGVkU2hhZGVyTGVuZ3Ro
KTsKLSAgICAKLSAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOwotICAgIAotICAgIGludCBH
TENvbXBpbGVTdWNjZXNzOwotICAgIAotICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJ
TEVfU1RBVFVTLCAmR0xDb21waWxlU3VjY2Vzcyk7Ci0gICAgCi0gICAgLy8gQVNTRVJUIHRoYXQg
QU5HTEUgZ2VuZXJhdGVkIEdMU0wgd2lsbCBiZSBhY2NlcHRlZCBieSBPcGVuR0wKLSAgICBBU1NF
UlQoR0xDb21waWxlU3VjY2VzcyA9PSBHTF9UUlVFKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCiB7CiAgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CkBAIC01NzQsMTMyICsyOTgsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpj
b3B5VGV4U3ViSW1hZ2UyCiAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVC
VUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICA6OmdsQ3VsbEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRl
cHRoRnVuYyhHQzNEZW51bSBmdW5jKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xEZXB0aEZ1bmMoZnVuYyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRo
TWFzayhHQzNEYm9vbGVhbiBmbGFnKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xEZXB0aE1hc2soZmxhZyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRo
UmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAg
IEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEZXRh
Y2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZGlzYWJsZShHQzNEZW51bSBjYXApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
OjpnbERpc2FibGUoY2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIDo6Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmly
c3QsIEdDM0RzaXplaSBjb3VudCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsRHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNE
ZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9j
YXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZShHQzNEZW51bSBjYXApCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbEVuYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5k
ZXgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2goKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xGaW5pc2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Zmx1c2goKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xG
bHVzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRl
cmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwg
YXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0
dXJlLCBHQzNEaW50IGxldmVsKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwg
dGV4dHVyZSwgbGV2ZWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2Uo
R0MzRGVudW0gbW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRnJv
bnRGYWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1h
cChHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bEdlbmVyYXRlTWlwbWFwRVhUKHRhcmdldCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4
LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIGlmICghcHJvZ3JhbSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTGludCBtYXhBdHRyaWJ1dGVTaXpl
ID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVf
TUFYX0xFTkdUSCwgJm1heEF0dHJpYnV0ZVNpemUpOwotICAgIEdMY2hhciBuYW1lW21heEF0dHJp
YnV0ZVNpemVdOyAvLyBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVs
bCB0ZXJtaW5hdGlvbgotICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7Ci0gICAgR0xpbnQgc2l6
ZSA9IDA7Ci0gICAgR0xlbnVtIHR5cGUgPSAwOwotICAgIDo6Z2xHZXRBY3RpdmVBdHRyaWIocHJv
Z3JhbSwgaW5kZXgsIG1heEF0dHJpYnV0ZVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUs
IG5hbWUpOwotICAgIGlmICghbmFtZUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGluZm8ubmFtZSA9IFN0cmluZyhuYW1lLCBuYW1lTGVuZ3RoKTsKLSAgICBpbmZvLnR5cGUgPSB0
eXBlOwotICAgIGluZm8uc2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0gICAgCiBi
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCiB7CiAgICAgaWYgKCFw
cm9ncmFtKSB7CkBAIC03MjIsMTY2ICszMjAsMjUgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0QWN0aXZlVW5pZm9ybQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNE
c2l6ZWkgbWF4Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNoYWRl
cnMpCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElO
VkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIDo6Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNv
dW50LCBzaGFkZXJzKTsKLX0KLQotaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2Nh
dGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCB2b2lkKiBkYXRhKQogewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIC0x
OwotCisgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUg
ZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKKyAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5n
IGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KICAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0s
IG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDb250ZXh0QXR0cmlidXRlcygpCi17Ci0gICAgcmV0dXJu
IG1fYXR0cnM7Ci19Ci0KLUdDM0RlbnVtIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcigpCi17
Ci0gICAgaWYgKG1fc3ludGhldGljRXJyb3JzLnNpemUoKSA+IDApIHsKLSAgICAgICAgTGlzdEhh
c2hTZXQ8R0MzRGVudW0+OjppdGVyYXRvciBpdGVyID0gbV9zeW50aGV0aWNFcnJvcnMuYmVnaW4o
KTsKLSAgICAgICAgR0MzRGVudW0gZXJyID0gKml0ZXI7Ci0gICAgICAgIG1fc3ludGhldGljRXJy
b3JzLnJlbW92ZShpdGVyKTsKLSAgICAgICAgcmV0dXJuIGVycjsKKyAgICA6OmdsRmx1c2goKTsK
KyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxl
RkJPKSB7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZF
Ul9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6Z2xCbGl0RnJhbWVi
dWZmZXJFWFQoeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4LCB5LCB4ICsgd2lkdGgsIHkg
KyBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisgICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6
Z2xGbHVzaCgpOwogICAgIH0KLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVy
biA6OmdsR2V0RXJyb3IoKTsKKyAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2Jv
dW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotU3RyaW5nIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gU3RyaW5nKChjb25zdCBjaGFyKikgOjpnbEdldFN0
cmluZyhuYW1lKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmhpbnQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xIaW50KHRhcmdldCwgbW9kZSk7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4
dDNEOjppc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgcmV0dXJuIDo6Z2xJc0J1ZmZlcihidWZmZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFw
aGljc0NvbnRleHQzRDo6aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbElzRW5hYmxlZChjYXApOwotfQotCi1HQzNEYm9v
bGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZy
YW1lYnVmZmVyKQotewotICAgIGlmICghZnJhbWVidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9G
QUxTRTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsSXNGcmFt
ZWJ1ZmZlckVYVChmcmFtZWJ1ZmZlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4
dDNEOjppc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIGlmICghcHJv
Z3JhbSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgcmV0dXJuIDo6Z2xJc1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLUdDM0Rib29sZWFu
IEdyYXBoaWNzQ29udGV4dDNEOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRl
cmJ1ZmZlcikKLXsKLSAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xJc1JlbmRl
cmJ1ZmZlckVYVChyZW5kZXJidWZmZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHQzRDo6aXNTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgaWYgKCFzaGFk
ZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIHJldHVybiA6OmdsSXNTaGFkZXIoc2hhZGVyKTsKLX0KLQotR0MzRGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0g
ICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbElzVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsTGluZVdpZHRoKHdpZHRoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGlua1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICA6OmdsTGlua1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0
b3IsIEdDM0RmbG9hdCB1bml0cykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsUG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRh
dGEpCi17Ci0gICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0
aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKLSAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVy
aW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRmx1c2goKTsKLSAgICBpZiAobV9hdHRycy5hbnRp
YWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVG
Qk8pOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJf
RVhULCBtX2Zibyk7Ci0gICAgICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoeCwgeSwgeCArIHdp
ZHRoLCB5ICsgaGVpZ2h0LCB4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIEdMX0NPTE9SX0JV
RkZFUl9CSVQsIEdMX0xJTkVBUik7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgICAgIDo6Z2xGbHVzaCgpOwotICAgIH0KLSAg
ICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEp
OwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1w
bGVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBtX211bHRpc2FtcGxlRkJPKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFz
ZVNoYWRlckNvbXBpbGVyKCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgaW1wbGVtZW50
ZWQgb24gZGVza3RvcCBPcGVuR0wuIFdlIG5lZWQgdG8gaGF2ZSBpZmRlZnMgZm9yIHRoZSBkaWZm
ZXJlbnQgR0wgdmFyaWFudHMKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAvLzo6Z2xS
ZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVu
ZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKIHsKICAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CkBAIC05MDIs
MzAyICszNTksNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yCiAg
ICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdl
KEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICA6OmdsU2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICA6OmdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBj
b25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLQotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotCi0gICAgU2hhZGVyU291cmNlRW50cnkgZW50cnk7Ci0KLSAgICBl
bnRyeS5zb3VyY2UgPSBzdHJpbmc7Ci0KLSAgICBtX3NoYWRlclNvdXJjZU1hcC5zZXQoc2hhZGVy
LCBlbnRyeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jKEdDM0Rl
bnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xTdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2Us
IEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMs
IHJlZiwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrKEdD
M0R1aW50IG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5j
aWxNYXNrKG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFza1Nl
cGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51
bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbFN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWls
LCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFz
cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmYoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHZhbHVlKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHZhbHVl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyaShHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmKEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RmbG9hdCB2MCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5p
Zm9ybTFmKGxvY2F0aW9uLCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0xZnYobG9jYXRp
b24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJm
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtMmYobG9jYXRpb24sIHYwLCB2MSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlv
biwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgLy8gRklYTUU6IGxl
bmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsVW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0
IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICA6OmdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxv
YXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRz
IHRvIGJlIGEgbXVsdGlwbGUgb2YgMwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0Rm
bG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQotewotICAgIC8vIEZJWE1FOiBsZW5n
dGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgOjpnbFVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0xaShsb2NhdGlv
biwgdjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmkoR0MzRGludCBsb2NhdGlv
biwgR0MzRGludCB2MCwgR0MzRGludCB2MSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICA6OmdsVW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBH
QzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVs
dGlwbGUgb2YgMgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtMml2
KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0zaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBHQzNEaW50
IHYyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtM2kobG9j
YXRpb24sIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
M2l2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKLXsK
LSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMwotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCBh
cnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aShHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBHQzNEaW50IHYyLCBHQzNEaW50IHYzKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtNGkobG9jYXRpb24s
IHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRp
dihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCi17Ci0g
ICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwgYXJy
YXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiBhcnJheSwgR0Mz
RHNpemVpIHNpemUpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRp
cGxlIG9mIDQKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybU1hdHJp
eDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICAv
LyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOQotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0
cmFuc3Bvc2UsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1h
dHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9h
dCogYXJyYXksIEdDM0RzaXplaSBzaXplKQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMg
dG8gYmUgYSBtdWx0aXBsZSBvZiAxNgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVzZVByb2dyYW0o
cHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbShQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCB2MCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
VmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5KQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFy
cmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmYoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZihpbmRleCwgdjAsIHYxKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBH
QzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xW
ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0
IHYxLCBHQzNEZmxvYXQgdjIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bFZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZnYo
aW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmli
NGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQg
djIsIEdDM0RmbG9hdCB2MykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
VmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIGFy
cmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0
ZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0
cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBH
QzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50cHRyIG9mZnNl
dCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVmVydGV4QXR0cmliUG9p
bnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9j
YXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgOjpnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRCb29sZWFudihHQzNEZW51bSBwbmFtZSwgR0MzRGJvb2xlYW4qIHZh
bHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRCb29sZWFudihw
bmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJh
bWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0QnVmZmVyUGFyYW1ldGVy
aXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldEZsb2F0dihwbmFtZSwgdmFsdWUpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJp
dihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBH
QzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAoYXR0
YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpCi0gICAgICAgIGF0dGFjaG1lbnQg
PSBERVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVOQ0lMX0FUVEFDSE1FTlQsIGVpdGhlciB3b3Jr
cy4KLSAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQodGFyZ2V0
LCBhdHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCiB7CiAgICAgLy8g
TmVlZCB0byBlbXVsYXRlIE1BWF9GUkFHTUVOVC9WRVJURVhfVU5JRk9STV9WRUNUT1JTIGFuZCBN
QVhfVkFSWUlOR19WRUNUT1JTCkBAIC0xMjIzLDE3OSArMzg0LDYgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0SW50ZWdlcnYoR0MzRAogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5h
bWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0p
Ci17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgR0xpbnQgbGVuZ3RoOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19M
T0dfTEVOR1RILCAmbGVuZ3RoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuICIi
OwotCi0gICAgR0xzaXplaSBzaXplOwotICAgIEdMY2hhciogaW5mbyA9IChHTGNoYXIqKSBmYXN0
TWFsbG9jKGxlbmd0aCk7Ci0KLSAgICA6OmdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSwgbGVu
Z3RoLCAmc2l6ZSwgaW5mbyk7Ci0gICAgU3RyaW5nIHMoaW5mbyk7Ci0gICAgZmFzdEZyZWUoaW5m
byk7Ci0gICAgcmV0dXJuIHM7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0Rp
bnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRSZW5k
ZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBH
QzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0K
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVj
dCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1h
cC5maW5kKHNoYWRlcik7Ci0gICAgCi0gICAgc3dpdGNoIChwbmFtZSkgewotICAgICAgICBjYXNl
IERFTEVURV9TVEFUVVM6Ci0gICAgICAgIGNhc2UgU0hBREVSX1RZUEU6Ci0gICAgICAgICAgICAv
LyBMZXQgT3BlbkdMIGhhbmRsZSB0aGVzZS4KLSAgICAgICAgCi0gICAgICAgICAgICA6OmdsR2V0
U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIAotICAgICAgICBjYXNlIENPTVBJTEVfU1RBVFVTOgotICAgICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgewotICAgICAgICAgICAgICAgICgqdmFsdWUp
ID0gc3RhdGljX2Nhc3Q8aW50PihmYWxzZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgICAgICgqdmFsdWUpID0gc3RhdGljX2Nhc3Q8
aW50PihyZXN1bHQtPnNlY29uZC5pc1ZhbGlkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAKLSAgICAgICAgY2FzZSBJTkZPX0xPR19MRU5HVEg6Ci0gICAgICAgICAgICBpZiAocmVzdWx0
ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgKCp2YWx1ZSkg
PSAwOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgICAgICAoKnZhbHVlKSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVyKS5sZW5ndGgoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAgY2FzZSBTSEFERVJfU09VUkNF
X0xFTkdUSDoKLSAgICAgICAgICAgICgqdmFsdWUpID0gZ2V0U2hhZGVyU291cmNlKHNoYWRlciku
bGVuZ3RoKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX0VOVU0pOwotICAgIH0KLX0K
LQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RP
YmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0KLSAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVu
dHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwot
Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgIHJl
dHVybiAiIjsKLQotICAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeSA9IHJlc3VsdC0+c2Vjb25k
OwotCi0gICAgIGlmIChlbnRyeS5pc1ZhbGlkKSB7Ci0gICAgICAgICBHTGludCBsZW5ndGg7Ci0g
ICAgICAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5n
dGgpOwotICAgICAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgICAgICAgcmV0dXJuICIiOwotCi0g
ICAgICAgICBHTHNpemVpIHNpemU7Ci0gICAgICAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikg
ZmFzdE1hbGxvYyhsZW5ndGgpOwotCi0gICAgICAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFk
ZXIsIGxlbmd0aCwgJnNpemUsIGluZm8pOwotCi0gICAgICAgICBTdHJpbmcgcyhpbmZvKTsKLSAg
ICAgICAgIGZhc3RGcmVlKGluZm8pOwotICAgICAgICAgcmV0dXJuIHM7Ci0gICAgIH0gZWxzZQot
ICAgICAgICAgcmV0dXJuIGVudHJ5LmxvZzsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJU
KHNoYWRlcik7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIEhhc2hNYXA8UGxh
dGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3No
YWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0KLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVy
U291cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gIiI7Ci0KLSAgICByZXR1cm4gcmVzdWx0
LT5zZWNvbmQuc291cmNlOwotfQotCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBh
cmFtZXRlcmZ2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFs
dWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldFRleFBhcmFtZXRl
cmZ2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldFRleFBh
cmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICA6OmdsR2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0s
IEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIDo6Z2xHZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsK
LX0KLQotR0MzRGludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEFTU0VSVChw
cm9ncmFtKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsR2V0
VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNE
ZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsR2V0VmVydGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KEdDM0R1aW50IGluZGV4
LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgOjpnbEdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwot
fQotCi1HQzNEc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNl
dChHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0KLSAgICBHTHZvaWQqIHBvaW50ZXIgPSAwOwotICAgIDo6Z2xHZXRWZXJ0ZXhBdHRy
aWJQb2ludGVydihpbmRleCwgcG5hbWUsICZwb2ludGVyKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8R0MzRHNpemVpcHRyPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7Ci19
Ci0KIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCiB7CiAgICAgaWYgKHdpZHRoICYmIGhlaWdodCAm
JiAhcGl4ZWxzKSB7CkBAIC0xNDE1LDEyMSArNDAzLDYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6dGV4SW1hZ2UyRChHQzNEZQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2ZmLCBHQzNEaW50IHlvZmYsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICAvLyBGSVhNRTogd2Ugd2lsbCBu
ZWVkIHRvIGRlYWwgd2l0aCBQaXhlbFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxpbmcgd2l0aCBpbWFn
ZSBidWZmZXJzIHRoYXQgZGlmZmVyIGZyb20gdGhlIHN1YmltYWdlIHNpemUKLSAgICA6OmdsVGV4
U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHBpeGVscyk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0
M0Q6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1
aW50IG8gPSAwOwotICAgIGdsR2VuQnVmZmVycygxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0K
LVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKCkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xH
ZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQotCi1QbGF0Zm9ybTNE
T2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFtKCkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Ci19Ci0KLVBsYXRm
b3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsR2VuUmVu
ZGVyYnVmZmVyc0VYVCgxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRmb3JtM0RPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbENyZWF0ZVNoYWRlcigodHlwZSA9
PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURF
Uik7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1
cmUoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBvID0gMDsKLSAg
ICBnbEdlblRleHR1cmVzKDEsICZvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0z
RE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmZnJhbWVidWZmZXIpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9y
bTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJnJlbmRlcmJ1ZmZlcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RP
YmplY3QgdGV4dHVyZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0
ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3lu
dGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IpCi17Ci0gICAgbV9zeW50aGV0aWNFcnJvcnMu
YWRkKGVycm9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0NvbnRleHRDaGFu
Z2VkKCkKLXsKLSAgICBtX2xheWVyQ29tcG9zaXRlZCA9IGZhbHNlOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKLXsKLSAgICBtX2xheWVyQ29tcG9z
aXRlZCA9IHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRl
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGVkOwotfQotCi1FeHRlbnNp
b25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkKLXsKLSAgICBpZiAoIW1f
ZXh0ZW5zaW9ucykKLSAgICAgICAgbV9leHRlbnNpb25zID0gYWRvcHRQdHIobmV3IEV4dGVuc2lv
bnMzRE9wZW5HTCh0aGlzKSk7Ci0gICAgcmV0dXJuIG1fZXh0ZW5zaW9ucy5nZXQoKTsKLX0KLQog
fQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMQmFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xCYXNlLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3
LmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkV4dGVu
c2lvbnMzRE9wZW5HTC5oIgorI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnQz
MkFycmF5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJVaW50OEFy
cmF5LmgiCisjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKKyNpbmNsdWRlIDxjc3RyaW5nPgorI2lu
Y2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KKyNlbGlmIFBMQVRG
T1JNKEdUSykKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VsaWYgUExBVEZPUk0oUVQpCisj
aW5jbHVkZSA8UXRHbG9iYWw+CisjaW5jbHVkZSA8Y2Fpcm8vT3BlbkdMU2hpbXMuaD4KKyNlbmRp
ZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlk
YXRlQXR0cmlidXRlcygpCit7CisgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0
ZW5zaW9ucygpOworICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgaWYgKGV4dGVu
c2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKSkgeworICAgICAg
ICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVu
Y2lsIik7CisgICAgICAgICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCisg
ICAgICAgICAgICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBtX2F0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKG1fYXR0cnMuYW50
aWFsaWFzKSB7CisgICAgICAgIGJvb2wgaXNWYWxpZFZlbmRvciA9IHRydWU7CisgICAgICAgIC8v
IEN1cnJlbnRseSBpbiBNYWMgd2Ugb25seSB0dXJuIG9uIGFudGlhbGlhcyBpZiB2ZW5kb3IgaXMg
TlZJRElBLgorICAgICAgICBjb25zdCBjaGFyKiB2ZW5kb3IgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX1ZFTkRPUikpOworICAgICAgICBpZiAoIXN0ZDo6
c3Ryc3RyKHZlbmRvciwgIk5WSURJQSIpKQorICAgICAgICAgICAgaXNWYWxpZFZlbmRvciA9IGZh
bHNlOworICAgICAgICBpZiAoIWlzVmFsaWRWZW5kb3IgfHwgIWV4dGVuc2lvbnMtPnN1cHBvcnRz
KCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpKQorICAgICAgICAgICAgbV9hdHRy
cy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXh0ZW5zaW9u
cy0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKKyAg
ICB9Cit9CisKKyNpZiAhUExBVEZPUk0oUVQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
KQoreworICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52YXMoKTsK
KyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOworCisgICAg
aW50IHJvd0J5dGVzID0gbV9jdXJyZW50V2lkdGggKiA0OworICAgIGludCB0b3RhbEJ5dGVzID0g
cm93Qnl0ZXMgKiBtX2N1cnJlbnRIZWlnaHQ7CisKKyAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBj
aGFyPiBwaXhlbHMgPSBhZG9wdEFycmF5UHRyKG5ldyB1bnNpZ25lZCBjaGFyW3RvdGFsQnl0ZXNd
KTsKKyAgICBpZiAoIXBpeGVscykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVhZFJlbmRlcmlu
Z1Jlc3VsdHMocGl4ZWxzLmdldCgpLCB0b3RhbEJ5dGVzKTsKKworICAgIGlmICghbV9hdHRycy5w
cmVtdWx0aXBsaWVkQWxwaGEpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5
dGVzOyBpICs9IDQpIHsKKyAgICAgICAgICAgIC8vIFByZW11bHRpcGx5IGFscGhhCisgICAgICAg
ICAgICBwaXhlbHNbaSArIDBdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDBdICogcGl4ZWxz
W2kgKyAzXSAvIDI1NSk7CisgICAgICAgICAgICBwaXhlbHNbaSArIDFdID0gc3RkOjptaW4oMjU1
LCBwaXhlbHNbaSArIDFdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7CisgICAgICAgICAgICBwaXhl
bHNbaSArIDJdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDJdICogcGl4ZWxzW2kgKyAzXSAv
IDI1NSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQo
KSwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwKKyAgICAgICAgICAgICAgICAgIGNh
bnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+
cGxhdGZvcm1Db250ZXh0KCkpOworfQorI2VuZGlmCisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBH
cmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQorewor
ICAgIC8vIFJlYWRpbmcgcHJlbXVsdGlwbGllZCBhbHBoYSB3b3VsZCBpbnZvbHZlIHVucHJlbXVs
dGlwbHlpbmcsIHdoaWNoIGlzCisgICAgLy8gbG9zc3kKKyAgICBpZiAobV9hdHRycy5wcmVtdWx0
aXBsaWVkQWxwaGEpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPEltYWdlRGF0YT4g
aW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9j
dXJyZW50SGVpZ2h0KSk7CisgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gaW1hZ2VEYXRhLT5k
YXRhKCktPmRhdGEoKS0+ZGF0YSgpOworICAgIGludCB0b3RhbEJ5dGVzID0gNCAqIG1fY3VycmVu
dFdpZHRoICogbV9jdXJyZW50SGVpZ2h0OworCisgICAgcmVhZFJlbmRlcmluZ1Jlc3VsdHMocGl4
ZWxzLCB0b3RhbEJ5dGVzKTsKKworICAgIC8vIENvbnZlcnQgdG8gUkdCQQorICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQorICAgICAgICBzdGQ6OnN3YXAocGl4ZWxz
W2ldLCBwaXhlbHNbaSArIDJdKTsKKworICAgIHJldHVybiBpbWFnZURhdGEucmVsZWFzZSgpOwor
fQorCitJbnRTaXplIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVu
dEhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUoR0Mz
RGVudW0gdGV4dHVyZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2FjdGl2
ZVRleHR1cmUgPSB0ZXh0dXJlOworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7
CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWlu
dCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmluZEF0dHJpYkxvY2F0aW9uKHByb2dy
YW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJpbmRCdWZmZXIodGFyZ2V0
LCBidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZShHQzNE
ZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAobV9hY3RpdmVUZXh0dXJlICYmIHRhcmdldCA9PSBHTF9URVhU
VVJFXzJEKQorICAgICAgICBtX2JvdW5kVGV4dHVyZTAgPSB0ZXh0dXJlOworICAgIDo6Z2xCaW5k
VGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
aW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJi
dWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJpbmRSZW5kZXJi
dWZmZXJFWFQodGFyZ2V0LCByZW5kZXJidWZmZXIpOworfQorCitHQzNEZW51bSBHcmFwaGljc0Nv
bnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzRVhUKHRhcmdldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kQ29sb3Io
R0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNs
YW1wZiBhbHBoYSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmxlbmRD
b2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsQmxlbmRFcXVhdGlvbihtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVt
IG1vZGVBbHBoYSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmxlbmRF
cXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Cit9CisKKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3Ip
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJsZW5kRnVuYyhzZmFjdG9y
LCBkZmFjdG9yKTsKK30gICAgICAgCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVu
Y1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNB
bHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbEJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxw
aGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRh
cmdldCwgR0MzRHNpemVpcHRyIHNpemUsIEdDM0RlbnVtIHVzYWdlKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2Up
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwg
c2l6ZSwgZGF0YSwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJT
dWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBz
aXplLCBjb25zdCB2b2lkKiBkYXRhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbENsZWFyKG1hc2spOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKEdDM0RjbGFtcGYgciwgR0MzRGNsYW1wZiBnLCBHQzNE
Y2xhbXBmIGIsIEdDM0RjbGFtcGYgYSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICA6OmdsQ2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xDbGVhckRlcHRoKGRlcHRoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsQ2xlYXJTdGVuY2lsKHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xl
YW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIp
Cit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAg
ICBpbnQgR0xzaGFkZXJUeXBlOworICAgIEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlOworCisg
ICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIFNIQURFUl9UWVBFLCAmR0xzaGFkZXJUeXBlKTsKKyAg
ICAKKyAgICBpZiAoR0xzaGFkZXJUeXBlID09IFZFUlRFWF9TSEFERVIpCisgICAgICAgIHNoYWRl
clR5cGUgPSBTSEFERVJfVFlQRV9WRVJURVg7CisgICAgZWxzZSBpZiAoR0xzaGFkZXJUeXBlID09
IEZSQUdNRU5UX1NIQURFUikKKyAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX0ZSQUdN
RU5UOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOyAvLyBJbnZhbGlkIHNoYWRlciB0eXBlLgor
CisgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJh
dG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKworICAgIGlmIChy
ZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOworCisgICAgU3RyaW5n
IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CisgICAgU3RyaW5nIHNoYWRlckluZm9Mb2c7CisKKyAg
ICBib29sIGlzVmFsaWQgPSBtX2NvbXBpbGVyLnZhbGlkYXRlU2hhZGVyU291cmNlKGVudHJ5LnNv
dXJjZS51dGY4KCkuZGF0YSgpLCBzaGFkZXJUeXBlLCB0cmFuc2xhdGVkU2hhZGVyU291cmNlLCBz
aGFkZXJJbmZvTG9nKTsKKworICAgIGVudHJ5LmxvZyA9IHNoYWRlckluZm9Mb2c7CisgICAgZW50
cnkuaXNWYWxpZCA9IGlzVmFsaWQ7CisKKyAgICBpZiAoIWlzVmFsaWQpCisgICAgICAgIHJldHVy
bjsgLy8gU2hhZGVyIGRpZG4ndCB2YWxpZGF0ZSwgZG9uJ3QgbW92ZSBmb3J3YXJkIHdpdGggY29t
cGlsaW5nIHRyYW5zbGF0ZWQgc291cmNlICAgIAorCisgICAgaW50IHRyYW5zbGF0ZWRTaGFkZXJM
ZW5ndGggPSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLmxlbmd0aCgpOworCisgICAgY29uc3QgQ1N0
cmluZyYgdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcgPSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLnV0
ZjgoKTsKKyAgICBjb25zdCBjaGFyKiB0cmFuc2xhdGVkU2hhZGVyUHRyID0gdHJhbnNsYXRlZFNo
YWRlckNTdHJpbmcuZGF0YSgpOworICAgIAorICAgIDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAx
LCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRyYW5zbGF0ZWRTaGFkZXJMZW5ndGgpOworICAgIAor
ICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7CisgICAgCisgICAgaW50IEdMQ29tcGlsZVN1
Y2Nlc3M7CisgICAgCisgICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgQ09NUElMRV9TVEFUVVMs
ICZHTENvbXBpbGVTdWNjZXNzKTsKKyAgICAKKyAgICAvLyBBU1NFUlQgdGhhdCBBTkdMRSBnZW5l
cmF0ZWQgR0xTTCB3aWxsIGJlIGFjY2VwdGVkIGJ5IE9wZW5HTAorICAgIEFTU0VSVChHTENvbXBp
bGVTdWNjZXNzID09IEdMX1RSVUUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjdWxs
RmFjZShHQzNEZW51bSBtb2RlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xDdWxsRmFjZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhGdW5j
KEdDM0RlbnVtIGZ1bmMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERl
cHRoRnVuYyhmdW5jKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKEdD
M0Rib29sZWFuIGZsYWcpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERl
cHRoTWFzayhmbGFnKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZShH
QzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbERlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0
Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgQVNTRVJU
KHNoYWRlcik7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERldGFjaFNoYWRl
cihwcm9ncmFtLCBzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxl
KEdDM0RlbnVtIGNhcCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRGlz
YWJsZShjYXApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0Mz
RHNpemVpIGNvdW50KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEcmF3
QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5
cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2
b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZW5hYmxlKEdDM0RlbnVtIGNhcCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsRW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFy
Z2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCBhdHRhY2htZW50
LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNo
bWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEdDM0Rp
bnQgbGV2ZWwpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEZyYW1lYnVm
ZmVyVGV4dHVyZTJERVhUKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBs
ZXZlbCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlwbWFwKEdDM0Rl
bnVtIHRhcmdldCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2VuZXJh
dGVNaXBtYXBFWFQodGFyZ2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZmluaXNo
KCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRmluaXNoKCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsRmx1c2goKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJv
bnRGYWNlKEdDM0RlbnVtIG1vZGUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbEZyb250RmFjZShtb2RlKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0
aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2
ZUluZm8mIGluZm8pCit7CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50IG1heEF0dHJpYnV0ZVNpemUgPSAwOwor
ICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVO
R1RILCAmbWF4QXR0cmlidXRlU2l6ZSk7CisgICAgR0xjaGFyIG5hbWVbbWF4QXR0cmlidXRlU2l6
ZV07IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1p
bmF0aW9uCisgICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKKyAgICBHTGludCBzaXplID0gMDsK
KyAgICBHTGVudW0gdHlwZSA9IDA7CisgICAgOjpnbEdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBp
bmRleCwgbWF4QXR0cmlidXRlU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7
CisgICAgaWYgKCFuYW1lTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaW5mby5u
YW1lID0gU3RyaW5nKG5hbWUsIG5hbWVMZW5ndGgpOworICAgIGluZm8udHlwZSA9IHR5cGU7Cisg
ICAgaW5mby5zaXplID0gc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNpemVpKiBjb3VudCwgUGxhdGZvcm0zRE9iamVj
dCogc2hhZGVycykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhD
b3VudCwgY291bnQsIHNoYWRlcnMpOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0
dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFt
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCitHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQoreworICAgIHJldHVy
biBtX2F0dHJzOworfQorCitHQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IoKQor
eworICAgIGlmIChtX3N5bnRoZXRpY0Vycm9ycy5zaXplKCkgPiAwKSB7CisgICAgICAgIExpc3RI
YXNoU2V0PEdDM0RlbnVtPjo6aXRlcmF0b3IgaXRlciA9IG1fc3ludGhldGljRXJyb3JzLmJlZ2lu
KCk7CisgICAgICAgIEdDM0RlbnVtIGVyciA9ICppdGVyOworICAgICAgICBtX3N5bnRoZXRpY0Vy
cm9ycy5yZW1vdmUoaXRlcik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xHZXRFcnJvcigpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoYXR0YWNo
bWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpCisgICAgICAgIGF0dGFjaG1lbnQgPSBE
RVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVOQ0lMX0FUVEFDSE1FTlQsIGVpdGhlciB3b3Jrcy4K
KyAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBh
dHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQor
CitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFN0cmluZyhHQzNEZW51bSBuYW1lKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBTdHJpbmcoKGNvbnN0IGNoYXIq
KSA6OmdsR2V0U3RyaW5nKG5hbWUpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6aGlu
dChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKworR0MzRGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAg
IGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzQnVmZmVyKGJ1ZmZlcik7Cit9CisKK0dDM0Ri
b29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQoR0MzRGVudW0gY2FwKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7Cit9
CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3Jt
M0RPYmplY3QgZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJu
IDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVmZmVyKTsKK30KKworR0MzRGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVm
ZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVm
ZmVyRVhUKHJlbmRlcmJ1ZmZlcik7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNE
Ojppc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIGlmICghcHJvZ3Jh
bSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgcmV0dXJuIDo6Z2xJc1Byb2dyYW0ocHJvZ3JhbSk7Cit9CisKK0dDM0Rib29sZWFuIEdy
YXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAg
ICBpZiAoIXNoYWRlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc1NoYWRlcihzaGFkZXIpOworfQorCitHQzNE
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4
dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRleHR1
cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdp
ZHRoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xMaW5lV2lkdGgod2lk
dGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0p
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFBpeGVsU3RvcmVpKHBuYW1l
LCBwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQoR0Mz
RGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIC8vIEZJWE1F
OiBUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBkZXNrdG9wIE9wZW5HTC4gV2UgbmVlZCB0byBo
YXZlIGlmZGVmcyBmb3IgdGhlIGRpZmZlcmVudCBHTCB2YXJpYW50cworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIC8vIDo6Z2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6c2FtcGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0Mz
RGJvb2xlYW4gaW52ZXJ0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xT
YW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6c2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTY2lzc29y
KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaGFk
ZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQor
eworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAg
ICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeTsKKworICAgIGVudHJ5LnNvdXJjZSA9IHN0cmluZzsK
KworICAgIG1fc2hhZGVyU291cmNlTWFwLnNldChzaGFkZXIsIGVudHJ5KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYs
IEdDM0R1aW50IG1hc2spCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFN0
ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGlu
dCByZWYsIEdDM0R1aW50IG1hc2spCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNpbE1hc2sobWFzayk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwg
R0MzRHVpbnQgbWFzaykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3Rl
bmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFz
cykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNpbE9wKGZhaWws
IHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcFNl
cGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNE
ZW51bSB6cGFzcykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNp
bE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEZmxvYXQgdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUs
IEdDM0RpbnQgdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFRl
eFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtMWYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMWYobG9jYXRpb24sIHYwKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmYoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbFVuaWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIGFycmF5LCBH
QzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVs
dGlwbGUgb2YgMgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMmZ2
KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0Mz
RGZsb2F0IHYyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3Jt
M2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBz
aXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAz
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0zZnYobG9jYXRpb24s
IHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmKEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIs
IEdDM0RmbG9hdCB2MykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5p
Zm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0Mz
RHNpemVpIHNpemUpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRp
cGxlIG9mIDQKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTRmdihs
b2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtMWkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTFpKGxvY2F0aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogYXJy
YXksIEdDM0RzaXplaSBzaXplKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xVbmlmb3JtMWl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0yaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50
IHYxKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMmkobG9j
YXRpb24sIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaXYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogYXJyYXksIEdDM0RzaXplaSBzaXplKQoreworICAg
IC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyCisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0yaXYobG9jYXRpb24sIHNpemUsIGFycmF5
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEsIEdDM0RpbnQgdjIpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0zaShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRGludCogYXJyYXksIEdDM0RzaXplaSBzaXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGgg
bmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbFVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdD
M0RpbnQgdjEsIEdDM0RpbnQgdjIsIEdDM0RpbnQgdjMpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbFVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5l
ZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xVbmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgyZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAv
LyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAorICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0
cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1h
dHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9h
dCogYXJyYXksIEdDM0RzaXplaSBzaXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMg
dG8gYmUgYSBtdWx0aXBsZSBvZiA5CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRp
b24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNp
emUpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDE2
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm1NYXRyaXg0ZnYobG9j
YXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1c2VQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVXNlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICA6OmdsVmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZihpbmRleCwg
djApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbFZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYw
LCBHQzNEZmxvYXQgdjEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZl
cnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogYXJyYXkpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjJmdihpbmRleCwg
YXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZihHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliM2YoaW5kZXgs
IHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIz
ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZihpbmRleCwg
djAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRy
aWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjRmdihpbmRleCwgYXJyYXkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGlu
ZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQs
IEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBl
LCBub3JtYWxpemVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmll
d3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmlld3BvcnQoeCwg
eSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJvb2xl
YW52KEdDM0RlbnVtIHBuYW1lLCBHQzNEYm9vbGVhbiogdmFsdWUpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbEdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xHZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dihHQzNEZW51bSBwbmFt
ZSwgR0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6
OmdsR2V0RmxvYXR2KHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBH
QzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0
UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCB2YWx1ZSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQorewor
ICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdM
aW50IGxlbmd0aDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0lORk9fTE9HX0xF
TkdUSCwgJmxlbmd0aCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiAiIjsKKwor
ICAgIEdMc2l6ZWkgc2l6ZTsKKyAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxv
YyhsZW5ndGgpOworCisgICAgOjpnbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0sIGxlbmd0aCwg
JnNpemUsIGluZm8pOworICAgIFN0cmluZyBzKGluZm8pOworICAgIGZhc3RGcmVlKGluZm8pOwor
ICAgIHJldHVybiBzOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQor
eworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAg
ICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3Ig
cmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIAorICAgIHN3aXRj
aCAocG5hbWUpIHsKKyAgICBjYXNlIERFTEVURV9TVEFUVVM6CisgICAgY2FzZSBTSEFERVJfVFlQ
RToKKyAgICAgICAgLy8gTGV0IE9wZW5HTCBoYW5kbGUgdGhlc2UuCisgICAgICAgIAorICAgICAg
ICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgdmFsdWUpOworICAgICAgICBicmVhazsK
KyAgICAgICAgCisgICAgY2FzZSBDT01QSUxFX1NUQVRVUzoKKyAgICAgICAgaWYgKHJlc3VsdCA9
PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgeworICAgICAgICAgICAgKCp2YWx1ZSkgPSBzdGF0
aWNfY2FzdDxpbnQ+KGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IAorICAgICAgICAoKnZhbHVlKSA9IHN0YXRpY19jYXN0PGludD4ocmVzdWx0LT5zZWNvbmQuaXNW
YWxpZCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIElORk9fTE9HX0xFTkdU
SDoKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgeworICAg
ICAgICAgICAgKCp2YWx1ZSkgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgCisgICAgICAgICgqdmFsdWUpID0gZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpLmxlbmd0aCgp
OworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBTSEFERVJfU09VUkNFX0xFTkdU
SDoKKyAgICAgICAgKCp2YWx1ZSkgPSBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS5sZW5ndGgoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoSU5WQUxJRF9FTlVNKTsKKyAgICB9Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NF
UlQoc2hhZGVyKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgSGFzaE1hcDxQ
bGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1f
c2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFk
ZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgICByZXR1cm4gIiI7CisKKyAgICAgU2hhZGVyU291
cmNlRW50cnkgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKworICAgICBpZiAoZW50cnkuaXNWYWxp
ZCkgeworICAgICAgICAgR0xpbnQgbGVuZ3RoOworICAgICAgICAgOjpnbEdldFNoYWRlcml2KHNo
YWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICAgICAgIGlmICghbGVuZ3Ro
KQorICAgICAgICAgICAgIHJldHVybiAiIjsKKworICAgICAgICAgR0xzaXplaSBzaXplOworICAg
ICAgICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZhc3RNYWxsb2MobGVuZ3RoKTsKKworICAg
ICAgICAgOjpnbEdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvKTsK
KworICAgICAgICAgU3RyaW5nIHMoaW5mbyk7CisgICAgICAgICBmYXN0RnJlZShpbmZvKTsKKyAg
ICAgICAgIHJldHVybiBzOworICAgICB9CisgICAgcmV0dXJuIGVudHJ5LmxvZzsKK30KKworU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKworICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+Ojpp
dGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisKKyAgICBp
ZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gIiI7
CisKKyAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQuc291cmNlOworfQorCisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
cG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgOjpnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9u
LCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pdihQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHZhbHVlKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRVbmlmb3JtaXYocHJvZ3Jh
bSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKworR0MzRGludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIHJldHVybiA6OmdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgp
LmRhdGEoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2
KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VmVydGV4QXR0cmliZnYoaW5kZXgs
IHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0
dHJpYml2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldFZlcnRleEF0dHJpYml2KGlu
ZGV4LCBwbmFtZSwgdmFsdWUpOworfQorCitHQzNEc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBHTHZvaWQqIHBvaW50ZXIgPSAwOwor
ICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcG5hbWUsICZwb2ludGVyKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0MzRHNpemVpcHRyPihyZWludGVycHJldF9jYXN0PGlu
dHB0cl90Pihwb2ludGVyKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1Yklt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmYsIEdDM0Rp
bnQgeW9mZiwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKworICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQgdG8gZGVhbCB3aXRoIFBp
eGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1ZmZlcnMgdGhhdCBkaWZm
ZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZQorICAgIDo6Z2xUZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsK
K30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKCkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgbyA9IDA7CisgICAgOjpn
bEdlbkJ1ZmZlcnMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCitQbGF0Zm9ybTNET2JqZWN0
IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgR0x1aW50IG8gPSAwOworICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNF
WFQoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNz
Q29udGV4dDNEOjpjcmVhdGVQcm9ncmFtKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgR0x1aW50IG8gPSAwOworICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhU
KDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xDcmVhdGVTaGFkZXIoKHR5cGUgPT0gRlJBR01FTlRf
U0hBREVSKSA/IEdMX0ZSQUdNRU5UX1NIQURFUiA6IEdMX1ZFUlRFWF9TSEFERVIpOworfQorCitQ
bGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgbyA9IDA7CisgICAgOjpnbEdlblRl
eHR1cmVzKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0
IGZyYW1lYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZWxl
dGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJmZyYW1lYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNE
T2JqZWN0IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6
OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZWxldGVTaGFkZXIoc2hhZGVy
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybTNE
T2JqZWN0IHRleHR1cmUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERl
bGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
c3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IpCit7CisgICAgbV9zeW50aGV0aWNFcnJv
cnMuYWRkKGVycm9yKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0NvbnRleHRD
aGFuZ2VkKCkKK3sKKyAgICBtX2xheWVyQ29tcG9zaXRlZCA9IGZhbHNlOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKK3sKKyAgICBtX2xheWVyQ29t
cG9zaXRlZCA9IHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9z
aXRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGVkOworfQorCitFeHRl
bnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkKK3sKKyAgICBpZiAo
IW1fZXh0ZW5zaW9ucykKKyAgICAgICAgbV9leHRlbnNpb25zID0gYWRvcHRQdHIobmV3IEV4dGVu
c2lvbnMzRE9wZW5HTCh0aGlzKSk7CisgICAgcmV0dXJuIG1fZXh0ZW5zaW9ucy5nZXQoKTsKK30K
KworfQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTEVTLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIENoYW5n
U2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNs
dWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciAq
cGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSkKK3sKKyAgICBpbnQgdG90YWxCeXRlcyA9IG1fY3VycmVu
dFdpZHRoICogbV9jdXJyZW50SGVpZ2h0ICogNDsKKyAgICBpZiAocGl4ZWxzU2l6ZSA8IHRvdGFs
Qnl0ZXMpCisgICAgICAgIHJldHVybjsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisg
ICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlh
cykKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKG1f
Ym91bmRGQk8gIT0gbV9mYm8pIHsKKyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsK
KyAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBt
X2Zibyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHTGludCBwYWNrQWxpZ25tZW50ID0gNDsK
KyAgICBib29sIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IGZhbHNlOworICAgIDo6Z2xHZXRJ
bnRlZ2VydihHTF9QQUNLX0FMSUdOTUVOVCwgJnBhY2tBbGlnbm1lbnQpOworICAgIGlmIChwYWNr
QWxpZ25tZW50ID4gNCkgeworICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1F
TlQsIDQpOworICAgICAgICBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSB0cnVlOworICAgIH0K
KworICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWln
aHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7CisgICAgLy8gQ29udmVydCB0
byBCR1JBCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCisgICAg
ICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOworCisgICAgaWYgKG11c3RS
ZXN0b3JlUGFja0FsaWdubWVudCkKKyAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJ
R05NRU5ULCBwYWNrQWxpZ25tZW50KTsKKworICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8p
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhl
aWdodCkKK3sKKyAgICBpZiAoIXBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBt
X2N1cnJlbnRIZWlnaHQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2N1cnJlbnRXaWR0
aCA9IHdpZHRoOworICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKKyAgICAKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKworICAgIEdMdWlu
dCBjb2xvckZvcm1hdCA9IDA7CisgICAgaWYgKG1fYXR0cnMuYWxwaGEpIHsKKyAgICAgICAgbV9p
bnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCQTsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9S
R0JBOworICAgIH0gZWxzZSB7CisgICAgICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JH
QjsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7CisgICAgfQorCisgICAgYm9vbCBtdXN0
UmVzdG9yZUZCTyA9IGZhbHNlOworCisgICAgLy8gcmVzaXplIG11bHRpc2FtcGxlIEZCTworICAg
IGlmIChtX2F0dHJzLmFudGlhbGlhcykKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAK
KyAgICAvLyByZXNpemUgcmVndWxhciBGQk8KKyAgICBpZiAobV9ib3VuZEZCTyAhPSBtX2Zibykg
eworICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgfQorICAgIDo6Z2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIDo6Z2xUZXhJbWFnZTJEKEdM
X1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwg
Y29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgIDo6Z2xGcmFtZWJ1ZmZlclRl
eHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwg
R0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgOjpnbFRleEltYWdlMkQoR0xfVEVY
VFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xv
ckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIDApOworICAgIGlmICghbV9hdHRycy5hbnRpYWxpYXMgJiYgKG1fYXR0cnMuc3Rl
bmNpbCB8fCBtX2F0dHJzLmRlcHRoKSkgeworICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVY
VChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX3N0ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsUmVu
ZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0lOREVY
OCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAg
ICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBH
TF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX3N0ZW5jaWxC
dWZmZXIpOworICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJf
RVhULCBtX2RlcHRoQnVmZmVyKTsKKyAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQo
R0xfUkVOREVSQlVGRkVSX0VYVCwgR0xfREVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQp
OworICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRf
RVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKKyAgICAgICAgOjpnbEJp
bmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7CisgICAgfQorICAgIGlm
IChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKSAhPSBHTF9G
UkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKKyAgICAgICAgLy8gRklYTUU6IGNsZWFudXAKKyAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisKKyAgICBpZiAobV9hdHRycy5hbnRpYWxp
YXMpCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisKKworICAgIC8vIEluaXRpYWxpemUgcmVu
ZGVyYnVmZmVycyB0byAwLgorICAgIEdMZmxvYXQgY2xlYXJDb2xvcltdID0gezAsIDAsIDAsIDB9
LCBjbGVhckRlcHRoID0gMDsKKyAgICBHTGludCBjbGVhclN0ZW5jaWwgPSAwOworICAgIEdMYm9v
bGVhbiBjb2xvck1hc2tbXSA9IHtHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFfSwg
ZGVwdGhNYXNrID0gR0xfVFJVRTsKKyAgICBHTHVpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZmZmZm
OworICAgIEdMYm9vbGVhbiBpc1NjaXNzb3JFbmFibGVkID0gR0xfRkFMU0U7CisgICAgR0xib29s
ZWFuIGlzRGl0aGVyRW5hYmxlZCA9IEdMX0ZBTFNFOworICAgIEdMYml0ZmllbGQgY2xlYXJNYXNr
ID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICA6OmdsR2V0RmxvYXR2KEdMX0NPTE9SX0NMRUFS
X1ZBTFVFLCBjbGVhckNvbG9yKTsKKyAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyAg
ICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09MT1JfV1JJVEVNQVNLLCBjb2xvck1hc2spOworICAgIDo6
Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7CisgICAgaWYg
KG1fYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgOjpnbEdldEZsb2F0dihHTF9ERVBUSF9DTEVBUl9W
QUxVRSwgJmNsZWFyRGVwdGgpOworICAgICAgICA6OmdsQ2xlYXJEZXB0aCgxKTsKKyAgICAgICAg
OjpnbEdldEJvb2xlYW52KEdMX0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7CisgICAgICAg
IDo6Z2xEZXB0aE1hc2soR0xfVFJVRSk7CisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9C
VUZGRVJfQklUOworICAgIH0KKyAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7CisgICAgICAgIDo6
Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFLCAmY2xlYXJTdGVuY2lsKTsKKyAg
ICAgICAgOjpnbENsZWFyU3RlbmNpbCgwKTsKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NU
RU5DSUxfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNrKSk7
CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCAweGZmZmZmZmZmKTsK
KyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAgICB9CisgICAg
aXNTY2lzc29yRW5hYmxlZCA9IDo6Z2xJc0VuYWJsZWQoR0xfU0NJU1NPUl9URVNUKTsKKyAgICA6
OmdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIGlzRGl0aGVyRW5hYmxlZCA9IDo6Z2xJ
c0VuYWJsZWQoR0xfRElUSEVSKTsKKyAgICA6OmdsRGlzYWJsZShHTF9ESVRIRVIpOworCisgICAg
OjpnbENsZWFyKGNsZWFyTWFzayk7CisKKyAgICA6OmdsQ2xlYXJDb2xvcihjbGVhckNvbG9yWzBd
LCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKKyAgICA6Omds
Q29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9y
TWFza1szXSk7CisgICAgaWYgKG1fYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgOjpnbENsZWFyRGVw
dGgoY2xlYXJEZXB0aCk7CisgICAgICAgIDo6Z2xEZXB0aE1hc2soZGVwdGhNYXNrKTsKKyAgICB9
CisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgeworICAgICAgICA6OmdsQ2xlYXJTdGVuY2lsKGNs
ZWFyU3RlbmNpbCk7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCBz
dGVuY2lsTWFzayk7CisgICAgfQorICAgIGlmIChpc1NjaXNzb3JFbmFibGVkKQorICAgICAgICA6
OmdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgZWxzZQorICAgICAgICA6OmdsRGlzYWJs
ZShHTF9TQ0lTU09SX1RFU1QpOworICAgIGlmIChpc0RpdGhlckVuYWJsZWQpCisgICAgICAgIDo6
Z2xFbmFibGUoR0xfRElUSEVSKTsKKyAgICBlbHNlCisgICAgICAgIDo6Z2xEaXNhYmxlKEdMX0RJ
VEhFUik7CisKKyAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKKworICAgIDo6Z2xGbHVz
aCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCit7Cisg
ICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQorICAgICAgICByZXR1cm47CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKQorICAgICAgICBub3RJbXBs
ZW1lbnRlZCgpOworCisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIG1fZmJvKTsKKyAgICA6OmdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7CisgICAgOjpn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgIDo6
Z2xDb3B5VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQs
IDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIDApOworICAgIDo6Z2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2JvdW5kVGV4dHVyZTApOworICAgIDo6Z2xBY3RpdmVU
ZXh0dXJlKG1fYWN0aXZlVGV4dHVyZSk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOworICAgIDo6Z2xGaW5pc2goKTsKKyAgICBtX2xh
eWVyQ29tcG9zaXRlZCA9IHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRG
cmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBmYm87CisgICAgaWYgKGJ1ZmZl
cikKKyAgICAgICAgZmJvID0gYnVmZmVyOworICAgIGVsc2UKKyAgICAgICAgZmJvID0gbV9mYm87
CisKKyAgICBpZiAoZmJvICE9IG1fYm91bmRGQk8pIHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVCh0YXJnZXQsIGZibyk7CisgICAgICAgIG1fYm91bmRGQk8gPSBmYm87CisgICAgfQor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
cikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxp
YXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIAorICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKKyAgICBpZiAobV9hdHRy
cy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3Vi
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwg
R0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICht
X2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCisgICAg
ICAgIG5vdEltcGxlbWVudGVkKCk7CisKKyAgICA6OmdsQ29weVRleFN1YkltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgaWYg
KG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBB
Y3RpdmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTGludCBtYXhVbmlmb3JtU2l6ZSA9IDA7
CisgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVO
R1RILCAmbWF4VW5pZm9ybVNpemUpOworICAgIEdMY2hhciBuYW1lW21heFVuaWZvcm1TaXplXTsg
Ly8gR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9u
CisgICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKKyAgICBHTGludCBzaXplID0gMDsKKyAgICBH
TGVudW0gdHlwZSA9IDA7CisgICAgOjpnbEdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgs
IG1heFVuaWZvcm1TaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKKyAgICBp
ZiAoIW5hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpbmZvLm5hbWUgPSBT
dHJpbmcobmFtZSwgbmFtZUxlbmd0aCk7CisgICAgaW5mby50eXBlID0gdHlwZTsKKyAgICBpbmZv
LnNpemUgPSBzaXplOworCisgICAgLy8gRklYTUUgOiAiWzBdIiBpcyBhZGRlZCBhdCB0aGUgZW5k
IG9mIGluZm8ubmFtZSBpbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZVVuaWZvcm0o
KSAKKyAgICAvLyB3aGVuIGlzR0xFUzJDb21wbGlhbnQgaXMganVzdCBmYWxzZS4gSSBjYW4ndCB1
bmRlcnN0YW5kIHRoZSByZWFzb24uIAorICAgIC8vIEkgYWRkICJbMF0iIGhlcmUgdG8gYXZvaWQg
ZmFsaW5nIHdlYmdsIGNvbmZvcm1hbmNlIHRlc3QoZ2V0LWFjdGl2ZXRlc3QuaHRtbCkKKyAgICAv
LyBidXQgaWYgaXQgbWFrZXMgc29tZXRoaW5nIHdyb25nIGxhdGVyLCByZW1vdmUgZm9sbG93aW5n
IGxpbmVzIAorICAgIGlmIChpbmZvLnNpemUgPiAxICYmICFpbmZvLm5hbWUuZW5kc1dpdGgoIlsw
XSIpKSAKKyAgICAgICAgaW5mby5uYW1lLmFwcGVuZCgiWzBdIik7CisgICAgCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKQoreworICAgIC8vIEZJWE1FOiByZW1v
dmUgdGhlIHR3byBnbEZsdXNoIGNhbGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGku
ZS4sCisgICAgLy8gYWxsIHByZXZpb3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBi
ZWZvcmUgcmVhZGluZyBwaXhlbHMuCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bEZsdXNoKCk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9t
dWx0aXNhbXBsZUZCTykKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKworICAgIDo6Z2xSZWFk
UGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisgICAgaWYg
KG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVu
ZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQodGFyZ2V0LCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKK30KKwor
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3sKKyAgICBpZiAod2lkdGggJiYgaGVpZ2h0ICYmICFw
aXhlbHMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIHJldHVybiB0cnVl
OworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CShyZXZpc2lvbiA5Mjc0NSkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDExLTA4LTA5ICBDaGFuZ1Nlb2sgT2ggIDxzaGl2
YW1pZG93QGdtYWlsLmNvbT4KKworICAgICAgICBbR1RLXSBTdXBwb3J0IEVHTCBiYWNrZW5kIGZv
ciBXZWJHTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTkwNjQKKworICAgICAgICBJbmNsdWRlIEVHTCBsaWJyYXJ5IHRvIGxpbmsgd2hlbiBlZ2wtYmFj
a2VuZCBpcyBjaG9vc2VuIGZvciBXZWJHTC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorCiAyMDExLTA4LTAzICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9y
OiBbVGltZWxpbmVdIEhvdmVyIG9uIHBhaW50IGV2ZW50cyBhbmQgc2VlIHJlY3Qgb3V0bGluZSBh
cm91bmQgdGhhdCBhcmVhLgpJbmRleDogU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9u
IDkyNzQ1KQorKysgU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29w
eSkKQEAgLTg3LDYgKzg3LDcgQEAgbGlid2Via2l0Z3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZF
UlNJTwogCSQod2ViY29yZV9sZGZsYWdzKSBcCiAJJChDQUlST19MSUJTKSBcCiAJJChDT1ZFUkFH
RV9MREZMQUdTKSBcCisJJChFR0xfTElCUykgXAogCSQoRU5DSEFOVF9MSUJTKSBcCiAJJChGUkVF
VFlQRV9MSUJTKSBcCiAJJChHQUlMX0xJQlMpIFwK
</data>
<flag name="review"
          id="99055"
          type_id="1"
          status="-"
          setter="cmarrin"
    />
    <flag name="commit-queue"
          id="99056"
          type_id="3"
          status="-"
          setter="kevin.cs.oh"
    />
          </attachment>
      

    </bug>

</bugzilla>