<?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>78672</bug_id>
          
          <creation_ts>2012-02-15 00:39:23 -0800</creation_ts>
          <short_desc>[Texmap] Move TextureMapperGL to use GraphicsContext3D</short_desc>
          <delta_ts>2012-08-29 21:34:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>92441</dependson>
    
    <dependson>95037</dependson>
    
    <dependson>95069</dependson>
          <blocked>79766</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Helder Correia">helder.correia</assigned_to>
          <cc>adrian.yanes</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gustavo</cc>
    
    <cc>hausmann</cc>
    
    <cc>hw1008.kim</cc>
    
    <cc>joone</cc>
    
    <cc>kevin.cs.oh</cc>
    
    <cc>luiz</cc>
    
    <cc>mifenton</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ossy</cc>
    
    <cc>philn</cc>
    
    <cc>rtakacs</cc>
    
    <cc>skyul</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>556983</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-15 00:39:23 -0800</bug_when>
    <thetext>TextureMapperGL includes direct GL calls, and a lot of the glue that&apos;s already done in GraphicsContext3D. We should consoldiate it to work on top of GC3D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564328</commentid>
    <comment_count>1</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2012-02-24 07:58:36 -0800</bug_when>
    <thetext>Noam, Is there something specific you had in mind or is this a general observation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564389</commentid>
    <comment_count>2</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-24 09:39:58 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Noam, Is there something specific you had in mind or is this a general observation?

I was thinking we should have TextureMapperGC3D, which uses the GC3D functions instead of raw GL.
That&apos;s because GC3D contains a lot of glue that we could reuse instead of doing the same thing inside of TextureMapperGL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565094</commentid>
    <comment_count>3</comment_count>
    <who name="Hyowon Kim">hw1008.kim</who>
    <bug_when>2012-02-25 21:11:53 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; Noam, Is there something specific you had in mind or is this a general observation?
&gt; I was thinking we should have TextureMapperGC3D, which uses the GC3D functions instead of raw GL.
&gt; That&apos;s because GC3D contains a lot of glue that we could reuse instead of doing the same thing inside of TextureMapperGL.

I think this&apos;s a good approach~!
In case of EFL port, direct GL call is not recommended, because Evas provides a structure(Evas_GL) wrapping all GL functions.
I am planning to implement the support of accelerated compositing using TextureMapper in EFL port, 
and TextureMapper using GC3D is important to do that.

Noam~ I would like to reopen bug 73111, and new patches (bug 79452, 62961) were attached for it.
I was wondering if you would consider reviewing my patches about GC3D as well as Texmap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565161</commentid>
    <comment_count>4</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-26 08:45:47 -0800</bug_when>
    <thetext>&gt; I think this&apos;s a good approach~!
&gt; In case of EFL port, direct GL call is not recommended, because Evas provides a structure(Evas_GL) wrapping all GL functions.
&gt; I am planning to implement the support of accelerated compositing using TextureMapper in EFL port, 
&gt; and TextureMapper using GC3D is important to do that.
Cool! I&apos;d be happy to review improvements to TextureMapper. It might be good to start with creating TextureMapperGC3D alongside TextureMapperGL, because we&apos;ll need to add all the glue to Qt before we can completely replace TextureMapperGL.


&gt; 
&gt; Noam~ I would like to reopen bug 73111, and new patches (bug 79452, 62961) were attached for it.
&gt; I was wondering if you would consider reviewing my patches about GC3D as well as Texmap.
Sure thing! Just CC me on bugs you&apos;d like me to review and I&apos;ll try when I can. If I&apos;m not comfortable reviewing something I&apos;d let you know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675184</commentid>
    <comment_count>5</comment_count>
      <attachid>153650</attachid>
    <who name="Helder Correia">helder.correia</who>
    <bug_when>2012-07-20 23:18:00 -0700</bug_when>
    <thetext>Created attachment 153650
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675185</commentid>
    <comment_count>6</comment_count>
    <who name="Helder Correia">helder.correia</who>
    <bug_when>2012-07-20 23:21:01 -0700</bug_when>
    <thetext>@Martin Robinson: I tried to build the GTK port myself and figure out whether this breaks the build and if I could make any necessary changes to adapt to this patch myself. Unfortunately, I had no luck. Could you please have a look at and let me know the answers? Appreciate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675186</commentid>
    <comment_count>7</comment_count>
      <attachid>153650</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-20 23:22:43 -0700</bug_when>
    <thetext>Comment on attachment 153650
Patch

Attachment 153650 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13311530</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675187</commentid>
    <comment_count>8</comment_count>
      <attachid>153650</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-07-20 23:23:38 -0700</bug_when>
    <thetext>Comment on attachment 153650
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:48
&gt; +        precision mediump float;
&gt;          uniform sampler2D s_source;
&gt;          uniform sampler2D s_mask;
&gt; -        uniform lowp float u_opacity;
&gt; -        varying highp vec2 v_sourceTexCoord;
&gt; -        varying highp vec2 v_maskTexCoord;
&gt; +        uniform float u_opacity;
&gt; +        varying vec2 v_sourceTexCoord;
&gt; +        varying vec2 v_maskTexCoord;
&gt;          void main(void)
&gt;          {
&gt; -            lowp vec4 color = texture2D(s_source, v_sourceTexCoord);
&gt; -            lowp vec4 maskColor = texture2D(s_mask, v_maskTexCoord);
&gt; -            lowp float fragmentAlpha = u_opacity * maskColor.a;
&gt; +            vec4 color = texture2D(s_source, v_sourceTexCoord);
&gt; +            vec4 maskColor = texture2D(s_mask, v_maskTexCoord);
&gt; +            float fragmentAlpha = u_opacity * maskColor.a;
&gt;              gl_FragColor = vec4(color.rgb * fragmentAlpha, color.a * fragmentAlpha);

Perhaps it makes sense to change the precision of the uniforms and varyings in another patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675192</commentid>
    <comment_count>9</comment_count>
      <attachid>153653</attachid>
    <who name="Helder Correia">helder.correia</who>
    <bug_when>2012-07-20 23:43:28 -0700</bug_when>
    <thetext>Created attachment 153653
Try fix Qt4 build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675196</commentid>
    <comment_count>10</comment_count>
      <attachid>153653</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-20 23:50:29 -0700</bug_when>
    <thetext>Comment on attachment 153653
Try fix Qt4 build

Attachment 153653 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13304543</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675199</commentid>
    <comment_count>11</comment_count>
      <attachid>153657</attachid>
    <who name="Helder Correia">helder.correia</who>
    <bug_when>2012-07-21 00:03:05 -0700</bug_when>
    <thetext>Created attachment 153657
Try fix Qt4 build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675200</commentid>
    <comment_count>12</comment_count>
      <attachid>153657</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-21 00:06:42 -0700</bug_when>
    <thetext>Comment on attachment 153657
Try fix Qt4 build

Attachment 153657 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13308521</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675247</commentid>
    <comment_count>13</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-21 08:48:57 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 153650 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=153650&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:48
&gt; &gt; +        precision mediump float;
&gt; &gt;          uniform sampler2D s_source;
&gt; &gt;          uniform sampler2D s_mask;
&gt; &gt; -        uniform lowp float u_opacity;
&gt; &gt; -        varying highp vec2 v_sourceTexCoord;
&gt; &gt; -        varying highp vec2 v_maskTexCoord;
&gt; &gt; +        uniform float u_opacity;
&gt; &gt; +        varying vec2 v_sourceTexCoord;
&gt; &gt; +        varying vec2 v_maskTexCoord;
&gt; &gt;          void main(void)
&gt; &gt;          {
&gt; &gt; -            lowp vec4 color = texture2D(s_source, v_sourceTexCoord);
&gt; &gt; -            lowp vec4 maskColor = texture2D(s_mask, v_maskTexCoord);
&gt; &gt; -            lowp float fragmentAlpha = u_opacity * maskColor.a;
&gt; &gt; +            vec4 color = texture2D(s_source, v_sourceTexCoord);
&gt; &gt; +            vec4 maskColor = texture2D(s_mask, v_maskTexCoord);
&gt; &gt; +            float fragmentAlpha = u_opacity * maskColor.a;
&gt; &gt;              gl_FragColor = vec4(color.rgb * fragmentAlpha, color.a * fragmentAlpha);
&gt; 
&gt; Perhaps it makes sense to change the precision of the uniforms and varyings in another patch?

Yes, good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675252</commentid>
    <comment_count>14</comment_count>
      <attachid>153657</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-21 09:23:58 -0700</bug_when>
    <thetext>Comment on attachment 153657
Try fix Qt4 build

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

Thanks for working on this laborious patch!
See comments.

&gt; Source/WebCore/ChangeLog:10
&gt; +        TextureMapperGL (TMGL) includes direct GL calls and
&gt; +        GraphicsContext3D (GC3D) offers many conveniences over the
&gt; +        former approach.  This patch changes the backend of TMGL to

For example, using existing CSS shader code, ANGLE for shader compilation, reusing WebCore::Texture, having shaders and textures that can delete themselves.

&gt; Source/WebCore/ChangeLog:13
&gt; +        TextureMapperGC3D), but in the end it was agreed to consolidate
&gt; +        it inside TMGL instead.

The rationale is that an additional TextureMapper subclass would get stale very fast.

&gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:127
&gt; +        // In this case, we are not setting up WebGL, but rather TextureMapperGL, and want to rely

We might use it for other things than TextureMapperGL.

&gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:376
&gt; +        // In this case, we are not setting up WebGL, but rather TextureMapperGL, hence skip all
&gt; +        // canvas and ANGLE logic.

We shouldn&apos;t skip the ANGLE logic.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:43
&gt; +#if OS(DARWIN)

I think we can move all the OS(DARWIN) stuff under !USE(TEXMAP_OPENGL_ES_2), apart from defining TRANSFER_TYPE to INT_8_8_8...

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:52
&gt; +#if !defined(TEXMAP_OPENGL_ES_2)
&gt; +#define GL_UNPACK_ROW_LENGTH 0x0CF2
&gt; +#define GL_UNPACK_SKIP_PIXELS 0x0CF4
&gt; +#define GL_UNPACK_SKIP_ROWS 0x0CF3
&gt;  #endif

Add a FIXME: Move this to Extensions3D

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:200
&gt; +    m_context3D = GraphicsContext3D::create(attributes, 0, GraphicsContext3D::RenderDirectlyToHostWindow);

Add a /* ... */ comment next to the magical 0

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:201
&gt; +    m_data = new TextureMapperGLData(this);

You don&apos;t really use anything from TextureMapper other than the gc3d... why don&apos;t we just pass that as a parameter?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:287
&gt; +    const GC3Dfloat m4[] = {
&gt;          matrix.m11(), matrix.m12(), matrix.m13(), matrix.m14(),
&gt;          matrix.m21(), matrix.m22(), matrix.m23(), matrix.m24(),
&gt;          matrix.m31(), matrix.m32(), matrix.m33(), matrix.m34(),
&gt;          matrix.m41(), matrix.m42(), matrix.m43(), matrix.m44()
&gt;      };
&gt; -    GL_CMD(glUniformMatrix4fv(shaderProgram-&gt;matrixLocation(), 1, GL_FALSE, m4));
&gt; +    m_context3D-&gt;uniformMatrix4fv(shaderProgram-&gt;matrixLocation(), 1, false, const_cast&lt;GC3Dfloat*&gt;(m4));

Instead of const_cast, why don&apos;t you make the array non-const to beginw ith?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675287</commentid>
    <comment_count>15</comment_count>
      <attachid>153684</attachid>
    <who name="Helder Correia">helder.correia</who>
    <bug_when>2012-07-21 23:38:27 -0700</bug_when>
    <thetext>Created attachment 153684
Fix Qt4, implement comments #8 #14</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675306</commentid>
    <comment_count>16</comment_count>
      <attachid>153684</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-22 07:47:05 -0700</bug_when>
    <thetext>Comment on attachment 153684
Fix Qt4, implement comments #8 #14

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

I&apos;m OK with this, but it probably needs some change to GC3DCairo.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:520
&gt; +            fragmentShaderSource = STRINGIFY(
&gt;                  varying highp vec2 v_texCoord;

precision mediump float.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:553
&gt; +            fragmentShaderSource = STRINGIFY(
&gt;                  varying highp vec2 v_texCoord;

precision mediump float.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676168</commentid>
    <comment_count>17</comment_count>
      <attachid>153896</attachid>
    <who name="Helder Correia">helder.correia</who>
    <bug_when>2012-07-23 16:44:20 -0700</bug_when>
    <thetext>Created attachment 153896
Part 1 - GraphicsContext3DQt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676194</commentid>
    <comment_count>18</comment_count>
      <attachid>153906</attachid>
    <who name="Helder Correia">helder.correia</who>
    <bug_when>2012-07-23 17:05:28 -0700</bug_when>
    <thetext>Created attachment 153906
TextureMapperGL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676201</commentid>
    <comment_count>19</comment_count>
      <attachid>153909</attachid>
    <who name="Helder Correia">helder.correia</who>
    <bug_when>2012-07-23 17:12:29 -0700</bug_when>
    <thetext>Created attachment 153909
GraphicsContext3DQt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676451</commentid>
    <comment_count>20</comment_count>
      <attachid>153909</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-07-24 00:19:05 -0700</bug_when>
    <thetext>Comment on attachment 153909
GraphicsContext3DQt

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

It sounds to me that this isn&apos;t actually RenderDirectToHostWindow, because this isn&apos;t using the HostWindow&apos;s surface or any other property of it. It sounds to me that this is a new RenderStyle, something along the lines of RenderToCurrentContext.

&gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:381
&gt; +    RefPtr&lt;GraphicsContext3D&gt; context = adoptRef(new GraphicsContext3D(attrs, hostWindow, renderDirectlyToHostWindow));

Wouldn&apos;t it be cleaner to write renderStyle == RenderDirectlyToHostWindow instead of implicitly converting GC3D::RenderStyle to bool?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676678</commentid>
    <comment_count>21</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-24 05:10:21 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 153909 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=153909&amp;action=review
&gt; 
&gt; It sounds to me that this isn&apos;t actually RenderDirectToHostWindow, because this isn&apos;t using the HostWindow&apos;s surface or any other property of it. It sounds to me that this is a new RenderStyle, something along the lines of RenderToCurrentContext.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:381
&gt; &gt; +    RefPtr&lt;GraphicsContext3D&gt; context = adoptRef(new GraphicsContext3D(attrs, hostWindow, renderDirectlyToHostWindow));
&gt; 
&gt; Wouldn&apos;t it be cleaner to write renderStyle == RenderDirectlyToHostWindow instead of implicitly converting GC3D::RenderStyle to bool?

I argee, we should add another RenderStyle value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676713</commentid>
    <comment_count>22</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-24 05:52:09 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; (From update of attachment 153909 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=153909&amp;action=review
&gt; &gt; 
&gt; &gt; It sounds to me that this isn&apos;t actually RenderDirectToHostWindow, because this isn&apos;t using the HostWindow&apos;s surface or any other property of it. It sounds to me that this is a new RenderStyle, something along the lines of RenderToCurrentContext.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:381
&gt; &gt; &gt; +    RefPtr&lt;GraphicsContext3D&gt; context = adoptRef(new GraphicsContext3D(attrs, hostWindow, renderDirectlyToHostWindow));
&gt; &gt; 
&gt; &gt; Wouldn&apos;t it be cleaner to write renderStyle == RenderDirectlyToHostWindow instead of implicitly converting GC3D::RenderStyle to bool?
&gt; 
&gt; I argee, we should add another RenderStyle value.

actually, maybe it would be more explicit to have a new function,
static GraphicsContext3D::createWrapperForCurrentGLContext()

Since using the existing function with parameters we don&apos;t use (attributes, hostwindow) can be confusing.

Also, when we are a wrapper to the current GL context, makeContextCurrent should not bind FBO 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676815</commentid>
    <comment_count>23</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-07-24 07:55:39 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; actually, maybe it would be more explicit to have a new function,
&gt; static GraphicsContext3D::createWrapperForCurrentGLContext()
&gt; 
&gt; Since using the existing function with parameters we don&apos;t use (attributes, hostwindow) can be confusing.
&gt; 
&gt; Also, when we are a wrapper to the current GL context, makeContextCurrent should not bind FBO 0.

That&apos;s a great idea :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679058</commentid>
    <comment_count>24</comment_count>
      <attachid>154580</attachid>
    <who name="Helder Correia">helder.correia</who>
    <bug_when>2012-07-26 01:58:25 -0700</bug_when>
    <thetext>Created attachment 154580
GraphicsContext3DQt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679061</commentid>
    <comment_count>25</comment_count>
      <attachid>154582</attachid>
    <who name="Helder Correia">helder.correia</who>
    <bug_when>2012-07-26 02:02:03 -0700</bug_when>
    <thetext>Created attachment 154582
TextureMapperGL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679092</commentid>
    <comment_count>26</comment_count>
      <attachid>154582</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-26 02:41:28 -0700</bug_when>
    <thetext>Comment on attachment 154582
TextureMapperGL

Attachment 154582 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13347689</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679126</commentid>
    <comment_count>27</comment_count>
      <attachid>154582</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-26 03:37:34 -0700</bug_when>
    <thetext>Comment on attachment 154582
TextureMapperGL

Attachment 154582 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13347705</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679330</commentid>
    <comment_count>28</comment_count>
      <attachid>154580</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-07-26 07:51:17 -0700</bug_when>
    <thetext>Comment on attachment 154580
GraphicsContext3DQt

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

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:871
&gt; +    GraphicsContext3D(Attributes, HostWindow*, RenderStyle = RenderOffscreen);
&gt;      GraphicsContext3D(Attributes attrs, HostWindow* hostWindow, bool renderDirectlyToHostWindow);

So the first constructor is implemented in GraphicsContext3DQt.cpp and the second constructor is implemented by all the other ports. Wouldn&apos;t it be nicer to have only one constructor?

&gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:363
&gt; +void GraphicsContext3DPrivate::initializeANGLE()
&gt; +{
&gt; +    ShBuiltInResources ANGLEResources;
&gt; +    ShInitBuiltInResources(&amp;ANGLEResources);
&gt; +
&gt; +    m_context-&gt;getIntegerv(GraphicsContext3D::MAX_VERTEX_ATTRIBS, &amp;ANGLEResources.MaxVertexAttribs);
&gt; +    m_context-&gt;getIntegerv(GraphicsContext3D::MAX_VERTEX_UNIFORM_VECTORS, &amp;ANGLEResources.MaxVertexUniformVectors);
&gt; +    m_context-&gt;getIntegerv(GraphicsContext3D::MAX_VARYING_VECTORS, &amp;ANGLEResources.MaxVaryingVectors);
&gt; +    m_context-&gt;getIntegerv(GraphicsContext3D::MAX_VERTEX_TEXTURE_IMAGE_UNITS, &amp;ANGLEResources.MaxVertexTextureImageUnits);
&gt; +    m_context-&gt;getIntegerv(GraphicsContext3D::MAX_COMBINED_TEXTURE_IMAGE_UNITS, &amp;ANGLEResources.MaxCombinedTextureImageUnits);
&gt; +    m_context-&gt;getIntegerv(GraphicsContext3D::MAX_TEXTURE_IMAGE_UNITS, &amp;ANGLEResources.MaxTextureImageUnits);
&gt; +    m_context-&gt;getIntegerv(GraphicsContext3D::MAX_FRAGMENT_UNIFORM_VECTORS, &amp;ANGLEResources.MaxFragmentUniformVectors);
&gt; +
&gt; +    // Always set to 1 for OpenGL ES.
&gt; +    ANGLEResources.MaxDrawBuffers = 1;
&gt; +    m_context-&gt;m_compiler.setResources(ANGLEResources);
&gt; +}

I wonder why this code isn&apos;t in some file shared between the ports? (I know, that&apos;s not part of your patch, just generally wondering :)

&gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:391
&gt; +PassRefPtr&lt;GraphicsContext3D&gt; GraphicsContext3D::createWrapperForCurrentGLContext()
&gt; +{
&gt; +    RefPtr&lt;GraphicsContext3D&gt; context = adoptRef(new GraphicsContext3D(Attributes(), 0, GraphicsContext3D::RenderToCurrentGLContext));
&gt;      return context-&gt;m_private ? context.release() : 0;
&gt;  }

Doesn&apos;t this function belong into GraphicsContext3D.cpp instead of GraphicsContext3DQt.cpp?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679349</commentid>
    <comment_count>29</comment_count>
      <attachid>154582</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-07-26 08:08:42 -0700</bug_when>
    <thetext>Comment on attachment 154582
TextureMapperGL

Attachment 154582 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/13347809</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679374</commentid>
    <comment_count>30</comment_count>
    <who name="Helder Correia">helder.correia</who>
    <bug_when>2012-07-26 08:47:31 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (From update of attachment 154580 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=154580&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:871
&gt; &gt; +    GraphicsContext3D(Attributes, HostWindow*, RenderStyle = RenderOffscreen);
&gt; &gt;      GraphicsContext3D(Attributes attrs, HostWindow* hostWindow, bool renderDirectlyToHostWindow);
&gt; 
&gt; So the first constructor is implemented in GraphicsContext3DQt.cpp and the second constructor is implemented by all the other ports. Wouldn&apos;t it be nicer to have only one constructor?

Yes, and that&apos;s what I intended to do, but as I&apos;d have to touch a handful of files from all other ports (and make sure I don&apos;t brake it), I&apos;d prefer not to include yet another refactoring in this patch.

&gt; &gt; +
&gt; &gt; +    // Always set to 1 for OpenGL ES.
&gt; &gt; +    ANGLEResources.MaxDrawBuffers = 1;
&gt; &gt; +    m_context-&gt;m_compiler.setResources(ANGLEResources);
&gt; &gt; +}
&gt; 
&gt; I wonder why this code isn&apos;t in some file shared between the ports? (I know, that&apos;s not part of your patch, just generally wondering :)

There is plenty of code in these files that could be shared, waiting for someone to consolidate it (in other patches, as I you said :) I can help with that myself at some point.
 
&gt; &gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:391
&gt; &gt; +PassRefPtr&lt;GraphicsContext3D&gt; GraphicsContext3D::createWrapperForCurrentGLContext()
&gt; &gt; +{
&gt; &gt; +    RefPtr&lt;GraphicsContext3D&gt; context = adoptRef(new GraphicsContext3D(Attributes(), 0, GraphicsContext3D::RenderToCurrentGLContext));
&gt; &gt;      return context-&gt;m_private ? context.release() : 0;
&gt; &gt;  }
&gt; 
&gt; Doesn&apos;t this function belong into GraphicsContext3D.cpp instead of GraphicsContext3DQt.cpp?

Indeed, copy/paste lapse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679402</commentid>
    <comment_count>31</comment_count>
    <who name="Helder Correia">helder.correia</who>
    <bug_when>2012-07-26 09:16:45 -0700</bug_when>
    <thetext>&gt; &gt; &gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:391
&gt; &gt; &gt; +PassRefPtr&lt;GraphicsContext3D&gt; GraphicsContext3D::createWrapperForCurrentGLContext()
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    RefPtr&lt;GraphicsContext3D&gt; context = adoptRef(new GraphicsContext3D(Attributes(), 0, GraphicsContext3D::RenderToCurrentGLContext));
&gt; &gt; &gt;      return context-&gt;m_private ? context.release() : 0;
&gt; &gt; &gt;  }
&gt; &gt; 
&gt; &gt; Doesn&apos;t this function belong into GraphicsContext3D.cpp instead of GraphicsContext3DQt.cpp?
&gt; 
&gt; Indeed, copy/paste lapse.

Actually, it was on purpose, so that the other builds are not broken because of the call to the new constructor they don&apos;t implement. What should I do, go for the refactoring I was trying to avoid in the first place and touch all ports, making them use the new constructor? Wrap with an #if? Leave it like this for this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679434</commentid>
    <comment_count>32</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-26 09:38:12 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:391
&gt; &gt; &gt; &gt; +PassRefPtr&lt;GraphicsContext3D&gt; GraphicsContext3D::createWrapperForCurrentGLContext()
&gt; &gt; &gt; &gt; +{
&gt; &gt; &gt; &gt; +    RefPtr&lt;GraphicsContext3D&gt; context = adoptRef(new GraphicsContext3D(Attributes(), 0, GraphicsContext3D::RenderToCurrentGLContext));
&gt; &gt; &gt; &gt;      return context-&gt;m_private ? context.release() : 0;
&gt; &gt; &gt; &gt;  }
&gt; &gt; &gt; 
&gt; &gt; &gt; Doesn&apos;t this function belong into GraphicsContext3D.cpp instead of GraphicsContext3DQt.cpp?
&gt; &gt; 
&gt; &gt; Indeed, copy/paste lapse.
&gt; 
&gt; Actually, it was on purpose, so that the other builds are not broken because of the call to the new constructor they don&apos;t implement. What should I do, go for the refactoring I was trying to avoid in the first place and touch all ports, making them use the new constructor? Wrap with an #if? Leave it like this for this patch?

It actually belongs in GraphicsContextGLCommon, since ports that don&apos;t use standard GL wouldn&apos;t have a &quot;current GL context&quot;.
i think the best way to go is to change all those constructors from bool to RenderStyle. it doesn&apos;t sound like a huge refactor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679668</commentid>
    <comment_count>33</comment_count>
      <attachid>154725</attachid>
    <who name="Helder Correia">helder.correia</who>
    <bug_when>2012-07-26 12:55:56 -0700</bug_when>
    <thetext>Created attachment 154725
GraphicsContext3DQt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679673</commentid>
    <comment_count>34</comment_count>
      <attachid>154727</attachid>
    <who name="Helder Correia">helder.correia</who>
    <bug_when>2012-07-26 12:57:50 -0700</bug_when>
    <thetext>Created attachment 154727
TextureMapperGL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679877</commentid>
    <comment_count>35</comment_count>
      <attachid>154777</attachid>
    <who name="Helder Correia">helder.correia</who>
    <bug_when>2012-07-26 16:02:00 -0700</bug_when>
    <thetext>Created attachment 154777
RenderToCurrentGLContext/GC3DQt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679895</commentid>
    <comment_count>36</comment_count>
      <attachid>154782</attachid>
    <who name="Helder Correia">helder.correia</who>
    <bug_when>2012-07-26 16:13:17 -0700</bug_when>
    <thetext>Created attachment 154782
texImage2DDirect</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679897</commentid>
    <comment_count>37</comment_count>
      <attachid>154783</attachid>
    <who name="Helder Correia">helder.correia</who>
    <bug_when>2012-07-26 16:15:14 -0700</bug_when>
    <thetext>Created attachment 154783
TextureMapperGL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679907</commentid>
    <comment_count>38</comment_count>
      <attachid>154783</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-26 16:25:03 -0700</bug_when>
    <thetext>Comment on attachment 154783
TextureMapperGL

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

removing the precision identifiers is nice, but should go in a future patch (we don&apos;t even have to do it at all).

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:196
&gt; +    GraphicsContext3D::Attributes attributes;
&gt; +    attributes.antialias = false;
&gt; +    attributes.depth = false;

I don&apos;t think you need these lines

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:408
&gt;      switch (type) {
&gt;      case FilterOperation::GRAYSCALE:
&gt;          fragmentShaderSource = STANDARD_FILTER(
&gt; -            lowp vec4 shade(lowp vec4 color)
&gt; +            vec4 shade(vec4 color)
&gt;              {
&gt; -                lowp float amount = 1.0 - u_amount;
&gt; +                float amount = 1.0 - u_amount;
&gt;                  return vec4((0.2126 + 0.7874 * amount) * color.r + (0.7152 - 0.7152 * amount) * color.g + (0.0722 - 0.0722 * amount) * color.b,
&gt;                              (0.2126 - 0.2126 * amount) * color.r + (0.7152 + 0.2848 * amount) * color.g + (0.0722 - 0.0722 * amount) * color.b,
&gt;                              (0.2126 - 0.2126 * amount) * color.r + (0.7152 - 0.7152 * amount) * color.g + (0.0722 + 0.9278 * amount) * color.b,

I think we decided in a previous comment to leave the removal of the precision identifiers to a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679915</commentid>
    <comment_count>39</comment_count>
      <attachid>154787</attachid>
    <who name="Helder Correia">helder.correia</who>
    <bug_when>2012-07-26 16:46:39 -0700</bug_when>
    <thetext>Created attachment 154787
TextureMapperGL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679918</commentid>
    <comment_count>40</comment_count>
      <attachid>154787</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-26 16:51:09 -0700</bug_when>
    <thetext>Comment on attachment 154787
TextureMapperGL

Great! We have to wait with landing until we implement the new RenderStyle for GraphicsContext3DCairo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679956</commentid>
    <comment_count>41</comment_count>
      <attachid>154777</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-26 17:46:53 -0700</bug_when>
    <thetext>Comment on attachment 154777
RenderToCurrentGLContext/GC3DQt

Attachment 154777 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13372094</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680042</commentid>
    <comment_count>42</comment_count>
      <attachid>154818</attachid>
    <who name="Helder Correia">helder.correia</who>
    <bug_when>2012-07-26 19:55:42 -0700</bug_when>
    <thetext>Created attachment 154818
RenderToCurrentGLContext/GC3DQt - try fix Cr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680044</commentid>
    <comment_count>43</comment_count>
      <attachid>154819</attachid>
    <who name="Helder Correia">helder.correia</who>
    <bug_when>2012-07-26 20:02:49 -0700</bug_when>
    <thetext>Created attachment 154819
Unified patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680146</commentid>
    <comment_count>44</comment_count>
      <attachid>154787</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-26 23:06:45 -0700</bug_when>
    <thetext>Comment on attachment 154787
TextureMapperGL

Attachment 154787 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13373192</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680170</commentid>
    <comment_count>45</comment_count>
      <attachid>154787</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-26 23:44:47 -0700</bug_when>
    <thetext>Comment on attachment 154787
TextureMapperGL

Attachment 154787 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13368261</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680462</commentid>
    <comment_count>46</comment_count>
      <attachid>154777</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-27 05:01:33 -0700</bug_when>
    <thetext>Comment on attachment 154777
RenderToCurrentGLContext/GC3DQt

Cleared Noam Rosenthal&apos;s review+ from obsolete attachment 154777 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693323</commentid>
    <comment_count>47</comment_count>
      <attachid>157911</attachid>
    <who name="Roland Takacs">rtakacs</who>
    <bug_when>2012-08-12 14:57:01 -0700</bug_when>
    <thetext>Created attachment 157911
patch

Must not to call &quot;makeContextCurrent()&quot; when we would like to use functions that wrapped by GraphicsContext3D. Else it does not draw.

&gt; bool GraphicsContext3D::makeContextCurrent()
&gt; {
&gt;    if (!m_private || m_renderStyle == RenderToCurrentGLContext)
&gt;         return false;
&gt;
&gt;    return m_private-&gt;makeCurrentIfNeeded();
&gt; }

m_renderStyle indicates we want to call GC3D functions within WebKit code (like TextureMapper).

When there is no hostWindow (e.g. renderStyle is RenderToCurrentGLContext) must not to release m_surface at the ~GraphicsContext3DPrivate.

&gt; if (renderStyle == GraphicsContext3D::RenderToCurrentGLContext) {
&gt;        m_platformContext = QOpenGLContext::currentContext();  &lt;&lt; QUERY
&gt;        m_surface = m_platformContext-&gt;surface();  &lt;&lt; QUERY
&gt;        return;
&gt; }

You can see if there is not hostWindow m_platformContext and m_surface are not created only queried.
So I inserted a check mechanism to eliminat unwanted release. Else there is a nice sefault :)

&gt; GraphicsContext3DPrivate::~GraphicsContext3DPrivate()
&gt; {
&gt;     if (m_hostWindow) {
&gt;         delete m_surface;
&gt;         m_surface = 0;
&gt;         // Platform context is assumed to be owned by surface.
&gt;         m_platformContext = 0;
&gt;     }
&gt;  }

Who created m_platformContext and m_surface will destroy them. 

Finally I added a new constant to GraphicsContext3D macros that is BGRA. When I updated the patch for now I found GL_BGRA within TextureMapperGL.cpp.
Because it was not defined I defined it :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693842</commentid>
    <comment_count>48</comment_count>
      <attachid>157911</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-13 11:11:05 -0700</bug_when>
    <thetext>Comment on attachment 157911
patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        TextureMapperGL (TMGL) includes direct GL calls and
&gt; +        GraphicsContext3D (GC3D) offers many conveniences over the
&gt; +        former approach: using existing CSS shader code, ANGLE for
&gt; +        shader compilation, reusing WebCore::Texture, having shaders and
&gt; +        textures that can delete themselves.

Maybe better to list these in list form?

- ANGLE for shader compilation
- Reusing WebCore::Texture...

&gt; Source/WebCore/ChangeLog:16
&gt; +        This patch changes the backend of TMGL to GC3D. It was initially
&gt; +        thought to introduce a new backend (say, TextureMapperGC3D), but
&gt; +        in the end it was agreed to consolidate it inside TMGL instead,
&gt; +        as an additional TextureMapper subclass would get stale very
&gt; +        quickly.

Is this history important?

&gt; Source/WebCore/ChangeLog:169
&gt; +
&gt; +2012-08-12  Helder Correia  &lt;helder.correia@nokia.com&gt;
&gt; +
&gt; +        [Texmap] Move TextureMapperGL to use GraphicsContext3D
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=78672
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).

Why does this include other changelog entries?

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:482
&gt; +    static PassRefPtr&lt;GraphicsContext3D&gt; createWrapperForCurrentGLContext();

I would remove Wrapper from the name. createForCurrentGLContext() seems descriptive enough for me given the class name

&gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:214
&gt; +        delete m_surface;
&gt; +        m_surface = 0;

OwnPtr + clear() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693881</commentid>
    <comment_count>49</comment_count>
      <attachid>157911</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-13 11:36:48 -0700</bug_when>
    <thetext>Comment on attachment 157911
patch

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

I have no issues with the actual patch - it&apos;s beginning to look real good. See Kenneth&apos;s comments though :)

&gt;&gt; Source/WebCore/ChangeLog:169
&gt;&gt; +        Reviewed by NOBODY (OOPS!).
&gt; 
&gt; Why does this include other changelog entries?

I think it would be best to squash these to one changelog entry, and to say that it&apos;s based on a previous patch by Helder Correia.

&gt;&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:482
&gt;&gt; +    static PassRefPtr&lt;GraphicsContext3D&gt; createWrapperForCurrentGLContext();
&gt; 
&gt; I would remove Wrapper from the name. createForCurrentGLContext() seems descriptive enough for me given the class name

Either is OK with me, let&apos;s go with what Kenneth is suggesting :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696295</commentid>
    <comment_count>50</comment_count>
      <attachid>158621</attachid>
    <who name="Roland Takacs">rtakacs</who>
    <bug_when>2012-08-15 12:56:30 -0700</bug_when>
    <thetext>Created attachment 158621
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696358</commentid>
    <comment_count>51</comment_count>
      <attachid>158621</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-15 13:57:47 -0700</bug_when>
    <thetext>Comment on attachment 158621
patch

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

&gt; Source/WebCore/ChangeLog:1
&gt; +2012-08-12  Helder Correia  &lt;helder.correia@nokia.com&gt;

Shouldnt this be your name?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696387</commentid>
    <comment_count>52</comment_count>
    <who name="Roland Takacs">rtakacs</who>
    <bug_when>2012-08-15 14:35:05 -0700</bug_when>
    <thetext>(In reply to comment #51)
&gt; (From update of attachment 158621 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=158621&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:1
&gt; &gt; +2012-08-12  Helder Correia  &lt;helder.correia@nokia.com&gt;
&gt; 
&gt; Shouldnt this be your name?

I don&apos;t think so. This patch was created by Helder. All I had to do is find and fix why did not draw webkit the webgl contents.
It is true, I found another issue with this patch in the meantime (segfault when refresh), but the 99% of patch is written by Helder, my 1% is only searching and resolving these issues.

btw I inserted the following row into changelog: 

The patch was originally developed by Helder Correia and finished by Roland Takacs (rtakacs@inf.u-szeged.hu)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701749</commentid>
    <comment_count>53</comment_count>
      <attachid>159896</attachid>
    <who name="Roland Takacs">rtakacs</who>
    <bug_when>2012-08-22 03:55:12 -0700</bug_when>
    <thetext>Created attachment 159896
patch

Tested on GTK. It works!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701879</commentid>
    <comment_count>54</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-22 07:19:55 -0700</bug_when>
    <thetext>(In reply to comment #53)
&gt; Created an attachment (id=159896) [details]
&gt; patch
&gt; 
&gt; Tested on GTK. It works!

Does the leaves demo show the leaves?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701935</commentid>
    <comment_count>55</comment_count>
    <who name="Roland Takacs">rtakacs</who>
    <bug_when>2012-08-22 08:22:37 -0700</bug_when>
    <thetext>(In reply to comment #54)
&gt; (In reply to comment #53)
&gt; &gt; Created an attachment (id=159896) [details] [details]
&gt; &gt; patch
&gt; &gt; 
&gt; &gt; Tested on GTK. It works!
&gt; 
&gt; Does the leaves demo show the leaves?

I don&apos;t know what is the leaves demo

I checked only the following pages:
  
  * https://www.khronos.org/registry/webgl/sdk/demos/google/particles/index.html
  * http://webglsamples.googlecode.com/hg/aquarium/aquarium.html
  * http://alteredqualia.com/three/examples/webgl_pasta.html
  * http://learningwebgl.com/lessons/lesson01/index.html
  * http://learningwebgl.com/lessons/lesson09/index.html
  * http://www.spielzeugz.de/html5/sticky-thing/
  * http://helloracer.com/webgl/

These appear good :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702760</commentid>
    <comment_count>56</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-23 00:25:07 -0700</bug_when>
    <thetext>(In reply to comment #55)
&gt; (In reply to comment #54)
&gt; &gt; (In reply to comment #53)
&gt; &gt; &gt; Created an attachment (id=159896) [details] [details] [details]
&gt; &gt; &gt; patch
&gt; &gt; &gt; 
&gt; &gt; &gt; Tested on GTK. It works!
&gt; &gt; 
&gt; &gt; Does the leaves demo show the leaves?
&gt; 
&gt; I don&apos;t know what is the leaves demo

It&apos;s an accelerated compositing classic :)

http://www.webkit.org/blog-files/leaves/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702823</commentid>
    <comment_count>57</comment_count>
    <who name="Roland Takacs">rtakacs</who>
    <bug_when>2012-08-23 02:16:12 -0700</bug_when>
    <thetext>(In reply to comment #56)
&gt; (In reply to comment #55)
&gt; &gt; (In reply to comment #54)
&gt; &gt; &gt; (In reply to comment #53)
&gt; &gt; &gt; &gt; Created an attachment (id=159896) [details] [details] [details] [details]
&gt; &gt; &gt; &gt; patch
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Tested on GTK. It works!
&gt; &gt; &gt; 
&gt; &gt; &gt; Does the leaves demo show the leaves?
&gt; &gt; 
&gt; &gt; I don&apos;t know what is the leaves demo
&gt; 
&gt; It&apos;s an accelerated compositing classic :)
&gt; 
&gt; http://www.webkit.org/blog-files/leaves/

:) thx

I checked this page with GTKLauncher and the leaves were falling down :)
[of course with this patch]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703081</commentid>
    <comment_count>58</comment_count>
      <attachid>159896</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-23 09:39:17 -0700</bug_when>
    <thetext>Comment on attachment 159896
patch

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

Please land the GC3D changes first, to make sure they don&apos;t break anything (I already reviewed them earlier)
And then we can land the TM changes.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.h:225
&gt; +    TextureMapperShaderManager() { };

Extra ;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704413</commentid>
    <comment_count>59</comment_count>
      <attachid>160499</attachid>
    <who name="Roland Takacs">rtakacs</who>
    <bug_when>2012-08-24 14:06:18 -0700</bug_when>
    <thetext>Created attachment 160499
patch [RenderToCurrentGLContext]

part 1 - I did not find issues with this patch so it works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704446</commentid>
    <comment_count>60</comment_count>
      <attachid>160508</attachid>
    <who name="Roland Takacs">rtakacs</who>
    <bug_when>2012-08-24 15:08:39 -0700</bug_when>
    <thetext>Created attachment 160508
patch [TexImage2DDirect]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704455</commentid>
    <comment_count>61</comment_count>
      <attachid>160511</attachid>
    <who name="Roland Takacs">rtakacs</who>
    <bug_when>2012-08-24 15:22:58 -0700</bug_when>
    <thetext>Created attachment 160511
patch [TexImage2DDirect]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704458</commentid>
    <comment_count>62</comment_count>
      <attachid>160499</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-24 15:29:54 -0700</bug_when>
    <thetext>Comment on attachment 160499
patch [RenderToCurrentGLContext]

Clearing flags on attachment: 160499

Committed r126635: &lt;http://trac.webkit.org/changeset/126635&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704459</commentid>
    <comment_count>63</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-24 15:30:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704585</commentid>
    <comment_count>64</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-24 18:04:03 -0700</bug_when>
    <thetext>Still missing some patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704587</commentid>
    <comment_count>65</comment_count>
      <attachid>160511</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-24 18:11:40 -0700</bug_when>
    <thetext>Comment on attachment 160511
patch [TexImage2DDirect]

Rejecting attachment 160511 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 1

No&apos;am Rosenthal found in /mnt/git/webkit-commit-queue/Source/WebCore/ChangeLog does not appear to be a valid reviewer according to committers.py.
ERROR: /mnt/git/webkit-commit-queue/Source/WebCore/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://queues.webkit.org/results/13592388</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704590</commentid>
    <comment_count>66</comment_count>
      <attachid>160535</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-24 18:14:19 -0700</bug_when>
    <thetext>Created attachment 160535
patch [TexImage2DDirect]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704626</commentid>
    <comment_count>67</comment_count>
      <attachid>160535</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-24 19:25:44 -0700</bug_when>
    <thetext>Comment on attachment 160535
patch [TexImage2DDirect]

Clearing flags on attachment: 160535

Committed r126675: &lt;http://trac.webkit.org/changeset/126675&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704627</commentid>
    <comment_count>68</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-24 19:25:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704676</commentid>
    <comment_count>69</comment_count>
      <attachid>160559</attachid>
    <who name="Roland Takacs">rtakacs</who>
    <bug_when>2012-08-25 03:24:54 -0700</bug_when>
    <thetext>Created attachment 160559
patch [TextureMapperGL]

final part of the big patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704700</commentid>
    <comment_count>70</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-25 09:27:17 -0700</bug_when>
    <thetext>Last patch to go</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704712</commentid>
    <comment_count>71</comment_count>
      <attachid>160559</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-25 11:49:22 -0700</bug_when>
    <thetext>Comment on attachment 160559
patch [TextureMapperGL]

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

&gt; Source/WebCore/ChangeLog:20
&gt; +        This patch changes the backend of TMGL to GC3D. It was initially
&gt; +        thought to introduce a new backend (say, TextureMapperGC3D), but
&gt; +        in the end it was agreed to consolidate it inside TMGL instead,
&gt; +        as an additional TextureMapper subclass would get stale very
&gt; +        quickly.

Please remove this from the Changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704713</commentid>
    <comment_count>72</comment_count>
      <attachid>160567</attachid>
    <who name="Roland Takacs">rtakacs</who>
    <bug_when>2012-08-25 12:10:48 -0700</bug_when>
    <thetext>Created attachment 160567
patch [TextureMapperGL]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704765</commentid>
    <comment_count>73</comment_count>
      <attachid>160567</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-25 18:51:03 -0700</bug_when>
    <thetext>Comment on attachment 160567
patch [TextureMapperGL]

Clearing flags on attachment: 160567

Committed r126694: &lt;http://trac.webkit.org/changeset/126694&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704766</commentid>
    <comment_count>74</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-25 18:51:12 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704877</commentid>
    <comment_count>75</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-08-26 12:41:59 -0700</bug_when>
    <thetext>(In reply to comment #73)
&gt; (From update of attachment 160567 [details])
&gt; Clearing flags on attachment: 160567
&gt; 
&gt; Committed r126694: &lt;http://trac.webkit.org/changeset/126694&gt;

It broke the debug build - https://bugs.webkit.org/show_bug.cgi?id=95037</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705140</commentid>
    <comment_count>76</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-27 03:45:20 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 95069</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706374</commentid>
    <comment_count>77</comment_count>
      <attachid>160989</attachid>
    <who name="Roland Takacs">rtakacs</who>
    <bug_when>2012-08-28 08:26:17 -0700</bug_when>
    <thetext>Created attachment 160989
patch

fixed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706398</commentid>
    <comment_count>78</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-08-28 08:54:38 -0700</bug_when>
    <thetext>(In reply to comment #77)
&gt; Created an attachment (id=160989) [details]
&gt; patch
&gt; 
&gt; fixed patch

Could you describe what was the problem with the previous patch, please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706408</commentid>
    <comment_count>79</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-08-28 09:13:35 -0700</bug_when>
    <thetext>(In reply to comment #78)
&gt; (In reply to comment #77)
&gt; &gt; Created an attachment (id=160989) [details] [details]
&gt; &gt; patch
&gt; &gt; 
&gt; &gt; fixed patch
&gt; 
&gt; Could you describe what was the problem with the previous patch, please?

Here is the diff (---: rolled out patch    +++: new patch):
------------------------------------------------------------
--- a/Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp
+++ b/Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp
-+    context3D-&gt;texImage2DDirect(GraphicsContext3D::TEXTURE_2D, 0, format, m_textureSize.width(), m_textureSize.height(), 0, format, DEFAULT_TEXTURE_PIXEL_TRANSFER_TYPE, 0);
++    context3D-&gt;texImage2DDirect(GraphicsContext3D::TEXTURE_2D, 0, GraphicsContext3D::RGBA, m_textureSize.width(), m_textureSize.height(), 0, format, DEFAULT_TEXTURE_PIXEL_TRANSFER_TYPE, 0);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706429</commentid>
    <comment_count>80</comment_count>
    <who name="Roland Takacs">rtakacs</who>
    <bug_when>2012-08-28 09:43:26 -0700</bug_when>
    <thetext>(In reply to comment #79)
&gt; (In reply to comment #78)
&gt; &gt; (In reply to comment #77)
&gt; &gt; &gt; Created an attachment (id=160989) [details] [details] [details]
&gt; &gt; &gt; patch
&gt; &gt; &gt; 
&gt; &gt; &gt; fixed patch
&gt; &gt; 
&gt; &gt; Could you describe what was the problem with the previous patch, please?
&gt; 
&gt; Here is the diff (---: rolled out patch    +++: new patch):
&gt; ------------------------------------------------------------
&gt; --- a/Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp
&gt; +++ b/Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp
&gt; -+    context3D-&gt;texImage2DDirect(GraphicsContext3D::TEXTURE_2D, 0, format, m_textureSize.width(), m_textureSize.height(), 0, format, DEFAULT_TEXTURE_PIXEL_TRANSFER_TYPE, 0);
&gt; ++    context3D-&gt;texImage2DDirect(GraphicsContext3D::TEXTURE_2D, 0, GraphicsContext3D::RGBA, m_textureSize.width(), m_textureSize.height(), 0, format, DEFAULT_TEXTURE_PIXEL_TRANSFER_TYPE, 0);

sure, this change resolves the problem that happened on wk2 :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707149</commentid>
    <comment_count>81</comment_count>
      <attachid>160989</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-08-28 23:54:42 -0700</bug_when>
    <thetext>Comment on attachment 160989
patch

This patch leaves GTK+ accelerated compositing in a broken state, since Cairo GraphicsContext3D does not support conjuring a context from the current context. I&apos;ll try to add this to the patch tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707788</commentid>
    <comment_count>82</comment_count>
      <attachid>160989</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-08-29 13:18:59 -0700</bug_when>
    <thetext>Comment on attachment 160989
patch

With the patch posted at bug 92441, this patch works again. I&apos;m restoring the review flag, though this should probably land after 92441 is closed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707824</commentid>
    <comment_count>83</comment_count>
      <attachid>160989</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-29 13:47:02 -0700</bug_when>
    <thetext>Comment on attachment 160989
patch

It&apos;s already r+ed, waiting for the other patch to land before landing this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708001</commentid>
    <comment_count>84</comment_count>
      <attachid>160989</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-29 16:12:22 -0700</bug_when>
    <thetext>Comment on attachment 160989
patch

Clearing flags on attachment: 160989

Committed r127063: &lt;http://trac.webkit.org/changeset/127063&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708002</commentid>
    <comment_count>85</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-29 16:12:33 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708282</commentid>
    <comment_count>86</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-08-29 21:34:20 -0700</bug_when>
    <thetext>(In reply to comment #84)
&gt; (From update of attachment 160989 [details])
&gt; Clearing flags on attachment: 160989
&gt; 
&gt; Committed r127063: &lt;http://trac.webkit.org/changeset/127063&gt;

And I landed Simon&apos;s debug buildfix again - https://trac.webkit.org/changeset/127096 (It should have been integrated to the 2nd patch.)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153650</attachid>
            <date>2012-07-20 23:18:00 -0700</date>
            <delta_ts>2012-07-20 23:43:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78672-20120720231755.patch</filename>
            <type>text/plain</type>
            <size>108719</size>
            <attacher name="Helder Correia">helder.correia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODgyNmYzMjk2YTVjZmNj
MTYyZDY1NGE1OTFjOGQ2NmIzNDRkMjIxNy4uODk1NzdkNDk0ZDA4MjY2MGViNjNlYWJhMjNiZjdl
ZjI0Nzc5ZTZlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NiBAQAorMjAxMi0wNy0yMCAgSGVs
ZGVyIENvcnJlaWEgIDxoZWxkZXIuY29ycmVpYUBub2tpYS5jb20+CisKKyAgICAgICAgW1RleG1h
cF0gTW92ZSBUZXh0dXJlTWFwcGVyR0wgdG8gdXNlIEdyYXBoaWNzQ29udGV4dDNECisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODY3MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRleHR1cmVNYXBwZXJHTCAo
VE1HTCkgaW5jbHVkZXMgZGlyZWN0IEdMIGNhbGxzIGFuZAorICAgICAgICBHcmFwaGljc0NvbnRl
eHQzRCAoR0MzRCkgb2ZmZXJzIG1hbnkgY29udmVuaWVuY2VzIG92ZXIgdGhlCisgICAgICAgIGZv
cm1lciBhcHByb2FjaC4gIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGUgYmFja2VuZCBvZiBUTUdMIHRv
CisgICAgICAgIEdDM0QuIEl0IHdhcyBpbml0aWFsbHkgdGhvdWdodCB0byBpbnRyb2R1Y2UgYSBu
ZXcgYmFja2VuZCAoc2F5LAorICAgICAgICBUZXh0dXJlTWFwcGVyR0MzRCksIGJ1dCBpbiB0aGUg
ZW5kIGl0IHdhcyBhZ3JlZWQgdG8gY29uc29saWRhdGUKKyAgICAgICAgaXQgaW5zaWRlIFRNR0wg
aW5zdGVhZC4KKworICAgICAgICBBIEdDM0Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgVE1HTCB3aXRo
IHRoZQorICAgICAgICBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyBmbGFnLiBBZGRpdGlvbmFs
IGxvZ2ljIHdhcyBpbnRyb2R1Y2VkCisgICAgICAgIHRvIFF0J3MgR0MzRCBpbiBvcmRlciB0byBo
YW5kbGUgdGhpcyBzaXR1YXRpb24gYW5kIG1ha2UgaXQgdXNlCisgICAgICAgIHRoZSBjdXJyZW50
IGNvbnRleHQuCisKKyAgICAgICAgVE1HTCdzIGRlcGVuZGVuY3kgb24gT3BlbkdMU2hpbXMuaCB3
YXMgY29tcGxldGVseSByZW1vdmVkLgorICAgICAgICBIb3dldmVyLCBHQzNEIGRvZXMgbm90IG1h
cCBldmVyeSBzaW5nbGUgR0wgY29uc3RhbnQuIFRodXMsIGl0J3MKKyAgICAgICAgaW1wb3J0YW50
IHRvIGRvY3VtZW50IHRoZSBmb2xsb3dpbmcgbm90ZXM6CisgICAgICAgICAgICAtIEdMX0ZBTFNF
IHdhcyBtYXBwZWQgdG8gZmFsc2UuCisgICAgICAgICAgICAtIEdMX1VOUEFDS19ST1dfTEVOR1RI
LCBHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsCisgICAgICAgICAgICBHTF9VTlBBQ0tfU0tJUF9ST1dT
LCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIGFuZAorICAgICAgICAgICAgR0xfVU5TSUdORURf
SU5UXzhfOF84XzhfUkVWIHdlcmUgbG9jYWxseSBkZWZpbmVkIGluIFRNR0wuCisKKyAgICAgICAg
QSBuZXcgR0MzRDo6dGV4SW1hZ2UyRERpcmVjdCgpIGZ1bmN0aW9uIHdhcyBpbnRyb2R1Y2VkIHRv
IGFsbG93CisgICAgICAgIGluaXRpYWxpemF0aW9uIG9mIHRleHR1cmVzIHdpdGhvdXQgYWxsb2Nh
dGlvbi4gVGhlIGV4aXN0aW5nCisgICAgICAgIHRleHRJbWFnZTJEKCkgcmVmdXNlcyBhIG51bGwg
cGl4ZWwgYnVmZmVyLCBhbmQKKyAgICAgICAgdGV4SW1hZ2UyRFJlc291cmNlU2FmZSgpIGFsbG93
cyBpdCBidXQgcGVyZm9ybXMgbWVtb3J5CisgICAgICAgIGFsbG9jYXRpb24gYW5kIHplcm9lcyB0
aGUgYml0cy4gVGhpcyB3YXMgbm90IGZhc3QgZW5vdWdoIGZvcgorICAgICAgICBCaXRtYXBUZXh0
dXJlR0wgZnJlcXVlbnQgc2V0dGluZyB1cC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMg
aXMgYSByZWZhY3RvcmluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmg6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkREaXJlY3Qp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNz
Q29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdMLmNwcDoKKyAgICAgICAgKFNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRHTERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpTaGFy
ZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6c2hhcmVk
R0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OlRleHR1cmVN
YXBwZXJHTERhdGEpOgorICAgICAgICAoVGV4dHVyZU1hcHBlckdMRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpzY2lzc29yQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6
OkNsaXBTdGFjazo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0
YTo6aW5pdGlhbGl6ZVN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjpUZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpi
ZWdpblBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZW5kUGFp
bnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJl
UmVjdGFuZ2xlQVJCKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1Rl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6dmlld3BvcnRNYXRyaXgpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dy
YW0pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpkaWRSZXNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0ZpbHRlcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFRleHR1cmVHTDo6aW5pdGlhbGl6ZVN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwVGV4dHVyZUdMOjpjbGVhcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFRleHR1cmVHTDo6Y3JlYXRlRmJvSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwVGV4dHVyZUdMOjpiaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6
fkJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJp
bmREZWZhdWx0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJl
Z2luU2Npc3NvckNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdp
bkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjplbmRDbGlwKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpncmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChU
ZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoQ2xpcFN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFRleHR1cmVHTDo6dGV4dHVyZVRhcmdldCk6CisgICAgICAgIChCaXRtYXBUZXh0dXJl
R0wpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpCaXRtYXBUZXh0dXJlR0wp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aW5pdGlh
bGl6ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNpbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNvbGlkQ29sb3I6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1BbnRpYWxpYXNpbmdOb01hc2spOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6flN0YW5kYXJkRmlsdGVyUHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dyYW06OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlckZvckZp
bHRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbTo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
OnZlcnRleEF0dHJpYik6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6bWF0cml4TG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmZsaXBM
b2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6
dGV4dHVyZVNpemVMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6c291cmNlVGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjptYXNrVGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpvcGFjaXR5TG9jYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlm
b3JtTG9jYXRpb24pOgorICAgICAgICAoU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6dmVydGV4QXR0cmliKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6dGV4Q29vcmRBdHRyaWIpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp0ZXh0dXJlVW5pZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6Y3JlYXRlKToK
KyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3JlYXRlKToKKyAg
ICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpjcmVhdGUp
OgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5k
TWFzazo6Y3JlYXRlKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9w
YWNpdHlBbmRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU29saWRDb2xvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU29saWRDb2xvcjo6Y29sb3JMb2NhdGlvbik6CisgICAgICAgIChUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6
ZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb29yZGluYXRlc0xvY2F0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNr
OjpleHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbik6CisgICAgICAgIChUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIpOgorCiAyMDEyLTA3LTIw
ICBEYXZpZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbmRleGVk
REI6IEluY2x1ZGUgaW50VmVyc2lvbiB3aGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBXZWJDb3JlIGFu
ZCBXZWJLaXQgSURCTWV0YWRhdGEgdHlwZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDc0MzNkZjYyNmY0Y2FiMmFj
YzZjYTA5OGE2MjgwZDQ4ZDQ5YTJiMTkuLjdiY2Q4YTE3NTlkYzY2YmQ4MDE1ZDU0Y2RlNWVjNDlj
YTUyNTlkYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaApAQCAtNTI5LDYgKzUyOSw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IHByZXBhcmVUZXh0dXJlKCk7CiAjZW5kaWYKIAorICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRl
eEltYWdlMkQoKS4gQWxsb3dzIHBpeGVscz09MCB3aXRoIG5vIGFsbG9jYXRpb24uCisgICAgdm9p
ZCB0ZXhJbWFnZTJERGlyZWN0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCog
cGl4ZWxzKTsKKwogICAgIC8vIEhlbHBlciB0byB0ZXhJbWFnZTJEIHdpdGggcGl4ZWw9PTAgY2Fz
ZTogcGl4ZWxzIGFyZSBpbml0aWFsaXplZCB0byAwLgogICAgIC8vIFJldHVybiB0cnVlIGlmIG5v
IEdMIGVycm9yIGlzIHN5bnRoZXNpemVkLgogICAgIC8vIEJ5IGRlZmF1bHQsIGFsaWdubWVudCBp
cyA0LCB0aGUgT3BlbkdMIGRlZmF1bHQgc2V0dGluZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0wuY3BwCmluZGV4IGZkNDUwMTQxYzc0ZGRhM2I0OWU4OTU3ODU5Y2JhMmI5MGE4Mzdm
NTIuLjk4ZTExNDViM2RiMjRlNTFkN2I3NWZkMDY3MDhmZmFlMjU2YWViMTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcApAQCAtMjU2LDcgKzI1Niw3IEBAIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworCiAgICAgR0MzRGVudW0gb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBpbnRlcm5hbGZvcm1hdDsK
ICAgICBpZiAodHlwZSA9PSBHTF9GTE9BVCkgewogICAgICAgICBpZiAoZm9ybWF0ID09IEdMX1JH
QkEpCkBAIC0yNjUsNyArMjY1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICAgICAg
ICAgIG9wZW5HTEludGVybmFsRm9ybWF0ID0gR0xfUkdCMzJGX0FSQjsKICAgICB9CiAKLSAgICA6
OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBvcGVuR0xJbnRlcm5hbEZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgdGV4SW1hZ2UyRERp
cmVjdCh0YXJnZXQsIGxldmVsLCBvcGVuR0xJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCmluZGV4IGE0ZDFl
YjRjZDkzYzQ3NjMzNmMwMmY2MTNiZmM2NTk0NGQyODZjYjguLjhhMjZhZWNlYmM4MDg4ODc2ODk5
MjgyNTA0OGY3NDVjYmY5NmZlMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMQ29tbW9uLmNwcApAQCAtMTM4Miw2ICsxMzgyLDEyIEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGF5ZXJDb21wb3Np
dGVkOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJERGlyZWN0KEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKK30K
KwogfQogCiAjZW5kaWYgLy8gVVNFKDNEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMRVMuY3BwCmluZGV4IDc5ZGRjYmJmZDlhNGI1NWVjODI2ZTQxYjU5NWVlZjg0
ZTY0ZDlkMDMuLjUyODFlY2ZjM2U0ZWNmYjk3YzA3MzM4OTlkNzQ0ZmY1Y2EwOWYyNmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTEVTLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpZiBVU0UoM0RfR1JBUEhJQ1MpCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgor
CiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMRVMuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAjaW5jbHVkZSAiSW50U2l6ZS5oIgpAQCAtMjMwLDggKzIzMSw4IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKworICAgIHRleEltYWdlMkREaXJl
Y3QodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dDNEUXQuY3BwCmluZGV4IDg5NWY3NjY4ODAzOWU4MWYyZjcwYmZhZDgwMDVmMDc3YmRlNTFkMTgu
Ljk3YTAyMDU5ZDlmMjU0YzAxZGZkYTIzNGQyMmU0ZmJhNDlhNDFmNzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dDNEUXQuY3BwCkBAIC02Myw3ICs2Myw3IEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZQogI2VuZGlmCiB7CiBwdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBo
aWNzQ29udGV4dDNEKiwgSG9zdFdpbmRvdyopOworICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZShHcmFwaGljc0NvbnRleHQzRCosIEhvc3RXaW5kb3cqLCBib29sIHJlbmRlckRpcmVjdGx5VG9I
b3N0V2luZG93KTsKICAgICB+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCk7CiAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKIH0KICNlbmRpZgogCi1HcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK0dyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2lu
ZG93KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2hvc3RXaW5kb3coaG9zdFdp
bmRvdykKICAgICAsIG1fc3VyZmFjZSgwKQpAQCAtMTIzLDYgKzEyMywxNCBAQCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgSAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKHJlbmRlckRp
cmVjdGx5VG9Ib3N0V2luZG93KSB7CisgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgYXJlIG5v
dCBzZXR0aW5nIHVwIFdlYkdMLCBidXQgcmF0aGVyIFRleHR1cmVNYXBwZXJHTCwgYW5kIHdhbnQg
dG8gcmVseQorICAgICAgICAvLyBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybSBjb250ZXh0LgorICAg
ICAgICBtX3BsYXRmb3JtQ29udGV4dCA9IFFPcGVuR0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgp
OworICAgICAgICBtX3N1cmZhY2UgPSBtX3BsYXRmb3JtQ29udGV4dC0+c3VyZmFjZSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiAgICAgLy8g
RklYTUU6IEZpbmQgYSB3YXkgdG8gY3JlYXRlIGEgUU9wZW5HTENvbnRleHQgd2l0aG91dCBjcmVh
dGluZyBhIFFXaW5kb3cgYXQgYWxsLgogICAgIC8vIFdlIG5lZWQgdG8gY3JlYXRlIGEgc3VyZmFj
ZSBpbiBvcmRlciB0byBjcmVhdGUgYSBRT3BlbkdMQ29udGV4dCBhbmQgbWFrZSBpdCBjdXJyZW50
LgpAQCAtMzExLDE0ICszMTksMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNy
ZWF0ZUdyYXBoaWNzU3VyZmFjZXMoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIAogUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShHcmFwaGljc0NvbnRl
eHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3ND
b250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogewotICAgIC8vIFRoaXMgaW1wbGVt
ZW50YXRpb24gZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCByZW5kZXJpbmcgZGlyZWN0bHkgdG8g
dGhlIEhvc3RXaW5kb3cuCi0gICAgaWYgKHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVjdGx5VG9I
b3N0V2luZG93KQotICAgICAgICByZXR1cm4gMDsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RX
aW5kb3csIGZhbHNlKSk7CisgICAgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyA9IChy
ZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNE
KGF0dHJzLCBob3N0V2luZG93LCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykpOwogICAgIHJl
dHVybiBjb250ZXh0LT5tX3ByaXZhdGUgPyBjb250ZXh0LnJlbGVhc2UoKSA6IDA7CiB9CiAKLUdy
YXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0
cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCkKK0dyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdp
bmRvdykKICAgICA6IG1fY3VycmVudFdpZHRoKDApCiAgICAgLCBtX2N1cnJlbnRIZWlnaHQoMCkK
ICAgICAsIG1fY29tcGlsZXIoaXNHTEVTMkNvbXBsaWFudCgpID8gU0hfRVNTTF9PVVRQVVQgOiBT
SF9HTFNMX09VVFBVVCkKQEAgLTMzOSw3ICszNDUsNyBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3Jh
cGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RX
aQogICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3Rl
bmNpbEJ1ZmZlcigwKQogICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCi0gICAgLCBt
X3ByaXZhdGUoYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSh0aGlzLCBob3N0
V2luZG93KSkpCisgICAgLCBtX3ByaXZhdGUoYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZSh0aGlzLCBob3N0V2luZG93LCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykpKQog
ewogICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwogCkBAIC0zNjAsNiArMzY2LDExIEBAIEdyYXBo
aWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBhdHRycywgSG9zdFdpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAocmVu
ZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCisgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgYXJl
IG5vdCBzZXR0aW5nIHVwIFdlYkdMLCBidXQgcmF0aGVyIFRleHR1cmVNYXBwZXJHTCwgaGVuY2Ug
c2tpcCBhbGwKKyAgICAgICAgLy8gY2FudmFzIGFuZCBBTkdMRSBsb2dpYy4KKyAgICAgICAgcmV0
dXJuOworCiAgICAgLy8gQ3JlYXRlIGJ1ZmZlcnMgZm9yIHRoZSBjYW52YXMgRkJPLgogICAgIGds
R2VuRnJhbWVidWZmZXJzKC8qIGNvdW50ICovIDEsICZtX2Zibyk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5jcHAKaW5kZXggNjg4ZTI2ZjRlODlmZmYxM2RlNWIzZDU3OWM4MjBhOTM1ZWY5MTcyYy4uNWQ1
ZjdmNDFiZjVmZmJiZjBiYWNmODM2ODY1ZGUwOGZiOWZmMTkzMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5jcHAKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKIAog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgiCkBAIC0zOSw5MSArMzgsNDQgQEAK
IAogI2lmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlUXQuaCIKLSNpZiBIQVZF
KFFUNSkKLSNpbmNsdWRlIDxRT3BlbkdMQ29udGV4dD4KLSNlbHNlCi0jaW5jbHVkZSA8UUdMQ29u
dGV4dD4KLSNlbmRpZiAvLyBRVF9WRVJTSU9OCi0jZWxpZiBPUyhXSU5ET1dTKQotI2luY2x1ZGUg
PHdpbmRvd3MuaD4KLSNlbGlmIE9TKE1BQ19PU19YKQotI2luY2x1ZGUgPEFHTC9hZ2wuaD4KLSNl
bGlmIGRlZmluZWQoWFBfVU5JWCkKLSNpbmNsdWRlIDxHTC9nbHguaD4KICNlbmRpZgogCi0jZGVm
aW5lIEdMX0NNRCguLi4pIGRvIHsgX19WQV9BUkdTX187IEFTU0VSVF9BUkcoX19WQV9BUkdTX18s
ICFnbEdldEVycm9yKCkpOyB9IHdoaWxlICgwKQotbmFtZXNwYWNlIFdlYkNvcmUgewotc3RydWN0
IFRleHR1cmVNYXBwZXJHTERhdGEgewotICAgIHN0cnVjdCBTaGFyZWRHTERhdGEgOiBwdWJsaWMg
UmVmQ291bnRlZDxTaGFyZWRHTERhdGE+IHsKLSNpZiBQTEFURk9STShRVCkKLSNpZiBRVF9WRVJT
SU9OID49IDB4MDUwMDAwCi0gICAgICAgIHR5cGVkZWYgUU9wZW5HTENvbnRleHQqIEdMQ29udGV4
dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIFFPcGVuR0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgp
OwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICB0eXBlZGVmIGNvbnN0IFFHTENvbnRleHQqIEdM
Q29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFFHTENvbnRleHQ6OmN1cnJlbnRDb250ZXh0
KCk7Ci0gICAgICAgIH0KKyNpZiBPUyhEQVJXSU4pCisjZGVmaW5lIEdMX1RFWFRVUkVfUkVDVEFO
R0xFX0FSQiAweDg0RjUKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWIDB4ODM2
NwogI2VuZGlmCi0jZWxpZiBPUyhXSU5ET1dTKQotICAgICAgICB0eXBlZGVmIEhHTFJDIEdMQ29u
dGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHdnbEdldEN1cnJlbnRDb250ZXh0KCk7Ci0gICAg
ICAgIH0KLSNlbGlmIE9TKE1BQ19PU19YKQotICAgICAgICB0eXBlZGVmIEFHTENvbnRleHQgR0xD
b250ZXh0OwotICAgICAgICBzdGF0aWMgR0xDb250ZXh0IGdldEN1cnJlbnRHTENvbnRleHQoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWdsR2V0Q3VycmVudENvbnRleHQoKTsKLSAg
ICAgICAgfQotI2VsaWYgZGVmaW5lZChYUF9VTklYKQotICAgICAgICB0eXBlZGVmIEdMWENvbnRl
eHQgR0xDb250ZXh0OwotICAgICAgICBzdGF0aWMgR0xDb250ZXh0IGdldEN1cnJlbnRHTENvbnRl
eHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2xYR2V0Q3VycmVudENvbnRleHQo
KTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBm
b3IgdW5rbm93biBvcGVuZ2wuCi0gICAgICAgIC8vIFJldHVybnMgYWx3YXlzIGluY3JlYXNpbmcg
bnVtYmVyIGFuZCBkaXNhYmxlcyBHTCBjb250ZXh0IGRhdGEgc2hhcmluZy4KLSAgICAgICAgdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgR0xDb250ZXh0OwotICAgICAgICBzdGF0aWMgR0xDb250ZXh0IGdl
dEN1cnJlbnRHTENvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0aWMgR0xDb250
ZXh0IGR1bW15Q29udGV4dENvdW50ZXIgPSAwOwotICAgICAgICAgICAgcmV0dXJuICsrZHVtbXlD
b250ZXh0Q291bnRlcjsKLSAgICAgICAgfQogCisjaWYgIWRlZmluZWQoVEVYTUFQX09QRU5HTF9F
U18yKQorI2RlZmluZSBHTF9VTlBBQ0tfUk9XX0xFTkdUSCAweDBDRjIKKyNkZWZpbmUgR0xfVU5Q
QUNLX1NLSVBfUElYRUxTIDB4MENGNAorI2RlZmluZSBHTF9VTlBBQ0tfU0tJUF9ST1dTIDB4MENG
MwogI2VuZGlmCiAKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEdMQ29udGV4dCwgU2hhcmVkR0xE
YXRhKj4gR0xDb250ZXh0RGF0YU1hcDsKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBUZXh0
dXJlTWFwcGVyR0xEYXRhIHsKKyAgICBzdHJ1Y3QgU2hhcmVkR0xEYXRhIDogcHVibGljIFJlZkNv
dW50ZWQ8U2hhcmVkR0xEYXRhPiB7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dDNELCBTaGFyZWRHTERhdGEqPiBHTENvbnRleHREYXRhTWFwOwogICAgICAg
ICBzdGF0aWMgR0xDb250ZXh0RGF0YU1hcCYgZ2xDb250ZXh0RGF0YU1hcCgpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHN0YXRpYyBHTENvbnRleHREYXRhTWFwIG1hcDsKICAgICAgICAgICAgIHJl
dHVybiBtYXA7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRH
TERhdGE+IGN1cnJlbnRTaGFyZWRHTERhdGEoKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
aGFyZWRHTERhdGE+IGN1cnJlbnRTaGFyZWRHTERhdGEoVGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJl
TWFwcGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBHTENvbnRleHQgY3VycmVudEdMQ29uZXh0
ID0gZ2V0Q3VycmVudEdMQ29udGV4dCgpOwotICAgICAgICAgICAgR0xDb250ZXh0RGF0YU1hcDo6
aXRlcmF0b3IgaXQgPSBnbENvbnRleHREYXRhTWFwKCkuZmluZChjdXJyZW50R0xDb25leHQpOwor
ICAgICAgICAgICAgR0xDb250ZXh0RGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBnbENvbnRleHREYXRh
TWFwKCkuZmluZCh0ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpLT5wbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dDNEKCkpOwogICAgICAgICAgICAgaWYgKGl0ICE9IGdsQ29udGV4dERhdGFN
YXAoKS5lbmQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKIAotICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRHTERhdGEoZ2V0Q3VycmVudEdMQ29udGV4
dCgpKSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZEdMRGF0YSh0ZXh0
dXJlTWFwcGVyKSk7CiAgICAgICAgIH0KIAotCi0KICAgICAgICAgVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIgdGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI7CiAKLSAgICAgICAgU2hhcmVkR0xE
YXRhKEdMQ29udGV4dCBnbENvbnRleHQpCisgICAgICAgIFNoYXJlZEdMRGF0YShUZXh0dXJlTWFw
cGVyR0wqIHRleHR1cmVNYXBwZXIpCisgICAgICAgICAgICA6IHRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyKHRleHR1cmVNYXBwZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsQ29udGV4dERh
dGFNYXAoKS5hZGQoZ2xDb250ZXh0LCB0aGlzKTsKKyAgICAgICAgICAgIGdsQ29udGV4dERhdGFN
YXAoKS5hZGQodGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+cGxhdGZvcm1HcmFw
aGljc0NvbnRleHQzRCgpLCB0aGlzKTsKICAgICAgICAgfQogCiAgICAgICAgIH5TaGFyZWRHTERh
dGEoKQpAQCAtMTQyLDMwICs5NCwzMiBAQCBzdHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAK
ICAgICBTaGFyZWRHTERhdGEmIHNoYXJlZEdMRGF0YSgpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gKihtX3NoYXJlZEdMRGF0YS5nZXQoKSk7CisgICAgICAgIHJldHVybiAqbV9zaGFyZWRH
TERhdGE7CiAgICAgfQogCiAgICAgdm9pZCBpbml0aWFsaXplU3RlbmNpbCgpOwogCi0gICAgVGV4
dHVyZU1hcHBlckdMRGF0YSgpCi0gICAgICAgIDogUGFpbnRGbGFncygwKQorICAgIFRleHR1cmVN
YXBwZXJHTERhdGEoVGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVyKQorICAgICAgICA6IHRl
eHR1cmVNYXBwZXIodGV4dHVyZU1hcHBlcikKKyAgICAgICAgLCBQYWludEZsYWdzKDApCiAgICAg
ICAgICwgcHJldmlvdXNQcm9ncmFtKDApCiAgICAgICAgICwgdGFyZ2V0RnJhbWVCdWZmZXIoMCkK
ICAgICAgICAgLCBkaWRNb2RpZnlTdGVuY2lsKGZhbHNlKQogICAgICAgICAsIHByZXZpb3VzU2Np
c3NvclN0YXRlKDApCiAgICAgICAgICwgcHJldmlvdXNEZXB0aFN0YXRlKDApCi0gICAgICAgICwg
bV9zaGFyZWRHTERhdGEoVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpjdXJyZW50
U2hhcmVkR0xEYXRhKCkpCisgICAgICAgICwgbV9zaGFyZWRHTERhdGEoVGV4dHVyZU1hcHBlckdM
RGF0YTo6U2hhcmVkR0xEYXRhOjpjdXJyZW50U2hhcmVkR0xEYXRhKHRleHR1cmVNYXBwZXIpKQog
ICAgIHsgfQogCisgICAgVGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVyOwogICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHByb2plY3Rpb25NYXRyaXg7CiAgICAgVGV4dHVyZU1hcHBlcjo6UGFp
bnRGbGFncyBQYWludEZsYWdzOwotICAgIEdMaW50IHByZXZpb3VzUHJvZ3JhbTsKLSAgICBHTGlu
dCB0YXJnZXRGcmFtZUJ1ZmZlcjsKKyAgICBHQzNEaW50IHByZXZpb3VzUHJvZ3JhbTsKKyAgICBH
QzNEaW50IHRhcmdldEZyYW1lQnVmZmVyOwogICAgIGJvb2wgZGlkTW9kaWZ5U3RlbmNpbDsKLSAg
ICBHTGludCBwcmV2aW91c1NjaXNzb3JTdGF0ZTsKLSAgICBHTGludCBwcmV2aW91c0RlcHRoU3Rh
dGU7Ci0gICAgR0xpbnQgdmlld3BvcnRbNF07Ci0gICAgR0xpbnQgcHJldmlvdXNTY2lzc29yWzRd
OworICAgIEdDM0RpbnQgcHJldmlvdXNTY2lzc29yU3RhdGU7CisgICAgR0MzRGludCBwcmV2aW91
c0RlcHRoU3RhdGU7CisgICAgR0MzRGludCB2aWV3cG9ydFs0XTsKKyAgICBHQzNEaW50IHByZXZp
b3VzU2Npc3Nvcls0XTsKICAgICBSZWZQdHI8U2hhcmVkR0xEYXRhPiBtX3NoYXJlZEdMRGF0YTsK
ICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3VycmVudFN1cmZhY2U7CiB9OwpAQCAtMTg5LDI1
ICsxNDMsMjUgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjazo6cG9wKCkKICAgICBj
bGlwU3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCi1zdGF0aWMgdm9pZCBzY2lzc29yQ2xpcChjb25z
dCBJbnRSZWN0JiByZWN0KQorc3RhdGljIHZvaWQgc2Npc3NvckNsaXAoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHJlY3QuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBHTGludCB2aWV3cG9ydFs0XTsKLSAgICBHTF9D
TUQoZ2xHZXRJbnRlZ2VydihHTF9WSUVXUE9SVCwgdmlld3BvcnQpKTsKLSAgICBHTF9DTUQoZ2xT
Y2lzc29yKHJlY3QueCgpLCB2aWV3cG9ydFszXSAtIHJlY3QubWF4WSgpLCByZWN0LndpZHRoKCks
IHJlY3QuaGVpZ2h0KCkpKTsKKyAgICBHQzNEaW50IHZpZXdwb3J0WzRdOworICAgIGNvbnRleHQt
PmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpWSUVXUE9SVCwgdmlld3BvcnQpOworICAg
IGNvbnRleHQtPnNjaXNzb3IocmVjdC54KCksIHZpZXdwb3J0WzNdIC0gcmVjdC5tYXhZKCksIHJl
Y3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpD
bGlwU3RhY2s6OmFwcGx5KCkKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2s6OmFwcGx5
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QpCiB7Ci0gICAgc2Npc3NvckNsaXAoY2xpcFN0
YXRlLnNjaXNzb3JCb3gpOwotICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9LRUVQLCBHTF9LRUVQ
LCBHTF9LRUVQKSk7Ci0gICAgR0xfQ01EKGdsU3RlbmNpbEZ1bmMoR0xfRVFVQUwsIGNsaXBTdGF0
ZS5zdGVuY2lsSW5kZXggLSAxLCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSkpOworICAgIHNj
aXNzb3JDbGlwKGNvbnRleHQzRCwgY2xpcFN0YXRlLnNjaXNzb3JCb3gpOworICAgIGNvbnRleHQz
RC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQLCBHcmFwaGljc0NvbnRleHQzRDo6
S0VFUCwgR3JhcGhpY3NDb250ZXh0M0Q6OktFRVApOworICAgIGNvbnRleHQzRC0+c3RlbmNpbEZ1
bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkVRVUFMLCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSwg
Y2xpcFN0YXRlLnN0ZW5jaWxJbmRleCAtIDEpOwogICAgIGlmIChjbGlwU3RhdGUuc3RlbmNpbElu
ZGV4ID09IDEpCi0gICAgICAgIEdMX0NNRChnbERpc2FibGUoR0xfU1RFTkNJTF9URVNUKSk7Cisg
ICAgICAgIGNvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNU
KTsKICAgICBlbHNlCi0gICAgICAgIEdMX0NNRChnbEVuYWJsZShHTF9TVEVOQ0lMX1RFU1QpKTsK
KyAgICAgICAgY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVT
VCk7CiB9CiAKIApAQCAtMjIxLDggKzE3NSw5IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMRGF0YTo6
aW5pdGlhbGl6ZVN0ZW5jaWwoKQogICAgIGlmIChkaWRNb2RpZnlTdGVuY2lsKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBHTF9DTUQoZ2xDbGVhclN0ZW5jaWwoMCkpOwotICAgIEdMX0NNRChnbENs
ZWFyKEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0M0QgPSB0ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOworICAgIGNvbnRleHQz
RC0+Y2xlYXJTdGVuY2lsKDApOworICAgIGNvbnRleHQzRC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCk7CiAgICAgZGlkTW9kaWZ5U3RlbmNpbCA9IHRydWU7CiB9
CiAKQEAgLTIzNiwxMCArMTkxLDE0IEBAIEJpdG1hcFRleHR1cmVHTCogdG9CaXRtYXBUZXh0dXJl
R0woQml0bWFwVGV4dHVyZSogdGV4dHVyZSkKIAogVGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFw
cGVyR0woKQogICAgIDogVGV4dHVyZU1hcHBlcihPcGVuR0xNb2RlKQotICAgICwgbV9kYXRhKG5l
dyBUZXh0dXJlTWFwcGVyR0xEYXRhKQogICAgICwgbV9jb250ZXh0KDApCiAgICAgLCBtX2VuYWJs
ZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyhmYWxzZSkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzOworICAgIGF0dHJpYnV0ZXMuYW50aWFsaWFzID0gZmFs
c2U7CisgICAgYXR0cmlidXRlcy5kZXB0aCA9IGZhbHNlOworICAgIG1fY29udGV4dDNEID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRyaWJ1dGVzLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6
UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAgIG1fZGF0YSA9IG5ldyBUZXh0dXJlTWFw
cGVyR0xEYXRhKHRoaXMpOwogfQogCiBUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjayYgVGV4dHVy
ZU1hcHBlckdMOjpjbGlwU3RhY2soKQpAQCAtMjQ5LDE1ICsyMDgsOSBAQCBUZXh0dXJlTWFwcGVy
R0w6OkNsaXBTdGFjayYgVGV4dHVyZU1hcHBlckdMOjpjbGlwU3RhY2soKQogCiB2b2lkIFRleHR1
cmVNYXBwZXJHTDo6YmVnaW5QYWludGluZyhQYWludEZsYWdzIGZsYWdzKQogewotICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IG5vIEdMIGVycm9yIGNvZGUgc3RheXMgZnJvbSBwcmV2aW91cyBvcGVyYXRp
b25zLgotICAgIGdsR2V0RXJyb3IoKTsKLQotICAgIGlmICghaW5pdGlhbGl6ZU9wZW5HTFNoaW1z
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdMX0NNRChnbEdldEludGVnZXJ2KEdMX0NVUlJF
TlRfUFJPR1JBTSwgJmRhdGEoKS5wcmV2aW91c1Byb2dyYW0pKTsKLSAgICBkYXRhKCkucHJldmlv
dXNTY2lzc29yU3RhdGUgPSBnbElzRW5hYmxlZChHTF9TQ0lTU09SX1RFU1QpOwotICAgIGRhdGEo
KS5wcmV2aW91c0RlcHRoU3RhdGUgPSBnbElzRW5hYmxlZChHTF9ERVBUSF9URVNUKTsKKyAgICBt
X2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfUFJPR1JB
TSwgJmRhdGEoKS5wcmV2aW91c1Byb2dyYW0pOworICAgIGRhdGEoKS5wcmV2aW91c1NjaXNzb3JT
dGF0ZSA9IG1fY29udGV4dDNELT5pc0VuYWJsZWQoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1Jf
VEVTVCk7CisgICAgZGF0YSgpLnByZXZpb3VzRGVwdGhTdGF0ZSA9IG1fY29udGV4dDNELT5pc0Vu
YWJsZWQoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1QpOwogI2lmIFBMQVRGT1JNKFFUKQog
ICAgIGlmIChtX2NvbnRleHQpIHsKICAgICAgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBtX2NvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpOwpAQCAtMjY1LDE1ICsyMTgsMTUgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyBmbGFncykKICAgICAgICAgcGFpbnRl
ci0+YmVnaW5OYXRpdmVQYWludGluZygpOwogICAgIH0KICNlbmRpZgotICAgIGdsRGlzYWJsZShH
TF9ERVBUSF9URVNUKTsKLSAgICBnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIG1fY29u
dGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUKTsKKyAgICBtX2Nv
bnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwogICAgIGRh
dGEoKS5kaWRNb2RpZnlTdGVuY2lsID0gZmFsc2U7Ci0gICAgR0xfQ01EKGdsRGVwdGhNYXNrKDAp
KTsKLSAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9WSUVXUE9SVCwgZGF0YSgpLnZpZXdwb3J0
KSk7Ci0gICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfU0NJU1NPUl9CT1gsIGRhdGEoKS5wcmV2
aW91c1NjaXNzb3IpKTsKLSAgICBnbEdldEludGVnZXJ2KEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcs
ICZkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpOworICAgIG1fY29udGV4dDNELT5kZXB0aE1hc2so
MCk7CisgICAgbV9jb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpWSUVX
UE9SVCwgZGF0YSgpLnZpZXdwb3J0KTsKKyAgICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YLCBkYXRhKCkucHJldmlvdXNTY2lzc29yKTsKKyAg
ICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0JJTkRJTkcsICZkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpOwogICAgIG1fY2xpcFN0YWNrLmlu
aXQoSW50UmVjdCgwLCAwLCBkYXRhKCkudmlld3BvcnRbMl0sIGRhdGEoKS52aWV3cG9ydFszXSkp
OwotICAgIEdMX0NNRChnbEdldEludGVnZXJ2KEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcsICZkYXRh
KCkudGFyZ2V0RnJhbWVCdWZmZXIpKTsKKyAgICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0JJTkRJTkcsICZkYXRhKCkudGFyZ2V0RnJhbWVC
dWZmZXIpOwogICAgIGRhdGEoKS5QYWludEZsYWdzID0gZmxhZ3M7CiAgICAgYmluZFN1cmZhY2Uo
MCk7CiB9CkBAIC0yODEsMjIgKzIzNCwyMiBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5Q
YWludGluZyhQYWludEZsYWdzIGZsYWdzKQogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50
aW5nKCkKIHsKICAgICBpZiAoZGF0YSgpLmRpZE1vZGlmeVN0ZW5jaWwpIHsKLSAgICAgICAgZ2xD
bGVhclN0ZW5jaWwoMSk7Ci0gICAgICAgIGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJfQklUKTsK
KyAgICAgICAgbV9jb250ZXh0M0QtPmNsZWFyU3RlbmNpbCgxKTsKKyAgICAgICAgbV9jb250ZXh0
M0QtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOwogICAgIH0K
IAotICAgIGdsVXNlUHJvZ3JhbShkYXRhKCkucHJldmlvdXNQcm9ncmFtKTsKKyAgICBtX2NvbnRl
eHQzRC0+dXNlUHJvZ3JhbShkYXRhKCkucHJldmlvdXNQcm9ncmFtKTsKIAotICAgIGdsU2Npc3Nv
cihkYXRhKCkucHJldmlvdXNTY2lzc29yWzBdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzFdLCBk
YXRhKCkucHJldmlvdXNTY2lzc29yWzJdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzNdKTsKKyAg
ICBtX2NvbnRleHQzRC0+c2Npc3NvcihkYXRhKCkucHJldmlvdXNTY2lzc29yWzBdLCBkYXRhKCku
cHJldmlvdXNTY2lzc29yWzFdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzJdLCBkYXRhKCkucHJl
dmlvdXNTY2lzc29yWzNdKTsKICAgICBpZiAoZGF0YSgpLnByZXZpb3VzU2Npc3NvclN0YXRlKQot
ICAgICAgICBnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgICAgICBtX2NvbnRleHQzRC0+
ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwogICAgIGVsc2UKLSAgICAg
ICAgZ2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgICAgIG1fY29udGV4dDNELT5kaXNh
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwogCiAgICAgaWYgKGRhdGEoKS5w
cmV2aW91c0RlcHRoU3RhdGUpCi0gICAgICAgIGdsRW5hYmxlKEdMX0RFUFRIX1RFU1QpOworICAg
ICAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUKTsK
ICAgICBlbHNlCi0gICAgICAgIGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKTsKKyAgICAgICAgbV9j
b250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1QpOwogCiAjaWYg
UExBVEZPUk0oUVQpCiAgICAgaWYgKCFtX2NvbnRleHQpCkBAIC0zMDcsNDAgKzI2MCw0MCBAQCB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6ZW5kUGFpbnRpbmcoKQogI2VuZGlmCiB9CiAKLXZvaWQgVGV4
dHVyZU1hcHBlckdMOjpkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYgcXVhZFRvRHJhdywgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0qIHNoYWRlclByb2dyYW0sIEdMZW51bSBkcmF3aW5nTW9kZSwgYm9vbCBuZWVkc0Js
ZW5kaW5nKQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiBx
dWFkVG9EcmF3LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSogc2hhZGVyUHJvZ3JhbSwgR0MzRGVudW0gZHJhd2lu
Z01vZGUsIGJvb2wgbmVlZHNCbGVuZGluZykKIHsKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChn
bEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAwKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBt
X2NvbnRleHQzRC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAw
KTsKIAotICAgIGNvbnN0IEdMZmxvYXQgcXVhZFtdID0geworICAgIGNvbnN0IEdDM0RmbG9hdCBx
dWFkW10gPSB7CiAgICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFy
ZS5wMSgpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAxKCku
eSgpLAogICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDIo
KS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMigpLnkoKSwK
ICAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAzKCkueCgp
LCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDMoKS55KCksCiAgICAg
ICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wNCgpLngoKSwgcXVh
ZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnA0KCkueSgpCiAgICAgfTsKLSAg
ICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJp
YigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHF1YWQpKTsKKyAgICBtX2NvbnRleHQzRC0+
dmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cihxdWFkKSk7CiAKICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRh
KCkucHJvamVjdGlvbk1hdHJpeCkubXVsdGlwbHkobW9kZWxWaWV3TWF0cml4KS5tdWx0aXBseShU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgKICAgICAgICAgICAgIHF1YWRUb0RyYXcub3JpZ2luYWxUYXJn
ZXRSZWN0LndpZHRoKCksIDAsIDAsIDAsCiAgICAgICAgICAgICAwLCBxdWFkVG9EcmF3Lm9yaWdp
bmFsVGFyZ2V0UmVjdC5oZWlnaHQoKSwgMCwgMCwKICAgICAgICAgICAgIDAsIDAsIDEsIDAsCiAg
ICAgICAgICAgICBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC54KCksIHF1YWRUb0RyYXcu
b3JpZ2luYWxUYXJnZXRSZWN0LnkoKSwgMCwgMSkpOwotICAgIGNvbnN0IEdMZmxvYXQgbTRbXSA9
IHsKKyAgICBjb25zdCBHQzNEZmxvYXQgbTRbXSA9IHsKICAgICAgICAgbWF0cml4Lm0xMSgpLCBt
YXRyaXgubTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAogICAgICAgICBtYXRyaXgu
bTIxKCksIG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCiAgICAgICAg
IG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwK
ICAgICAgICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4
Lm00NCgpCiAgICAgfTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRlclByb2dy
YW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIEdMX0ZBTFNFLCBtNCkpOworICAgIG1fY29udGV4dDNE
LT51bmlmb3JtTWF0cml4NGZ2KHNoYWRlclByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIGZh
bHNlLCBjb25zdF9jYXN0PEdDM0RmbG9hdCo+KG00KSk7CiAKICAgICBpZiAobmVlZHNCbGVuZGlu
ZykgewotICAgICAgICBHTF9DTUQoZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JD
X0FMUEhBKSk7Ci0gICAgICAgIEdMX0NNRChnbEVuYWJsZShHTF9CTEVORCkpOworICAgICAgICBt
X2NvbnRleHQzRC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29u
dGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmVuYWJs
ZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwogICAgIH0gZWxzZQotICAgICAgICBHTF9DTUQo
Z2xEaXNhYmxlKEdMX0JMRU5EKSk7CisgICAgICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpCTEVORCk7CiAKLSAgICBHTF9DTUQoZ2xEcmF3QXJyYXlzKGRyYXdpbmdN
b2RlLCAwLCA0KSk7Ci0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRl
clByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7CisgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMo
ZHJhd2luZ01vZGUsIDAsIDQpOworICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOwogfQogCiB2b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdpZHRoLCBjb25z
dCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2Rl
bFZpZXdNYXRyaXgpCkBAIC0zNDksMTcgKzMwMiwxNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6
ZHJhd0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdpZHRoLCBjb25zdCBGbG9hdFJl
YwogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1Tb2xpZENvbG9yPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyLnNvbGlkQ29sb3JQcm9ncmFtKCk7Ci0gICAgR0xfQ01EKGdsVXNlUHJv
Z3JhbShwcm9ncmFtLT5pZCgpKSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3Jh
bS0+aWQoKSk7CiAKICAgICBmbG9hdCBhbHBoYSA9IGNvbG9yLmFscGhhKCkgLyAyNTUuMDsKLSAg
ICBHTF9DTUQoZ2xVbmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLAorICAgIG1fY29u
dGV4dDNELT51bmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLAogICAgICAgICAgICAg
ICAgICAgICAgICAoY29sb3IucmVkKCkgLyAyNTUuMCkgKiBhbHBoYSwKICAgICAgICAgICAgICAg
ICAgICAgICAgKGNvbG9yLmdyZWVuKCkgLyAyNTUuMCkgKiBhbHBoYSwKICAgICAgICAgICAgICAg
ICAgICAgICAgKGNvbG9yLmJsdWUoKSAvIDI1NS4wKSAqIGFscGhhLAotICAgICAgICAgICAgICAg
ICAgICAgICBhbHBoYSkpOwotICAgIEdMX0NNRChnbExpbmVXaWR0aCh3aWR0aCkpOworICAgICAg
ICAgICAgICAgICAgICAgICBhbHBoYSk7CisgICAgbV9jb250ZXh0M0QtPmxpbmVXaWR0aCh3aWR0
aCk7CiAKLSAgICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0u
Z2V0KCksIEdMX0xJTkVfTE9PUCwgY29sb3IuaGFzQWxwaGEoKSk7CisgICAgZHJhd1F1YWQodGFy
Z2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdldCgpLCBHcmFwaGljc0NvbnRleHQz
RDo6TElORV9MT09QLCBjb2xvci5oYXNBbHBoYSgpKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVy
R0w6OmRyYXdSZXBhaW50Q291bnRlcihpbnQgdmFsdWUsIGludCBwb2ludFNpemUsIGNvbnN0IEZs
b2F0UG9pbnQmIHRhcmdldFBvaW50LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxW
aWV3TWF0cml4KQpAQCAtNDA2LDcgKzM1OSw4IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3
VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmCiAg
ICAgZHJhd1RleHR1cmUodGV4dHVyZUdMLmlkKCksIHRleHR1cmVHTC5pc09wYXF1ZSgpID8gMCA6
IFN1cHBvcnRzQmxlbmRpbmcsIHRleHR1cmVHTC5zaXplKCksIHRhcmdldFJlY3QsIG1hdHJpeCwg
b3BhY2l0eSwgbWFzaywgZXhwb3NlZEVkZ2VzKTsKIH0KIAotI2lmIGRlZmluZWQoR0xfQVJCX3Rl
eHR1cmVfcmVjdGFuZ2xlKQorI2lmIE9TKERBUldJTikKKy8vIFRoaXMgaXMgc3BlY2lmaWMgdG8g
dGhlIE1hYyBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc1N1cmZhY2UuIElPU3VyZmFjZSByZXF1
aXJlcyBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIgdG8gYmUgdXNlZC4KIHZvaWQgVGV4dHVyZU1h
cHBlckdMOjpkcmF3VGV4dHVyZVJlY3RhbmdsZUFSQih1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBm
bGFncywgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0
UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQg
b3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCiB7CiAgICAgUmVmUHRy
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtOwpAQCAtNDE0LDM2ICszNjgsMzYg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90
IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb24KICAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFy
ZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpSZWN0T3BhY2l0eUFuZE1hc2spOwogICAgIGVsc2UK
ICAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpS
ZWN0U2ltcGxlKTsKLSAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpKTsKKyAg
ICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKTsKIAotICAgIEdMX0NNRChn
bEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAg
R0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpOwotICAgIEdMX0NNRChnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgdGV4dHVyZSkpOwotICAgIEdMX0NNRChn
bFVuaWZvcm0xaShwcm9ncmFtLT5zb3VyY2VUZXh0dXJlTG9jYXRpb24oKSwgMCkpOworICAgIG1f
Y29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIo
KSk7CisgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkUwKTsKKyAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5H
TEVfQVJCLCB0ZXh0dXJlKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnNv
dXJjZVRleHR1cmVMb2NhdGlvbigpLCAwKTsKIAotICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9n
cmFtLT5mbGlwTG9jYXRpb24oKSwgISEoZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVyZSkpKTsKLSAg
ICBHTF9DTUQoZ2xVbmlmb3JtMmYocHJvZ3JhbS0+dGV4dHVyZVNpemVMb2NhdGlvbigpLCB0ZXh0
dXJlU2l6ZS53aWR0aCgpLCB0ZXh0dXJlU2l6ZS5oZWlnaHQoKSkpOworICAgIG1fY29udGV4dDNE
LT51bmlmb3JtMWYocHJvZ3JhbS0+ZmxpcExvY2F0aW9uKCksICEhKGZsYWdzICYgU2hvdWxkRmxp
cFRleHR1cmUpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTJmKHByb2dyYW0tPnRleHR1cmVT
aXplTG9jYXRpb24oKSwgdGV4dHVyZVNpemUud2lkdGgoKSwgdGV4dHVyZVNpemUuaGVpZ2h0KCkp
OwogCiAgICAgaWYgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxv
Y2F0aW9uKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpKSkKLSAgICAgICAgR0xfQ01EKGdsVW5p
Zm9ybTFmKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5KSk7CisgICAgICAgIG1f
Y29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkp
OwogCiAgICAgaWYgKG1hc2tUZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkgJiYgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+
bWFza1RleHR1cmVMb2NhdGlvbigpKSkgewogICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wq
IG1hc2tUZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNr
VGV4dHVyZSk7Ci0gICAgICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpKTsK
LSAgICAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbWFza1RleHR1cmVH
TC0+aWQoKSkpOwotICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+bWFza1RleHR1
cmVMb2NhdGlvbigpLCAxKSk7Ci0gICAgICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVY
VFVSRTApKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkUxKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKTsKKyAgICAgICAg
bV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCksIDEp
OworICAgICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRTApOwogICAgIH0KIAogICAgIGJvb2wgbmVlZHNCbGVuZGluZyA9IChmbGFncyAmIFN1
cHBvcnRzQmxlbmRpbmcpIHx8IG9wYWNpdHkgPCAwLjk5IHx8IG1hc2tUZXh0dXJlOwotICAgIGRy
YXdRdWFkKHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgcHJvZ3JhbS5nZXQoKSwgR0xfVFJJ
QU5HTEVfRkFOLCBuZWVkc0JsZW5kaW5nKTsKKyAgICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2Rl
bFZpZXdNYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9G
QU4sIG5lZWRzQmxlbmRpbmcpOwogfQotI2VuZGlmIC8vIGRlZmluZWQoR0xfQVJCX3RleHR1cmVf
cmVjdGFuZ2xlKSAKKyNlbmRpZiAvLyBPUyhEQVJXSU4pCiAKIHZvaWQgVGV4dHVyZU1hcHBlckdM
OjpkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6
ZSYgLyogdGV4dHVyZVNpemUgKi8sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29u
c3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIHVuc2lnbmVkIGV4cG9zZWRFZGdlcykKIHsK
LSAgICBib29sIG5lZWRzQW50aWxpYWluZyA9IG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFz
aW5nICYmICFtb2RlbFZpZXdNYXRyaXguaXNJbnRlZ2VyVHJhbnNsYXRpb24oKTsKLSAgICBpZiAo
bmVlZHNBbnRpbGlhaW5nICYmIGRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh0ZXh0dXJlLCBm
bGFncywgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5LCBtYXNrVGV4dHVyZSwg
ZXhwb3NlZEVkZ2VzKSkKKyAgICBib29sIG5lZWRzQW50aWFsaWFpbmcgPSBtX2VuYWJsZUVkZ2VE
aXN0YW5jZUFudGlhbGlhc2luZyAmJiAhbW9kZWxWaWV3TWF0cml4LmlzSW50ZWdlclRyYW5zbGF0
aW9uKCk7CisgICAgaWYgKG5lZWRzQW50aWFsaWFpbmcgJiYgZHJhd1RleHR1cmVXaXRoQW50aWFs
aWFzaW5nKHRleHR1cmUsIGZsYWdzLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNp
dHksIG1hc2tUZXh0dXJlLCBleHBvc2VkRWRnZXMpKQogICAgICAgIHJldHVybjsKIAogICAgIFJl
ZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbTsKQEAgLTQ1MSwxNSArNDA1
LDE1IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJl
LCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYKICAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5z
aGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFt
KFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5QW5kTWFzayk7CiAgICAgZWxzZQog
ICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNp
bXBsZSk7Ci0gICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKSk7CisgICAgbV9j
b250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CiAKICAgICBkcmF3VGV4dHVyZWRR
dWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVyZSwgZmxhZ3MsIHRhcmdldFJlY3Qs
IG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgbWFza1RleHR1cmUpOwogfQogCi1zdGF0aWMgVHJh
bnNmb3JtYXRpb25NYXRyaXggdmlld3BvcnRNYXRyaXgoKQorc3RhdGljIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHZpZXdwb3J0TWF0cml4KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QpCiB7Ci0g
ICAgR0xpbnQgdmlld3BvcnRbNF07Ci0gICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfVklFV1BP
UlQsIHZpZXdwb3J0KSk7CisgICAgR0MzRGludCB2aWV3cG9ydFs0XTsKKyAgICBjb250ZXh0M0Qt
PmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpWSUVXUE9SVCwgdmlld3BvcnQpOwogCiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwogICAgIG1hdHJpeC50cmFuc2xhdGUzZCh2
aWV3cG9ydFswXSwgdmlld3BvcnRbMV0sIDApOwpAQCAtNTU2LDcgKzUxMCw3IEBAIGJvb2wgVGV4
dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVy
ZSwgRmxhZ3MgZmxhZ3MsCiAgICAgLy8gYW50aWFsaWFzaW5nLiBOb3RlIGhlcmUgdGhhdCB3ZSBh
cmUgYWxzbyBpbmNsdWRpbmcgdGhlIHZpZXdwb3J0IG1hdHJpeCAod2hpY2gKICAgICAvLyB0cmFu
c2xhdGVzIGZyb20gbm9ybWFsaXplZCBkZXZpY2UgY29vcmRpbmF0ZXMgdG8gc2NyZWVuIGNvb3Jk
aW5hdGVzKSwgYmVjYXVzZSB0aGVzZQogICAgIC8vIHZhbHVlcyBhcmUgY29uc3VtZWQgaW4gdGhl
IGZyYWdtZW50IHNoYWRlciwgd2hpY2ggd29ya3MgaW4gc2NyZWVuIGNvb3JkaW5hdGVzLgotICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcmVlblNwYWNlVHJhbnNmb3JtID0gdmlld3BvcnRNYXRy
aXgoKS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCkucHJvamVjdGlvbk1hdHJp
eCkpLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkudG8yZFRyYW5zZm9ybSgpOworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHNjcmVlblNwYWNlVHJhbnNmb3JtID0gdmlld3BvcnRNYXRyaXgobV9j
b250ZXh0M0QuZ2V0KCkpLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9q
ZWN0aW9uTWF0cml4KSkubXVsdGlwbHkobW9kZWxWaWV3TWF0cml4KS50bzJkVHJhbnNmb3JtKCk7
CiAgICAgaWYgKCFzY3JlZW5TcGFjZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIEZsb2F0UXVhZCBxdWFkSW5TY3JlZW5TcGFjZSA9IHNjcmVlblNw
YWNlVHJhbnNmb3JtLm1hcFF1YWQob3JpZ2luYWxUYXJnZXRSZWN0KTsKQEAgLTU4MCw4ICs1MzQs
OCBAQCBib29sIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHVp
bnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLAogICAgIHF1YWRUb0VkZ2VBcnJheShpbmZsYXRl
UXVhZChxdWFkSW5TY3JlZW5TcGFjZS5ib3VuZGluZ0JveCgpLCAgaW5mbGF0aW9uRGlzdGFuY2Up
LCB0YXJnZXRRdWFkRWRnZXMgKyAxMik7CiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRh
KCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuYW50aWFsaWFzaW5nTm9NYXNrUHJvZ3JhbSgp
OwotICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOwotICAgIEdMX0NNRChn
bFVuaWZvcm0zZnYocHJvZ3JhbS0+ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRp
b24oKSwgOCwgdGFyZ2V0UXVhZEVkZ2VzKSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0o
cHJvZ3JhbS0+aWQoKSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0zZnYocHJvZ3JhbS0+ZXhw
YW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSwgOCwgdGFyZ2V0UXVhZEVkZ2Vz
KTsKIAogICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0
dXJlLCBmbGFncywgRHJhd1F1YWQob3JpZ2luYWxUYXJnZXRSZWN0LCBleHBhbmRlZFF1YWRJblRl
eHR1cmVDb29yZGluYXRlcyksIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgMCAvKiBtYXNrVGV4
dHVyZSAqLyk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC01ODksMjYgKzU0MywyNiBAQCBib29sIFRl
eHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1
cmUsIEZsYWdzIGZsYWdzLAogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVh
ZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCB1aW50MzJf
dCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgRHJhd1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNv
bnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKQogewotICAgIEdMX0NNRChnbEVuYWJsZVZl
cnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGds
QWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpOwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIHRleHR1cmUpKTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+
c291cmNlVGV4dHVyZUxvY2F0aW9uKCksIDApKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNE
LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CisgICAgbV9jb250
ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJl
KTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnNvdXJjZVRleHR1cmVMb2Nh
dGlvbigpLCAwKTsKIAotICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtLT5mbGlwTG9jYXRp
b24oKSwgISEoZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVyZSkpKTsKKyAgICBtX2NvbnRleHQzRC0+
dW5pZm9ybTFmKHByb2dyYW0tPmZsaXBMb2NhdGlvbigpLCAhIShmbGFncyAmIFNob3VsZEZsaXBU
ZXh0dXJlKSk7CiAKICAgICBpZiAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRV
bmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCkpKQotICAgICAgICBHTF9D
TUQoZ2xVbmlmb3JtMWYocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpKTsKKyAg
ICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwg
b3BhY2l0eSk7CiAKICAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQo
KSAmJiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCkpKSB7CiAgICAgICAgIGNvbnN0IEJpdG1hcFRl
eHR1cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVH
TCo+KG1hc2tUZXh0dXJlKTsKLSAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhU
VVJFMSkpOwotICAgICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtYXNr
VGV4dHVyZUdMLT5pZCgpKSk7Ci0gICAgICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtLT5t
YXNrVGV4dHVyZUxvY2F0aW9uKCksIDEpKTsKLSAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVy
ZShHTF9URVhUVVJFMCkpOworICAgICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRTEpOworICAgICAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPmlkKCkpOwor
ICAgICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRp
b24oKSwgMSk7CisgICAgICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFMCk7CiAgICAgfQogCiAgICAgYm9vbCBuZWVkc0JsZW5kaW5nID0gKGZs
YWdzICYgU3VwcG9ydHNCbGVuZGluZykgfHwgb3BhY2l0eSA8IDAuOTkgfHwgbWFza1RleHR1cmU7
Ci0gICAgZHJhd1F1YWQocXVhZFRvRHJhdywgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLCBHTF9U
UklBTkdMRV9GQU4sIG5lZWRzQmxlbmRpbmcpOworICAgIGRyYXdRdWFkKHF1YWRUb0RyYXcsIG1v
ZGVsVmlld01hdHJpeCwgcHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwg
bmVlZHNCbGVuZGluZyk7CiB9CiAKIGJvb2wgQml0bWFwVGV4dHVyZUdMOjpjYW5SZXVzZVdpdGgo
Y29uc3QgSW50U2l6ZSYgY29udGVudHNTaXplLCBGbGFncykKQEAgLTYxOSw3ICs1NzMsNyBAQCBi
b29sIEJpdG1hcFRleHR1cmVHTDo6Y2FuUmV1c2VXaXRoKGNvbnN0IEludFNpemUmIGNvbnRlbnRz
U2l6ZSwgRmxhZ3MpCiAjaWYgT1MoREFSV0lOKQogI2RlZmluZSBERUZBVUxUX1RFWFRVUkVfUElY
RUxfVFJBTlNGRVJfVFlQRSBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYKICNlbHNlCi0jZGVm
aW5lIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFIEdMX1VOU0lHTkVEX0JZVEUK
KyNkZWZpbmUgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKICNlbmRpZgogCiBzdGF0aWMgYm9vbCBkcml2ZXJTdXBwb3J0
c1N1YkltYWdlKCkKQEAgLTYzNCwzMCArNTg4LDMxIEBAIHN0YXRpYyBib29sIGRyaXZlclN1cHBv
cnRzU3ViSW1hZ2UoKQogCiB2b2lkIEJpdG1hcFRleHR1cmVHTDo6ZGlkUmVzZXQoKQogeworICAg
IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNz
Q29udGV4dDNEKCk7CiAgICAgaWYgKCFtX2lkKQotICAgICAgICBHTF9DTUQoZ2xHZW5UZXh0dXJl
cygxLCAmbV9pZCkpOwotCisgICAgICAgIG1faWQgPSBjb250ZXh0M0QtPmNyZWF0ZVRleHR1cmUo
KTsKICAgICBtX3Nob3VsZENsZWFyID0gdHJ1ZTsKICAgICBpZiAobV90ZXh0dXJlU2l6ZSA9PSBj
b250ZW50U2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3RleHR1cmVTaXplID0gY29u
dGVudFNpemUoKTsKLSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lk
KSk7Ci0gICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUikpOwotICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpKTsKLSAgICBHTF9D
TUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9D
TEFNUF9UT19FREdFKSk7Ci0gICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSkpOwotICAgIEdMX0NNRChnbFRl
eEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgbV90ZXh0dXJlU2l6ZS53aWR0aCgp
LCBtX3RleHR1cmVTaXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBERUZBVUxUX1RFWFRVUkVfUElY
RUxfVFJBTlNGRVJfVFlQRSwgMCkpOworICAgIGNvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1faWQpOworICAgIGNvbnRleHQzRC0+dGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgY29udGV4
dDNELT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFS
KTsKKyAgICBjb250ZXh0M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0
M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGNvbnRleHQzRC0+dGV4UGFyYW1ldGVyaShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9U
LCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgY29udGV4dDNELT50ZXhJ
bWFnZTJERGlyZWN0KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdo
dCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RS
QU5TRkVSX1RZUEUsIDApOwogfQogCiAKIHZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250
ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJ
bnRQb2ludCYgc291cmNlT2Zmc2V0LCBpbnQgYnl0ZXNQZXJMaW5lKQogewotICAgIEdMX0NNRChn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKTsKKyAgICBHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOworICAg
IGNvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1f
aWQpOwogCiAgICAgY29uc3QgdW5zaWduZWQgYnl0ZXNQZXJQaXhlbCA9IDQ7CiAgICAgaWYgKGJ5
dGVzUGVyTGluZSA9PSB0YXJnZXRSZWN0LndpZHRoKCkgKiBieXRlc1BlclBpeGVsICYmIHNvdXJj
ZU9mZnNldCA9PSBJbnRQb2ludDo6emVybygpKSB7Ci0gICAgICAgIEdMX0NNRChnbFRleFN1Yklt
YWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0
YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIEdMX1JHQkEsIERFRkFVTFRf
VEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29uc3QgY2hhciopZGF0YSkpOworICAgICAg
ICBjb250ZXh0M0QtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0
YXJnZXRSZWN0LmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgREVGQVVMVF9URVhU
VVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIChjb25zdCBjaGFyKilkYXRhKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtNjc1LDE5ICs2MzAsMTkgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6
OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0IEludFJlY3QmIHRhcmdldFJl
Y3QKICAgICAgICAgICAgIGRzdCArPSB0YXJnZXRCeXRlc1BlckxpbmU7CiAgICAgICAgIH0KIAot
ICAgICAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHRhcmdldFJl
Y3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0Lmhl
aWdodCgpLCBHTF9SR0JBLCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgdGVt
cG9yYXJ5RGF0YS5kYXRhKCkpKTsKKyAgICAgICAgY29udGV4dDNELT50ZXhTdWJJbWFnZTJEKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVj
dC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCB0ZW1w
b3JhcnlEYXRhLmRhdGEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiAhZGVmaW5l
ZChURVhNQVBfT1BFTkdMX0VTXzIpCiAgICAgLy8gVXNlIHRoZSBPcGVuR0wgc3ViLWltYWdlIGV4
dGVuc2lvbiwgbm93IHRoYXQgd2Uga25vdyBpdCdzIGF2YWlsYWJsZS4KLSAgICBHTF9DTUQoZ2xQ
aXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgYnl0ZXNQZXJMaW5lIC8gYnl0ZXNQZXJQ
aXhlbCkpOwotICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JPV1MsIHNv
dXJjZU9mZnNldC55KCkpKTsKLSAgICBHTF9DTUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJ
UF9QSVhFTFMsIHNvdXJjZU9mZnNldC54KCkpKTsKLSAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJE
KEdMX1RFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0
UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBERUZBVUxUX1RFWFRV
UkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgKGNvbnN0IGNoYXIqKWRhdGEpKTsKLSAgICBHTF9DTUQo
Z2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgMCkpOwotICAgIEdMX0NNRChnbFBp
eGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JPV1MsIDApKTsKLSAgICBHTF9DTUQoZ2xQaXhlbFN0
b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsIDApKTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3Rv
cmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCBieXRlc1BlckxpbmUgLyBieXRlc1BlclBpeGVsKTsK
KyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JPV1MsIHNvdXJjZU9m
ZnNldC55KCkpOworICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUElY
RUxTLCBzb3VyY2VPZmZzZXQueCgpKTsKKyAgICBjb250ZXh0M0QtPnRleFN1YkltYWdlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0
LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIChjb25z
dCBjaGFyKilkYXRhKTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1df
TEVOR1RILCAwKTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JP
V1MsIDApOworICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUElYRUxT
LCAwKTsKICNlbmRpZgogfQogCkBAIC03MTIsMTkgKzY2NywxOSBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6ZHJhd0ZpbHRlcmVkKGNvbnN0IEJpdG1hcFRleHR1cmUmIHNvdXJjZVRleHR1cmUsIGNv
bnN0IEJpdAogCiAgICAgcHJvZ3JhbS0+cHJlcGFyZShmaWx0ZXIsIHBhc3MsIHNvdXJjZVRleHR1
cmUuY29udGVudFNpemUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oY29u
dGVudFRleHR1cmUpLmlkKCkpOwogCi0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJy
YXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsQWN0
aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpOwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHNvdXJjZVRleHR1
cmUpLmlkKCkpKTsKLSAgICBnbFVuaWZvcm0xaShwcm9ncmFtLT50ZXh0dXJlVW5pZm9ybSgpLCAw
KTsKLSAgICBjb25zdCBHTGZsb2F0IHRhcmdldFZlcnRpY2VzW10gPSB7LTEsIC0xLCAxLCAtMSwg
MSwgMSwgLTEsIDF9OwotICAgIGNvbnN0IEdMZmxvYXQgc291cmNlVmVydGljZXNbXSA9IHswLCAw
LCAxLCAwLCAxLCAxLCAwLCAxfTsKLSAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHBy
b2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHRhcmdldFZl
cnRpY2VzKSk7Ci0gICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT50ZXhD
b29yZEF0dHJpYigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHNvdXJjZVZlcnRpY2VzKSk7
Ci0gICAgR0xfQ01EKGdsRGlzYWJsZShHTF9CTEVORCkpOwotICAgIEdMX0NNRChnbERyYXdBcnJh
eXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSk7Ci0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0
dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsRGlzYWJs
ZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmliKCkpKTsKKyAgICBtX2Nv
bnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkp
OworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT50ZXhD
b29yZEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRTApOworICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdM
Jj4oc291cmNlVGV4dHVyZSkuaWQoKSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9n
cmFtLT50ZXh0dXJlVW5pZm9ybSgpLCAwKTsKKyAgICBjb25zdCBHQzNEZmxvYXQgdGFyZ2V0VmVy
dGljZXNbXSA9IHstMSwgLTEsIDEsIC0xLCAxLCAxLCAtMSwgMX07CisgICAgY29uc3QgR0MzRGZs
b2F0IHNvdXJjZVZlcnRpY2VzW10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07CisgICAgbV9j
b250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIs
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIodGFyZ2V0VmVy
dGljZXMpKTsKKyAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT50
ZXhDb29yZEF0dHJpYigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBH
QzNEaW50cHRyKHNvdXJjZVZlcnRpY2VzKSk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFw
aGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKKyAgICBtX2NvbnRleHQzRC0+ZGlz
YWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2Nv
bnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmli
KCkpOwogfQogCiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IEJpdG1hcFRleHR1cmVHTDo6YXBw
bHlGaWx0ZXJzKGNvbnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQpAQCAtNzY1LDE3ICs3MjAsMTggQEAgdm9pZCBCaXRtYXBU
ZXh0dXJlR0w6OmluaXRpYWxpemVTdGVuY2lsKCkKIHsKICAgICBpZiAobV9yYm8pCiAgICAgICAg
IHJldHVybjsKLSAgICBHTF9DTUQoZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX3JibykpOwotICAg
IEdMX0NNRChnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX3JibykpOworICAg
IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNz
Q29udGV4dDNEKCk7CisgICAgbV9yYm8gPSBjb250ZXh0M0QtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigp
OworICAgIGNvbnRleHQzRC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSQlVGRkVSLCBtX3Jibyk7CiAjaWZkZWYgVEVYTUFQX09QRU5HTF9FU18yCi0gICAgR0xfQ01E
KGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTF9SRU5ERVJCVUZGRVIsIEdMX1NURU5DSUxfSU5ERVg4
LCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKTsKKyAgICBj
b250ZXh0M0QtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4LCBtX3RleHR1cmVTaXplLndp
ZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpOwogI2Vsc2UKLSAgICBHTF9DTUQoZ2xSZW5k
ZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgR0xfREVQVEhfU1RFTkNJTCwgbV90ZXh0
dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKSk7CisgICAgY29udGV4dDNE
LT5yZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1f
dGV4dHVyZVNpemUuaGVpZ2h0KCkpOwogI2VuZGlmCi0gICAgR0xfQ01EKGdsQmluZFJlbmRlcmJ1
ZmZlcihHTF9SRU5ERVJCVUZGRVIsIDApKTsKLSAgICBHTF9DTUQoZ2xGcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJC
VUZGRVIsIG1fcmJvKSk7Ci0gICAgR0xfQ01EKGdsQ2xlYXJTdGVuY2lsKDApKTsKLSAgICBHTF9D
TUQoZ2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKTsKKyAgICBjb250ZXh0M0QtPmJpbmRS
ZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7CisgICAgY29u
dGV4dDNELT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fcmJvKTsKKyAgICBjb250ZXh0M0QtPmNsZWFyU3RlbmNp
bCgwKTsKKyAgICBjb250ZXh0M0QtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JV
RkZFUl9CSVQpOwogfQogCiB2b2lkIEJpdG1hcFRleHR1cmVHTDo6Y2xlYXJJZk5lZWRlZCgpCkBA
IC03ODMsMTAgKzczOSwxMSBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6Y2xlYXJJZk5lZWRlZCgp
CiAgICAgaWYgKCFtX3Nob3VsZENsZWFyKQogICAgICAgICByZXR1cm47CiAKKyAgICBHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQz
RCgpOwogICAgIG1fY2xpcFN0YWNrLmluaXQoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX3Rl
eHR1cmVTaXplKSk7Ci0gICAgbV9jbGlwU3RhY2suYXBwbHkoKTsKLSAgICBHTF9DTUQoZ2xDbGVh
ckNvbG9yKDAsIDAsIDAsIDApKTsKLSAgICBHTF9DTUQoZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJf
QklUKSk7CisgICAgbV9jbGlwU3RhY2suYXBwbHkoY29udGV4dDNEKTsKKyAgICBjb250ZXh0M0Qt
PmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgY29udGV4dDNELT5jbGVhcihHcmFwaGljc0Nv
bnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCk7CiAgICAgbV9zaG91bGRDbGVhciA9IGZhbHNlOwog
fQogCkBAIC03OTUsMzMgKzc1MiwzNiBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6Y3JlYXRlRmJv
SWZOZWVkZWQoKQogICAgIGlmIChtX2ZibykKICAgICAgICAgcmV0dXJuOwogCi0gICAgR0xfQ01E
KGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2ZibykpOwotICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1
ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pKTsKLSAgICBHTF9DTUQoZ2xGcmFtZWJ1ZmZlclRl
eHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVf
MkQsIGlkKCksIDApKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0
dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOworICAgIG1fZmJvID0gY29udGV4dDNELT5j
cmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIGNvbnRleHQzRC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIGNvbnRleHQzRC0+ZnJhbWVi
dWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBpZCgpLCAwKTsKICAgICBtX3Nob3VsZENsZWFyID0gdHJ1ZTsKIH0KIAogdm9pZCBCaXRtYXBU
ZXh0dXJlR0w6OmJpbmQoKQogewotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIDApKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0dXJlTWFw
cGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOworICAgIGNvbnRleHQzRC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwogICAgIGNyZWF0ZUZib0lmTmVlZGVkKCk7
Ci0gICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2ZibykpOwot
ICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0
dXJlU2l6ZS5oZWlnaHQoKSkpOworICAgIGNvbnRleHQzRC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIGNvbnRleHQzRC0+dmlld3Bv
cnQoMCwgMCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsK
ICAgICBjbGVhcklmTmVlZGVkKCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5kYXRhKCkucHJvamVj
dGlvbk1hdHJpeCA9IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgobV90ZXh0dXJlU2l6ZSwgdHJ1ZSAv
KiBtaXJyb3JlZCAqLyk7Ci0gICAgbV9jbGlwU3RhY2suYXBwbHkoKTsKKyAgICBtX2NsaXBTdGFj
ay5hcHBseShjb250ZXh0M0QpOwogfQogCiBCaXRtYXBUZXh0dXJlR0w6On5CaXRtYXBUZXh0dXJl
R0woKQogeworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBw
ZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CiAgICAgaWYgKG1faWQpCi0gICAgICAgIEdMX0NNRChn
bERlbGV0ZVRleHR1cmVzKDEsICZtX2lkKSk7CisgICAgICAgIGNvbnRleHQzRC0+ZGVsZXRlVGV4
dHVyZShtX2lkKTsKIAogICAgIGlmIChtX2ZibykKLSAgICAgICAgR0xfQ01EKGdsRGVsZXRlRnJh
bWVidWZmZXJzKDEsICZtX2ZibykpOworICAgICAgICBjb250ZXh0M0QtPmRlbGV0ZUZyYW1lYnVm
ZmVyKG1fZmJvKTsKIAogICAgIGlmIChtX3JibykKLSAgICAgICAgR0xfQ01EKGdsRGVsZXRlUmVu
ZGVyYnVmZmVycygxLCAmbV9yYm8pKTsKKyAgICAgICAgY29udGV4dDNELT5kZWxldGVSZW5kZXJi
dWZmZXIobV9yYm8pOwogfQogCiBib29sIEJpdG1hcFRleHR1cmVHTDo6aXNWYWxpZCgpIGNvbnN0
CkBAIC04NDEsMTEgKzgwMSwxMSBAQCBUZXh0dXJlTWFwcGVyR0w6On5UZXh0dXJlTWFwcGVyR0wo
KQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmluZERlZmF1bHRTdXJmYWNlKCkKIHsKLSAgICBH
TF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGRhdGEoKS50YXJnZXRGcmFt
ZUJ1ZmZlcikpOworICAgIG1fY29udGV4dDNELT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpOwogICAgIEludFNp
emUgdmlld3BvcnRTaXplKGRhdGEoKS52aWV3cG9ydFsyXSwgZGF0YSgpLnZpZXdwb3J0WzNdKTsK
ICAgICBkYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgodmll
d3BvcnRTaXplLCBkYXRhKCkuUGFpbnRGbGFncyAmIFBhaW50aW5nTWlycm9yZWQpOwotICAgIEdM
X0NNRChnbFZpZXdwb3J0KGRhdGEoKS52aWV3cG9ydFswXSwgZGF0YSgpLnZpZXdwb3J0WzFdLCB2
aWV3cG9ydFNpemUud2lkdGgoKSwgdmlld3BvcnRTaXplLmhlaWdodCgpKSk7Ci0gICAgbV9jbGlw
U3RhY2suYXBwbHkoKTsKKyAgICBtX2NvbnRleHQzRC0+dmlld3BvcnQoZGF0YSgpLnZpZXdwb3J0
WzBdLCBkYXRhKCkudmlld3BvcnRbMV0sIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCB2aWV3cG9ydFNp
emUuaGVpZ2h0KCkpOworICAgIG1fY2xpcFN0YWNrLmFwcGx5KG1fY29udGV4dDNELmdldCgpKTsK
ICAgICBkYXRhKCkuY3VycmVudFN1cmZhY2UuY2xlYXIoKTsKIH0KIApAQCAtODc1LDcgKzgzNSw3
IEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpiZWdpblNjaXNzb3JDbGlwKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGNsaXBTdGFjaygpLmN1cnJlbnQoKS5zY2lzc29yQm94LmludGVyc2VjdChyZWN0KTsKLSAgICBj
bGlwU3RhY2soKS5hcHBseSgpOworICAgIGNsaXBTdGFjaygpLmFwcGx5KG1fY29udGV4dDNELmdl
dCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODg5LDEwICs4NDksMTAgQEAgdm9pZCBU
ZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9k
ZWxWaWV3TWF0cml4LCBjb24KIAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaW1wbGUp
OwogCi0gICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKSk7Ci0gICAgR0xfQ01E
KGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAg
ICBjb25zdCBHTGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07Ci0g
ICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwg
MiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB1bml0UmVjdCkpOworICAgIG1fY29udGV4dDNELT51
c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgY29uc3QgR0MzRGZsb2F0
IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07CisgICAgbV9jb250ZXh0M0Qt
PnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIodW5pdFJlY3QpKTsKIAogICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEo
KS5wcm9qZWN0aW9uTWF0cml4KQogICAgICAgICAgICAgLm11bHRpcGx5KG1vZGVsVmlld01hdHJp
eCkKQEAgLTkwMSwxNCArODYxLDE0IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAgICAgICAg
ICAgICAgICAgMCwgMCwgMSwgMCwKICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LngoKSwgdGFy
Z2V0UmVjdC55KCksIDAsIDEpKTsKIAotICAgIGNvbnN0IEdMZmxvYXQgbTRbXSA9IHsKKyAgICBj
b25zdCBHQzNEZmxvYXQgbTRbXSA9IHsKICAgICAgICAgbWF0cml4Lm0xMSgpLCBtYXRyaXgubTEy
KCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAogICAgICAgICBtYXRyaXgubTIxKCksIG1h
dHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCiAgICAgICAgIG1hdHJpeC5t
MzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwKICAgICAgICAg
bWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgpCiAg
ICAgfTsKIAotICAgIGNvbnN0IEdMZmxvYXQgbTRhbGxbXSA9IHsKKyAgICBjb25zdCBHQzNEZmxv
YXQgbTRhbGxbXSA9IHsKICAgICAgICAgMiwgMCwgMCwgMCwKICAgICAgICAgMCwgMiwgMCwgMCwK
ICAgICAgICAgMCwgMCwgMSwgMCwKQEAgLTkxNyw0MyArODc3LDQyIEBAIHZvaWQgVGV4dHVyZU1h
cHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01h
dHJpeCwgY29uCiAKICAgICBpbnQmIHN0ZW5jaWxJbmRleCA9IGNsaXBTdGFjaygpLmN1cnJlbnQo
KS5zdGVuY2lsSW5kZXg7CiAKLSAgICBHTF9DTUQoZ2xFbmFibGUoR0xfU1RFTkNJTF9URVNUKSk7
CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNU
KTsKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBkbyBhbnkgYWN0dWFsIGRyYXdpbmcuCi0g
ICAgR0xfQ01EKGdsU3RlbmNpbEZ1bmMoR0xfTkVWRVIsIHN0ZW5jaWxJbmRleCwgc3RlbmNpbElu
ZGV4KSk7CisgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpO
RVZFUiwgc3RlbmNpbEluZGV4LCBzdGVuY2lsSW5kZXgpOwogCiAgICAgLy8gT3BlcmF0ZSBvbmx5
IG9uIHRoZSBzdGVuY2lsSW5kZXggYW5kIGFib3ZlLgotICAgIEdMX0NNRChnbFN0ZW5jaWxNYXNr
KDB4ZmYgJiB+KHN0ZW5jaWxJbmRleCAtIDEpKSk7CisgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxN
YXNrKDB4ZmYgJiB+KHN0ZW5jaWxJbmRleCAtIDEpKTsKIAogICAgIC8vIEZpcnN0IGNsZWFyIHRo
ZSBlbnRpcmUgYnVmZmVyIGF0IHRoZSBjdXJyZW50IGluZGV4LgotICAgIEdMX0NNRChnbFVuaWZv
cm1NYXRyaXg0ZnYocHJvZ3JhbS0+bWF0cml4TG9jYXRpb24oKSwgMSwgR0xfRkFMU0UsIG00YWxs
KSk7Ci0gICAgR0xfQ01EKGdsU3RlbmNpbE9wKEdMX1pFUk8sIEdMX1pFUk8sIEdMX1pFUk8pKTsK
LSAgICBHTF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpOworICAgIG1f
Y29udGV4dDNELT51bmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEs
IGZhbHNlLCBjb25zdF9jYXN0PEdDM0RmbG9hdCo+KG00YWxsKSk7CisgICAgbV9jb250ZXh0M0Qt
PnN0ZW5jaWxPcChHcmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlpF
Uk8sIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKKyAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5
cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKIAogICAgIC8vIE5vdyBh
cHBseSB0aGUgY3VycmVudCBpbmRleCB0byB0aGUgbmV3IHF1YWQuCi0gICAgR0xfQ01EKGdsU3Rl
bmNpbE9wKEdMX1JFUExBQ0UsIEdMX1JFUExBQ0UsIEdMX1JFUExBQ0UpKTsKLSAgICBHTF9DTUQo
Z2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIEdMX0ZBTFNF
LCBtNCkpOwotICAgIEdMX0NNRChnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSk7
CisgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxPcChHcmFwaGljc0NvbnRleHQzRDo6UkVQTEFDRSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJFUExBQ0UsIEdyYXBoaWNzQ29udGV4dDNEOjpSRVBMQUNFKTsK
KyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhMb2NhdGlv
bigpLCAxLCBmYWxzZSwgY29uc3RfY2FzdDxHQzNEZmxvYXQqPihtNCkpOworICAgIG1fY29udGV4
dDNELT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQpOwog
CiAgICAgLy8gQ2xlYXIgdGhlIHN0YXRlLgotICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRy
aWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbFN0ZW5jaWxN
YXNrKDApKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dy
YW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE1hc2soMCk7CiAK
ICAgICAvLyBJbmNyZWFzZSBzdGVuY2lsSW5kZXggYW5kIGFwcGx5IHN0ZW5jaWwgdGVzdGluZy4K
ICAgICBzdGVuY2lsSW5kZXggKj0gMjsKLSAgICBjbGlwU3RhY2soKS5hcHBseSgpOworICAgIGNs
aXBTdGFjaygpLmFwcGx5KG1fY29udGV4dDNELmdldCgpKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmVuZENsaXAoKQogewogICAgIGNsaXBTdGFjaygpLnBvcCgpOwotICAgIGNsaXBTdGFj
aygpLmFwcGx5KCk7CisgICAgY2xpcFN0YWNrKCkuYXBwbHkobV9jb250ZXh0M0QuZ2V0KCkpOwog
fQogCiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlVGV4
dHVyZSgpCiB7Ci0gICAgQml0bWFwVGV4dHVyZUdMKiB0ZXh0dXJlID0gbmV3IEJpdG1hcFRleHR1
cmVHTCgpOwotICAgIHRleHR1cmUtPnNldFRleHR1cmVNYXBwZXIodGhpcyk7CisgICAgQml0bWFw
VGV4dHVyZUdMKiB0ZXh0dXJlID0gbmV3IEJpdG1hcFRleHR1cmVHTCh0aGlzKTsKICAgICByZXR1
cm4gYWRvcHRSZWYodGV4dHVyZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaAppbmRleCAwNzZlNjVm
NzM3NzYyNjFmMGEzYjkzYmI4NTczYTUwNWRlOWMwMTcwLi40NjQ5YTBiOWMwM2I3NmUyZmQ0ZmU0
MWVmZTEwZTkzZjQxMTU4YzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCkBAIC0yMyw4ICsyMyw4IEBA
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiRmxvYXRRdWFk
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgi
Ci0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAj
aW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIApAQCAtMzgsNyArMzgsNiBAQCBjbGFz
cyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTsKIGNsYXNzIFRleHR1cmVNYXBwZXJHTCA6IHB1
YmxpYyBUZXh0dXJlTWFwcGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0
dXJlTWFwcGVyR0w+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVy
R0wpOyB9Ci0gICAgVGV4dHVyZU1hcHBlckdMKCk7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBl
ckdMKCk7CiAKICAgICBlbnVtIEZsYWcgewpAQCAtNTQsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0
IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlLCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpIE9WRVJS
SURFOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFn
cywgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVj
dCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3Bh
Y2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIHVuc2lnbmVkIGV4cG9zZWRF
ZGdlcyA9IEFsbEVkZ2VzKTsKIAotI2lmIGRlZmluZWQoR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xl
KQorI2lmIE9TKERBUldJTikKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmVSZWN0YW5nbGVB
UkIodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
b2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tU
ZXh0dXJlKTsKICNlbmRpZgogCkBAIC02Niw2ICs2NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IEludFNpemUgbWF4VGV4dHVyZVNpemUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBJbnRTaXpl
KDIwMDAsIDIwMDApOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNy
ZWF0ZVRleHR1cmUoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCogZ3Jh
cGhpY3NDb250ZXh0KCkgT1ZFUlJJREUgeyByZXR1cm4gbV9jb250ZXh0OyB9CisgICAgaW5saW5l
IEdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGV4dDNELmdldCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldEdyYXBoaWNzQ29udGV4dChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQpIE9WRVJSSURFIHsgbV9jb250ZXh0ID0gY29udGV4dDsg
fQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQpAQCAtNzUsNyArNzUsNiBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRFbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcoYm9vbCBlbmFibGVkKSB7
IG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nID0gZW5hYmxlZDsgfQogCiBwcml2YXRl
OgotCiAgICAgc3RydWN0IENsaXBTdGF0ZSB7CiAgICAgICAgIEludFJlY3Qgc2Npc3NvckJveDsK
ICAgICAgICAgaW50IHN0ZW5jaWxJbmRleDsKQEAgLTg5LDcgKzg4LDcgQEAgcHJpdmF0ZToKICAg
ICBwdWJsaWM6CiAgICAgICAgIHZvaWQgcHVzaCgpOwogICAgICAgICB2b2lkIHBvcCgpOwotICAg
ICAgICB2b2lkIGFwcGx5KCk7CisgICAgICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0M0Qq
KTsKICAgICAgICAgaW5saW5lIENsaXBTdGF0ZSYgY3VycmVudCgpIHsgcmV0dXJuIGNsaXBTdGF0
ZTsgfQogICAgICAgICB2b2lkIGluaXQoY29uc3QgSW50UmVjdCYpOwogCkBAIC0xMDksMTYgKzEw
OCwxOSBAQCBwcml2YXRlOgogICAgICAgICBGbG9hdFF1YWQgdGFyZ2V0UmVjdE1hcHBlZFRvVW5p
dFNxdWFyZTsKICAgICB9OwogCisgICAgVGV4dHVyZU1hcHBlckdMKCk7CisKICAgICBib29sIGRy
YXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncywgY29uc3Qg
RmxvYXRSZWN0JiBvcmlnaW5hbFRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1h
c2tUZXh0dXJlLCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpOwogICAgIHZvaWQgZHJhd1RleHR1cmVk
UXVhZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiwgdWludDMyX3QgdGV4
dHVyZSwgRmxhZ3MsIGNvbnN0IERyYXdRdWFkJiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFz
a1RleHR1cmUpOwotICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbSosIEdMZW51bSBkcmF3aW5nTW9kZSwgYm9vbCBuZWVkc0JsZW5kaW5nKTsKKyAgICB2b2lk
IGRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1v
ZGVsVmlld01hdHJpeCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qLCBHQzNEZW51bSBkcmF3
aW5nTW9kZSwgYm9vbCBuZWVkc0JsZW5kaW5nKTsKIAogICAgIGJvb2wgYmVnaW5TY2lzc29yQ2xp
cChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZv
aWQgYmluZERlZmF1bHRTdXJmYWNlKCk7CiAgICAgQ2xpcFN0YWNrJiBjbGlwU3RhY2soKTsKICAg
ICBpbmxpbmUgVGV4dHVyZU1hcHBlckdMRGF0YSYgZGF0YSgpIHsgcmV0dXJuICptX2RhdGE7IH0K
LSAgICBUZXh0dXJlTWFwcGVyR0xEYXRhKiBtX2RhdGE7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBt
X2NvbnRleHQ7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQzRDsKKyAg
ICBUZXh0dXJlTWFwcGVyR0xEYXRhKiBtX2RhdGE7CiAgICAgQ2xpcFN0YWNrIG1fY2xpcFN0YWNr
OwogICAgIGJvb2wgbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmc7CiAKQEAgLTEzNSw3
ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbml0aWFsaXplU3RlbmNpbCgpOwogICAgIH5C
aXRtYXBUZXh0dXJlR0woKTsKICAgICB2aXJ0dWFsIHVpbnQzMl90IGlkKCkgY29uc3QgeyByZXR1
cm4gbV9pZDsgfQotICAgIHVpbnQzMl90IHRleHR1cmVUYXJnZXQoKSBjb25zdCB7IHJldHVybiBH
TF9URVhUVVJFXzJEOyB9CisgICAgdWludDMyX3QgdGV4dHVyZVRhcmdldCgpIGNvbnN0IHsgcmV0
dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOyB9CiAgICAgSW50U2l6ZSB0ZXh0dXJl
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVNpemU7IH0KICAgICB2b2lkIHNldFRleHR1
cmVNYXBwZXIoVGV4dHVyZU1hcHBlckdMKiB0ZXhtYXApIHsgbV90ZXh0dXJlTWFwcGVyID0gdGV4
bWFwOyB9CiAgICAgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNvbnN0IEludFJlY3QmLCBj
b25zdCBJbnRQb2ludCYpOwpAQCAtMTQ3LDIwICsxNDksMjIgQEAgcHVibGljOgogI2VuZGlmCiAK
IHByaXZhdGU6Ci0gICAgR0x1aW50IG1faWQ7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2lkOwog
ICAgIEludFNpemUgbV90ZXh0dXJlU2l6ZTsKICAgICBJbnRSZWN0IG1fZGlydHlSZWN0OwotICAg
IEdMdWludCBtX2ZibzsKLSAgICBHTHVpbnQgbV9yYm87CisgICAgUGxhdGZvcm0zRE9iamVjdCBt
X2ZibzsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fcmJvOwogICAgIGJvb2wgbV9zaG91bGRDbGVh
cjsKLSAgICBUZXh0dXJlTWFwcGVyR0wqIG1fdGV4dHVyZU1hcHBlcjsKICAgICBUZXh0dXJlTWFw
cGVyR0w6OkNsaXBTdGFjayBtX2NsaXBTdGFjazsKLSAgICBCaXRtYXBUZXh0dXJlR0woKQorICAg
IFRleHR1cmVNYXBwZXJHTCogbV90ZXh0dXJlTWFwcGVyOworCisgICAgQml0bWFwVGV4dHVyZUdM
KCk7CisgICAgQml0bWFwVGV4dHVyZUdMKFRleHR1cmVNYXBwZXJHTCogdGV4dHVyZU1hcHBlcikK
ICAgICAgICAgOiBtX2lkKDApCiAgICAgICAgICwgbV9mYm8oMCkKICAgICAgICAgLCBtX3Jibygw
KQogICAgICAgICAsIG1fc2hvdWxkQ2xlYXIodHJ1ZSkKLSAgICAgICAgLCBtX3RleHR1cmVNYXBw
ZXIoMCkKKyAgICAgICAgLCBtX3RleHR1cmVNYXBwZXIodGV4dHVyZU1hcHBlcikKICAgICB7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAppbmRleCAw
ZmJkYmU5NWNhZjE2NDcwZGQwNjMyZjA0YzE0NGI4MjBiNmU4YmIzLi5hMDYzZTZiMjJjZTlkYTg0
YWNiMWI3OWFkNmFlNDE4NWVmMTIyNjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5jcHAKQEAgLTMwLDYyICszMCw0OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLSNpZm5kZWYgVEVYTUFQX09QRU5HTF9FU18yCi0jZGVmaW5lIE9FUzJfUFJFQ0lTSU9OX0RF
RklOSVRJT05TIFwKLSAgICAiI2RlZmluZSBsb3dwXG4jZGVmaW5lIGhpZ2hwXG4iCi0jZGVmaW5l
IE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFVTFRfUFJFQ0lTSU9OCi0jZWxzZQotI2RlZmluZSBP
RVMyX1BSRUNJU0lPTl9ERUZJTklUSU9OUwotI2RlZmluZSBPRVMyX0ZSQUdNRU5UX1NIQURFUl9E
RUZBVUxUX1BSRUNJU0lPTiBcCi0gICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyBcbiIKLSNl
bmRpZgotCi0jZGVmaW5lIFNUUklOR0lGWV9WQUwoc3JjLi4uKSAjc3JjCi0jZGVmaW5lIFZFUlRF
WF9TSEFERVIoc3JjLi4uKSBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9OU1wKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNUUklOR0lGWV9WQUwoc3JjKQotI2RlZmluZSBGUkFHTUVOVF9T
SEFERVIoc3JjLi4uKSBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9OU1wKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgT0VTMl9GUkFHTUVOVF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT05c
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUklOR0lGWV9WQUwoc3JjKQorI2Rl
ZmluZSBTVFJJTkdJRlkoc3JjLi4uKSAjc3JjCiAKIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVu
dFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrID0KLSAgICBGUkFHTUVOVF9TSEFERVIoCisgICAg
U1RSSU5HSUZZKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgdW5p
Zm9ybSBzYW1wbGVyMkQgc19zb3VyY2U7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfbWFz
azsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKLSAgICAgICAgdmFyeWlu
ZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVj
MiB2X21hc2tUZXhDb29yZDsKKyAgICAgICAgdW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7CisgICAg
ICAgIHZhcnlpbmcgdmVjMiB2X3NvdXJjZVRleENvb3JkOworICAgICAgICB2YXJ5aW5nIHZlYzIg
dl9tYXNrVGV4Q29vcmQ7CiAgICAgICAgIHZvaWQgbWFpbih2b2lkKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoc19zb3VyY2UsIHZfc291cmNlVGV4
Q29vcmQpOwotICAgICAgICAgICAgbG93cCB2ZWM0IG1hc2tDb2xvciA9IHRleHR1cmUyRChzX21h
c2ssIHZfbWFza1RleENvb3JkKTsKLSAgICAgICAgICAgIGxvd3AgZmxvYXQgZnJhZ21lbnRBbHBo
YSA9IHVfb3BhY2l0eSAqIG1hc2tDb2xvci5hOworICAgICAgICAgICAgdmVjNCBjb2xvciA9IHRl
eHR1cmUyRChzX3NvdXJjZSwgdl9zb3VyY2VUZXhDb29yZCk7CisgICAgICAgICAgICB2ZWM0IG1h
c2tDb2xvciA9IHRleHR1cmUyRChzX21hc2ssIHZfbWFza1RleENvb3JkKTsKKyAgICAgICAgICAg
IGZsb2F0IGZyYWdtZW50QWxwaGEgPSB1X29wYWNpdHkgKiBtYXNrQ29sb3IuYTsKICAgICAgICAg
ICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29sb3Iu
YSAqIGZyYWdtZW50QWxwaGEpOwogICAgICAgICB9CiAgICAgKTsKIAogc3RhdGljIGNvbnN0IGNo
YXIqIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdE9wYWNpdHlBbmRNYXNrID0KLSAgICBGUkFHTUVO
VF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9h
dDsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfc291cmNlOwogICAgICAgICB1bmlm
b3JtIHNhbXBsZXIyRFJlY3Qgc19tYXNrOwotICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9v
cGFjaXR5OwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAg
ICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfbWFza1RleENvb3JkOworICAgICAgICB1bmlmb3Jt
IGZsb2F0IHVfb3BhY2l0eTsKKyAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7
CisgICAgICAgIHZhcnlpbmcgdmVjMiB2X21hc2tUZXhDb29yZDsKICAgICAgICAgdm9pZCBtYWlu
KHZvaWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUy
RFJlY3Qoc19zb3VyY2UsIHZfc291cmNlVGV4Q29vcmQpOwotICAgICAgICAgICAgbG93cCB2ZWM0
IG1hc2tDb2xvciA9IHRleHR1cmUyRFJlY3Qoc19tYXNrLCB2X21hc2tUZXhDb29yZCk7Ci0gICAg
ICAgICAgICBsb3dwIGZsb2F0IGZyYWdtZW50QWxwaGEgPSB1X29wYWNpdHkgKiBtYXNrQ29sb3Iu
YTsKKyAgICAgICAgICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkRSZWN0KHNfc291cmNlLCB2X3Nv
dXJjZVRleENvb3JkKTsKKyAgICAgICAgICAgIHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJEUmVj
dChzX21hc2ssIHZfbWFza1RleENvb3JkKTsKKyAgICAgICAgICAgIGZsb2F0IGZyYWdtZW50QWxw
aGEgPSB1X29wYWNpdHkgKiBtYXNrQ29sb3IuYTsKICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9
IHZlYzQoY29sb3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29sb3IuYSAqIGZyYWdtZW50QWxwaGEp
OwogICAgICAgICB9CiAgICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNv
dXJjZU9wYWNpdHlBbmRNYXNrID0KLSAgICBWRVJURVhfU0hBREVSKAorICAgIFNUUklOR0lGWSgK
ICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OwotICAgICAgICB1bmlmb3JtIGxvd3AgZmxv
YXQgdV9mbGlwOworICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZmxpcDsKICAgICAgICAgYXR0cmli
dXRlIHZlYzQgYV92ZXJ0ZXg7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRl
eENvb3JkOwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9tYXNrVGV4Q29vcmQ7CisgICAg
ICAgIHZhcnlpbmcgdmVjMiB2X3NvdXJjZVRleENvb3JkOworICAgICAgICB2YXJ5aW5nIHZlYzIg
dl9tYXNrVGV4Q29vcmQ7CiAgICAgICAgIHZvaWQgbWFpbih2b2lkKQogICAgICAgICB7CiAgICAg
ICAgICAgICB2X3NvdXJjZVRleENvb3JkID0gdmVjMihhX3ZlcnRleC54LCBtaXgoYV92ZXJ0ZXgu
eSwgMS4gLSBhX3ZlcnRleC55LCB1X2ZsaXApKTsKQEAgLTk1LDIyICs4MiwyNCBAQCBzdGF0aWMg
Y29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sgPQogICAgICk7CiAK
IHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVNpbXBsZSA9Ci0gICAgRlJB
R01FTlRfU0hBREVSKAorICAgIFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAg
ZmxvYXQ7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwotICAgICAgICB1bmlm
b3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9z
b3VyY2VUZXhDb29yZDsKKyAgICAgICAgdW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7CisgICAgICAg
IHZhcnlpbmcgdmVjMiB2X3NvdXJjZVRleENvb3JkOwogICAgICAgICB2b2lkIG1haW4odm9pZCkK
ICAgICAgICAgewotICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHNfc291
cmNlLCB2X3NvdXJjZVRleENvb3JkKTsKKyAgICAgICAgICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJl
MkQoc19zb3VyY2UsIHZfc291cmNlVGV4Q29vcmQpOwogICAgICAgICAgICAgZ2xfRnJhZ0NvbG9y
ID0gdmVjNChjb2xvci5yZ2IgKiB1X29wYWNpdHksIGNvbG9yLmEgKiB1X29wYWNpdHkpOwogICAg
ICAgICB9CiAgICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNl
QW50aWFsaWFzaW5nTm9NYXNrID0KLSAgICBGUkFHTUVOVF9TSEFERVIoCisgICAgU1RSSU5HSUZZ
KAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgdW5pZm9ybSBzYW1w
bGVyMkQgc19zb3VyY2U7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENv
b3JkOwotICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OworICAgICAgICB2YXJ5
aW5nIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKKyAgICAgICAgdW5pZm9ybSBmbG9hdCB1X29wYWNp
dHk7CiAgICAgICAgIHVuaWZvcm0gdmVjMyB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFj
ZVs4XTsKICAgICAgICAgdm9pZCBtYWluKCkKICAgICAgICAgewpAQCAtMTQ1LDI0ICsxMzQsMjUg
QEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlQW50aWFsaWFzaW5nTm9N
YXNrID0KICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VS
ZWN0U2ltcGxlID0KLSAgICBGUkFHTUVOVF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAorICAgICAg
ICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0
IHNfc291cmNlOwotICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1X3RleHR1cmVTaXplOwotICAg
ICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwotICAgICAgICB2YXJ5aW5nIGhpZ2hw
IHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKKyAgICAgICAgdW5pZm9ybSB2ZWMyIHVfdGV4dHVyZVNp
emU7CisgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OworICAgICAgICB2YXJ5aW5nIHZl
YzIgdl9zb3VyY2VUZXhDb29yZDsKICAgICAgICAgdm9pZCBtYWluKHZvaWQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRFJlY3Qoc19zb3VyY2UsIHVf
dGV4dHVyZVNpemUgKiB2X3NvdXJjZVRleENvb3JkKTsKKyAgICAgICAgICAgIHZlYzQgY29sb3Ig
PSB0ZXh0dXJlMkRSZWN0KHNfc291cmNlLCB1X3RleHR1cmVTaXplICogdl9zb3VyY2VUZXhDb29y
ZCk7CiAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIHVfb3BhY2l0
eSwgY29sb3IuYSAqIHVfb3BhY2l0eSk7CiAgICAgICAgIH0KICAgICApOwogCiBzdGF0aWMgY29u
c3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlU2ltcGxlID0KLSAgICBWRVJURVhfU0hBREVSKAor
ICAgIFNUUklOR0lGWSgKICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OwotICAgICAgICB1
bmlmb3JtIGxvd3AgZmxvYXQgdV9mbGlwOworICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZmxpcDsK
ICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAg
dmVjMiB2X3NvdXJjZVRleENvb3JkOworICAgICAgICB2YXJ5aW5nIHZlYzIgdl9zb3VyY2VUZXhD
b29yZDsKICAgICAgICAgdm9pZCBtYWluKHZvaWQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZf
c291cmNlVGV4Q29vcmQgPSB2ZWMyKGFfdmVydGV4LngsIG1peChhX3ZlcnRleC55LCAxLiAtIGFf
dmVydGV4LnksIHVfZmxpcCkpOwpAQCAtMTcxLDcgKzE2MSw3IEBAIHN0YXRpYyBjb25zdCBjaGFy
KiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUgPQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFy
KiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTb2xpZENvbG9yID0KLSAgICBWRVJURVhfU0hBREVSKAorICAg
IFNUUklOR0lGWSgKICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OwogICAgICAgICBhdHRy
aWJ1dGUgdmVjNCBhX3ZlcnRleDsKICAgICAgICAgdm9pZCBtYWluKHZvaWQpCkBAIC0xODIsNyAr
MTcyLDggQEAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNvbGlkQ29sb3Ig
PQogCiAKIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVNvbGlkQ29sb3Ig
PQotICAgIFZFUlRFWF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAorICAgICAgICBwcmVjaXNpb24g
bWVkaXVtcCBmbG9hdDsKICAgICAgICAgdW5pZm9ybSB2ZWM0IHVfY29sb3I7CiAgICAgICAgIHZv
aWQgbWFpbih2b2lkKQogICAgICAgICB7CkBAIC0yMTIsMjIgKzIwMywyMiBAQCBQYXNzUmVmUHRy
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
Z2V0U2hhZGVyUHJvZwogCiAgICAgc3dpdGNoIChzaGFkZXJUeXBlKSB7CiAgICAgY2FzZSBTaW1w
bGU6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6
Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNp
bXBsZTo6Y3JlYXRlKG1fdGV4dHVyZU1hcHBlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
UmVjdFNpbXBsZToKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
UmVjdFNpbXBsZTo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmNyZWF0ZShtX3RleHR1cmVNYXBwZXIpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEFudGlhbGlhc2luZ05vTWFzazoKLSAgICAgICAgcHJvZ3JhbSA9IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpjcmVhdGUoKTsKKyAg
ICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9N
YXNrOjpjcmVhdGUobV90ZXh0dXJlTWFwcGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBP
cGFjaXR5QW5kTWFzazoKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtT3BhY2l0eUFuZE1hc2s6OmNyZWF0ZSgpOworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRlKG1fdGV4dHVyZU1hcHBlcik7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUmVjdE9wYWNpdHlBbmRNYXNrOgotICAgICAgICBw
cm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OmNy
ZWF0ZSgpOworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0
T3BhY2l0eUFuZE1hc2s6OmNyZWF0ZShtX3RleHR1cmVNYXBwZXIpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFNvbGlkQ29sb3I6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OmNyZWF0ZSgpOworICAgICAgICBwcm9ncmFtID0gVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpjcmVhdGUobV90ZXh0dXJlTWFwcGVyKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnZhbGlkOgogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTIzNiw4ICsyMjcsOSBAQCBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZwogICAg
IHJldHVybiBwcm9ncmFtOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25z
dCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSkKLSAgICA6IG1faWQoMCkKK1RleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVy
R0wqIHRleHR1cmVNYXBwZXIsIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3Qg
Y2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpCisgICAgOiBtX3RleHR1cmVNYXBwZXIodGV4dHVy
ZU1hcHBlcikKKyAgICAsIG1faWQoMCkKICAgICAsIG1fdmVydGV4QXR0cmliKDApCiAgICAgLCBt
X3ZlcnRleFNoYWRlcigwKQogICAgICwgbV9mcmFnbWVudFNoYWRlcigwKQpAQCAtMjU2LDQ2ICsy
NDgsNDggQEAgdm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aW5pdGlhbGl6ZVByb2dy
YW0oKQogewogICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVByb2dyYW0gPSB2ZXJ0
ZXhTaGFkZXJTb3VyY2UoKTsKICAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVBy
b2dyYW0gPSBmcmFnbWVudFNoYWRlclNvdXJjZSgpOwotICAgIEdMdWludCB2ZXJ0ZXhTaGFkZXIg
PSBnbENyZWF0ZVNoYWRlcihHTF9WRVJURVhfU0hBREVSKTsKLSAgICBHTHVpbnQgZnJhZ21lbnRT
aGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIpOwotICAgIGdsU2hhZGVy
U291cmNlKHZlcnRleFNoYWRlciwgMSwgJnZlcnRleFNoYWRlclNvdXJjZVByb2dyYW0sIDApOwot
ICAgIGdsU2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCAxLCAmZnJhZ21lbnRTaGFkZXJTb3Vy
Y2VQcm9ncmFtLCAwKTsKLSAgICBHTHVpbnQgcHJvZ3JhbUlEID0gZ2xDcmVhdGVQcm9ncmFtKCk7
Ci0gICAgZ2xDb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7Ci0gICAgZ2xDb21waWxlU2hhZGVy
KGZyYWdtZW50U2hhZGVyKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fdGV4
dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHZl
cnRleFNoYWRlciA9IGNvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6VkVS
VEVYX1NIQURFUik7CisgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNoYWRlciA9IGNvbnRl
eHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKTsKKyAg
ICBjb250ZXh0LT5zaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCB2ZXJ0ZXhTaGFkZXJTb3VyY2VQ
cm9ncmFtKTsKKyAgICBjb250ZXh0LT5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdt
ZW50U2hhZGVyU291cmNlUHJvZ3JhbSk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtSUQg
PSBjb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7CisgICAgY29udGV4dC0+Y29tcGlsZVNoYWRlcih2
ZXJ0ZXhTaGFkZXIpOworICAgIGNvbnRleHQtPmNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIp
OwogCi0gICAgZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFkZXIpOwotICAgIGds
QXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsTGlua1Byb2dy
YW0ocHJvZ3JhbUlEKTsKKyAgICBjb250ZXh0LT5hdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0
ZXhTaGFkZXIpOworICAgIGNvbnRleHQtPmF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50
U2hhZGVyKTsKKyAgICBjb250ZXh0LT5saW5rUHJvZ3JhbShwcm9ncmFtSUQpOwogCi0gICAgbV92
ZXJ0ZXhBdHRyaWIgPSBnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdmVydGV4Iik7
CisgICAgbV92ZXJ0ZXhBdHRyaWIgPSBjb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFt
SUQsICJhX3ZlcnRleCIpOwogCiAgICAgbV9pZCA9IHByb2dyYW1JRDsKICAgICBtX3ZlcnRleFNo
YWRlciA9IHZlcnRleFNoYWRlcjsKICAgICBtX2ZyYWdtZW50U2hhZGVyID0gZnJhZ21lbnRTaGFk
ZXI7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldFVuaWZvcm1Mb2Nh
dGlvbihHTGludCAmdmFyaWFibGUsIGNvbnN0IGNoYXIqIG5hbWUpCit2b2lkIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjpnZXRVbmlmb3JtTG9jYXRpb24oR0MzRGludCAmdmFyaWFibGUsIGNv
bnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgdmFyaWFibGUgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbiht
X2lkLCBuYW1lKTsKKyAgICB2YXJpYWJsZSA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250
ZXh0M0QoKS0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1faWQsIG5hbWUpOwogICAgIEFTU0VSVCh2YXJp
YWJsZSA+PSAwKTsKIH0KIAogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06On5UZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSgpCiB7Ci0gICAgR0x1aW50IHByb2dyYW1JRCA9IG1faWQ7CisgICAg
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtSUQgPSBtX2lkOwogICAgIGlmICghcHJvZ3JhbUlEKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBnbERldGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fdmVydGV4
U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7Ci0gICAgZ2xEZXRh
Y2hTaGFkZXIocHJvZ3JhbUlELCBtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRl
cihtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbUlEKTsKKyAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3ND
b250ZXh0M0QoKTsKKyAgICBjb250ZXh0LT5kZXRhY2hTaGFkZXIocHJvZ3JhbUlELCBtX3ZlcnRl
eFNoYWRlcik7CisgICAgY29udGV4dC0+ZGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKKyAg
ICBjb250ZXh0LT5kZXRhY2hTaGFkZXIocHJvZ3JhbUlELCBtX2ZyYWdtZW50U2hhZGVyKTsKKyAg
ICBjb250ZXh0LT5kZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7CisgICAgY29udGV4dC0+
ZGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKQotICAgIDogVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNo
YWRlclNvdXJjZVNpbXBsZSkKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZShUZXh0dXJlTWFwcGVyR0wqIHRleHR1cmVNYXBw
ZXIpCisgICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh0ZXh0dXJlTWFwcGVyLCB2ZXJ0
ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291cmNlU2ltcGxlKQogewogICAg
IGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fZmxpcExvY2F0
aW9uLCAidV9mbGlwIik7CkBAIC0zMDQsMTYgKzI5OCwxNiBAQCBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKQogICAgIGdl
dFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwogfQogCi1U
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU29saWRDb2xvcigpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0
ZXhTaGFkZXJTb3VyY2VTb2xpZENvbG9yLCBmcmFnbWVudFNoYWRlclNvdXJjZVNvbGlkQ29sb3Ip
CitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU29saWRDb2xvcihUZXh0dXJlTWFwcGVyR0wqIHRleHR1cmVNYXBwZXIpCisgICAg
OiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh0ZXh0dXJlTWFwcGVyLCB2ZXJ0ZXhTaGFkZXJT
b3VyY2VTb2xpZENvbG9yLCBmcmFnbWVudFNoYWRlclNvdXJjZVNvbGlkQ29sb3IpCiB7CiAgICAg
aW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2Nh
dGlvbiwgInVfbWF0cml4Iik7CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fY29sb3JMb2NhdGlv
biwgInVfY29sb3IiKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxl
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKQotICAgIDogVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRl
clNvdXJjZVJlY3RTaW1wbGUpCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZShUZXh0dXJlTWFwcGVyR0wqIHRl
eHR1cmVNYXBwZXIpCisgICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh0ZXh0dXJlTWFw
cGVyLCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdFNp
bXBsZSkKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVuaWZvcm1Mb2NhdGlv
bihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKQEAgLTMyMyw4ICszMTcsOCBAQCBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtUmVjdFNpbXBsZSgpCiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9u
LCAidV9vcGFjaXR5Iik7CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFu
ZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKQotICAgIDog
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1h
c2ssIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2spCitUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNp
dHlBbmRNYXNrKFRleHR1cmVNYXBwZXJHTCogdGV4dHVyZU1hcHBlcikKKyAgICA6IFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKHRleHR1cmVNYXBwZXIsIHZlcnRleFNoYWRlclNvdXJjZU9wYWNp
dHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrKQogewogICAgIGlu
aXRpYWxpemVQcm9ncmFtKCk7CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRp
b24sICJ1X21hdHJpeCIpOwpAQCAtMzM0LDggKzMyOCw4IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFu
ZE1hCiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5
Iik7CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaygpCi0gICAgOiBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzaywg
ZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0T3BhY2l0eUFuZE1hc2spCitUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1S
ZWN0T3BhY2l0eUFuZE1hc2soVGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVyKQorICAgIDog
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odGV4dHVyZU1hcHBlciwgdmVydGV4U2hhZGVyU291
cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdE9wYWNpdHlBbmRNYXNr
KQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1f
bWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwpAQCAtMzQ1LDggKzMzOSw4IEBAIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVJlY3RPcGFjCiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9u
LCAidV9vcGFjaXR5Iik7CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFz
aW5nTm9NYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaygp
Ci0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1w
bGUsIGZyYWdtZW50U2hhZGVyU291cmNlQW50aWFsaWFzaW5nTm9NYXNrKQorVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtQW50aWFsaWFzaW5nTm9NYXNrKFRleHR1cmVNYXBwZXJHTCogdGV4dHVyZU1hcHBlcikKKyAg
ICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHRleHR1cmVNYXBwZXIsIHZlcnRleFNoYWRl
clNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNpbmdOb01hc2spCiB7
CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRy
aXhMb2NhdGlvbiwgInVfbWF0cml4Iik7CkBAIC0zNTYsOSArMzUwLDkgQEAgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtQW50aWFsaWEKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9mbGlwTG9jYXRpb24sICJ1X2Zs
aXAiKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyKCkKK1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcihUZXh0dXJlTWFwcGVyR0wqIHRleHR1cmVNYXBwZXIpCisgICAgOiBtX3RleHR1
cmVNYXBwZXIodGV4dHVyZU1hcHBlcikKIHsKLSAgICBBU1NFUlQoaW5pdGlhbGl6ZU9wZW5HTFNo
aW1zKCkpOwogfQogCiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6flRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyKCkKQEAgLTM3MywyMSArMzY3LDIzIEBAIFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKQogCiBTdGFuZGFyZEZpbHRlclBy
b2dyYW06On5TdGFuZGFyZEZpbHRlclByb2dyYW0oKQogewotICAgIGdsRGV0YWNoU2hhZGVyKG1f
aWQsIG1fdmVydGV4U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7
Ci0gICAgZ2xEZXRhY2hTaGFkZXIobV9pZCwgbV9mcmFnbWVudFNoYWRlcik7Ci0gICAgZ2xEZWxl
dGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7Ci0gICAgZ2xEZWxldGVQcm9ncmFtKG1faWQpOwor
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGlj
c0NvbnRleHQzRCgpOworICAgIGNvbnRleHQtPmRldGFjaFNoYWRlcihtX2lkLCBtX3ZlcnRleFNo
YWRlcik7CisgICAgY29udGV4dC0+ZGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKKyAgICBj
b250ZXh0LT5kZXRhY2hTaGFkZXIobV9pZCwgbV9mcmFnbWVudFNoYWRlcik7CisgICAgY29udGV4
dC0+ZGVsZXRlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOworICAgIGNvbnRleHQtPmRlbGV0ZVBy
b2dyYW0obV9pZCk7CiB9CiAKLVN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQ
cm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNz
KQotICAgIDogbV9pZCgwKQorU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclBy
b2dyYW0oVGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVyLCBGaWx0ZXJPcGVyYXRpb246Ok9w
ZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKKyAgICA6IG1fdGV4dHVyZU1hcHBlcih0
ZXh0dXJlTWFwcGVyKQorICAgICwgbV9pZCgwKQogewogICAgIGNvbnN0IGNoYXIqIHZlcnRleFNo
YWRlclNvdXJjZSA9Ci0gICAgICAgICAgICBWRVJURVhfU0hBREVSKAorICAgICAgICAgICAgU1RS
SU5HSUZZKAogICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwogICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdGV4Q29vcmQ7Ci0gICAgICAgICAgICAgICAgdmFy
eWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7CisgICAgICAgICAgICAgICAgdmFyeWluZyB2ZWMy
IHZfdGV4Q29vcmQ7CiAgICAgICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCiAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICB2X3RleENvb3JkID0gdmVjMihhX3RleENvb3Jk
KTsKQEAgLTM5NiwxMCArMzkyLDkgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZp
bHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAg
ICAgICk7CiAKICNkZWZpbmUgU1RBTkRBUkRfRklMVEVSKHguLi4pIFwKLSAgICAgICAgT0VTMl9Q
UkVDSVNJT05fREVGSU5JVElPTlNcCi0gICAgICAgIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFV
TFRfUFJFQ0lTSU9OXAotICAgICAgICAidmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7XG4i
XAotICAgICAgICAidW5pZm9ybSBoaWdocCBmbG9hdCB1X2Ftb3VudDtcbiJcCisgICAgICAgICJw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiJcCisgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhD
b29yZDtcbiJcCisgICAgICAgICJ1bmlmb3JtIGZsb2F0IHVfYW1vdW50O1xuIlwKICAgICAgICAg
InVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbiJcCiAgICAgICAgICN4XAogICAgICAgICAi
dm9pZCBtYWluKHZvaWQpXG4geyBnbF9GcmFnQ29sb3IgPSBzaGFkZSh0ZXh0dXJlMkQodV90ZXh0
dXJlLCB2X3RleENvb3JkKSk7IH0iCkBAIC00MDgsOSArNDAzLDkgQEAgU3RhbmRhcmRGaWx0ZXJQ
cm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25U
eXBlIHR5cGUKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
R1JBWVNDQUxFOgogICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRF
UigKLSAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAg
ICAgICB2ZWM0IHNoYWRlKHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgbG93cCBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3VudDsKKyAgICAgICAgICAgICAgICBm
bG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3VudDsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVj
NCgoMC4yMTI2ICsgMC43ODc0ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUyIC0gMC43MTUy
ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50KSAqIGNvbG9y
LmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjEyNiAtIDAuMjEyNiAqIGFtb3Vu
dCkgKiBjb2xvci5yICsgKDAuNzE1MiArIDAuMjg0OCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAu
MDcyMiAtIDAuMDcyMiAqIGFtb3VudCkgKiBjb2xvci5iLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICgwLjIxMjYgLSAwLjIxMjYgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgLSAw
LjcxNTIgKiBhbW91bnQpICogY29sb3IuZyArICgwLjA3MjIgKyAwLjkyNzggKiBhbW91bnQpICog
Y29sb3IuYiwKQEAgLTQyMCw5ICs0MTUsOSBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5k
YXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CiAgICAgICAgIGZy
YWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAgbG93cCB2
ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKKyAgICAgICAgICAgIHZlYzQgc2hhZGUodmVjNCBj
b2xvcikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IGFtb3VudCA9
IDEuMCAtIHVfYW1vdW50OworICAgICAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IDEuMCAtIHVf
YW1vdW50OwogICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KCgwLjM5MyArIDAuNjA3ICogYW1v
dW50KSAqIGNvbG9yLnIgKyAoMC43NjkgLSAwLjc2OSAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAu
MTg5IC0gMC4xODkgKiBhbW91bnQpICogY29sb3IuYiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoMC4zNDkgLSAwLjM0OSAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNjg2ICsgMC4zMTQg
KiBhbW91bnQpICogY29sb3IuZyArICgwLjE2OCAtIDAuMTY4ICogYW1vdW50KSAqIGNvbG9yLmIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjcyIC0gMC4yNzIgKiBhbW91bnQpICog
Y29sb3IuciArICgwLjUzNCAtIDAuNTM0ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xMzEgKyAw
Ljg2OSAqIGFtb3VudCkgKiBjb2xvci5iLApAQCAtNDMyLDcgKzQyNyw3IEBAIFN0YW5kYXJkRmls
dGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0
aW9uVHlwZSB0eXBlCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpT
QVRVUkFURToKICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIo
Ci0gICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICAg
ICAgdmVjNCBzaGFkZSh2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IHJldHVybiB2ZWM0KCgwLjIxMyArIDAuNzg3ICogdV9hbW91bnQpICogY29sb3IuciArICgwLjcx
NSAtIDAuNzE1ICogdV9hbW91bnQpICogY29sb3IuZyArICgwLjA3MiAtIDAuMDcyICogdV9hbW91
bnQpICogY29sb3IuYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yMTMgLSAwLjIx
MyAqIHVfYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgKyAwLjI4NSAqIHVfYW1vdW50KSAqIGNv
bG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVfYW1vdW50KSAqIGNvbG9yLmIsCkBAIC00NDMsMTEg
KzQzOCwxMSBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShG
aWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICBicmVhazsKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKICAgICAgICAgZnJhZ21lbnRTaGFkZXJT
b3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93
cCB2ZWM0IGNvbG9yKQorICAgICAgICAgICAgdmVjNCBzaGFkZSh2ZWM0IGNvbG9yKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGhpZ2hwIGZsb2F0IHBpID0gMy4xNDE1OTI2NTM1ODk3
OTMyMzg0NjsKLSAgICAgICAgICAgICAgICBoaWdocCBmbG9hdCBjID0gY29zKHVfYW1vdW50ICog
cGkgLyAxODAuMCk7Ci0gICAgICAgICAgICAgICAgaGlnaHAgZmxvYXQgcyA9IHNpbih1X2Ftb3Vu
dCAqIHBpIC8gMTgwLjApOworICAgICAgICAgICAgICAgIGZsb2F0IHBpID0gMy4xNDE1OTI2NTM1
ODk3OTMyMzg0NjsKKyAgICAgICAgICAgICAgICBmbG9hdCBjID0gY29zKHVfYW1vdW50ICogcGkg
LyAxODAuMCk7CisgICAgICAgICAgICAgICAgZmxvYXQgcyA9IHNpbih1X2Ftb3VudCAqIHBpIC8g
MTgwLjApOwogICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KGNvbG9yLnIgKiAoMC4yMTMgKyBj
ICogMC43ODcgLSBzICogMC4yMTMpICsgY29sb3IuZyAqICgwLjcxNSAtIGMgKiAwLjcxNSAtIHMg
KiAwLjcxNSkgKyBjb2xvci5iICogKDAuMDcyIC0gYyAqIDAuMDcyICsgcyAqIDAuOTI4KSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5yICogKDAuMjEzIC0gYyAqIDAuMjEzICsg
cyAqIDAuMTQzKSArIGNvbG9yLmcgKiAoMC43MTUgKyBjICogMC4yODUgKyBzICogMC4xNDApICsg
Y29sb3IuYiAqICgwLjA3MiAtIGMgKiAwLjA3MiAtIHMgKiAwLjI4MyksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29sb3IuciAqICgwLjIxMyAtIGMgKiAwLjIxMyAtIHMgKiAwLjc4Nykg
KyAgY29sb3IuZyAqICgwLjcxNSAtIGMgKiAwLjcxNSArIHMgKiAwLjcxNSkgKyBjb2xvci5iICog
KDAuMDcyICsgYyAqIDAuOTI4ICsgcyAqIDAuMDcyKSwKQEAgLTQ1Nyw4ICs0NTIsOCBAQCBTdGFu
ZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246
Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6SU5WRVJUOgogICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJ
TFRFUigKLSAgICAgICAgICAgIGxvd3AgZmxvYXQgaW52ZXJ0KGxvd3AgZmxvYXQgbikgeyByZXR1
cm4gKDEuMCAtIG4pICogdV9hbW91bnQgKyBuICogKDEuMCAtIHVfYW1vdW50KTsgfQotICAgICAg
ICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKKyAgICAgICAgICAgIGZsb2F0
IGludmVydChmbG9hdCBuKSB7IHJldHVybiAoMS4wIC0gbikgKiB1X2Ftb3VudCArIG4gKiAoMS4w
IC0gdV9hbW91bnQpOyB9CisgICAgICAgICAgICB2ZWM0IHNoYWRlKHZlYzQgY29sb3IpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoaW52ZXJ0KGNvbG9yLnIpLCBp
bnZlcnQoY29sb3IuZyksIGludmVydChjb2xvci5iKSwgY29sb3IuYSk7CiAgICAgICAgICAgICB9
CkBAIC00NjYsNyArNDYxLDcgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRl
clByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CiAgICAgICAgIGZyYWdt
ZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAgbG93cCB2ZWM0
IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKKyAgICAgICAgICAgIHZlYzQgc2hhZGUodmVjNCBjb2xv
cikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChjb2xvci5yZ2Ig
KiAoMS4wICsgdV9hbW91bnQpLCBjb2xvci5hKTsKICAgICAgICAgICAgIH0KQEAgLTQ3NCw4ICs0
NjksOCBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0
ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICBicmVhazsKICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CiAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNl
ID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAgbG93cCBmbG9hdCBjb250cmFzdChsb3dw
IGZsb2F0IG4pIHsgcmV0dXJuIChuIC0gMC41KSAqIHVfYW1vdW50ICsgMC41OyB9Ci0gICAgICAg
ICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICAgICAgZmxvYXQg
Y29udHJhc3QoZmxvYXQgbikgeyByZXR1cm4gKG4gLSAwLjUpICogdV9hbW91bnQgKyAwLjU7IH0K
KyAgICAgICAgICAgIHZlYzQgc2hhZGUodmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gdmVjNChjb250cmFzdChjb2xvci5yKSwgY29udHJhc3QoY29sb3Iu
ZyksIGNvbnRyYXN0KGNvbG9yLmIpLCBjb2xvci5hKTsKICAgICAgICAgICAgIH0KQEAgLTQ4Mywy
MCArNDc4LDIxIEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFt
KEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgogICAgICAgICBmcmFnbWVudFNoYWRlclNv
dXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dw
IHZlYzQgY29sb3IpCisgICAgICAgICAgICB2ZWM0IHNoYWRlKHZlYzQgY29sb3IpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3IuciwgY29sb3IuZywgY29s
b3IuYiwgY29sb3IuYSAqIHVfYW1vdW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6Ci0gICAgICAgIGZy
YWdtZW50U2hhZGVyU291cmNlID0gRlJBR01FTlRfU0hBREVSKAotICAgICAgICAgICAgdmFyeWlu
ZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7Ci0gICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1
X2JsdXJSYWRpdXM7CisgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RSSU5HSUZZKAor
ICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAgICAgICAgICB2YXJ5aW5n
IHZlYzIgdl90ZXhDb29yZDsKKyAgICAgICAgICAgIHVuaWZvcm0gdmVjMiB1X2JsdXJSYWRpdXM7
CiAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7CiAgICAgICAgICAgICB1
bmlmb3JtIGZsb2F0IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhd
OwogCi0gICAgICAgICAgICBsb3dwIHZlYzQgc2FtcGxlQ29sb3IoZmxvYXQgcmFkaXVzKQorICAg
ICAgICAgICAgdmVjNCBzYW1wbGVDb2xvcihmbG9hdCByYWRpdXMpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgKyByYWRpdXMgKiB1X2JsdXJS
YWRpdXM7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUyRCh1X3RleHR1cmUsIGNvb3Jk
KSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYm
IGNvb3JkLnkgPCAxLik7CkBAIC01MjMsMjAgKzUxOSwyMCBAQCBTdGFuZGFyZEZpbHRlclByb2dy
YW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUg
dHlwZQogICAgICAgICBzd2l0Y2ggKHBhc3MpIHsKICAgICAgICAgY2FzZSAwOiB7CiAgICAgICAg
ICAgICAvLyBGaXJzdCBwYXNzOiBob3Jpem9udGFsIGFscGhhIGJsdXIuCi0gICAgICAgICAgICBm
cmFnbWVudFNoYWRlclNvdXJjZSA9IEZSQUdNRU5UX1NIQURFUigKLSAgICAgICAgICAgICAgICB2
YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKLSAgICAgICAgICAgICAgICB1bmlmb3JtIGxv
d3AgZmxvYXQgdV9zaGFkb3dCbHVyUmFkaXVzOwotICAgICAgICAgICAgICAgIHVuaWZvcm0gbG93
cCB2ZWMyIHVfc2hhZG93T2Zmc2V0OworICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2Ug
PSBTVFJJTkdJRlkoCisgICAgICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7Cisg
ICAgICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X3NoYWRvd0JsdXJSYWRpdXM7CisgICAgICAg
ICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfc2hhZG93T2Zmc2V0OwogICAgICAgICAgICAgICAgIHVu
aWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTsKICAgICAgICAgICAgICAgICB1bmlmb3JtIGZsb2F0
IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOwogCi0gICAgICAg
ICAgICAgICAgbG93cCBmbG9hdCBzYW1wbGVBbHBoYShmbG9hdCByYWRpdXMpCisgICAgICAgICAg
ICAgICAgZmxvYXQgc2FtcGxlQWxwaGEoZmxvYXQgcmFkaXVzKQogICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgLSB1X3NoYWRvd09m
ZnNldCArIHZlYzIocmFkaXVzICogdV9zaGFkb3dCbHVyUmFkaXVzLCAwLik7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0ZXh0dXJlMkQodV90ZXh0dXJlLCBjb29yZCkuYSAqIGZsb2F0KGNv
b3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAx
Lik7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgbG93cCBmbG9hdCBzaGFk
b3dCbHVySG9yaXpvbnRhbCgpCisgICAgICAgICAgICAgICAgZmxvYXQgc2hhZG93Qmx1ckhvcml6
b250YWwoKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgdG90
YWwgPSBzYW1wbGVBbHBoYSgwKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07CiAgICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkr
KykgewpAQCAtNTU2LDIxICs1NTIsMjEgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFy
ZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAg
ICAgICAgIH0KICAgICAgICAgY2FzZSAxOiB7CiAgICAgICAgICAgICAvLyBTZWNvbmQgcGFzczog
dmVydGljYWwgYWxwaGEgYmx1ciBhbmQgY29tcG9zaXRlIHdpdGggb3JpZ2luLgotICAgICAgICAg
ICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBGUkFHTUVOVF9TSEFERVIoCi0gICAgICAgICAgICAg
ICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7Ci0gICAgICAgICAgICAgICAgdW5pZm9y
bSBsb3dwIGZsb2F0IHVfc2hhZG93Qmx1clJhZGl1czsKLSAgICAgICAgICAgICAgICB1bmlmb3Jt
IGxvd3AgdmVjNCB1X3NoYWRvd0NvbG9yOworICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UgPSBTVFJJTkdJRlkoCisgICAgICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7
CisgICAgICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X3NoYWRvd0JsdXJSYWRpdXM7CisgICAg
ICAgICAgICAgICAgdW5pZm9ybSB2ZWM0IHVfc2hhZG93Q29sb3I7CiAgICAgICAgICAgICAgICAg
dW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlOwogICAgICAgICAgICAgICAgIHVuaWZvcm0gc2Ft
cGxlcjJEIHVfY29udGVudFRleHR1cmU7CiAgICAgICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1
X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKIAotICAgICAgICAg
ICAgICAgIGxvd3AgZmxvYXQgc2FtcGxlQWxwaGEoZmxvYXQgcikKKyAgICAgICAgICAgICAgICBm
bG9hdCBzYW1wbGVBbHBoYShmbG9hdCByKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgKyB2ZWMyKDAuLCByICogdV9zaGFkb3dC
bHVyUmFkaXVzKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUyRCh1X3RleHR1
cmUsIGNvb3JkKS5hICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29y
ZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICBsb3dwIGZsb2F0IHNoYWRvd0JsdXJWZXJ0aWNhbCgpCisgICAgICAgICAgICAgICAg
ZmxvYXQgc2hhZG93Qmx1clZlcnRpY2FsKCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0IHRvdGFsID0gc2FtcGxlQWxwaGEoMCkgKiB1X2dhdXNzaWFuS2VybmVs
WzBdOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tF
Uk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKQEAgLTU4MSw3ICs1NzcsNyBAQCBTdGFuZGFyZEZpbHRl
clByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlv
blR5cGUgdHlwZQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7CiAgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgbG93cCB2ZWM0IHNvdXJjZU92ZXIobG93cCB2ZWM0
IHNvdXJjZSwgbG93cCB2ZWM0IGRlc3RpbmF0aW9uKQorICAgICAgICAgICAgICAgIHZlYzQgc291
cmNlT3Zlcih2ZWM0IHNvdXJjZSwgdmVjNCBkZXN0aW5hdGlvbikKICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgIC8vIENvbXBvc2l0ZSB0aGUgc2hhZG93IHdpdGggdGhlIG9y
aWdpbmFsIHRleHR1cmUuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2UgKyBkZXN0
aW5hdGlvbiAqICgxLiAtIHNvdXJjZS5hKTsKQEAgLTYwMiwyNiArNTk4LDI2IEBAIFN0YW5kYXJk
RmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3Bl
cmF0aW9uVHlwZSB0eXBlCiAKICAgICBpZiAoIWZyYWdtZW50U2hhZGVyU291cmNlKQogICAgICAg
ICByZXR1cm47Ci0gICAgR0x1aW50IHZlcnRleFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX1ZF
UlRFWF9TSEFERVIpOwotICAgIEdMdWludCBmcmFnbWVudFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVy
KEdMX0ZSQUdNRU5UX1NIQURFUik7Ci0gICAgZ2xTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAx
LCAmdmVydGV4U2hhZGVyU291cmNlLCAwKTsKLSAgICBnbFNoYWRlclNvdXJjZShmcmFnbWVudFNo
YWRlciwgMSwgJmZyYWdtZW50U2hhZGVyU291cmNlLCAwKTsKLSAgICBHTHVpbnQgcHJvZ3JhbUlE
ID0gZ2xDcmVhdGVQcm9ncmFtKCk7Ci0gICAgZ2xDb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7
Ci0gICAgZ2xDb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKKyAgICBHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciA9IGNvbnRleHQtPmNyZWF0ZVNoYWRlcihH
cmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7CisgICAgUGxhdGZvcm0zRE9iamVjdCBm
cmFnbWVudFNoYWRlciA9IGNvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6
RlJBR01FTlRfU0hBREVSKTsKKyAgICBjb250ZXh0LT5zaGFkZXJTb3VyY2UodmVydGV4U2hhZGVy
LCB2ZXJ0ZXhTaGFkZXJTb3VyY2UpOworICAgIGNvbnRleHQtPnNoYWRlclNvdXJjZShmcmFnbWVu
dFNoYWRlciwgZnJhZ21lbnRTaGFkZXJTb3VyY2UpOworICAgIFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbUlEID0gY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOworICAgIGNvbnRleHQtPmNvbXBpbGVT
aGFkZXIodmVydGV4U2hhZGVyKTsKKyAgICBjb250ZXh0LT5jb21waWxlU2hhZGVyKGZyYWdtZW50
U2hhZGVyKTsKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgR0xjaGFyIGxvZ1sxMDBdOwotICAgIEdM
aW50IGxlbjsKLSAgICBnbEdldFNoYWRlckluZm9Mb2coZnJhZ21lbnRTaGFkZXIsIDEwMCwgJmxl
biwgbG9nKTsKKyAgICBTdHJpbmcgbG9nOworICAgIGNvbnRleHQtPmdldFNoYWRlckluZm9Mb2co
ZnJhZ21lbnRTaGFkZXIpOwogICAgIFdURkxvZygmTG9nQ29tcG9zaXRpbmcsICIlc1xuIiwgbG9n
KTsKICNlbmRpZgotICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVydGV4U2hhZGVyKTsK
LSAgICBnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVyKTsKLSAgICBnbExp
bmtQcm9ncmFtKHByb2dyYW1JRCk7CisgICAgY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW1J
RCwgdmVydGV4U2hhZGVyKTsKKyAgICBjb250ZXh0LT5hdHRhY2hTaGFkZXIocHJvZ3JhbUlELCBm
cmFnbWVudFNoYWRlcik7CisgICAgY29udGV4dC0+bGlua1Byb2dyYW0ocHJvZ3JhbUlEKTsKIAot
ICAgIG1fdmVydGV4QXR0cmliID0gZ2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3Zl
cnRleCIpOwotICAgIG1fdGV4Q29vcmRBdHRyaWIgPSBnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dy
YW1JRCwgImFfdGV4Q29vcmQiKTsKLSAgICBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBnbEdl
dFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3RleHR1cmUiKTsKKyAgICBtX3ZlcnRleEF0
dHJpYiA9IGNvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdmVydGV4Iik7
CisgICAgbV90ZXhDb29yZEF0dHJpYiA9IGNvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dy
YW1JRCwgImFfdGV4Q29vcmQiKTsKKyAgICBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBjb250
ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV90ZXh0dXJlIik7CiAgICAgc3dp
dGNoICh0eXBlKSB7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CkBAIC02MzEsMjEgKzYyNywyMSBAQCBTdGFuZGFy
ZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9w
ZXJhdGlvblR5cGUgdHlwZQogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgog
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6T1BBQ0lUWToKLSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCA9IGdsR2V0
VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfYW1vdW50Iik7CisgICAgICAgIG1fdW5pZm9y
bUxvY2F0aW9ucy5hbW91bnQgPSBjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlE
LCAidV9hbW91bnQiKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkJMVVI6Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLnJhZGl1cyA9IGdsR2V0VW5p
Zm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfYmx1clJhZGl1cyIpOwotICAgICAgICBtX3VuaWZv
cm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktlcm5lbCA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW1JRCwgInVfZ2F1c3NpYW5LZXJuZWwiKTsKKyAgICAgICAgbV91bmlmb3JtTG9jYXRpb25z
LmJsdXIucmFkaXVzID0gY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVf
Ymx1clJhZGl1cyIpOworICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktl
cm5lbCA9IGNvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFu
S2VybmVsIik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9Q
X1NIQURPVzoKLSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzID0g
Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dCbHVyUmFkaXVzIik7Ci0g
ICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwgPSBnbEdldFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7CisgICAgICAgIG1f
dW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1cyA9IGNvbnRleHQtPmdldFVuaWZvcm1M
b2NhdGlvbihwcm9ncmFtSUQsICJ1X3NoYWRvd0JsdXJSYWRpdXMiKTsKKyAgICAgICAgbV91bmlm
b3JtTG9jYXRpb25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCA9IGNvbnRleHQtPmdldFVuaWZvcm1M
b2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7CiAgICAgICAgIGlmICghcGFz
cykKLSAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cub2Zmc2V0ID0gZ2xHZXRV
bmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dPZmZzZXQiKTsKKyAgICAgICAgICAg
IG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cub2Zmc2V0ID0gY29udGV4dC0+Z2V0VW5pZm9ybUxv
Y2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93T2Zmc2V0Iik7CiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVy
ZSBpbiB0aGUgc2Vjb25kIHBhc3MsIHRoZSBmaXJzdCBwYXNzIGlzIG9ubHkgYSBob3Jpem9udGFs
IGFscGhhIGJsdXIuCi0gICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbG9y
ID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dDb2xvciIpOwotICAg
ICAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb250ZW50VGV4dHVyZSA9IGdsR2V0
VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfY29udGVudFRleHR1cmUiKTsKKyAgICAgICAg
ICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29sb3IgPSBjb250ZXh0LT5nZXRVbmlmb3Jt
TG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dDb2xvciIpOworICAgICAgICAgICAgbV91bmlm
b3JtTG9jYXRpb25zLnNoYWRvdy5jb250ZW50VGV4dHVyZSA9IGNvbnRleHQtPmdldFVuaWZvcm1M
b2NhdGlvbihwcm9ncmFtSUQsICJ1X2NvbnRlbnRUZXh0dXJlIik7CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTY1Niw5ICs2NTIsOSBAQCBTdGFuZGFyZEZpbHRl
clByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlv
blR5cGUgdHlwZQogICAgIG1fZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNoYWRlcjsKIH0KIAot
UGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6
Y3JlYXRlKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNz
KQorUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IFN0YW5kYXJkRmlsdGVyUHJvZ3Jh
bTo6Y3JlYXRlKFRleHR1cmVNYXBwZXJHTCogdGV4dHVyZU1hcHBlciwgRmlsdGVyT3BlcmF0aW9u
OjpPcGVyYXRpb25UeXBlIHR5cGUsIHVuc2lnbmVkIHBhc3MpCiB7Ci0gICAgUmVmUHRyPFN0YW5k
YXJkRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGFkb3B0UmVmKG5ldyBTdGFuZGFyZEZpbHRlclBy
b2dyYW0odHlwZSwgcGFzcykpOworICAgIFJlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IHBy
b2dyYW0gPSBhZG9wdFJlZihuZXcgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKHRleHR1cmVNYXBwZXIs
IHR5cGUsIHBhc3MpKTsKICAgICBpZiAoIXByb2dyYW0tPm1faWQpCiAgICAgICAgIHJldHVybiAw
OwogCkBAIC02OTQsMjEgKzY5MCwyMiBAQCBzdGF0aWMgZmxvYXQqIGdhdXNzaWFuS2VybmVsKCkK
ICAgICByZXR1cm4ga2VybmVsOwogfQogCi12b2lkIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6cHJl
cGFyZShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwgdW5zaWduZWQgcGFzcywgY29u
c3QgSW50U2l6ZSYgc2l6ZSwgR0x1aW50IGNvbnRlbnRUZXh0dXJlKQordm9pZCBTdGFuZGFyZEZp
bHRlclByb2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVu
c2lnbmVkIHBhc3MsIGNvbnN0IEludFNpemUmIHNpemUsIEdDM0R1aW50IGNvbnRlbnRUZXh0dXJl
KQogewotICAgIGdsVXNlUHJvZ3JhbShtX2lkKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBjb250ZXh0
LT51c2VQcm9ncmFtKG1faWQpOwogICAgIHN3aXRjaCAob3BlcmF0aW9uLmdldE9wZXJhdGlvblR5
cGUoKSkgewogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6CiAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlNFUElBOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFU
RToKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKLSAgICAgICAgZ2xVbmlm
b3JtMWYobV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWND
b2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOworICAgICAg
ICBjb250ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCwgc3RhdGljX2Nh
c3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1v
dW50KCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJU
OgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgogICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpDT05UUkFTVDoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToK
LSAgICAgICAgZ2xVbmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCwgc3RhdGljX2Nh
c3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlv
bikuYW1vdW50KCkpOworICAgICAgICBjb250ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRp
b25zLmFtb3VudCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewogICAgICAgICBjb25zdCBCbHVyRmlsdGVyT3Bl
cmF0aW9uJiBibHVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiY+KG9w
ZXJhdGlvbik7CkBAIC03MjAsOCArNzE3LDggQEAgdm9pZCBTdGFuZGFyZEZpbHRlclByb2dyYW06
OnByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHAKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgcmFkaXVzLnNldFdpZHRoKGZsb2F0VmFsdWVGb3JMZW5n
dGgoYmx1ci5zdGREZXZpYXRpb24oKSwgc2l6ZS53aWR0aCgpKSAvIHNpemUud2lkdGgoKSk7CiAK
LSAgICAgICAgZ2xVbmlmb3JtMmYobV91bmlmb3JtTG9jYXRpb25zLmJsdXIucmFkaXVzLCByYWRp
dXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKTsKLSAgICAgICAgZ2xVbmlmb3JtMWZ2KG1fdW5p
Zm9ybUxvY2F0aW9ucy5ibHVyLmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9X
SURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7CisgICAgICAgIGNvbnRleHQtPnVuaWZvcm0yZihtX3Vu
aWZvcm1Mb2NhdGlvbnMuYmx1ci5yYWRpdXMsIHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0
KCkpOworICAgICAgICBjb250ZXh0LT51bmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVy
LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJu
ZWwoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
RFJPUF9TSEFET1c6IHsKQEAgLTcyOSwyMCArNzI2LDIwIEBAIHZvaWQgU3RhbmRhcmRGaWx0ZXJQ
cm9ncmFtOjpwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0aW9uLCB1bnNpZ25l
ZCBwCiAgICAgICAgIHN3aXRjaCAocGFzcykgewogICAgICAgICBjYXNlIDA6CiAgICAgICAgICAg
ICAvLyBGaXJzdCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBibHVyLgotICAgICAgICAgICAgZ2xVbmlm
b3JtMmYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5vZmZzZXQsIGZsb2F0KHNoYWRvdy5sb2Nh
dGlvbigpLngoKSkgLyBmbG9hdChzaXplLndpZHRoKCkpLCBmbG9hdChzaGFkb3cubG9jYXRpb24o
KS55KCkpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICAgICAgZ2xVbmlmb3JtMWYo
bV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzLCBzaGFkb3cuc3RkRGV2aWF0aW9u
KCkgLyBmbG9hdChzaXplLndpZHRoKCkpKTsKLSAgICAgICAgICAgIGdsVW5pZm9ybTFmdihtX3Vu
aWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFM
Rl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7CisgICAgICAgICAgICBjb250ZXh0LT51bmlmb3Jt
MmYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5vZmZzZXQsIGZsb2F0KHNoYWRvdy5sb2NhdGlv
bigpLngoKSkgLyBmbG9hdChzaXplLndpZHRoKCkpLCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS55
KCkpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAgICAgY29udGV4dC0+dW5pZm9y
bTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1cywgc2hhZG93LnN0ZERldmlh
dGlvbigpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSk7CisgICAgICAgICAgICBjb250ZXh0LT51bmlm
b3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwsIEdBVVNTSUFO
X0tFUk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogd2UgbmVlZCB0
aGUgc2hhZG93IGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0dXJlIGZvciBjb21wb3NpdGluZy4K
LSAgICAgICAgICAgIGdsVW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJh
ZGl1cywgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwotICAg
ICAgICAgICAgZ2xVbmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5L
ZXJuZWwsIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsKLSAg
ICAgICAgICAgIGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSk7Ci0gICAgICAgICAgICBnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIGNvbnRlbnRUZXh0dXJlKTsKLSAgICAgICAgICAgIGds
VW5pZm9ybTFpKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29udGVudFRleHR1cmUsIDEpOwor
ICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cu
Ymx1clJhZGl1cywgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkp
OworICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hh
ZG93LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5L
ZXJuZWwoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFMSk7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgY29udGVudFRleHR1cmUpOworICAgICAgICAgICAg
Y29udGV4dC0+dW5pZm9ybTFpKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29udGVudFRleHR1
cmUsIDEpOwogICAgICAgICAgICAgZmxvYXQgciwgZywgYiwgYTsKICAgICAgICAgICAgIHNoYWRv
dy5jb2xvcigpLmdldFJHQkEociwgZywgYiwgYSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm00Ziht
X3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbG9yLCByLCBnLCBiLCBhKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPnVuaWZvcm00ZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbG9yLCByLCBn
LCBiLCBhKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpA
QCAtNzU5LDcgKzc1Niw3IEBAIFBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyRm9yRmlsdGVyCiAgICAgaW50IGtleSA9
IGludCh0eXBlKSB8IChwYXNzIDw8IDE2KTsKICAgICBGaWx0ZXJNYXA6Oml0ZXJhdG9yIGl0ZXJh
dG9yID0gbV9maWx0ZXJNYXAuZmluZChrZXkpOwogICAgIGlmIChpdGVyYXRvciA9PSBtX2ZpbHRl
ck1hcC5lbmQoKSkgewotICAgICAgICBwcm9ncmFtID0gU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpj
cmVhdGUodHlwZSwgcGFzcyk7CisgICAgICAgIHByb2dyYW0gPSBTdGFuZGFyZEZpbHRlclByb2dy
YW06OmNyZWF0ZShtX3RleHR1cmVNYXBwZXIsIHR5cGUsIHBhc3MpOwogICAgICAgICBpZiAoIXBy
b2dyYW0pCiAgICAgICAgICAgICByZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIuaAppbmRleCA3ODU0OThlN2Y4YTM2MjdlYWIxMDY4NmJhMzZiZmZiM2UxMDkx
NDU2Li41ZmVhZDgwMGMxZDU2ZWY4NjA4ODEyNWE1YWM5MjYxNTBlMDJmZDgwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaApAQCAtMjQsOSArMjQsOSBAQAogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQogCiAjaW5j
bHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNs
dWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCiAjaW5jbHVkZSAiVHJh
bnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC00NCwzOSArNDQsNDAgQEAgY2xhc3MgVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI7CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIDogcHVi
bGljIFJlZkNvdW50ZWQ8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHsKIHB1YmxpYzoKLSAg
ICBHTHVpbnQgaWQoKSB7IHJldHVybiBtX2lkOyB9Ci0gICAgR0x1aW50IHZlcnRleEF0dHJpYigp
IHsgcmV0dXJuIG1fdmVydGV4QXR0cmliOyB9CisgICAgUGxhdGZvcm0zRE9iamVjdCBpZCgpIHsg
cmV0dXJuIG1faWQ7IH0KKyAgICBHQzNEdWludCB2ZXJ0ZXhBdHRyaWIoKSB7IHJldHVybiBtX3Zl
cnRleEF0dHJpYjsgfQogCi0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29uc3QgY2hh
ciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSk7
CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlckdMKiwgY29uc3Qg
Y2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJj
ZSk7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBwcmVwYXJlKGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqKSB7
IH0KLSAgICBHTGludCBtYXRyaXhMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4TG9j
YXRpb247IH0KLSAgICBHTGludCBmbGlwTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZsaXBM
b2NhdGlvbjsgfQotICAgIEdMaW50IHRleHR1cmVTaXplTG9jYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3RleHR1cmVTaXplTG9jYXRpb247IH0KLSAgICBHTGludCBzb3VyY2VUZXh0dXJlTG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVRleHR1cmVMb2NhdGlvbjsgfQotICAgIEdMaW50
IG1hc2tUZXh0dXJlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hc2tUZXh0dXJlTG9jYXRp
b247IH0KLSAgICBHTGludCBvcGFjaXR5TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX29wYWNp
dHlMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgbWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX21hdHJpeExvY2F0aW9uOyB9CisgICAgR0MzRGludCBmbGlwTG9jYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2ZsaXBMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgdGV4dHVyZVNpemVMb2NhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVNpemVMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQg
c291cmNlVGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VUZXh0dXJlTG9j
YXRpb247IH0KKyAgICBHQzNEaW50IG1hc2tUZXh0dXJlTG9jYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX21hc2tUZXh0dXJlTG9jYXRpb247IH0KKyAgICBHQzNEaW50IG9wYWNpdHlMb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eUxvY2F0aW9uOyB9CiAKLSAgICBzdGF0aWMgYm9vbCBp
c1ZhbGlkVW5pZm9ybUxvY2F0aW9uKEdMaW50IGxvY2F0aW9uKSB7IHJldHVybiBsb2NhdGlvbiA+
PSAwOyB9CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihHQzNEaW50IGxv
Y2F0aW9uKSB7IHJldHVybiBsb2NhdGlvbiA+PSAwOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2b2lk
IGdldFVuaWZvcm1Mb2NhdGlvbihHTGludCYgdmFyLCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB2
b2lkIGdldFVuaWZvcm1Mb2NhdGlvbihHQzNEaW50JiB2YXIsIGNvbnN0IGNoYXIqIG5hbWUpOwog
ICAgIHZvaWQgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6
ZSgpIHsgfQogICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmVydGV4U2hhZGVyU291cmNlLmRhdGEoKTsgfQogICAgIGNvbnN0IGNoYXIqIGZyYWdt
ZW50U2hhZGVyU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9mcmFnbWVudFNoYWRlclNvdXJjZS5k
YXRhKCk7IH0KIAotICAgIEdMdWludCBtX2lkOwotICAgIEdMdWludCBtX3ZlcnRleEF0dHJpYjsK
LSAgICBHTHVpbnQgbV92ZXJ0ZXhTaGFkZXI7Ci0gICAgR0x1aW50IG1fZnJhZ21lbnRTaGFkZXI7
Ci0gICAgR0xpbnQgbV9tYXRyaXhMb2NhdGlvbjsKLSAgICBHTGludCBtX2ZsaXBMb2NhdGlvbjsK
LSAgICBHTGludCBtX3RleHR1cmVTaXplTG9jYXRpb247Ci0gICAgR0xpbnQgbV9zb3VyY2VUZXh0
dXJlTG9jYXRpb247Ci0gICAgR0xpbnQgbV9vcGFjaXR5TG9jYXRpb247Ci0gICAgR0xpbnQgbV9t
YXNrVGV4dHVyZUxvY2F0aW9uOworICAgIFRleHR1cmVNYXBwZXJHTCogbV90ZXh0dXJlTWFwcGVy
OworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9pZDsKKyAgICBHQzNEdWludCBtX3ZlcnRleEF0dHJp
YjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVydGV4U2hhZGVyOworICAgIFBsYXRmb3JtM0RP
YmplY3QgbV9mcmFnbWVudFNoYWRlcjsKKyAgICBHQzNEaW50IG1fbWF0cml4TG9jYXRpb247Cisg
ICAgR0MzRGludCBtX2ZsaXBMb2NhdGlvbjsKKyAgICBHQzNEaW50IG1fdGV4dHVyZVNpemVMb2Nh
dGlvbjsKKyAgICBHQzNEaW50IG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOworICAgIEdDM0RpbnQg
bV9vcGFjaXR5TG9jYXRpb247CisgICAgR0MzRGludCBtX21hc2tUZXh0dXJlTG9jYXRpb247CiAK
IHByaXZhdGU6CiAgICAgQ1N0cmluZyBtX3ZlcnRleFNoYWRlclNvdXJjZTsKQEAgLTg3LDMzICs4
OCwzNiBAQCBwcml2YXRlOgogY2xhc3MgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtIDogcHVibGljIFJl
ZkNvdW50ZWQ8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKCk7Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmUoY29uc3Qg
RmlsdGVyT3BlcmF0aW9uJiwgdW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6ZSYsIEdMdWludCBj
b250ZW50VGV4dHVyZSk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9n
cmFtPiBjcmVhdGUoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBwYXNz
KTsKLSAgICBHTHVpbnQgdmVydGV4QXR0cmliKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhBdHRy
aWI7IH0KLSAgICBHTHVpbnQgdGV4Q29vcmRBdHRyaWIoKSBjb25zdCB7IHJldHVybiBtX3RleENv
b3JkQXR0cmliOyB9Ci0gICAgR0x1aW50IHRleHR1cmVVbmlmb3JtKCkgY29uc3QgeyByZXR1cm4g
bV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOyB9CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmUoY29u
c3QgRmlsdGVyT3BlcmF0aW9uJiwgdW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6ZSYsIEdDM0R1
aW50IGNvbnRlbnRUZXh0dXJlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRl
clByb2dyYW0+IGNyZWF0ZShUZXh0dXJlTWFwcGVyR0wqLCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJh
dGlvblR5cGUsIHVuc2lnbmVkIHBhc3MpOworICAgIEdDM0R1aW50IHZlcnRleEF0dHJpYigpIGNv
bnN0IHsgcmV0dXJuIG1fdmVydGV4QXR0cmliOyB9CisgICAgR0MzRHVpbnQgdGV4Q29vcmRBdHRy
aWIoKSBjb25zdCB7IHJldHVybiBtX3RleENvb3JkQXR0cmliOyB9CisgICAgR0MzRHVpbnQgdGV4
dHVyZVVuaWZvcm0oKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb247IH0K
K3Byb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyR0wqIG1fdGV4dHVyZU1hcHBlcjsKIHByaXZh
dGU6Ci0gICAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9u
VHlwZSwgdW5zaWduZWQgcGFzcyk7Ci0gICAgR0x1aW50IG1faWQ7Ci0gICAgR0x1aW50IG1fdmVy
dGV4U2hhZGVyOwotICAgIEdMdWludCBtX2ZyYWdtZW50U2hhZGVyOwotICAgIEdMdWludCBtX3Zl
cnRleEF0dHJpYjsKLSAgICBHTHVpbnQgbV90ZXhDb29yZEF0dHJpYjsKLSAgICBHTHVpbnQgbV90
ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOworICAgIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbSgpOworICAg
IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyR0wqLCBGaWx0ZXJPcGVyYXRpb246
Ok9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIHBhc3MpOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9p
ZDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVydGV4U2hhZGVyOworICAgIFBsYXRmb3JtM0RP
YmplY3QgbV9mcmFnbWVudFNoYWRlcjsKKyAgICBHQzNEdWludCBtX3ZlcnRleEF0dHJpYjsKKyAg
ICBHQzNEdWludCBtX3RleENvb3JkQXR0cmliOworICAgIEdDM0R1aW50IG1fdGV4dHVyZVVuaWZv
cm1Mb2NhdGlvbjsKICAgICB1bmlvbiB7Ci0gICAgICAgIEdMdWludCBhbW91bnQ7CisgICAgICAg
IEdDM0R1aW50IGFtb3VudDsKIAogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0x1aW50
IHJhZGl1czsKLSAgICAgICAgICAgIEdMdWludCBnYXVzc2lhbktlcm5lbDsKKyAgICAgICAgICAg
IEdDM0R1aW50IHJhZGl1czsKKyAgICAgICAgICAgIEdDM0R1aW50IGdhdXNzaWFuS2VybmVsOwog
ICAgICAgICB9IGJsdXI7CiAKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIEdMdWludCBi
bHVyUmFkaXVzOwotICAgICAgICAgICAgR0x1aW50IGNvbG9yOwotICAgICAgICAgICAgR0x1aW50
IG9mZnNldDsKLSAgICAgICAgICAgIEdMdWludCBjb250ZW50VGV4dHVyZTsKLSAgICAgICAgICAg
IEdMdWludCBnYXVzc2lhbktlcm5lbDsKKyAgICAgICAgICAgIEdDM0R1aW50IGJsdXJSYWRpdXM7
CisgICAgICAgICAgICBHQzNEdWludCBjb2xvcjsKKyAgICAgICAgICAgIEdDM0R1aW50IG9mZnNl
dDsKKyAgICAgICAgICAgIEdDM0R1aW50IGNvbnRlbnRUZXh0dXJlOworICAgICAgICAgICAgR0Mz
RHVpbnQgZ2F1c3NpYW5LZXJuZWw7CiAgICAgICAgIH0gc2hhZG93OwogICAgIH0gbV91bmlmb3Jt
TG9jYXRpb25zOwogfTsKQEAgLTEyMSw3NyArMTI1LDg5IEBAIHByaXZhdGU6CiAKIGNsYXNzIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVNpbXBsZT4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZT4gY3JlYXRlKFRleHR1cmVNYXBwZXJHTCogdGV4
dHVyZU1hcHBlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1TaW1wbGUoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUodGV4dHVyZU1hcHBlcikpOwogICAgIH0K
IAogcHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKFRleHR1
cmVNYXBwZXJHTCopOworcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNp
bXBsZSgpOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxl
IDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU+IGNyZWF0
ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0
U2ltcGxlPiBjcmVhdGUoVGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVyKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RT
aW1wbGUoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1SZWN0U2ltcGxlKHRleHR1cmVNYXBwZXIpKTsKICAgICB9CiAKK3Byb3RlY3RlZDoK
KyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoVGV4dHVyZU1hcHBlckdM
Kik7CiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgp
OwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayA6
IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gY3Jl
YXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9w
YWNpdHlBbmRNYXNrPiBjcmVhdGUoVGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVyKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bU9wYWNpdHlBbmRNYXNrKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2sodGV4dHVyZU1hcHBlcikpOwogICAgIH0K
IAorcHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1h
c2soVGV4dHVyZU1hcHBlckdMKik7CiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtT3BhY2l0eUFuZE1hc2soKTsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaz4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaz4gY3JlYXRlKFRl
eHR1cmVNYXBwZXJHTCogdGV4dHVyZU1hcHBlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1S
ZWN0T3BhY2l0eUFuZE1hc2sodGV4dHVyZU1hcHBlcikpOwogICAgIH0KIAorcHJvdGVjdGVkOgor
ICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKFRleHR1cmVN
YXBwZXJHTCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RP
cGFjaXR5QW5kTWFzaygpOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1T
b2xpZENvbG9yIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29s
b3I+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1Tb2xpZENvbG9yPiBjcmVhdGUoVGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVyKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVNvbGlkQ29sb3IoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKHRleHR1cmVNYXBwZXIpKTsKICAgICB9CiAKLSAg
ICBHTGludCBjb2xvckxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvckxvY2F0aW9uOyB9
CisgICAgR0MzRGludCBjb2xvckxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvckxvY2F0
aW9uOyB9CiAKK3Byb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlk
Q29sb3IoVGV4dHVyZU1hcHBlckdMKik7CiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU29saWRDb2xvcigpOwotICAgIEdMaW50IG1fY29sb3JMb2NhdGlvbjsKKyAgICBH
QzNEaW50IG1fY29sb3JMb2NhdGlvbjsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaz4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaz4gY3JlYXRlKFRl
eHR1cmVNYXBwZXJHTCogdGV4dHVyZU1hcHBlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2soKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1B
bnRpYWxpYXNpbmdOb01hc2sodGV4dHVyZU1hcHBlcikpOwogICAgIH0KIAotICAgIEdMaW50IGV4
cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29vcmRpbmF0ZXNMb2NhdGlvbigpIHsgcmV0dXJu
IG1fZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247IH0KLSAg
ICBHTGludCBleHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbigpIHsgcmV0dXJu
IG1fZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb247IH0KKyAgICBHQzNEaW50
IGV4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29vcmRpbmF0ZXNMb2NhdGlvbigpIHsgcmV0
dXJuIG1fZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247IH0K
KyAgICBHQzNEaW50IGV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uKCkgeyBy
ZXR1cm4gbV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbjsgfQogCitwcm90
ZWN0ZWQ6CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2so
VGV4dHVyZU1hcHBlckdMKik7CiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtQW50aWFsaWFzaW5nTm9NYXNrKCk7CiAKLSAgICBHTGludCBtX2V4cGFuZGVkUXVhZFZlcnRp
Y2VzSW5UZXh0dXJlQ29yZGluYXRlc0xvY2F0aW9uOwotICAgIEdMaW50IG1fZXhwYW5kZWRRdWFk
RWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb247CisgICAgR0MzRGludCBtX2V4cGFuZGVkUXVhZFZl
cnRpY2VzSW5UZXh0dXJlQ29yZGluYXRlc0xvY2F0aW9uOworICAgIEdDM0RpbnQgbV9leHBhbmRl
ZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbjsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyIHsKQEAgLTIwNiw3ICsyMjIsOCBAQCBwdWJsaWM6CiAgICAgICAgIFNv
bGlkQ29sb3IKICAgICB9OwogCi0gICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKTsKKyAg
ICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpIHsgfTsKKyAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcihUZXh0dXJlTWFwcGVyR0wqKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcigpOwogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQpAQCAtMjIxLDEyICsy
MzgsMTIgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8U2hhZGVyVHlw
ZSwgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiwgRGVmYXVsdEhhc2g8aW50Pjo6
SGFzaCwgSGFzaFRyYWl0czxpbnQ+ID4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7CiAg
ICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAgbV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbU1hcDsKKyAgICBUZXh0dXJlTWFwcGVyR0wqIG1fdGV4dHVyZU1hcHBlcjsKIAogI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8U3RhbmRh
cmRGaWx0ZXJQcm9ncmFtPiA+IEZpbHRlck1hcDsKICAgICBGaWx0ZXJNYXAgbV9maWx0ZXJNYXA7
CiAjZW5kaWYKLQogfTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153653</attachid>
            <date>2012-07-20 23:43:28 -0700</date>
            <delta_ts>2012-07-21 00:03:00 -0700</delta_ts>
            <desc>Try fix Qt4 build</desc>
            <filename>bug-78672-20120720234323.patch</filename>
            <type>text/plain</type>
            <size>108858</size>
            <attacher name="Helder Correia">helder.correia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODgyNmYzMjk2YTVjZmNj
MTYyZDY1NGE1OTFjOGQ2NmIzNDRkMjIxNy4uODk1NzdkNDk0ZDA4MjY2MGViNjNlYWJhMjNiZjdl
ZjI0Nzc5ZTZlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NiBAQAorMjAxMi0wNy0yMCAgSGVs
ZGVyIENvcnJlaWEgIDxoZWxkZXIuY29ycmVpYUBub2tpYS5jb20+CisKKyAgICAgICAgW1RleG1h
cF0gTW92ZSBUZXh0dXJlTWFwcGVyR0wgdG8gdXNlIEdyYXBoaWNzQ29udGV4dDNECisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODY3MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRleHR1cmVNYXBwZXJHTCAo
VE1HTCkgaW5jbHVkZXMgZGlyZWN0IEdMIGNhbGxzIGFuZAorICAgICAgICBHcmFwaGljc0NvbnRl
eHQzRCAoR0MzRCkgb2ZmZXJzIG1hbnkgY29udmVuaWVuY2VzIG92ZXIgdGhlCisgICAgICAgIGZv
cm1lciBhcHByb2FjaC4gIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGUgYmFja2VuZCBvZiBUTUdMIHRv
CisgICAgICAgIEdDM0QuIEl0IHdhcyBpbml0aWFsbHkgdGhvdWdodCB0byBpbnRyb2R1Y2UgYSBu
ZXcgYmFja2VuZCAoc2F5LAorICAgICAgICBUZXh0dXJlTWFwcGVyR0MzRCksIGJ1dCBpbiB0aGUg
ZW5kIGl0IHdhcyBhZ3JlZWQgdG8gY29uc29saWRhdGUKKyAgICAgICAgaXQgaW5zaWRlIFRNR0wg
aW5zdGVhZC4KKworICAgICAgICBBIEdDM0Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgVE1HTCB3aXRo
IHRoZQorICAgICAgICBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyBmbGFnLiBBZGRpdGlvbmFs
IGxvZ2ljIHdhcyBpbnRyb2R1Y2VkCisgICAgICAgIHRvIFF0J3MgR0MzRCBpbiBvcmRlciB0byBo
YW5kbGUgdGhpcyBzaXR1YXRpb24gYW5kIG1ha2UgaXQgdXNlCisgICAgICAgIHRoZSBjdXJyZW50
IGNvbnRleHQuCisKKyAgICAgICAgVE1HTCdzIGRlcGVuZGVuY3kgb24gT3BlbkdMU2hpbXMuaCB3
YXMgY29tcGxldGVseSByZW1vdmVkLgorICAgICAgICBIb3dldmVyLCBHQzNEIGRvZXMgbm90IG1h
cCBldmVyeSBzaW5nbGUgR0wgY29uc3RhbnQuIFRodXMsIGl0J3MKKyAgICAgICAgaW1wb3J0YW50
IHRvIGRvY3VtZW50IHRoZSBmb2xsb3dpbmcgbm90ZXM6CisgICAgICAgICAgICAtIEdMX0ZBTFNF
IHdhcyBtYXBwZWQgdG8gZmFsc2UuCisgICAgICAgICAgICAtIEdMX1VOUEFDS19ST1dfTEVOR1RI
LCBHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsCisgICAgICAgICAgICBHTF9VTlBBQ0tfU0tJUF9ST1dT
LCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIGFuZAorICAgICAgICAgICAgR0xfVU5TSUdORURf
SU5UXzhfOF84XzhfUkVWIHdlcmUgbG9jYWxseSBkZWZpbmVkIGluIFRNR0wuCisKKyAgICAgICAg
QSBuZXcgR0MzRDo6dGV4SW1hZ2UyRERpcmVjdCgpIGZ1bmN0aW9uIHdhcyBpbnRyb2R1Y2VkIHRv
IGFsbG93CisgICAgICAgIGluaXRpYWxpemF0aW9uIG9mIHRleHR1cmVzIHdpdGhvdXQgYWxsb2Nh
dGlvbi4gVGhlIGV4aXN0aW5nCisgICAgICAgIHRleHRJbWFnZTJEKCkgcmVmdXNlcyBhIG51bGwg
cGl4ZWwgYnVmZmVyLCBhbmQKKyAgICAgICAgdGV4SW1hZ2UyRFJlc291cmNlU2FmZSgpIGFsbG93
cyBpdCBidXQgcGVyZm9ybXMgbWVtb3J5CisgICAgICAgIGFsbG9jYXRpb24gYW5kIHplcm9lcyB0
aGUgYml0cy4gVGhpcyB3YXMgbm90IGZhc3QgZW5vdWdoIGZvcgorICAgICAgICBCaXRtYXBUZXh0
dXJlR0wgZnJlcXVlbnQgc2V0dGluZyB1cC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMg
aXMgYSByZWZhY3RvcmluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmg6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkREaXJlY3Qp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNz
Q29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdMLmNwcDoKKyAgICAgICAgKFNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRHTERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpTaGFy
ZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6c2hhcmVk
R0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OlRleHR1cmVN
YXBwZXJHTERhdGEpOgorICAgICAgICAoVGV4dHVyZU1hcHBlckdMRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpzY2lzc29yQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6
OkNsaXBTdGFjazo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0
YTo6aW5pdGlhbGl6ZVN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjpUZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpi
ZWdpblBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZW5kUGFp
bnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJl
UmVjdGFuZ2xlQVJCKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1Rl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6dmlld3BvcnRNYXRyaXgpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dy
YW0pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpkaWRSZXNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0ZpbHRlcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFRleHR1cmVHTDo6aW5pdGlhbGl6ZVN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwVGV4dHVyZUdMOjpjbGVhcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFRleHR1cmVHTDo6Y3JlYXRlRmJvSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwVGV4dHVyZUdMOjpiaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6
fkJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJp
bmREZWZhdWx0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJl
Z2luU2Npc3NvckNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdp
bkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjplbmRDbGlwKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpncmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChU
ZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoQ2xpcFN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFRleHR1cmVHTDo6dGV4dHVyZVRhcmdldCk6CisgICAgICAgIChCaXRtYXBUZXh0dXJl
R0wpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpCaXRtYXBUZXh0dXJlR0wp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aW5pdGlh
bGl6ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNpbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNvbGlkQ29sb3I6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1BbnRpYWxpYXNpbmdOb01hc2spOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6flN0YW5kYXJkRmlsdGVyUHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dyYW06OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlckZvckZp
bHRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbTo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
OnZlcnRleEF0dHJpYik6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6bWF0cml4TG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmZsaXBM
b2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6
dGV4dHVyZVNpemVMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6c291cmNlVGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjptYXNrVGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpvcGFjaXR5TG9jYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlm
b3JtTG9jYXRpb24pOgorICAgICAgICAoU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6dmVydGV4QXR0cmliKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6dGV4Q29vcmRBdHRyaWIpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp0ZXh0dXJlVW5pZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6Y3JlYXRlKToK
KyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3JlYXRlKToKKyAg
ICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpjcmVhdGUp
OgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5k
TWFzazo6Y3JlYXRlKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9w
YWNpdHlBbmRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU29saWRDb2xvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU29saWRDb2xvcjo6Y29sb3JMb2NhdGlvbik6CisgICAgICAgIChUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6
ZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb29yZGluYXRlc0xvY2F0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNr
OjpleHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbik6CisgICAgICAgIChUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIpOgorCiAyMDEyLTA3LTIw
ICBEYXZpZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbmRleGVk
REI6IEluY2x1ZGUgaW50VmVyc2lvbiB3aGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBXZWJDb3JlIGFu
ZCBXZWJLaXQgSURCTWV0YWRhdGEgdHlwZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDc0MzNkZjYyNmY0Y2FiMmFj
YzZjYTA5OGE2MjgwZDQ4ZDQ5YTJiMTkuLjdiY2Q4YTE3NTlkYzY2YmQ4MDE1ZDU0Y2RlNWVjNDlj
YTUyNTlkYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaApAQCAtNTI5LDYgKzUyOSw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IHByZXBhcmVUZXh0dXJlKCk7CiAjZW5kaWYKIAorICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRl
eEltYWdlMkQoKS4gQWxsb3dzIHBpeGVscz09MCB3aXRoIG5vIGFsbG9jYXRpb24uCisgICAgdm9p
ZCB0ZXhJbWFnZTJERGlyZWN0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCog
cGl4ZWxzKTsKKwogICAgIC8vIEhlbHBlciB0byB0ZXhJbWFnZTJEIHdpdGggcGl4ZWw9PTAgY2Fz
ZTogcGl4ZWxzIGFyZSBpbml0aWFsaXplZCB0byAwLgogICAgIC8vIFJldHVybiB0cnVlIGlmIG5v
IEdMIGVycm9yIGlzIHN5bnRoZXNpemVkLgogICAgIC8vIEJ5IGRlZmF1bHQsIGFsaWdubWVudCBp
cyA0LCB0aGUgT3BlbkdMIGRlZmF1bHQgc2V0dGluZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0wuY3BwCmluZGV4IGZkNDUwMTQxYzc0ZGRhM2I0OWU4OTU3ODU5Y2JhMmI5MGE4Mzdm
NTIuLjk4ZTExNDViM2RiMjRlNTFkN2I3NWZkMDY3MDhmZmFlMjU2YWViMTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcApAQCAtMjU2LDcgKzI1Niw3IEBAIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworCiAgICAgR0MzRGVudW0gb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBpbnRlcm5hbGZvcm1hdDsK
ICAgICBpZiAodHlwZSA9PSBHTF9GTE9BVCkgewogICAgICAgICBpZiAoZm9ybWF0ID09IEdMX1JH
QkEpCkBAIC0yNjUsNyArMjY1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICAgICAg
ICAgIG9wZW5HTEludGVybmFsRm9ybWF0ID0gR0xfUkdCMzJGX0FSQjsKICAgICB9CiAKLSAgICA6
OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBvcGVuR0xJbnRlcm5hbEZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgdGV4SW1hZ2UyRERp
cmVjdCh0YXJnZXQsIGxldmVsLCBvcGVuR0xJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCmluZGV4IGE0ZDFl
YjRjZDkzYzQ3NjMzNmMwMmY2MTNiZmM2NTk0NGQyODZjYjguLjhhMjZhZWNlYmM4MDg4ODc2ODk5
MjgyNTA0OGY3NDVjYmY5NmZlMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMQ29tbW9uLmNwcApAQCAtMTM4Miw2ICsxMzgyLDEyIEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGF5ZXJDb21wb3Np
dGVkOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJERGlyZWN0KEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKK30K
KwogfQogCiAjZW5kaWYgLy8gVVNFKDNEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMRVMuY3BwCmluZGV4IDc5ZGRjYmJmZDlhNGI1NWVjODI2ZTQxYjU5NWVlZjg0
ZTY0ZDlkMDMuLjUyODFlY2ZjM2U0ZWNmYjk3YzA3MzM4OTlkNzQ0ZmY1Y2EwOWYyNmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTEVTLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpZiBVU0UoM0RfR1JBUEhJQ1MpCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgor
CiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMRVMuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAjaW5jbHVkZSAiSW50U2l6ZS5oIgpAQCAtMjMwLDggKzIzMSw4IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKworICAgIHRleEltYWdlMkREaXJl
Y3QodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dDNEUXQuY3BwCmluZGV4IDg5NWY3NjY4ODAzOWU4MWYyZjcwYmZhZDgwMDVmMDc3YmRlNTFkMTgu
LjFmNDk0N2M2ZGJhY2U5NWU2ZjczMzAyNzAwNDExOTc1OTMwY2NjYWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dDNEUXQuY3BwCkBAIC02Myw3ICs2Myw3IEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZQogI2VuZGlmCiB7CiBwdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBo
aWNzQ29udGV4dDNEKiwgSG9zdFdpbmRvdyopOworICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZShHcmFwaGljc0NvbnRleHQzRCosIEhvc3RXaW5kb3cqLCBib29sIHJlbmRlckRpcmVjdGx5VG9I
b3N0V2luZG93KTsKICAgICB+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCk7CiAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKIH0KICNlbmRpZgogCi1HcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK0dyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2lu
ZG93KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2hvc3RXaW5kb3coaG9zdFdp
bmRvdykKICAgICAsIG1fc3VyZmFjZSgwKQpAQCAtMTIzLDYgKzEyMywxOSBAQCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgSAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKHJlbmRlckRp
cmVjdGx5VG9Ib3N0V2luZG93KSB7CisgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgYXJlIG5v
dCBzZXR0aW5nIHVwIFdlYkdMLCBidXQgcmF0aGVyIFRleHR1cmVNYXBwZXJHTCwgYW5kIHdhbnQg
dG8gcmVseQorICAgICAgICAvLyBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybSBjb250ZXh0LgorI2lm
IEhBVkUoUVQ1KQorICAgICAgICBtX3BsYXRmb3JtQ29udGV4dCA9IFFPcGVuR0xDb250ZXh0Ojpj
dXJyZW50Q29udGV4dCgpOworICAgICAgICBtX3N1cmZhY2UgPSBtX3BsYXRmb3JtQ29udGV4dC0+
c3VyZmFjZSgpOworI2Vsc2UKKyAgICAgICAgbV9wbGF0Zm9ybUNvbnRleHQgPSBRR0xDb250ZXh0
OjpjdXJyZW50Q29udGV4dCgpOworICAgICAgICBtX3N1cmZhY2UgPSBtX3BsYXRmb3JtQ29udGV4
dC0+ZGV2aWNlKCk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQogICAgIC8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIGNyZWF0ZSBhIFFP
cGVuR0xDb250ZXh0IHdpdGhvdXQgY3JlYXRpbmcgYSBRV2luZG93IGF0IGFsbC4KICAgICAvLyBX
ZSBuZWVkIHRvIGNyZWF0ZSBhIHN1cmZhY2UgaW4gb3JkZXIgdG8gY3JlYXRlIGEgUU9wZW5HTENv
bnRleHQgYW5kIG1ha2UgaXQgY3VycmVudC4KQEAgLTMxMSwxNCArMzI0LDEyIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc1N1cmZhY2VzKGNvbnN0IEludFNp
emUmIHNpemUpCiAKIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5k
b3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHls
ZSkKIHsKLSAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBv
cnQgcmVuZGVyaW5nIGRpcmVjdGx5IHRvIHRoZSBIb3N0V2luZG93LgotICAgIGlmIChyZW5kZXJT
dHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBo
aWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCBmYWxzZSkpOworICAgIGJvb2wgcmVuZGVy
RGlyZWN0bHlUb0hvc3RXaW5kb3cgPSAocmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hv
c3RXaW5kb3cpOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0
UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRvdywgcmVuZGVyRGlyZWN0
bHlUb0hvc3RXaW5kb3cpKTsKICAgICByZXR1cm4gY29udGV4dC0+bV9wcml2YXRlID8gY29udGV4
dC5yZWxlYXNlKCkgOiAwOwogfQogCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0
M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3csIGJvb2wpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJv
b2wgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCiAgICAgOiBtX2N1cnJlbnRXaWR0aCgwKQog
ICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCiAgICAgLCBtX2NvbXBpbGVyKGlzR0xFUzJDb21wbGlh
bnQoKSA/IFNIX0VTU0xfT1VUUFVUIDogU0hfR0xTTF9PVVRQVVQpCkBAIC0zMzksNyArMzUwLDcg
QEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKICAg
ICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKICAgICAsIG1fbXVsdGlzYW1w
bGVDb2xvckJ1ZmZlcigwKQotICAgICwgbV9wcml2YXRlKGFkb3B0UHRyKG5ldyBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUodGhpcywgaG9zdFdpbmRvdykpKQorICAgICwgbV9wcml2YXRlKGFkb3B0
UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUodGhpcywgaG9zdFdpbmRvdywgcmVuZGVy
RGlyZWN0bHlUb0hvc3RXaW5kb3cpKSkKIHsKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIApA
QCAtMzYwLDYgKzM3MSwxMSBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0Qo
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQogICAgICAgICByZXR1
cm47CiAgICAgfQogCisgICAgaWYgKHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQorICAgICAg
ICAvLyBJbiB0aGlzIGNhc2UsIHdlIGFyZSBub3Qgc2V0dGluZyB1cCBXZWJHTCwgYnV0IHJhdGhl
ciBUZXh0dXJlTWFwcGVyR0wsIGhlbmNlIHNraXAgYWxsCisgICAgICAgIC8vIGNhbnZhcyBhbmQg
QU5HTEUgbG9naWMuCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIENyZWF0ZSBidWZmZXJzIGZv
ciB0aGUgY2FudmFzIEZCTy4KICAgICBnbEdlbkZyYW1lYnVmZmVycygvKiBjb3VudCAqLyAxLCAm
bV9mYm8pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDY4OGUyNmY0ZTg5ZmZmMTNkZTVi
M2Q1NzljODIwYTkzNWVmOTE3MmMuLjVkNWY3ZjQxYmY1ZmZiYmYwYmFjZjgzNjg2NWRlMDhmYjlm
ZjE5MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlckdMLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5oIgpAQCAtMzksOTEgKzM4LDQ0IEBACiAKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRlICJO
YXRpdmVJbWFnZVF0LmgiCi0jaWYgSEFWRShRVDUpCi0jaW5jbHVkZSA8UU9wZW5HTENvbnRleHQ+
Ci0jZWxzZQotI2luY2x1ZGUgPFFHTENvbnRleHQ+Ci0jZW5kaWYgLy8gUVRfVkVSU0lPTgotI2Vs
aWYgT1MoV0lORE9XUykKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZWxpZiBPUyhNQUNfT1NfWCkK
LSNpbmNsdWRlIDxBR0wvYWdsLmg+Ci0jZWxpZiBkZWZpbmVkKFhQX1VOSVgpCi0jaW5jbHVkZSA8
R0wvZ2x4Lmg+CiAjZW5kaWYKIAotI2RlZmluZSBHTF9DTUQoLi4uKSBkbyB7IF9fVkFfQVJHU19f
OyBBU1NFUlRfQVJHKF9fVkFfQVJHU19fLCAhZ2xHZXRFcnJvcigpKTsgfSB3aGlsZSAoMCkKLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLXN0cnVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsKLSAgICBzdHJ1
Y3QgU2hhcmVkR0xEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U2hhcmVkR0xEYXRhPiB7Ci0jaWYg
UExBVEZPUk0oUVQpCi0jaWYgUVRfVkVSU0lPTiA+PSAweDA1MDAwMAotICAgICAgICB0eXBlZGVm
IFFPcGVuR0xDb250ZXh0KiBHTENvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0
Q3VycmVudEdMQ29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBRT3BlbkdM
Q29udGV4dDo6Y3VycmVudENvbnRleHQoKTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgdHlw
ZWRlZiBjb25zdCBRR0xDb250ZXh0KiBHTENvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRl
eHQgZ2V0Q3VycmVudEdMQ29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBR
R0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgpOwotICAgICAgICB9CisjaWYgT1MoREFSV0lOKQor
I2RlZmluZSBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIgMHg4NEY1CisjZGVmaW5lIEdMX1VOU0lH
TkVEX0lOVF84XzhfOF84X1JFViAweDgzNjcKICNlbmRpZgotI2VsaWYgT1MoV0lORE9XUykKLSAg
ICAgICAgdHlwZWRlZiBIR0xSQyBHTENvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQg
Z2V0Q3VycmVudEdMQ29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB3Z2xH
ZXRDdXJyZW50Q29udGV4dCgpOwotICAgICAgICB9Ci0jZWxpZiBPUyhNQUNfT1NfWCkKLSAgICAg
ICAgdHlwZWRlZiBBR0xDb250ZXh0IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4
dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFn
bEdldEN1cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIH0KLSNlbGlmIGRlZmluZWQoWFBfVU5JWCkK
LSAgICAgICAgdHlwZWRlZiBHTFhDb250ZXh0IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdM
Q29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGdsWEdldEN1cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIC8v
IERlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIHVua25vd24gb3BlbmdsLgotICAgICAgICAvLyBS
ZXR1cm5zIGFsd2F5cyBpbmNyZWFzaW5nIG51bWJlciBhbmQgZGlzYWJsZXMgR0wgY29udGV4dCBk
YXRhIHNoYXJpbmcuCi0gICAgICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IEdMQ29udGV4dDsKLSAg
ICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewot
ICAgICAgICAgICAgc3RhdGljIEdMQ29udGV4dCBkdW1teUNvbnRleHRDb3VudGVyID0gMDsKLSAg
ICAgICAgICAgIHJldHVybiArK2R1bW15Q29udGV4dENvdW50ZXI7Ci0gICAgICAgIH0KIAorI2lm
ICFkZWZpbmVkKFRFWE1BUF9PUEVOR0xfRVNfMikKKyNkZWZpbmUgR0xfVU5QQUNLX1JPV19MRU5H
VEggMHgwQ0YyCisjZGVmaW5lIEdMX1VOUEFDS19TS0lQX1BJWEVMUyAweDBDRjQKKyNkZWZpbmUg
R0xfVU5QQUNLX1NLSVBfUk9XUyAweDBDRjMKICNlbmRpZgogCi0gICAgICAgIHR5cGVkZWYgSGFz
aE1hcDxHTENvbnRleHQsIFNoYXJlZEdMRGF0YSo+IEdMQ29udGV4dERhdGFNYXA7CituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitzdHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CisgICAgc3RydWN0IFNo
YXJlZEdMRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZEdMRGF0YT4geworICAgICAgICB0
eXBlZGVmIEhhc2hNYXA8UGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCwgU2hhcmVkR0xEYXRhKj4g
R0xDb250ZXh0RGF0YU1hcDsKICAgICAgICAgc3RhdGljIEdMQ29udGV4dERhdGFNYXAmIGdsQ29u
dGV4dERhdGFNYXAoKQogICAgICAgICB7CiAgICAgICAgICAgICBzdGF0aWMgR0xDb250ZXh0RGF0
YU1hcCBtYXA7CiAgICAgICAgICAgICByZXR1cm4gbWFwOwogICAgICAgICB9CiAKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkR0xEYXRhPiBjdXJyZW50U2hhcmVkR0xEYXRhKCkKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkR0xEYXRhPiBjdXJyZW50U2hhcmVkR0xEYXRh
KFRleHR1cmVNYXBwZXJHTCogdGV4dHVyZU1hcHBlcikKICAgICAgICAgewotICAgICAgICAgICAg
R0xDb250ZXh0IGN1cnJlbnRHTENvbmV4dCA9IGdldEN1cnJlbnRHTENvbnRleHQoKTsKLSAgICAg
ICAgICAgIEdMQ29udGV4dERhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgp
LmZpbmQoY3VycmVudEdMQ29uZXh0KTsKKyAgICAgICAgICAgIEdMQ29udGV4dERhdGFNYXA6Oml0
ZXJhdG9yIGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgpLmZpbmQodGV4dHVyZU1hcHBlci0+Z3JhcGhp
Y3NDb250ZXh0M0QoKS0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKICAgICAgICAgICAg
IGlmIChpdCAhPSBnbENvbnRleHREYXRhTWFwKCkuZW5kKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGl0LT5zZWNvbmQ7CiAKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVk
R0xEYXRhKGdldEN1cnJlbnRHTENvbnRleHQoKSkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTaGFyZWRHTERhdGEodGV4dHVyZU1hcHBlcikpOwogICAgICAgICB9CiAKLQotCiAg
ICAgICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOwogCi0gICAgICAgIFNoYXJlZEdMRGF0YShHTENvbnRleHQgZ2xDb250ZXh0KQorICAgICAg
ICBTaGFyZWRHTERhdGEoVGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVyKQorICAgICAgICAg
ICAgOiB0ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcih0ZXh0dXJlTWFwcGVyKQogICAgICAgICB7
Ci0gICAgICAgICAgICBnbENvbnRleHREYXRhTWFwKCkuYWRkKGdsQ29udGV4dCwgdGhpcyk7Cisg
ICAgICAgICAgICBnbENvbnRleHREYXRhTWFwKCkuYWRkKHRleHR1cmVNYXBwZXItPmdyYXBoaWNz
Q29udGV4dDNEKCktPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSwgdGhpcyk7CiAgICAgICAg
IH0KIAogICAgICAgICB+U2hhcmVkR0xEYXRhKCkKQEAgLTE0MiwzMCArOTQsMzIgQEAgc3RydWN0
IFRleHR1cmVNYXBwZXJHTERhdGEgewogCiAgICAgU2hhcmVkR0xEYXRhJiBzaGFyZWRHTERhdGEo
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICoobV9zaGFyZWRHTERhdGEuZ2V0KCkpOwor
ICAgICAgICByZXR1cm4gKm1fc2hhcmVkR0xEYXRhOwogICAgIH0KIAogICAgIHZvaWQgaW5pdGlh
bGl6ZVN0ZW5jaWwoKTsKIAotICAgIFRleHR1cmVNYXBwZXJHTERhdGEoKQotICAgICAgICA6IFBh
aW50RmxhZ3MoMCkKKyAgICBUZXh0dXJlTWFwcGVyR0xEYXRhKFRleHR1cmVNYXBwZXJHTCogdGV4
dHVyZU1hcHBlcikKKyAgICAgICAgOiB0ZXh0dXJlTWFwcGVyKHRleHR1cmVNYXBwZXIpCisgICAg
ICAgICwgUGFpbnRGbGFncygwKQogICAgICAgICAsIHByZXZpb3VzUHJvZ3JhbSgwKQogICAgICAg
ICAsIHRhcmdldEZyYW1lQnVmZmVyKDApCiAgICAgICAgICwgZGlkTW9kaWZ5U3RlbmNpbChmYWxz
ZSkKICAgICAgICAgLCBwcmV2aW91c1NjaXNzb3JTdGF0ZSgwKQogICAgICAgICAsIHByZXZpb3Vz
RGVwdGhTdGF0ZSgwKQotICAgICAgICAsIG1fc2hhcmVkR0xEYXRhKFRleHR1cmVNYXBwZXJHTERh
dGE6OlNoYXJlZEdMRGF0YTo6Y3VycmVudFNoYXJlZEdMRGF0YSgpKQorICAgICAgICAsIG1fc2hh
cmVkR0xEYXRhKFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6Y3VycmVudFNoYXJl
ZEdMRGF0YSh0ZXh0dXJlTWFwcGVyKSkKICAgICB7IH0KIAorICAgIFRleHR1cmVNYXBwZXJHTCog
dGV4dHVyZU1hcHBlcjsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4
OwogICAgIFRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgUGFpbnRGbGFnczsKLSAgICBHTGludCBw
cmV2aW91c1Byb2dyYW07Ci0gICAgR0xpbnQgdGFyZ2V0RnJhbWVCdWZmZXI7CisgICAgR0MzRGlu
dCBwcmV2aW91c1Byb2dyYW07CisgICAgR0MzRGludCB0YXJnZXRGcmFtZUJ1ZmZlcjsKICAgICBi
b29sIGRpZE1vZGlmeVN0ZW5jaWw7Ci0gICAgR0xpbnQgcHJldmlvdXNTY2lzc29yU3RhdGU7Ci0g
ICAgR0xpbnQgcHJldmlvdXNEZXB0aFN0YXRlOwotICAgIEdMaW50IHZpZXdwb3J0WzRdOwotICAg
IEdMaW50IHByZXZpb3VzU2Npc3Nvcls0XTsKKyAgICBHQzNEaW50IHByZXZpb3VzU2Npc3NvclN0
YXRlOworICAgIEdDM0RpbnQgcHJldmlvdXNEZXB0aFN0YXRlOworICAgIEdDM0RpbnQgdmlld3Bv
cnRbNF07CisgICAgR0MzRGludCBwcmV2aW91c1NjaXNzb3JbNF07CiAgICAgUmVmUHRyPFNoYXJl
ZEdMRGF0YT4gbV9zaGFyZWRHTERhdGE7CiAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IGN1cnJl
bnRTdXJmYWNlOwogfTsKQEAgLTE4OSwyNSArMTQzLDI1IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdM
OjpDbGlwU3RhY2s6OnBvcCgpCiAgICAgY2xpcFN0YWNrLnJlbW92ZUxhc3QoKTsKIH0KIAotc3Rh
dGljIHZvaWQgc2Npc3NvckNsaXAoY29uc3QgSW50UmVjdCYgcmVjdCkKK3N0YXRpYyB2b2lkIHNj
aXNzb3JDbGlwKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0
KQogewogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR0xp
bnQgdmlld3BvcnRbNF07Ci0gICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIHZp
ZXdwb3J0KSk7Ci0gICAgR0xfQ01EKGdsU2Npc3NvcihyZWN0LngoKSwgdmlld3BvcnRbM10gLSBy
ZWN0Lm1heFkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7CisgICAgR0MzRGludCB2
aWV3cG9ydFs0XTsKKyAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6
VklFV1BPUlQsIHZpZXdwb3J0KTsKKyAgICBjb250ZXh0LT5zY2lzc29yKHJlY3QueCgpLCB2aWV3
cG9ydFszXSAtIHJlY3QubWF4WSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogfQog
Ci12b2lkIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjphcHBseSgpCit2b2lkIFRleHR1cmVN
YXBwZXJHTDo6Q2xpcFN0YWNrOjphcHBseShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEKQog
ewotICAgIHNjaXNzb3JDbGlwKGNsaXBTdGF0ZS5zY2lzc29yQm94KTsKLSAgICBHTF9DTUQoZ2xT
dGVuY2lsT3AoR0xfS0VFUCwgR0xfS0VFUCwgR0xfS0VFUCkpOwotICAgIEdMX0NNRChnbFN0ZW5j
aWxGdW5jKEdMX0VRVUFMLCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSwgY2xpcFN0YXRlLnN0
ZW5jaWxJbmRleCAtIDEpKTsKKyAgICBzY2lzc29yQ2xpcChjb250ZXh0M0QsIGNsaXBTdGF0ZS5z
Y2lzc29yQm94KTsKKyAgICBjb250ZXh0M0QtPnN0ZW5jaWxPcChHcmFwaGljc0NvbnRleHQzRDo6
S0VFUCwgR3JhcGhpY3NDb250ZXh0M0Q6OktFRVAsIEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQKTsK
KyAgICBjb250ZXh0M0QtPnN0ZW5jaWxGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpFUVVBTCwgY2xp
cFN0YXRlLnN0ZW5jaWxJbmRleCAtIDEsIGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXggLSAxKTsKICAg
ICBpZiAoY2xpcFN0YXRlLnN0ZW5jaWxJbmRleCA9PSAxKQotICAgICAgICBHTF9DTUQoZ2xEaXNh
YmxlKEdMX1NURU5DSUxfVEVTVCkpOworICAgICAgICBjb250ZXh0M0QtPmRpc2FibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCk7CiAgICAgZWxzZQotICAgICAgICBHTF9DTUQoZ2xF
bmFibGUoR0xfU1RFTkNJTF9URVNUKSk7CisgICAgICAgIGNvbnRleHQzRC0+ZW5hYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpOwogfQogCiAKQEAgLTIyMSw4ICsxNzUsOSBAQCB2
b2lkIFRleHR1cmVNYXBwZXJHTERhdGE6OmluaXRpYWxpemVTdGVuY2lsKCkKICAgICBpZiAoZGlk
TW9kaWZ5U3RlbmNpbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR0xfQ01EKGdsQ2xlYXJTdGVu
Y2lsKDApKTsKLSAgICBHTF9DTUQoZ2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKTsKKyAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3ND
b250ZXh0M0QoKTsKKyAgICBjb250ZXh0M0QtPmNsZWFyU3RlbmNpbCgwKTsKKyAgICBjb250ZXh0
M0QtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOwogICAgIGRp
ZE1vZGlmeVN0ZW5jaWwgPSB0cnVlOwogfQogCkBAIC0yMzYsMTAgKzE5MSwxNCBAQCBCaXRtYXBU
ZXh0dXJlR0wqIHRvQml0bWFwVGV4dHVyZUdMKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpCiAKIFRl
eHR1cmVNYXBwZXJHTDo6VGV4dHVyZU1hcHBlckdMKCkKICAgICA6IFRleHR1cmVNYXBwZXIoT3Bl
bkdMTW9kZSkKLSAgICAsIG1fZGF0YShuZXcgVGV4dHVyZU1hcHBlckdMRGF0YSkKICAgICAsIG1f
Y29udGV4dCgwKQogICAgICwgbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcoZmFsc2Up
CiB7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlczsKKyAgICBh
dHRyaWJ1dGVzLmFudGlhbGlhcyA9IGZhbHNlOworICAgIGF0dHJpYnV0ZXMuZGVwdGggPSBmYWxz
ZTsKKyAgICBtX2NvbnRleHQzRCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0cmlidXRl
cywgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAg
ICBtX2RhdGEgPSBuZXcgVGV4dHVyZU1hcHBlckdMRGF0YSh0aGlzKTsKIH0KIAogVGV4dHVyZU1h
cHBlckdMOjpDbGlwU3RhY2smIFRleHR1cmVNYXBwZXJHTDo6Y2xpcFN0YWNrKCkKQEAgLTI0OSwx
NSArMjA4LDkgQEAgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2smIFRleHR1cmVNYXBwZXJHTDo6
Y2xpcFN0YWNrKCkKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRpbmcoUGFpbnRG
bGFncyBmbGFncykKIHsKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBubyBHTCBlcnJvciBjb2RlIHN0
YXlzIGZyb20gcHJldmlvdXMgb3BlcmF0aW9ucy4KLSAgICBnbEdldEVycm9yKCk7Ci0KLSAgICBp
ZiAoIWluaXRpYWxpemVPcGVuR0xTaGltcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHTF9D
TUQoZ2xHZXRJbnRlZ2VydihHTF9DVVJSRU5UX1BST0dSQU0sICZkYXRhKCkucHJldmlvdXNQcm9n
cmFtKSk7Ci0gICAgZGF0YSgpLnByZXZpb3VzU2Npc3NvclN0YXRlID0gZ2xJc0VuYWJsZWQoR0xf
U0NJU1NPUl9URVNUKTsKLSAgICBkYXRhKCkucHJldmlvdXNEZXB0aFN0YXRlID0gZ2xJc0VuYWJs
ZWQoR0xfREVQVEhfVEVTVCk7CisgICAgbV9jb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpDVVJSRU5UX1BST0dSQU0sICZkYXRhKCkucHJldmlvdXNQcm9ncmFtKTsKKyAg
ICBkYXRhKCkucHJldmlvdXNTY2lzc29yU3RhdGUgPSBtX2NvbnRleHQzRC0+aXNFbmFibGVkKEdy
YXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAgIGRhdGEoKS5wcmV2aW91c0RlcHRo
U3RhdGUgPSBtX2NvbnRleHQzRC0+aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9U
RVNUKTsKICNpZiBQTEFURk9STShRVCkKICAgICBpZiAobV9jb250ZXh0KSB7CiAgICAgICAgIFFQ
YWludGVyKiBwYWludGVyID0gbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKQEAgLTI2NSwx
NSArMjE4LDE1IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKFBhaW50Rmxh
Z3MgZmxhZ3MpCiAgICAgICAgIHBhaW50ZXItPmJlZ2luTmF0aXZlUGFpbnRpbmcoKTsKICAgICB9
CiAjZW5kaWYKLSAgICBnbERpc2FibGUoR0xfREVQVEhfVEVTVCk7Ci0gICAgZ2xFbmFibGUoR0xf
U0NJU1NPUl9URVNUKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfVEVTVCk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6U0NJU1NPUl9URVNUKTsKICAgICBkYXRhKCkuZGlkTW9kaWZ5U3RlbmNpbCA9IGZhbHNlOwot
ICAgIEdMX0NNRChnbERlcHRoTWFzaygwKSk7Ci0gICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xf
VklFV1BPUlQsIGRhdGEoKS52aWV3cG9ydCkpOwotICAgIEdMX0NNRChnbEdldEludGVnZXJ2KEdM
X1NDSVNTT1JfQk9YLCBkYXRhKCkucHJldmlvdXNTY2lzc29yKSk7Ci0gICAgZ2xHZXRJbnRlZ2Vy
dihHTF9GUkFNRUJVRkZFUl9CSU5ESU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKTsKKyAg
ICBtX2NvbnRleHQzRC0+ZGVwdGhNYXNrKDApOworICAgIG1fY29udGV4dDNELT5nZXRJbnRlZ2Vy
dihHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQsIGRhdGEoKS52aWV3cG9ydCk7CisgICAgbV9j
b250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX0JPWCwgZGF0
YSgpLnByZXZpb3VzU2Npc3Nvcik7CisgICAgbV9jb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5ESU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVm
ZmVyKTsKICAgICBtX2NsaXBTdGFjay5pbml0KEludFJlY3QoMCwgMCwgZGF0YSgpLnZpZXdwb3J0
WzJdLCBkYXRhKCkudmlld3BvcnRbM10pKTsKLSAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9G
UkFNRUJVRkZFUl9CSU5ESU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKSk7CisgICAgbV9j
b250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5E
SU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKTsKICAgICBkYXRhKCkuUGFpbnRGbGFncyA9
IGZsYWdzOwogICAgIGJpbmRTdXJmYWNlKDApOwogfQpAQCAtMjgxLDIyICsyMzQsMjIgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyBmbGFncykKIHZvaWQg
VGV4dHVyZU1hcHBlckdMOjplbmRQYWludGluZygpCiB7CiAgICAgaWYgKGRhdGEoKS5kaWRNb2Rp
ZnlTdGVuY2lsKSB7Ci0gICAgICAgIGdsQ2xlYXJTdGVuY2lsKDEpOwotICAgICAgICBnbENsZWFy
KEdMX1NURU5DSUxfQlVGRkVSX0JJVCk7CisgICAgICAgIG1fY29udGV4dDNELT5jbGVhclN0ZW5j
aWwoMSk7CisgICAgICAgIG1fY29udGV4dDNELT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9CVUZGRVJfQklUKTsKICAgICB9CiAKLSAgICBnbFVzZVByb2dyYW0oZGF0YSgpLnByZXZp
b3VzUHJvZ3JhbSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0oZGF0YSgpLnByZXZpb3Vz
UHJvZ3JhbSk7CiAKLSAgICBnbFNjaXNzb3IoZGF0YSgpLnByZXZpb3VzU2Npc3NvclswXSwgZGF0
YSgpLnByZXZpb3VzU2Npc3NvclsxXSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclsyXSwgZGF0YSgp
LnByZXZpb3VzU2Npc3NvclszXSk7CisgICAgbV9jb250ZXh0M0QtPnNjaXNzb3IoZGF0YSgpLnBy
ZXZpb3VzU2Npc3NvclswXSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclsxXSwgZGF0YSgpLnByZXZp
b3VzU2Npc3NvclsyXSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclszXSk7CiAgICAgaWYgKGRhdGEo
KS5wcmV2aW91c1NjaXNzb3JTdGF0ZSkKLSAgICAgICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNU
KTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUKTsKICAgICBlbHNlCi0gICAgICAgIGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwor
ICAgICAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUKTsKIAogICAgIGlmIChkYXRhKCkucHJldmlvdXNEZXB0aFN0YXRlKQotICAgICAgICBnbEVu
YWJsZShHTF9ERVBUSF9URVNUKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfVEVTVCk7CiAgICAgZWxzZQotICAgICAgICBnbERpc2FibGUoR0xf
REVQVEhfVEVTVCk7CisgICAgICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9URVNUKTsKIAogI2lmIFBMQVRGT1JNKFFUKQogICAgIGlmICghbV9jb250ZXh0
KQpAQCAtMzA3LDQwICsyNjAsNDAgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50aW5n
KCkKICNlbmRpZgogfQogCi12b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJh
d1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdN
YXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBzaGFkZXJQcm9ncmFtLCBHTGVudW0g
ZHJhd2luZ01vZGUsIGJvb2wgbmVlZHNCbGVuZGluZykKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpk
cmF3UXVhZChjb25zdCBEcmF3UXVhZCYgcXVhZFRvRHJhdywgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHNoYWRl
clByb2dyYW0sIEdDM0RlbnVtIGRyYXdpbmdNb2RlLCBib29sIG5lZWRzQmxlbmRpbmcpCiB7Ci0g
ICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4
QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCkp
OworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFt
LT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCk7CiAKLSAgICBjb25zdCBHTGZsb2F0IHF1YWRbXSA9
IHsKKyAgICBjb25zdCBHQzNEZmxvYXQgcXVhZFtdID0gewogICAgICAgICBxdWFkVG9EcmF3LnRh
cmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDEoKS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVj
dE1hcHBlZFRvVW5pdFNxdWFyZS5wMSgpLnkoKSwKICAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRS
ZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAyKCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBw
ZWRUb1VuaXRTcXVhcmUucDIoKS55KCksCiAgICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1h
cHBlZFRvVW5pdFNxdWFyZS5wMygpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9V
bml0U3F1YXJlLnAzKCkueSgpLAogICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRU
b1VuaXRTcXVhcmUucDQoKS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNx
dWFyZS5wNCgpLnkoKQogICAgIH07Ci0gICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihz
aGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCBx
dWFkKSk7CisgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyUHJvZ3Jh
bS0+dmVydGV4QXR0cmliKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAs
IEdDM0RpbnRwdHIocXVhZCkpOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0g
VHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpLm11bHRpcGx5KG1v
ZGVsVmlld01hdHJpeCkubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgoCiAgICAgICAgICAg
ICBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLAogICAgICAg
ICAgICAgMCwgcXVhZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJlY3QuaGVpZ2h0KCksIDAsIDAsCiAg
ICAgICAgICAgICAwLCAwLCAxLCAwLAogICAgICAgICAgICAgcXVhZFRvRHJhdy5vcmlnaW5hbFRh
cmdldFJlY3QueCgpLCBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC55KCksIDAsIDEpKTsK
LSAgICBjb25zdCBHTGZsb2F0IG00W10gPSB7CisgICAgY29uc3QgR0MzRGZsb2F0IG00W10gPSB7
CiAgICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigpLCBtYXRyaXgubTEzKCksIG1hdHJp
eC5tMTQoKSwKICAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIG1hdHJpeC5tMjMo
KSwgbWF0cml4Lm0yNCgpLAogICAgICAgICBtYXRyaXgubTMxKCksIG1hdHJpeC5tMzIoKSwgbWF0
cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCiAgICAgICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4Lm00
MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQogICAgIH07Ci0gICAgR0xfQ01EKGdsVW5p
Zm9ybU1hdHJpeDRmdihzaGFkZXJQcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBHTF9GQUxT
RSwgbTQpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihzaGFkZXJQcm9ncmFt
LT5tYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgY29uc3RfY2FzdDxHQzNEZmxvYXQqPihtNCkp
OwogCiAgICAgaWYgKG5lZWRzQmxlbmRpbmcpIHsKLSAgICAgICAgR0xfQ01EKGdsQmxlbmRGdW5j
KEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSkpOwotICAgICAgICBHTF9DTUQoZ2xFbmFi
bGUoR0xfQkxFTkQpKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmJsZW5kRnVuYyhHcmFwaGljc0Nv
bnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7Cisg
ICAgICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9CTEVORCkpOworICAgICAgICBt
X2NvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwogCi0gICAgR0xf
Q01EKGdsRHJhd0FycmF5cyhkcmF3aW5nTW9kZSwgMCwgNCkpOwotICAgIEdMX0NNRChnbERpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOworICAg
IG1fY29udGV4dDNELT5kcmF3QXJyYXlzKGRyYXdpbmdNb2RlLCAwLCA0KTsKKyAgICBtX2NvbnRl
eHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJp
YigpKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3Im
IGNvbG9yLCBmbG9hdCB3aWR0aCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4KQpAQCAtMzQ5LDE3ICszMDIsMTcg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBm
bG9hdCB3aWR0aCwgY29uc3QgRmxvYXRSZWMKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRy
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4gcHJvZ3JhbSA9IGRhdGEoKS5z
aGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5zb2xpZENvbG9yUHJvZ3Jh
bSgpOwotICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOworICAgIG1fY29u
dGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOwogCiAgICAgZmxvYXQgYWxwaGEgPSBj
b2xvci5hbHBoYSgpIC8gMjU1LjA7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTRmKHByb2dyYW0tPmNv
bG9yTG9jYXRpb24oKSwKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTRmKHByb2dyYW0tPmNvbG9y
TG9jYXRpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgKGNvbG9yLnJlZCgpIC8gMjU1LjAp
ICogYWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgIChjb2xvci5ncmVlbigpIC8gMjU1LjAp
ICogYWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgIChjb2xvci5ibHVlKCkgLyAyNTUuMCkg
KiBhbHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgYWxwaGEpKTsKLSAgICBHTF9DTUQoZ2xM
aW5lV2lkdGgod2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgYWxwaGEpOworICAgIG1f
Y29udGV4dDNELT5saW5lV2lkdGgod2lkdGgpOwogCi0gICAgZHJhd1F1YWQodGFyZ2V0UmVjdCwg
bW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdldCgpLCBHTF9MSU5FX0xPT1AsIGNvbG9yLmhhc0Fs
cGhhKCkpOworICAgIGRyYXdRdWFkKHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgcHJvZ3Jh
bS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUCwgY29sb3IuaGFzQWxwaGEoKSk7
CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3UmVwYWludENvdW50ZXIoaW50IHZhbHVl
LCBpbnQgcG9pbnRTaXplLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCkKQEAgLTQwNiw3ICszNTksOCBAQCB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4
dHVyZSwgY29uc3QgRmxvYXRSZWN0JgogICAgIGRyYXdUZXh0dXJlKHRleHR1cmVHTC5pZCgpLCB0
ZXh0dXJlR0wuaXNPcGFxdWUoKSA/IDAgOiBTdXBwb3J0c0JsZW5kaW5nLCB0ZXh0dXJlR0wuc2l6
ZSgpLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHksIG1hc2ssIGV4cG9zZWRFZGdlcyk7CiB9
CiAKLSNpZiBkZWZpbmVkKEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSkKKyNpZiBPUyhEQVJXSU4p
CisvLyBUaGlzIGlzIHNwZWNpZmljIHRvIHRoZSBNYWMgaW1wbGVtZW50YXRpb24gb2YgR3JhcGhp
Y3NTdXJmYWNlLiBJT1N1cmZhY2UgcmVxdWlyZXMgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCIHRv
IGJlIHVzZWQuCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVSZWN0YW5nbGVBUkIo
dWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXpl
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1h
c2tUZXh0dXJlKQogewogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJv
Z3JhbTsKQEAgLTQxNCwzNiArMzY4LDM2IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4
dHVyZVJlY3RhbmdsZUFSQih1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uCiAgICAg
ICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdE9w
YWNpdHlBbmRNYXNrKTsKICAgICBlbHNlCiAgICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVk
R0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdFNpbXBsZSk7Ci0gICAgR0xfQ01EKGdsVXNlUHJv
Z3JhbShwcm9ncmFtLT5pZCgpKSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3Jh
bS0+aWQoKSk7CiAKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFt
LT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVS
RTApKTsKLSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIs
IHRleHR1cmUpKTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVy
ZUxvY2F0aW9uKCksIDApKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJy
YXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgdGV4dHVyZSk7CisgICAgbV9jb250ZXh0
M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5zb3VyY2VUZXh0dXJlTG9jYXRpb24oKSwgMCk7CiAKLSAg
ICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbS0+ZmxpcExvY2F0aW9uKCksICEhKGZsYWdzICYg
U2hvdWxkRmxpcFRleHR1cmUpKSk7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTJmKHByb2dyYW0tPnRl
eHR1cmVTaXplTG9jYXRpb24oKSwgdGV4dHVyZVNpemUud2lkdGgoKSwgdGV4dHVyZVNpemUuaGVp
Z2h0KCkpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPmZsaXBMb2NhdGlv
bigpLCAhIShmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSk7CisgICAgbV9jb250ZXh0M0QtPnVu
aWZvcm0yZihwcm9ncmFtLT50ZXh0dXJlU2l6ZUxvY2F0aW9uKCksIHRleHR1cmVTaXplLndpZHRo
KCksIHRleHR1cmVTaXplLmhlaWdodCgpKTsKIAogICAgIGlmIChUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24o
KSkpCi0gICAgICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24o
KSwgb3BhY2l0eSkpOworICAgICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPm9w
YWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5KTsKIAogICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNr
VGV4dHVyZS0+aXNWYWxpZCgpICYmIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlk
VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSkpIHsKICAgICAg
ICAgY29uc3QgQml0bWFwVGV4dHVyZUdMKiBtYXNrVGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQml0bWFwVGV4dHVyZUdMKj4obWFza1RleHR1cmUpOwotICAgICAgICBHTF9DTUQoZ2xBY3Rp
dmVUZXh0dXJlKEdMX1RFWFRVUkUxKSk7Ci0gICAgICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPmlkKCkpKTsKLSAgICAgICAgR0xfQ01EKGdsVW5p
Zm9ybTFpKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSwgMSkpOwotICAgICAgICBHTF9D
TUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSk7CisgICAgICAgIG1fY29udGV4dDNELT5h
Y3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSk7CisgICAgICAgIG1fY29u
dGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbWFza1Rl
eHR1cmVHTC0+aWQoKSk7CisgICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+
bWFza1RleHR1cmVMb2NhdGlvbigpLCAxKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKICAgICB9CiAKICAgICBib29sIG5l
ZWRzQmxlbmRpbmcgPSAoZmxhZ3MgJiBTdXBwb3J0c0JsZW5kaW5nKSB8fCBvcGFjaXR5IDwgMC45
OSB8fCBtYXNrVGV4dHVyZTsKLSAgICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRy
aXgsIHByb2dyYW0uZ2V0KCksIEdMX1RSSUFOR0xFX0ZBTiwgbmVlZHNCbGVuZGluZyk7CisgICAg
ZHJhd1F1YWQodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdldCgpLCBHcmFw
aGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCBuZWVkc0JsZW5kaW5nKTsKIH0KLSNlbmRpZiAv
LyBkZWZpbmVkKEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSkgCisjZW5kaWYgLy8gT1MoREFSV0lO
KQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwg
RmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIC8qIHRleHR1cmVTaXplICovLCBjb25zdCBGbG9h
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdN
YXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlLCB1
bnNpZ25lZCBleHBvc2VkRWRnZXMpCiB7Ci0gICAgYm9vbCBuZWVkc0FudGlsaWFpbmcgPSBtX2Vu
YWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyAmJiAhbW9kZWxWaWV3TWF0cml4LmlzSW50ZWdl
clRyYW5zbGF0aW9uKCk7Ci0gICAgaWYgKG5lZWRzQW50aWxpYWluZyAmJiBkcmF3VGV4dHVyZVdp
dGhBbnRpYWxpYXNpbmcodGV4dHVyZSwgZmxhZ3MsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJp
eCwgb3BhY2l0eSwgbWFza1RleHR1cmUsIGV4cG9zZWRFZGdlcykpCisgICAgYm9vbCBuZWVkc0Fu
dGlhbGlhaW5nID0gbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcgJiYgIW1vZGVsVmll
d01hdHJpeC5pc0ludGVnZXJUcmFuc2xhdGlvbigpOworICAgIGlmIChuZWVkc0FudGlhbGlhaW5n
ICYmIGRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh0ZXh0dXJlLCBmbGFncywgdGFyZ2V0UmVj
dCwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5LCBtYXNrVGV4dHVyZSwgZXhwb3NlZEVkZ2VzKSkK
ICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+
IHByb2dyYW07CkBAIC00NTEsMTUgKzQwNSwxNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJh
d1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmCiAg
ICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3Bh
Y2l0eUFuZE1hc2spOwogICAgIGVsc2UKICAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRH
TERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaW1wbGUpOwotICAgIEdMX0NNRChnbFVzZVByb2dyYW0o
cHJvZ3JhbS0+aWQoKSkpOworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlk
KCkpOwogCiAgICAgZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKHByb2dyYW0uZ2V0KCksIHRl
eHR1cmUsIGZsYWdzLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tU
ZXh0dXJlKTsKIH0KIAotc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZpZXdwb3J0TWF0cml4
KCkKK3N0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2aWV3cG9ydE1hdHJpeChHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dDNEKQogewotICAgIEdMaW50IHZpZXdwb3J0WzRdOwotICAgIEdMX0NN
RChnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCB2aWV3cG9ydCkpOworICAgIEdDM0RpbnQgdmll
d3BvcnRbNF07CisgICAgY29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6
VklFV1BPUlQsIHZpZXdwb3J0KTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsK
ICAgICBtYXRyaXgudHJhbnNsYXRlM2Qodmlld3BvcnRbMF0sIHZpZXdwb3J0WzFdLCAwKTsKQEAg
LTU1Niw3ICs1MTAsNyBAQCBib29sIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50
aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLAogICAgIC8vIGFudGlhbGlh
c2luZy4gTm90ZSBoZXJlIHRoYXQgd2UgYXJlIGFsc28gaW5jbHVkaW5nIHRoZSB2aWV3cG9ydCBt
YXRyaXggKHdoaWNoCiAgICAgLy8gdHJhbnNsYXRlcyBmcm9tIG5vcm1hbGl6ZWQgZGV2aWNlIGNv
b3JkaW5hdGVzIHRvIHNjcmVlbiBjb29yZGluYXRlcyksIGJlY2F1c2UgdGhlc2UKICAgICAvLyB2
YWx1ZXMgYXJlIGNvbnN1bWVkIGluIHRoZSBmcmFnbWVudCBzaGFkZXIsIHdoaWNoIHdvcmtzIGlu
IHNjcmVlbiBjb29yZGluYXRlcy4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW5TcGFj
ZVRyYW5zZm9ybSA9IHZpZXdwb3J0TWF0cml4KCkubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRy
aXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpKS5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgpLnRv
MmRUcmFuc2Zvcm0oKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW5TcGFjZVRyYW5z
Zm9ybSA9IHZpZXdwb3J0TWF0cml4KG1fY29udGV4dDNELmdldCgpKS5tdWx0aXBseShUcmFuc2Zv
cm1hdGlvbk1hdHJpeChkYXRhKCkucHJvamVjdGlvbk1hdHJpeCkpLm11bHRpcGx5KG1vZGVsVmll
d01hdHJpeCkudG8yZFRyYW5zZm9ybSgpOwogICAgIGlmICghc2NyZWVuU3BhY2VUcmFuc2Zvcm0u
aXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBGbG9hdFF1YWQgcXVh
ZEluU2NyZWVuU3BhY2UgPSBzY3JlZW5TcGFjZVRyYW5zZm9ybS5tYXBRdWFkKG9yaWdpbmFsVGFy
Z2V0UmVjdCk7CkBAIC01ODAsOCArNTM0LDggQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdU
ZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywKICAg
ICBxdWFkVG9FZGdlQXJyYXkoaW5mbGF0ZVF1YWQocXVhZEluU2NyZWVuU3BhY2UuYm91bmRpbmdC
b3goKSwgIGluZmxhdGlvbkRpc3RhbmNlKSwgdGFyZ2V0UXVhZEVkZ2VzICsgMTIpOwogCiAgICAg
UmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrPiBwcm9n
cmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmFu
dGlhbGlhc2luZ05vTWFza1Byb2dyYW0oKTsKLSAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dy
YW0tPmlkKCkpKTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtM2Z2KHByb2dyYW0tPmV4cGFuZGVkUXVh
ZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uKCksIDgsIHRhcmdldFF1YWRFZGdlcykpOworICAg
IG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOworICAgIG1fY29udGV4dDNE
LT51bmlmb3JtM2Z2KHByb2dyYW0tPmV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0
aW9uKCksIDgsIHRhcmdldFF1YWRFZGdlcyk7CiAKICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFBy
b2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVyZSwgZmxhZ3MsIERyYXdRdWFkKG9yaWdpbmFsVGFy
Z2V0UmVjdCwgZXhwYW5kZWRRdWFkSW5UZXh0dXJlQ29vcmRpbmF0ZXMpLCBtb2RlbFZpZXdNYXRy
aXgsIG9wYWNpdHksIDAgLyogbWFza1RleHR1cmUgKi8pOwogICAgIHJldHVybiB0cnVlOwpAQCAt
NTg5LDI2ICs1NDMsMjYgQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlV2l0aEFu
dGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywKIAogdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OmRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbSogcHJvZ3JhbSwgdWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IERy
YXdRdWFkJiBxdWFkVG9EcmF3LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkK
IHsKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhB
dHRyaWIoKSkpOwotICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKLSAg
ICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlKSk7Ci0gICAgR0xf
Q01EKGdsVW5pZm9ybTFpKHByb2dyYW0tPnNvdXJjZVRleHR1cmVMb2NhdGlvbigpLCAwKSk7Cisg
ICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0
dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRTApOworICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShw
cm9ncmFtLT5zb3VyY2VUZXh0dXJlTG9jYXRpb24oKSwgMCk7CiAKLSAgICBHTF9DTUQoZ2xVbmlm
b3JtMWYocHJvZ3JhbS0+ZmxpcExvY2F0aW9uKCksICEhKGZsYWdzICYgU2hvdWxkRmxpcFRleHR1
cmUpKSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5mbGlwTG9jYXRpb24o
KSwgISEoZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVyZSkpOwogCiAgICAgaWYgKFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0tPm9wYWNpdHlM
b2NhdGlvbigpKSkKLSAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW0tPm9wYWNpdHlM
b2NhdGlvbigpLCBvcGFjaXR5KSk7CisgICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJv
Z3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpOwogCiAgICAgaWYgKG1hc2tUZXh0dXJl
ICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkgJiYgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpKSkg
ewogICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wqIG1hc2tUZXh0dXJlR0wgPSBzdGF0aWNf
Y2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNrVGV4dHVyZSk7Ci0gICAgICAgIEdMX0NN
RChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpKTsKLSAgICAgICAgR0xfQ01EKGdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgbWFza1RleHR1cmVHTC0+aWQoKSkpOwotICAgICAgICBHTF9D
TUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpLCAxKSk7Ci0gICAg
ICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKKyAgICAgICAgbV9jb250
ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKKyAgICAg
ICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBtYXNrVGV4dHVyZUdMLT5pZCgpKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShw
cm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCksIDEpOworICAgICAgICBtX2NvbnRleHQzRC0+
YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwogICAgIH0KIAogICAg
IGJvb2wgbmVlZHNCbGVuZGluZyA9IChmbGFncyAmIFN1cHBvcnRzQmxlbmRpbmcpIHx8IG9wYWNp
dHkgPCAwLjk5IHx8IG1hc2tUZXh0dXJlOwotICAgIGRyYXdRdWFkKHF1YWRUb0RyYXcsIG1vZGVs
Vmlld01hdHJpeCwgcHJvZ3JhbSwgR0xfVFJJQU5HTEVfRkFOLCBuZWVkc0JsZW5kaW5nKTsKKyAg
ICBkcmF3UXVhZChxdWFkVG9EcmF3LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0sIEdyYXBoaWNz
Q29udGV4dDNEOjpUUklBTkdMRV9GQU4sIG5lZWRzQmxlbmRpbmcpOwogfQogCiBib29sIEJpdG1h
cFRleHR1cmVHTDo6Y2FuUmV1c2VXaXRoKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSwgRmxh
Z3MpCkBAIC02MTksNyArNTczLDcgQEAgYm9vbCBCaXRtYXBUZXh0dXJlR0w6OmNhblJldXNlV2l0
aChjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUsIEZsYWdzKQogI2lmIE9TKERBUldJTikKICNk
ZWZpbmUgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUgR0xfVU5TSUdORURfSU5U
XzhfOF84XzhfUkVWCiAjZWxzZQotI2RlZmluZSBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNG
RVJfVFlQRSBHTF9VTlNJR05FRF9CWVRFCisjZGVmaW5lIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9U
UkFOU0ZFUl9UWVBFIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCiAjZW5kaWYKIAog
c3RhdGljIGJvb2wgZHJpdmVyU3VwcG9ydHNTdWJJbWFnZSgpCkBAIC02MzQsMzAgKzU4OCwzMSBA
QCBzdGF0aWMgYm9vbCBkcml2ZXJTdXBwb3J0c1N1YkltYWdlKCkKIAogdm9pZCBCaXRtYXBUZXh0
dXJlR0w6OmRpZFJlc2V0KCkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0g
bV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOwogICAgIGlmICghbV9pZCkKLSAg
ICAgICAgR0xfQ01EKGdsR2VuVGV4dHVyZXMoMSwgJm1faWQpKTsKLQorICAgICAgICBtX2lkID0g
Y29udGV4dDNELT5jcmVhdGVUZXh0dXJlKCk7CiAgICAgbV9zaG91bGRDbGVhciA9IHRydWU7CiAg
ICAgaWYgKG1fdGV4dHVyZVNpemUgPT0gY29udGVudFNpemUoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgbV90ZXh0dXJlU2l6ZSA9IGNvbnRlbnRTaXplKCk7Ci0gICAgR0xfQ01EKGdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpOwotICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmko
R0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpKTsKLSAgICBH
TF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRF
UiwgR0xfTElORUFSKSk7Ci0gICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSkpOwotICAgIEdMX0NNRChnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RP
X0VER0UpKTsKLSAgICBHTF9DTUQoZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JH
QkEsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgR0xf
UkdCQSwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIDApKTsKKyAgICBjb250
ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2lkKTsK
KyAgICBjb250ZXh0M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpMSU5FQVIpOworICAgIGNvbnRleHQzRC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgY29udGV4dDNELT50ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBjb250ZXh0
M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VE
R0UpOworICAgIGNvbnRleHQzRC0+dGV4SW1hZ2UyRERpcmVjdChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG1fdGV4dHVyZVNpemUud2lk
dGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
IERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAwKTsKIH0KIAogCiB2b2lkIEJp
dG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50
UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UG9pbnQmIHNvdXJjZU9mZnNldCwgaW50IGJ5dGVz
UGVyTGluZSkKIHsKLSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lk
KSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+
Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBjb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBtX2lkKTsKIAogICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVz
UGVyUGl4ZWwgPSA0OwogICAgIGlmIChieXRlc1BlckxpbmUgPT0gdGFyZ2V0UmVjdC53aWR0aCgp
ICogYnl0ZXNQZXJQaXhlbCAmJiBzb3VyY2VPZmZzZXQgPT0gSW50UG9pbnQ6Onplcm8oKSkgewot
ICAgICAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHRhcmdldFJl
Y3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0Lmhl
aWdodCgpLCBHTF9SR0JBLCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgKGNv
bnN0IGNoYXIqKWRhdGEpKTsKKyAgICAgICAgY29udGV4dDNELT50ZXhTdWJJbWFnZTJEKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55
KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29uc3Qg
Y2hhciopZGF0YSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTY3NSwxOSArNjMwLDE5
IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRh
LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0CiAgICAgICAgICAgICBkc3QgKz0gdGFyZ2V0Qnl0
ZXNQZXJMaW5lOwogICAgICAgICB9CiAKLSAgICAgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJl
Y3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgR0xfUkdCQSwgREVGQVVMVF9URVhUVVJF
X1BJWEVMX1RSQU5TRkVSX1RZUEUsIHRlbXBvcmFyeURhdGEuZGF0YSgpKSk7CisgICAgICAgIGNv
bnRleHQzRC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwg
dGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdl
dFJlY3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBERUZBVUxUX1RFWFRVUkVf
UElYRUxfVFJBTlNGRVJfVFlQRSwgdGVtcG9yYXJ5RGF0YS5kYXRhKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAjaWYgIWRlZmluZWQoVEVYTUFQX09QRU5HTF9FU18yKQogICAgIC8vIFVz
ZSB0aGUgT3BlbkdMIHN1Yi1pbWFnZSBleHRlbnNpb24sIG5vdyB0aGF0IHdlIGtub3cgaXQncyBh
dmFpbGFibGUuCi0gICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgs
IGJ5dGVzUGVyTGluZSAvIGJ5dGVzUGVyUGl4ZWwpKTsKLSAgICBHTF9DTUQoZ2xQaXhlbFN0b3Jl
aShHTF9VTlBBQ0tfU0tJUF9ST1dTLCBzb3VyY2VPZmZzZXQueSgpKSk7Ci0gICAgR0xfQ01EKGds
UGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUElYRUxTLCBzb3VyY2VPZmZzZXQueCgpKSk7Ci0g
ICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0Lngo
KSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQo
KSwgR0xfUkdCQSwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIChjb25zdCBj
aGFyKilkYXRhKSk7Ci0gICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5H
VEgsIDApKTsKLSAgICBHTF9DTUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCAw
KSk7Ci0gICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUElYRUxTLCAwKSk7
CisgICAgY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgYnl0ZXNQ
ZXJMaW5lIC8gYnl0ZXNQZXJQaXhlbCk7CisgICAgY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9V
TlBBQ0tfU0tJUF9ST1dTLCBzb3VyY2VPZmZzZXQueSgpKTsKKyAgICBjb250ZXh0M0QtPnBpeGVs
U3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJWEVMUywgc291cmNlT2Zmc2V0LngoKSk7CisgICAgY29u
dGV4dDNELT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB0
YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0
UmVjdC5oZWlnaHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIERFRkFVTFRfVEVYVFVSRV9Q
SVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29uc3QgY2hhciopZGF0YSk7CisgICAgY29udGV4dDNELT5w
aXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgMCk7CisgICAgY29udGV4dDNELT5waXhl
bFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCAwKTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3Rv
cmVpKEdMX1VOUEFDS19TS0lQX1BJWEVMUywgMCk7CiAjZW5kaWYKIH0KIApAQCAtNzEyLDE5ICs2
NjcsMTkgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdGaWx0ZXJlZChjb25zdCBCaXRtYXBU
ZXh0dXJlJiBzb3VyY2VUZXh0dXJlLCBjb25zdCBCaXQKIAogICAgIHByb2dyYW0tPnByZXBhcmUo
ZmlsdGVyLCBwYXNzLCBzb3VyY2VUZXh0dXJlLmNvbnRlbnRTaXplKCksIHN0YXRpY19jYXN0PGNv
bnN0IEJpdG1hcFRleHR1cmVHTCY+KGNvbnRlbnRUZXh0dXJlKS5pZCgpKTsKIAotICAgIEdMX0NN
RChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0g
ICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRBdHRy
aWIoKSkpOwotICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKLSAgICBH
TF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBzdGF0aWNfY2FzdDxjb25zdCBCaXRt
YXBUZXh0dXJlR0wmPihzb3VyY2VUZXh0dXJlKS5pZCgpKSk7Ci0gICAgZ2xVbmlmb3JtMWkocHJv
Z3JhbS0+dGV4dHVyZVVuaWZvcm0oKSwgMCk7Ci0gICAgY29uc3QgR0xmbG9hdCB0YXJnZXRWZXJ0
aWNlc1tdID0gey0xLCAtMSwgMSwgLTEsIDEsIDEsIC0xLCAxfTsKLSAgICBjb25zdCBHTGZsb2F0
IHNvdXJjZVZlcnRpY2VzW10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07Ci0gICAgR0xfQ01E
KGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR0xfRkxP
QVQsIEdMX0ZBTFNFLCAwLCB0YXJnZXRWZXJ0aWNlcykpOwotICAgIEdMX0NNRChnbFZlcnRleEF0
dHJpYlBvaW50ZXIocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSwgMiwgR0xfRkxPQVQsIEdMX0ZB
TFNFLCAwLCBzb3VyY2VWZXJ0aWNlcykpOwotICAgIEdMX0NNRChnbERpc2FibGUoR0xfQkxFTkQp
KTsKLSAgICBHTF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpOwotICAg
IEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIo
KSkpOwotICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT50ZXhD
b29yZEF0dHJpYigpKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4
QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0Qt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKyAgICBtX2NvbnRl
eHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHN0YXRpY19j
YXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHNvdXJjZVRleHR1cmUpLmlkKCkpOworICAgIG1f
Y29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+dGV4dHVyZVVuaWZvcm0oKSwgMCk7CisgICAg
Y29uc3QgR0MzRGZsb2F0IHRhcmdldFZlcnRpY2VzW10gPSB7LTEsIC0xLCAxLCAtMSwgMSwgMSwg
LTEsIDF9OworICAgIGNvbnN0IEdDM0RmbG9hdCBzb3VyY2VWZXJ0aWNlc1tdID0gezAsIDAsIDEs
IDAsIDEsIDEsIDAsIDF9OworICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHBy
b2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNl
LCAwLCBHQzNEaW50cHRyKHRhcmdldFZlcnRpY2VzKSk7CisgICAgbV9jb250ZXh0M0QtPnZlcnRl
eEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSwgMiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cihzb3VyY2VWZXJ0aWNlcykpOworICAg
IG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgbV9j
b250ZXh0M0QtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwg
NCk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52
ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigpKTsKIH0KIAogUGFzc1JlZlB0cjxCaXRtYXBUZXh0
dXJlPiBCaXRtYXBUZXh0dXJlR0w6OmFwcGx5RmlsdGVycyhjb25zdCBCaXRtYXBUZXh0dXJlJiBj
b250ZW50VGV4dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKQEAgLTc2NSwx
NyArNzIwLDE4IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjppbml0aWFsaXplU3RlbmNpbCgpCiB7
CiAgICAgaWYgKG1fcmJvKQogICAgICAgICByZXR1cm47Ci0gICAgR0xfQ01EKGdsR2VuUmVuZGVy
YnVmZmVycygxLCAmbV9yYm8pKTsKLSAgICBHTF9DTUQoZ2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JF
TkRFUkJVRkZFUiwgbV9yYm8pKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0g
bV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOworICAgIG1fcmJvID0gY29udGV4
dDNELT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICBjb250ZXh0M0QtPmJpbmRSZW5kZXJidWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9yYm8pOwogI2lmZGVmIFRFWE1B
UF9PUEVOR0xfRVNfMgotICAgIEdMX0NNRChnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVS
QlVGRkVSLCBHTF9TVEVOQ0lMX0lOREVYOCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1
cmVTaXplLmhlaWdodCgpKSk7CisgICAgY29udGV4dDNELT5yZW5kZXJidWZmZXJTdG9yYWdlKEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X0lOREVYOCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsK
ICNlbHNlCi0gICAgR0xfQ01EKGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTF9SRU5ERVJCVUZGRVIs
IEdMX0RFUFRIX1NURU5DSUwsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5o
ZWlnaHQoKSkpOworICAgIGNvbnRleHQzRC0+cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCwg
bV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsKICNlbmRpZgot
ICAgIEdMX0NNRChnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCAwKSk7Ci0gICAg
R0xfQ01EKGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5D
SUxfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX3JibykpOwotICAgIEdMX0NNRChnbENs
ZWFyU3RlbmNpbCgwKSk7Ci0gICAgR0xfQ01EKGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJfQklU
KSk7CisgICAgY29udGV4dDNELT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVIsIDApOworICAgIGNvbnRleHQzRC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJ
TF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX3Jibyk7Cisg
ICAgY29udGV4dDNELT5jbGVhclN0ZW5jaWwoMCk7CisgICAgY29udGV4dDNELT5jbGVhcihHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKTsKIH0KIAogdm9pZCBCaXRtYXBUZXh0
dXJlR0w6OmNsZWFySWZOZWVkZWQoKQpAQCAtNzgzLDEwICs3MzksMTEgQEAgdm9pZCBCaXRtYXBU
ZXh0dXJlR0w6OmNsZWFySWZOZWVkZWQoKQogICAgIGlmICghbV9zaG91bGRDbGVhcikKICAgICAg
ICAgcmV0dXJuOwogCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVy
ZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKICAgICBtX2NsaXBTdGFjay5pbml0KEludFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgbV90ZXh0dXJlU2l6ZSkpOwotICAgIG1fY2xpcFN0YWNrLmFw
cGx5KCk7Ci0gICAgR0xfQ01EKGdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKSk7Ci0gICAgR0xfQ01E
KGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCkpOworICAgIG1fY2xpcFN0YWNrLmFwcGx5KGNv
bnRleHQzRCk7CisgICAgY29udGV4dDNELT5jbGVhckNvbG9yKDAsIDAsIDAsIDApOworICAgIGNv
bnRleHQzRC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOwogICAg
IG1fc2hvdWxkQ2xlYXIgPSBmYWxzZTsKIH0KIApAQCAtNzk1LDMzICs3NTIsMzYgQEAgdm9pZCBC
aXRtYXBUZXh0dXJlR0w6OmNyZWF0ZUZib0lmTmVlZGVkKCkKICAgICBpZiAobV9mYm8pCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEdMX0NNRChnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pKTsK
LSAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKSk7Ci0g
ICAgR0xfQ01EKGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9S
X0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBpZCgpLCAwKSk7CisgICAgR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsK
KyAgICBtX2ZibyA9IGNvbnRleHQzRC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBjb250ZXh0
M0QtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJv
KTsKKyAgICBjb250ZXh0M0QtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgaWQoKSwgMCk7CiAgICAgbV9zaG91bGRDbGVhciA9
IHRydWU7CiB9CiAKIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpiaW5kKCkKIHsKLSAgICBHTF9DTUQo
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBj
b250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsK
ICAgICBjcmVhdGVGYm9JZk5lZWRlZCgpOwotICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgbV9mYm8pKTsKLSAgICBHTF9DTUQoZ2xWaWV3cG9ydCgwLCAwLCBtX3Rl
eHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKTsKKyAgICBjb250ZXh0
M0QtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJv
KTsKKyAgICBjb250ZXh0M0QtPnZpZXdwb3J0KDAsIDAsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwg
bV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CiAgICAgY2xlYXJJZk5lZWRlZCgpOwogICAgIG1fdGV4
dHVyZU1hcHBlci0+ZGF0YSgpLnByb2plY3Rpb25NYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0
cml4KG1fdGV4dHVyZVNpemUsIHRydWUgLyogbWlycm9yZWQgKi8pOwotICAgIG1fY2xpcFN0YWNr
LmFwcGx5KCk7CisgICAgbV9jbGlwU3RhY2suYXBwbHkoY29udGV4dDNEKTsKIH0KIAogQml0bWFw
VGV4dHVyZUdMOjp+Qml0bWFwVGV4dHVyZUdMKCkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOwogICAgIGlm
IChtX2lkKQotICAgICAgICBHTF9DTUQoZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9pZCkpOworICAg
ICAgICBjb250ZXh0M0QtPmRlbGV0ZVRleHR1cmUobV9pZCk7CiAKICAgICBpZiAobV9mYm8pCi0g
ICAgICAgIEdMX0NNRChnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pKTsKKyAgICAgICAg
Y29udGV4dDNELT5kZWxldGVGcmFtZWJ1ZmZlcihtX2Zibyk7CiAKICAgICBpZiAobV9yYm8pCi0g
ICAgICAgIEdMX0NNRChnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fcmJvKSk7CisgICAgICAg
IGNvbnRleHQzRC0+ZGVsZXRlUmVuZGVyYnVmZmVyKG1fcmJvKTsKIH0KIAogYm9vbCBCaXRtYXBU
ZXh0dXJlR0w6OmlzVmFsaWQoKSBjb25zdApAQCAtODQxLDExICs4MDEsMTEgQEAgVGV4dHVyZU1h
cHBlckdMOjp+VGV4dHVyZU1hcHBlckdMKCkKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJpbmRE
ZWZhdWx0U3VyZmFjZSgpCiB7Ci0gICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpKTsKKyAgICBtX2NvbnRleHQzRC0+Ymlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgZGF0YSgpLnRhcmdl
dEZyYW1lQnVmZmVyKTsKICAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZShkYXRhKCkudmlld3BvcnRb
Ml0sIGRhdGEoKS52aWV3cG9ydFszXSk7CiAgICAgZGF0YSgpLnByb2plY3Rpb25NYXRyaXggPSBj
cmVhdGVQcm9qZWN0aW9uTWF0cml4KHZpZXdwb3J0U2l6ZSwgZGF0YSgpLlBhaW50RmxhZ3MgJiBQ
YWludGluZ01pcnJvcmVkKTsKLSAgICBHTF9DTUQoZ2xWaWV3cG9ydChkYXRhKCkudmlld3BvcnRb
MF0sIGRhdGEoKS52aWV3cG9ydFsxXSwgdmlld3BvcnRTaXplLndpZHRoKCksIHZpZXdwb3J0U2l6
ZS5oZWlnaHQoKSkpOwotICAgIG1fY2xpcFN0YWNrLmFwcGx5KCk7CisgICAgbV9jb250ZXh0M0Qt
PnZpZXdwb3J0KGRhdGEoKS52aWV3cG9ydFswXSwgZGF0YSgpLnZpZXdwb3J0WzFdLCB2aWV3cG9y
dFNpemUud2lkdGgoKSwgdmlld3BvcnRTaXplLmhlaWdodCgpKTsKKyAgICBtX2NsaXBTdGFjay5h
cHBseShtX2NvbnRleHQzRC5nZXQoKSk7CiAgICAgZGF0YSgpLmN1cnJlbnRTdXJmYWNlLmNsZWFy
KCk7CiB9CiAKQEAgLTg3NSw3ICs4MzUsNyBAQCBib29sIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5T
Y2lzc29yQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjbGlwU3RhY2soKS5jdXJyZW50KCkuc2Npc3NvckJv
eC5pbnRlcnNlY3QocmVjdCk7Ci0gICAgY2xpcFN0YWNrKCkuYXBwbHkoKTsKKyAgICBjbGlwU3Rh
Y2soKS5hcHBseShtX2NvbnRleHQzRC5nZXQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTg4OSwxMCArODQ5LDEwIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAKICAgICBSZWZQdHI8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRh
KCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6U2ltcGxlKTsKIAotICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJv
Z3JhbS0+aWQoKSkpOwotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dy
YW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAgY29uc3QgR0xmbG9hdCB1bml0UmVjdFtdID0gezAs
IDAsIDEsIDAsIDEsIDEsIDAsIDF9OwotICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIo
cHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5pdFJl
Y3QpKTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKTsKKyAgICBt
X2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmli
KCkpOworICAgIGNvbnN0IEdDM0RmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEs
IDAsIDF9OworICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZl
cnRleEF0dHJpYigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNE
aW50cHRyKHVuaXRSZWN0KSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBU
cmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCkucHJvamVjdGlvbk1hdHJpeCkKICAgICAgICAgICAg
IC5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgpCkBAIC05MDEsMTQgKzg2MSwxNCBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2Rl
bFZpZXdNYXRyaXgsIGNvbgogICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCiAgICAgICAgICAg
ICAgICAgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCAwLCAxKSk7CiAKLSAgICBjb25z
dCBHTGZsb2F0IG00W10gPSB7CisgICAgY29uc3QgR0MzRGZsb2F0IG00W10gPSB7CiAgICAgICAg
IG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigpLCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwK
ICAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4
Lm0yNCgpLAogICAgICAgICBtYXRyaXgubTMxKCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygp
LCBtYXRyaXgubTM0KCksCiAgICAgICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRy
aXgubTQzKCksIG1hdHJpeC5tNDQoKQogICAgIH07CiAKLSAgICBjb25zdCBHTGZsb2F0IG00YWxs
W10gPSB7CisgICAgY29uc3QgR0MzRGZsb2F0IG00YWxsW10gPSB7CiAgICAgICAgIDIsIDAsIDAs
IDAsCiAgICAgICAgIDAsIDIsIDAsIDAsCiAgICAgICAgIDAsIDAsIDEsIDAsCkBAIC05MTcsNDMg
Kzg3Nyw0MiBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogCiAgICAgaW50JiBzdGVuY2lsSW5k
ZXggPSBjbGlwU3RhY2soKS5jdXJyZW50KCkuc3RlbmNpbEluZGV4OwogCi0gICAgR0xfQ01EKGds
RW5hYmxlKEdMX1NURU5DSUxfVEVTVCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCk7CiAKICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3Qg
ZG8gYW55IGFjdHVhbCBkcmF3aW5nLgotICAgIEdMX0NNRChnbFN0ZW5jaWxGdW5jKEdMX05FVkVS
LCBzdGVuY2lsSW5kZXgsIHN0ZW5jaWxJbmRleCkpOworICAgIG1fY29udGV4dDNELT5zdGVuY2ls
RnVuYyhHcmFwaGljc0NvbnRleHQzRDo6TkVWRVIsIHN0ZW5jaWxJbmRleCwgc3RlbmNpbEluZGV4
KTsKIAogICAgIC8vIE9wZXJhdGUgb25seSBvbiB0aGUgc3RlbmNpbEluZGV4IGFuZCBhYm92ZS4K
LSAgICBHTF9DTUQoZ2xTdGVuY2lsTWFzaygweGZmICYgfihzdGVuY2lsSW5kZXggLSAxKSkpOwor
ICAgIG1fY29udGV4dDNELT5zdGVuY2lsTWFzaygweGZmICYgfihzdGVuY2lsSW5kZXggLSAxKSk7
CiAKICAgICAvLyBGaXJzdCBjbGVhciB0aGUgZW50aXJlIGJ1ZmZlciBhdCB0aGUgY3VycmVudCBp
bmRleC4KLSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0
aW9uKCksIDEsIEdMX0ZBTFNFLCBtNGFsbCkpOwotICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9a
RVJPLCBHTF9aRVJPLCBHTF9aRVJPKSk7Ci0gICAgR0xfQ01EKGdsRHJhd0FycmF5cyhHTF9UUklB
TkdMRV9GQU4sIDAsIDQpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihwcm9n
cmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgY29uc3RfY2FzdDxHQzNEZmxvYXQqPiht
NGFsbCkpOworICAgIG1fY29udGV4dDNELT5zdGVuY2lsT3AoR3JhcGhpY3NDb250ZXh0M0Q6OlpF
Uk8sIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTyk7Cisg
ICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZB
TiwgMCwgNCk7CiAKICAgICAvLyBOb3cgYXBwbHkgdGhlIGN1cnJlbnQgaW5kZXggdG8gdGhlIG5l
dyBxdWFkLgotICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9SRVBMQUNFLCBHTF9SRVBMQUNFLCBH
TF9SRVBMQUNFKSk7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRy
aXhMb2NhdGlvbigpLCAxLCBHTF9GQUxTRSwgbTQpKTsKLSAgICBHTF9DTUQoZ2xEcmF3QXJyYXlz
KEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpOworICAgIG1fY29udGV4dDNELT5zdGVuY2lsT3AoR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFUExBQ0UsIEdyYXBoaWNzQ29udGV4dDNEOjpSRVBMQUNFLCBHcmFw
aGljc0NvbnRleHQzRDo6UkVQTEFDRSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm1NYXRyaXg0
ZnYocHJvZ3JhbS0+bWF0cml4TG9jYXRpb24oKSwgMSwgZmFsc2UsIGNvbnN0X2Nhc3Q8R0MzRGZs
b2F0Kj4obTQpKTsKKyAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQz
RDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKIAogICAgIC8vIENsZWFyIHRoZSBzdGF0ZS4KLSAgICBH
TF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkp
KTsKLSAgICBHTF9DTUQoZ2xTdGVuY2lsTWFzaygwKSk7CisgICAgbV9jb250ZXh0M0QtPmRpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250
ZXh0M0QtPnN0ZW5jaWxNYXNrKDApOwogCiAgICAgLy8gSW5jcmVhc2Ugc3RlbmNpbEluZGV4IGFu
ZCBhcHBseSBzdGVuY2lsIHRlc3RpbmcuCiAgICAgc3RlbmNpbEluZGV4ICo9IDI7Ci0gICAgY2xp
cFN0YWNrKCkuYXBwbHkoKTsKKyAgICBjbGlwU3RhY2soKS5hcHBseShtX2NvbnRleHQzRC5nZXQo
KSk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjplbmRDbGlwKCkKIHsKICAgICBjbGlwU3Rh
Y2soKS5wb3AoKTsKLSAgICBjbGlwU3RhY2soKS5hcHBseSgpOworICAgIGNsaXBTdGFjaygpLmFw
cGx5KG1fY29udGV4dDNELmdldCgpKTsKIH0KIAogUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBU
ZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRleHR1cmUoKQogewotICAgIEJpdG1hcFRleHR1cmVHTCog
dGV4dHVyZSA9IG5ldyBCaXRtYXBUZXh0dXJlR0woKTsKLSAgICB0ZXh0dXJlLT5zZXRUZXh0dXJl
TWFwcGVyKHRoaXMpOworICAgIEJpdG1hcFRleHR1cmVHTCogdGV4dHVyZSA9IG5ldyBCaXRtYXBU
ZXh0dXJlR0wodGhpcyk7CiAgICAgcmV0dXJuIGFkb3B0UmVmKHRleHR1cmUpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmgKaW5kZXggMDc2ZTY1ZjczNzc2MjYxZjBhM2I5M2JiODU3M2E1MDVkZTljMDE3
MC4uNDY0OWEwYjljMDNiNzZlMmZkNGZlNDFlZmUxMGU5M2Y0MTE1OGMyMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0wuaApAQCAtMjMsOCArMjMsOCBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKIAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjaW5j
bHVkZSAiVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4Lmgi
CiAKQEAgLTM4LDcgKzM4LDYgQEAgY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW07CiBj
bGFzcyBUZXh0dXJlTWFwcGVyR0wgOiBwdWJsaWMgVGV4dHVyZU1hcHBlciB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlckdMPiBjcmVhdGUoKSB7IHJldHVybiBh
ZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlckdMKTsgfQotICAgIFRleHR1cmVNYXBwZXJHTCgpOwog
ICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJHTCgpOwogCiAgICAgZW51bSBGbGFnIHsKQEAgLTU0
LDcgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBC
aXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5z
aWduZWQgZXhwb3NlZEVkZ2VzKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1
cmUodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
b2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tU
ZXh0dXJlLCB1bnNpZ25lZCBleHBvc2VkRWRnZXMgPSBBbGxFZGdlcyk7CiAKLSNpZiBkZWZpbmVk
KEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSkKKyNpZiBPUyhEQVJXSU4pCiAgICAgdmlydHVhbCB2
b2lkIGRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25z
dCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBj
b25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7CiAjZW5kaWYKIApAQCAtNjYsNiArNjUs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRTaXplIG1heFRleHR1cmVTaXplKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gSW50U2l6ZSgyMDAwLCAyMDAwKTsgfQogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCkgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCgpIE9WRVJSSURFIHsgcmV0dXJu
IG1fY29udGV4dDsgfQorICAgIGlubGluZSBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250
ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQzRC5nZXQoKTsgfQogICAgIHZpcnR1YWwg
dm9pZCBzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KSBPVkVSUklE
RSB7IG1fY29udGV4dCA9IGNvbnRleHQ7IH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAg
LTc1LDcgKzc1LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RW5hYmxlRWRnZURpc3RhbmNlQW50
aWFsaWFzaW5nKGJvb2wgZW5hYmxlZCkgeyBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2lu
ZyA9IGVuYWJsZWQ7IH0KIAogcHJpdmF0ZToKLQogICAgIHN0cnVjdCBDbGlwU3RhdGUgewogICAg
ICAgICBJbnRSZWN0IHNjaXNzb3JCb3g7CiAgICAgICAgIGludCBzdGVuY2lsSW5kZXg7CkBAIC04
OSw3ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgcHVibGljOgogICAgICAgICB2b2lkIHB1c2goKTsK
ICAgICAgICAgdm9pZCBwb3AoKTsKLSAgICAgICAgdm9pZCBhcHBseSgpOworICAgICAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dDNEKik7CiAgICAgICAgIGlubGluZSBDbGlwU3RhdGUmIGN1
cnJlbnQoKSB7IHJldHVybiBjbGlwU3RhdGU7IH0KICAgICAgICAgdm9pZCBpbml0KGNvbnN0IElu
dFJlY3QmKTsKIApAQCAtMTA5LDE2ICsxMDgsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgRmxvYXRR
dWFkIHRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmU7CiAgICAgfTsKIAorICAgIFRleHR1cmVN
YXBwZXJHTCgpOworCiAgICAgYm9vbCBkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMy
X3QgdGV4dHVyZSwgRmxhZ3MsIGNvbnN0IEZsb2F0UmVjdCYgb3JpZ2luYWxUYXJnZXRSZWN0LCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5
LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2Vz
KTsKICAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbSosIHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBEcmF3UXVhZCYsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHks
IGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKLSAgICB2b2lkIGRyYXdRdWFkKGNv
bnN0IERyYXdRdWFkJiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJp
eCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qLCBHTGVudW0gZHJhd2luZ01vZGUsIGJvb2wg
bmVlZHNCbGVuZGluZyk7CisgICAgdm9pZCBkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtKiwgR0MzRGVudW0gZHJhd2luZ01vZGUsIGJvb2wgbmVlZHNCbGVuZGluZyk7CiAK
ICAgICBib29sIGJlZ2luU2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBj
b25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIGJpbmREZWZhdWx0U3VyZmFjZSgpOwogICAgIENs
aXBTdGFjayYgY2xpcFN0YWNrKCk7CiAgICAgaW5saW5lIFRleHR1cmVNYXBwZXJHTERhdGEmIGRh
dGEoKSB7IHJldHVybiAqbV9kYXRhOyB9Ci0gICAgVGV4dHVyZU1hcHBlckdMRGF0YSogbV9kYXRh
OwogICAgIEdyYXBoaWNzQ29udGV4dCogbV9jb250ZXh0OworICAgIFJlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gbV9jb250ZXh0M0Q7CisgICAgVGV4dHVyZU1hcHBlckdMRGF0YSogbV9kYXRhOwog
ICAgIENsaXBTdGFjayBtX2NsaXBTdGFjazsKICAgICBib29sIG1fZW5hYmxlRWRnZURpc3RhbmNl
QW50aWFsaWFzaW5nOwogCkBAIC0xMzUsNyArMTM3LDcgQEAgcHVibGljOgogICAgIHZvaWQgaW5p
dGlhbGl6ZVN0ZW5jaWwoKTsKICAgICB+Qml0bWFwVGV4dHVyZUdMKCk7CiAgICAgdmlydHVhbCB1
aW50MzJfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLSAgICB1aW50MzJfdCB0ZXh0dXJl
VGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gR0xfVEVYVFVSRV8yRDsgfQorICAgIHVpbnQzMl90IHRl
eHR1cmVUYXJnZXQoKSBjb25zdCB7IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RDsgfQogICAgIEludFNpemUgdGV4dHVyZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVT
aXplOyB9CiAgICAgdm9pZCBzZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXJHTCogdGV4bWFw
KSB7IG1fdGV4dHVyZU1hcHBlciA9IHRleG1hcDsgfQogICAgIHZvaWQgdXBkYXRlQ29udGVudHMo
SW1hZ2UqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmKTsKQEAgLTE0NywyMCArMTQ5
LDIyIEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIEdMdWludCBtX2lkOworICAg
IFBsYXRmb3JtM0RPYmplY3QgbV9pZDsKICAgICBJbnRTaXplIG1fdGV4dHVyZVNpemU7CiAgICAg
SW50UmVjdCBtX2RpcnR5UmVjdDsKLSAgICBHTHVpbnQgbV9mYm87Ci0gICAgR0x1aW50IG1fcmJv
OworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mYm87CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3Ji
bzsKICAgICBib29sIG1fc2hvdWxkQ2xlYXI7Ci0gICAgVGV4dHVyZU1hcHBlckdMKiBtX3RleHR1
cmVNYXBwZXI7CiAgICAgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2sgbV9jbGlwU3RhY2s7Ci0g
ICAgQml0bWFwVGV4dHVyZUdMKCkKKyAgICBUZXh0dXJlTWFwcGVyR0wqIG1fdGV4dHVyZU1hcHBl
cjsKKworICAgIEJpdG1hcFRleHR1cmVHTCgpOworICAgIEJpdG1hcFRleHR1cmVHTChUZXh0dXJl
TWFwcGVyR0wqIHRleHR1cmVNYXBwZXIpCiAgICAgICAgIDogbV9pZCgwKQogICAgICAgICAsIG1f
ZmJvKDApCiAgICAgICAgICwgbV9yYm8oMCkKICAgICAgICAgLCBtX3Nob3VsZENsZWFyKHRydWUp
Ci0gICAgICAgICwgbV90ZXh0dXJlTWFwcGVyKDApCisgICAgICAgICwgbV90ZXh0dXJlTWFwcGVy
KHRleHR1cmVNYXBwZXIpCiAgICAgewogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5jcHAKaW5kZXggMGZiZGJlOTVjYWYxNjQ3MGRkMDYzMmYwNGMxNDRiODIw
YjZlOGJiMy4uYTA2M2U2YjIyY2U5ZGE4NGFjYjFiNzlhZDZhZTQxODVlZjEyMjY3ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCkBAIC0zMCw2MiArMzAsNDkg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWZuZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgot
I2RlZmluZSBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9OUyBcCi0gICAgIiNkZWZpbmUgbG93cFxu
I2RlZmluZSBoaWdocFxuIgotI2RlZmluZSBPRVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BS
RUNJU0lPTgotI2Vsc2UKLSNkZWZpbmUgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlMKLSNkZWZp
bmUgT0VTMl9GUkFHTUVOVF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT04gXAotICAgICJwcmVjaXNp
b24gbWVkaXVtcCBmbG9hdDsgXG4iCi0jZW5kaWYKLQotI2RlZmluZSBTVFJJTkdJRllfVkFMKHNy
Yy4uLikgI3NyYwotI2RlZmluZSBWRVJURVhfU0hBREVSKHNyYy4uLikgT0VTMl9QUkVDSVNJT05f
REVGSU5JVElPTlNcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJJTkdJRllfVkFM
KHNyYykKLSNkZWZpbmUgRlJBR01FTlRfU0hBREVSKHNyYy4uLikgT0VTMl9QUkVDSVNJT05fREVG
SU5JVElPTlNcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9FUzJfRlJBR01FTlRf
U0hBREVSX0RFRkFVTFRfUFJFQ0lTSU9OXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTVFJJTkdJRllfVkFMKHNyYykKKyNkZWZpbmUgU1RSSU5HSUZZKHNyYy4uLikgI3NyYwogCiBz
dGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9Ci0g
ICAgRlJBR01FTlRfU0hBREVSKAorICAgIFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1l
ZGl1bXAgZmxvYXQ7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwogICAgICAg
ICB1bmlmb3JtIHNhbXBsZXIyRCBzX21hc2s7Ci0gICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1
X29wYWNpdHk7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOwot
ICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9tYXNrVGV4Q29vcmQ7CisgICAgICAgIHVuaWZv
cm0gZmxvYXQgdV9vcGFjaXR5OworICAgICAgICB2YXJ5aW5nIHZlYzIgdl9zb3VyY2VUZXhDb29y
ZDsKKyAgICAgICAgdmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOwogICAgICAgICB2b2lkIG1h
aW4odm9pZCkKICAgICAgICAgewotICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVy
ZTJEKHNfc291cmNlLCB2X3NvdXJjZVRleENvb3JkKTsKLSAgICAgICAgICAgIGxvd3AgdmVjNCBt
YXNrQ29sb3IgPSB0ZXh0dXJlMkQoc19tYXNrLCB2X21hc2tUZXhDb29yZCk7Ci0gICAgICAgICAg
ICBsb3dwIGZsb2F0IGZyYWdtZW50QWxwaGEgPSB1X29wYWNpdHkgKiBtYXNrQ29sb3IuYTsKKyAg
ICAgICAgICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoc19zb3VyY2UsIHZfc291cmNlVGV4Q29v
cmQpOworICAgICAgICAgICAgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0dXJlMkQoc19tYXNrLCB2X21h
c2tUZXhDb29yZCk7CisgICAgICAgICAgICBmbG9hdCBmcmFnbWVudEFscGhhID0gdV9vcGFjaXR5
ICogbWFza0NvbG9yLmE7CiAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJn
YiAqIGZyYWdtZW50QWxwaGEsIGNvbG9yLmEgKiBmcmFnbWVudEFscGhhKTsKICAgICAgICAgfQog
ICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFj
aXR5QW5kTWFzayA9Ci0gICAgRlJBR01FTlRfU0hBREVSKAorICAgIFNUUklOR0lGWSgKKyAgICAg
ICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVj
dCBzX3NvdXJjZTsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfbWFzazsKLSAgICAg
ICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2
ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X21hc2tU
ZXhDb29yZDsKKyAgICAgICAgdW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7CisgICAgICAgIHZhcnlp
bmcgdmVjMiB2X3NvdXJjZVRleENvb3JkOworICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4
Q29vcmQ7CiAgICAgICAgIHZvaWQgbWFpbih2b2lkKQogICAgICAgICB7Ci0gICAgICAgICAgICBs
b3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkRSZWN0KHNfc291cmNlLCB2X3NvdXJjZVRleENvb3Jk
KTsKLSAgICAgICAgICAgIGxvd3AgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0dXJlMkRSZWN0KHNfbWFz
aywgdl9tYXNrVGV4Q29vcmQpOwotICAgICAgICAgICAgbG93cCBmbG9hdCBmcmFnbWVudEFscGhh
ID0gdV9vcGFjaXR5ICogbWFza0NvbG9yLmE7CisgICAgICAgICAgICB2ZWM0IGNvbG9yID0gdGV4
dHVyZTJEUmVjdChzX3NvdXJjZSwgdl9zb3VyY2VUZXhDb29yZCk7CisgICAgICAgICAgICB2ZWM0
IG1hc2tDb2xvciA9IHRleHR1cmUyRFJlY3Qoc19tYXNrLCB2X21hc2tUZXhDb29yZCk7CisgICAg
ICAgICAgICBmbG9hdCBmcmFnbWVudEFscGhhID0gdV9vcGFjaXR5ICogbWFza0NvbG9yLmE7CiAg
ICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIGZyYWdtZW50QWxwaGEs
IGNvbG9yLmEgKiBmcmFnbWVudEFscGhhKTsKICAgICAgICAgfQogICAgICk7CiAKIHN0YXRpYyBj
b25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9Ci0gICAgVkVSVEVY
X1NIQURFUigKKyAgICBTVFJJTkdJRlkoCiAgICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsK
LSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfZmxpcDsKKyAgICAgICAgdW5pZm9ybSBmbG9h
dCB1X2ZsaXA7CiAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwotICAgICAgICB2YXJ5
aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2
ZWMyIHZfbWFza1RleENvb3JkOworICAgICAgICB2YXJ5aW5nIHZlYzIgdl9zb3VyY2VUZXhDb29y
ZDsKKyAgICAgICAgdmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOwogICAgICAgICB2b2lkIG1h
aW4odm9pZCkKICAgICAgICAgewogICAgICAgICAgICAgdl9zb3VyY2VUZXhDb29yZCA9IHZlYzIo
YV92ZXJ0ZXgueCwgbWl4KGFfdmVydGV4LnksIDEuIC0gYV92ZXJ0ZXgueSwgdV9mbGlwKSk7CkBA
IC05NSwyMiArODIsMjQgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZU9w
YWNpdHlBbmRNYXNrID0KICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFk
ZXJTb3VyY2VTaW1wbGUgPQotICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCisg
ICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIy
RCBzX3NvdXJjZTsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKLSAgICAg
ICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CisgICAgICAgIHVuaWZvcm0g
ZmxvYXQgdV9vcGFjaXR5OworICAgICAgICB2YXJ5aW5nIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsK
ICAgICAgICAgdm9pZCBtYWluKHZvaWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGxvd3AgdmVj
NCBjb2xvciA9IHRleHR1cmUyRChzX3NvdXJjZSwgdl9zb3VyY2VUZXhDb29yZCk7CisgICAgICAg
ICAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHNfc291cmNlLCB2X3NvdXJjZVRleENvb3JkKTsK
ICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogdV9vcGFjaXR5LCBj
b2xvci5hICogdV9vcGFjaXR5KTsKICAgICAgICAgfQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBj
aGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZUFudGlhbGlhc2luZ05vTWFzayA9Ci0gICAgRlJBR01F
TlRfU0hBREVSKAorICAgIFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxv
YXQ7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwotICAgICAgICB2YXJ5aW5n
IGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0
IHVfb3BhY2l0eTsKKyAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CisgICAg
ICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OwogICAgICAgICB1bmlmb3JtIHZlYzMgdV9leHBh
bmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbOF07CiAgICAgICAgIHZvaWQgbWFpbigpCiAgICAg
ICAgIHsKQEAgLTE0NSwyNCArMTM0LDI1IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNo
YWRlclNvdXJjZUFudGlhbGlhc2luZ05vTWFzayA9CiAgICAgKTsKIAogc3RhdGljIGNvbnN0IGNo
YXIqIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdFNpbXBsZSA9Ci0gICAgRlJBR01FTlRfU0hBREVS
KAorICAgIFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAg
ICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX3NvdXJjZTsKLSAgICAgICAgdW5pZm9ybSBsb3dw
IHZlYzIgdV90ZXh0dXJlU2l6ZTsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0
eTsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CisgICAgICAg
IHVuaWZvcm0gdmVjMiB1X3RleHR1cmVTaXplOworICAgICAgICB1bmlmb3JtIGZsb2F0IHVfb3Bh
Y2l0eTsKKyAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CiAgICAgICAgIHZv
aWQgbWFpbih2b2lkKQogICAgICAgICB7Ci0gICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0
ZXh0dXJlMkRSZWN0KHNfc291cmNlLCB1X3RleHR1cmVTaXplICogdl9zb3VyY2VUZXhDb29yZCk7
CisgICAgICAgICAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEUmVjdChzX3NvdXJjZSwgdV90ZXh0
dXJlU2l6ZSAqIHZfc291cmNlVGV4Q29vcmQpOwogICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0g
dmVjNChjb2xvci5yZ2IgKiB1X29wYWNpdHksIGNvbG9yLmEgKiB1X29wYWNpdHkpOwogICAgICAg
ICB9CiAgICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNpbXBs
ZSA9Ci0gICAgVkVSVEVYX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCiAgICAgICAgIHVuaWZvcm0g
bWF0NCB1X21hdHJpeDsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfZmxpcDsKKyAgICAg
ICAgdW5pZm9ybSBmbG9hdCB1X2ZsaXA7CiAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4
OwotICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKKyAgICAgICAg
dmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CiAgICAgICAgIHZvaWQgbWFpbih2b2lkKQog
ICAgICAgICB7CiAgICAgICAgICAgICB2X3NvdXJjZVRleENvb3JkID0gdmVjMihhX3ZlcnRleC54
LCBtaXgoYV92ZXJ0ZXgueSwgMS4gLSBhX3ZlcnRleC55LCB1X2ZsaXApKTsKQEAgLTE3MSw3ICsx
NjEsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlU2ltcGxlID0KICAg
ICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlU29saWRDb2xvciA9
Ci0gICAgVkVSVEVYX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCiAgICAgICAgIHVuaWZvcm0gbWF0
NCB1X21hdHJpeDsKICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CiAgICAgICAgIHZv
aWQgbWFpbih2b2lkKQpAQCAtMTgyLDcgKzE3Miw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0
ZXhTaGFkZXJTb3VyY2VTb2xpZENvbG9yID0KIAogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21l
bnRTaGFkZXJTb3VyY2VTb2xpZENvbG9yID0KLSAgICBWRVJURVhfU0hBREVSKAorICAgIFNUUklO
R0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgIHVuaWZvcm0g
dmVjNCB1X2NvbG9yOwogICAgICAgICB2b2lkIG1haW4odm9pZCkKICAgICAgICAgewpAQCAtMjEy
LDIyICsyMDMsMjIgQEAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclByb2cKIAogICAgIHN3aXRjaCAoc2hh
ZGVyVHlwZSkgewogICAgIGNhc2UgU2ltcGxlOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1TaW1wbGU6OmNyZWF0ZSgpOworICAgICAgICBwcm9ncmFtID0gVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OmNyZWF0ZShtX3RleHR1cmVNYXBwZXIpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIFJlY3RTaW1wbGU6Ci0gICAgICAgIHByb2dyYW0gPSBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmNyZWF0ZSgpOworICAgICAgICBw
cm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpjcmVhdGUobV90
ZXh0dXJlTWFwcGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBbnRpYWxpYXNpbmdOb01h
c2s6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlh
c2luZ05vTWFzazo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6Y3JlYXRlKG1fdGV4dHVyZU1hcHBlcik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgT3BhY2l0eUFuZE1hc2s6Ci0gICAgICAgIHByb2dyYW0g
PSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpjcmVhdGUoKTsKKyAg
ICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6
OmNyZWF0ZShtX3RleHR1cmVNYXBwZXIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFJlY3RP
cGFjaXR5QW5kTWFzazoKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpjcmVhdGUoKTsKKyAgICAgICAgcHJvZ3JhbSA9IFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpjcmVhdGUobV90ZXh0dXJl
TWFwcGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTb2xpZENvbG9yOgotICAgICAgICBw
cm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpjcmVhdGUoKTsK
KyAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6
Y3JlYXRlKG1fdGV4dHVyZU1hcHBlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW52YWxp
ZDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMzYsOCArMjI3LDkgQEAgUGFz
c1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OmdldFNoYWRlclByb2cKICAgICByZXR1cm4gcHJvZ3JhbTsKIH0KIAotVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW06OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIq
IHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpCi0g
ICAgOiBtX2lkKDApCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0oVGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBjaGFyKiB2
ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKQorICAg
IDogbV90ZXh0dXJlTWFwcGVyKHRleHR1cmVNYXBwZXIpCisgICAgLCBtX2lkKDApCiAgICAgLCBt
X3ZlcnRleEF0dHJpYigwKQogICAgICwgbV92ZXJ0ZXhTaGFkZXIoMCkKICAgICAsIG1fZnJhZ21l
bnRTaGFkZXIoMCkKQEAgLTI1Niw0NiArMjQ4LDQ4IEBAIHZvaWQgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW06OmluaXRpYWxpemVQcm9ncmFtKCkKIHsKICAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhT
aGFkZXJTb3VyY2VQcm9ncmFtID0gdmVydGV4U2hhZGVyU291cmNlKCk7CiAgICAgY29uc3QgY2hh
ciogZnJhZ21lbnRTaGFkZXJTb3VyY2VQcm9ncmFtID0gZnJhZ21lbnRTaGFkZXJTb3VyY2UoKTsK
LSAgICBHTHVpbnQgdmVydGV4U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURF
Uik7Ci0gICAgR0x1aW50IGZyYWdtZW50U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01F
TlRfU0hBREVSKTsKLSAgICBnbFNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhT
aGFkZXJTb3VyY2VQcm9ncmFtLCAwKTsKLSAgICBnbFNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRl
ciwgMSwgJmZyYWdtZW50U2hhZGVyU291cmNlUHJvZ3JhbSwgMCk7Ci0gICAgR0x1aW50IHByb2dy
YW1JRCA9IGdsQ3JlYXRlUHJvZ3JhbSgpOwotICAgIGdsQ29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFk
ZXIpOwotICAgIGdsQ29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CisgICAgR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7
CisgICAgUGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFkZXIgPSBjb250ZXh0LT5jcmVhdGVTaGFk
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpOworICAgIFBsYXRmb3JtM0RPYmpl
Y3QgZnJhZ21lbnRTaGFkZXIgPSBjb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQUdNRU5UX1NIQURFUik7CisgICAgY29udGV4dC0+c2hhZGVyU291cmNlKHZlcnRleFNo
YWRlciwgdmVydGV4U2hhZGVyU291cmNlUHJvZ3JhbSk7CisgICAgY29udGV4dC0+c2hhZGVyU291
cmNlKGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlclNvdXJjZVByb2dyYW0pOworICAgIFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbUlEID0gY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOworICAg
IGNvbnRleHQtPmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKKyAgICBjb250ZXh0LT5jb21w
aWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKIAotICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1J
RCwgdmVydGV4U2hhZGVyKTsKLSAgICBnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50
U2hhZGVyKTsKLSAgICBnbExpbmtQcm9ncmFtKHByb2dyYW1JRCk7CisgICAgY29udGV4dC0+YXR0
YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVydGV4U2hhZGVyKTsKKyAgICBjb250ZXh0LT5hdHRhY2hT
aGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcik7CisgICAgY29udGV4dC0+bGlua1Byb2dy
YW0ocHJvZ3JhbUlEKTsKIAotICAgIG1fdmVydGV4QXR0cmliID0gZ2xHZXRBdHRyaWJMb2NhdGlv
bihwcm9ncmFtSUQsICJhX3ZlcnRleCIpOworICAgIG1fdmVydGV4QXR0cmliID0gY29udGV4dC0+
Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiYV92ZXJ0ZXgiKTsKIAogICAgIG1faWQgPSBw
cm9ncmFtSUQ7CiAgICAgbV92ZXJ0ZXhTaGFkZXIgPSB2ZXJ0ZXhTaGFkZXI7CiAgICAgbV9mcmFn
bWVudFNoYWRlciA9IGZyYWdtZW50U2hhZGVyOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpnZXRVbmlmb3JtTG9jYXRpb24oR0xpbnQgJnZhcmlhYmxlLCBjb25zdCBjaGFy
KiBuYW1lKQordm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0
aW9uKEdDM0RpbnQgJnZhcmlhYmxlLCBjb25zdCBjaGFyKiBuYW1lKQogewotICAgIHZhcmlhYmxl
ID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9pZCwgbmFtZSk7CisgICAgdmFyaWFibGUgPSBtX3Rl
eHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCktPmdldFVuaWZvcm1Mb2NhdGlvbihtX2lk
LCBuYW1lKTsKICAgICBBU1NFUlQodmFyaWFibGUgPj0gMCk7CiB9CiAKIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKQogewotICAgIEdMdWlu
dCBwcm9ncmFtSUQgPSBtX2lkOworICAgIFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbUlEID0gbV9p
ZDsKICAgICBpZiAoIXByb2dyYW1JRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZ2xEZXRhY2hT
aGFkZXIocHJvZ3JhbUlELCBtX3ZlcnRleFNoYWRlcik7Ci0gICAgZ2xEZWxldGVTaGFkZXIobV92
ZXJ0ZXhTaGFkZXIpOwotICAgIGdsRGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV9mcmFnbWVudFNo
YWRlcik7Ci0gICAgZ2xEZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7Ci0gICAgZ2xEZWxl
dGVQcm9ncmFtKHByb2dyYW1JRCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBt
X3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgY29udGV4dC0+ZGV0YWNo
U2hhZGVyKHByb2dyYW1JRCwgbV92ZXJ0ZXhTaGFkZXIpOworICAgIGNvbnRleHQtPmRlbGV0ZVNo
YWRlcihtX3ZlcnRleFNoYWRlcik7CisgICAgY29udGV4dC0+ZGV0YWNoU2hhZGVyKHByb2dyYW1J
RCwgbV9mcmFnbWVudFNoYWRlcik7CisgICAgY29udGV4dC0+ZGVsZXRlU2hhZGVyKG1fZnJhZ21l
bnRTaGFkZXIpOworICAgIGNvbnRleHQtPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbUlEKTsKIH0KIAot
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU2ltcGxlKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRl
clNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUpCitUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoVGV4
dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVyKQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0odGV4dHVyZU1hcHBlciwgdmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNo
YWRlclNvdXJjZVNpbXBsZSkKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVu
aWZvcm1Mb2NhdGlvbihtX2ZsaXBMb2NhdGlvbiwgInVfZmxpcCIpOwpAQCAtMzA0LDE2ICsyOTgs
MTYgQEAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU2ltcGxlKCkKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRp
b24sICJ1X29wYWNpdHkiKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENv
bG9yOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoKQotICAgIDogVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlU29saWRDb2xvciwgZnJhZ21l
bnRTaGFkZXJTb3VyY2VTb2xpZENvbG9yKQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xp
ZENvbG9yOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoVGV4dHVyZU1hcHBl
ckdMKiB0ZXh0dXJlTWFwcGVyKQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odGV4
dHVyZU1hcHBlciwgdmVydGV4U2hhZGVyU291cmNlU29saWRDb2xvciwgZnJhZ21lbnRTaGFkZXJT
b3VyY2VTb2xpZENvbG9yKQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAgZ2V0VW5p
Zm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwogICAgIGdldFVuaWZv
cm1Mb2NhdGlvbihtX2NvbG9yTG9jYXRpb24sICJ1X2NvbG9yIik7CiB9CiAKLVRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0
U2ltcGxlKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNv
dXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0U2ltcGxlKQorVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RT
aW1wbGUoVGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVyKQorICAgIDogVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0odGV4dHVyZU1hcHBlciwgdmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBm
cmFnbWVudFNoYWRlclNvdXJjZVJlY3RTaW1wbGUpCiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0o
KTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7
CkBAIC0zMjMsOCArMzE3LDggQEAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxl
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKQogICAgIGdldFVuaWZvcm1M
b2NhdGlvbihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bU9wYWNpdHlBbmRNYXNrKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRl
eFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlB
bmRNYXNrKQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayhUZXh0dXJlTWFwcGVyR0wqIHRleHR1
cmVNYXBwZXIpCisgICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh0ZXh0dXJlTWFwcGVy
LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRTaGFkZXJTb3VyY2VP
cGFjaXR5QW5kTWFzaykKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVuaWZv
cm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKQEAgLTMzNCw4ICszMjgs
OCBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYQogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29w
YWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3Bh
Y2l0eUFuZE1hc2soKQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odmVydGV4U2hh
ZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdE9wYWNpdHlB
bmRNYXNrKQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKFRleHR1cmVNYXBwZXJH
TCogdGV4dHVyZU1hcHBlcikKKyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHRleHR1
cmVNYXBwZXIsIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRl
clNvdXJjZVJlY3RPcGFjaXR5QW5kTWFzaykKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwog
ICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKQEAg
LTM0NSw4ICszMzksOCBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5k
TWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhYwogICAgIGdldFVuaWZvcm1M
b2NhdGlvbihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1BbnRpYWxpYXNpbmdOb01hc2soKQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0odmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRlclNvdXJjZUFudGlhbGlh
c2luZ05vTWFzaykKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNr
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayhUZXh0dXJlTWFw
cGVyR0wqIHRleHR1cmVNYXBwZXIpCisgICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh0
ZXh0dXJlTWFwcGVyLCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291
cmNlQW50aWFsaWFzaW5nTm9NYXNrKQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAg
Z2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwpAQCAtMzU2
LDkgKzM1MCw5IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNr
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhCiAgICAgZ2V0VW5pZm9ybUxvY2F0
aW9uKG1fZmxpcExvY2F0aW9uLCAidV9mbGlwIik7CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpCitUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoVGV4dHVyZU1hcHBlckdMKiB0ZXh0
dXJlTWFwcGVyKQorICAgIDogbV90ZXh0dXJlTWFwcGVyKHRleHR1cmVNYXBwZXIpCiB7Ci0gICAg
QVNTRVJUKGluaXRpYWxpemVPcGVuR0xTaGltcygpKTsKIH0KIAogVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6On5UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpCkBAIC0zNzMsMjEgKzM2Nywy
MyBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6flRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyKCkKIAogU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp+U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKCkK
IHsKLSAgICBnbERldGFjaFNoYWRlcihtX2lkLCBtX3ZlcnRleFNoYWRlcik7Ci0gICAgZ2xEZWxl
dGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIpOwotICAgIGdsRGV0YWNoU2hhZGVyKG1faWQsIG1fZnJh
Z21lbnRTaGFkZXIpOwotICAgIGdsRGVsZXRlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOwotICAg
IGdsRGVsZXRlUHJvZ3JhbShtX2lkKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9
IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBjb250ZXh0LT5kZXRh
Y2hTaGFkZXIobV9pZCwgbV92ZXJ0ZXhTaGFkZXIpOworICAgIGNvbnRleHQtPmRlbGV0ZVNoYWRl
cihtX3ZlcnRleFNoYWRlcik7CisgICAgY29udGV4dC0+ZGV0YWNoU2hhZGVyKG1faWQsIG1fZnJh
Z21lbnRTaGFkZXIpOworICAgIGNvbnRleHQtPmRlbGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVy
KTsKKyAgICBjb250ZXh0LT5kZWxldGVQcm9ncmFtKG1faWQpOwogfQogCi1TdGFuZGFyZEZpbHRl
clByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlv
blR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKLSAgICA6IG1faWQoMCkKK1N0YW5kYXJkRmlsdGVy
UHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJHTCogdGV4dHVyZU1h
cHBlciwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUsIHVuc2lnbmVkIHBhc3Mp
CisgICAgOiBtX3RleHR1cmVNYXBwZXIodGV4dHVyZU1hcHBlcikKKyAgICAsIG1faWQoMCkKIHsK
ICAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPQotICAgICAgICAgICAgVkVSVEVY
X1NIQURFUigKKyAgICAgICAgICAgIFNUUklOR0lGWSgKICAgICAgICAgICAgICAgICBhdHRyaWJ1
dGUgdmVjNCBhX3ZlcnRleDsKICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3RleENv
b3JkOwotICAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOworICAg
ICAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOwogICAgICAgICAgICAgICAgIHZv
aWQgbWFpbih2b2lkKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdl90
ZXhDb29yZCA9IHZlYzIoYV90ZXhDb29yZCk7CkBAIC0zOTYsMTAgKzM5Miw5IEBAIFN0YW5kYXJk
RmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3Bl
cmF0aW9uVHlwZSB0eXBlCiAgICAgICAgICAgICApOwogCiAjZGVmaW5lIFNUQU5EQVJEX0ZJTFRF
Uih4Li4uKSBcCi0gICAgICAgIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TXAotICAgICAgICBP
RVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTlwKLSAgICAgICAgInZhcnlpbmcg
aGlnaHAgdmVjMiB2X3RleENvb3JkO1xuIlwKLSAgICAgICAgInVuaWZvcm0gaGlnaHAgZmxvYXQg
dV9hbW91bnQ7XG4iXAorICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iXAorICAg
ICAgICAidmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7XG4iXAorICAgICAgICAidW5pZm9ybSBmbG9h
dCB1X2Ftb3VudDtcbiJcCiAgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG4i
XAogICAgICAgICAjeFwKICAgICAgICAgInZvaWQgbWFpbih2b2lkKVxuIHsgZ2xfRnJhZ0NvbG9y
ID0gc2hhZGUodGV4dHVyZTJEKHVfdGV4dHVyZSwgdl90ZXhDb29yZCkpOyB9IgpAQCAtNDA4LDkg
KzQwMyw5IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZp
bHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgc3dpdGNoICh0eXBlKSB7CiAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKICAgICAgICAgZnJhZ21lbnRTaGFk
ZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUo
bG93cCB2ZWM0IGNvbG9yKQorICAgICAgICAgICAgdmVjNCBzaGFkZSh2ZWM0IGNvbG9yKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9h
bW91bnQ7CisgICAgICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9hbW91bnQ7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoKDAuMjEyNiArIDAuNzg3NCAqIGFtb3VudCkgKiBj
b2xvci5yICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiAt
IDAuMDcyMiAqIGFtb3VudCkgKiBjb2xvci5iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICgwLjIxMjYgLSAwLjIxMjYgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgKyAwLjI4NDgg
KiBhbW91bnQpICogY29sb3IuZyArICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91bnQpICogY29sb3Iu
YiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50
KSAqIGNvbG9yLnIgKyAoMC43MTUyIC0gMC43MTUyICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4w
NzIyICsgMC45Mjc4ICogYW1vdW50KSAqIGNvbG9yLmIsCkBAIC00MjAsOSArNDE1LDkgQEAgU3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9u
OjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OlNFUElBOgogICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJ
TFRFUigKLSAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAg
ICAgICAgICB2ZWM0IHNoYWRlKHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgbG93cCBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3VudDsKKyAgICAgICAgICAgICAg
ICBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3VudDsKICAgICAgICAgICAgICAgICByZXR1cm4g
dmVjNCgoMC4zOTMgKyAwLjYwNyAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzY5IC0gMC43Njkg
KiBhbW91bnQpICogY29sb3IuZyArICgwLjE4OSAtIDAuMTg5ICogYW1vdW50KSAqIGNvbG9yLmIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMzQ5IC0gMC4zNDkgKiBhbW91bnQpICog
Y29sb3IuciArICgwLjY4NiArIDAuMzE0ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xNjggLSAw
LjE2OCAqIGFtb3VudCkgKiBjb2xvci5iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgw
LjI3MiAtIDAuMjcyICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC41MzQgLSAwLjUzNCAqIGFtb3Vu
dCkgKiBjb2xvci5nICsgKDAuMTMxICsgMC44NjkgKiBhbW91bnQpICogY29sb3IuYiwKQEAgLTQz
Miw3ICs0MjcsNyBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3Jh
bShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6CiAgICAgICAgIGZyYWdtZW50U2hhZGVy
U291cmNlID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxv
d3AgdmVjNCBjb2xvcikKKyAgICAgICAgICAgIHZlYzQgc2hhZGUodmVjNCBjb2xvcikKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNCgoMC4yMTMgKyAwLjc4NyAqIHVf
YW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAqIHVfYW1vdW50KSAqIGNvbG9yLmcg
KyAoMC4wNzIgLSAwLjA3MiAqIHVfYW1vdW50KSAqIGNvbG9yLmIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKDAuMjEzIC0gMC4yMTMgKiB1X2Ftb3VudCkgKiBjb2xvci5yICsgKDAuNzE1
ICsgMC4yODUgKiB1X2Ftb3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIgKiB1X2Ftb3Vu
dCkgKiBjb2xvci5iLApAQCAtNDQzLDExICs0MzgsMTEgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFt
OjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5
cGUKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6
CiAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAg
ICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKKyAgICAgICAgICAgIHZlYzQg
c2hhZGUodmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBoaWdocCBm
bG9hdCBwaSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDY7Ci0gICAgICAgICAgICAgICAgaGlnaHAg
ZmxvYXQgYyA9IGNvcyh1X2Ftb3VudCAqIHBpIC8gMTgwLjApOwotICAgICAgICAgICAgICAgIGhp
Z2hwIGZsb2F0IHMgPSBzaW4odV9hbW91bnQgKiBwaSAvIDE4MC4wKTsKKyAgICAgICAgICAgICAg
ICBmbG9hdCBwaSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDY7CisgICAgICAgICAgICAgICAgZmxv
YXQgYyA9IGNvcyh1X2Ftb3VudCAqIHBpIC8gMTgwLjApOworICAgICAgICAgICAgICAgIGZsb2F0
IHMgPSBzaW4odV9hbW91bnQgKiBwaSAvIDE4MC4wKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
dmVjNChjb2xvci5yICogKDAuMjEzICsgYyAqIDAuNzg3IC0gcyAqIDAuMjEzKSArIGNvbG9yLmcg
KiAoMC43MTUgLSBjICogMC43MTUgLSBzICogMC43MTUpICsgY29sb3IuYiAqICgwLjA3MiAtIGMg
KiAwLjA3MiArIHMgKiAwLjkyOCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3Iu
ciAqICgwLjIxMyAtIGMgKiAwLjIxMyArIHMgKiAwLjE0MykgKyBjb2xvci5nICogKDAuNzE1ICsg
YyAqIDAuMjg1ICsgcyAqIDAuMTQwKSArIGNvbG9yLmIgKiAoMC4wNzIgLSBjICogMC4wNzIgLSBz
ICogMC4yODMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLnIgKiAoMC4yMTMg
LSBjICogMC4yMTMgLSBzICogMC43ODcpICsgIGNvbG9yLmcgKiAoMC43MTUgLSBjICogMC43MTUg
KyBzICogMC43MTUpICsgY29sb3IuYiAqICgwLjA3MiArIGMgKiAwLjkyOCArIHMgKiAwLjA3Miks
CkBAIC00NTcsOCArNDUyLDggQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRl
clByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKICAgICAgICAgZnJhZ21lbnRT
aGFkZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICBsb3dwIGZsb2F0IGlu
dmVydChsb3dwIGZsb2F0IG4pIHsgcmV0dXJuICgxLjAgLSBuKSAqIHVfYW1vdW50ICsgbiAqICgx
LjAgLSB1X2Ftb3VudCk7IH0KLSAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQg
Y29sb3IpCisgICAgICAgICAgICBmbG9hdCBpbnZlcnQoZmxvYXQgbikgeyByZXR1cm4gKDEuMCAt
IG4pICogdV9hbW91bnQgKyBuICogKDEuMCAtIHVfYW1vdW50KTsgfQorICAgICAgICAgICAgdmVj
NCBzaGFkZSh2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVy
biB2ZWM0KGludmVydChjb2xvci5yKSwgaW52ZXJ0KGNvbG9yLmcpLCBpbnZlcnQoY29sb3IuYiks
IGNvbG9yLmEpOwogICAgICAgICAgICAgfQpAQCAtNDY2LDcgKzQ2MSw3IEBAIFN0YW5kYXJkRmls
dGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0
aW9uVHlwZSB0eXBlCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpC
UklHSFRORVNTOgogICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRF
UigKLSAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAg
ICAgICB2ZWM0IHNoYWRlKHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHZlYzQoY29sb3IucmdiICogKDEuMCArIHVfYW1vdW50KSwgY29sb3IuYSk7CiAg
ICAgICAgICAgICB9CkBAIC00NzQsOCArNDY5LDggQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpT
dGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgogICAg
ICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgICAg
IGxvd3AgZmxvYXQgY29udHJhc3QobG93cCBmbG9hdCBuKSB7IHJldHVybiAobiAtIDAuNSkgKiB1
X2Ftb3VudCArIDAuNTsgfQotICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBj
b2xvcikKKyAgICAgICAgICAgIGZsb2F0IGNvbnRyYXN0KGZsb2F0IG4pIHsgcmV0dXJuIChuIC0g
MC41KSAqIHVfYW1vdW50ICsgMC41OyB9CisgICAgICAgICAgICB2ZWM0IHNoYWRlKHZlYzQgY29s
b3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29udHJhc3Qo
Y29sb3IuciksIGNvbnRyYXN0KGNvbG9yLmcpLCBjb250cmFzdChjb2xvci5iKSwgY29sb3IuYSk7
CiAgICAgICAgICAgICB9CkBAIC00ODMsMjAgKzQ3OCwyMSBAQCBTdGFuZGFyZEZpbHRlclByb2dy
YW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUg
dHlwZQogICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToK
ICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAg
ICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICAgICAgdmVjNCBz
aGFkZSh2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiB2
ZWM0KGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgKiB1X2Ftb3VudCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpCTFVSOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IEZSQUdNRU5UX1NI
QURFUigKLSAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOwotICAgICAg
ICAgICAgdW5pZm9ybSBsb3dwIHZlYzIgdV9ibHVyUmFkaXVzOworICAgICAgICBmcmFnbWVudFNo
YWRlclNvdXJjZSA9IFNUUklOR0lGWSgKKyAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OworICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7CisgICAgICAgICAgICB1
bmlmb3JtIHZlYzIgdV9ibHVyUmFkaXVzOwogICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQg
dV90ZXh0dXJlOwogICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dB
VVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKIAotICAgICAgICAgICAgbG93cCB2ZWM0IHNhbXBs
ZUNvbG9yKGZsb2F0IHJhZGl1cykKKyAgICAgICAgICAgIHZlYzQgc2FtcGxlQ29sb3IoZmxvYXQg
cmFkaXVzKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHZlYzIgY29vcmQgPSB2X3Rl
eENvb3JkICsgcmFkaXVzICogdV9ibHVyUmFkaXVzOwogICAgICAgICAgICAgICAgIHJldHVybiB0
ZXh0dXJlMkQodV90ZXh0dXJlLCBjb29yZCkgKiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQu
eSA+IDAuICYmIGNvb3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOwpAQCAtNTIzLDIwICs1MTks
MjAgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVy
T3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgc3dpdGNoIChwYXNzKSB7CiAg
ICAgICAgIGNhc2UgMDogewogICAgICAgICAgICAgLy8gRmlyc3QgcGFzczogaG9yaXpvbnRhbCBh
bHBoYSBibHVyLgotICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBGUkFHTUVOVF9T
SEFERVIoCi0gICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7Ci0g
ICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfc2hhZG93Qmx1clJhZGl1czsKLSAg
ICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1X3NoYWRvd09mZnNldDsKKyAgICAgICAg
ICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RSSU5HSUZZKAorICAgICAgICAgICAgICAgIHZh
cnlpbmcgdmVjMiB2X3RleENvb3JkOworICAgICAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9z
aGFkb3dCbHVyUmFkaXVzOworICAgICAgICAgICAgICAgIHVuaWZvcm0gdmVjMiB1X3NoYWRvd09m
ZnNldDsKICAgICAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7CiAgICAg
ICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5F
TF9IQUxGX1dJRFRIXTsKIAotICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgc2FtcGxlQWxwaGEo
ZmxvYXQgcmFkaXVzKQorICAgICAgICAgICAgICAgIGZsb2F0IHNhbXBsZUFscGhhKGZsb2F0IHJh
ZGl1cykKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHZlYzIgY29vcmQg
PSB2X3RleENvb3JkIC0gdV9zaGFkb3dPZmZzZXQgKyB2ZWMyKHJhZGl1cyAqIHVfc2hhZG93Qmx1
clJhZGl1cywgMC4pOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHVfdGV4
dHVyZSwgY29vcmQpLmEgKiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNv
b3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgIGxvd3AgZmxvYXQgc2hhZG93Qmx1ckhvcml6b250YWwoKQorICAgICAgICAgICAg
ICAgIGZsb2F0IHNoYWRvd0JsdXJIb3Jpem9udGFsKCkKICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgIGZsb2F0IHRvdGFsID0gc2FtcGxlQWxwaGEoMCkgKiB1X2dhdXNzaWFu
S2VybmVsWzBdOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNT
SUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKQEAgLTU1NiwyMSArNTUyLDIxIEBAIFN0YW5k
YXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6
T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgICAgICB9CiAgICAgICAgIGNhc2UgMTogewogICAg
ICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHZlcnRpY2FsIGFscGhhIGJsdXIgYW5kIGNvbXBvc2l0
ZSB3aXRoIG9yaWdpbi4KLSAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gRlJBR01F
TlRfU0hBREVSKAotICAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3Jk
OwotICAgICAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X3NoYWRvd0JsdXJSYWRpdXM7
Ci0gICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzQgdV9zaGFkb3dDb2xvcjsKKyAgICAg
ICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RSSU5HSUZZKAorICAgICAgICAgICAgICAg
IHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOworICAgICAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQg
dV9zaGFkb3dCbHVyUmFkaXVzOworICAgICAgICAgICAgICAgIHVuaWZvcm0gdmVjNCB1X3NoYWRv
d0NvbG9yOwogICAgICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTsKICAg
ICAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1X2NvbnRlbnRUZXh0dXJlOwogICAgICAg
ICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtHQVVTU0lBTl9LRVJORUxf
SEFMRl9XSURUSF07CiAKLSAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IHNhbXBsZUFscGhhKGZs
b2F0IHIpCisgICAgICAgICAgICAgICAgZmxvYXQgc2FtcGxlQWxwaGEoZmxvYXQgcikKICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHZlYzIgY29vcmQgPSB2X3RleENvb3Jk
ICsgdmVjMigwLiwgciAqIHVfc2hhZG93Qmx1clJhZGl1cyk7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0ZXh0dXJlMkQodV90ZXh0dXJlLCBjb29yZCkuYSAqIGZsb2F0KGNvb3JkLnggPiAw
LiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7CiAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgbG93cCBmbG9hdCBzaGFkb3dCbHVyVmVy
dGljYWwoKQorICAgICAgICAgICAgICAgIGZsb2F0IHNoYWRvd0JsdXJWZXJ0aWNhbCgpCiAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBmbG9hdCB0b3RhbCA9IHNhbXBsZUFs
cGhhKDApICogdV9nYXVzc2lhbktlcm5lbFswXTsKICAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgaSsrKSB7CkBAIC01ODEs
NyArNTc3LDcgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0o
RmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRvdGFsOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGxvd3Ag
dmVjNCBzb3VyY2VPdmVyKGxvd3AgdmVjNCBzb3VyY2UsIGxvd3AgdmVjNCBkZXN0aW5hdGlvbikK
KyAgICAgICAgICAgICAgICB2ZWM0IHNvdXJjZU92ZXIodmVjNCBzb3VyY2UsIHZlYzQgZGVzdGlu
YXRpb24pCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAvLyBDb21wb3Np
dGUgdGhlIHNoYWRvdyB3aXRoIHRoZSBvcmlnaW5hbCB0ZXh0dXJlLgogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gc291cmNlICsgZGVzdGluYXRpb24gKiAoMS4gLSBzb3VyY2UuYSk7CkBAIC02
MDIsMjYgKzU5OCwyNiBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJv
Z3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogCiAgICAgaWYgKCFmcmFn
bWVudFNoYWRlclNvdXJjZSkKICAgICAgICAgcmV0dXJuOwotICAgIEdMdWludCB2ZXJ0ZXhTaGFk
ZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9WRVJURVhfU0hBREVSKTsKLSAgICBHTHVpbnQgZnJhZ21l
bnRTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIpOwotICAgIGdsU2hh
ZGVyU291cmNlKHZlcnRleFNoYWRlciwgMSwgJnZlcnRleFNoYWRlclNvdXJjZSwgMCk7Ci0gICAg
Z2xTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJjZSwg
MCk7Ci0gICAgR0x1aW50IHByb2dyYW1JRCA9IGdsQ3JlYXRlUHJvZ3JhbSgpOwotICAgIGdsQ29t
cGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsQ29tcGlsZVNoYWRlcihmcmFnbWVudFNo
YWRlcik7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX3RleHR1cmVNYXBwZXIt
PmdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgUGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFkZXIg
PSBjb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIp
OworICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIgPSBjb250ZXh0LT5jcmVhdGVT
aGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUik7CisgICAgY29udGV4dC0+
c2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyU291cmNlKTsKKyAgICBjb250
ZXh0LT5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyU291cmNlKTsK
KyAgICBQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCA9IGNvbnRleHQtPmNyZWF0ZVByb2dyYW0o
KTsKKyAgICBjb250ZXh0LT5jb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAgY29udGV4
dC0+Y29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CiAjaWYgIUxPR19ESVNBQkxFRAotICAg
IEdMY2hhciBsb2dbMTAwXTsKLSAgICBHTGludCBsZW47Ci0gICAgZ2xHZXRTaGFkZXJJbmZvTG9n
KGZyYWdtZW50U2hhZGVyLCAxMDAsICZsZW4sIGxvZyk7CisgICAgU3RyaW5nIGxvZzsKKyAgICBj
b250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKGZyYWdtZW50U2hhZGVyKTsKICAgICBXVEZMb2coJkxv
Z0NvbXBvc2l0aW5nLCAiJXNcbiIsIGxvZyk7CiAjZW5kaWYKLSAgICBnbEF0dGFjaFNoYWRlcihw
cm9ncmFtSUQsIHZlcnRleFNoYWRlcik7Ci0gICAgZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCBm
cmFnbWVudFNoYWRlcik7Ci0gICAgZ2xMaW5rUHJvZ3JhbShwcm9ncmFtSUQpOworICAgIGNvbnRl
eHQtPmF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRlcik7CisgICAgY29udGV4dC0+
YXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRTaGFkZXIpOworICAgIGNvbnRleHQtPmxp
bmtQcm9ncmFtKHByb2dyYW1JRCk7CiAKLSAgICBtX3ZlcnRleEF0dHJpYiA9IGdsR2V0QXR0cmli
TG9jYXRpb24ocHJvZ3JhbUlELCAiYV92ZXJ0ZXgiKTsKLSAgICBtX3RleENvb3JkQXR0cmliID0g
Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3RleENvb3JkIik7Ci0gICAgbV90ZXh0
dXJlVW5pZm9ybUxvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV90
ZXh0dXJlIik7CisgICAgbV92ZXJ0ZXhBdHRyaWIgPSBjb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlv
bihwcm9ncmFtSUQsICJhX3ZlcnRleCIpOworICAgIG1fdGV4Q29vcmRBdHRyaWIgPSBjb250ZXh0
LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3RleENvb3JkIik7CisgICAgbV90ZXh0
dXJlVW5pZm9ybUxvY2F0aW9uID0gY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1J
RCwgInVfdGV4dHVyZSIpOwogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpHUkFZU0NBTEU6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgpAQCAt
NjMxLDIxICs2MjcsMjEgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclBy
b2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJB
U1Q6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIG1fdW5pZm9y
bUxvY2F0aW9ucy5hbW91bnQgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2Ft
b3VudCIpOworICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuYW1vdW50ID0gY29udGV4dC0+Z2V0
VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfYW1vdW50Iik7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgotICAgICAgICBtX3VuaWZvcm1Mb2NhdGlv
bnMuYmx1ci5yYWRpdXMgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2JsdXJS
YWRpdXMiKTsKLSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmJsdXIuZ2F1c3NpYW5LZXJuZWwg
PSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7Cisg
ICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLnJhZGl1cyA9IGNvbnRleHQtPmdldFVuaWZv
cm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2JsdXJSYWRpdXMiKTsKKyAgICAgICAgbV91bmlmb3Jt
TG9jYXRpb25zLmJsdXIuZ2F1c3NpYW5LZXJuZWwgPSBjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRp
b24ocHJvZ3JhbUlELCAidV9nYXVzc2lhbktlcm5lbCIpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0
aW9ucy5zaGFkb3cuYmx1clJhZGl1cyA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwg
InVfc2hhZG93Qmx1clJhZGl1cyIpOwotICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93
LmdhdXNzaWFuS2VybmVsID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9nYXVz
c2lhbktlcm5lbCIpOworICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRp
dXMgPSBjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dCbHVy
UmFkaXVzIik7CisgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJu
ZWwgPSBjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9nYXVzc2lhbktl
cm5lbCIpOwogICAgICAgICBpZiAoIXBhc3MpCi0gICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlv
bnMuc2hhZG93Lm9mZnNldCA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfc2hh
ZG93T2Zmc2V0Iik7CisgICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93Lm9mZnNl
dCA9IGNvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3NoYWRvd09mZnNl
dCIpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0aGUgY29s
b3IgYW5kIHRoZSBjb250ZW50IHRleHR1cmUgaW4gdGhlIHNlY29uZCBwYXNzLCB0aGUgZmlyc3Qg
cGFzcyBpcyBvbmx5IGEgaG9yaXpvbnRhbCBhbHBoYSBibHVyLgotICAgICAgICAgICAgbV91bmlm
b3JtTG9jYXRpb25zLnNoYWRvdy5jb2xvciA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1J
RCwgInVfc2hhZG93Q29sb3IiKTsKLSAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFk
b3cuY29udGVudFRleHR1cmUgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2Nv
bnRlbnRUZXh0dXJlIik7CisgICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNv
bG9yID0gY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93Q29s
b3IiKTsKKyAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29udGVudFRleHR1
cmUgPSBjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9jb250ZW50VGV4
dHVyZSIpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC02NTYs
OSArNjUyLDkgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0o
RmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICBtX2ZyYWdtZW50U2hhZGVy
ID0gZnJhZ21lbnRTaGFkZXI7CiB9CiAKLVBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFt
PiBTdGFuZGFyZEZpbHRlclByb2dyYW06OmNyZWF0ZShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlv
blR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKK1Bhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9n
cmFtPiBTdGFuZGFyZEZpbHRlclByb2dyYW06OmNyZWF0ZShUZXh0dXJlTWFwcGVyR0wqIHRleHR1
cmVNYXBwZXIsIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBw
YXNzKQogewotICAgIFJlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IHByb2dyYW0gPSBhZG9w
dFJlZihuZXcgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKHR5cGUsIHBhc3MpKTsKKyAgICBSZWZQdHI8
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0gYWRvcHRSZWYobmV3IFN0YW5kYXJkRmls
dGVyUHJvZ3JhbSh0ZXh0dXJlTWFwcGVyLCB0eXBlLCBwYXNzKSk7CiAgICAgaWYgKCFwcm9ncmFt
LT5tX2lkKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtNjk0LDIxICs2OTAsMjIgQEAgc3RhdGlj
IGZsb2F0KiBnYXVzc2lhbktlcm5lbCgpCiAgICAgcmV0dXJuIGtlcm5lbDsKIH0KIAotdm9pZCBT
dGFuZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVy
YXRpb24sIHVuc2lnbmVkIHBhc3MsIGNvbnN0IEludFNpemUmIHNpemUsIEdMdWludCBjb250ZW50
VGV4dHVyZSkKK3ZvaWQgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpwcmVwYXJlKGNvbnN0IEZpbHRl
ck9wZXJhdGlvbiYgb3BlcmF0aW9uLCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRTaXplJiBzaXpl
LCBHQzNEdWludCBjb250ZW50VGV4dHVyZSkKIHsKLSAgICBnbFVzZVByb2dyYW0obV9pZCk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNz
Q29udGV4dDNEKCk7CisgICAgY29udGV4dC0+dXNlUHJvZ3JhbShtX2lkKTsKICAgICBzd2l0Y2gg
KG9wZXJhdGlvbi5nZXRPcGVyYXRpb25UeXBlKCkpIHsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6R1JBWVNDQUxFOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhV
RV9ST1RBVEU6Ci0gICAgICAgIGdsVW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQs
IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihvcGVy
YXRpb24pLmFtb3VudCgpKTsKKyAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxv
Y2F0aW9ucy5hbW91bnQsIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJ
R0hUTkVTUzoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CiAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIGdsVW5pZm9ybTFmKG1fdW5pZm9ybUxv
Y2F0aW9ucy5hbW91bnQsIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKKyAgICAgICAgY29udGV4dC0+
dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0YXRpY19jYXN0PGNvbnN0IEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKICAg
ICAgICAgY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ciA9IHN0YXRpY19jYXN0PGNvbnN0
IEJsdXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pOwpAQCAtNzIwLDggKzcxNyw4IEBAIHZv
aWQgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYg
b3BlcmF0aW9uLCB1bnNpZ25lZCBwCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJhZGl1cy5z
ZXRXaWR0aChmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXIuc3RkRGV2aWF0aW9uKCksIHNpemUud2lk
dGgoKSkgLyBzaXplLndpZHRoKCkpOwogCi0gICAgICAgIGdsVW5pZm9ybTJmKG1fdW5pZm9ybUxv
Y2F0aW9ucy5ibHVyLnJhZGl1cywgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSk7Ci0g
ICAgICAgIGdsVW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktlcm5l
bCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOworICAgICAg
ICBjb250ZXh0LT51bmlmb3JtMmYobV91bmlmb3JtTG9jYXRpb25zLmJsdXIucmFkaXVzLCByYWRp
dXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKTsKKyAgICAgICAgY29udGV4dC0+dW5pZm9ybTFm
dihtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVM
X0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7CkBAIC03MjksMjAgKzcyNiwy
MCBAQCB2b2lkIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6cHJlcGFyZShjb25zdCBGaWx0ZXJPcGVy
YXRpb24mIG9wZXJhdGlvbiwgdW5zaWduZWQgcAogICAgICAgICBzd2l0Y2ggKHBhc3MpIHsKICAg
ICAgICAgY2FzZSAwOgogICAgICAgICAgICAgLy8gRmlyc3QgcGFzczogdmVydGljYWwgYWxwaGEg
Ymx1ci4KLSAgICAgICAgICAgIGdsVW5pZm9ybTJmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cu
b2Zmc2V0LCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQoc2l6ZS53aWR0aCgp
KSwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsK
LSAgICAgICAgICAgIGdsVW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJh
ZGl1cywgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSk7Ci0gICAg
ICAgICAgICBnbFVuaWZvcm0xZnYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5nYXVzc2lhbktl
cm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOworICAg
ICAgICAgICAgY29udGV4dC0+dW5pZm9ybTJmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cub2Zm
c2V0LCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwg
ZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJs
dXJSYWRpdXMsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUud2lkdGgoKSkpOwor
ICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93
LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJu
ZWwoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAg
Ly8gU2Vjb25kIHBhc3M6IHdlIG5lZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQg
dGV4dHVyZSBmb3IgY29tcG9zaXRpbmcuCi0gICAgICAgICAgICBnbFVuaWZvcm0xZihtX3VuaWZv
cm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZs
b2F0KHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGdsVW5pZm9ybTFmdihtX3VuaWZvcm1M
b2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURU
SCwgZ2F1c3NpYW5LZXJuZWwoKSk7Ci0gICAgICAgICAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVY
VFVSRTEpOwotICAgICAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBjb250ZW50
VGV4dHVyZSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm0xaShtX3VuaWZvcm1Mb2NhdGlvbnMuc2hh
ZG93LmNvbnRlbnRUZXh0dXJlLCAxKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZiht
X3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMsIHNoYWRvdy5zdGREZXZpYXRpb24o
KSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0x
ZnYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VS
TkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOworICAgICAgICAgICAgY29udGV4dC0+
YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpOworICAgICAgICAgICAg
Y29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbnRl
bnRUZXh0dXJlKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xaShtX3VuaWZvcm1Mb2Nh
dGlvbnMuc2hhZG93LmNvbnRlbnRUZXh0dXJlLCAxKTsKICAgICAgICAgICAgIGZsb2F0IHIsIGcs
IGIsIGE7CiAgICAgICAgICAgICBzaGFkb3cuY29sb3IoKS5nZXRSR0JBKHIsIGcsIGIsIGEpOwot
ICAgICAgICAgICAgZ2xVbmlmb3JtNGYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb2xvciwg
ciwgZywgYiwgYSk7CisgICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtNGYobV91bmlmb3JtTG9j
YXRpb25zLnNoYWRvdy5jb2xvciwgciwgZywgYiwgYSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTc1OSw3ICs3NTYsNyBAQCBQYXNzUmVmUHRyPFN0
YW5kYXJkRmlsdGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRl
ckZvckZpbHRlcgogICAgIGludCBrZXkgPSBpbnQodHlwZSkgfCAocGFzcyA8PCAxNik7CiAgICAg
RmlsdGVyTWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZmlsdGVyTWFwLmZpbmQoa2V5KTsKICAg
ICBpZiAoaXRlcmF0b3IgPT0gbV9maWx0ZXJNYXAuZW5kKCkpIHsKLSAgICAgICAgcHJvZ3JhbSA9
IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKHR5cGUsIHBhc3MpOworICAgICAgICBwcm9n
cmFtID0gU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpjcmVhdGUobV90ZXh0dXJlTWFwcGVyLCB0eXBl
LCBwYXNzKTsKICAgICAgICAgaWYgKCFwcm9ncmFtKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKaW5kZXggNzg1NDk4ZTdmOGEz
NjI3ZWFiMTA2ODZiYTM2YmZmYjNlMTA5MTQ1Ni4uNWZlYWQ4MDBjMWQ1NmVmODYwODgxMjVhNWFj
OTI2MTUwZTAyZmQ4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgK
QEAgLTI0LDkgKzI0LDkgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikKIAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIk9wZW5H
TFNoaW1zLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJHTC5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtNDQsMzkgKzQ0
LDQwIEBAIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwogCiBjbGFzcyBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtPiB7CiBwdWJsaWM6Ci0gICAgR0x1aW50IGlkKCkgeyByZXR1cm4gbV9pZDsgfQot
ICAgIEdMdWludCB2ZXJ0ZXhBdHRyaWIoKSB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQorICAg
IFBsYXRmb3JtM0RPYmplY3QgaWQoKSB7IHJldHVybiBtX2lkOyB9CisgICAgR0MzRHVpbnQgdmVy
dGV4QXR0cmliKCkgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWI7IH0KIAotICAgIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hh
ciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpOworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
KFRleHR1cmVNYXBwZXJHTCosIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3Qg
Y2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShmbG9hdCBvcGFjaXR5
LCBjb25zdCBCaXRtYXBUZXh0dXJlKikgeyB9Ci0gICAgR0xpbnQgbWF0cml4TG9jYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX21hdHJpeExvY2F0aW9uOyB9Ci0gICAgR0xpbnQgZmxpcExvY2F0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9mbGlwTG9jYXRpb247IH0KLSAgICBHTGludCB0ZXh0dXJlU2l6
ZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlU2l6ZUxvY2F0aW9uOyB9Ci0gICAg
R0xpbnQgc291cmNlVGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VUZXh0
dXJlTG9jYXRpb247IH0KLSAgICBHTGludCBtYXNrVGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXNrVGV4dHVyZUxvY2F0aW9uOyB9Ci0gICAgR0xpbnQgb3BhY2l0eUxvY2F0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5TG9jYXRpb247IH0KKyAgICBHQzNEaW50IG1hdHJp
eExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhMb2NhdGlvbjsgfQorICAgIEdDM0Rp
bnQgZmxpcExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mbGlwTG9jYXRpb247IH0KKyAgICBH
QzNEaW50IHRleHR1cmVTaXplTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVTaXpl
TG9jYXRpb247IH0KKyAgICBHQzNEaW50IHNvdXJjZVRleHR1cmVMb2NhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOyB9CisgICAgR0MzRGludCBtYXNrVGV4dHVy
ZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGV4dHVyZUxvY2F0aW9uOyB9CisgICAg
R0MzRGludCBvcGFjaXR5TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHlMb2NhdGlv
bjsgfQogCi0gICAgc3RhdGljIGJvb2wgaXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihHTGludCBsb2Nh
dGlvbikgeyByZXR1cm4gbG9jYXRpb24gPj0gMDsgfQorICAgIHN0YXRpYyBib29sIGlzVmFsaWRV
bmlmb3JtTG9jYXRpb24oR0MzRGludCBsb2NhdGlvbikgeyByZXR1cm4gbG9jYXRpb24gPj0gMDsg
fQogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBnZXRVbmlmb3JtTG9jYXRpb24oR0xpbnQmIHZhciwg
Y29uc3QgY2hhciogbmFtZSk7CisgICAgdm9pZCBnZXRVbmlmb3JtTG9jYXRpb24oR0MzRGludCYg
dmFyLCBjb25zdCBjaGFyKiBuYW1lKTsKICAgICB2b2lkIGluaXRpYWxpemVQcm9ncmFtKCk7CiAg
ICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKSB7IH0KICAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhT
aGFkZXJTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleFNoYWRlclNvdXJjZS5kYXRhKCk7
IH0KICAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZnJhZ21lbnRTaGFkZXJTb3VyY2UuZGF0YSgpOyB9CiAKLSAgICBHTHVpbnQgbV9pZDsKLSAg
ICBHTHVpbnQgbV92ZXJ0ZXhBdHRyaWI7Ci0gICAgR0x1aW50IG1fdmVydGV4U2hhZGVyOwotICAg
IEdMdWludCBtX2ZyYWdtZW50U2hhZGVyOwotICAgIEdMaW50IG1fbWF0cml4TG9jYXRpb247Ci0g
ICAgR0xpbnQgbV9mbGlwTG9jYXRpb247Ci0gICAgR0xpbnQgbV90ZXh0dXJlU2l6ZUxvY2F0aW9u
OwotICAgIEdMaW50IG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOwotICAgIEdMaW50IG1fb3BhY2l0
eUxvY2F0aW9uOwotICAgIEdMaW50IG1fbWFza1RleHR1cmVMb2NhdGlvbjsKKyAgICBUZXh0dXJl
TWFwcGVyR0wqIG1fdGV4dHVyZU1hcHBlcjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1faWQ7Cisg
ICAgR0MzRHVpbnQgbV92ZXJ0ZXhBdHRyaWI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZlcnRl
eFNoYWRlcjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZnJhZ21lbnRTaGFkZXI7CisgICAgR0Mz
RGludCBtX21hdHJpeExvY2F0aW9uOworICAgIEdDM0RpbnQgbV9mbGlwTG9jYXRpb247CisgICAg
R0MzRGludCBtX3RleHR1cmVTaXplTG9jYXRpb247CisgICAgR0MzRGludCBtX3NvdXJjZVRleHR1
cmVMb2NhdGlvbjsKKyAgICBHQzNEaW50IG1fb3BhY2l0eUxvY2F0aW9uOworICAgIEdDM0RpbnQg
bV9tYXNrVGV4dHVyZUxvY2F0aW9uOwogCiBwcml2YXRlOgogICAgIENTdHJpbmcgbV92ZXJ0ZXhT
aGFkZXJTb3VyY2U7CkBAIC04NywzMyArODgsMzYgQEAgcHJpdmF0ZToKIGNsYXNzIFN0YW5kYXJk
RmlsdGVyUHJvZ3JhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4g
ewogcHVibGljOgogICAgIHZpcnR1YWwgflN0YW5kYXJkRmlsdGVyUHJvZ3JhbSgpOwotICAgIHZp
cnR1YWwgdm9pZCBwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYsIHVuc2lnbmVkIHBhc3Ms
IGNvbnN0IEludFNpemUmLCBHTHVpbnQgY29udGVudFRleHR1cmUpOwotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gY3JlYXRlKEZpbHRlck9wZXJhdGlvbjo6T3Bl
cmF0aW9uVHlwZSwgdW5zaWduZWQgcGFzcyk7Ci0gICAgR0x1aW50IHZlcnRleEF0dHJpYigpIGNv
bnN0IHsgcmV0dXJuIG1fdmVydGV4QXR0cmliOyB9Ci0gICAgR0x1aW50IHRleENvb3JkQXR0cmli
KCkgY29uc3QgeyByZXR1cm4gbV90ZXhDb29yZEF0dHJpYjsgfQotICAgIEdMdWludCB0ZXh0dXJl
VW5pZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbjsgfQorICAg
IHZpcnR1YWwgdm9pZCBwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYsIHVuc2lnbmVkIHBh
c3MsIGNvbnN0IEludFNpemUmLCBHQzNEdWludCBjb250ZW50VGV4dHVyZSk7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBjcmVhdGUoVGV4dHVyZU1hcHBlckdM
KiwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBwYXNzKTsKKyAgICBH
QzNEdWludCB2ZXJ0ZXhBdHRyaWIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQor
ICAgIEdDM0R1aW50IHRleENvb3JkQXR0cmliKCkgY29uc3QgeyByZXR1cm4gbV90ZXhDb29yZEF0
dHJpYjsgfQorICAgIEdDM0R1aW50IHRleHR1cmVVbmlmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90
ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOyB9Citwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZU1hcHBlckdM
KiBtX3RleHR1cmVNYXBwZXI7CiBwcml2YXRlOgotICAgIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbShG
aWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIHBhc3MpOwotICAgIEdMdWlu
dCBtX2lkOwotICAgIEdMdWludCBtX3ZlcnRleFNoYWRlcjsKLSAgICBHTHVpbnQgbV9mcmFnbWVu
dFNoYWRlcjsKLSAgICBHTHVpbnQgbV92ZXJ0ZXhBdHRyaWI7Ci0gICAgR0x1aW50IG1fdGV4Q29v
cmRBdHRyaWI7Ci0gICAgR0x1aW50IG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbjsKKyAgICBTdGFu
ZGFyZEZpbHRlclByb2dyYW0oKTsKKyAgICBTdGFuZGFyZEZpbHRlclByb2dyYW0oVGV4dHVyZU1h
cHBlckdMKiwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBwYXNzKTsK
KyAgICBQbGF0Zm9ybTNET2JqZWN0IG1faWQ7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZlcnRl
eFNoYWRlcjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZnJhZ21lbnRTaGFkZXI7CisgICAgR0Mz
RHVpbnQgbV92ZXJ0ZXhBdHRyaWI7CisgICAgR0MzRHVpbnQgbV90ZXhDb29yZEF0dHJpYjsKKyAg
ICBHQzNEdWludCBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb247CiAgICAgdW5pb24gewotICAgICAg
ICBHTHVpbnQgYW1vdW50OworICAgICAgICBHQzNEdWludCBhbW91bnQ7CiAKICAgICAgICAgc3Ry
dWN0IHsKLSAgICAgICAgICAgIEdMdWludCByYWRpdXM7Ci0gICAgICAgICAgICBHTHVpbnQgZ2F1
c3NpYW5LZXJuZWw7CisgICAgICAgICAgICBHQzNEdWludCByYWRpdXM7CisgICAgICAgICAgICBH
QzNEdWludCBnYXVzc2lhbktlcm5lbDsKICAgICAgICAgfSBibHVyOwogCiAgICAgICAgIHN0cnVj
dCB7Ci0gICAgICAgICAgICBHTHVpbnQgYmx1clJhZGl1czsKLSAgICAgICAgICAgIEdMdWludCBj
b2xvcjsKLSAgICAgICAgICAgIEdMdWludCBvZmZzZXQ7Ci0gICAgICAgICAgICBHTHVpbnQgY29u
dGVudFRleHR1cmU7Ci0gICAgICAgICAgICBHTHVpbnQgZ2F1c3NpYW5LZXJuZWw7CisgICAgICAg
ICAgICBHQzNEdWludCBibHVyUmFkaXVzOworICAgICAgICAgICAgR0MzRHVpbnQgY29sb3I7Cisg
ICAgICAgICAgICBHQzNEdWludCBvZmZzZXQ7CisgICAgICAgICAgICBHQzNEdWludCBjb250ZW50
VGV4dHVyZTsKKyAgICAgICAgICAgIEdDM0R1aW50IGdhdXNzaWFuS2VybmVsOwogICAgICAgICB9
IHNoYWRvdzsKICAgICB9IG1fdW5pZm9ybUxvY2F0aW9uczsKIH07CkBAIC0xMjEsNzcgKzEyNSw4
OSBAQCBwcml2YXRlOgogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSA6
IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU+IGNyZWF0ZSgpCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU+IGNy
ZWF0ZShUZXh0dXJlTWFwcGVyR0wqIHRleHR1cmVNYXBwZXIpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCkpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxl
KHRleHR1cmVNYXBwZXIpKTsKICAgICB9CiAKIHByb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVNpbXBsZShUZXh0dXJlTWFwcGVyR0wqKTsKK3ByaXZhdGU6CiAgICAgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKTsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1SZWN0U2ltcGxlPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZT4gY3JlYXRlKFRleHR1cmVNYXBwZXJHTCog
dGV4dHVyZU1hcHBlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKCkpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSh0ZXh0dXJlTWFwcGVy
KSk7CiAgICAgfQogCitwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1S
ZWN0U2ltcGxlKFRleHR1cmVNYXBwZXJHTCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKTsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtT3BhY2l0eUFuZE1hc2s+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gY3JlYXRlKFRleHR1cmVNYXBw
ZXJHTCogdGV4dHVyZU1hcHBlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNr
KHRleHR1cmVNYXBwZXIpKTsKICAgICB9CiAKK3Byb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKFRleHR1cmVNYXBwZXJHTCopOwogcHJpdmF0ZToK
ICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCk7CiB9OwogCiBj
bGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayA6IHB1Ymxp
YyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s+IGNyZWF0
ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0
T3BhY2l0eUFuZE1hc2s+IGNyZWF0ZShUZXh0dXJlTWFwcGVyR0wqIHRleHR1cmVNYXBwZXIpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtUmVjdE9wYWNpdHlBbmRNYXNrKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKHRleHR1cmVNYXBwZXIp
KTsKICAgICB9CiAKK3Byb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJl
Y3RPcGFjaXR5QW5kTWFzayhUZXh0dXJlTWFwcGVyR0wqKTsKIHByaXZhdGU6CiAgICAgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soKTsKIH07CiAKIGNsYXNzIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4gY3JlYXRlKFRleHR1cmVN
YXBwZXJHTCogdGV4dHVyZU1hcHBlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKCkpOworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcih0ZXh0
dXJlTWFwcGVyKSk7CiAgICAgfQogCi0gICAgR0xpbnQgY29sb3JMb2NhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fY29sb3JMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgY29sb3JMb2NhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fY29sb3JMb2NhdGlvbjsgfQogCitwcm90ZWN0ZWQ6CisgICAgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKFRleHR1cmVNYXBwZXJHTCopOwogcHJpdmF0
ZToKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoKTsKLSAgICBHTGlu
dCBtX2NvbG9yTG9jYXRpb247CisgICAgR0MzRGludCBtX2NvbG9yTG9jYXRpb247CiB9OwogCiBj
bGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayA6IHB1Ymxp
YyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s+IGNyZWF0
ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRp
YWxpYXNpbmdOb01hc2s+IGNyZWF0ZShUZXh0dXJlTWFwcGVyR0wqIHRleHR1cmVNYXBwZXIpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtQW50aWFsaWFzaW5nTm9NYXNrKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKHRleHR1cmVNYXBwZXIp
KTsKICAgICB9CiAKLSAgICBHTGludCBleHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvb3Jk
aW5hdGVzTG9jYXRpb24oKSB7IHJldHVybiBtX2V4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJl
Q29yZGluYXRlc0xvY2F0aW9uOyB9Ci0gICAgR0xpbnQgZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVl
blNwYWNlTG9jYXRpb24oKSB7IHJldHVybiBtX2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFj
ZUxvY2F0aW9uOyB9CisgICAgR0MzRGludCBleHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNv
b3JkaW5hdGVzTG9jYXRpb24oKSB7IHJldHVybiBtX2V4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0
dXJlQ29yZGluYXRlc0xvY2F0aW9uOyB9CisgICAgR0MzRGludCBleHBhbmRlZFF1YWRFZGdlc0lu
U2NyZWVuU3BhY2VMb2NhdGlvbigpIHsgcmV0dXJuIG1fZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVl
blNwYWNlTG9jYXRpb247IH0KIAorcHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKFRleHR1cmVNYXBwZXJHTCopOwogcHJpdmF0ZToKICAg
ICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaygpOwogCi0gICAg
R0xpbnQgbV9leHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvcmRpbmF0ZXNMb2NhdGlvbjsK
LSAgICBHTGludCBtX2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uOworICAg
IEdDM0RpbnQgbV9leHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvcmRpbmF0ZXNMb2NhdGlv
bjsKKyAgICBHQzNEaW50IG1fZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb247
CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlciB7CkBAIC0yMDYsNyArMjIy
LDggQEAgcHVibGljOgogICAgICAgICBTb2xpZENvbG9yCiAgICAgfTsKIAotICAgIFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyKCk7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKSB7
IH07CisgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoVGV4dHVyZU1hcHBlckdMKik7CiAg
ICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKTsKIAogI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKQEAgLTIyMSwxMiArMjM4LDEyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
dHlwZWRlZiBIYXNoTWFwPFNoYWRlclR5cGUsIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbT4sIERlZmF1bHRIYXNoPGludD46Okhhc2gsIEhhc2hUcmFpdHM8aW50PiA+IFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtTWFwOwogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFw
IG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7CisgICAgVGV4dHVyZU1hcHBlckdMKiBt
X3RleHR1cmVNYXBwZXI7CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgdHlwZWRlZiBI
YXNoTWFwPGludCwgUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gPiBGaWx0ZXJNYXA7CiAg
ICAgRmlsdGVyTWFwIG1fZmlsdGVyTWFwOwogI2VuZGlmCi0KIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153657</attachid>
            <date>2012-07-21 00:03:05 -0700</date>
            <delta_ts>2012-07-21 23:38:22 -0700</delta_ts>
            <desc>Try fix Qt4 build</desc>
            <filename>bug-78672-20120721000300.patch</filename>
            <type>text/plain</type>
            <size>108909</size>
            <attacher name="Helder Correia">helder.correia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODgyNmYzMjk2YTVjZmNj
MTYyZDY1NGE1OTFjOGQ2NmIzNDRkMjIxNy4uODk1NzdkNDk0ZDA4MjY2MGViNjNlYWJhMjNiZjdl
ZjI0Nzc5ZTZlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NiBAQAorMjAxMi0wNy0yMCAgSGVs
ZGVyIENvcnJlaWEgIDxoZWxkZXIuY29ycmVpYUBub2tpYS5jb20+CisKKyAgICAgICAgW1RleG1h
cF0gTW92ZSBUZXh0dXJlTWFwcGVyR0wgdG8gdXNlIEdyYXBoaWNzQ29udGV4dDNECisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODY3MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRleHR1cmVNYXBwZXJHTCAo
VE1HTCkgaW5jbHVkZXMgZGlyZWN0IEdMIGNhbGxzIGFuZAorICAgICAgICBHcmFwaGljc0NvbnRl
eHQzRCAoR0MzRCkgb2ZmZXJzIG1hbnkgY29udmVuaWVuY2VzIG92ZXIgdGhlCisgICAgICAgIGZv
cm1lciBhcHByb2FjaC4gIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGUgYmFja2VuZCBvZiBUTUdMIHRv
CisgICAgICAgIEdDM0QuIEl0IHdhcyBpbml0aWFsbHkgdGhvdWdodCB0byBpbnRyb2R1Y2UgYSBu
ZXcgYmFja2VuZCAoc2F5LAorICAgICAgICBUZXh0dXJlTWFwcGVyR0MzRCksIGJ1dCBpbiB0aGUg
ZW5kIGl0IHdhcyBhZ3JlZWQgdG8gY29uc29saWRhdGUKKyAgICAgICAgaXQgaW5zaWRlIFRNR0wg
aW5zdGVhZC4KKworICAgICAgICBBIEdDM0Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgVE1HTCB3aXRo
IHRoZQorICAgICAgICBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyBmbGFnLiBBZGRpdGlvbmFs
IGxvZ2ljIHdhcyBpbnRyb2R1Y2VkCisgICAgICAgIHRvIFF0J3MgR0MzRCBpbiBvcmRlciB0byBo
YW5kbGUgdGhpcyBzaXR1YXRpb24gYW5kIG1ha2UgaXQgdXNlCisgICAgICAgIHRoZSBjdXJyZW50
IGNvbnRleHQuCisKKyAgICAgICAgVE1HTCdzIGRlcGVuZGVuY3kgb24gT3BlbkdMU2hpbXMuaCB3
YXMgY29tcGxldGVseSByZW1vdmVkLgorICAgICAgICBIb3dldmVyLCBHQzNEIGRvZXMgbm90IG1h
cCBldmVyeSBzaW5nbGUgR0wgY29uc3RhbnQuIFRodXMsIGl0J3MKKyAgICAgICAgaW1wb3J0YW50
IHRvIGRvY3VtZW50IHRoZSBmb2xsb3dpbmcgbm90ZXM6CisgICAgICAgICAgICAtIEdMX0ZBTFNF
IHdhcyBtYXBwZWQgdG8gZmFsc2UuCisgICAgICAgICAgICAtIEdMX1VOUEFDS19ST1dfTEVOR1RI
LCBHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsCisgICAgICAgICAgICBHTF9VTlBBQ0tfU0tJUF9ST1dT
LCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIGFuZAorICAgICAgICAgICAgR0xfVU5TSUdORURf
SU5UXzhfOF84XzhfUkVWIHdlcmUgbG9jYWxseSBkZWZpbmVkIGluIFRNR0wuCisKKyAgICAgICAg
QSBuZXcgR0MzRDo6dGV4SW1hZ2UyRERpcmVjdCgpIGZ1bmN0aW9uIHdhcyBpbnRyb2R1Y2VkIHRv
IGFsbG93CisgICAgICAgIGluaXRpYWxpemF0aW9uIG9mIHRleHR1cmVzIHdpdGhvdXQgYWxsb2Nh
dGlvbi4gVGhlIGV4aXN0aW5nCisgICAgICAgIHRleHRJbWFnZTJEKCkgcmVmdXNlcyBhIG51bGwg
cGl4ZWwgYnVmZmVyLCBhbmQKKyAgICAgICAgdGV4SW1hZ2UyRFJlc291cmNlU2FmZSgpIGFsbG93
cyBpdCBidXQgcGVyZm9ybXMgbWVtb3J5CisgICAgICAgIGFsbG9jYXRpb24gYW5kIHplcm9lcyB0
aGUgYml0cy4gVGhpcyB3YXMgbm90IGZhc3QgZW5vdWdoIGZvcgorICAgICAgICBCaXRtYXBUZXh0
dXJlR0wgZnJlcXVlbnQgc2V0dGluZyB1cC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMg
aXMgYSByZWZhY3RvcmluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmg6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkREaXJlY3Qp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNz
Q29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdMLmNwcDoKKyAgICAgICAgKFNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRHTERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpTaGFy
ZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6c2hhcmVk
R0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OlRleHR1cmVN
YXBwZXJHTERhdGEpOgorICAgICAgICAoVGV4dHVyZU1hcHBlckdMRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpzY2lzc29yQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6
OkNsaXBTdGFjazo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0
YTo6aW5pdGlhbGl6ZVN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjpUZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpi
ZWdpblBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZW5kUGFp
bnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJl
UmVjdGFuZ2xlQVJCKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1Rl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6dmlld3BvcnRNYXRyaXgpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dy
YW0pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpkaWRSZXNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0ZpbHRlcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFRleHR1cmVHTDo6aW5pdGlhbGl6ZVN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwVGV4dHVyZUdMOjpjbGVhcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFRleHR1cmVHTDo6Y3JlYXRlRmJvSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwVGV4dHVyZUdMOjpiaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6
fkJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJp
bmREZWZhdWx0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJl
Z2luU2Npc3NvckNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdp
bkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjplbmRDbGlwKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpncmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChU
ZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoQ2xpcFN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFRleHR1cmVHTDo6dGV4dHVyZVRhcmdldCk6CisgICAgICAgIChCaXRtYXBUZXh0dXJl
R0wpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpCaXRtYXBUZXh0dXJlR0wp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aW5pdGlh
bGl6ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNpbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNvbGlkQ29sb3I6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1BbnRpYWxpYXNpbmdOb01hc2spOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6flN0YW5kYXJkRmlsdGVyUHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dyYW06OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlckZvckZp
bHRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbTo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
OnZlcnRleEF0dHJpYik6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6bWF0cml4TG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmZsaXBM
b2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6
dGV4dHVyZVNpemVMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6c291cmNlVGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjptYXNrVGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpvcGFjaXR5TG9jYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlm
b3JtTG9jYXRpb24pOgorICAgICAgICAoU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6dmVydGV4QXR0cmliKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6dGV4Q29vcmRBdHRyaWIpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp0ZXh0dXJlVW5pZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6Y3JlYXRlKToK
KyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3JlYXRlKToKKyAg
ICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpjcmVhdGUp
OgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5k
TWFzazo6Y3JlYXRlKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9w
YWNpdHlBbmRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU29saWRDb2xvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU29saWRDb2xvcjo6Y29sb3JMb2NhdGlvbik6CisgICAgICAgIChUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6
ZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb29yZGluYXRlc0xvY2F0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNr
OjpleHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbik6CisgICAgICAgIChUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIpOgorCiAyMDEyLTA3LTIw
ICBEYXZpZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbmRleGVk
REI6IEluY2x1ZGUgaW50VmVyc2lvbiB3aGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBXZWJDb3JlIGFu
ZCBXZWJLaXQgSURCTWV0YWRhdGEgdHlwZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDc0MzNkZjYyNmY0Y2FiMmFj
YzZjYTA5OGE2MjgwZDQ4ZDQ5YTJiMTkuLjdiY2Q4YTE3NTlkYzY2YmQ4MDE1ZDU0Y2RlNWVjNDlj
YTUyNTlkYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaApAQCAtNTI5LDYgKzUyOSw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IHByZXBhcmVUZXh0dXJlKCk7CiAjZW5kaWYKIAorICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRl
eEltYWdlMkQoKS4gQWxsb3dzIHBpeGVscz09MCB3aXRoIG5vIGFsbG9jYXRpb24uCisgICAgdm9p
ZCB0ZXhJbWFnZTJERGlyZWN0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCog
cGl4ZWxzKTsKKwogICAgIC8vIEhlbHBlciB0byB0ZXhJbWFnZTJEIHdpdGggcGl4ZWw9PTAgY2Fz
ZTogcGl4ZWxzIGFyZSBpbml0aWFsaXplZCB0byAwLgogICAgIC8vIFJldHVybiB0cnVlIGlmIG5v
IEdMIGVycm9yIGlzIHN5bnRoZXNpemVkLgogICAgIC8vIEJ5IGRlZmF1bHQsIGFsaWdubWVudCBp
cyA0LCB0aGUgT3BlbkdMIGRlZmF1bHQgc2V0dGluZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0wuY3BwCmluZGV4IGZkNDUwMTQxYzc0ZGRhM2I0OWU4OTU3ODU5Y2JhMmI5MGE4Mzdm
NTIuLjk4ZTExNDViM2RiMjRlNTFkN2I3NWZkMDY3MDhmZmFlMjU2YWViMTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcApAQCAtMjU2LDcgKzI1Niw3IEBAIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworCiAgICAgR0MzRGVudW0gb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBpbnRlcm5hbGZvcm1hdDsK
ICAgICBpZiAodHlwZSA9PSBHTF9GTE9BVCkgewogICAgICAgICBpZiAoZm9ybWF0ID09IEdMX1JH
QkEpCkBAIC0yNjUsNyArMjY1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICAgICAg
ICAgIG9wZW5HTEludGVybmFsRm9ybWF0ID0gR0xfUkdCMzJGX0FSQjsKICAgICB9CiAKLSAgICA6
OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBvcGVuR0xJbnRlcm5hbEZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgdGV4SW1hZ2UyRERp
cmVjdCh0YXJnZXQsIGxldmVsLCBvcGVuR0xJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCmluZGV4IGE0ZDFl
YjRjZDkzYzQ3NjMzNmMwMmY2MTNiZmM2NTk0NGQyODZjYjguLjhhMjZhZWNlYmM4MDg4ODc2ODk5
MjgyNTA0OGY3NDVjYmY5NmZlMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMQ29tbW9uLmNwcApAQCAtMTM4Miw2ICsxMzgyLDEyIEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGF5ZXJDb21wb3Np
dGVkOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJERGlyZWN0KEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKK30K
KwogfQogCiAjZW5kaWYgLy8gVVNFKDNEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMRVMuY3BwCmluZGV4IDc5ZGRjYmJmZDlhNGI1NWVjODI2ZTQxYjU5NWVlZjg0
ZTY0ZDlkMDMuLjUyODFlY2ZjM2U0ZWNmYjk3YzA3MzM4OTlkNzQ0ZmY1Y2EwOWYyNmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTEVTLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpZiBVU0UoM0RfR1JBUEhJQ1MpCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgor
CiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMRVMuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAjaW5jbHVkZSAiSW50U2l6ZS5oIgpAQCAtMjMwLDggKzIzMSw4IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKworICAgIHRleEltYWdlMkREaXJl
Y3QodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dDNEUXQuY3BwCmluZGV4IDg5NWY3NjY4ODAzOWU4MWYyZjcwYmZhZDgwMDVmMDc3YmRlNTFkMTgu
LmZhMDBjNTg1MjI0NjUxNjllYmVmZDNkMjU2OWIyMzZlNDA1MTMwMDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dDNEUXQuY3BwCkBAIC02Myw3ICs2Myw3IEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZQogI2VuZGlmCiB7CiBwdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBo
aWNzQ29udGV4dDNEKiwgSG9zdFdpbmRvdyopOworICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZShHcmFwaGljc0NvbnRleHQzRCosIEhvc3RXaW5kb3cqLCBib29sIHJlbmRlckRpcmVjdGx5VG9I
b3N0V2luZG93KTsKICAgICB+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCk7CiAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKIH0KICNlbmRpZgogCi1HcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK0dyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2lu
ZG93KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2hvc3RXaW5kb3coaG9zdFdp
bmRvdykKICAgICAsIG1fc3VyZmFjZSgwKQpAQCAtMTIzLDYgKzEyMywxOSBAQCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgSAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKHJlbmRlckRp
cmVjdGx5VG9Ib3N0V2luZG93KSB7CisgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgYXJlIG5v
dCBzZXR0aW5nIHVwIFdlYkdMLCBidXQgcmF0aGVyIFRleHR1cmVNYXBwZXJHTCwgYW5kIHdhbnQg
dG8gcmVseQorICAgICAgICAvLyBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybSBjb250ZXh0LgorI2lm
IEhBVkUoUVQ1KQorICAgICAgICBtX3BsYXRmb3JtQ29udGV4dCA9IFFPcGVuR0xDb250ZXh0Ojpj
dXJyZW50Q29udGV4dCgpOworICAgICAgICBtX3N1cmZhY2UgPSBtX3BsYXRmb3JtQ29udGV4dC0+
c3VyZmFjZSgpOworI2Vsc2UKKyAgICAgICAgbV9wbGF0Zm9ybUNvbnRleHQgPSBjb25zdF9jYXN0
PFFHTENvbnRleHQqPihRR0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgpKTsKKyAgICAgICAgbV9z
dXJmYWNlID0gcW9iamVjdF9jYXN0PFFHTFdpZGdldCo+KG1fcGxhdGZvcm1Db250ZXh0LT5kZXZp
Y2UoKSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQogICAgIC8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIGNyZWF0ZSBhIFFPcGVuR0xD
b250ZXh0IHdpdGhvdXQgY3JlYXRpbmcgYSBRV2luZG93IGF0IGFsbC4KICAgICAvLyBXZSBuZWVk
IHRvIGNyZWF0ZSBhIHN1cmZhY2UgaW4gb3JkZXIgdG8gY3JlYXRlIGEgUU9wZW5HTENvbnRleHQg
YW5kIG1ha2UgaXQgY3VycmVudC4KQEAgLTMxMSwxNCArMzI0LDEyIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc1N1cmZhY2VzKGNvbnN0IEludFNpemUmIHNp
emUpCiAKIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKIHsK
LSAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgcmVu
ZGVyaW5nIGRpcmVjdGx5IHRvIHRoZSBIb3N0V2luZG93LgotICAgIGlmIChyZW5kZXJTdHlsZSA9
PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29u
dGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCBmYWxzZSkpOworICAgIGJvb2wgcmVuZGVyRGlyZWN0
bHlUb0hvc3RXaW5kb3cgPSAocmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5k
b3cpOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5l
dyBHcmFwaGljc0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRvdywgcmVuZGVyRGlyZWN0bHlUb0hv
c3RXaW5kb3cpKTsKICAgICByZXR1cm4gY29udGV4dC0+bV9wcml2YXRlID8gY29udGV4dC5yZWxl
YXNlKCkgOiAwOwogfQogCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cs
IGJvb2wpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wgcmVu
ZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCiAgICAgOiBtX2N1cnJlbnRXaWR0aCgwKQogICAgICwg
bV9jdXJyZW50SGVpZ2h0KDApCiAgICAgLCBtX2NvbXBpbGVyKGlzR0xFUzJDb21wbGlhbnQoKSA/
IFNIX0VTU0xfT1VUUFVUIDogU0hfR0xTTF9PVVRQVVQpCkBAIC0zMzksNyArMzUwLDcgQEAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKICAgICAsIG1f
bXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKICAgICAsIG1fbXVsdGlzYW1wbGVDb2xv
ckJ1ZmZlcigwKQotICAgICwgbV9wcml2YXRlKGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGUodGhpcywgaG9zdFdpbmRvdykpKQorICAgICwgbV9wcml2YXRlKGFkb3B0UHRyKG5l
dyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUodGhpcywgaG9zdFdpbmRvdywgcmVuZGVyRGlyZWN0
bHlUb0hvc3RXaW5kb3cpKSkKIHsKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIApAQCAtMzYw
LDYgKzM3MSwxMSBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCisgICAgaWYgKHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQorICAgICAgICAvLyBJ
biB0aGlzIGNhc2UsIHdlIGFyZSBub3Qgc2V0dGluZyB1cCBXZWJHTCwgYnV0IHJhdGhlciBUZXh0
dXJlTWFwcGVyR0wsIGhlbmNlIHNraXAgYWxsCisgICAgICAgIC8vIGNhbnZhcyBhbmQgQU5HTEUg
bG9naWMuCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIENyZWF0ZSBidWZmZXJzIGZvciB0aGUg
Y2FudmFzIEZCTy4KICAgICBnbEdlbkZyYW1lYnVmZmVycygvKiBjb3VudCAqLyAxLCAmbV9mYm8p
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDY4OGUyNmY0ZTg5ZmZmMTNkZTViM2Q1Nzlj
ODIwYTkzNWVmOTE3MmMuLjVkNWY3ZjQxYmY1ZmZiYmYwYmFjZjgzNjg2NWRlMDhmYjlmZjE5MzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSAiVGV4
dHVyZU1hcHBlckdMLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIgpA
QCAtMzksOTEgKzM4LDQ0IEBACiAKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRlICJOYXRpdmVJ
bWFnZVF0LmgiCi0jaWYgSEFWRShRVDUpCi0jaW5jbHVkZSA8UU9wZW5HTENvbnRleHQ+Ci0jZWxz
ZQotI2luY2x1ZGUgPFFHTENvbnRleHQ+Ci0jZW5kaWYgLy8gUVRfVkVSU0lPTgotI2VsaWYgT1Mo
V0lORE9XUykKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZWxpZiBPUyhNQUNfT1NfWCkKLSNpbmNs
dWRlIDxBR0wvYWdsLmg+Ci0jZWxpZiBkZWZpbmVkKFhQX1VOSVgpCi0jaW5jbHVkZSA8R0wvZ2x4
Lmg+CiAjZW5kaWYKIAotI2RlZmluZSBHTF9DTUQoLi4uKSBkbyB7IF9fVkFfQVJHU19fOyBBU1NF
UlRfQVJHKF9fVkFfQVJHU19fLCAhZ2xHZXRFcnJvcigpKTsgfSB3aGlsZSAoMCkKLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLXN0cnVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsKLSAgICBzdHJ1Y3QgU2hh
cmVkR0xEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U2hhcmVkR0xEYXRhPiB7Ci0jaWYgUExBVEZP
Uk0oUVQpCi0jaWYgUVRfVkVSU0lPTiA+PSAweDA1MDAwMAotICAgICAgICB0eXBlZGVmIFFPcGVu
R0xDb250ZXh0KiBHTENvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVu
dEdMQ29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBRT3BlbkdMQ29udGV4
dDo6Y3VycmVudENvbnRleHQoKTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgdHlwZWRlZiBj
b25zdCBRR0xDb250ZXh0KiBHTENvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0
Q3VycmVudEdMQ29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBRR0xDb250
ZXh0OjpjdXJyZW50Q29udGV4dCgpOwotICAgICAgICB9CisjaWYgT1MoREFSV0lOKQorI2RlZmlu
ZSBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIgMHg4NEY1CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lO
VF84XzhfOF84X1JFViAweDgzNjcKICNlbmRpZgotI2VsaWYgT1MoV0lORE9XUykKLSAgICAgICAg
dHlwZWRlZiBIR0xSQyBHTENvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3Vy
cmVudEdMQ29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB3Z2xHZXRDdXJy
ZW50Q29udGV4dCgpOwotICAgICAgICB9Ci0jZWxpZiBPUyhNQUNfT1NfWCkKLSAgICAgICAgdHlw
ZWRlZiBBR0xDb250ZXh0IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRD
dXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFnbEdldEN1
cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIH0KLSNlbGlmIGRlZmluZWQoWFBfVU5JWCkKLSAgICAg
ICAgdHlwZWRlZiBHTFhDb250ZXh0IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4
dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGds
WEdldEN1cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIC8vIERlZmF1
bHQgaW1wbGVtZW50YXRpb24gZm9yIHVua25vd24gb3BlbmdsLgotICAgICAgICAvLyBSZXR1cm5z
IGFsd2F5cyBpbmNyZWFzaW5nIG51bWJlciBhbmQgZGlzYWJsZXMgR0wgY29udGV4dCBkYXRhIHNo
YXJpbmcuCi0gICAgICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IEdMQ29udGV4dDsKLSAgICAgICAg
c3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAg
ICAgICAgc3RhdGljIEdMQ29udGV4dCBkdW1teUNvbnRleHRDb3VudGVyID0gMDsKLSAgICAgICAg
ICAgIHJldHVybiArK2R1bW15Q29udGV4dENvdW50ZXI7Ci0gICAgICAgIH0KIAorI2lmICFkZWZp
bmVkKFRFWE1BUF9PUEVOR0xfRVNfMikKKyNkZWZpbmUgR0xfVU5QQUNLX1JPV19MRU5HVEggMHgw
Q0YyCisjZGVmaW5lIEdMX1VOUEFDS19TS0lQX1BJWEVMUyAweDBDRjQKKyNkZWZpbmUgR0xfVU5Q
QUNLX1NLSVBfUk9XUyAweDBDRjMKICNlbmRpZgogCi0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxH
TENvbnRleHQsIFNoYXJlZEdMRGF0YSo+IEdMQ29udGV4dERhdGFNYXA7CituYW1lc3BhY2UgV2Vi
Q29yZSB7CitzdHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CisgICAgc3RydWN0IFNoYXJlZEdM
RGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZEdMRGF0YT4geworICAgICAgICB0eXBlZGVm
IEhhc2hNYXA8UGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCwgU2hhcmVkR0xEYXRhKj4gR0xDb250
ZXh0RGF0YU1hcDsKICAgICAgICAgc3RhdGljIEdMQ29udGV4dERhdGFNYXAmIGdsQ29udGV4dERh
dGFNYXAoKQogICAgICAgICB7CiAgICAgICAgICAgICBzdGF0aWMgR0xDb250ZXh0RGF0YU1hcCBt
YXA7CiAgICAgICAgICAgICByZXR1cm4gbWFwOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U2hhcmVkR0xEYXRhPiBjdXJyZW50U2hhcmVkR0xEYXRhKCkKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkR0xEYXRhPiBjdXJyZW50U2hhcmVkR0xEYXRhKFRleHR1
cmVNYXBwZXJHTCogdGV4dHVyZU1hcHBlcikKICAgICAgICAgewotICAgICAgICAgICAgR0xDb250
ZXh0IGN1cnJlbnRHTENvbmV4dCA9IGdldEN1cnJlbnRHTENvbnRleHQoKTsKLSAgICAgICAgICAg
IEdMQ29udGV4dERhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgpLmZpbmQo
Y3VycmVudEdMQ29uZXh0KTsKKyAgICAgICAgICAgIEdMQ29udGV4dERhdGFNYXA6Oml0ZXJhdG9y
IGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgpLmZpbmQodGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250
ZXh0M0QoKS0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKICAgICAgICAgICAgIGlmIChp
dCAhPSBnbENvbnRleHREYXRhTWFwKCkuZW5kKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGl0
LT5zZWNvbmQ7CiAKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkR0xEYXRh
KGdldEN1cnJlbnRHTENvbnRleHQoKSkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTaGFyZWRHTERhdGEodGV4dHVyZU1hcHBlcikpOwogICAgICAgICB9CiAKLQotCiAgICAgICAg
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwog
Ci0gICAgICAgIFNoYXJlZEdMRGF0YShHTENvbnRleHQgZ2xDb250ZXh0KQorICAgICAgICBTaGFy
ZWRHTERhdGEoVGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVyKQorICAgICAgICAgICAgOiB0
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcih0ZXh0dXJlTWFwcGVyKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBnbENvbnRleHREYXRhTWFwKCkuYWRkKGdsQ29udGV4dCwgdGhpcyk7CisgICAgICAg
ICAgICBnbENvbnRleHREYXRhTWFwKCkuYWRkKHRleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4
dDNEKCktPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSwgdGhpcyk7CiAgICAgICAgIH0KIAog
ICAgICAgICB+U2hhcmVkR0xEYXRhKCkKQEAgLTE0MiwzMCArOTQsMzIgQEAgc3RydWN0IFRleHR1
cmVNYXBwZXJHTERhdGEgewogCiAgICAgU2hhcmVkR0xEYXRhJiBzaGFyZWRHTERhdGEoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuICoobV9zaGFyZWRHTERhdGEuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gKm1fc2hhcmVkR0xEYXRhOwogICAgIH0KIAogICAgIHZvaWQgaW5pdGlhbGl6ZVN0
ZW5jaWwoKTsKIAotICAgIFRleHR1cmVNYXBwZXJHTERhdGEoKQotICAgICAgICA6IFBhaW50Rmxh
Z3MoMCkKKyAgICBUZXh0dXJlTWFwcGVyR0xEYXRhKFRleHR1cmVNYXBwZXJHTCogdGV4dHVyZU1h
cHBlcikKKyAgICAgICAgOiB0ZXh0dXJlTWFwcGVyKHRleHR1cmVNYXBwZXIpCisgICAgICAgICwg
UGFpbnRGbGFncygwKQogICAgICAgICAsIHByZXZpb3VzUHJvZ3JhbSgwKQogICAgICAgICAsIHRh
cmdldEZyYW1lQnVmZmVyKDApCiAgICAgICAgICwgZGlkTW9kaWZ5U3RlbmNpbChmYWxzZSkKICAg
ICAgICAgLCBwcmV2aW91c1NjaXNzb3JTdGF0ZSgwKQogICAgICAgICAsIHByZXZpb3VzRGVwdGhT
dGF0ZSgwKQotICAgICAgICAsIG1fc2hhcmVkR0xEYXRhKFRleHR1cmVNYXBwZXJHTERhdGE6OlNo
YXJlZEdMRGF0YTo6Y3VycmVudFNoYXJlZEdMRGF0YSgpKQorICAgICAgICAsIG1fc2hhcmVkR0xE
YXRhKFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6Y3VycmVudFNoYXJlZEdMRGF0
YSh0ZXh0dXJlTWFwcGVyKSkKICAgICB7IH0KIAorICAgIFRleHR1cmVNYXBwZXJHTCogdGV4dHVy
ZU1hcHBlcjsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4OwogICAg
IFRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgUGFpbnRGbGFnczsKLSAgICBHTGludCBwcmV2aW91
c1Byb2dyYW07Ci0gICAgR0xpbnQgdGFyZ2V0RnJhbWVCdWZmZXI7CisgICAgR0MzRGludCBwcmV2
aW91c1Byb2dyYW07CisgICAgR0MzRGludCB0YXJnZXRGcmFtZUJ1ZmZlcjsKICAgICBib29sIGRp
ZE1vZGlmeVN0ZW5jaWw7Ci0gICAgR0xpbnQgcHJldmlvdXNTY2lzc29yU3RhdGU7Ci0gICAgR0xp
bnQgcHJldmlvdXNEZXB0aFN0YXRlOwotICAgIEdMaW50IHZpZXdwb3J0WzRdOwotICAgIEdMaW50
IHByZXZpb3VzU2Npc3Nvcls0XTsKKyAgICBHQzNEaW50IHByZXZpb3VzU2Npc3NvclN0YXRlOwor
ICAgIEdDM0RpbnQgcHJldmlvdXNEZXB0aFN0YXRlOworICAgIEdDM0RpbnQgdmlld3BvcnRbNF07
CisgICAgR0MzRGludCBwcmV2aW91c1NjaXNzb3JbNF07CiAgICAgUmVmUHRyPFNoYXJlZEdMRGF0
YT4gbV9zaGFyZWRHTERhdGE7CiAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IGN1cnJlbnRTdXJm
YWNlOwogfTsKQEAgLTE4OSwyNSArMTQzLDI1IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpDbGlw
U3RhY2s6OnBvcCgpCiAgICAgY2xpcFN0YWNrLnJlbW92ZUxhc3QoKTsKIH0KIAotc3RhdGljIHZv
aWQgc2Npc3NvckNsaXAoY29uc3QgSW50UmVjdCYgcmVjdCkKK3N0YXRpYyB2b2lkIHNjaXNzb3JD
bGlwKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewog
ICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR0xpbnQgdmll
d3BvcnRbNF07Ci0gICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIHZpZXdwb3J0
KSk7Ci0gICAgR0xfQ01EKGdsU2Npc3NvcihyZWN0LngoKSwgdmlld3BvcnRbM10gLSByZWN0Lm1h
eFkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7CisgICAgR0MzRGludCB2aWV3cG9y
dFs0XTsKKyAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6VklFV1BP
UlQsIHZpZXdwb3J0KTsKKyAgICBjb250ZXh0LT5zY2lzc29yKHJlY3QueCgpLCB2aWV3cG9ydFsz
XSAtIHJlY3QubWF4WSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogfQogCi12b2lk
IFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjphcHBseSgpCit2b2lkIFRleHR1cmVNYXBwZXJH
TDo6Q2xpcFN0YWNrOjphcHBseShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEKQogewotICAg
IHNjaXNzb3JDbGlwKGNsaXBTdGF0ZS5zY2lzc29yQm94KTsKLSAgICBHTF9DTUQoZ2xTdGVuY2ls
T3AoR0xfS0VFUCwgR0xfS0VFUCwgR0xfS0VFUCkpOwotICAgIEdMX0NNRChnbFN0ZW5jaWxGdW5j
KEdMX0VRVUFMLCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSwgY2xpcFN0YXRlLnN0ZW5jaWxJ
bmRleCAtIDEpKTsKKyAgICBzY2lzc29yQ2xpcChjb250ZXh0M0QsIGNsaXBTdGF0ZS5zY2lzc29y
Qm94KTsKKyAgICBjb250ZXh0M0QtPnN0ZW5jaWxPcChHcmFwaGljc0NvbnRleHQzRDo6S0VFUCwg
R3JhcGhpY3NDb250ZXh0M0Q6OktFRVAsIEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQKTsKKyAgICBj
b250ZXh0M0QtPnN0ZW5jaWxGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpFUVVBTCwgY2xpcFN0YXRl
LnN0ZW5jaWxJbmRleCAtIDEsIGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXggLSAxKTsKICAgICBpZiAo
Y2xpcFN0YXRlLnN0ZW5jaWxJbmRleCA9PSAxKQotICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdM
X1NURU5DSUxfVEVTVCkpOworICAgICAgICBjb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfVEVTVCk7CiAgICAgZWxzZQotICAgICAgICBHTF9DTUQoZ2xFbmFibGUo
R0xfU1RFTkNJTF9URVNUKSk7CisgICAgICAgIGNvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX1RFU1QpOwogfQogCiAKQEAgLTIyMSw4ICsxNzUsOSBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJHTERhdGE6OmluaXRpYWxpemVTdGVuY2lsKCkKICAgICBpZiAoZGlkTW9kaWZ5
U3RlbmNpbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR0xfQ01EKGdsQ2xlYXJTdGVuY2lsKDAp
KTsKLSAgICBHTF9DTUQoZ2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKTsKKyAgICBHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dDNEID0gdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0
M0QoKTsKKyAgICBjb250ZXh0M0QtPmNsZWFyU3RlbmNpbCgwKTsKKyAgICBjb250ZXh0M0QtPmNs
ZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOwogICAgIGRpZE1vZGlm
eVN0ZW5jaWwgPSB0cnVlOwogfQogCkBAIC0yMzYsMTAgKzE5MSwxNCBAQCBCaXRtYXBUZXh0dXJl
R0wqIHRvQml0bWFwVGV4dHVyZUdMKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpCiAKIFRleHR1cmVN
YXBwZXJHTDo6VGV4dHVyZU1hcHBlckdMKCkKICAgICA6IFRleHR1cmVNYXBwZXIoT3BlbkdMTW9k
ZSkKLSAgICAsIG1fZGF0YShuZXcgVGV4dHVyZU1hcHBlckdMRGF0YSkKICAgICAsIG1fY29udGV4
dCgwKQogICAgICwgbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcoZmFsc2UpCiB7Cisg
ICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlczsKKyAgICBhdHRyaWJ1
dGVzLmFudGlhbGlhcyA9IGZhbHNlOworICAgIGF0dHJpYnV0ZXMuZGVwdGggPSBmYWxzZTsKKyAg
ICBtX2NvbnRleHQzRCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0cmlidXRlcywgMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICBtX2Rh
dGEgPSBuZXcgVGV4dHVyZU1hcHBlckdMRGF0YSh0aGlzKTsKIH0KIAogVGV4dHVyZU1hcHBlckdM
OjpDbGlwU3RhY2smIFRleHR1cmVNYXBwZXJHTDo6Y2xpcFN0YWNrKCkKQEAgLTI0OSwxNSArMjA4
LDkgQEAgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2smIFRleHR1cmVNYXBwZXJHTDo6Y2xpcFN0
YWNrKCkKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyBm
bGFncykKIHsKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBubyBHTCBlcnJvciBjb2RlIHN0YXlzIGZy
b20gcHJldmlvdXMgb3BlcmF0aW9ucy4KLSAgICBnbEdldEVycm9yKCk7Ci0KLSAgICBpZiAoIWlu
aXRpYWxpemVPcGVuR0xTaGltcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHTF9DTUQoZ2xH
ZXRJbnRlZ2VydihHTF9DVVJSRU5UX1BST0dSQU0sICZkYXRhKCkucHJldmlvdXNQcm9ncmFtKSk7
Ci0gICAgZGF0YSgpLnByZXZpb3VzU2Npc3NvclN0YXRlID0gZ2xJc0VuYWJsZWQoR0xfU0NJU1NP
Ul9URVNUKTsKLSAgICBkYXRhKCkucHJldmlvdXNEZXB0aFN0YXRlID0gZ2xJc0VuYWJsZWQoR0xf
REVQVEhfVEVTVCk7CisgICAgbV9jb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dDNEOjpDVVJSRU5UX1BST0dSQU0sICZkYXRhKCkucHJldmlvdXNQcm9ncmFtKTsKKyAgICBkYXRh
KCkucHJldmlvdXNTY2lzc29yU3RhdGUgPSBtX2NvbnRleHQzRC0+aXNFbmFibGVkKEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAgIGRhdGEoKS5wcmV2aW91c0RlcHRoU3RhdGUg
PSBtX2NvbnRleHQzRC0+aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUKTsK
ICNpZiBQTEFURk9STShRVCkKICAgICBpZiAobV9jb250ZXh0KSB7CiAgICAgICAgIFFQYWludGVy
KiBwYWludGVyID0gbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKQEAgLTI2NSwxNSArMjE4
LDE1IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKFBhaW50RmxhZ3MgZmxh
Z3MpCiAgICAgICAgIHBhaW50ZXItPmJlZ2luTmF0aXZlUGFpbnRpbmcoKTsKICAgICB9CiAjZW5k
aWYKLSAgICBnbERpc2FibGUoR0xfREVQVEhfVEVTVCk7Ci0gICAgZ2xFbmFibGUoR0xfU0NJU1NP
Ul9URVNUKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfVEVTVCk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJ
U1NPUl9URVNUKTsKICAgICBkYXRhKCkuZGlkTW9kaWZ5U3RlbmNpbCA9IGZhbHNlOwotICAgIEdM
X0NNRChnbERlcHRoTWFzaygwKSk7Ci0gICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfVklFV1BP
UlQsIGRhdGEoKS52aWV3cG9ydCkpOwotICAgIEdMX0NNRChnbEdldEludGVnZXJ2KEdMX1NDSVNT
T1JfQk9YLCBkYXRhKCkucHJldmlvdXNTY2lzc29yKSk7Ci0gICAgZ2xHZXRJbnRlZ2VydihHTF9G
UkFNRUJVRkZFUl9CSU5ESU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKTsKKyAgICBtX2Nv
bnRleHQzRC0+ZGVwdGhNYXNrKDApOworICAgIG1fY29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFw
aGljc0NvbnRleHQzRDo6VklFV1BPUlQsIGRhdGEoKS52aWV3cG9ydCk7CisgICAgbV9jb250ZXh0
M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX0JPWCwgZGF0YSgpLnBy
ZXZpb3VzU2Npc3Nvcik7CisgICAgbV9jb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5ESU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKTsK
ICAgICBtX2NsaXBTdGFjay5pbml0KEludFJlY3QoMCwgMCwgZGF0YSgpLnZpZXdwb3J0WzJdLCBk
YXRhKCkudmlld3BvcnRbM10pKTsKLSAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9GUkFNRUJV
RkZFUl9CSU5ESU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKSk7CisgICAgbV9jb250ZXh0
M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5ESU5HLCAm
ZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKTsKICAgICBkYXRhKCkuUGFpbnRGbGFncyA9IGZsYWdz
OwogICAgIGJpbmRTdXJmYWNlKDApOwogfQpAQCAtMjgxLDIyICsyMzQsMjIgQEAgdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyBmbGFncykKIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjplbmRQYWludGluZygpCiB7CiAgICAgaWYgKGRhdGEoKS5kaWRNb2RpZnlTdGVu
Y2lsKSB7Ci0gICAgICAgIGdsQ2xlYXJTdGVuY2lsKDEpOwotICAgICAgICBnbENsZWFyKEdMX1NU
RU5DSUxfQlVGRkVSX0JJVCk7CisgICAgICAgIG1fY29udGV4dDNELT5jbGVhclN0ZW5jaWwoMSk7
CisgICAgICAgIG1fY29udGV4dDNELT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9C
VUZGRVJfQklUKTsKICAgICB9CiAKLSAgICBnbFVzZVByb2dyYW0oZGF0YSgpLnByZXZpb3VzUHJv
Z3JhbSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0oZGF0YSgpLnByZXZpb3VzUHJvZ3Jh
bSk7CiAKLSAgICBnbFNjaXNzb3IoZGF0YSgpLnByZXZpb3VzU2Npc3NvclswXSwgZGF0YSgpLnBy
ZXZpb3VzU2Npc3NvclsxXSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclsyXSwgZGF0YSgpLnByZXZp
b3VzU2Npc3NvclszXSk7CisgICAgbV9jb250ZXh0M0QtPnNjaXNzb3IoZGF0YSgpLnByZXZpb3Vz
U2Npc3NvclswXSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclsxXSwgZGF0YSgpLnByZXZpb3VzU2Np
c3NvclsyXSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclszXSk7CiAgICAgaWYgKGRhdGEoKS5wcmV2
aW91c1NjaXNzb3JTdGF0ZSkKLSAgICAgICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAg
ICAgICAgbV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
KTsKICAgICBlbHNlCi0gICAgICAgIGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgICAg
ICBtX2NvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsK
IAogICAgIGlmIChkYXRhKCkucHJldmlvdXNEZXB0aFN0YXRlKQotICAgICAgICBnbEVuYWJsZShH
TF9ERVBUSF9URVNUKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfVEVTVCk7CiAgICAgZWxzZQotICAgICAgICBnbERpc2FibGUoR0xfREVQVEhf
VEVTVCk7CisgICAgICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9URVNUKTsKIAogI2lmIFBMQVRGT1JNKFFUKQogICAgIGlmICghbV9jb250ZXh0KQpAQCAt
MzA3LDQwICsyNjAsNDAgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50aW5nKCkKICNl
bmRpZgogfQogCi12b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQm
IHF1YWRUb0RyYXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgs
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBzaGFkZXJQcm9ncmFtLCBHTGVudW0gZHJhd2lu
Z01vZGUsIGJvb2wgbmVlZHNCbGVuZGluZykKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3UXVh
ZChjb25zdCBEcmF3UXVhZCYgcXVhZFRvRHJhdywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHNoYWRlclByb2dy
YW0sIEdDM0RlbnVtIGRyYXdpbmdNb2RlLCBib29sIG5lZWRzQmxlbmRpbmcpCiB7Ci0gICAgR0xf
Q01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmli
KCkpKTsKLSAgICBHTF9DTUQoZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCkpOworICAg
IG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0
ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkFSUkFZX0JVRkZFUiwgMCk7CiAKLSAgICBjb25zdCBHTGZsb2F0IHF1YWRbXSA9IHsKKyAg
ICBjb25zdCBHQzNEZmxvYXQgcXVhZFtdID0gewogICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJl
Y3RNYXBwZWRUb1VuaXRTcXVhcmUucDEoKS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBl
ZFRvVW5pdFNxdWFyZS5wMSgpLnkoKSwKICAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFw
cGVkVG9Vbml0U3F1YXJlLnAyKCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1Vu
aXRTcXVhcmUucDIoKS55KCksCiAgICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRv
VW5pdFNxdWFyZS5wMygpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1
YXJlLnAzKCkueSgpLAogICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRT
cXVhcmUucDQoKS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5w
NCgpLnkoKQogICAgIH07Ci0gICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXJQ
cm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCBxdWFkKSk7
CisgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyUHJvZ3JhbS0+dmVy
dGV4QXR0cmliKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0Rp
bnRwdHIocXVhZCkpOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNm
b3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpLm11bHRpcGx5KG1vZGVsVmll
d01hdHJpeCkubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgoCiAgICAgICAgICAgICBxdWFk
VG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLAogICAgICAgICAgICAg
MCwgcXVhZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJlY3QuaGVpZ2h0KCksIDAsIDAsCiAgICAgICAg
ICAgICAwLCAwLCAxLCAwLAogICAgICAgICAgICAgcXVhZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJl
Y3QueCgpLCBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC55KCksIDAsIDEpKTsKLSAgICBj
b25zdCBHTGZsb2F0IG00W10gPSB7CisgICAgY29uc3QgR0MzRGZsb2F0IG00W10gPSB7CiAgICAg
ICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigpLCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQo
KSwKICAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0
cml4Lm0yNCgpLAogICAgICAgICBtYXRyaXgubTMxKCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0z
MygpLCBtYXRyaXgubTM0KCksCiAgICAgICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBt
YXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQogICAgIH07Ci0gICAgR0xfQ01EKGdsVW5pZm9ybU1h
dHJpeDRmdihzaGFkZXJQcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBHTF9GQUxTRSwgbTQp
KTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihzaGFkZXJQcm9ncmFtLT5tYXRy
aXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgY29uc3RfY2FzdDxHQzNEZmxvYXQqPihtNCkpOwogCiAg
ICAgaWYgKG5lZWRzQmxlbmRpbmcpIHsKLSAgICAgICAgR0xfQ01EKGdsQmxlbmRGdW5jKEdMX09O
RSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSkpOwotICAgICAgICBHTF9DTUQoZ2xFbmFibGUoR0xf
QkxFTkQpKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQz
RDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAgICAg
IG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKICAgICB9IGVs
c2UKLSAgICAgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9CTEVORCkpOworICAgICAgICBtX2NvbnRl
eHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwogCi0gICAgR0xfQ01EKGds
RHJhd0FycmF5cyhkcmF3aW5nTW9kZSwgMCwgNCkpOwotICAgIEdMX0NNRChnbERpc2FibGVWZXJ0
ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOworICAgIG1fY29u
dGV4dDNELT5kcmF3QXJyYXlzKGRyYXdpbmdNb2RlLCAwLCA0KTsKKyAgICBtX2NvbnRleHQzRC0+
ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsK
IH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9y
LCBmbG9hdCB3aWR0aCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4KQpAQCAtMzQ5LDE3ICszMDIsMTcgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCB3
aWR0aCwgY29uc3QgRmxvYXRSZWMKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRH
TERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5zb2xpZENvbG9yUHJvZ3JhbSgpOwot
ICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOworICAgIG1fY29udGV4dDNE
LT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOwogCiAgICAgZmxvYXQgYWxwaGEgPSBjb2xvci5h
bHBoYSgpIC8gMjU1LjA7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9j
YXRpb24oKSwKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRp
b24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgKGNvbG9yLnJlZCgpIC8gMjU1LjApICogYWxw
aGEsCiAgICAgICAgICAgICAgICAgICAgICAgIChjb2xvci5ncmVlbigpIC8gMjU1LjApICogYWxw
aGEsCiAgICAgICAgICAgICAgICAgICAgICAgIChjb2xvci5ibHVlKCkgLyAyNTUuMCkgKiBhbHBo
YSwKLSAgICAgICAgICAgICAgICAgICAgICAgYWxwaGEpKTsKLSAgICBHTF9DTUQoZ2xMaW5lV2lk
dGgod2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgYWxwaGEpOworICAgIG1fY29udGV4
dDNELT5saW5lV2lkdGgod2lkdGgpOwogCi0gICAgZHJhd1F1YWQodGFyZ2V0UmVjdCwgbW9kZWxW
aWV3TWF0cml4LCBwcm9ncmFtLmdldCgpLCBHTF9MSU5FX0xPT1AsIGNvbG9yLmhhc0FscGhhKCkp
OworICAgIGRyYXdRdWFkKHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgcHJvZ3JhbS5nZXQo
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUCwgY29sb3IuaGFzQWxwaGEoKSk7CiB9CiAK
IHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3UmVwYWludENvdW50ZXIoaW50IHZhbHVlLCBpbnQg
cG9pbnRTaXplLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCkKQEAgLTQwNiw3ICszNTksOCBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwg
Y29uc3QgRmxvYXRSZWN0JgogICAgIGRyYXdUZXh0dXJlKHRleHR1cmVHTC5pZCgpLCB0ZXh0dXJl
R0wuaXNPcGFxdWUoKSA/IDAgOiBTdXBwb3J0c0JsZW5kaW5nLCB0ZXh0dXJlR0wuc2l6ZSgpLCB0
YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHksIG1hc2ssIGV4cG9zZWRFZGdlcyk7CiB9CiAKLSNp
ZiBkZWZpbmVkKEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSkKKyNpZiBPUyhEQVJXSU4pCisvLyBU
aGlzIGlzIHNwZWNpZmljIHRvIHRoZSBNYWMgaW1wbGVtZW50YXRpb24gb2YgR3JhcGhpY3NTdXJm
YWNlLiBJT1N1cmZhY2UgcmVxdWlyZXMgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCIHRvIGJlIHVz
ZWQuCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVSZWN0YW5nbGVBUkIodWludDMy
X3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25z
dCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2Rl
bFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0
dXJlKQogewogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbTsK
QEAgLTQxNCwzNiArMzY4LDM2IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVJl
Y3RhbmdsZUFSQih1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uCiAgICAgICAgIHBy
b2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIu
Z2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdE9wYWNpdHlB
bmRNYXNrKTsKICAgICBlbHNlCiAgICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRh
KCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6UmVjdFNpbXBsZSk7Ci0gICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShw
cm9ncmFtLT5pZCgpKSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQo
KSk7CiAKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0
ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsK
LSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIHRleHR1
cmUpKTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVyZUxvY2F0
aW9uKCksIDApKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJv
Z3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgdGV4dHVyZSk7CisgICAgbV9jb250ZXh0M0QtPnVu
aWZvcm0xaShwcm9ncmFtLT5zb3VyY2VUZXh0dXJlTG9jYXRpb24oKSwgMCk7CiAKLSAgICBHTF9D
TUQoZ2xVbmlmb3JtMWYocHJvZ3JhbS0+ZmxpcExvY2F0aW9uKCksICEhKGZsYWdzICYgU2hvdWxk
RmxpcFRleHR1cmUpKSk7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTJmKHByb2dyYW0tPnRleHR1cmVT
aXplTG9jYXRpb24oKSwgdGV4dHVyZVNpemUud2lkdGgoKSwgdGV4dHVyZVNpemUuaGVpZ2h0KCkp
KTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPmZsaXBMb2NhdGlvbigpLCAh
IShmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0y
Zihwcm9ncmFtLT50ZXh0dXJlU2l6ZUxvY2F0aW9uKCksIHRleHR1cmVTaXplLndpZHRoKCksIHRl
eHR1cmVTaXplLmhlaWdodCgpKTsKIAogICAgIGlmIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSkpCi0g
ICAgICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwgb3Bh
Y2l0eSkpOworICAgICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPm9wYWNpdHlM
b2NhdGlvbigpLCBvcGFjaXR5KTsKIAogICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVy
ZS0+aXNWYWxpZCgpICYmIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9y
bUxvY2F0aW9uKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSkpIHsKICAgICAgICAgY29u
c3QgQml0bWFwVGV4dHVyZUdMKiBtYXNrVGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0
bWFwVGV4dHVyZUdMKj4obWFza1RleHR1cmUpOwotICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0
dXJlKEdMX1RFWFRVUkUxKSk7Ci0gICAgICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIG1hc2tUZXh0dXJlR0wtPmlkKCkpKTsKLSAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFp
KHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSwgMSkpOwotICAgICAgICBHTF9DTUQoZ2xB
Y3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSk7CisgICAgICAgIG1fY29udGV4dDNELT5hY3RpdmVU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSk7CisgICAgICAgIG1fY29udGV4dDNE
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbWFza1RleHR1cmVH
TC0+aWQoKSk7CisgICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+bWFza1Rl
eHR1cmVMb2NhdGlvbigpLCAxKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKICAgICB9CiAKICAgICBib29sIG5lZWRzQmxl
bmRpbmcgPSAoZmxhZ3MgJiBTdXBwb3J0c0JsZW5kaW5nKSB8fCBvcGFjaXR5IDwgMC45OSB8fCBt
YXNrVGV4dHVyZTsKLSAgICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHBy
b2dyYW0uZ2V0KCksIEdMX1RSSUFOR0xFX0ZBTiwgbmVlZHNCbGVuZGluZyk7CisgICAgZHJhd1F1
YWQodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdldCgpLCBHcmFwaGljc0Nv
bnRleHQzRDo6VFJJQU5HTEVfRkFOLCBuZWVkc0JsZW5kaW5nKTsKIH0KLSNlbmRpZiAvLyBkZWZp
bmVkKEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSkgCisjZW5kaWYgLy8gT1MoREFSV0lOKQogCiB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgRmxhZ3Mg
ZmxhZ3MsIGNvbnN0IEludFNpemUmIC8qIHRleHR1cmVTaXplICovLCBjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgs
IGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlLCB1bnNpZ25l
ZCBleHBvc2VkRWRnZXMpCiB7Ci0gICAgYm9vbCBuZWVkc0FudGlsaWFpbmcgPSBtX2VuYWJsZUVk
Z2VEaXN0YW5jZUFudGlhbGlhc2luZyAmJiAhbW9kZWxWaWV3TWF0cml4LmlzSW50ZWdlclRyYW5z
bGF0aW9uKCk7Ci0gICAgaWYgKG5lZWRzQW50aWxpYWluZyAmJiBkcmF3VGV4dHVyZVdpdGhBbnRp
YWxpYXNpbmcodGV4dHVyZSwgZmxhZ3MsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3Bh
Y2l0eSwgbWFza1RleHR1cmUsIGV4cG9zZWRFZGdlcykpCisgICAgYm9vbCBuZWVkc0FudGlhbGlh
aW5nID0gbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcgJiYgIW1vZGVsVmlld01hdHJp
eC5pc0ludGVnZXJUcmFuc2xhdGlvbigpOworICAgIGlmIChuZWVkc0FudGlhbGlhaW5nICYmIGRy
YXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh0ZXh0dXJlLCBmbGFncywgdGFyZ2V0UmVjdCwgbW9k
ZWxWaWV3TWF0cml4LCBvcGFjaXR5LCBtYXNrVGV4dHVyZSwgZXhwb3NlZEVkZ2VzKSkKICAgICAg
ICByZXR1cm47CiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dy
YW07CkBAIC00NTEsMTUgKzQwNSwxNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1
cmUodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmCiAgICAgICAg
IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3BhY2l0eUFu
ZE1hc2spOwogICAgIGVsc2UKICAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEo
KS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpTaW1wbGUpOwotICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3Jh
bS0+aWQoKSkpOworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOwog
CiAgICAgZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKHByb2dyYW0uZ2V0KCksIHRleHR1cmUs
IGZsYWdzLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0dXJl
KTsKIH0KIAotc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZpZXdwb3J0TWF0cml4KCkKK3N0
YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2aWV3cG9ydE1hdHJpeChHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dDNEKQogewotICAgIEdMaW50IHZpZXdwb3J0WzRdOwotICAgIEdMX0NNRChnbEdl
dEludGVnZXJ2KEdMX1ZJRVdQT1JULCB2aWV3cG9ydCkpOworICAgIEdDM0RpbnQgdmlld3BvcnRb
NF07CisgICAgY29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6VklFV1BP
UlQsIHZpZXdwb3J0KTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKICAgICBt
YXRyaXgudHJhbnNsYXRlM2Qodmlld3BvcnRbMF0sIHZpZXdwb3J0WzFdLCAwKTsKQEAgLTU1Niw3
ICs1MTAsNyBAQCBib29sIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFz
aW5nKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLAogICAgIC8vIGFudGlhbGlhc2luZy4g
Tm90ZSBoZXJlIHRoYXQgd2UgYXJlIGFsc28gaW5jbHVkaW5nIHRoZSB2aWV3cG9ydCBtYXRyaXgg
KHdoaWNoCiAgICAgLy8gdHJhbnNsYXRlcyBmcm9tIG5vcm1hbGl6ZWQgZGV2aWNlIGNvb3JkaW5h
dGVzIHRvIHNjcmVlbiBjb29yZGluYXRlcyksIGJlY2F1c2UgdGhlc2UKICAgICAvLyB2YWx1ZXMg
YXJlIGNvbnN1bWVkIGluIHRoZSBmcmFnbWVudCBzaGFkZXIsIHdoaWNoIHdvcmtzIGluIHNjcmVl
biBjb29yZGluYXRlcy4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW5TcGFjZVRyYW5z
Zm9ybSA9IHZpZXdwb3J0TWF0cml4KCkubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0
YSgpLnByb2plY3Rpb25NYXRyaXgpKS5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgpLnRvMmRUcmFu
c2Zvcm0oKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW5TcGFjZVRyYW5zZm9ybSA9
IHZpZXdwb3J0TWF0cml4KG1fY29udGV4dDNELmdldCgpKS5tdWx0aXBseShUcmFuc2Zvcm1hdGlv
bk1hdHJpeChkYXRhKCkucHJvamVjdGlvbk1hdHJpeCkpLm11bHRpcGx5KG1vZGVsVmlld01hdHJp
eCkudG8yZFRyYW5zZm9ybSgpOwogICAgIGlmICghc2NyZWVuU3BhY2VUcmFuc2Zvcm0uaXNJbnZl
cnRpYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBGbG9hdFF1YWQgcXVhZEluU2Ny
ZWVuU3BhY2UgPSBzY3JlZW5TcGFjZVRyYW5zZm9ybS5tYXBRdWFkKG9yaWdpbmFsVGFyZ2V0UmVj
dCk7CkBAIC01ODAsOCArNTM0LDggQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJl
V2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywKICAgICBxdWFk
VG9FZGdlQXJyYXkoaW5mbGF0ZVF1YWQocXVhZEluU2NyZWVuU3BhY2UuYm91bmRpbmdCb3goKSwg
IGluZmxhdGlvbkRpc3RhbmNlKSwgdGFyZ2V0UXVhZEVkZ2VzICsgMTIpOwogCiAgICAgUmVmUHRy
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrPiBwcm9ncmFtID0g
ZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmFudGlhbGlh
c2luZ05vTWFza1Byb2dyYW0oKTsKLSAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dyYW0tPmlk
KCkpKTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtM2Z2KHByb2dyYW0tPmV4cGFuZGVkUXVhZEVkZ2Vz
SW5TY3JlZW5TcGFjZUxvY2F0aW9uKCksIDgsIHRhcmdldFF1YWRFZGdlcykpOworICAgIG1fY29u
dGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOworICAgIG1fY29udGV4dDNELT51bmlm
b3JtM2Z2KHByb2dyYW0tPmV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uKCks
IDgsIHRhcmdldFF1YWRFZGdlcyk7CiAKICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0o
cHJvZ3JhbS5nZXQoKSwgdGV4dHVyZSwgZmxhZ3MsIERyYXdRdWFkKG9yaWdpbmFsVGFyZ2V0UmVj
dCwgZXhwYW5kZWRRdWFkSW5UZXh0dXJlQ29vcmRpbmF0ZXMpLCBtb2RlbFZpZXdNYXRyaXgsIG9w
YWNpdHksIDAgLyogbWFza1RleHR1cmUgKi8pOwogICAgIHJldHVybiB0cnVlOwpAQCAtNTg5LDI2
ICs1NDMsMjYgQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlV2l0aEFudGlhbGlh
c2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywKIAogdm9pZCBUZXh0dXJlTWFwcGVy
R0w6OmRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSogcHJvZ3JhbSwgdWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IERyYXdRdWFk
JiBxdWFkVG9EcmF3LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4
LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKIHsKLSAg
ICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIo
KSkpOwotICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKLSAgICBHTF9D
TUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlKSk7Ci0gICAgR0xfQ01EKGds
VW5pZm9ybTFpKHByb2dyYW0tPnNvdXJjZVRleHR1cmVMb2NhdGlvbigpLCAwKSk7CisgICAgbV9j
b250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigp
KTsKKyAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRTApOworICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgdGV4dHVyZSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFt
LT5zb3VyY2VUZXh0dXJlTG9jYXRpb24oKSwgMCk7CiAKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMWYo
cHJvZ3JhbS0+ZmxpcExvY2F0aW9uKCksICEhKGZsYWdzICYgU2hvdWxkRmxpcFRleHR1cmUpKSk7
CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5mbGlwTG9jYXRpb24oKSwgISEo
ZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVyZSkpOwogCiAgICAgaWYgKFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlv
bigpKSkKLSAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlv
bigpLCBvcGFjaXR5KSk7CisgICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+
b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpOwogCiAgICAgaWYgKG1hc2tUZXh0dXJlICYmIG1h
c2tUZXh0dXJlLT5pc1ZhbGlkKCkgJiYgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFs
aWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpKSkgewogICAg
ICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wqIG1hc2tUZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxj
b25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNrVGV4dHVyZSk7Ci0gICAgICAgIEdMX0NNRChnbEFj
dGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpKTsKLSAgICAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgbWFza1RleHR1cmVHTC0+aWQoKSkpOwotICAgICAgICBHTF9DTUQoZ2xV
bmlmb3JtMWkocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpLCAxKSk7Ci0gICAgICAgIEdM
X0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKKyAgICAgICAgbV9jb250ZXh0M0Qt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKKyAgICAgICAgbV9j
b250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtYXNr
VGV4dHVyZUdMLT5pZCgpKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFt
LT5tYXNrVGV4dHVyZUxvY2F0aW9uKCksIDEpOworICAgICAgICBtX2NvbnRleHQzRC0+YWN0aXZl
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwogICAgIH0KIAogICAgIGJvb2wg
bmVlZHNCbGVuZGluZyA9IChmbGFncyAmIFN1cHBvcnRzQmxlbmRpbmcpIHx8IG9wYWNpdHkgPCAw
Ljk5IHx8IG1hc2tUZXh0dXJlOwotICAgIGRyYXdRdWFkKHF1YWRUb0RyYXcsIG1vZGVsVmlld01h
dHJpeCwgcHJvZ3JhbSwgR0xfVFJJQU5HTEVfRkFOLCBuZWVkc0JsZW5kaW5nKTsKKyAgICBkcmF3
UXVhZChxdWFkVG9EcmF3LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0sIEdyYXBoaWNzQ29udGV4
dDNEOjpUUklBTkdMRV9GQU4sIG5lZWRzQmxlbmRpbmcpOwogfQogCiBib29sIEJpdG1hcFRleHR1
cmVHTDo6Y2FuUmV1c2VXaXRoKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSwgRmxhZ3MpCkBA
IC02MTksNyArNTczLDcgQEAgYm9vbCBCaXRtYXBUZXh0dXJlR0w6OmNhblJldXNlV2l0aChjb25z
dCBJbnRTaXplJiBjb250ZW50c1NpemUsIEZsYWdzKQogI2lmIE9TKERBUldJTikKICNkZWZpbmUg
REVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUgR0xfVU5TSUdORURfSU5UXzhfOF84
XzhfUkVWCiAjZWxzZQotI2RlZmluZSBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQ
RSBHTF9VTlNJR05FRF9CWVRFCisjZGVmaW5lIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZF
Ul9UWVBFIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCiAjZW5kaWYKIAogc3RhdGlj
IGJvb2wgZHJpdmVyU3VwcG9ydHNTdWJJbWFnZSgpCkBAIC02MzQsMzAgKzU4OCwzMSBAQCBzdGF0
aWMgYm9vbCBkcml2ZXJTdXBwb3J0c1N1YkltYWdlKCkKIAogdm9pZCBCaXRtYXBUZXh0dXJlR0w6
OmRpZFJlc2V0KCkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0
dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOwogICAgIGlmICghbV9pZCkKLSAgICAgICAg
R0xfQ01EKGdsR2VuVGV4dHVyZXMoMSwgJm1faWQpKTsKLQorICAgICAgICBtX2lkID0gY29udGV4
dDNELT5jcmVhdGVUZXh0dXJlKCk7CiAgICAgbV9zaG91bGRDbGVhciA9IHRydWU7CiAgICAgaWYg
KG1fdGV4dHVyZVNpemUgPT0gY29udGVudFNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
bV90ZXh0dXJlU2l6ZSA9IGNvbnRlbnRTaXplKCk7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgbV9pZCkpOwotICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpKTsKLSAgICBHTF9DTUQo
Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xf
TElORUFSKSk7Ci0gICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSkpOwotICAgIEdMX0NNRChnbFRleFBhcmFt
ZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0Up
KTsKLSAgICBHTF9DTUQoZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIG1f
dGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwg
REVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIDApKTsKKyAgICBjb250ZXh0M0Qt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2lkKTsKKyAgICBj
b250ZXh0M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5FQVIpOworICAgIGNvbnRleHQzRC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgY29udGV4dDNELT50ZXhQYXJhbWV0ZXJpKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQ
X1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBjb250ZXh0M0QtPnRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwor
ICAgIGNvbnRleHQzRC0+dGV4SW1hZ2UyRERpcmVjdChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwg
bV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIERFRkFV
TFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAwKTsKIH0KIAogCiB2b2lkIEJpdG1hcFRl
eHR1cmVHTDo6dXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYg
dGFyZ2V0UmVjdCwgY29uc3QgSW50UG9pbnQmIHNvdXJjZU9mZnNldCwgaW50IGJ5dGVzUGVyTGlu
ZSkKIHsKLSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKSk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhp
Y3NDb250ZXh0M0QoKTsKKyAgICBjb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBtX2lkKTsKIAogICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUGl4
ZWwgPSA0OwogICAgIGlmIChieXRlc1BlckxpbmUgPT0gdGFyZ2V0UmVjdC53aWR0aCgpICogYnl0
ZXNQZXJQaXhlbCAmJiBzb3VyY2VPZmZzZXQgPT0gSW50UG9pbnQ6Onplcm8oKSkgewotICAgICAg
ICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgp
LCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgp
LCBHTF9SR0JBLCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgKGNvbnN0IGNo
YXIqKWRhdGEpKTsKKyAgICAgICAgY29udGV4dDNELT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRh
cmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29uc3QgY2hhciop
ZGF0YSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTY3NSwxOSArNjMwLDE5IEBAIHZv
aWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25z
dCBJbnRSZWN0JiB0YXJnZXRSZWN0CiAgICAgICAgICAgICBkc3QgKz0gdGFyZ2V0Qnl0ZXNQZXJM
aW5lOwogICAgICAgICB9CiAKLSAgICAgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhU
VVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lk
dGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgR0xfUkdCQSwgREVGQVVMVF9URVhUVVJFX1BJWEVM
X1RSQU5TRkVSX1RZUEUsIHRlbXBvcmFyeURhdGEuZGF0YSgpKSk7CisgICAgICAgIGNvbnRleHQz
RC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdGFyZ2V0
UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3Qu
aGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBERUZBVUxUX1RFWFRVUkVfUElYRUxf
VFJBTlNGRVJfVFlQRSwgdGVtcG9yYXJ5RGF0YS5kYXRhKCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAjaWYgIWRlZmluZWQoVEVYTUFQX09QRU5HTF9FU18yKQogICAgIC8vIFVzZSB0aGUg
T3BlbkdMIHN1Yi1pbWFnZSBleHRlbnNpb24sIG5vdyB0aGF0IHdlIGtub3cgaXQncyBhdmFpbGFi
bGUuCi0gICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIGJ5dGVz
UGVyTGluZSAvIGJ5dGVzUGVyUGl4ZWwpKTsKLSAgICBHTF9DTUQoZ2xQaXhlbFN0b3JlaShHTF9V
TlBBQ0tfU0tJUF9ST1dTLCBzb3VyY2VPZmZzZXQueSgpKSk7Ci0gICAgR0xfQ01EKGdsUGl4ZWxT
dG9yZWkoR0xfVU5QQUNLX1NLSVBfUElYRUxTLCBzb3VyY2VPZmZzZXQueCgpKSk7Ci0gICAgR0xf
Q01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFy
Z2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgR0xf
UkdCQSwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIChjb25zdCBjaGFyKilk
YXRhKSk7Ci0gICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIDAp
KTsKLSAgICBHTF9DTUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCAwKSk7Ci0g
ICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUElYRUxTLCAwKSk7CisgICAg
Y29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgYnl0ZXNQZXJMaW5l
IC8gYnl0ZXNQZXJQaXhlbCk7CisgICAgY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBBQ0tf
U0tJUF9ST1dTLCBzb3VyY2VPZmZzZXQueSgpKTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVp
KEdMX1VOUEFDS19TS0lQX1BJWEVMUywgc291cmNlT2Zmc2V0LngoKSk7CisgICAgY29udGV4dDNE
LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB0YXJnZXRS
ZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5o
ZWlnaHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9U
UkFOU0ZFUl9UWVBFLCAoY29uc3QgY2hhciopZGF0YSk7CisgICAgY29udGV4dDNELT5waXhlbFN0
b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgMCk7CisgICAgY29udGV4dDNELT5waXhlbFN0b3Jl
aShHTF9VTlBBQ0tfU0tJUF9ST1dTLCAwKTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdM
X1VOUEFDS19TS0lQX1BJWEVMUywgMCk7CiAjZW5kaWYKIH0KIApAQCAtNzEyLDE5ICs2NjcsMTkg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdGaWx0ZXJlZChjb25zdCBCaXRtYXBUZXh0dXJl
JiBzb3VyY2VUZXh0dXJlLCBjb25zdCBCaXQKIAogICAgIHByb2dyYW0tPnByZXBhcmUoZmlsdGVy
LCBwYXNzLCBzb3VyY2VUZXh0dXJlLmNvbnRlbnRTaXplKCksIHN0YXRpY19jYXN0PGNvbnN0IEJp
dG1hcFRleHR1cmVHTCY+KGNvbnRlbnRUZXh0dXJlKS5pZCgpKTsKIAotICAgIEdMX0NNRChnbEVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xf
Q01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSkp
OwotICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKLSAgICBHTF9DTUQo
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0
dXJlR0wmPihzb3VyY2VUZXh0dXJlKS5pZCgpKSk7Ci0gICAgZ2xVbmlmb3JtMWkocHJvZ3JhbS0+
dGV4dHVyZVVuaWZvcm0oKSwgMCk7Ci0gICAgY29uc3QgR0xmbG9hdCB0YXJnZXRWZXJ0aWNlc1td
ID0gey0xLCAtMSwgMSwgLTEsIDEsIDEsIC0xLCAxfTsKLSAgICBjb25zdCBHTGZsb2F0IHNvdXJj
ZVZlcnRpY2VzW10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07Ci0gICAgR0xfQ01EKGdsVmVy
dGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR0xfRkxPQVQsIEdM
X0ZBTFNFLCAwLCB0YXJnZXRWZXJ0aWNlcykpOwotICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBv
aW50ZXIocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAw
LCBzb3VyY2VWZXJ0aWNlcykpOwotICAgIEdMX0NNRChnbERpc2FibGUoR0xfQkxFTkQpKTsKLSAg
ICBHTF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpOwotICAgIEdMX0NN
RChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwot
ICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT50ZXhDb29yZEF0
dHJpYigpKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dy
YW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmli
QXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmFjdGl2
ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKyAgICBtX2NvbnRleHQzRC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHN0YXRpY19jYXN0PGNv
bnN0IEJpdG1hcFRleHR1cmVHTCY+KHNvdXJjZVRleHR1cmUpLmlkKCkpOworICAgIG1fY29udGV4
dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+dGV4dHVyZVVuaWZvcm0oKSwgMCk7CisgICAgY29uc3Qg
R0MzRGZsb2F0IHRhcmdldFZlcnRpY2VzW10gPSB7LTEsIC0xLCAxLCAtMSwgMSwgMSwgLTEsIDF9
OworICAgIGNvbnN0IEdDM0RmbG9hdCBzb3VyY2VWZXJ0aWNlc1tdID0gezAsIDAsIDEsIDAsIDEs
IDEsIDAsIDF9OworICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0t
PnZlcnRleEF0dHJpYigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBH
QzNEaW50cHRyKHRhcmdldFZlcnRpY2VzKSk7CisgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJp
YlBvaW50ZXIocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cihzb3VyY2VWZXJ0aWNlcykpOworICAgIG1fY29u
dGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgbV9jb250ZXh0
M0QtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7Cisg
ICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhB
dHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9n
cmFtLT50ZXhDb29yZEF0dHJpYigpKTsKIH0KIAogUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBC
aXRtYXBUZXh0dXJlR0w6OmFwcGx5RmlsdGVycyhjb25zdCBCaXRtYXBUZXh0dXJlJiBjb250ZW50
VGV4dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKQEAgLTc2NSwxNyArNzIw
LDE4IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjppbml0aWFsaXplU3RlbmNpbCgpCiB7CiAgICAg
aWYgKG1fcmJvKQogICAgICAgICByZXR1cm47Ci0gICAgR0xfQ01EKGdsR2VuUmVuZGVyYnVmZmVy
cygxLCAmbV9yYm8pKTsKLSAgICBHTF9DTUQoZ2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJV
RkZFUiwgbV9yYm8pKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0
dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOworICAgIG1fcmJvID0gY29udGV4dDNELT5j
cmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICBjb250ZXh0M0QtPmJpbmRSZW5kZXJidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9yYm8pOwogI2lmZGVmIFRFWE1BUF9PUEVO
R0xfRVNfMgotICAgIEdMX0NNRChnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVS
LCBHTF9TVEVOQ0lMX0lOREVYOCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXpl
LmhlaWdodCgpKSk7CisgICAgY29udGV4dDNELT5yZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVY
OCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsKICNlbHNl
Ci0gICAgR0xfQ01EKGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTF9SRU5ERVJCVUZGRVIsIEdMX0RF
UFRIX1NURU5DSUwsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQo
KSkpOworICAgIGNvbnRleHQzRC0+cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCwgbV90ZXh0
dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsKICNlbmRpZgotICAgIEdM
X0NNRChnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCAwKSk7Ci0gICAgR0xfQ01E
KGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRU
QUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX3JibykpOwotICAgIEdMX0NNRChnbENsZWFyU3Rl
bmNpbCgwKSk7Ci0gICAgR0xfQ01EKGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJfQklUKSk7Cisg
ICAgY29udGV4dDNELT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVIsIDApOworICAgIGNvbnRleHQzRC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRB
Q0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX3Jibyk7CisgICAgY29u
dGV4dDNELT5jbGVhclN0ZW5jaWwoMCk7CisgICAgY29udGV4dDNELT5jbGVhcihHcmFwaGljc0Nv
bnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKTsKIH0KIAogdm9pZCBCaXRtYXBUZXh0dXJlR0w6
OmNsZWFySWZOZWVkZWQoKQpAQCAtNzgzLDEwICs3MzksMTEgQEAgdm9pZCBCaXRtYXBUZXh0dXJl
R0w6OmNsZWFySWZOZWVkZWQoKQogICAgIGlmICghbV9zaG91bGRDbGVhcikKICAgICAgICAgcmV0
dXJuOwogCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBl
ci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKICAgICBtX2NsaXBTdGFjay5pbml0KEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgbV90ZXh0dXJlU2l6ZSkpOwotICAgIG1fY2xpcFN0YWNrLmFwcGx5KCk7
Ci0gICAgR0xfQ01EKGdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKSk7Ci0gICAgR0xfQ01EKGdsQ2xl
YXIoR0xfQ09MT1JfQlVGRkVSX0JJVCkpOworICAgIG1fY2xpcFN0YWNrLmFwcGx5KGNvbnRleHQz
RCk7CisgICAgY29udGV4dDNELT5jbGVhckNvbG9yKDAsIDAsIDAsIDApOworICAgIGNvbnRleHQz
RC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOwogICAgIG1fc2hv
dWxkQ2xlYXIgPSBmYWxzZTsKIH0KIApAQCAtNzk1LDMzICs3NTIsMzYgQEAgdm9pZCBCaXRtYXBU
ZXh0dXJlR0w6OmNyZWF0ZUZib0lmTmVlZGVkKCkKICAgICBpZiAobV9mYm8pCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEdMX0NNRChnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pKTsKLSAgICBH
TF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKSk7Ci0gICAgR0xf
Q01EKGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFD
SE1FTlQwLCBHTF9URVhUVVJFXzJELCBpZCgpLCAwKSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBt
X2ZibyA9IGNvbnRleHQzRC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBjb250ZXh0M0QtPmJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAg
ICBjb250ZXh0M0QtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgaWQoKSwgMCk7CiAgICAgbV9zaG91bGRDbGVhciA9IHRydWU7
CiB9CiAKIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpiaW5kKCkKIHsKLSAgICBHTF9DTUQoZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCAwKSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBjb250ZXh0
M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKICAgICBj
cmVhdGVGYm9JZk5lZWRlZCgpOwotICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFN
RUJVRkZFUiwgbV9mYm8pKTsKLSAgICBHTF9DTUQoZ2xWaWV3cG9ydCgwLCAwLCBtX3RleHR1cmVT
aXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKTsKKyAgICBjb250ZXh0M0QtPmJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAg
ICBjb250ZXh0M0QtPnZpZXdwb3J0KDAsIDAsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0
dXJlU2l6ZS5oZWlnaHQoKSk7CiAgICAgY2xlYXJJZk5lZWRlZCgpOwogICAgIG1fdGV4dHVyZU1h
cHBlci0+ZGF0YSgpLnByb2plY3Rpb25NYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KG1f
dGV4dHVyZVNpemUsIHRydWUgLyogbWlycm9yZWQgKi8pOwotICAgIG1fY2xpcFN0YWNrLmFwcGx5
KCk7CisgICAgbV9jbGlwU3RhY2suYXBwbHkoY29udGV4dDNEKTsKIH0KIAogQml0bWFwVGV4dHVy
ZUdMOjp+Qml0bWFwVGV4dHVyZUdMKCkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOwogICAgIGlmIChtX2lk
KQotICAgICAgICBHTF9DTUQoZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9pZCkpOworICAgICAgICBj
b250ZXh0M0QtPmRlbGV0ZVRleHR1cmUobV9pZCk7CiAKICAgICBpZiAobV9mYm8pCi0gICAgICAg
IEdMX0NNRChnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pKTsKKyAgICAgICAgY29udGV4
dDNELT5kZWxldGVGcmFtZWJ1ZmZlcihtX2Zibyk7CiAKICAgICBpZiAobV9yYm8pCi0gICAgICAg
IEdMX0NNRChnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fcmJvKSk7CisgICAgICAgIGNvbnRl
eHQzRC0+ZGVsZXRlUmVuZGVyYnVmZmVyKG1fcmJvKTsKIH0KIAogYm9vbCBCaXRtYXBUZXh0dXJl
R0w6OmlzVmFsaWQoKSBjb25zdApAQCAtODQxLDExICs4MDEsMTEgQEAgVGV4dHVyZU1hcHBlckdM
Ojp+VGV4dHVyZU1hcHBlckdMKCkKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJpbmREZWZhdWx0
U3VyZmFjZSgpCiB7Ci0gICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVS
LCBkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpKTsKKyAgICBtX2NvbnRleHQzRC0+YmluZEZyYW1l
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgZGF0YSgpLnRhcmdldEZyYW1l
QnVmZmVyKTsKICAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZShkYXRhKCkudmlld3BvcnRbMl0sIGRh
dGEoKS52aWV3cG9ydFszXSk7CiAgICAgZGF0YSgpLnByb2plY3Rpb25NYXRyaXggPSBjcmVhdGVQ
cm9qZWN0aW9uTWF0cml4KHZpZXdwb3J0U2l6ZSwgZGF0YSgpLlBhaW50RmxhZ3MgJiBQYWludGlu
Z01pcnJvcmVkKTsKLSAgICBHTF9DTUQoZ2xWaWV3cG9ydChkYXRhKCkudmlld3BvcnRbMF0sIGRh
dGEoKS52aWV3cG9ydFsxXSwgdmlld3BvcnRTaXplLndpZHRoKCksIHZpZXdwb3J0U2l6ZS5oZWln
aHQoKSkpOwotICAgIG1fY2xpcFN0YWNrLmFwcGx5KCk7CisgICAgbV9jb250ZXh0M0QtPnZpZXdw
b3J0KGRhdGEoKS52aWV3cG9ydFswXSwgZGF0YSgpLnZpZXdwb3J0WzFdLCB2aWV3cG9ydFNpemUu
d2lkdGgoKSwgdmlld3BvcnRTaXplLmhlaWdodCgpKTsKKyAgICBtX2NsaXBTdGFjay5hcHBseSht
X2NvbnRleHQzRC5nZXQoKSk7CiAgICAgZGF0YSgpLmN1cnJlbnRTdXJmYWNlLmNsZWFyKCk7CiB9
CiAKQEAgLTg3NSw3ICs4MzUsNyBAQCBib29sIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5TY2lzc29y
Q2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBjbGlwU3RhY2soKS5jdXJyZW50KCkuc2Npc3NvckJveC5pbnRl
cnNlY3QocmVjdCk7Ci0gICAgY2xpcFN0YWNrKCkuYXBwbHkoKTsKKyAgICBjbGlwU3RhY2soKS5h
cHBseShtX2NvbnRleHQzRC5nZXQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTg4OSwx
MCArODQ5LDEwIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAKICAgICBSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6U2ltcGxlKTsKIAotICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+
aWQoKSkpOwotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZl
cnRleEF0dHJpYigpKSk7Ci0gICAgY29uc3QgR0xmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEs
IDAsIDEsIDEsIDAsIDF9OwotICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3Jh
bS0+dmVydGV4QXR0cmliKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5pdFJlY3QpKTsK
KyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKTsKKyAgICBtX2NvbnRl
eHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOwor
ICAgIGNvbnN0IEdDM0RmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9
OworICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0
dHJpYigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRy
KHVuaXRSZWN0KSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBUcmFuc2Zv
cm1hdGlvbk1hdHJpeChkYXRhKCkucHJvamVjdGlvbk1hdHJpeCkKICAgICAgICAgICAgIC5tdWx0
aXBseShtb2RlbFZpZXdNYXRyaXgpCkBAIC05MDEsMTQgKzg2MSwxNCBAQCB2b2lkIFRleHR1cmVN
YXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdN
YXRyaXgsIGNvbgogICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCiAgICAgICAgICAgICAgICAg
dGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCAwLCAxKSk7CiAKLSAgICBjb25zdCBHTGZs
b2F0IG00W10gPSB7CisgICAgY29uc3QgR0MzRGZsb2F0IG00W10gPSB7CiAgICAgICAgIG1hdHJp
eC5tMTEoKSwgbWF0cml4Lm0xMigpLCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKICAgICAg
ICAgbWF0cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgp
LAogICAgICAgICBtYXRyaXgubTMxKCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRy
aXgubTM0KCksCiAgICAgICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQz
KCksIG1hdHJpeC5tNDQoKQogICAgIH07CiAKLSAgICBjb25zdCBHTGZsb2F0IG00YWxsW10gPSB7
CisgICAgY29uc3QgR0MzRGZsb2F0IG00YWxsW10gPSB7CiAgICAgICAgIDIsIDAsIDAsIDAsCiAg
ICAgICAgIDAsIDIsIDAsIDAsCiAgICAgICAgIDAsIDAsIDEsIDAsCkBAIC05MTcsNDMgKzg3Nyw0
MiBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogCiAgICAgaW50JiBzdGVuY2lsSW5kZXggPSBj
bGlwU3RhY2soKS5jdXJyZW50KCkuc3RlbmNpbEluZGV4OwogCi0gICAgR0xfQ01EKGdsRW5hYmxl
KEdMX1NURU5DSUxfVEVTVCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfVEVTVCk7CiAKICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgZG8gYW55
IGFjdHVhbCBkcmF3aW5nLgotICAgIEdMX0NNRChnbFN0ZW5jaWxGdW5jKEdMX05FVkVSLCBzdGVu
Y2lsSW5kZXgsIHN0ZW5jaWxJbmRleCkpOworICAgIG1fY29udGV4dDNELT5zdGVuY2lsRnVuYyhH
cmFwaGljc0NvbnRleHQzRDo6TkVWRVIsIHN0ZW5jaWxJbmRleCwgc3RlbmNpbEluZGV4KTsKIAog
ICAgIC8vIE9wZXJhdGUgb25seSBvbiB0aGUgc3RlbmNpbEluZGV4IGFuZCBhYm92ZS4KLSAgICBH
TF9DTUQoZ2xTdGVuY2lsTWFzaygweGZmICYgfihzdGVuY2lsSW5kZXggLSAxKSkpOworICAgIG1f
Y29udGV4dDNELT5zdGVuY2lsTWFzaygweGZmICYgfihzdGVuY2lsSW5kZXggLSAxKSk7CiAKICAg
ICAvLyBGaXJzdCBjbGVhciB0aGUgZW50aXJlIGJ1ZmZlciBhdCB0aGUgY3VycmVudCBpbmRleC4K
LSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCks
IDEsIEdMX0ZBTFNFLCBtNGFsbCkpOwotICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9aRVJPLCBH
TF9aRVJPLCBHTF9aRVJPKSk7Ci0gICAgR0xfQ01EKGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9G
QU4sIDAsIDQpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5t
YXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgY29uc3RfY2FzdDxHQzNEZmxvYXQqPihtNGFsbCkp
OworICAgIG1fY29udGV4dDNELT5zdGVuY2lsT3AoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdy
YXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTyk7CisgICAgbV9j
b250ZXh0M0QtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwg
NCk7CiAKICAgICAvLyBOb3cgYXBwbHkgdGhlIGN1cnJlbnQgaW5kZXggdG8gdGhlIG5ldyBxdWFk
LgotICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9SRVBMQUNFLCBHTF9SRVBMQUNFLCBHTF9SRVBM
QUNFKSk7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhMb2Nh
dGlvbigpLCAxLCBHTF9GQUxTRSwgbTQpKTsKLSAgICBHTF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RS
SUFOR0xFX0ZBTiwgMCwgNCkpOworICAgIG1fY29udGV4dDNELT5zdGVuY2lsT3AoR3JhcGhpY3ND
b250ZXh0M0Q6OlJFUExBQ0UsIEdyYXBoaWNzQ29udGV4dDNEOjpSRVBMQUNFLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkVQTEFDRSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm1NYXRyaXg0ZnYocHJv
Z3JhbS0+bWF0cml4TG9jYXRpb24oKSwgMSwgZmFsc2UsIGNvbnN0X2Nhc3Q8R0MzRGZsb2F0Kj4o
bTQpKTsKKyAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJ
QU5HTEVfRkFOLCAwLCA0KTsKIAogICAgIC8vIENsZWFyIHRoZSBzdGF0ZS4KLSAgICBHTF9DTUQo
Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAg
ICBHTF9DTUQoZ2xTdGVuY2lsTWFzaygwKSk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0
ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0Qt
PnN0ZW5jaWxNYXNrKDApOwogCiAgICAgLy8gSW5jcmVhc2Ugc3RlbmNpbEluZGV4IGFuZCBhcHBs
eSBzdGVuY2lsIHRlc3RpbmcuCiAgICAgc3RlbmNpbEluZGV4ICo9IDI7Ci0gICAgY2xpcFN0YWNr
KCkuYXBwbHkoKTsKKyAgICBjbGlwU3RhY2soKS5hcHBseShtX2NvbnRleHQzRC5nZXQoKSk7CiB9
CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjplbmRDbGlwKCkKIHsKICAgICBjbGlwU3RhY2soKS5w
b3AoKTsKLSAgICBjbGlwU3RhY2soKS5hcHBseSgpOworICAgIGNsaXBTdGFjaygpLmFwcGx5KG1f
Y29udGV4dDNELmdldCgpKTsKIH0KIAogUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJl
TWFwcGVyR0w6OmNyZWF0ZVRleHR1cmUoKQogewotICAgIEJpdG1hcFRleHR1cmVHTCogdGV4dHVy
ZSA9IG5ldyBCaXRtYXBUZXh0dXJlR0woKTsKLSAgICB0ZXh0dXJlLT5zZXRUZXh0dXJlTWFwcGVy
KHRoaXMpOworICAgIEJpdG1hcFRleHR1cmVHTCogdGV4dHVyZSA9IG5ldyBCaXRtYXBUZXh0dXJl
R0wodGhpcyk7CiAgICAgcmV0dXJuIGFkb3B0UmVmKHRleHR1cmUpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckdMLmgKaW5kZXggMDc2ZTY1ZjczNzc2MjYxZjBhM2I5M2JiODU3M2E1MDVkZTljMDE3MC4uNDY0
OWEwYjljMDNiNzZlMmZkNGZlNDFlZmUxMGU5M2Y0MTE1OGMyMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wu
aApAQCAtMjMsOCArMjMsOCBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAog
I2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAj
aW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjaW5jbHVkZSAi
VGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKQEAg
LTM4LDcgKzM4LDYgQEAgY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW07CiBjbGFzcyBU
ZXh0dXJlTWFwcGVyR0wgOiBwdWJsaWMgVGV4dHVyZU1hcHBlciB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlckdMPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0
cihuZXcgVGV4dHVyZU1hcHBlckdMKTsgfQotICAgIFRleHR1cmVNYXBwZXJHTCgpOwogICAgIHZp
cnR1YWwgflRleHR1cmVNYXBwZXJHTCgpOwogCiAgICAgZW51bSBGbGFnIHsKQEAgLTU0LDcgKzUz
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBU
ZXh0dXJlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBm
bG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQg
ZXhwb3NlZEVkZ2VzKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUodWlu
dDMyX3QgdGV4dHVyZSwgRmxhZ3MsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBG
bG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZp
ZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJl
LCB1bnNpZ25lZCBleHBvc2VkRWRnZXMgPSBBbGxFZGdlcyk7CiAKLSNpZiBkZWZpbmVkKEdMX0FS
Ql90ZXh0dXJlX3JlY3RhbmdsZSkKKyNpZiBPUyhEQVJXSU4pCiAgICAgdmlydHVhbCB2b2lkIGRy
YXdUZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRT
aXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBC
aXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7CiAjZW5kaWYKIApAQCAtNjYsNiArNjUsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBJbnRTaXplIG1heFRleHR1cmVTaXplKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gSW50U2l6ZSgyMDAwLCAyMDAwKTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBH
cmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCgpIE9WRVJSSURFIHsgcmV0dXJuIG1fY29u
dGV4dDsgfQorICAgIGlubGluZSBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0Qo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQzRC5nZXQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBz
ZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KSBPVkVSUklERSB7IG1f
Y29udGV4dCA9IGNvbnRleHQ7IH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTc1LDcg
Kzc1LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFz
aW5nKGJvb2wgZW5hYmxlZCkgeyBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyA9IGVu
YWJsZWQ7IH0KIAogcHJpdmF0ZToKLQogICAgIHN0cnVjdCBDbGlwU3RhdGUgewogICAgICAgICBJ
bnRSZWN0IHNjaXNzb3JCb3g7CiAgICAgICAgIGludCBzdGVuY2lsSW5kZXg7CkBAIC04OSw3ICs4
OCw3IEBAIHByaXZhdGU6CiAgICAgcHVibGljOgogICAgICAgICB2b2lkIHB1c2goKTsKICAgICAg
ICAgdm9pZCBwb3AoKTsKLSAgICAgICAgdm9pZCBhcHBseSgpOworICAgICAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dDNEKik7CiAgICAgICAgIGlubGluZSBDbGlwU3RhdGUmIGN1cnJlbnQo
KSB7IHJldHVybiBjbGlwU3RhdGU7IH0KICAgICAgICAgdm9pZCBpbml0KGNvbnN0IEludFJlY3Qm
KTsKIApAQCAtMTA5LDE2ICsxMDgsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgRmxvYXRRdWFkIHRh
cmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmU7CiAgICAgfTsKIAorICAgIFRleHR1cmVNYXBwZXJH
TCgpOworCiAgICAgYm9vbCBkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4
dHVyZSwgRmxhZ3MsIGNvbnN0IEZsb2F0UmVjdCYgb3JpZ2luYWxUYXJnZXRSZWN0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25z
dCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKTsKICAg
ICB2b2lkIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbSosIHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0
IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKLSAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IERy
YXdRdWFkJiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0qLCBHTGVudW0gZHJhd2luZ01vZGUsIGJvb2wgbmVlZHNC
bGVuZGluZyk7CisgICAgdm9pZCBkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtKiwgR0MzRGVudW0gZHJhd2luZ01vZGUsIGJvb2wgbmVlZHNCbGVuZGluZyk7CiAKICAgICBi
b29sIGJlZ2luU2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBG
bG9hdFJlY3QmKTsKICAgICB2b2lkIGJpbmREZWZhdWx0U3VyZmFjZSgpOwogICAgIENsaXBTdGFj
ayYgY2xpcFN0YWNrKCk7CiAgICAgaW5saW5lIFRleHR1cmVNYXBwZXJHTERhdGEmIGRhdGEoKSB7
IHJldHVybiAqbV9kYXRhOyB9Ci0gICAgVGV4dHVyZU1hcHBlckdMRGF0YSogbV9kYXRhOwogICAg
IEdyYXBoaWNzQ29udGV4dCogbV9jb250ZXh0OworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gbV9jb250ZXh0M0Q7CisgICAgVGV4dHVyZU1hcHBlckdMRGF0YSogbV9kYXRhOwogICAgIENs
aXBTdGFjayBtX2NsaXBTdGFjazsKICAgICBib29sIG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFs
aWFzaW5nOwogCkBAIC0xMzUsNyArMTM3LDcgQEAgcHVibGljOgogICAgIHZvaWQgaW5pdGlhbGl6
ZVN0ZW5jaWwoKTsKICAgICB+Qml0bWFwVGV4dHVyZUdMKCk7CiAgICAgdmlydHVhbCB1aW50MzJf
dCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLSAgICB1aW50MzJfdCB0ZXh0dXJlVGFyZ2V0
KCkgY29uc3QgeyByZXR1cm4gR0xfVEVYVFVSRV8yRDsgfQorICAgIHVpbnQzMl90IHRleHR1cmVU
YXJnZXQoKSBjb25zdCB7IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDsgfQog
ICAgIEludFNpemUgdGV4dHVyZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVTaXplOyB9
CiAgICAgdm9pZCBzZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXJHTCogdGV4bWFwKSB7IG1f
dGV4dHVyZU1hcHBlciA9IHRleG1hcDsgfQogICAgIHZvaWQgdXBkYXRlQ29udGVudHMoSW1hZ2Uq
LCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmKTsKQEAgLTE0NywyMCArMTQ5LDIyIEBA
IHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIEdMdWludCBtX2lkOworICAgIFBsYXRm
b3JtM0RPYmplY3QgbV9pZDsKICAgICBJbnRTaXplIG1fdGV4dHVyZVNpemU7CiAgICAgSW50UmVj
dCBtX2RpcnR5UmVjdDsKLSAgICBHTHVpbnQgbV9mYm87Ci0gICAgR0x1aW50IG1fcmJvOworICAg
IFBsYXRmb3JtM0RPYmplY3QgbV9mYm87CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3JibzsKICAg
ICBib29sIG1fc2hvdWxkQ2xlYXI7Ci0gICAgVGV4dHVyZU1hcHBlckdMKiBtX3RleHR1cmVNYXBw
ZXI7CiAgICAgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2sgbV9jbGlwU3RhY2s7Ci0gICAgQml0
bWFwVGV4dHVyZUdMKCkKKyAgICBUZXh0dXJlTWFwcGVyR0wqIG1fdGV4dHVyZU1hcHBlcjsKKwor
ICAgIEJpdG1hcFRleHR1cmVHTCgpOworICAgIEJpdG1hcFRleHR1cmVHTChUZXh0dXJlTWFwcGVy
R0wqIHRleHR1cmVNYXBwZXIpCiAgICAgICAgIDogbV9pZCgwKQogICAgICAgICAsIG1fZmJvKDAp
CiAgICAgICAgICwgbV9yYm8oMCkKICAgICAgICAgLCBtX3Nob3VsZENsZWFyKHRydWUpCi0gICAg
ICAgICwgbV90ZXh0dXJlTWFwcGVyKDApCisgICAgICAgICwgbV90ZXh0dXJlTWFwcGVyKHRleHR1
cmVNYXBwZXIpCiAgICAgewogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlci5jcHAKaW5kZXggMGZiZGJlOTVjYWYxNjQ3MGRkMDYzMmYwNGMxNDRiODIwYjZlOGJi
My4uYTA2M2U2YjIyY2U5ZGE4NGFjYjFiNzlhZDZhZTQxODVlZjEyMjY3ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCkBAIC0zMCw2MiArMzAsNDkgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWZuZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgotI2RlZmlu
ZSBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9OUyBcCi0gICAgIiNkZWZpbmUgbG93cFxuI2RlZmlu
ZSBoaWdocFxuIgotI2RlZmluZSBPRVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lP
TgotI2Vsc2UKLSNkZWZpbmUgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlMKLSNkZWZpbmUgT0VT
Ml9GUkFHTUVOVF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT04gXAotICAgICJwcmVjaXNpb24gbWVk
aXVtcCBmbG9hdDsgXG4iCi0jZW5kaWYKLQotI2RlZmluZSBTVFJJTkdJRllfVkFMKHNyYy4uLikg
I3NyYwotI2RlZmluZSBWRVJURVhfU0hBREVSKHNyYy4uLikgT0VTMl9QUkVDSVNJT05fREVGSU5J
VElPTlNcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJJTkdJRllfVkFMKHNyYykK
LSNkZWZpbmUgRlJBR01FTlRfU0hBREVSKHNyYy4uLikgT0VTMl9QUkVDSVNJT05fREVGSU5JVElP
TlNcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9FUzJfRlJBR01FTlRfU0hBREVS
X0RFRkFVTFRfUFJFQ0lTSU9OXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJJ
TkdJRllfVkFMKHNyYykKKyNkZWZpbmUgU1RSSU5HSUZZKHNyYy4uLikgI3NyYwogCiBzdGF0aWMg
Y29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9Ci0gICAgRlJB
R01FTlRfU0hBREVSKAorICAgIFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAg
ZmxvYXQ7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwogICAgICAgICB1bmlm
b3JtIHNhbXBsZXIyRCBzX21hc2s7Ci0gICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNp
dHk7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOwotICAgICAg
ICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9tYXNrVGV4Q29vcmQ7CisgICAgICAgIHVuaWZvcm0gZmxv
YXQgdV9vcGFjaXR5OworICAgICAgICB2YXJ5aW5nIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKKyAg
ICAgICAgdmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOwogICAgICAgICB2b2lkIG1haW4odm9p
ZCkKICAgICAgICAgewotICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHNf
c291cmNlLCB2X3NvdXJjZVRleENvb3JkKTsKLSAgICAgICAgICAgIGxvd3AgdmVjNCBtYXNrQ29s
b3IgPSB0ZXh0dXJlMkQoc19tYXNrLCB2X21hc2tUZXhDb29yZCk7Ci0gICAgICAgICAgICBsb3dw
IGZsb2F0IGZyYWdtZW50QWxwaGEgPSB1X29wYWNpdHkgKiBtYXNrQ29sb3IuYTsKKyAgICAgICAg
ICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoc19zb3VyY2UsIHZfc291cmNlVGV4Q29vcmQpOwor
ICAgICAgICAgICAgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0dXJlMkQoc19tYXNrLCB2X21hc2tUZXhD
b29yZCk7CisgICAgICAgICAgICBmbG9hdCBmcmFnbWVudEFscGhhID0gdV9vcGFjaXR5ICogbWFz
a0NvbG9yLmE7CiAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIGZy
YWdtZW50QWxwaGEsIGNvbG9yLmEgKiBmcmFnbWVudEFscGhhKTsKICAgICAgICAgfQogICAgICk7
CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5QW5k
TWFzayA9Ci0gICAgRlJBR01FTlRfU0hBREVSKAorICAgIFNUUklOR0lGWSgKKyAgICAgICAgcHJl
Y2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX3Nv
dXJjZTsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfbWFzazsKLSAgICAgICAgdW5p
Zm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZf
c291cmNlVGV4Q29vcmQ7Ci0gICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X21hc2tUZXhDb29y
ZDsKKyAgICAgICAgdW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7CisgICAgICAgIHZhcnlpbmcgdmVj
MiB2X3NvdXJjZVRleENvb3JkOworICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7
CiAgICAgICAgIHZvaWQgbWFpbih2b2lkKQogICAgICAgICB7Ci0gICAgICAgICAgICBsb3dwIHZl
YzQgY29sb3IgPSB0ZXh0dXJlMkRSZWN0KHNfc291cmNlLCB2X3NvdXJjZVRleENvb3JkKTsKLSAg
ICAgICAgICAgIGxvd3AgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0dXJlMkRSZWN0KHNfbWFzaywgdl9t
YXNrVGV4Q29vcmQpOwotICAgICAgICAgICAgbG93cCBmbG9hdCBmcmFnbWVudEFscGhhID0gdV9v
cGFjaXR5ICogbWFza0NvbG9yLmE7CisgICAgICAgICAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJE
UmVjdChzX3NvdXJjZSwgdl9zb3VyY2VUZXhDb29yZCk7CisgICAgICAgICAgICB2ZWM0IG1hc2tD
b2xvciA9IHRleHR1cmUyRFJlY3Qoc19tYXNrLCB2X21hc2tUZXhDb29yZCk7CisgICAgICAgICAg
ICBmbG9hdCBmcmFnbWVudEFscGhhID0gdV9vcGFjaXR5ICogbWFza0NvbG9yLmE7CiAgICAgICAg
ICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIGZyYWdtZW50QWxwaGEsIGNvbG9y
LmEgKiBmcmFnbWVudEFscGhhKTsKICAgICAgICAgfQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBj
aGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9Ci0gICAgVkVSVEVYX1NIQURF
UigKKyAgICBTVFJJTkdJRlkoCiAgICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKLSAgICAg
ICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfZmxpcDsKKyAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2Zs
aXA7CiAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwotICAgICAgICB2YXJ5aW5nIGhp
Z2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZf
bWFza1RleENvb3JkOworICAgICAgICB2YXJ5aW5nIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKKyAg
ICAgICAgdmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOwogICAgICAgICB2b2lkIG1haW4odm9p
ZCkKICAgICAgICAgewogICAgICAgICAgICAgdl9zb3VyY2VUZXhDb29yZCA9IHZlYzIoYV92ZXJ0
ZXgueCwgbWl4KGFfdmVydGV4LnksIDEuIC0gYV92ZXJ0ZXgueSwgdV9mbGlwKSk7CkBAIC05NSwy
MiArODIsMjQgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlB
bmRNYXNrID0KICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3Vy
Y2VTaW1wbGUgPQotICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCisgICAgICAg
IHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3Nv
dXJjZTsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKLSAgICAgICAgdmFy
eWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CisgICAgICAgIHVuaWZvcm0gZmxvYXQg
dV9vcGFjaXR5OworICAgICAgICB2YXJ5aW5nIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKICAgICAg
ICAgdm9pZCBtYWluKHZvaWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGxvd3AgdmVjNCBjb2xv
ciA9IHRleHR1cmUyRChzX3NvdXJjZSwgdl9zb3VyY2VUZXhDb29yZCk7CisgICAgICAgICAgICB2
ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHNfc291cmNlLCB2X3NvdXJjZVRleENvb3JkKTsKICAgICAg
ICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogdV9vcGFjaXR5LCBjb2xvci5h
ICogdV9vcGFjaXR5KTsKICAgICAgICAgfQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBm
cmFnbWVudFNoYWRlclNvdXJjZUFudGlhbGlhc2luZ05vTWFzayA9Ci0gICAgRlJBR01FTlRfU0hB
REVSKAorICAgIFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAg
ICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwotICAgICAgICB2YXJ5aW5nIGhpZ2hw
IHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3Bh
Y2l0eTsKKyAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CisgICAgICAgIHVu
aWZvcm0gZmxvYXQgdV9vcGFjaXR5OwogICAgICAgICB1bmlmb3JtIHZlYzMgdV9leHBhbmRlZFF1
YWRFZGdlc0luU2NyZWVuU3BhY2VbOF07CiAgICAgICAgIHZvaWQgbWFpbigpCiAgICAgICAgIHsK
QEAgLTE0NSwyNCArMTM0LDI1IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNv
dXJjZUFudGlhbGlhc2luZ05vTWFzayA9CiAgICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIGZy
YWdtZW50U2hhZGVyU291cmNlUmVjdFNpbXBsZSA9Ci0gICAgRlJBR01FTlRfU0hBREVSKAorICAg
IFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgIHVu
aWZvcm0gc2FtcGxlcjJEUmVjdCBzX3NvdXJjZTsKLSAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzIg
dV90ZXh0dXJlU2l6ZTsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKLSAg
ICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CisgICAgICAgIHVuaWZv
cm0gdmVjMiB1X3RleHR1cmVTaXplOworICAgICAgICB1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTsK
KyAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CiAgICAgICAgIHZvaWQgbWFp
bih2b2lkKQogICAgICAgICB7Ci0gICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJl
MkRSZWN0KHNfc291cmNlLCB1X3RleHR1cmVTaXplICogdl9zb3VyY2VUZXhDb29yZCk7CisgICAg
ICAgICAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEUmVjdChzX3NvdXJjZSwgdV90ZXh0dXJlU2l6
ZSAqIHZfc291cmNlVGV4Q29vcmQpOwogICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChj
b2xvci5yZ2IgKiB1X29wYWNpdHksIGNvbG9yLmEgKiB1X29wYWNpdHkpOwogICAgICAgICB9CiAg
ICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSA9Ci0g
ICAgVkVSVEVYX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCiAgICAgICAgIHVuaWZvcm0gbWF0NCB1
X21hdHJpeDsKLSAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfZmxpcDsKKyAgICAgICAgdW5p
Zm9ybSBmbG9hdCB1X2ZsaXA7CiAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwotICAg
ICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKKyAgICAgICAgdmFyeWlu
ZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CiAgICAgICAgIHZvaWQgbWFpbih2b2lkKQogICAgICAg
ICB7CiAgICAgICAgICAgICB2X3NvdXJjZVRleENvb3JkID0gdmVjMihhX3ZlcnRleC54LCBtaXgo
YV92ZXJ0ZXgueSwgMS4gLSBhX3ZlcnRleC55LCB1X2ZsaXApKTsKQEAgLTE3MSw3ICsxNjEsNyBA
QCBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlU2ltcGxlID0KICAgICApOwog
CiBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlU29saWRDb2xvciA9Ci0gICAg
VkVSVEVYX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCiAgICAgICAgIHVuaWZvcm0gbWF0NCB1X21h
dHJpeDsKICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CiAgICAgICAgIHZvaWQgbWFp
bih2b2lkKQpAQCAtMTgyLDcgKzE3Miw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFk
ZXJTb3VyY2VTb2xpZENvbG9yID0KIAogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFk
ZXJTb3VyY2VTb2xpZENvbG9yID0KLSAgICBWRVJURVhfU0hBREVSKAorICAgIFNUUklOR0lGWSgK
KyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgIHVuaWZvcm0gdmVjNCB1
X2NvbG9yOwogICAgICAgICB2b2lkIG1haW4odm9pZCkKICAgICAgICAgewpAQCAtMjEyLDIyICsy
MDMsMjIgQEAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclByb2cKIAogICAgIHN3aXRjaCAoc2hhZGVyVHlw
ZSkgewogICAgIGNhc2UgU2ltcGxlOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1TaW1wbGU6OmNyZWF0ZSgpOworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1TaW1wbGU6OmNyZWF0ZShtX3RleHR1cmVNYXBwZXIpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIFJlY3RTaW1wbGU6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmNyZWF0ZSgpOworICAgICAgICBwcm9ncmFt
ID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpjcmVhdGUobV90ZXh0dXJl
TWFwcGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBbnRpYWxpYXNpbmdOb01hc2s6Ci0g
ICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05v
TWFzazo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbUFudGlhbGlhc2luZ05vTWFzazo6Y3JlYXRlKG1fdGV4dHVyZU1hcHBlcik7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgT3BhY2l0eUFuZE1hc2s6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpjcmVhdGUoKTsKKyAgICAgICAg
cHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OmNyZWF0
ZShtX3RleHR1cmVNYXBwZXIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFJlY3RPcGFjaXR5
QW5kTWFzazoKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVj
dE9wYWNpdHlBbmRNYXNrOjpjcmVhdGUoKTsKKyAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpjcmVhdGUobV90ZXh0dXJlTWFwcGVy
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTb2xpZENvbG9yOgotICAgICAgICBwcm9ncmFt
ID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpjcmVhdGUoKTsKKyAgICAg
ICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6Y3JlYXRl
KG1fdGV4dHVyZU1hcHBlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW52YWxpZDoKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMzYsOCArMjI3LDkgQEAgUGFzc1JlZlB0
cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OmdldFNoYWRlclByb2cKICAgICByZXR1cm4gcHJvZ3JhbTsKIH0KIAotVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW06OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRl
eFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpCi0gICAgOiBt
X2lkKDApCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0oVGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBjaGFyKiB2ZXJ0ZXhT
aGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKQorICAgIDogbV90
ZXh0dXJlTWFwcGVyKHRleHR1cmVNYXBwZXIpCisgICAgLCBtX2lkKDApCiAgICAgLCBtX3ZlcnRl
eEF0dHJpYigwKQogICAgICwgbV92ZXJ0ZXhTaGFkZXIoMCkKICAgICAsIG1fZnJhZ21lbnRTaGFk
ZXIoMCkKQEAgLTI1Niw0NiArMjQ4LDQ4IEBAIHZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmluaXRpYWxpemVQcm9ncmFtKCkKIHsKICAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJT
b3VyY2VQcm9ncmFtID0gdmVydGV4U2hhZGVyU291cmNlKCk7CiAgICAgY29uc3QgY2hhciogZnJh
Z21lbnRTaGFkZXJTb3VyY2VQcm9ncmFtID0gZnJhZ21lbnRTaGFkZXJTb3VyY2UoKTsKLSAgICBH
THVpbnQgdmVydGV4U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7Ci0g
ICAgR0x1aW50IGZyYWdtZW50U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hB
REVSKTsKLSAgICBnbFNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJT
b3VyY2VQcm9ncmFtLCAwKTsKLSAgICBnbFNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwg
JmZyYWdtZW50U2hhZGVyU291cmNlUHJvZ3JhbSwgMCk7Ci0gICAgR0x1aW50IHByb2dyYW1JRCA9
IGdsQ3JlYXRlUHJvZ3JhbSgpOwotICAgIGdsQ29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwot
ICAgIGdsQ29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CisgICAgR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAg
UGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFkZXIgPSBjb250ZXh0LT5jcmVhdGVTaGFkZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpOworICAgIFBsYXRmb3JtM0RPYmplY3QgZnJh
Z21lbnRTaGFkZXIgPSBjb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QUdNRU5UX1NIQURFUik7CisgICAgY29udGV4dC0+c2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwg
dmVydGV4U2hhZGVyU291cmNlUHJvZ3JhbSk7CisgICAgY29udGV4dC0+c2hhZGVyU291cmNlKGZy
YWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlclNvdXJjZVByb2dyYW0pOworICAgIFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbUlEID0gY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOworICAgIGNvbnRl
eHQtPmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKKyAgICBjb250ZXh0LT5jb21waWxlU2hh
ZGVyKGZyYWdtZW50U2hhZGVyKTsKIAotICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVy
dGV4U2hhZGVyKTsKLSAgICBnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVy
KTsKLSAgICBnbExpbmtQcm9ncmFtKHByb2dyYW1JRCk7CisgICAgY29udGV4dC0+YXR0YWNoU2hh
ZGVyKHByb2dyYW1JRCwgdmVydGV4U2hhZGVyKTsKKyAgICBjb250ZXh0LT5hdHRhY2hTaGFkZXIo
cHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcik7CisgICAgY29udGV4dC0+bGlua1Byb2dyYW0ocHJv
Z3JhbUlEKTsKIAotICAgIG1fdmVydGV4QXR0cmliID0gZ2xHZXRBdHRyaWJMb2NhdGlvbihwcm9n
cmFtSUQsICJhX3ZlcnRleCIpOworICAgIG1fdmVydGV4QXR0cmliID0gY29udGV4dC0+Z2V0QXR0
cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiYV92ZXJ0ZXgiKTsKIAogICAgIG1faWQgPSBwcm9ncmFt
SUQ7CiAgICAgbV92ZXJ0ZXhTaGFkZXIgPSB2ZXJ0ZXhTaGFkZXI7CiAgICAgbV9mcmFnbWVudFNo
YWRlciA9IGZyYWdtZW50U2hhZGVyOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtOjpnZXRVbmlmb3JtTG9jYXRpb24oR0xpbnQgJnZhcmlhYmxlLCBjb25zdCBjaGFyKiBuYW1l
KQordm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKEdD
M0RpbnQgJnZhcmlhYmxlLCBjb25zdCBjaGFyKiBuYW1lKQogewotICAgIHZhcmlhYmxlID0gZ2xH
ZXRVbmlmb3JtTG9jYXRpb24obV9pZCwgbmFtZSk7CisgICAgdmFyaWFibGUgPSBtX3RleHR1cmVN
YXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCktPmdldFVuaWZvcm1Mb2NhdGlvbihtX2lkLCBuYW1l
KTsKICAgICBBU1NFUlQodmFyaWFibGUgPj0gMCk7CiB9CiAKIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKQogewotICAgIEdMdWludCBwcm9n
cmFtSUQgPSBtX2lkOworICAgIFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbUlEID0gbV9pZDsKICAg
ICBpZiAoIXByb2dyYW1JRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZ2xEZXRhY2hTaGFkZXIo
cHJvZ3JhbUlELCBtX3ZlcnRleFNoYWRlcik7Ci0gICAgZ2xEZWxldGVTaGFkZXIobV92ZXJ0ZXhT
aGFkZXIpOwotICAgIGdsRGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV9mcmFnbWVudFNoYWRlcik7
Ci0gICAgZ2xEZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7Ci0gICAgZ2xEZWxldGVQcm9n
cmFtKHByb2dyYW1JRCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX3RleHR1
cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgY29udGV4dC0+ZGV0YWNoU2hhZGVy
KHByb2dyYW1JRCwgbV92ZXJ0ZXhTaGFkZXIpOworICAgIGNvbnRleHQtPmRlbGV0ZVNoYWRlciht
X3ZlcnRleFNoYWRlcik7CisgICAgY29udGV4dC0+ZGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV9m
cmFnbWVudFNoYWRlcik7CisgICAgY29udGV4dC0+ZGVsZXRlU2hhZGVyKG1fZnJhZ21lbnRTaGFk
ZXIpOworICAgIGNvbnRleHQtPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbUlEKTsKIH0KIAotVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2lt
cGxlKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJj
ZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUpCitUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoVGV4dHVyZU1h
cHBlckdMKiB0ZXh0dXJlTWFwcGVyKQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0o
dGV4dHVyZU1hcHBlciwgdmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRlclNv
dXJjZVNpbXBsZSkKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVuaWZvcm1M
b2NhdGlvbihtX2ZsaXBMb2NhdGlvbiwgInVfZmxpcCIpOwpAQCAtMzA0LDE2ICsyOTgsMTYgQEAg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU2ltcGxlKCkKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRpb24sICJ1
X29wYWNpdHkiKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoKQotICAgIDogVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlU29saWRDb2xvciwgZnJhZ21lbnRTaGFk
ZXJTb3VyY2VTb2xpZENvbG9yKQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9y
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoVGV4dHVyZU1hcHBlckdMKiB0
ZXh0dXJlTWFwcGVyKQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odGV4dHVyZU1h
cHBlciwgdmVydGV4U2hhZGVyU291cmNlU29saWRDb2xvciwgZnJhZ21lbnRTaGFkZXJTb3VyY2VT
b2xpZENvbG9yKQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAgZ2V0VW5pZm9ybUxv
Y2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwogICAgIGdldFVuaWZvcm1Mb2Nh
dGlvbihtX2NvbG9yTG9jYXRpb24sICJ1X2NvbG9yIik7CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxl
KCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZVNp
bXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0U2ltcGxlKQorVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1SZWN0U2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUo
VGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVyKQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0odGV4dHVyZU1hcHBlciwgdmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVu
dFNoYWRlclNvdXJjZVJlY3RTaW1wbGUpCiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAg
ICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7CkBAIC0z
MjMsOCArMzE3LDggQEAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKQogICAgIGdldFVuaWZvcm1Mb2NhdGlv
bihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNp
dHlBbmRNYXNrKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRl
clNvdXJjZU9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNr
KQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayhUZXh0dXJlTWFwcGVyR0wqIHRleHR1cmVNYXBw
ZXIpCisgICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh0ZXh0dXJlTWFwcGVyLCB2ZXJ0
ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5
QW5kTWFzaykKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVuaWZvcm1Mb2Nh
dGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKQEAgLTMzNCw4ICszMjgsOCBAQCBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYQogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlM
b2NhdGlvbiwgInVfb3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJl
Y3RPcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFu
ZE1hc2soKQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291
cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdE9wYWNpdHlBbmRNYXNr
KQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OlRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKFRleHR1cmVNYXBwZXJHTCogdGV4
dHVyZU1hcHBlcikKKyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHRleHR1cmVNYXBw
ZXIsIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJj
ZVJlY3RPcGFjaXR5QW5kTWFzaykKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdl
dFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKQEAgLTM0NSw4
ICszMzksOCBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhYwogICAgIGdldFVuaWZvcm1Mb2NhdGlv
bihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1B
bnRpYWxpYXNpbmdOb01hc2soKQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odmVy
dGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRlclNvdXJjZUFudGlhbGlhc2luZ05v
TWFzaykKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayhUZXh0dXJlTWFwcGVyR0wq
IHRleHR1cmVNYXBwZXIpCisgICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh0ZXh0dXJl
TWFwcGVyLCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291cmNlQW50
aWFsaWFzaW5nTm9NYXNrKQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAgZ2V0VW5p
Zm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwpAQCAtMzU2LDkgKzM1
MCw5IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhCiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1f
ZmxpcExvY2F0aW9uLCAidV9mbGlwIik7CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpCitUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoVGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFw
cGVyKQorICAgIDogbV90ZXh0dXJlTWFwcGVyKHRleHR1cmVNYXBwZXIpCiB7Ci0gICAgQVNTRVJU
KGluaXRpYWxpemVPcGVuR0xTaGltcygpKTsKIH0KIAogVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6On5UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpCkBAIC0zNzMsMjEgKzM2NywyMyBAQCBU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6flRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkK
IAogU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp+U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKCkKIHsKLSAg
ICBnbERldGFjaFNoYWRlcihtX2lkLCBtX3ZlcnRleFNoYWRlcik7Ci0gICAgZ2xEZWxldGVTaGFk
ZXIobV92ZXJ0ZXhTaGFkZXIpOwotICAgIGdsRGV0YWNoU2hhZGVyKG1faWQsIG1fZnJhZ21lbnRT
aGFkZXIpOwotICAgIGdsRGVsZXRlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsRGVs
ZXRlUHJvZ3JhbShtX2lkKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fdGV4
dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBjb250ZXh0LT5kZXRhY2hTaGFk
ZXIobV9pZCwgbV92ZXJ0ZXhTaGFkZXIpOworICAgIGNvbnRleHQtPmRlbGV0ZVNoYWRlcihtX3Zl
cnRleFNoYWRlcik7CisgICAgY29udGV4dC0+ZGV0YWNoU2hhZGVyKG1faWQsIG1fZnJhZ21lbnRT
aGFkZXIpOworICAgIGNvbnRleHQtPmRlbGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVyKTsKKyAg
ICBjb250ZXh0LT5kZWxldGVQcm9ncmFtKG1faWQpOwogfQogCi1TdGFuZGFyZEZpbHRlclByb2dy
YW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUg
dHlwZSwgdW5zaWduZWQgcGFzcykKLSAgICA6IG1faWQoMCkKK1N0YW5kYXJkRmlsdGVyUHJvZ3Jh
bTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJHTCogdGV4dHVyZU1hcHBlciwg
RmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUsIHVuc2lnbmVkIHBhc3MpCisgICAg
OiBtX3RleHR1cmVNYXBwZXIodGV4dHVyZU1hcHBlcikKKyAgICAsIG1faWQoMCkKIHsKICAgICBj
b25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPQotICAgICAgICAgICAgVkVSVEVYX1NIQURF
UigKKyAgICAgICAgICAgIFNUUklOR0lGWSgKICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgdmVj
NCBhX3ZlcnRleDsKICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3RleENvb3JkOwot
ICAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOworICAgICAgICAg
ICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOwogICAgICAgICAgICAgICAgIHZvaWQgbWFp
bih2b2lkKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdl90ZXhDb29y
ZCA9IHZlYzIoYV90ZXhDb29yZCk7CkBAIC0zOTYsMTAgKzM5Miw5IEBAIFN0YW5kYXJkRmlsdGVy
UHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9u
VHlwZSB0eXBlCiAgICAgICAgICAgICApOwogCiAjZGVmaW5lIFNUQU5EQVJEX0ZJTFRFUih4Li4u
KSBcCi0gICAgICAgIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TXAotICAgICAgICBPRVMyX0ZS
QUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTlwKLSAgICAgICAgInZhcnlpbmcgaGlnaHAg
dmVjMiB2X3RleENvb3JkO1xuIlwKLSAgICAgICAgInVuaWZvcm0gaGlnaHAgZmxvYXQgdV9hbW91
bnQ7XG4iXAorICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iXAorICAgICAgICAi
dmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7XG4iXAorICAgICAgICAidW5pZm9ybSBmbG9hdCB1X2Ft
b3VudDtcbiJcCiAgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG4iXAogICAg
ICAgICAjeFwKICAgICAgICAgInZvaWQgbWFpbih2b2lkKVxuIHsgZ2xfRnJhZ0NvbG9yID0gc2hh
ZGUodGV4dHVyZTJEKHVfdGV4dHVyZSwgdl90ZXhDb29yZCkpOyB9IgpAQCAtNDA4LDkgKzQwMyw5
IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9w
ZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UgPSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2
ZWM0IGNvbG9yKQorICAgICAgICAgICAgdmVjNCBzaGFkZSh2ZWM0IGNvbG9yKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9hbW91bnQ7
CisgICAgICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9hbW91bnQ7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHZlYzQoKDAuMjEyNiArIDAuNzg3NCAqIGFtb3VudCkgKiBjb2xvci5y
ICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcy
MiAqIGFtb3VudCkgKiBjb2xvci5iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjIx
MjYgLSAwLjIxMjYgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgKyAwLjI4NDggKiBhbW91
bnQpICogY29sb3IuZyArICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91bnQpICogY29sb3IuYiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50KSAqIGNv
bG9yLnIgKyAoMC43MTUyIC0gMC43MTUyICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyICsg
MC45Mjc4ICogYW1vdW50KSAqIGNvbG9yLmIsCkBAIC00MjAsOSArNDE1LDkgQEAgU3RhbmRhcmRG
aWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVy
YXRpb25UeXBlIHR5cGUKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OlNFUElBOgogICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigK
LSAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgICAg
ICB2ZWM0IHNoYWRlKHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
bG93cCBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3VudDsKKyAgICAgICAgICAgICAgICBmbG9h
dCBhbW91bnQgPSAxLjAgLSB1X2Ftb3VudDsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNCgo
MC4zOTMgKyAwLjYwNyAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzY5IC0gMC43NjkgKiBhbW91
bnQpICogY29sb3IuZyArICgwLjE4OSAtIDAuMTg5ICogYW1vdW50KSAqIGNvbG9yLmIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKDAuMzQ5IC0gMC4zNDkgKiBhbW91bnQpICogY29sb3Iu
ciArICgwLjY4NiArIDAuMzE0ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xNjggLSAwLjE2OCAq
IGFtb3VudCkgKiBjb2xvci5iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjI3MiAt
IDAuMjcyICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC41MzQgLSAwLjUzNCAqIGFtb3VudCkgKiBj
b2xvci5nICsgKDAuMTMxICsgMC44NjkgKiBhbW91bnQpICogY29sb3IuYiwKQEAgLTQzMiw3ICs0
MjcsNyBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0
ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICBicmVhazsKICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6CiAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNl
ID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVj
NCBjb2xvcikKKyAgICAgICAgICAgIHZlYzQgc2hhZGUodmVjNCBjb2xvcikKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNCgoMC4yMTMgKyAwLjc4NyAqIHVfYW1vdW50
KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAqIHVfYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4w
NzIgLSAwLjA3MiAqIHVfYW1vdW50KSAqIGNvbG9yLmIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKDAuMjEzIC0gMC4yMTMgKiB1X2Ftb3VudCkgKiBjb2xvci5yICsgKDAuNzE1ICsgMC4y
ODUgKiB1X2Ftb3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIgKiB1X2Ftb3VudCkgKiBj
b2xvci5iLApAQCAtNDQzLDExICs0MzgsMTEgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFu
ZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6CiAgICAg
ICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAg
bG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKKyAgICAgICAgICAgIHZlYzQgc2hhZGUo
dmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBoaWdocCBmbG9hdCBw
aSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDY7Ci0gICAgICAgICAgICAgICAgaGlnaHAgZmxvYXQg
YyA9IGNvcyh1X2Ftb3VudCAqIHBpIC8gMTgwLjApOwotICAgICAgICAgICAgICAgIGhpZ2hwIGZs
b2F0IHMgPSBzaW4odV9hbW91bnQgKiBwaSAvIDE4MC4wKTsKKyAgICAgICAgICAgICAgICBmbG9h
dCBwaSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDY7CisgICAgICAgICAgICAgICAgZmxvYXQgYyA9
IGNvcyh1X2Ftb3VudCAqIHBpIC8gMTgwLjApOworICAgICAgICAgICAgICAgIGZsb2F0IHMgPSBz
aW4odV9hbW91bnQgKiBwaSAvIDE4MC4wKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChj
b2xvci5yICogKDAuMjEzICsgYyAqIDAuNzg3IC0gcyAqIDAuMjEzKSArIGNvbG9yLmcgKiAoMC43
MTUgLSBjICogMC43MTUgLSBzICogMC43MTUpICsgY29sb3IuYiAqICgwLjA3MiAtIGMgKiAwLjA3
MiArIHMgKiAwLjkyOCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuciAqICgw
LjIxMyAtIGMgKiAwLjIxMyArIHMgKiAwLjE0MykgKyBjb2xvci5nICogKDAuNzE1ICsgYyAqIDAu
Mjg1ICsgcyAqIDAuMTQwKSArIGNvbG9yLmIgKiAoMC4wNzIgLSBjICogMC4wNzIgLSBzICogMC4y
ODMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLnIgKiAoMC4yMTMgLSBjICog
MC4yMTMgLSBzICogMC43ODcpICsgIGNvbG9yLmcgKiAoMC43MTUgLSBjICogMC43MTUgKyBzICog
MC43MTUpICsgY29sb3IuYiAqICgwLjA3MiArIGMgKiAwLjkyOCArIHMgKiAwLjA3MiksCkBAIC00
NTcsOCArNDUyLDggQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dy
YW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKICAgICAgICAgZnJhZ21lbnRTaGFkZXJT
b3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICBsb3dwIGZsb2F0IGludmVydChs
b3dwIGZsb2F0IG4pIHsgcmV0dXJuICgxLjAgLSBuKSAqIHVfYW1vdW50ICsgbiAqICgxLjAgLSB1
X2Ftb3VudCk7IH0KLSAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3Ip
CisgICAgICAgICAgICBmbG9hdCBpbnZlcnQoZmxvYXQgbikgeyByZXR1cm4gKDEuMCAtIG4pICog
dV9hbW91bnQgKyBuICogKDEuMCAtIHVfYW1vdW50KTsgfQorICAgICAgICAgICAgdmVjNCBzaGFk
ZSh2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0
KGludmVydChjb2xvci5yKSwgaW52ZXJ0KGNvbG9yLmcpLCBpbnZlcnQoY29sb3IuYiksIGNvbG9y
LmEpOwogICAgICAgICAgICAgfQpAQCAtNDY2LDcgKzQ2MSw3IEBAIFN0YW5kYXJkRmlsdGVyUHJv
Z3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlw
ZSB0eXBlCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRO
RVNTOgogICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAg
ICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgICAgICB2
ZWM0IHNoYWRlKHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHZlYzQoY29sb3IucmdiICogKDEuMCArIHVfYW1vdW50KSwgY29sb3IuYSk7CiAgICAgICAg
ICAgICB9CkBAIC00NzQsOCArNDY5LDggQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFy
ZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgogICAgICAgICBm
cmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgICAgIGxvd3Ag
ZmxvYXQgY29udHJhc3QobG93cCBmbG9hdCBuKSB7IHJldHVybiAobiAtIDAuNSkgKiB1X2Ftb3Vu
dCArIDAuNTsgfQotICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikK
KyAgICAgICAgICAgIGZsb2F0IGNvbnRyYXN0KGZsb2F0IG4pIHsgcmV0dXJuIChuIC0gMC41KSAq
IHVfYW1vdW50ICsgMC41OyB9CisgICAgICAgICAgICB2ZWM0IHNoYWRlKHZlYzQgY29sb3IpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29udHJhc3QoY29sb3Iu
ciksIGNvbnRyYXN0KGNvbG9yLmcpLCBjb250cmFzdChjb2xvci5iKSwgY29sb3IuYSk7CiAgICAg
ICAgICAgICB9CkBAIC00ODMsMjAgKzQ3OCwyMSBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0
YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKICAgICAg
ICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICBs
b3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICAgICAgdmVjNCBzaGFkZSh2
ZWM0IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KGNv
bG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgKiB1X2Ftb3VudCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpCTFVSOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IEZSQUdNRU5UX1NIQURFUigK
LSAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOwotICAgICAgICAgICAg
dW5pZm9ybSBsb3dwIHZlYzIgdV9ibHVyUmFkaXVzOworICAgICAgICBmcmFnbWVudFNoYWRlclNv
dXJjZSA9IFNUUklOR0lGWSgKKyAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0Owor
ICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7CisgICAgICAgICAgICB1bmlmb3Jt
IHZlYzIgdV9ibHVyUmFkaXVzOwogICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0
dXJlOwogICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFO
X0tFUk5FTF9IQUxGX1dJRFRIXTsKIAotICAgICAgICAgICAgbG93cCB2ZWM0IHNhbXBsZUNvbG9y
KGZsb2F0IHJhZGl1cykKKyAgICAgICAgICAgIHZlYzQgc2FtcGxlQ29sb3IoZmxvYXQgcmFkaXVz
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHZlYzIgY29vcmQgPSB2X3RleENvb3Jk
ICsgcmFkaXVzICogdV9ibHVyUmFkaXVzOwogICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJl
MkQodV90ZXh0dXJlLCBjb29yZCkgKiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAu
ICYmIGNvb3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOwpAQCAtNTIzLDIwICs1MTksMjAgQEAg
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0
aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgc3dpdGNoIChwYXNzKSB7CiAgICAgICAg
IGNhc2UgMDogewogICAgICAgICAgICAgLy8gRmlyc3QgcGFzczogaG9yaXpvbnRhbCBhbHBoYSBi
bHVyLgotICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBGUkFHTUVOVF9TSEFERVIo
Ci0gICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7Ci0gICAgICAg
ICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfc2hhZG93Qmx1clJhZGl1czsKLSAgICAgICAg
ICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1X3NoYWRvd09mZnNldDsKKyAgICAgICAgICAgIGZy
YWdtZW50U2hhZGVyU291cmNlID0gU1RSSU5HSUZZKAorICAgICAgICAgICAgICAgIHZhcnlpbmcg
dmVjMiB2X3RleENvb3JkOworICAgICAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9zaGFkb3dC
bHVyUmFkaXVzOworICAgICAgICAgICAgICAgIHVuaWZvcm0gdmVjMiB1X3NoYWRvd09mZnNldDsK
ICAgICAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7CiAgICAgICAgICAg
ICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxG
X1dJRFRIXTsKIAotICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgc2FtcGxlQWxwaGEoZmxvYXQg
cmFkaXVzKQorICAgICAgICAgICAgICAgIGZsb2F0IHNhbXBsZUFscGhhKGZsb2F0IHJhZGl1cykK
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHZlYzIgY29vcmQgPSB2X3Rl
eENvb3JkIC0gdV9zaGFkb3dPZmZzZXQgKyB2ZWMyKHJhZGl1cyAqIHVfc2hhZG93Qmx1clJhZGl1
cywgMC4pOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHVfdGV4dHVyZSwg
Y29vcmQpLmEgKiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3JkLngg
PCAxLiAmJiBjb29yZC55IDwgMS4pOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIGxvd3AgZmxvYXQgc2hhZG93Qmx1ckhvcml6b250YWwoKQorICAgICAgICAgICAgICAgIGZs
b2F0IHNoYWRvd0JsdXJIb3Jpem9udGFsKCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0IHRvdGFsID0gc2FtcGxlQWxwaGEoMCkgKiB1X2dhdXNzaWFuS2VybmVs
WzBdOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tF
Uk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKQEAgLTU1NiwyMSArNTUyLDIxIEBAIFN0YW5kYXJkRmls
dGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0
aW9uVHlwZSB0eXBlCiAgICAgICAgICAgICB9CiAgICAgICAgIGNhc2UgMTogewogICAgICAgICAg
ICAgLy8gU2Vjb25kIHBhc3M6IHZlcnRpY2FsIGFscGhhIGJsdXIgYW5kIGNvbXBvc2l0ZSB3aXRo
IG9yaWdpbi4KLSAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gRlJBR01FTlRfU0hB
REVSKAotICAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOwotICAg
ICAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X3NoYWRvd0JsdXJSYWRpdXM7Ci0gICAg
ICAgICAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzQgdV9zaGFkb3dDb2xvcjsKKyAgICAgICAgICAg
IGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RSSU5HSUZZKAorICAgICAgICAgICAgICAgIHZhcnlp
bmcgdmVjMiB2X3RleENvb3JkOworICAgICAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9zaGFk
b3dCbHVyUmFkaXVzOworICAgICAgICAgICAgICAgIHVuaWZvcm0gdmVjNCB1X3NoYWRvd0NvbG9y
OwogICAgICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTsKICAgICAgICAg
ICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1X2NvbnRlbnRUZXh0dXJlOwogICAgICAgICAgICAg
ICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtHQVVTU0lBTl9LRVJORUxfSEFMRl9X
SURUSF07CiAKLSAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IHNhbXBsZUFscGhhKGZsb2F0IHIp
CisgICAgICAgICAgICAgICAgZmxvYXQgc2FtcGxlQWxwaGEoZmxvYXQgcikKICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHZlYzIgY29vcmQgPSB2X3RleENvb3JkICsgdmVj
MigwLiwgciAqIHVfc2hhZG93Qmx1clJhZGl1cyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0ZXh0dXJlMkQodV90ZXh0dXJlLCBjb29yZCkuYSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBj
b29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7CiAgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgbG93cCBmbG9hdCBzaGFkb3dCbHVyVmVydGljYWwo
KQorICAgICAgICAgICAgICAgIGZsb2F0IHNoYWRvd0JsdXJWZXJ0aWNhbCgpCiAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICBmbG9hdCB0b3RhbCA9IHNhbXBsZUFscGhhKDAp
ICogdV9nYXVzc2lhbktlcm5lbFswXTsKICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgaSsrKSB7CkBAIC01ODEsNyArNTc3
LDcgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVy
T3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRvdGFsOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBz
b3VyY2VPdmVyKGxvd3AgdmVjNCBzb3VyY2UsIGxvd3AgdmVjNCBkZXN0aW5hdGlvbikKKyAgICAg
ICAgICAgICAgICB2ZWM0IHNvdXJjZU92ZXIodmVjNCBzb3VyY2UsIHZlYzQgZGVzdGluYXRpb24p
CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAvLyBDb21wb3NpdGUgdGhl
IHNoYWRvdyB3aXRoIHRoZSBvcmlnaW5hbCB0ZXh0dXJlLgogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc291cmNlICsgZGVzdGluYXRpb24gKiAoMS4gLSBzb3VyY2UuYSk7CkBAIC02MDIsMjYg
KzU5OCwyNiBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShG
aWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogCiAgICAgaWYgKCFmcmFnbWVudFNo
YWRlclNvdXJjZSkKICAgICAgICAgcmV0dXJuOwotICAgIEdMdWludCB2ZXJ0ZXhTaGFkZXIgPSBn
bENyZWF0ZVNoYWRlcihHTF9WRVJURVhfU0hBREVSKTsKLSAgICBHTHVpbnQgZnJhZ21lbnRTaGFk
ZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIpOwotICAgIGdsU2hhZGVyU291
cmNlKHZlcnRleFNoYWRlciwgMSwgJnZlcnRleFNoYWRlclNvdXJjZSwgMCk7Ci0gICAgZ2xTaGFk
ZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJjZSwgMCk7Ci0g
ICAgR0x1aW50IHByb2dyYW1JRCA9IGdsQ3JlYXRlUHJvZ3JhbSgpOwotICAgIGdsQ29tcGlsZVNo
YWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsQ29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7
CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBo
aWNzQ29udGV4dDNEKCk7CisgICAgUGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFkZXIgPSBjb250
ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpOworICAg
IFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIgPSBjb250ZXh0LT5jcmVhdGVTaGFkZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUik7CisgICAgY29udGV4dC0+c2hhZGVy
U291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyU291cmNlKTsKKyAgICBjb250ZXh0LT5z
aGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyU291cmNlKTsKKyAgICBQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCA9IGNvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKKyAg
ICBjb250ZXh0LT5jb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAgY29udGV4dC0+Y29t
cGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgIEdMY2hh
ciBsb2dbMTAwXTsKLSAgICBHTGludCBsZW47Ci0gICAgZ2xHZXRTaGFkZXJJbmZvTG9nKGZyYWdt
ZW50U2hhZGVyLCAxMDAsICZsZW4sIGxvZyk7CisgICAgU3RyaW5nIGxvZzsKKyAgICBjb250ZXh0
LT5nZXRTaGFkZXJJbmZvTG9nKGZyYWdtZW50U2hhZGVyKTsKICAgICBXVEZMb2coJkxvZ0NvbXBv
c2l0aW5nLCAiJXNcbiIsIGxvZyk7CiAjZW5kaWYKLSAgICBnbEF0dGFjaFNoYWRlcihwcm9ncmFt
SUQsIHZlcnRleFNoYWRlcik7Ci0gICAgZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVu
dFNoYWRlcik7Ci0gICAgZ2xMaW5rUHJvZ3JhbShwcm9ncmFtSUQpOworICAgIGNvbnRleHQtPmF0
dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRlcik7CisgICAgY29udGV4dC0+YXR0YWNo
U2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRTaGFkZXIpOworICAgIGNvbnRleHQtPmxpbmtQcm9n
cmFtKHByb2dyYW1JRCk7CiAKLSAgICBtX3ZlcnRleEF0dHJpYiA9IGdsR2V0QXR0cmliTG9jYXRp
b24ocHJvZ3JhbUlELCAiYV92ZXJ0ZXgiKTsKLSAgICBtX3RleENvb3JkQXR0cmliID0gZ2xHZXRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3RleENvb3JkIik7Ci0gICAgbV90ZXh0dXJlVW5p
Zm9ybUxvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV90ZXh0dXJl
Iik7CisgICAgbV92ZXJ0ZXhBdHRyaWIgPSBjb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9n
cmFtSUQsICJhX3ZlcnRleCIpOworICAgIG1fdGV4Q29vcmRBdHRyaWIgPSBjb250ZXh0LT5nZXRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3RleENvb3JkIik7CisgICAgbV90ZXh0dXJlVW5p
Zm9ybUxvY2F0aW9uID0gY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVf
dGV4dHVyZSIpOwogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpHUkFZU0NBTEU6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgpAQCAtNjMxLDIx
ICs2MjcsMjEgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0o
RmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6QlJJR0hUTkVTUzoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CiAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0
aW9ucy5hbW91bnQgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2Ftb3VudCIp
OworICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuYW1vdW50ID0gY29udGV4dC0+Z2V0VW5pZm9y
bUxvY2F0aW9uKHByb2dyYW1JRCwgInVfYW1vdW50Iik7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgotICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1
ci5yYWRpdXMgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2JsdXJSYWRpdXMi
KTsKLSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmJsdXIuZ2F1c3NpYW5LZXJuZWwgPSBnbEdl
dFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7CisgICAgICAg
IG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLnJhZGl1cyA9IGNvbnRleHQtPmdldFVuaWZvcm1Mb2Nh
dGlvbihwcm9ncmFtSUQsICJ1X2JsdXJSYWRpdXMiKTsKKyAgICAgICAgbV91bmlmb3JtTG9jYXRp
b25zLmJsdXIuZ2F1c3NpYW5LZXJuZWwgPSBjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJv
Z3JhbUlELCAidV9nYXVzc2lhbktlcm5lbCIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5z
aGFkb3cuYmx1clJhZGl1cyA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfc2hh
ZG93Qmx1clJhZGl1cyIpOwotICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNz
aWFuS2VybmVsID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9nYXVzc2lhbktl
cm5lbCIpOworICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMgPSBj
b250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dCbHVyUmFkaXVz
Iik7CisgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwgPSBj
b250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9nYXVzc2lhbktlcm5lbCIp
OwogICAgICAgICBpZiAoIXBhc3MpCi0gICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hh
ZG93Lm9mZnNldCA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93T2Zm
c2V0Iik7CisgICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93Lm9mZnNldCA9IGNv
bnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3NoYWRvd09mZnNldCIpOwog
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0aGUgY29sb3IgYW5k
IHRoZSBjb250ZW50IHRleHR1cmUgaW4gdGhlIHNlY29uZCBwYXNzLCB0aGUgZmlyc3QgcGFzcyBp
cyBvbmx5IGEgaG9yaXpvbnRhbCBhbHBoYSBibHVyLgotICAgICAgICAgICAgbV91bmlmb3JtTG9j
YXRpb25zLnNoYWRvdy5jb2xvciA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVf
c2hhZG93Q29sb3IiKTsKLSAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29u
dGVudFRleHR1cmUgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2NvbnRlbnRU
ZXh0dXJlIik7CisgICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbG9yID0g
Y29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93Q29sb3IiKTsK
KyAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29udGVudFRleHR1cmUgPSBj
b250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9jb250ZW50VGV4dHVyZSIp
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC02NTYsOSArNjUy
LDkgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVy
T3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICBtX2ZyYWdtZW50U2hhZGVyID0gZnJh
Z21lbnRTaGFkZXI7CiB9CiAKLVBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBTdGFu
ZGFyZEZpbHRlclByb2dyYW06OmNyZWF0ZShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUg
dHlwZSwgdW5zaWduZWQgcGFzcykKK1Bhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBT
dGFuZGFyZEZpbHRlclByb2dyYW06OmNyZWF0ZShUZXh0dXJlTWFwcGVyR0wqIHRleHR1cmVNYXBw
ZXIsIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQog
ewotICAgIFJlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IHByb2dyYW0gPSBhZG9wdFJlZihu
ZXcgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKHR5cGUsIHBhc3MpKTsKKyAgICBSZWZQdHI8U3RhbmRh
cmRGaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0gYWRvcHRSZWYobmV3IFN0YW5kYXJkRmlsdGVyUHJv
Z3JhbSh0ZXh0dXJlTWFwcGVyLCB0eXBlLCBwYXNzKSk7CiAgICAgaWYgKCFwcm9ncmFtLT5tX2lk
KQogICAgICAgICByZXR1cm4gMDsKIApAQCAtNjk0LDIxICs2OTAsMjIgQEAgc3RhdGljIGZsb2F0
KiBnYXVzc2lhbktlcm5lbCgpCiAgICAgcmV0dXJuIGtlcm5lbDsKIH0KIAotdm9pZCBTdGFuZGFy
ZEZpbHRlclByb2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24s
IHVuc2lnbmVkIHBhc3MsIGNvbnN0IEludFNpemUmIHNpemUsIEdMdWludCBjb250ZW50VGV4dHVy
ZSkKK3ZvaWQgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJh
dGlvbiYgb3BlcmF0aW9uLCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRTaXplJiBzaXplLCBHQzNE
dWludCBjb250ZW50VGV4dHVyZSkKIHsKLSAgICBnbFVzZVByb2dyYW0obV9pZCk7CisgICAgR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4
dDNEKCk7CisgICAgY29udGV4dC0+dXNlUHJvZ3JhbShtX2lkKTsKICAgICBzd2l0Y2ggKG9wZXJh
dGlvbi5nZXRPcGVyYXRpb25UeXBlKCkpIHsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JB
WVNDQUxFOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6U0FUVVJBVEU6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RB
VEU6Ci0gICAgICAgIGdsVW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0YXRp
Y19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24p
LmFtb3VudCgpKTsKKyAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9u
cy5hbW91bnQsIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OklOVkVSVDoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVT
UzoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CiAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIGdsVW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9u
cy5hbW91bnQsIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKKyAgICAgICAgY29udGV4dC0+dW5pZm9y
bTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29t
cG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKICAgICAgICAg
Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ciA9IHN0YXRpY19jYXN0PGNvbnN0IEJsdXJG
aWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pOwpAQCAtNzIwLDggKzcxNyw4IEBAIHZvaWQgU3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtOjpwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0
aW9uLCB1bnNpZ25lZCBwCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJhZGl1cy5zZXRXaWR0
aChmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXIuc3RkRGV2aWF0aW9uKCksIHNpemUud2lkdGgoKSkg
LyBzaXplLndpZHRoKCkpOwogCi0gICAgICAgIGdsVW5pZm9ybTJmKG1fdW5pZm9ybUxvY2F0aW9u
cy5ibHVyLnJhZGl1cywgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSk7Ci0gICAgICAg
IGdsVW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktlcm5lbCwgR0FV
U1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOworICAgICAgICBjb250
ZXh0LT51bmlmb3JtMmYobV91bmlmb3JtTG9jYXRpb25zLmJsdXIucmFkaXVzLCByYWRpdXMud2lk
dGgoKSwgcmFkaXVzLmhlaWdodCgpKTsKKyAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmdihtX3Vu
aWZvcm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZf
V0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7CkBAIC03MjksMjAgKzcyNiwyMCBAQCB2
b2lkIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6cHJlcGFyZShjb25zdCBGaWx0ZXJPcGVyYXRpb24m
IG9wZXJhdGlvbiwgdW5zaWduZWQgcAogICAgICAgICBzd2l0Y2ggKHBhc3MpIHsKICAgICAgICAg
Y2FzZSAwOgogICAgICAgICAgICAgLy8gRmlyc3QgcGFzczogdmVydGljYWwgYWxwaGEgYmx1ci4K
LSAgICAgICAgICAgIGdsVW5pZm9ybTJmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cub2Zmc2V0
LCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwgZmxv
YXQoc2hhZG93LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKLSAgICAg
ICAgICAgIGdsVW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1cywg
c2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSk7Ci0gICAgICAgICAg
ICBnbFVuaWZvcm0xZnYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCwg
R0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOworICAgICAgICAg
ICAgY29udGV4dC0+dW5pZm9ybTJmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cub2Zmc2V0LCBm
bG9hdChzaGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwgZmxvYXQo
c2hhZG93LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRp
dXMsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUud2lkdGgoKSkpOworICAgICAg
ICAgICAgY29udGV4dC0+dW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNz
aWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgLy8gU2Vj
b25kIHBhc3M6IHdlIG5lZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVy
ZSBmb3IgY29tcG9zaXRpbmcuCi0gICAgICAgICAgICBnbFVuaWZvcm0xZihtX3VuaWZvcm1Mb2Nh
dGlvbnMuc2hhZG93LmJsdXJSYWRpdXMsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNp
emUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGdsVW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlv
bnMuc2hhZG93LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1
c3NpYW5LZXJuZWwoKSk7Ci0gICAgICAgICAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEp
OwotICAgICAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBjb250ZW50VGV4dHVy
ZSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm0xaShtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNv
bnRlbnRUZXh0dXJlLCAxKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZihtX3VuaWZv
cm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZs
b2F0KHNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZnYobV91
bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hB
TEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOworICAgICAgICAgICAgY29udGV4dC0+YWN0aXZl
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpOworICAgICAgICAgICAgY29udGV4
dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbnRlbnRUZXh0
dXJlKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xaShtX3VuaWZvcm1Mb2NhdGlvbnMu
c2hhZG93LmNvbnRlbnRUZXh0dXJlLCAxKTsKICAgICAgICAgICAgIGZsb2F0IHIsIGcsIGIsIGE7
CiAgICAgICAgICAgICBzaGFkb3cuY29sb3IoKS5nZXRSR0JBKHIsIGcsIGIsIGEpOwotICAgICAg
ICAgICAgZ2xVbmlmb3JtNGYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb2xvciwgciwgZywg
YiwgYSk7CisgICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtNGYobV91bmlmb3JtTG9jYXRpb25z
LnNoYWRvdy5jb2xvciwgciwgZywgYiwgYSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBicmVhazsKQEAgLTc1OSw3ICs3NTYsNyBAQCBQYXNzUmVmUHRyPFN0YW5kYXJk
RmlsdGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlckZvckZp
bHRlcgogICAgIGludCBrZXkgPSBpbnQodHlwZSkgfCAocGFzcyA8PCAxNik7CiAgICAgRmlsdGVy
TWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZmlsdGVyTWFwLmZpbmQoa2V5KTsKICAgICBpZiAo
aXRlcmF0b3IgPT0gbV9maWx0ZXJNYXAuZW5kKCkpIHsKLSAgICAgICAgcHJvZ3JhbSA9IFN0YW5k
YXJkRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKHR5cGUsIHBhc3MpOworICAgICAgICBwcm9ncmFtID0g
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpjcmVhdGUobV90ZXh0dXJlTWFwcGVyLCB0eXBlLCBwYXNz
KTsKICAgICAgICAgaWYgKCFwcm9ncmFtKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKaW5kZXggNzg1NDk4ZTdmOGEzNjI3ZWFi
MTA2ODZiYTM2YmZmYjNlMTA5MTQ1Ni4uNWZlYWQ4MDBjMWQ1NmVmODYwODgxMjVhNWFjOTI2MTUw
ZTAyZmQ4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKQEAgLTI0
LDkgKzI0LDkgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhU
VVJFX01BUFBFUikKIAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIk9wZW5HTFNoaW1z
LmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJH
TC5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtNDQsMzkgKzQ0LDQwIEBA
IGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwogCiBjbGFzcyBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtPiB7CiBwdWJsaWM6Ci0gICAgR0x1aW50IGlkKCkgeyByZXR1cm4gbV9pZDsgfQotICAgIEdM
dWludCB2ZXJ0ZXhBdHRyaWIoKSB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQorICAgIFBsYXRm
b3JtM0RPYmplY3QgaWQoKSB7IHJldHVybiBtX2lkOyB9CisgICAgR0MzRHVpbnQgdmVydGV4QXR0
cmliKCkgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWI7IH0KIAotICAgIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJh
Z21lbnRTaGFkZXJTb3VyY2UpOworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKFRleHR1
cmVNYXBwZXJHTCosIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciog
ZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShmbG9hdCBvcGFjaXR5LCBjb25z
dCBCaXRtYXBUZXh0dXJlKikgeyB9Ci0gICAgR0xpbnQgbWF0cml4TG9jYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX21hdHJpeExvY2F0aW9uOyB9Ci0gICAgR0xpbnQgZmxpcExvY2F0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9mbGlwTG9jYXRpb247IH0KLSAgICBHTGludCB0ZXh0dXJlU2l6ZUxvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlU2l6ZUxvY2F0aW9uOyB9Ci0gICAgR0xpbnQg
c291cmNlVGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VUZXh0dXJlTG9j
YXRpb247IH0KLSAgICBHTGludCBtYXNrVGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9tYXNrVGV4dHVyZUxvY2F0aW9uOyB9Ci0gICAgR0xpbnQgb3BhY2l0eUxvY2F0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9vcGFjaXR5TG9jYXRpb247IH0KKyAgICBHQzNEaW50IG1hdHJpeExvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgZmxp
cExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mbGlwTG9jYXRpb247IH0KKyAgICBHQzNEaW50
IHRleHR1cmVTaXplTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVTaXplTG9jYXRp
b247IH0KKyAgICBHQzNEaW50IHNvdXJjZVRleHR1cmVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOyB9CisgICAgR0MzRGludCBtYXNrVGV4dHVyZUxvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGV4dHVyZUxvY2F0aW9uOyB9CisgICAgR0MzRGlu
dCBvcGFjaXR5TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHlMb2NhdGlvbjsgfQog
Ci0gICAgc3RhdGljIGJvb2wgaXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihHTGludCBsb2NhdGlvbikg
eyByZXR1cm4gbG9jYXRpb24gPj0gMDsgfQorICAgIHN0YXRpYyBib29sIGlzVmFsaWRVbmlmb3Jt
TG9jYXRpb24oR0MzRGludCBsb2NhdGlvbikgeyByZXR1cm4gbG9jYXRpb24gPj0gMDsgfQogCiBw
cm90ZWN0ZWQ6Ci0gICAgdm9pZCBnZXRVbmlmb3JtTG9jYXRpb24oR0xpbnQmIHZhciwgY29uc3Qg
Y2hhciogbmFtZSk7CisgICAgdm9pZCBnZXRVbmlmb3JtTG9jYXRpb24oR0MzRGludCYgdmFyLCBj
b25zdCBjaGFyKiBuYW1lKTsKICAgICB2b2lkIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAgdmly
dHVhbCB2b2lkIGluaXRpYWxpemUoKSB7IH0KICAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJT
b3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleFNoYWRlclNvdXJjZS5kYXRhKCk7IH0KICAg
ICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJh
Z21lbnRTaGFkZXJTb3VyY2UuZGF0YSgpOyB9CiAKLSAgICBHTHVpbnQgbV9pZDsKLSAgICBHTHVp
bnQgbV92ZXJ0ZXhBdHRyaWI7Ci0gICAgR0x1aW50IG1fdmVydGV4U2hhZGVyOwotICAgIEdMdWlu
dCBtX2ZyYWdtZW50U2hhZGVyOwotICAgIEdMaW50IG1fbWF0cml4TG9jYXRpb247Ci0gICAgR0xp
bnQgbV9mbGlwTG9jYXRpb247Ci0gICAgR0xpbnQgbV90ZXh0dXJlU2l6ZUxvY2F0aW9uOwotICAg
IEdMaW50IG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOwotICAgIEdMaW50IG1fb3BhY2l0eUxvY2F0
aW9uOwotICAgIEdMaW50IG1fbWFza1RleHR1cmVMb2NhdGlvbjsKKyAgICBUZXh0dXJlTWFwcGVy
R0wqIG1fdGV4dHVyZU1hcHBlcjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1faWQ7CisgICAgR0Mz
RHVpbnQgbV92ZXJ0ZXhBdHRyaWI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZlcnRleFNoYWRl
cjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZnJhZ21lbnRTaGFkZXI7CisgICAgR0MzRGludCBt
X21hdHJpeExvY2F0aW9uOworICAgIEdDM0RpbnQgbV9mbGlwTG9jYXRpb247CisgICAgR0MzRGlu
dCBtX3RleHR1cmVTaXplTG9jYXRpb247CisgICAgR0MzRGludCBtX3NvdXJjZVRleHR1cmVMb2Nh
dGlvbjsKKyAgICBHQzNEaW50IG1fb3BhY2l0eUxvY2F0aW9uOworICAgIEdDM0RpbnQgbV9tYXNr
VGV4dHVyZUxvY2F0aW9uOwogCiBwcml2YXRlOgogICAgIENTdHJpbmcgbV92ZXJ0ZXhTaGFkZXJT
b3VyY2U7CkBAIC04NywzMyArODgsMzYgQEAgcHJpdmF0ZToKIGNsYXNzIFN0YW5kYXJkRmlsdGVy
UHJvZ3JhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gewogcHVi
bGljOgogICAgIHZpcnR1YWwgflN0YW5kYXJkRmlsdGVyUHJvZ3JhbSgpOwotICAgIHZpcnR1YWwg
dm9pZCBwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYsIHVuc2lnbmVkIHBhc3MsIGNvbnN0
IEludFNpemUmLCBHTHVpbnQgY29udGVudFRleHR1cmUpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gY3JlYXRlKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9u
VHlwZSwgdW5zaWduZWQgcGFzcyk7Ci0gICAgR0x1aW50IHZlcnRleEF0dHJpYigpIGNvbnN0IHsg
cmV0dXJuIG1fdmVydGV4QXR0cmliOyB9Ci0gICAgR0x1aW50IHRleENvb3JkQXR0cmliKCkgY29u
c3QgeyByZXR1cm4gbV90ZXhDb29yZEF0dHJpYjsgfQotICAgIEdMdWludCB0ZXh0dXJlVW5pZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbjsgfQorICAgIHZpcnR1
YWwgdm9pZCBwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYsIHVuc2lnbmVkIHBhc3MsIGNv
bnN0IEludFNpemUmLCBHQzNEdWludCBjb250ZW50VGV4dHVyZSk7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBjcmVhdGUoVGV4dHVyZU1hcHBlckdMKiwgRmls
dGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBwYXNzKTsKKyAgICBHQzNEdWlu
dCB2ZXJ0ZXhBdHRyaWIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQorICAgIEdD
M0R1aW50IHRleENvb3JkQXR0cmliKCkgY29uc3QgeyByZXR1cm4gbV90ZXhDb29yZEF0dHJpYjsg
fQorICAgIEdDM0R1aW50IHRleHR1cmVVbmlmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJl
VW5pZm9ybUxvY2F0aW9uOyB9Citwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZU1hcHBlckdMKiBtX3Rl
eHR1cmVNYXBwZXI7CiBwcml2YXRlOgotICAgIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJP
cGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIHBhc3MpOwotICAgIEdMdWludCBtX2lk
OwotICAgIEdMdWludCBtX3ZlcnRleFNoYWRlcjsKLSAgICBHTHVpbnQgbV9mcmFnbWVudFNoYWRl
cjsKLSAgICBHTHVpbnQgbV92ZXJ0ZXhBdHRyaWI7Ci0gICAgR0x1aW50IG1fdGV4Q29vcmRBdHRy
aWI7Ci0gICAgR0x1aW50IG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbjsKKyAgICBTdGFuZGFyZEZp
bHRlclByb2dyYW0oKTsKKyAgICBTdGFuZGFyZEZpbHRlclByb2dyYW0oVGV4dHVyZU1hcHBlckdM
KiwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBwYXNzKTsKKyAgICBQ
bGF0Zm9ybTNET2JqZWN0IG1faWQ7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZlcnRleFNoYWRl
cjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZnJhZ21lbnRTaGFkZXI7CisgICAgR0MzRHVpbnQg
bV92ZXJ0ZXhBdHRyaWI7CisgICAgR0MzRHVpbnQgbV90ZXhDb29yZEF0dHJpYjsKKyAgICBHQzNE
dWludCBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb247CiAgICAgdW5pb24gewotICAgICAgICBHTHVp
bnQgYW1vdW50OworICAgICAgICBHQzNEdWludCBhbW91bnQ7CiAKICAgICAgICAgc3RydWN0IHsK
LSAgICAgICAgICAgIEdMdWludCByYWRpdXM7Ci0gICAgICAgICAgICBHTHVpbnQgZ2F1c3NpYW5L
ZXJuZWw7CisgICAgICAgICAgICBHQzNEdWludCByYWRpdXM7CisgICAgICAgICAgICBHQzNEdWlu
dCBnYXVzc2lhbktlcm5lbDsKICAgICAgICAgfSBibHVyOwogCiAgICAgICAgIHN0cnVjdCB7Ci0g
ICAgICAgICAgICBHTHVpbnQgYmx1clJhZGl1czsKLSAgICAgICAgICAgIEdMdWludCBjb2xvcjsK
LSAgICAgICAgICAgIEdMdWludCBvZmZzZXQ7Ci0gICAgICAgICAgICBHTHVpbnQgY29udGVudFRl
eHR1cmU7Ci0gICAgICAgICAgICBHTHVpbnQgZ2F1c3NpYW5LZXJuZWw7CisgICAgICAgICAgICBH
QzNEdWludCBibHVyUmFkaXVzOworICAgICAgICAgICAgR0MzRHVpbnQgY29sb3I7CisgICAgICAg
ICAgICBHQzNEdWludCBvZmZzZXQ7CisgICAgICAgICAgICBHQzNEdWludCBjb250ZW50VGV4dHVy
ZTsKKyAgICAgICAgICAgIEdDM0R1aW50IGdhdXNzaWFuS2VybmVsOwogICAgICAgICB9IHNoYWRv
dzsKICAgICB9IG1fdW5pZm9ybUxvY2F0aW9uczsKIH07CkBAIC0xMjEsNzcgKzEyNSw4OSBAQCBw
cml2YXRlOgogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSA6IHB1Ymxp
YyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU+IGNyZWF0ZSgpCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU+IGNyZWF0ZShU
ZXh0dXJlTWFwcGVyR0wqIHRleHR1cmVNYXBwZXIpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKHRleHR1
cmVNYXBwZXIpKTsKICAgICB9CiAKIHByb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNpbXBsZShUZXh0dXJlTWFwcGVyR0wqKTsKK3ByaXZhdGU6CiAgICAgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1TaW1wbGUoKTsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdFNpbXBsZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1SZWN0U2ltcGxlPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZT4gY3JlYXRlKFRleHR1cmVNYXBwZXJHTCogdGV4dHVy
ZU1hcHBlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1SZWN0U2ltcGxlKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSh0ZXh0dXJlTWFwcGVyKSk7CiAg
ICAgfQogCitwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2lt
cGxlKFRleHR1cmVNYXBwZXJHTCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVJlY3RTaW1wbGUoKTsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtT3BhY2l0eUFuZE1hc2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
T3BhY2l0eUFuZE1hc2s+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gY3JlYXRlKFRleHR1cmVNYXBwZXJHTCog
dGV4dHVyZU1hcHBlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKHRleHR1
cmVNYXBwZXIpKTsKICAgICB9CiAKK3Byb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbU9wYWNpdHlBbmRNYXNrKFRleHR1cmVNYXBwZXJHTCopOwogcHJpdmF0ZToKICAgICBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCk7CiB9OwogCiBjbGFzcyBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayA6IHB1YmxpYyBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s+IGNyZWF0ZSgpCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0
eUFuZE1hc2s+IGNyZWF0ZShUZXh0dXJlTWFwcGVyR0wqIHRleHR1cmVNYXBwZXIpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVj
dE9wYWNpdHlBbmRNYXNrKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKHRleHR1cmVNYXBwZXIpKTsKICAg
ICB9CiAKK3Byb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFj
aXR5QW5kTWFzayhUZXh0dXJlTWFwcGVyR0wqKTsKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soKTsKIH07CiAKIGNsYXNzIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1Tb2xpZENvbG9yPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4gY3JlYXRlKFRleHR1cmVNYXBwZXJH
TCogdGV4dHVyZU1hcHBlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKCkpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcih0ZXh0dXJlTWFw
cGVyKSk7CiAgICAgfQogCi0gICAgR0xpbnQgY29sb3JMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fY29sb3JMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgY29sb3JMb2NhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fY29sb3JMb2NhdGlvbjsgfQogCitwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1Tb2xpZENvbG9yKFRleHR1cmVNYXBwZXJHTCopOwogcHJpdmF0ZToKICAg
ICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoKTsKLSAgICBHTGludCBtX2Nv
bG9yTG9jYXRpb247CisgICAgR0MzRGludCBtX2NvbG9yTG9jYXRpb247CiB9OwogCiBjbGFzcyBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayA6IHB1YmxpYyBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s+IGNyZWF0ZSgpCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNp
bmdOb01hc2s+IGNyZWF0ZShUZXh0dXJlTWFwcGVyR0wqIHRleHR1cmVNYXBwZXIpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50
aWFsaWFzaW5nTm9NYXNrKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKHRleHR1cmVNYXBwZXIpKTsKICAg
ICB9CiAKLSAgICBHTGludCBleHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvb3JkaW5hdGVz
TG9jYXRpb24oKSB7IHJldHVybiBtX2V4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29yZGlu
YXRlc0xvY2F0aW9uOyB9Ci0gICAgR0xpbnQgZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNl
TG9jYXRpb24oKSB7IHJldHVybiBtX2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0
aW9uOyB9CisgICAgR0MzRGludCBleHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvb3JkaW5h
dGVzTG9jYXRpb24oKSB7IHJldHVybiBtX2V4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29y
ZGluYXRlc0xvY2F0aW9uOyB9CisgICAgR0MzRGludCBleHBhbmRlZFF1YWRFZGdlc0luU2NyZWVu
U3BhY2VMb2NhdGlvbigpIHsgcmV0dXJuIG1fZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNl
TG9jYXRpb247IH0KIAorcHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
QW50aWFsaWFzaW5nTm9NYXNrKFRleHR1cmVNYXBwZXJHTCopOwogcHJpdmF0ZToKICAgICBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaygpOwogCi0gICAgR0xpbnQg
bV9leHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvcmRpbmF0ZXNMb2NhdGlvbjsKLSAgICBH
TGludCBtX2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uOworICAgIEdDM0Rp
bnQgbV9leHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvcmRpbmF0ZXNMb2NhdGlvbjsKKyAg
ICBHQzNEaW50IG1fZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb247CiB9Owog
CiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlciB7CkBAIC0yMDYsNyArMjIyLDggQEAg
cHVibGljOgogICAgICAgICBTb2xpZENvbG9yCiAgICAgfTsKIAotICAgIFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyKCk7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKSB7IH07Cisg
ICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoVGV4dHVyZU1hcHBlckdMKik7CiAgICAgdmly
dHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKTsKIAogI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKQEAgLTIyMSwxMiArMjM4LDEyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdHlwZWRl
ZiBIYXNoTWFwPFNoYWRlclR5cGUsIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4s
IERlZmF1bHRIYXNoPGludD46Okhhc2gsIEhhc2hUcmFpdHM8aW50PiA+IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtTWFwOwogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwIG1fdGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7CisgICAgVGV4dHVyZU1hcHBlckdMKiBtX3RleHR1
cmVNYXBwZXI7CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgdHlwZWRlZiBIYXNoTWFw
PGludCwgUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gPiBGaWx0ZXJNYXA7CiAgICAgRmls
dGVyTWFwIG1fZmlsdGVyTWFwOwogI2VuZGlmCi0KIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153684</attachid>
            <date>2012-07-21 23:38:27 -0700</date>
            <delta_ts>2012-07-23 16:43:45 -0700</delta_ts>
            <desc>Fix Qt4, implement comments #8 #14</desc>
            <filename>bug-78672-20120721233821.patch</filename>
            <type>text/plain</type>
            <size>110874</size>
            <attacher name="Helder Correia">helder.correia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODgyNmYzMjk2YTVjZmNj
MTYyZDY1NGE1OTFjOGQ2NmIzNDRkMjIxNy4uZjYyODNiZTA0NWE1OThmOTM1YzY3NTdmNjY1ZjYz
MjdjMzk5NGY1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MSBAQAorMjAxMi0wNy0yMSAgSGVs
ZGVyIENvcnJlaWEgIDxoZWxkZXIuY29ycmVpYUBub2tpYS5jb20+CisKKyAgICAgICAgW1RleG1h
cF0gTW92ZSBUZXh0dXJlTWFwcGVyR0wgdG8gdXNlIEdyYXBoaWNzQ29udGV4dDNECisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODY3MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRleHR1cmVNYXBwZXJHTCAo
VE1HTCkgaW5jbHVkZXMgZGlyZWN0IEdMIGNhbGxzIGFuZAorICAgICAgICBHcmFwaGljc0NvbnRl
eHQzRCAoR0MzRCkgb2ZmZXJzIG1hbnkgY29udmVuaWVuY2VzIG92ZXIgdGhlCisgICAgICAgIGZv
cm1lciBhcHByb2FjaDogdXNpbmcgZXhpc3RpbmcgQ1NTIHNoYWRlciBjb2RlLCBBTkdMRSBmb3IK
KyAgICAgICAgc2hhZGVyIGNvbXBpbGF0aW9uLCByZXVzaW5nIFdlYkNvcmU6OlRleHR1cmUsIGhh
dmluZyBzaGFkZXJzIGFuZAorICAgICAgICB0ZXh0dXJlcyB0aGF0IGNhbiBkZWxldGUgdGhlbXNl
bHZlcy4KKworICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMgdGhlIGJhY2tlbmQgb2YgVE1HTCB0
byBHQzNELiBJdCB3YXMgaW5pdGlhbGx5CisgICAgICAgIHRob3VnaHQgdG8gaW50cm9kdWNlIGEg
bmV3IGJhY2tlbmQgKHNheSwgVGV4dHVyZU1hcHBlckdDM0QpLCBidXQKKyAgICAgICAgaW4gdGhl
IGVuZCBpdCB3YXMgYWdyZWVkIHRvIGNvbnNvbGlkYXRlIGl0IGluc2lkZSBUTUdMIGluc3RlYWQs
CisgICAgICAgIGFzIGFuIGFkZGl0aW9uYWwgVGV4dHVyZU1hcHBlciBzdWJjbGFzcyB3b3VsZCBn
ZXQgc3RhbGUgdmVyeQorICAgICAgICBxdWlja2x5LgorCisgICAgICAgIEEgR0MzRCBvYmplY3Qg
aXMgY3JlYXRlZCBieSBUTUdMIHdpdGggdGhlCisgICAgICAgIFJlbmRlckRpcmVjdGx5VG9Ib3N0
V2luZG93IGZsYWcuIEFkZGl0aW9uYWwgbG9naWMgd2FzIGludHJvZHVjZWQKKyAgICAgICAgdG8g
UXQncyBHQzNEIGluIG9yZGVyIHRvIGhhbmRsZSB0aGlzIHNpdHVhdGlvbiBhbmQgbWFrZSBpdCB1
c2UKKyAgICAgICAgdGhlIGN1cnJlbnQgY29udGV4dC4KKworICAgICAgICBUTUdMJ3MgZGVwZW5k
ZW5jeSBvbiBPcGVuR0xTaGltcy5oIHdhcyBjb21wbGV0ZWx5IHJlbW92ZWQuCisgICAgICAgIEhv
d2V2ZXIsIEdDM0QgZG9lcyBub3QgbWFwIGV2ZXJ5IHNpbmdsZSBHTCBjb25zdGFudC4gVGh1cywg
aXQncworICAgICAgICBpbXBvcnRhbnQgdG8gZG9jdW1lbnQgdGhlIGZvbGxvd2luZyBub3RlczoK
KyAgICAgICAgICAgIC0gR0xfRkFMU0Ugd2FzIG1hcHBlZCB0byBmYWxzZS4KKyAgICAgICAgICAg
IC0gR0xfVU5QQUNLX1JPV19MRU5HVEgsIEdMX1VOUEFDS19TS0lQX1BJWEVMUywKKyAgICAgICAg
ICAgIEdMX1VOUEFDS19TS0lQX1JPV1MsIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgYW5kCisg
ICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYgd2VyZSBsb2NhbGx5IGRlZmlu
ZWQgaW4gVE1HTC4KKworICAgICAgICBBIG5ldyBHQzNEOjp0ZXhJbWFnZTJERGlyZWN0KCkgZnVu
Y3Rpb24gd2FzIGludHJvZHVjZWQgdG8gYWxsb3cKKyAgICAgICAgaW5pdGlhbGl6YXRpb24gb2Yg
dGV4dHVyZXMgd2l0aG91dCBhbGxvY2F0aW9uLiBUaGUgZXhpc3RpbmcKKyAgICAgICAgdGV4dElt
YWdlMkQoKSByZWZ1c2VzIGEgbnVsbCBwaXhlbCBidWZmZXIsIGFuZAorICAgICAgICB0ZXhJbWFn
ZTJEUmVzb3VyY2VTYWZlKCkgYWxsb3dzIGl0IGJ1dCBwZXJmb3JtcyBtZW1vcnkKKyAgICAgICAg
YWxsb2NhdGlvbiBhbmQgemVyb2VzIHRoZSBiaXRzLiBUaGlzIHdhcyBub3QgZmFzdCBlbm91Z2gg
Zm9yCisgICAgICAgIEJpdG1hcFRleHR1cmVHTCBmcmVxdWVudCBzZXR0aW5nIHVwLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBpcyBhIHJlZmFjdG9yaW5nLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKEdyYXBoaWNzQ29u
dGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRl
eEltYWdlMkQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dGV4SW1hZ2UyRERpcmVjdCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAg
IChHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoU2hhcmVkR0xEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6
Y3VycmVudFNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xE
YXRhOjpTaGFyZWRHTERhdGE6OlNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0xEYXRhOjpzaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMRGF0YTo6VGV4dHVyZU1hcHBlckdMRGF0YSk6CisgICAgICAgIChUZXh0dXJlTWFw
cGVyR0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnNjaXNzb3JDbGlwKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjphcHBseSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjppbml0aWFsaXplU3RlbmNpbCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjplbmRQYWludGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OmRyYXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6
ZHJhd0JvcmRlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVSZWN0YW5nbGVBUkIpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjp2aWV3cG9y
dE1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJl
V2l0aEFudGlhbGlhc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRy
YXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0
dXJlR0w6OmRpZFJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6dXBk
YXRlQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3Rmls
dGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjppbml0aWFsaXplU3Rl
bmNpbCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmNsZWFySWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpjcmVhdGVGYm9JZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmJpbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwVGV4dHVyZUdMOjp+Qml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJHTDo6YmluZERlZmF1bHRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJHTDo6YmVnaW5TY2lzc29yQ2xpcCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OmVuZENsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpj
cmVhdGVUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmdyYXBoaWNz
Q29udGV4dDNEKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChDbGlwU3Rh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjp0ZXh0dXJlVGFyZ2V0KToK
KyAgICAgICAgKEJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0
dXJlR0w6OkJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjppbml0aWFsaXplUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1T
aW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1Tb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2lt
cGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0
eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1h
c2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNr
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp+U3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJv
Z3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJk
RmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVy
UHJvZ3JhbTo6cHJlcGFyZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6Z2V0U2hhZGVyRm9yRmlsdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6dmVydGV4QXR0cmliKToKKyAgICAgICAgKFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjptYXRyaXhMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6ZmxpcExvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp0ZXh0dXJlU2l6ZUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzb3VyY2VUZXh0dXJlTG9jYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Om1hc2tUZXh0
dXJlTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06Om9wYWNpdHlMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChTdGFuZGFyZEZp
bHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp2
ZXJ0ZXhBdHRyaWIpOgorICAgICAgICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp0
ZXhDb29yZEF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dyYW06
OnRleHR1cmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU2ltcGxlOjpjcmVhdGUpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1TaW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1S
ZWN0U2ltcGxlOjpjcmVhdGUpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1S
ZWN0U2ltcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
T3BhY2l0eUFuZE1hc2s6OmNyZWF0ZSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbU9wYWNpdHlBbmRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpjcmVhdGUpOgorICAgICAgICAoVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpjb2xvckxvY2F0
aW9uKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05v
TWFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtQW50aWFsaWFzaW5nTm9NYXNrOjpleHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvb3Jk
aW5hdGVzTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OmV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxv
Y2F0aW9uKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5n
Tm9NYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcik6CisKIDIwMTItMDctMjAgIERhdmlkIEdyb2dhbiAgPGRncm9nYW5AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIEluZGV4ZWREQjogSW5jbHVkZSBpbnRWZXJzaW9uIHdoZW4gY29udmVy
dGluZyBiZXR3ZWVuIFdlYkNvcmUgYW5kIFdlYktpdCBJREJNZXRhZGF0YSB0eXBlcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgK
aW5kZXggNzQzM2RmNjI2ZjRjYWIyYWNjNmNhMDk4YTYyODBkNDhkNDlhMmIxOS4uN2JjZDhhMTc1
OWRjNjZiZDgwMTVkNTRjZGU1ZWM0OWNhNTI1OWRiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC01MjksNiArNTI5
LDkgQEAgcHVibGljOgogICAgIHZvaWQgcHJlcGFyZVRleHR1cmUoKTsKICNlbmRpZgogCisgICAg
Ly8gRXF1aXZhbGVudCB0byA6OmdsVGV4SW1hZ2UyRCgpLiBBbGxvd3MgcGl4ZWxzPT0wIHdpdGgg
bm8gYWxsb2NhdGlvbi4KKyAgICB2b2lkIHRleEltYWdlMkREaXJlY3QoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOworCiAgICAgLy8gSGVscGVyIHRvIHRleElt
YWdlMkQgd2l0aCBwaXhlbD09MCBjYXNlOiBwaXhlbHMgYXJlIGluaXRpYWxpemVkIHRvIDAuCiAg
ICAgLy8gUmV0dXJuIHRydWUgaWYgbm8gR0wgZXJyb3IgaXMgc3ludGhlc2l6ZWQuCiAgICAgLy8g
QnkgZGVmYXVsdCwgYWxpZ25tZW50IGlzIDQsIHRoZSBPcGVuR0wgZGVmYXVsdCBzZXR0aW5nLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKaW5kZXggZmQ0NTAxNDFjNzRkZGEz
YjQ5ZTg5NTc4NTljYmEyYjkwYTgzN2Y1Mi4uOThlMTE0NWIzZGIyNGU1MWQ3Yjc1ZmQwNjcwOGZm
YWUyNTZhZWIxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCkBAIC0y
NTYsNyArMjU2LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKICAgICBHQzNEZW51bSBvcGVuR0xJbnRlcm5hbEZv
cm1hdCA9IGludGVybmFsZm9ybWF0OwogICAgIGlmICh0eXBlID09IEdMX0ZMT0FUKSB7CiAgICAg
ICAgIGlmIChmb3JtYXQgPT0gR0xfUkdCQSkKQEAgLTI2NSw3ICsyNjUsNyBAQCBib29sIEdyYXBo
aWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZQogICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9SR0Iz
MkZfQVJCOwogICAgIH0KIAotICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIG9wZW5H
TEludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4
ZWxzKTsKKyAgICB0ZXhJbWFnZTJERGlyZWN0KHRhcmdldCwgbGV2ZWwsIG9wZW5HTEludGVybmFs
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5H
TENvbW1vbi5jcHAKaW5kZXggYTRkMWViNGNkOTNjNDc2MzM2YzAyZjYxM2JmYzY1OTQ0ZDI4NmNi
OC4uOGEyNmFlY2ViYzgwODg4NzY4OTkyODI1MDQ4Zjc0NWNiZjk2ZmUxNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCkBAIC0xMzgyLDYgKzEzODIs
MTIgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKCkgY29uc3QKICAg
ICByZXR1cm4gbV9sYXllckNvbXBvc2l0ZWQ7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnRleEltYWdlMkREaXJlY3QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
aW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBw
aXhlbHMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFRleEltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9y
bWF0LCB0eXBlLCBwaXhlbHMpOworfQorCiB9CiAKICNlbmRpZiAvLyBVU0UoM0RfR1JBUEhJQ1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKaW5kZXggNzlkZGNiYmZk
OWE0YjU1ZWM4MjZlNDFiNTk1ZWVmODRlNjRkOWQwMy4uNTI4MWVjZmMzZTRlY2ZiOTdjMDczMzg5
OWQ3NDRmZjVjYTA5ZjI2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVT
LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2lmIFVTRSgzRF9HUkFQSElDUykKIAogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCisKICNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCkBAIC0yMzAsOCAr
MjMxLDggQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMp
OworCisgICAgdGV4SW1hZ2UyRERpcmVjdCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKaW5kZXggODk1Zjc2Njg4MDM5ZTgxZjJm
NzBiZmFkODAwNWYwNzdiZGU1MWQxOC4uNzI1YWNkZWIwNTE0M2NjZGIzNzQwYjgzNzE4MzUyMTJm
ODI3MmQ0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgY2xhc3Mg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlCiAjZW5kaWYKIHsKIHB1YmxpYzoKLSAgICBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBIb3N0V2luZG93Kik7CisgICAg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgSG9zdFdpbmRvdyos
IGJvb2wgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwogICAgIH5HcmFwaGljc0NvbnRleHQz
RFByaXZhdGUoKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTc3LDYg
Kzc3LDggQEAgcHVibGljOgogICAgIHZvaWQgYmxpdE11bHRpc2FtcGxlRnJhbWVidWZmZXIoKSBj
b25zdDsKICAgICB2b2lkIGJsaXRNdWx0aXNhbXBsZUZyYW1lYnVmZmVyQW5kUmVzdG9yZUNvbnRl
eHQoKSBjb25zdDsKICAgICBib29sIG1ha2VDdXJyZW50SWZOZWVkZWQoKSBjb25zdDsKKyAgICB2
b2lkIGNyZWF0ZUNhbnZhc0ZCT0J1ZmZlcnMoKTsKKyAgICB2b2lkIGluaXRpYWxpemVBTkdMRSgp
OwogICAgIHZvaWQgY3JlYXRlR3JhcGhpY3NTdXJmYWNlcyhjb25zdCBJbnRTaXplJik7CiAKICAg
ICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwpAQCAtMTA2LDcgKzEwOCw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCiB9CiAjZW5kaWYKIAot
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCitHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5kZXJEaXJlY3RseVRv
SG9zdFdpbmRvdykKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9ob3N0V2luZG93
KGhvc3RXaW5kb3cpCiAgICAgLCBtX3N1cmZhY2UoMCkKQEAgLTEyMyw2ICsxMjUsMTggQEAgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIEgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmIChy
ZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykgeworICAgICAgICAvLyBXZSdyZSBub3Qgc2V0dGlu
ZyB1cCBXZWJHTCBhbmQgd2FudCB0byByZWx5IG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtIGNvbnRl
eHQuCisjaWYgSEFWRShRVDUpCisgICAgICAgIG1fcGxhdGZvcm1Db250ZXh0ID0gUU9wZW5HTENv
bnRleHQ6OmN1cnJlbnRDb250ZXh0KCk7CisgICAgICAgIG1fc3VyZmFjZSA9IG1fcGxhdGZvcm1D
b250ZXh0LT5zdXJmYWNlKCk7CisjZWxzZQorICAgICAgICBtX3BsYXRmb3JtQ29udGV4dCA9IGNv
bnN0X2Nhc3Q8UUdMQ29udGV4dCo+KFFHTENvbnRleHQ6OmN1cnJlbnRDb250ZXh0KCkpOworICAg
ICAgICBtX3N1cmZhY2UgPSBzdGF0aWNfY2FzdDxRR0xXaWRnZXQqPihtX3BsYXRmb3JtQ29udGV4
dC0+ZGV2aWNlKCkpOworI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgICB9CisKICNpZiBVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkKICAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byBjcmVhdGUgYSBR
T3BlbkdMQ29udGV4dCB3aXRob3V0IGNyZWF0aW5nIGEgUVdpbmRvdyBhdCBhbGwuCiAgICAgLy8g
V2UgbmVlZCB0byBjcmVhdGUgYSBzdXJmYWNlIGluIG9yZGVyIHRvIGNyZWF0ZSBhIFFPcGVuR0xD
b250ZXh0IGFuZCBtYWtlIGl0IGN1cnJlbnQuCkBAIC0yOTYsNiArMzEwLDU5IEBAIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlQ3VycmVudElmTmVlZGVkKCkgY29uc3QKICNlbmRp
ZgogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlQ2FudmFzRkJPQnVm
ZmVycygpCit7CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoLyogY291bnQgKi8gMSwgJm1fY29udGV4
dC0+bV9mYm8pOworCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb250ZXh0LT5tX3RleHR1cmUp
OworICAgIGdsQmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29u
dGV4dC0+bV90ZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBo
aWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyZihHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Ms
IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmko
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGdsQmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOworCisgICAgLy8gQ3JlYXRl
IGEgbXVsdGlzYW1wbGUgRkJPLgorICAgIGlmIChtX2NvbnRleHQtPm1fYXR0cnMuYW50aWFsaWFz
KSB7CisgICAgICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2NvbnRleHQtPm1fbXVsdGlzYW1w
bGVGQk8pOworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG1fY29udGV4dC0+bV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIG1fY29udGV4
dC0+bV9ib3VuZEZCTyA9IG1fY29udGV4dC0+bV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgZ2xH
ZW5SZW5kZXJidWZmZXJzKDEsICZtX2NvbnRleHQtPm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7
CisgICAgICAgIGlmIChtX2NvbnRleHQtPm1fYXR0cnMuc3RlbmNpbCB8fCBtX2NvbnRleHQtPm1f
YXR0cnMuZGVwdGgpCisgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fY29udGV4
dC0+bV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gQmluZCBjYW52YXMgRkJPLgorICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fY29udGV4dC0+bV9mYm8pOworICAgICAgICBtX2Nv
bnRleHQtPm1fYm91bmRGQk8gPSBtX2NvbnRleHQtPm1fZmJvOworI2lmIFVTRShPUEVOR0xfRVNf
MikKKyAgICAgICAgaWYgKG1fY29udGV4dC0+bV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIGds
R2VuUmVuZGVyYnVmZmVycygxLCAmbV9jb250ZXh0LT5tX2RlcHRoQnVmZmVyKTsKKyAgICAgICAg
aWYgKG1fY29udGV4dC0+bV9hdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgZ2xHZW5SZW5kZXJi
dWZmZXJzKDEsICZtX2NvbnRleHQtPm1fc3RlbmNpbEJ1ZmZlcik7CisjZW5kaWYKKyAgICAgICAg
aWYgKG1fY29udGV4dC0+bV9hdHRycy5zdGVuY2lsIHx8IG1fY29udGV4dC0+bV9hdHRycy5kZXB0
aCkKKyAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9jb250ZXh0LT5tX2RlcHRo
U3RlbmNpbEJ1ZmZlcik7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6aW5pdGlhbGl6ZUFOR0xFKCkKK3sKKyAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNv
dXJjZXM7CisgICAgU2hJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJjZXMpOworCisg
ICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9B
VFRSSUJTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7CisgICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RP
UlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7CisgICAgbV9jb250
ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUywg
JkFOR0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKKyAgICBtX2NvbnRleHQtPmdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMs
ICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgbV9jb250
ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVf
SU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
KTsgCisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RF
WFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0cyk7
CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdN
RU5UX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZl
Y3RvcnMpOworCisgICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVuR0wgRVMuCisgICAgQU5H
TEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOworICAgIG1fY29udGV4dC0+bV9jb21waWxl
ci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NTdXJmYWNlcyhjb25zdCBJbnRTaXplJiBzaXplKQog
ewogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQpAQCAtMzExLDE0ICszNzgsMTIgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMoY29uc3QgSW50
U2l6ZSYgc2l6ZSkKIAogUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdp
bmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0
eWxlKQogewotICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lc24ndCBjdXJyZW50bHkgc3Vw
cG9ydCByZW5kZXJpbmcgZGlyZWN0bHkgdG8gdGhlIEhvc3RXaW5kb3cuCi0gICAgaWYgKHJlbmRl
clN0eWxlID09IFJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQotICAgICAgICByZXR1cm4gMDsK
LSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3Jh
cGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3csIGZhbHNlKSk7CisgICAgYm9vbCByZW5k
ZXJEaXJlY3RseVRvSG9zdFdpbmRvdyA9IChyZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRv
SG9zdFdpbmRvdyk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRv
cHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCByZW5kZXJEaXJl
Y3RseVRvSG9zdFdpbmRvdykpOwogICAgIHJldHVybiBjb250ZXh0LT5tX3ByaXZhdGUgPyBjb250
ZXh0LnJlbGVhc2UoKSA6IDA7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRl
eHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdywgYm9vbCkKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywg
Ym9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKICAgICA6IG1fY3VycmVudFdpZHRoKDAp
CiAgICAgLCBtX2N1cnJlbnRIZWlnaHQoMCkKICAgICAsIG1fY29tcGlsZXIoaXNHTEVTMkNvbXBs
aWFudCgpID8gU0hfRVNTTF9PVVRQVVQgOiBTSF9HTFNMX09VVFBVVCkKQEAgLTMzOSw3ICs0MDQs
NyBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0
M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQogICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQog
ICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQogICAgICwgbV9tdWx0aXNh
bXBsZUNvbG9yQnVmZmVyKDApCi0gICAgLCBtX3ByaXZhdGUoYWRvcHRQdHIobmV3IEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZSh0aGlzLCBob3N0V2luZG93KSkpCisgICAgLCBtX3ByaXZhdGUoYWRv
cHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSh0aGlzLCBob3N0V2luZG93LCByZW5k
ZXJEaXJlY3RseVRvSG9zdFdpbmRvdykpKQogewogICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwog
CkBAIC0zNjAsNTQgKzQyNSwxMSBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0
M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgLy8gQ3JlYXRlIGJ1ZmZlcnMgZm9yIHRoZSBjYW52YXMgRkJP
LgotICAgIGdsR2VuRnJhbWVidWZmZXJzKC8qIGNvdW50ICovIDEsICZtX2Zibyk7Ci0KLSAgICBn
bEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAgIGdsQmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9N
QUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRl
cmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgIGdsVGV4UGFy
YW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAg
Z2xUZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdF
KTsKLSAgICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsK
LQotICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KLSAgICBpZiAobV9hdHRycy5hbnRp
YWxpYXMpIHsKLSAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8p
OwotICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICBtX2JvdW5kRkJPID0gbV9tdWx0aXNhbXBs
ZUZCTzsKLSAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JC
dWZmZXIpOwotICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCi0g
ICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5j
aWxCdWZmZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEJpbmQgY2FudmFzIEZCTy4KLSAg
ICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBt
X2Zibyk7Ci0gICAgICAgIG1fYm91bmRGQk8gPSBtX2ZibzsKLSNpZiBVU0UoT1BFTkdMX0VTXzIp
Ci0gICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQotICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZm
ZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKLSAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKLSAg
ICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKLSNlbmRp
ZgotICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCi0gICAgICAg
ICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9
Ci0KLSAgICAvLyBBTkdMRSBpbml0aWFsaXphdGlvbi4KLSAgICBTaEJ1aWx0SW5SZXNvdXJjZXMg
QU5HTEVSZXNvdXJjZXM7Ci0gICAgU2hJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJj
ZXMpOworICAgIGlmICghcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCisgICAgICAgIC8vIFdl
YkdMIGlzIHRoZSBjbGllbnQuCisgICAgICAgIG1fcHJpdmF0ZS0+Y3JlYXRlQ2FudmFzRkJPQnVm
ZmVycygpOwogCi0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhf
QVRUUklCUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOwotICAgIGdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xF
UmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFw
aGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZh
cnlpbmdWZWN0b3JzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVy
ZUltYWdlVW5pdHMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09N
QklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4
dHVyZUltYWdlVW5pdHMpOyAKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0
cyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklG
T1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsK
LQotICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgotICAgIEFOR0xFUmVzb3Vy
Y2VzLk1heERyYXdCdWZmZXJzID0gMTsKLSAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhBTkdM
RVJlc291cmNlcyk7CisgICAgbV9wcml2YXRlLT5pbml0aWFsaXplQU5HTEUoKTsKIAogI2lmICFV
U0UoT1BFTkdMX0VTXzIpCiAgICAgZ2xFbmFibGUoR0xfUE9JTlRfU1BSSVRFKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHTC5jcHAKaW5kZXggNjg4ZTI2ZjRlODlmZmYxM2RlNWIzZDU3OWM4MjBhOTM1ZWY5MTcy
Yy4uYTgxYTRmZjA4NWE4YWI2NzIyYmIxYzY1Nzc5M2ZhMzM3OWJkNGQ3OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHTC5jcHAKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wu
aCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgiCkBAIC0zOSw5MSArMzgs
NDIgQEAKIAogI2lmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlUXQuaCIKLSNp
ZiBIQVZFKFFUNSkKLSNpbmNsdWRlIDxRT3BlbkdMQ29udGV4dD4KLSNlbHNlCi0jaW5jbHVkZSA8
UUdMQ29udGV4dD4KLSNlbmRpZiAvLyBRVF9WRVJTSU9OCi0jZWxpZiBPUyhXSU5ET1dTKQotI2lu
Y2x1ZGUgPHdpbmRvd3MuaD4KLSNlbGlmIE9TKE1BQ19PU19YKQotI2luY2x1ZGUgPEFHTC9hZ2wu
aD4KLSNlbGlmIGRlZmluZWQoWFBfVU5JWCkKLSNpbmNsdWRlIDxHTC9nbHguaD4KICNlbmRpZgog
Ci0jZGVmaW5lIEdMX0NNRCguLi4pIGRvIHsgX19WQV9BUkdTX187IEFTU0VSVF9BUkcoX19WQV9B
UkdTX18sICFnbEdldEVycm9yKCkpOyB9IHdoaWxlICgwKQorI2lmICFVU0UoVEVYTUFQX09QRU5H
TF9FU18yKQorLy8gRklYTUU6IE1vdmUgdG8gRXh0ZW5zaW9uczNELmguCisjZGVmaW5lIEdMX1RF
WFRVUkVfUkVDVEFOR0xFX0FSQiAweDg0RjUKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UXzhfOF84
XzhfUkVWIDB4ODM2NworI2RlZmluZSBHTF9VTlBBQ0tfUk9XX0xFTkdUSCAweDBDRjIKKyNkZWZp
bmUgR0xfVU5QQUNLX1NLSVBfUElYRUxTIDB4MENGNAorI2RlZmluZSBHTF9VTlBBQ0tfU0tJUF9S
T1dTIDB4MENGMworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0cnVjdCBUZXh0dXJl
TWFwcGVyR0xEYXRhIHsKICAgICBzdHJ1Y3QgU2hhcmVkR0xEYXRhIDogcHVibGljIFJlZkNvdW50
ZWQ8U2hhcmVkR0xEYXRhPiB7Ci0jaWYgUExBVEZPUk0oUVQpCi0jaWYgUVRfVkVSU0lPTiA+PSAw
eDA1MDAwMAotICAgICAgICB0eXBlZGVmIFFPcGVuR0xDb250ZXh0KiBHTENvbnRleHQ7Ci0gICAg
ICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdMQ29udGV4dCgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBRT3BlbkdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKTsKLSAgICAg
ICAgfQotI2Vsc2UKLSAgICAgICAgdHlwZWRlZiBjb25zdCBRR0xDb250ZXh0KiBHTENvbnRleHQ7
Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdMQ29udGV4dCgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBRR0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgpOwotICAg
ICAgICB9Ci0jZW5kaWYKLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgICAgIHR5cGVkZWYgSEdMUkMg
R0xDb250ZXh0OwotICAgICAgICBzdGF0aWMgR0xDb250ZXh0IGdldEN1cnJlbnRHTENvbnRleHQo
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gd2dsR2V0Q3VycmVudENvbnRleHQoKTsK
LSAgICAgICAgfQotI2VsaWYgT1MoTUFDX09TX1gpCi0gICAgICAgIHR5cGVkZWYgQUdMQ29udGV4
dCBHTENvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdMQ29udGV4
dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZ2xHZXRDdXJyZW50Q29udGV4dCgp
OwotICAgICAgICB9Ci0jZWxpZiBkZWZpbmVkKFhQX1VOSVgpCi0gICAgICAgIHR5cGVkZWYgR0xY
Q29udGV4dCBHTENvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdM
Q29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbFhHZXRDdXJyZW50Q29u
dGV4dCgpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICAvLyBEZWZhdWx0IGltcGxlbWVudGF0
aW9uIGZvciB1bmtub3duIG9wZW5nbC4KLSAgICAgICAgLy8gUmV0dXJucyBhbHdheXMgaW5jcmVh
c2luZyBudW1iZXIgYW5kIGRpc2FibGVzIEdMIGNvbnRleHQgZGF0YSBzaGFyaW5nLgotICAgICAg
ICB0eXBlZGVmIHVuc2lnbmVkIGludCBHTENvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRl
eHQgZ2V0Q3VycmVudEdMQ29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YXRpYyBH
TENvbnRleHQgZHVtbXlDb250ZXh0Q291bnRlciA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gKytk
dW1teUNvbnRleHRDb3VudGVyOwotICAgICAgICB9Ci0KLSNlbmRpZgotCi0gICAgICAgIHR5cGVk
ZWYgSGFzaE1hcDxHTENvbnRleHQsIFNoYXJlZEdMRGF0YSo+IEdMQ29udGV4dERhdGFNYXA7Cisg
ICAgICAgIHR5cGVkZWYgSGFzaE1hcDxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNELCBTaGFyZWRH
TERhdGEqPiBHTENvbnRleHREYXRhTWFwOwogICAgICAgICBzdGF0aWMgR0xDb250ZXh0RGF0YU1h
cCYgZ2xDb250ZXh0RGF0YU1hcCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0YXRpYyBHTENv
bnRleHREYXRhTWFwIG1hcDsKICAgICAgICAgICAgIHJldHVybiBtYXA7CiAgICAgICAgIH0KIAot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRHTERhdGE+IGN1cnJlbnRTaGFyZWRHTERh
dGEoKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRHTERhdGE+IGN1cnJlbnRTaGFy
ZWRHTERhdGEoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEdMQ29udGV4dCBjdXJyZW50R0xDb25leHQgPSBnZXRDdXJyZW50R0xDb250ZXh0KCk7Ci0g
ICAgICAgICAgICBHTENvbnRleHREYXRhTWFwOjppdGVyYXRvciBpdCA9IGdsQ29udGV4dERhdGFN
YXAoKS5maW5kKGN1cnJlbnRHTENvbmV4dCk7CisgICAgICAgICAgICBHTENvbnRleHREYXRhTWFw
OjppdGVyYXRvciBpdCA9IGdsQ29udGV4dERhdGFNYXAoKS5maW5kKGNvbnRleHQtPnBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QoKSk7CiAgICAgICAgICAgICBpZiAoaXQgIT0gZ2xDb250ZXh0RGF0
YU1hcCgpLmVuZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOwogCi0gICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZEdMRGF0YShnZXRDdXJyZW50R0xDb250
ZXh0KCkpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkR0xEYXRhKGNv
bnRleHQpKTsKICAgICAgICAgfQogCi0KLQogICAgICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlciB0ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjsKIAotICAgICAgICBTaGFyZWRHTERhdGEo
R0xDb250ZXh0IGdsQ29udGV4dCkKKyAgICAgICAgU2hhcmVkR0xEYXRhKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KQorICAgICAgICAgICAgOiB0ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcihj
b250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbENvbnRleHREYXRhTWFwKCkuYWRkKGds
Q29udGV4dCwgdGhpcyk7CisgICAgICAgICAgICBnbENvbnRleHREYXRhTWFwKCkuYWRkKGNvbnRl
eHQtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSwgdGhpcyk7CiAgICAgICAgIH0KIAogICAg
ICAgICB+U2hhcmVkR0xEYXRhKCkKQEAgLTE0MiwzMCArOTIsMzIgQEAgc3RydWN0IFRleHR1cmVN
YXBwZXJHTERhdGEgewogCiAgICAgU2hhcmVkR0xEYXRhJiBzaGFyZWRHTERhdGEoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuICoobV9zaGFyZWRHTERhdGEuZ2V0KCkpOworICAgICAgICBy
ZXR1cm4gKm1fc2hhcmVkR0xEYXRhOwogICAgIH0KIAogICAgIHZvaWQgaW5pdGlhbGl6ZVN0ZW5j
aWwoKTsKIAotICAgIFRleHR1cmVNYXBwZXJHTERhdGEoKQotICAgICAgICA6IFBhaW50RmxhZ3Mo
MCkKKyAgICBUZXh0dXJlTWFwcGVyR0xEYXRhKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQor
ICAgICAgICA6IGNvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBQYWludEZsYWdzKDApCiAgICAg
ICAgICwgcHJldmlvdXNQcm9ncmFtKDApCiAgICAgICAgICwgdGFyZ2V0RnJhbWVCdWZmZXIoMCkK
ICAgICAgICAgLCBkaWRNb2RpZnlTdGVuY2lsKGZhbHNlKQogICAgICAgICAsIHByZXZpb3VzU2Np
c3NvclN0YXRlKDApCiAgICAgICAgICwgcHJldmlvdXNEZXB0aFN0YXRlKDApCi0gICAgICAgICwg
bV9zaGFyZWRHTERhdGEoVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpjdXJyZW50
U2hhcmVkR0xEYXRhKCkpCisgICAgICAgICwgbV9zaGFyZWRHTERhdGEoVGV4dHVyZU1hcHBlckdM
RGF0YTo6U2hhcmVkR0xEYXRhOjpjdXJyZW50U2hhcmVkR0xEYXRhKHRoaXMtPmNvbnRleHQpKQog
ICAgIHsgfQogCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQ7CiAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggcHJvamVjdGlvbk1hdHJpeDsKICAgICBUZXh0dXJlTWFwcGVyOjpQYWludEZs
YWdzIFBhaW50RmxhZ3M7Ci0gICAgR0xpbnQgcHJldmlvdXNQcm9ncmFtOwotICAgIEdMaW50IHRh
cmdldEZyYW1lQnVmZmVyOworICAgIEdDM0RpbnQgcHJldmlvdXNQcm9ncmFtOworICAgIEdDM0Rp
bnQgdGFyZ2V0RnJhbWVCdWZmZXI7CiAgICAgYm9vbCBkaWRNb2RpZnlTdGVuY2lsOwotICAgIEdM
aW50IHByZXZpb3VzU2Npc3NvclN0YXRlOwotICAgIEdMaW50IHByZXZpb3VzRGVwdGhTdGF0ZTsK
LSAgICBHTGludCB2aWV3cG9ydFs0XTsKLSAgICBHTGludCBwcmV2aW91c1NjaXNzb3JbNF07Cisg
ICAgR0MzRGludCBwcmV2aW91c1NjaXNzb3JTdGF0ZTsKKyAgICBHQzNEaW50IHByZXZpb3VzRGVw
dGhTdGF0ZTsKKyAgICBHQzNEaW50IHZpZXdwb3J0WzRdOworICAgIEdDM0RpbnQgcHJldmlvdXNT
Y2lzc29yWzRdOwogICAgIFJlZlB0cjxTaGFyZWRHTERhdGE+IG1fc2hhcmVkR0xEYXRhOwogICAg
IFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBjdXJyZW50U3VyZmFjZTsKIH07CkBAIC0xODksMjUgKzE0
MSwyNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjpwb3AoKQogICAgIGNsaXBT
dGFjay5yZW1vdmVMYXN0KCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNjaXNzb3JDbGlwKGNvbnN0IElu
dFJlY3QmIHJlY3QpCitzdGF0aWMgdm9pZCBzY2lzc29yQ2xpcChHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAocmVjdC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEdMaW50IHZpZXdwb3J0WzRdOwotICAgIEdMX0NNRChn
bEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCB2aWV3cG9ydCkpOwotICAgIEdMX0NNRChnbFNjaXNz
b3IocmVjdC54KCksIHZpZXdwb3J0WzNdIC0gcmVjdC5tYXhZKCksIHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSkpOworICAgIEdDM0RpbnQgdmlld3BvcnRbNF07CisgICAgY29udGV4dC0+Z2V0
SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JULCB2aWV3cG9ydCk7CisgICAgY29u
dGV4dC0+c2Npc3NvcihyZWN0LngoKSwgdmlld3BvcnRbM10gLSByZWN0Lm1heFkoKSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OkNsaXBT
dGFjazo6YXBwbHkoKQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjazo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7Ci0gICAgc2Npc3NvckNsaXAoY2xpcFN0YXRlLnNj
aXNzb3JCb3gpOwotICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9LRUVQLCBHTF9LRUVQLCBHTF9L
RUVQKSk7Ci0gICAgR0xfQ01EKGdsU3RlbmNpbEZ1bmMoR0xfRVFVQUwsIGNsaXBTdGF0ZS5zdGVu
Y2lsSW5kZXggLSAxLCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSkpOworICAgIHNjaXNzb3JD
bGlwKGNvbnRleHQsIGNsaXBTdGF0ZS5zY2lzc29yQm94KTsKKyAgICBjb250ZXh0LT5zdGVuY2ls
T3AoR3JhcGhpY3NDb250ZXh0M0Q6OktFRVAsIEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQLCBHcmFw
aGljc0NvbnRleHQzRDo6S0VFUCk7CisgICAgY29udGV4dC0+c3RlbmNpbEZ1bmMoR3JhcGhpY3ND
b250ZXh0M0Q6OkVRVUFMLCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSwgY2xpcFN0YXRlLnN0
ZW5jaWxJbmRleCAtIDEpOwogICAgIGlmIChjbGlwU3RhdGUuc3RlbmNpbEluZGV4ID09IDEpCi0g
ICAgICAgIEdMX0NNRChnbERpc2FibGUoR0xfU1RFTkNJTF9URVNUKSk7CisgICAgICAgIGNvbnRl
eHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCk7CiAgICAgZWxzZQot
ICAgICAgICBHTF9DTUQoZ2xFbmFibGUoR0xfU1RFTkNJTF9URVNUKSk7CisgICAgICAgIGNvbnRl
eHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKTsKIH0KIAogCkBAIC0y
MjEsOCArMTczLDggQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0xEYXRhOjppbml0aWFsaXplU3RlbmNp
bCgpCiAgICAgaWYgKGRpZE1vZGlmeVN0ZW5jaWwpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdM
X0NNRChnbENsZWFyU3RlbmNpbCgwKSk7Ci0gICAgR0xfQ01EKGdsQ2xlYXIoR0xfU1RFTkNJTF9C
VUZGRVJfQklUKSk7CisgICAgY29udGV4dC0+Y2xlYXJTdGVuY2lsKDApOworICAgIGNvbnRleHQt
PmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOwogICAgIGRpZE1v
ZGlmeVN0ZW5jaWwgPSB0cnVlOwogfQogCkBAIC0yMzYsMTAgKzE4OCwxNCBAQCBCaXRtYXBUZXh0
dXJlR0wqIHRvQml0bWFwVGV4dHVyZUdMKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpCiAKIFRleHR1
cmVNYXBwZXJHTDo6VGV4dHVyZU1hcHBlckdMKCkKICAgICA6IFRleHR1cmVNYXBwZXIoT3BlbkdM
TW9kZSkKLSAgICAsIG1fZGF0YShuZXcgVGV4dHVyZU1hcHBlckdMRGF0YSkKICAgICAsIG1fY29u
dGV4dCgwKQogICAgICwgbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcoZmFsc2UpCiB7
CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlczsKKyAgICBhdHRy
aWJ1dGVzLmFudGlhbGlhcyA9IGZhbHNlOworICAgIGF0dHJpYnV0ZXMuZGVwdGggPSBmYWxzZTsK
KyAgICBtX2NvbnRleHQzRCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0cmlidXRlcywg
MCAvKiBob3N0V2luZG93ICovLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hv
c3RXaW5kb3cpOworICAgIG1fZGF0YSA9IG5ldyBUZXh0dXJlTWFwcGVyR0xEYXRhKG1fY29udGV4
dDNELmdldCgpKTsKIH0KIAogVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2smIFRleHR1cmVNYXBw
ZXJHTDo6Y2xpcFN0YWNrKCkKQEAgLTI0OSwxNSArMjA1LDkgQEAgVGV4dHVyZU1hcHBlckdMOjpD
bGlwU3RhY2smIFRleHR1cmVNYXBwZXJHTDo6Y2xpcFN0YWNrKCkKIAogdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyBmbGFncykKIHsKLSAgICAvLyBNYWtlIHN1
cmUgdGhhdCBubyBHTCBlcnJvciBjb2RlIHN0YXlzIGZyb20gcHJldmlvdXMgb3BlcmF0aW9ucy4K
LSAgICBnbEdldEVycm9yKCk7Ci0KLSAgICBpZiAoIWluaXRpYWxpemVPcGVuR0xTaGltcygpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9DVVJSRU5UX1BS
T0dSQU0sICZkYXRhKCkucHJldmlvdXNQcm9ncmFtKSk7Ci0gICAgZGF0YSgpLnByZXZpb3VzU2Np
c3NvclN0YXRlID0gZ2xJc0VuYWJsZWQoR0xfU0NJU1NPUl9URVNUKTsKLSAgICBkYXRhKCkucHJl
dmlvdXNEZXB0aFN0YXRlID0gZ2xJc0VuYWJsZWQoR0xfREVQVEhfVEVTVCk7CisgICAgbV9jb250
ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpDVVJSRU5UX1BST0dSQU0sICZk
YXRhKCkucHJldmlvdXNQcm9ncmFtKTsKKyAgICBkYXRhKCkucHJldmlvdXNTY2lzc29yU3RhdGUg
PSBtX2NvbnRleHQzRC0+aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Qp
OworICAgIGRhdGEoKS5wcmV2aW91c0RlcHRoU3RhdGUgPSBtX2NvbnRleHQzRC0+aXNFbmFibGVk
KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUKTsKICNpZiBQTEFURk9STShRVCkKICAgICBp
ZiAobV9jb250ZXh0KSB7CiAgICAgICAgIFFQYWludGVyKiBwYWludGVyID0gbV9jb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKTsKQEAgLTI2NSwxNSArMjE1LDE1IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpiZWdpblBhaW50aW5nKFBhaW50RmxhZ3MgZmxhZ3MpCiAgICAgICAgIHBhaW50ZXItPmJl
Z2luTmF0aXZlUGFpbnRpbmcoKTsKICAgICB9CiAjZW5kaWYKLSAgICBnbERpc2FibGUoR0xfREVQ
VEhfVEVTVCk7Ci0gICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBtX2NvbnRleHQz
RC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCk7CisgICAgbV9jb250ZXh0
M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKICAgICBkYXRhKCku
ZGlkTW9kaWZ5U3RlbmNpbCA9IGZhbHNlOwotICAgIEdMX0NNRChnbERlcHRoTWFzaygwKSk7Ci0g
ICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIGRhdGEoKS52aWV3cG9ydCkpOwot
ICAgIEdMX0NNRChnbEdldEludGVnZXJ2KEdMX1NDSVNTT1JfQk9YLCBkYXRhKCkucHJldmlvdXNT
Y2lzc29yKSk7Ci0gICAgZ2xHZXRJbnRlZ2VydihHTF9GUkFNRUJVRkZFUl9CSU5ESU5HLCAmZGF0
YSgpLnRhcmdldEZyYW1lQnVmZmVyKTsKKyAgICBtX2NvbnRleHQzRC0+ZGVwdGhNYXNrKDApOwor
ICAgIG1fY29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQs
IGRhdGEoKS52aWV3cG9ydCk7CisgICAgbV9jb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX0JPWCwgZGF0YSgpLnByZXZpb3VzU2Npc3Nvcik7CisgICAgbV9j
b250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5E
SU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKTsKICAgICBtX2NsaXBTdGFjay5pbml0KElu
dFJlY3QoMCwgMCwgZGF0YSgpLnZpZXdwb3J0WzJdLCBkYXRhKCkudmlld3BvcnRbM10pKTsKLSAg
ICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9GUkFNRUJVRkZFUl9CSU5ESU5HLCAmZGF0YSgpLnRh
cmdldEZyYW1lQnVmZmVyKSk7CisgICAgbV9jb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5ESU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVy
KTsKICAgICBkYXRhKCkuUGFpbnRGbGFncyA9IGZsYWdzOwogICAgIGJpbmRTdXJmYWNlKDApOwog
fQpAQCAtMjgxLDIyICsyMzEsMjIgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRp
bmcoUGFpbnRGbGFncyBmbGFncykKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjplbmRQYWludGluZygp
CiB7CiAgICAgaWYgKGRhdGEoKS5kaWRNb2RpZnlTdGVuY2lsKSB7Ci0gICAgICAgIGdsQ2xlYXJT
dGVuY2lsKDEpOwotICAgICAgICBnbENsZWFyKEdMX1NURU5DSUxfQlVGRkVSX0JJVCk7CisgICAg
ICAgIG1fY29udGV4dDNELT5jbGVhclN0ZW5jaWwoMSk7CisgICAgICAgIG1fY29udGV4dDNELT5j
bGVhcihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKTsKICAgICB9CiAKLSAg
ICBnbFVzZVByb2dyYW0oZGF0YSgpLnByZXZpb3VzUHJvZ3JhbSk7CisgICAgbV9jb250ZXh0M0Qt
PnVzZVByb2dyYW0oZGF0YSgpLnByZXZpb3VzUHJvZ3JhbSk7CiAKLSAgICBnbFNjaXNzb3IoZGF0
YSgpLnByZXZpb3VzU2Npc3NvclswXSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclsxXSwgZGF0YSgp
LnByZXZpb3VzU2Npc3NvclsyXSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclszXSk7CisgICAgbV9j
b250ZXh0M0QtPnNjaXNzb3IoZGF0YSgpLnByZXZpb3VzU2Npc3NvclswXSwgZGF0YSgpLnByZXZp
b3VzU2Npc3NvclsxXSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclsyXSwgZGF0YSgpLnByZXZpb3Vz
U2Npc3NvclszXSk7CiAgICAgaWYgKGRhdGEoKS5wcmV2aW91c1NjaXNzb3JTdGF0ZSkKLSAgICAg
ICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmVuYWJs
ZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKICAgICBlbHNlCi0gICAgICAgIGds
RGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgICAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKIAogICAgIGlmIChkYXRhKCkucHJldmlv
dXNEZXB0aFN0YXRlKQotICAgICAgICBnbEVuYWJsZShHTF9ERVBUSF9URVNUKTsKKyAgICAgICAg
bV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCk7CiAgICAg
ZWxzZQotICAgICAgICBnbERpc2FibGUoR0xfREVQVEhfVEVTVCk7CisgICAgICAgIG1fY29udGV4
dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUKTsKIAogI2lmIFBMQVRG
T1JNKFFUKQogICAgIGlmICghbV9jb250ZXh0KQpAQCAtMzA3LDQwICsyNTcsNDAgQEAgdm9pZCBU
ZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50aW5nKCkKICNlbmRpZgogfQogCi12b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtKiBzaGFkZXJQcm9ncmFtLCBHTGVudW0gZHJhd2luZ01vZGUsIGJvb2wgbmVlZHNCbGVuZGlu
ZykKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYgcXVhZFRv
RHJhdywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0qIHNoYWRlclByb2dyYW0sIEdDM0RlbnVtIGRyYXdpbmdNb2Rl
LCBib29sIG5lZWRzQmxlbmRpbmcpCiB7Ci0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmli
QXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xCaW5k
QnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250
ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCk7CiAK
LSAgICBjb25zdCBHTGZsb2F0IHF1YWRbXSA9IHsKKyAgICBjb25zdCBHQzNEZmxvYXQgcXVhZFtd
ID0gewogICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDEo
KS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMSgpLnkoKSwK
ICAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAyKCkueCgp
LCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDIoKS55KCksCiAgICAg
ICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMygpLngoKSwgcXVh
ZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAzKCkueSgpLAogICAgICAgICBx
dWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDQoKS54KCksIHF1YWRUb0Ry
YXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wNCgpLnkoKQogICAgIH07Ci0gICAgR0xf
Q01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwg
MiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCBxdWFkKSk7CisgICAgbV9jb250ZXh0M0QtPnZlcnRl
eEF0dHJpYlBvaW50ZXIoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIocXVhZCkpOwogCiAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnBy
b2plY3Rpb25NYXRyaXgpLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkubXVsdGlwbHkoVHJhbnNm
b3JtYXRpb25NYXRyaXgoCiAgICAgICAgICAgICBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVj
dC53aWR0aCgpLCAwLCAwLCAwLAogICAgICAgICAgICAgMCwgcXVhZFRvRHJhdy5vcmlnaW5hbFRh
cmdldFJlY3QuaGVpZ2h0KCksIDAsIDAsCiAgICAgICAgICAgICAwLCAwLCAxLCAwLAogICAgICAg
ICAgICAgcXVhZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJlY3QueCgpLCBxdWFkVG9EcmF3Lm9yaWdp
bmFsVGFyZ2V0UmVjdC55KCksIDAsIDEpKTsKLSAgICBjb25zdCBHTGZsb2F0IG00W10gPSB7Cisg
ICAgR0MzRGZsb2F0IG00W10gPSB7CiAgICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigp
LCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKICAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRy
aXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAogICAgICAgICBtYXRyaXgubTMx
KCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCiAgICAgICAgIG1h
dHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQogICAg
IH07Ci0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihzaGFkZXJQcm9ncmFtLT5tYXRyaXhM
b2NhdGlvbigpLCAxLCBHTF9GQUxTRSwgbTQpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybU1h
dHJpeDRmdihzaGFkZXJQcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgbTQpOwog
CiAgICAgaWYgKG5lZWRzQmxlbmRpbmcpIHsKLSAgICAgICAgR0xfQ01EKGdsQmxlbmRGdW5jKEdM
X09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSkpOwotICAgICAgICBHTF9DTUQoZ2xFbmFibGUo
R0xfQkxFTkQpKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRl
eHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAg
ICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKICAgICB9
IGVsc2UKLSAgICAgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9CTEVORCkpOworICAgICAgICBtX2Nv
bnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwogCi0gICAgR0xfQ01E
KGdsRHJhd0FycmF5cyhkcmF3aW5nTW9kZSwgMCwgNCkpOwotICAgIEdMX0NNRChnbERpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOworICAgIG1f
Y29udGV4dDNELT5kcmF3QXJyYXlzKGRyYXdpbmdNb2RlLCAwLCA0KTsKKyAgICBtX2NvbnRleHQz
RC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigp
KTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNv
bG9yLCBmbG9hdCB3aWR0aCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4KQpAQCAtMzQ5LDE3ICsyOTksMTcgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9h
dCB3aWR0aCwgY29uc3QgRmxvYXRSZWMKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFy
ZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5zb2xpZENvbG9yUHJvZ3JhbSgp
OwotICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOworICAgIG1fY29udGV4
dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOwogCiAgICAgZmxvYXQgYWxwaGEgPSBjb2xv
ci5hbHBoYSgpIC8gMjU1LjA7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTRmKHByb2dyYW0tPmNvbG9y
TG9jYXRpb24oKSwKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9j
YXRpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgKGNvbG9yLnJlZCgpIC8gMjU1LjApICog
YWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgIChjb2xvci5ncmVlbigpIC8gMjU1LjApICog
YWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgIChjb2xvci5ibHVlKCkgLyAyNTUuMCkgKiBh
bHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgYWxwaGEpKTsKLSAgICBHTF9DTUQoZ2xMaW5l
V2lkdGgod2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgYWxwaGEpOworICAgIG1fY29u
dGV4dDNELT5saW5lV2lkdGgod2lkdGgpOwogCi0gICAgZHJhd1F1YWQodGFyZ2V0UmVjdCwgbW9k
ZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdldCgpLCBHTF9MSU5FX0xPT1AsIGNvbG9yLmhhc0FscGhh
KCkpOworICAgIGRyYXdRdWFkKHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgcHJvZ3JhbS5n
ZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUCwgY29sb3IuaGFzQWxwaGEoKSk7CiB9
CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3UmVwYWludENvdW50ZXIoaW50IHZhbHVlLCBp
bnQgcG9pbnRTaXplLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCkKQEAgLTQwNiw3ICszNTYsNyBAQCB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVy
ZSwgY29uc3QgRmxvYXRSZWN0JgogICAgIGRyYXdUZXh0dXJlKHRleHR1cmVHTC5pZCgpLCB0ZXh0
dXJlR0wuaXNPcGFxdWUoKSA/IDAgOiBTdXBwb3J0c0JsZW5kaW5nLCB0ZXh0dXJlR0wuc2l6ZSgp
LCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHksIG1hc2ssIGV4cG9zZWRFZGdlcyk7CiB9CiAK
LSNpZiBkZWZpbmVkKEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSkKKyNpZiAhVVNFKFRFWE1BUF9P
UEVOR0xfRVNfMikKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVJlY3RhbmdsZUFS
Qih1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSog
bWFza1RleHR1cmUpCiB7CiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBw
cm9ncmFtOwpAQCAtNDE0LDM2ICszNjQsMzYgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdU
ZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb24KICAg
ICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpSZWN0
T3BhY2l0eUFuZE1hc2spOwogICAgIGVsc2UKICAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFy
ZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpSZWN0U2ltcGxlKTsKLSAgICBHTF9DTUQoZ2xVc2VQ
cm9ncmFtKHByb2dyYW0tPmlkKCkpKTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9n
cmFtLT5pZCgpKTsKIAotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dy
YW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhU
VVJFMCkpOwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FS
QiwgdGV4dHVyZSkpOwotICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtLT5zb3VyY2VUZXh0
dXJlTG9jYXRpb24oKSwgMCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKyAgICBtX2NvbnRleHQzRC0+Ymlu
ZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCB0ZXh0dXJlKTsKKyAgICBtX2NvbnRl
eHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnNvdXJjZVRleHR1cmVMb2NhdGlvbigpLCAwKTsKIAot
ICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtLT5mbGlwTG9jYXRpb24oKSwgISEoZmxhZ3Mg
JiBTaG91bGRGbGlwVGV4dHVyZSkpKTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMmYocHJvZ3JhbS0+
dGV4dHVyZVNpemVMb2NhdGlvbigpLCB0ZXh0dXJlU2l6ZS53aWR0aCgpLCB0ZXh0dXJlU2l6ZS5o
ZWlnaHQoKSkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+ZmxpcExvY2F0
aW9uKCksICEhKGZsYWdzICYgU2hvdWxkRmxpcFRleHR1cmUpKTsKKyAgICBtX2NvbnRleHQzRC0+
dW5pZm9ybTJmKHByb2dyYW0tPnRleHR1cmVTaXplTG9jYXRpb24oKSwgdGV4dHVyZVNpemUud2lk
dGgoKSwgdGV4dHVyZVNpemUuaGVpZ2h0KCkpOwogCiAgICAgaWYgKFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlv
bigpKSkKLSAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlv
bigpLCBvcGFjaXR5KSk7CisgICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+
b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpOwogCiAgICAgaWYgKG1hc2tUZXh0dXJlICYmIG1h
c2tUZXh0dXJlLT5pc1ZhbGlkKCkgJiYgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFs
aWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpKSkgewogICAg
ICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wqIG1hc2tUZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxj
b25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNrVGV4dHVyZSk7Ci0gICAgICAgIEdMX0NNRChnbEFj
dGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpKTsKLSAgICAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgbWFza1RleHR1cmVHTC0+aWQoKSkpOwotICAgICAgICBHTF9DTUQoZ2xV
bmlmb3JtMWkocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpLCAxKSk7Ci0gICAgICAgIEdM
X0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKKyAgICAgICAgbV9jb250ZXh0M0Qt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKKyAgICAgICAgbV9j
b250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtYXNr
VGV4dHVyZUdMLT5pZCgpKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFt
LT5tYXNrVGV4dHVyZUxvY2F0aW9uKCksIDEpOworICAgICAgICBtX2NvbnRleHQzRC0+YWN0aXZl
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwogICAgIH0KIAogICAgIGJvb2wg
bmVlZHNCbGVuZGluZyA9IChmbGFncyAmIFN1cHBvcnRzQmxlbmRpbmcpIHx8IG9wYWNpdHkgPCAw
Ljk5IHx8IG1hc2tUZXh0dXJlOwotICAgIGRyYXdRdWFkKHRhcmdldFJlY3QsIG1vZGVsVmlld01h
dHJpeCwgcHJvZ3JhbS5nZXQoKSwgR0xfVFJJQU5HTEVfRkFOLCBuZWVkc0JsZW5kaW5nKTsKKyAg
ICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdy
YXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIG5lZWRzQmxlbmRpbmcpOwogfQotI2VuZGlm
IC8vIGRlZmluZWQoR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlKSAKKyNlbmRpZiAvLyAhVVNFKFRF
WE1BUF9PUEVOR0xfRVNfMikKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKHVp
bnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJbnRTaXplJiAvKiB0ZXh0dXJlU2l6
ZSAqLywgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJl
KiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKQogewotICAgIGJvb2wgbmVlZHNB
bnRpbGlhaW5nID0gbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcgJiYgIW1vZGVsVmll
d01hdHJpeC5pc0ludGVnZXJUcmFuc2xhdGlvbigpOwotICAgIGlmIChuZWVkc0FudGlsaWFpbmcg
JiYgZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHRleHR1cmUsIGZsYWdzLCB0YXJnZXRSZWN0
LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0dXJlLCBleHBvc2VkRWRnZXMpKQor
ICAgIGJvb2wgbmVlZHNBbnRpYWxpYWluZyA9IG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFz
aW5nICYmICFtb2RlbFZpZXdNYXRyaXguaXNJbnRlZ2VyVHJhbnNsYXRpb24oKTsKKyAgICBpZiAo
bmVlZHNBbnRpYWxpYWluZyAmJiBkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodGV4dHVyZSwg
ZmxhZ3MsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgbWFza1RleHR1cmUs
IGV4cG9zZWRFZGdlcykpCiAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtOwpAQCAtNDUxLDE1ICs0MDEsMTUgQEAgdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBj
b25zdCBJbnRTaXplJgogICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6Ok9wYWNpdHlBbmRNYXNrKTsKICAgICBlbHNlCiAgICAgICAgIHByb2dyYW0g
PSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hh
ZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2ltcGxlKTsKLSAgICBHTF9D
TUQoZ2xVc2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpKTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJv
Z3JhbShwcm9ncmFtLT5pZCgpKTsKIAogICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShw
cm9ncmFtLmdldCgpLCB0ZXh0dXJlLCBmbGFncywgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4
LCBvcGFjaXR5LCBtYXNrVGV4dHVyZSk7CiB9CiAKLXN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB2aWV3cG9ydE1hdHJpeCgpCitzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggdmlld3BvcnRN
YXRyaXgoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCkKIHsKLSAgICBHTGludCB2aWV3cG9y
dFs0XTsKLSAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9WSUVXUE9SVCwgdmlld3BvcnQpKTsK
KyAgICBHQzNEaW50IHZpZXdwb3J0WzRdOworICAgIGNvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JULCB2aWV3cG9ydCk7CiAKICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBtYXRyaXg7CiAgICAgbWF0cml4LnRyYW5zbGF0ZTNkKHZpZXdwb3J0WzBdLCB2aWV3
cG9ydFsxXSwgMCk7CkBAIC01NTYsNyArNTA2LDcgQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmRy
YXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywK
ICAgICAvLyBhbnRpYWxpYXNpbmcuIE5vdGUgaGVyZSB0aGF0IHdlIGFyZSBhbHNvIGluY2x1ZGlu
ZyB0aGUgdmlld3BvcnQgbWF0cml4ICh3aGljaAogICAgIC8vIHRyYW5zbGF0ZXMgZnJvbSBub3Jt
YWxpemVkIGRldmljZSBjb29yZGluYXRlcyB0byBzY3JlZW4gY29vcmRpbmF0ZXMpLCBiZWNhdXNl
IHRoZXNlCiAgICAgLy8gdmFsdWVzIGFyZSBjb25zdW1lZCBpbiB0aGUgZnJhZ21lbnQgc2hhZGVy
LCB3aGljaCB3b3JrcyBpbiBzY3JlZW4gY29vcmRpbmF0ZXMuCi0gICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggc2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSB2aWV3cG9ydE1hdHJpeCgpLm11bHRpcGx5KFRy
YW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KSkubXVsdGlwbHkobW9k
ZWxWaWV3TWF0cml4KS50bzJkVHJhbnNmb3JtKCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
c2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSB2aWV3cG9ydE1hdHJpeChtX2NvbnRleHQzRC5nZXQoKSku
bXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpKS5t
dWx0aXBseShtb2RlbFZpZXdNYXRyaXgpLnRvMmRUcmFuc2Zvcm0oKTsKICAgICBpZiAoIXNjcmVl
blNwYWNlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgRmxvYXRRdWFkIHF1YWRJblNjcmVlblNwYWNlID0gc2NyZWVuU3BhY2VUcmFuc2Zvcm0ubWFw
UXVhZChvcmlnaW5hbFRhcmdldFJlY3QpOwpAQCAtNTgwLDggKzUzMCw4IEBAIGJvb2wgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVyZSwg
RmxhZ3MgZmxhZ3MsCiAgICAgcXVhZFRvRWRnZUFycmF5KGluZmxhdGVRdWFkKHF1YWRJblNjcmVl
blNwYWNlLmJvdW5kaW5nQm94KCksICBpbmZsYXRpb25EaXN0YW5jZSksIHRhcmdldFF1YWRFZGdl
cyArIDEyKTsKIAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlh
c2luZ05vTWFzaz4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5hbnRpYWxpYXNpbmdOb01hc2tQcm9ncmFtKCk7Ci0gICAgR0xfQ01EKGds
VXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKSk7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTNmdihwcm9n
cmFtLT5leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbigpLCA4LCB0YXJnZXRR
dWFkRWRnZXMpKTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKTsK
KyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTNmdihwcm9ncmFtLT5leHBhbmRlZFF1YWRFZGdlc0lu
U2NyZWVuU3BhY2VMb2NhdGlvbigpLCA4LCB0YXJnZXRRdWFkRWRnZXMpOwogCiAgICAgZHJhd1Rl
eHR1cmVkUXVhZFdpdGhQcm9ncmFtKHByb2dyYW0uZ2V0KCksIHRleHR1cmUsIGZsYWdzLCBEcmF3
UXVhZChvcmlnaW5hbFRhcmdldFJlY3QsIGV4cGFuZGVkUXVhZEluVGV4dHVyZUNvb3JkaW5hdGVz
KSwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5LCAwIC8qIG1hc2tUZXh0dXJlICovKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTU4OSwyNiArNTM5LDI2IEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpk
cmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3Ms
CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0oVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHByb2dyYW0sIHVpbnQzMl90IHRleHR1cmUsIEZsYWdz
IGZsYWdzLCBjb25zdCBEcmF3UXVhZCYgcXVhZFRvRHJhdywgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVy
ZSogbWFza1RleHR1cmUpCiB7Ci0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXko
cHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdM
X1RFWFRVUkUwKSk7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4
dHVyZSkpOwotICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtLT5zb3VyY2VUZXh0dXJlTG9j
YXRpb24oKSwgMCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShw
cm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKyAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmUpOworICAgIG1fY29udGV4
dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVyZUxvY2F0aW9uKCksIDApOwogCi0g
ICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW0tPmZsaXBMb2NhdGlvbigpLCAhIShmbGFncyAm
IFNob3VsZEZsaXBUZXh0dXJlKSkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3Jh
bS0+ZmxpcExvY2F0aW9uKCksICEhKGZsYWdzICYgU2hvdWxkRmxpcFRleHR1cmUpKTsKIAogICAg
IGlmIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSkpCi0gICAgICAgIEdMX0NNRChnbFVuaWZvcm0xZihw
cm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0eSkpOworICAgICAgICBtX2NvbnRleHQz
RC0+dW5pZm9ybTFmKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5KTsKIAogICAg
IGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpICYmIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0tPm1hc2tUZXh0
dXJlTG9jYXRpb24oKSkpIHsKICAgICAgICAgY29uc3QgQml0bWFwVGV4dHVyZUdMKiBtYXNrVGV4
dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMKj4obWFza1RleHR1cmUp
OwotICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKSk7Ci0gICAgICAg
IEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPmlkKCkp
KTsKLSAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRp
b24oKSwgMSkpOwotICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSk7
CisgICAgICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFMSk7CisgICAgICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgbWFza1RleHR1cmVHTC0+aWQoKSk7CisgICAgICAgIG1fY29udGV4
dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpLCAxKTsKKyAgICAg
ICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUw
KTsKICAgICB9CiAKICAgICBib29sIG5lZWRzQmxlbmRpbmcgPSAoZmxhZ3MgJiBTdXBwb3J0c0Js
ZW5kaW5nKSB8fCBvcGFjaXR5IDwgMC45OSB8fCBtYXNrVGV4dHVyZTsKLSAgICBkcmF3UXVhZChx
dWFkVG9EcmF3LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0sIEdMX1RSSUFOR0xFX0ZBTiwgbmVl
ZHNCbGVuZGluZyk7CisgICAgZHJhd1F1YWQocXVhZFRvRHJhdywgbW9kZWxWaWV3TWF0cml4LCBw
cm9ncmFtLCBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCBuZWVkc0JsZW5kaW5nKTsK
IH0KIAogYm9vbCBCaXRtYXBUZXh0dXJlR0w6OmNhblJldXNlV2l0aChjb25zdCBJbnRTaXplJiBj
b250ZW50c1NpemUsIEZsYWdzKQpAQCAtNjE5LDcgKzU2OSw3IEBAIGJvb2wgQml0bWFwVGV4dHVy
ZUdMOjpjYW5SZXVzZVdpdGgoY29uc3QgSW50U2l6ZSYgY29udGVudHNTaXplLCBGbGFncykKICNp
ZiBPUyhEQVJXSU4pCiAjZGVmaW5lIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBF
IEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFVgogI2Vsc2UKLSNkZWZpbmUgREVGQVVMVF9URVhU
VVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUgR0xfVU5TSUdORURfQllURQorI2RlZmluZSBERUZBVUxU
X1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURQogI2VuZGlmCiAKIHN0YXRpYyBib29sIGRyaXZlclN1cHBvcnRzU3ViSW1hZ2UoKQpAQCAt
NjM0LDMwICs1ODQsMzEgQEAgc3RhdGljIGJvb2wgZHJpdmVyU3VwcG9ydHNTdWJJbWFnZSgpCiAK
IHZvaWQgQml0bWFwVGV4dHVyZUdMOjpkaWRSZXNldCgpCiB7CisgICAgR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKICAg
ICBpZiAoIW1faWQpCi0gICAgICAgIEdMX0NNRChnbEdlblRleHR1cmVzKDEsICZtX2lkKSk7Ci0K
KyAgICAgICAgbV9pZCA9IGNvbnRleHQzRC0+Y3JlYXRlVGV4dHVyZSgpOwogICAgIG1fc2hvdWxk
Q2xlYXIgPSB0cnVlOwogICAgIGlmIChtX3RleHR1cmVTaXplID09IGNvbnRlbnRTaXplKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1fdGV4dHVyZVNpemUgPSBjb250ZW50U2l6ZSgpOwotICAg
IEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKTsKLSAgICBHTF9DTUQo
Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xf
TElORUFSKSk7Ci0gICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUikpOwotICAgIEdMX0NNRChnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpKTsK
LSAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JB
UF9ULCBHTF9DTEFNUF9UT19FREdFKSk7Ci0gICAgR0xfQ01EKGdsVGV4SW1hZ2UyRChHTF9URVhU
VVJFXzJELCAwLCBHTF9SR0JBLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUu
aGVpZ2h0KCksIDAsIEdMX1JHQkEsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBF
LCAwKSk7CisgICAgY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgbV9pZCk7CisgICAgY29udGV4dDNELT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVS
LCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICBjb250ZXh0M0QtPnRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIGNvbnRleHQz
RC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURH
RSk7CisgICAgY29udGV4dDNELT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4
dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBjb250ZXh0M0QtPnRleEltYWdlMkREaXJlY3QoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBt
X3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgMCk7
CiB9CiAKIAogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQq
IGRhdGEsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFBvaW50JiBzb3VyY2VP
ZmZzZXQsIGludCBieXRlc1BlckxpbmUpCiB7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgbV9pZCkpOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBt
X3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgY29udGV4dDNELT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9pZCk7CiAKICAgICBjb25z
dCB1bnNpZ25lZCBieXRlc1BlclBpeGVsID0gNDsKICAgICBpZiAoYnl0ZXNQZXJMaW5lID09IHRh
cmdldFJlY3Qud2lkdGgoKSAqIGJ5dGVzUGVyUGl4ZWwgJiYgc291cmNlT2Zmc2V0ID09IEludFBv
aW50Ojp6ZXJvKCkpIHsKLSAgICAgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgo
KSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgR0xfUkdCQSwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RS
QU5TRkVSX1RZUEUsIChjb25zdCBjaGFyKilkYXRhKSk7CisgICAgICAgIGNvbnRleHQzRC0+dGV4
U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54
KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0
KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNG
RVJfVFlQRSwgKGNvbnN0IGNoYXIqKWRhdGEpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC02NzUsMTkgKzYyNiwxOSBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMo
Y29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdAogICAgICAgICAgICAg
ZHN0ICs9IHRhcmdldEJ5dGVzUGVyTGluZTsKICAgICAgICAgfQogCi0gICAgICAgIEdMX0NNRChn
bFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJl
Y3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIEdMX1JHQkEs
IERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCB0ZW1wb3JhcnlEYXRhLmRhdGEo
KSkpOworICAgICAgICBjb250ZXh0M0QtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVj
dC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
REVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIHRlbXBvcmFyeURhdGEuZGF0YSgp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lmICFkZWZpbmVkKFRFWE1BUF9PUEVOR0xf
RVNfMikKICAgICAvLyBVc2UgdGhlIE9wZW5HTCBzdWItaW1hZ2UgZXh0ZW5zaW9uLCBub3cgdGhh
dCB3ZSBrbm93IGl0J3MgYXZhaWxhYmxlLgotICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdMX1VO
UEFDS19ST1dfTEVOR1RILCBieXRlc1BlckxpbmUgLyBieXRlc1BlclBpeGVsKSk7Ci0gICAgR0xf
Q01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgc291cmNlT2Zmc2V0LnkoKSkp
OwotICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJWEVMUywgc291cmNl
T2Zmc2V0LngoKSkpOwotICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwg
MCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRh
cmdldFJlY3QuaGVpZ2h0KCksIEdMX1JHQkEsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZF
Ul9UWVBFLCAoY29uc3QgY2hhciopZGF0YSkpOwotICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdM
X1VOUEFDS19ST1dfTEVOR1RILCAwKSk7Ci0gICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5Q
QUNLX1NLSVBfUk9XUywgMCkpOwotICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19T
S0lQX1BJWEVMUywgMCkpOworICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JP
V19MRU5HVEgsIGJ5dGVzUGVyTGluZSAvIGJ5dGVzUGVyUGl4ZWwpOworICAgIGNvbnRleHQzRC0+
cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgc291cmNlT2Zmc2V0LnkoKSk7CisgICAg
Y29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsIHNvdXJjZU9mZnNl
dC54KCkpOworICAgIGNvbnRleHQzRC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0
LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBE
RUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgKGNvbnN0IGNoYXIqKWRhdGEpOwor
ICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIDApOworICAg
IGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgMCk7CisgICAgY29u
dGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsIDApOwogI2VuZGlmCiB9
CiAKQEAgLTcxMiwxOSArNjYzLDE5IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3RmlsdGVy
ZWQoY29uc3QgQml0bWFwVGV4dHVyZSYgc291cmNlVGV4dHVyZSwgY29uc3QgQml0CiAKICAgICBw
cm9ncmFtLT5wcmVwYXJlKGZpbHRlciwgcGFzcywgc291cmNlVGV4dHVyZS5jb250ZW50U2l6ZSgp
LCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihjb250ZW50VGV4dHVyZSkuaWQo
KSk7CiAKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0
ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dy
YW0tPnRleENvb3JkQXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RF
WFRVUkUwKSk7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgc3RhdGlj
X2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oc291cmNlVGV4dHVyZSkuaWQoKSkpOwotICAg
IGdsVW5pZm9ybTFpKHByb2dyYW0tPnRleHR1cmVVbmlmb3JtKCksIDApOwotICAgIGNvbnN0IEdM
ZmxvYXQgdGFyZ2V0VmVydGljZXNbXSA9IHstMSwgLTEsIDEsIC0xLCAxLCAxLCAtMSwgMX07Ci0g
ICAgY29uc3QgR0xmbG9hdCBzb3VyY2VWZXJ0aWNlc1tdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAs
IDF9OwotICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4QXR0
cmliKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdGFyZ2V0VmVydGljZXMpKTsKLSAgICBH
TF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnRleENvb3JkQXR0cmliKCksIDIs
IEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgc291cmNlVmVydGljZXMpKTsKLSAgICBHTF9DTUQoZ2xE
aXNhYmxlKEdMX0JMRU5EKSk7Ci0gICAgR0xfQ01EKGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9G
QU4sIDAsIDQpKTsKLSAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3Jh
bS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0
M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmliKCkpOwor
ICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
MCk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihzb3VyY2VUZXh0dXJl
KS5pZCgpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnRleHR1cmVVbmlm
b3JtKCksIDApOworICAgIGNvbnN0IEdDM0RmbG9hdCB0YXJnZXRWZXJ0aWNlc1tdID0gey0xLCAt
MSwgMSwgLTEsIDEsIDEsIC0xLCAxfTsKKyAgICBjb25zdCBHQzNEZmxvYXQgc291cmNlVmVydGlj
ZXNbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKKyAgICBtX2NvbnRleHQzRC0+dmVydGV4
QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cih0YXJnZXRWZXJ0aWNlcykpOworICAgIG1f
Y29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnRleENvb3JkQXR0cmliKCks
IDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIoc291cmNl
VmVydGljZXMpKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
QkxFTkQpOworICAgIG1fY29udGV4dDNELT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpU
UklBTkdMRV9GQU4sIDAsIDQpOworICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5kaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSk7CiB9CiAKIFBhc3NS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gQml0bWFwVGV4dHVyZUdMOjphcHBseUZpbHRlcnMoY29uc3Qg
Qml0bWFwVGV4dHVyZSYgY29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZp
bHRlcnMpCkBAIC03NjUsMTcgKzcxNiwxOCBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6aW5pdGlh
bGl6ZVN0ZW5jaWwoKQogewogICAgIGlmIChtX3JibykKICAgICAgICAgcmV0dXJuOwotICAgIEdM
X0NNRChnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fcmJvKSk7Ci0gICAgR0xfQ01EKGdsQmluZFJl
bmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fcmJvKSk7CisgICAgR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAg
ICBtX3JibyA9IGNvbnRleHQzRC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAgY29udGV4dDNE
LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fcmJv
KTsKICNpZmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSAgICBHTF9DTUQoZ2xSZW5kZXJidWZmZXJT
dG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgR0xfU1RFTkNJTF9JTkRFWDgsIG1fdGV4dHVyZVNpemUu
d2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSkpOworICAgIGNvbnRleHQzRC0+cmVuZGVy
YnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6U1RFTkNJTF9JTkRFWDgsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJl
U2l6ZS5oZWlnaHQoKSk7CiAjZWxzZQotICAgIEdMX0NNRChnbFJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
R0xfUkVOREVSQlVGRkVSLCBHTF9ERVBUSF9TVEVOQ0lMLCBtX3RleHR1cmVTaXplLndpZHRoKCks
IG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKTsKKyAgICBjb250ZXh0M0QtPnJlbmRlcmJ1ZmZlclN0
b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX1NURU5DSUwsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWln
aHQoKSk7CiAjZW5kaWYKLSAgICBHTF9DTUQoZ2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJV
RkZFUiwgMCkpOwotICAgIEdMX0NNRChnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9yYm8pKTsK
LSAgICBHTF9DTUQoZ2xDbGVhclN0ZW5jaWwoMCkpOwotICAgIEdMX0NNRChnbENsZWFyKEdMX1NU
RU5DSUxfQlVGRkVSX0JJVCkpOworICAgIGNvbnRleHQzRC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKKyAgICBjb250ZXh0M0QtPmZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUiwgbV9yYm8pOworICAgIGNvbnRleHQzRC0+Y2xlYXJTdGVuY2lsKDApOworICAgIGNvbnRl
eHQzRC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCk7CiB9CiAK
IHZvaWQgQml0bWFwVGV4dHVyZUdMOjpjbGVhcklmTmVlZGVkKCkKQEAgLTc4MywxMCArNzM1LDEx
IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpjbGVhcklmTmVlZGVkKCkKICAgICBpZiAoIW1fc2hv
dWxkQ2xlYXIpCiAgICAgICAgIHJldHVybjsKIAorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CiAgICAgbV9jbGlw
U3RhY2suaW5pdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fdGV4dHVyZVNpemUpKTsKLSAg
ICBtX2NsaXBTdGFjay5hcHBseSgpOwotICAgIEdMX0NNRChnbENsZWFyQ29sb3IoMCwgMCwgMCwg
MCkpOwotICAgIEdMX0NNRChnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpKTsKKyAgICBtX2Ns
aXBTdGFjay5hcHBseShjb250ZXh0M0QpOworICAgIGNvbnRleHQzRC0+Y2xlYXJDb2xvcigwLCAw
LCAwLCAwKTsKKyAgICBjb250ZXh0M0QtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9C
VUZGRVJfQklUKTsKICAgICBtX3Nob3VsZENsZWFyID0gZmFsc2U7CiB9CiAKQEAgLTc5NSwzMyAr
NzQ4LDM2IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpjcmVhdGVGYm9JZk5lZWRlZCgpCiAgICAg
aWYgKG1fZmJvKQogICAgICAgICByZXR1cm47CiAKLSAgICBHTF9DTUQoZ2xHZW5GcmFtZWJ1ZmZl
cnMoMSwgJm1fZmJvKSk7Ci0gICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVG
RkVSLCBtX2ZibykpOwotICAgIEdMX0NNRChnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1F
QlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgaWQoKSwgMCkpOwor
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBo
aWNzQ29udGV4dDNEKCk7CisgICAgbV9mYm8gPSBjb250ZXh0M0QtPmNyZWF0ZUZyYW1lYnVmZmVy
KCk7CisgICAgY29udGV4dDNELT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBtX2Zibyk7CisgICAgY29udGV4dDNELT5mcmFtZWJ1ZmZlclRleHR1cmUyRChH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9B
VFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGlkKCksIDApOwogICAg
IG1fc2hvdWxkQ2xlYXIgPSB0cnVlOwogfQogCiB2b2lkIEJpdG1hcFRleHR1cmVHTDo6YmluZCgp
CiB7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCkpOworICAgIEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29u
dGV4dDNEKCk7CisgICAgY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgMCk7CiAgICAgY3JlYXRlRmJvSWZOZWVkZWQoKTsKLSAgICBHTF9DTUQoZ2xC
aW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKSk7Ci0gICAgR0xfQ01EKGdsVmll
d3BvcnQoMCwgMCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgp
KSk7CisgICAgY29udGV4dDNELT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBtX2Zibyk7CisgICAgY29udGV4dDNELT52aWV3cG9ydCgwLCAwLCBtX3RleHR1
cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpOwogICAgIGNsZWFySWZOZWVk
ZWQoKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmRhdGEoKS5wcm9qZWN0aW9uTWF0cml4ID0gY3Jl
YXRlUHJvamVjdGlvbk1hdHJpeChtX3RleHR1cmVTaXplLCB0cnVlIC8qIG1pcnJvcmVkICovKTsK
LSAgICBtX2NsaXBTdGFjay5hcHBseSgpOworICAgIG1fY2xpcFN0YWNrLmFwcGx5KGNvbnRleHQz
RCk7CiB9CiAKIEJpdG1hcFRleHR1cmVHTDo6fkJpdG1hcFRleHR1cmVHTCgpCiB7CisgICAgR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250
ZXh0M0QoKTsKICAgICBpZiAobV9pZCkKLSAgICAgICAgR0xfQ01EKGdsRGVsZXRlVGV4dHVyZXMo
MSwgJm1faWQpKTsKKyAgICAgICAgY29udGV4dDNELT5kZWxldGVUZXh0dXJlKG1faWQpOwogCiAg
ICAgaWYgKG1fZmJvKQotICAgICAgICBHTF9DTUQoZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1f
ZmJvKSk7CisgICAgICAgIGNvbnRleHQzRC0+ZGVsZXRlRnJhbWVidWZmZXIobV9mYm8pOwogCiAg
ICAgaWYgKG1fcmJvKQotICAgICAgICBHTF9DTUQoZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZt
X3JibykpOworICAgICAgICBjb250ZXh0M0QtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX3Jibyk7CiB9
CiAKIGJvb2wgQml0bWFwVGV4dHVyZUdMOjppc1ZhbGlkKCkgY29uc3QKQEAgLTg0MSwxMSArNzk3
LDExIEBAIFRleHR1cmVNYXBwZXJHTDo6flRleHR1cmVNYXBwZXJHTCgpCiAKIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpiaW5kRGVmYXVsdFN1cmZhY2UoKQogewotICAgIEdMX0NNRChnbEJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKSk7CisgICAg
bV9jb250ZXh0M0QtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIGRhdGEoKS50YXJnZXRGcmFtZUJ1ZmZlcik7CiAgICAgSW50U2l6ZSB2aWV3cG9ydFNpemUo
ZGF0YSgpLnZpZXdwb3J0WzJdLCBkYXRhKCkudmlld3BvcnRbM10pOwogICAgIGRhdGEoKS5wcm9q
ZWN0aW9uTWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeCh2aWV3cG9ydFNpemUsIGRhdGEo
KS5QYWludEZsYWdzICYgUGFpbnRpbmdNaXJyb3JlZCk7Ci0gICAgR0xfQ01EKGdsVmlld3BvcnQo
ZGF0YSgpLnZpZXdwb3J0WzBdLCBkYXRhKCkudmlld3BvcnRbMV0sIHZpZXdwb3J0U2l6ZS53aWR0
aCgpLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpKTsKLSAgICBtX2NsaXBTdGFjay5hcHBseSgpOwor
ICAgIG1fY29udGV4dDNELT52aWV3cG9ydChkYXRhKCkudmlld3BvcnRbMF0sIGRhdGEoKS52aWV3
cG9ydFsxXSwgdmlld3BvcnRTaXplLndpZHRoKCksIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSk7Cisg
ICAgbV9jbGlwU3RhY2suYXBwbHkobV9jb250ZXh0M0QuZ2V0KCkpOwogICAgIGRhdGEoKS5jdXJy
ZW50U3VyZmFjZS5jbGVhcigpOwogfQogCkBAIC04NzUsNyArODMxLDcgQEAgYm9vbCBUZXh0dXJl
TWFwcGVyR0w6OmJlZ2luU2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1v
ZGVsVmlld01hdHIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY2xpcFN0YWNrKCkuY3Vy
cmVudCgpLnNjaXNzb3JCb3guaW50ZXJzZWN0KHJlY3QpOwotICAgIGNsaXBTdGFjaygpLmFwcGx5
KCk7CisgICAgY2xpcFN0YWNrKCkuYXBwbHkobV9jb250ZXh0M0QuZ2V0KCkpOwogICAgIHJldHVy
biB0cnVlOwogfQogCkBAIC04ODksMTAgKzg0NSwxMCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6
YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNv
bgogCiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0
YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclBy
b2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNpbXBsZSk7CiAKLSAgICBHTF9DTUQo
Z2xVc2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpKTsKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIGNvbnN0IEdMZmxvYXQg
dW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKLSAgICBHTF9DTUQoZ2xWZXJ0
ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBHTF9GTE9BVCwgR0xf
RkFMU0UsIDAsIHVuaXRSZWN0KSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3Jh
bS0+aWQoKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dy
YW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBjb25zdCBHQzNEZmxvYXQgdW5pdFJlY3RbXSA9IHsw
LCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKKyAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9p
bnRlcihwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FU
LCBmYWxzZSwgMCwgR0MzRGludHB0cih1bml0UmVjdCkpOwogCiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRy
aXgpCiAgICAgICAgICAgICAubXVsdGlwbHkobW9kZWxWaWV3TWF0cml4KQpAQCAtOTAxLDE0ICs4
NTcsMTQgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb24KICAgICAgICAgICAgICAgICAwLCAwLCAx
LCAwLAogICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgMCwg
MSkpOwogCi0gICAgY29uc3QgR0xmbG9hdCBtNFtdID0geworICAgIGNvbnN0IEdDM0RmbG9hdCBt
NFtdID0gewogICAgICAgICBtYXRyaXgubTExKCksIG1hdHJpeC5tMTIoKSwgbWF0cml4Lm0xMygp
LCBtYXRyaXgubTE0KCksCiAgICAgICAgIG1hdHJpeC5tMjEoKSwgbWF0cml4Lm0yMigpLCBtYXRy
aXgubTIzKCksIG1hdHJpeC5tMjQoKSwKICAgICAgICAgbWF0cml4Lm0zMSgpLCBtYXRyaXgubTMy
KCksIG1hdHJpeC5tMzMoKSwgbWF0cml4Lm0zNCgpLAogICAgICAgICBtYXRyaXgubTQxKCksIG1h
dHJpeC5tNDIoKSwgbWF0cml4Lm00MygpLCBtYXRyaXgubTQ0KCkKICAgICB9OwogCi0gICAgY29u
c3QgR0xmbG9hdCBtNGFsbFtdID0geworICAgIGNvbnN0IEdDM0RmbG9hdCBtNGFsbFtdID0gewog
ICAgICAgICAyLCAwLCAwLCAwLAogICAgICAgICAwLCAyLCAwLCAwLAogICAgICAgICAwLCAwLCAx
LCAwLApAQCAtOTE3LDQzICs4NzMsNDIgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xp
cChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb24KIAogICAg
IGludCYgc3RlbmNpbEluZGV4ID0gY2xpcFN0YWNrKCkuY3VycmVudCgpLnN0ZW5jaWxJbmRleDsK
IAotICAgIEdMX0NNRChnbEVuYWJsZShHTF9TVEVOQ0lMX1RFU1QpKTsKKyAgICBtX2NvbnRleHQz
RC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpOwogCiAgICAgLy8gTWFr
ZSBzdXJlIHdlIGRvbid0IGRvIGFueSBhY3R1YWwgZHJhd2luZy4KLSAgICBHTF9DTUQoZ2xTdGVu
Y2lsRnVuYyhHTF9ORVZFUiwgc3RlbmNpbEluZGV4LCBzdGVuY2lsSW5kZXgpKTsKKyAgICBtX2Nv
bnRleHQzRC0+c3RlbmNpbEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok5FVkVSLCBzdGVuY2lsSW5k
ZXgsIHN0ZW5jaWxJbmRleCk7CiAKICAgICAvLyBPcGVyYXRlIG9ubHkgb24gdGhlIHN0ZW5jaWxJ
bmRleCBhbmQgYWJvdmUuCi0gICAgR0xfQ01EKGdsU3RlbmNpbE1hc2soMHhmZiAmIH4oc3RlbmNp
bEluZGV4IC0gMSkpKTsKKyAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE1hc2soMHhmZiAmIH4oc3Rl
bmNpbEluZGV4IC0gMSkpOwogCiAgICAgLy8gRmlyc3QgY2xlYXIgdGhlIGVudGlyZSBidWZmZXIg
YXQgdGhlIGN1cnJlbnQgaW5kZXguCi0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9n
cmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBHTF9GQUxTRSwgbTRhbGwpKTsKLSAgICBHTF9DTUQo
Z2xTdGVuY2lsT3AoR0xfWkVSTywgR0xfWkVSTywgR0xfWkVSTykpOwotICAgIEdMX0NNRChnbERy
YXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZv
cm1NYXRyaXg0ZnYocHJvZ3JhbS0+bWF0cml4TG9jYXRpb24oKSwgMSwgZmFsc2UsIGNvbnN0X2Nh
c3Q8R0MzRGZsb2F0Kj4obTRhbGwpKTsKKyAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE9wKEdyYXBo
aWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250
ZXh0M0Q6OlpFUk8pOworICAgIG1fY29udGV4dDNELT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4
dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQpOwogCiAgICAgLy8gTm93IGFwcGx5IHRoZSBjdXJyZW50
IGluZGV4IHRvIHRoZSBuZXcgcXVhZC4KLSAgICBHTF9DTUQoZ2xTdGVuY2lsT3AoR0xfUkVQTEFD
RSwgR0xfUkVQTEFDRSwgR0xfUkVQTEFDRSkpOwotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0
ZnYocHJvZ3JhbS0+bWF0cml4TG9jYXRpb24oKSwgMSwgR0xfRkFMU0UsIG00KSk7Ci0gICAgR0xf
Q01EKGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpKTsKKyAgICBtX2NvbnRleHQz
RC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpSRVBMQUNFLCBHcmFwaGljc0NvbnRleHQz
RDo6UkVQTEFDRSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFUExBQ0UpOworICAgIG1fY29udGV4dDNE
LT51bmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIGZhbHNlLCBj
b25zdF9jYXN0PEdDM0RmbG9hdCo+KG00KSk7CisgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMo
R3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7CiAKICAgICAvLyBDbGVhciB0
aGUgc3RhdGUuCi0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0t
PnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsU3RlbmNpbE1hc2soMCkpOworICAgIG1f
Y29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmli
KCkpOworICAgIG1fY29udGV4dDNELT5zdGVuY2lsTWFzaygwKTsKIAogICAgIC8vIEluY3JlYXNl
IHN0ZW5jaWxJbmRleCBhbmQgYXBwbHkgc3RlbmNpbCB0ZXN0aW5nLgogICAgIHN0ZW5jaWxJbmRl
eCAqPSAyOwotICAgIGNsaXBTdGFjaygpLmFwcGx5KCk7CisgICAgY2xpcFN0YWNrKCkuYXBwbHko
bV9jb250ZXh0M0QuZ2V0KCkpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZW5kQ2xpcCgp
CiB7CiAgICAgY2xpcFN0YWNrKCkucG9wKCk7Ci0gICAgY2xpcFN0YWNrKCkuYXBwbHkoKTsKKyAg
ICBjbGlwU3RhY2soKS5hcHBseShtX2NvbnRleHQzRC5nZXQoKSk7CiB9CiAKIFBhc3NSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJlKCkKIHsKLSAgICBC
aXRtYXBUZXh0dXJlR0wqIHRleHR1cmUgPSBuZXcgQml0bWFwVGV4dHVyZUdMKCk7Ci0gICAgdGV4
dHVyZS0+c2V0VGV4dHVyZU1hcHBlcih0aGlzKTsKKyAgICBCaXRtYXBUZXh0dXJlR0wqIHRleHR1
cmUgPSBuZXcgQml0bWFwVGV4dHVyZUdMKHRoaXMpOwogICAgIHJldHVybiBhZG9wdFJlZih0ZXh0
dXJlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCmluZGV4IDA3NmU2NWY3Mzc3NjI2MWYwYTNiOTNi
Yjg1NzNhNTA1ZGU5YzAxNzAuLjhhNzJkNjdhZjllZWQyY2Q2YjkwZWU4MWE4NWM4MmE5ODA4ZWQ5
ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKQEAgLTIzLDggKzIzLDggQEAKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJPcGVu
R0xTaGltcy5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgogCkBAIC0zOCw3ICszOCw2IEBAIGNsYXNzIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOwogY2xhc3MgVGV4dHVyZU1hcHBlckdMIDogcHVibGljIFRleHR1cmVNYXBw
ZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXJHTD4gY3Jl
YXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJHTCk7IH0KLSAgICBUZXh0
dXJlTWFwcGVyR0woKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyR0woKTsKIAogICAgIGVu
dW0gRmxhZyB7CkBAIC01NCw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZHJh
d1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSog
bWFza1RleHR1cmUsIHVuc2lnbmVkIGV4cG9zZWRFZGdlcykgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCB2b2lkIGRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXpl
JiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRt
YXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzID0gQWxsRWRnZXMp
OwogCi0jaWYgZGVmaW5lZChHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUpCisjaWYgIVVTRShURVhN
QVBfT1BFTkdMX0VTXzIpCiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJC
KHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9k
ZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4
dHVyZSk7CiAjZW5kaWYKIApAQCAtNjYsNiArNjUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJ
bnRTaXplIG1heFRleHR1cmVTaXplKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gSW50U2l6ZSgy
MDAwLCAyMDAwKTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVh
dGVUZXh0dXJlKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQqIGdyYXBo
aWNzQ29udGV4dCgpIE9WRVJSSURFIHsgcmV0dXJuIG1fY29udGV4dDsgfQorICAgIGlubGluZSBH
cmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRleHQzRC5nZXQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0KSBPVkVSUklERSB7IG1fY29udGV4dCA9IGNvbnRleHQ7IH0K
IAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTc1LDcgKzc1LDYgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0RW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nKGJvb2wgZW5hYmxlZCkgeyBt
X2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyA9IGVuYWJsZWQ7IH0KIAogcHJpdmF0ZToK
LQogICAgIHN0cnVjdCBDbGlwU3RhdGUgewogICAgICAgICBJbnRSZWN0IHNjaXNzb3JCb3g7CiAg
ICAgICAgIGludCBzdGVuY2lsSW5kZXg7CkBAIC04OSw3ICs4OCw3IEBAIHByaXZhdGU6CiAgICAg
cHVibGljOgogICAgICAgICB2b2lkIHB1c2goKTsKICAgICAgICAgdm9pZCBwb3AoKTsKLSAgICAg
ICAgdm9pZCBhcHBseSgpOworICAgICAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dDNEKik7
CiAgICAgICAgIGlubGluZSBDbGlwU3RhdGUmIGN1cnJlbnQoKSB7IHJldHVybiBjbGlwU3RhdGU7
IH0KICAgICAgICAgdm9pZCBpbml0KGNvbnN0IEludFJlY3QmKTsKIApAQCAtMTA5LDE2ICsxMDgs
MTkgQEAgcHJpdmF0ZToKICAgICAgICAgRmxvYXRRdWFkIHRhcmdldFJlY3RNYXBwZWRUb1VuaXRT
cXVhcmU7CiAgICAgfTsKIAorICAgIFRleHR1cmVNYXBwZXJHTCgpOworCiAgICAgYm9vbCBkcmF3
VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MsIGNvbnN0IEZs
b2F0UmVjdCYgb3JpZ2luYWxUYXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNr
VGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKTsKICAgICB2b2lkIGRyYXdUZXh0dXJlZFF1
YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIHVpbnQzMl90IHRleHR1
cmUsIEZsYWdzLCBjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
b2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tU
ZXh0dXJlKTsKLSAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0qLCBHTGVudW0gZHJhd2luZ01vZGUsIGJvb2wgbmVlZHNCbGVuZGluZyk7CisgICAgdm9pZCBk
cmF3UXVhZChjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2Rl
bFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiwgR0MzRGVudW0gZHJhd2lu
Z01vZGUsIGJvb2wgbmVlZHNCbGVuZGluZyk7CiAKICAgICBib29sIGJlZ2luU2Npc3NvckNsaXAo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lk
IGJpbmREZWZhdWx0U3VyZmFjZSgpOwogICAgIENsaXBTdGFjayYgY2xpcFN0YWNrKCk7CiAgICAg
aW5saW5lIFRleHR1cmVNYXBwZXJHTERhdGEmIGRhdGEoKSB7IHJldHVybiAqbV9kYXRhOyB9Ci0g
ICAgVGV4dHVyZU1hcHBlckdMRGF0YSogbV9kYXRhOwogICAgIEdyYXBoaWNzQ29udGV4dCogbV9j
b250ZXh0OworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0M0Q7CisgICAg
VGV4dHVyZU1hcHBlckdMRGF0YSogbV9kYXRhOwogICAgIENsaXBTdGFjayBtX2NsaXBTdGFjazsK
ICAgICBib29sIG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nOwogCkBAIC0xMzUsNyAr
MTM3LDcgQEAgcHVibGljOgogICAgIHZvaWQgaW5pdGlhbGl6ZVN0ZW5jaWwoKTsKICAgICB+Qml0
bWFwVGV4dHVyZUdMKCk7CiAgICAgdmlydHVhbCB1aW50MzJfdCBpZCgpIGNvbnN0IHsgcmV0dXJu
IG1faWQ7IH0KLSAgICB1aW50MzJfdCB0ZXh0dXJlVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gR0xf
VEVYVFVSRV8yRDsgfQorICAgIHVpbnQzMl90IHRleHR1cmVUYXJnZXQoKSBjb25zdCB7IHJldHVy
biBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDsgfQogICAgIEludFNpemUgdGV4dHVyZVNp
emUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVTaXplOyB9CiAgICAgdm9pZCBzZXRUZXh0dXJl
TWFwcGVyKFRleHR1cmVNYXBwZXJHTCogdGV4bWFwKSB7IG1fdGV4dHVyZU1hcHBlciA9IHRleG1h
cDsgfQogICAgIHZvaWQgdXBkYXRlQ29udGVudHMoSW1hZ2UqLCBjb25zdCBJbnRSZWN0JiwgY29u
c3QgSW50UG9pbnQmKTsKQEAgLTE0NywyMCArMTQ5LDIyIEBAIHB1YmxpYzoKICNlbmRpZgogCiBw
cml2YXRlOgotICAgIEdMdWludCBtX2lkOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9pZDsKICAg
ICBJbnRTaXplIG1fdGV4dHVyZVNpemU7CiAgICAgSW50UmVjdCBtX2RpcnR5UmVjdDsKLSAgICBH
THVpbnQgbV9mYm87Ci0gICAgR0x1aW50IG1fcmJvOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9m
Ym87CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3JibzsKICAgICBib29sIG1fc2hvdWxkQ2xlYXI7
Ci0gICAgVGV4dHVyZU1hcHBlckdMKiBtX3RleHR1cmVNYXBwZXI7CiAgICAgVGV4dHVyZU1hcHBl
ckdMOjpDbGlwU3RhY2sgbV9jbGlwU3RhY2s7Ci0gICAgQml0bWFwVGV4dHVyZUdMKCkKKyAgICBU
ZXh0dXJlTWFwcGVyR0wqIG1fdGV4dHVyZU1hcHBlcjsKKworICAgIEJpdG1hcFRleHR1cmVHTCgp
OworICAgIEJpdG1hcFRleHR1cmVHTChUZXh0dXJlTWFwcGVyR0wqIHRleHR1cmVNYXBwZXIpCiAg
ICAgICAgIDogbV9pZCgwKQogICAgICAgICAsIG1fZmJvKDApCiAgICAgICAgICwgbV9yYm8oMCkK
ICAgICAgICAgLCBtX3Nob3VsZENsZWFyKHRydWUpCi0gICAgICAgICwgbV90ZXh0dXJlTWFwcGVy
KDApCisgICAgICAgICwgbV90ZXh0dXJlTWFwcGVyKHRleHR1cmVNYXBwZXIpCiAgICAgewogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKaW5kZXggMGZi
ZGJlOTVjYWYxNjQ3MGRkMDYzMmYwNGMxNDRiODIwYjZlOGJiMy4uOWM2ODQxYmU4YWJkZGU3ZjJh
YjAxMTM2ZjUzZjY4Mzc5YjI3MTA5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuY3BwCkBAIC0zMCwyNSArMzAsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0jaWZuZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgotI2RlZmluZSBPRVMyX1BSRUNJU0lPTl9ERUZJ
TklUSU9OUyBcCi0gICAgIiNkZWZpbmUgbG93cFxuI2RlZmluZSBoaWdocFxuIgotI2RlZmluZSBP
RVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTgotI2Vsc2UKLSNkZWZpbmUgT0VT
Ml9QUkVDSVNJT05fREVGSU5JVElPTlMKLSNkZWZpbmUgT0VTMl9GUkFHTUVOVF9TSEFERVJfREVG
QVVMVF9QUkVDSVNJT04gXAotICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgXG4iCi0jZW5k
aWYKLQotI2RlZmluZSBTVFJJTkdJRllfVkFMKHNyYy4uLikgI3NyYwotI2RlZmluZSBWRVJURVhf
U0hBREVSKHNyYy4uLikgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlNcCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTVFJJTkdJRllfVkFMKHNyYykKLSNkZWZpbmUgRlJBR01FTlRfU0hB
REVSKHNyYy4uLikgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlNcCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFVTFRfUFJFQ0lTSU9OXAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJJTkdJRllfVkFMKHNyYykKKyNkZWZp
bmUgU1RSSU5HSUZZKHNyYy4uLikgI3NyYwogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRT
aGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9Ci0gICAgRlJBR01FTlRfU0hBREVSKAorICAgIFNU
UklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgIHVuaWZv
cm0gc2FtcGxlcjJEIHNfc291cmNlOwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX21hc2s7
CiAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CkBAIC02NCw3ICs1MCw4IEBA
IHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrID0K
ICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0T3Bh
Y2l0eUFuZE1hc2sgPQotICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCisgICAg
ICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRFJl
Y3Qgc19zb3VyY2U7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX21hc2s7CiAgICAg
ICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CkBAIC04MCw3ICs2Nyw3IEBAIHN0YXRp
YyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5QW5kTWFzayA9CiAg
ICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRN
YXNrID0KLSAgICBWRVJURVhfU0hBREVSKAorICAgIFNUUklOR0lGWSgKICAgICAgICAgdW5pZm9y
bSBtYXQ0IHVfbWF0cml4OwogICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9mbGlwOwogICAg
ICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKQEAgLTk1LDcgKzgyLDggQEAgc3RhdGljIGNv
bnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrID0KICAgICApOwogCiBz
dGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUgPQotICAgIEZSQUdN
RU5UX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NvdXJjZTsKICAgICAgICAgdW5pZm9y
bSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291
cmNlVGV4Q29vcmQ7CkBAIC0xMDcsNyArOTUsOCBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21l
bnRTaGFkZXJTb3VyY2VTaW1wbGUgPQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFn
bWVudFNoYWRlclNvdXJjZUFudGlhbGlhc2luZ05vTWFzayA9Ci0gICAgRlJBR01FTlRfU0hBREVS
KAorICAgIFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAg
ICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwogICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZl
YzIgdl9zb3VyY2VUZXhDb29yZDsKICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0
eTsKQEAgLTE0NSw3ICsxMzQsOCBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJT
b3VyY2VBbnRpYWxpYXNpbmdOb01hc2sgPQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBm
cmFnbWVudFNoYWRlclNvdXJjZVJlY3RTaW1wbGUgPQotICAgIEZSQUdNRU5UX1NIQURFUigKKyAg
ICBTVFJJTkdJRlkoCisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1
bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc19zb3VyY2U7CiAgICAgICAgIHVuaWZvcm0gbG93cCB2ZWMy
IHVfdGV4dHVyZVNpemU7CiAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CkBA
IC0xNTgsNyArMTQ4LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNl
UmVjdFNpbXBsZSA9CiAgICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNv
dXJjZVNpbXBsZSA9Ci0gICAgVkVSVEVYX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCiAgICAgICAg
IHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfZmxp
cDsKICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CkBAIC0xNzEsNyArMTYxLDcgQEAg
c3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSA9CiAgICAgKTsKIAog
c3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNvbGlkQ29sb3IgPQotICAgIFZF
UlRFWF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAogICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRy
aXg7CiAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwogICAgICAgICB2b2lkIG1haW4o
dm9pZCkKQEAgLTE4Miw3ICsxNzIsOCBAQCBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVy
U291cmNlU29saWRDb2xvciA9CiAKIAogc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVy
U291cmNlU29saWRDb2xvciA9Ci0gICAgVkVSVEVYX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCisg
ICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1bmlmb3JtIHZlYzQgdV9j
b2xvcjsKICAgICAgICAgdm9pZCBtYWluKHZvaWQpCiAgICAgICAgIHsKQEAgLTIxMiwyMiArMjAz
LDIyIEBAIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9nCiAKICAgICBzd2l0Y2ggKHNoYWRlclR5cGUp
IHsKICAgICBjYXNlIFNpbXBsZToKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU2ltcGxlOjpjcmVhdGUoKTsKKyAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpjcmVhdGUobV9jb250ZXh0KTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBSZWN0U2ltcGxlOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1SZWN0U2ltcGxlOjpjcmVhdGUoKTsKKyAgICAgICAgcHJvZ3JhbSA9IFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQW50aWFsaWFzaW5nTm9NYXNrOgotICAgICAgICBwcm9ncmFt
ID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OmNyZWF0ZSgp
OworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNp
bmdOb01hc2s6OmNyZWF0ZShtX2NvbnRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE9w
YWNpdHlBbmRNYXNrOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpjcmVhdGUobV9jb250ZXh0KTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBSZWN0T3BhY2l0eUFuZE1hc2s6Ci0gICAgICAgIHByb2dyYW0g
PSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6Y3JlYXRlKCk7
CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5
QW5kTWFzazo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU29s
aWRDb2xvcjoKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29s
aWRDb2xvcjo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNvbGlkQ29sb3I6OmNyZWF0ZShtX2NvbnRleHQpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEludmFsaWQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjM2LDgg
KzIyNyw5IEBAIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9nCiAgICAgcmV0dXJuIHByb2dyYW07CiB9
CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bShjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hh
ZGVyU291cmNlKQotICAgIDogbV9pZCgwKQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25z
dCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291
cmNlKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX2lkKDApCiAgICAgLCBtX3Zl
cnRleEF0dHJpYigwKQogICAgICwgbV92ZXJ0ZXhTaGFkZXIoMCkKICAgICAsIG1fZnJhZ21lbnRT
aGFkZXIoMCkKQEAgLTI1Niw0NiArMjQ4LDQ2IEBAIHZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW06OmluaXRpYWxpemVQcm9ncmFtKCkKIHsKICAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFk
ZXJTb3VyY2VQcm9ncmFtID0gdmVydGV4U2hhZGVyU291cmNlKCk7CiAgICAgY29uc3QgY2hhciog
ZnJhZ21lbnRTaGFkZXJTb3VyY2VQcm9ncmFtID0gZnJhZ21lbnRTaGFkZXJTb3VyY2UoKTsKLSAg
ICBHTHVpbnQgdmVydGV4U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7
Ci0gICAgR0x1aW50IGZyYWdtZW50U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRf
U0hBREVSKTsKLSAgICBnbFNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFk
ZXJTb3VyY2VQcm9ncmFtLCAwKTsKLSAgICBnbFNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwg
MSwgJmZyYWdtZW50U2hhZGVyU291cmNlUHJvZ3JhbSwgMCk7Ci0gICAgR0x1aW50IHByb2dyYW1J
RCA9IGdsQ3JlYXRlUHJvZ3JhbSgpOwotICAgIGdsQ29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIp
OwotICAgIGdsQ29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CisgICAgUGxhdGZvcm0zRE9i
amVjdCB2ZXJ0ZXhTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRl
eHQzRDo6VkVSVEVYX1NIQURFUik7CisgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNoYWRl
ciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9T
SEFERVIpOworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4
U2hhZGVyU291cmNlUHJvZ3JhbSk7CisgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UoZnJhZ21l
bnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyU291cmNlUHJvZ3JhbSk7CisgICAgUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtSUQgPSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKKyAgICBtX2NvbnRl
eHQtPmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmNvbXBpbGVT
aGFkZXIoZnJhZ21lbnRTaGFkZXIpOwogCi0gICAgZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2
ZXJ0ZXhTaGFkZXIpOwotICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRTaGFk
ZXIpOwotICAgIGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlEKTsKKyAgICBtX2NvbnRleHQtPmF0dGFj
aFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5hdHRhY2hT
aGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5saW5rUHJv
Z3JhbShwcm9ncmFtSUQpOwogCi0gICAgbV92ZXJ0ZXhBdHRyaWIgPSBnbEdldEF0dHJpYkxvY2F0
aW9uKHByb2dyYW1JRCwgImFfdmVydGV4Iik7CisgICAgbV92ZXJ0ZXhBdHRyaWIgPSBtX2NvbnRl
eHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdmVydGV4Iik7CiAKICAgICBtX2lk
ID0gcHJvZ3JhbUlEOwogICAgIG1fdmVydGV4U2hhZGVyID0gdmVydGV4U2hhZGVyOwogICAgIG1f
ZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNoYWRlcjsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKEdMaW50ICZ2YXJpYWJsZSwgY29uc3Qg
Y2hhciogbmFtZSkKK3ZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldFVuaWZvcm1M
b2NhdGlvbihHQzNEaW50ICZ2YXJpYWJsZSwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICB2YXJp
YWJsZSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1faWQsIG5hbWUpOworICAgIHZhcmlhYmxlID0g
bV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9pZCwgbmFtZSk7CiAgICAgQVNTRVJUKHZh
cmlhYmxlID49IDApOwogfQogCiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKCkKIHsKLSAgICBHTHVpbnQgcHJvZ3JhbUlEID0gbV9pZDsKKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCA9IG1faWQ7CiAgICAgaWYgKCFwcm9ncmFtSUQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGdsRGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV92ZXJ0
ZXhTaGFkZXIpOwotICAgIGdsRGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKLSAgICBnbERl
dGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsRGVsZXRlU2hh
ZGVyKG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwor
ICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV92ZXJ0ZXhTaGFkZXIpOwor
ICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRl
eHQtPmRldGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29u
dGV4dC0+ZGVsZXRlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGVs
ZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNp
bXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKQotICAgIDogVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRl
clNvdXJjZVNpbXBsZSkKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAg
ICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJj
ZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUpCiB7CiAgICAgaW5pdGlhbGl6ZVBy
b2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9mbGlwTG9jYXRpb24sICJ1X2ZsaXAi
KTsKQEAgLTMwNCwxNiArMjk2LDE2IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxl
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpCiAgICAgZ2V0VW5pZm9ybUxvY2F0
aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7CiB9CiAKLVRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENv
bG9yKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJj
ZVNvbGlkQ29sb3IsIGZyYWdtZW50U2hhZGVyU291cmNlU29saWRDb2xvcikKK1RleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xp
ZENvbG9yKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDogVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlU29saWRDb2xvciwgZnJhZ21l
bnRTaGFkZXJTb3VyY2VTb2xpZENvbG9yKQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAg
ICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwogICAg
IGdldFVuaWZvcm1Mb2NhdGlvbihtX2NvbG9yTG9jYXRpb24sICJ1X2NvbG9yIik7CiB9CiAKLVRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1SZWN0U2ltcGxlKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRl
eFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0U2ltcGxlKQorVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVJlY3RTaW1wbGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZy
YWdtZW50U2hhZGVyU291cmNlUmVjdFNpbXBsZSkKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgp
OwogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsK
QEAgLTMyMyw4ICszMTUsOCBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgpCiAgICAgZ2V0VW5pZm9ybUxv
Y2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7CiB9CiAKLVRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
T3BhY2l0eUFuZE1hc2soKQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odmVydGV4
U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0eUFu
ZE1hc2spCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hh
ZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0eUFuZE1h
c2spCiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24o
bV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7CkBAIC0zMzQsOCArMzI2LDggQEAgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1PcGFjaXR5QW5kTWEKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRp
b24sICJ1X29wYWNpdHkiKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3Bh
Y2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNr
KCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZU9w
YWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5QW5kTWFzaykKK1Rl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayhHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKKyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRl
clNvdXJjZU9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5QW5k
TWFzaykKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVuaWZvcm1Mb2NhdGlv
bihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKQEAgLTM0NSw4ICszMzcsOCBAQCBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1SZWN0T3BhYwogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlMb2Nh
dGlvbiwgInVfb3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlh
bGlhc2luZ05vTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01h
c2soKQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNl
U2ltcGxlLCBmcmFnbWVudFNoYWRlclNvdXJjZUFudGlhbGlhc2luZ05vTWFzaykKK1RleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAg
ICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJj
ZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNpbmdOb01hc2spCiB7CiAgICAg
aW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2Nh
dGlvbiwgInVfbWF0cml4Iik7CkBAIC0zNTYsOSArMzQ4LDkgQEAgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50
aWFsaWEKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9mbGlwTG9jYXRpb24sICJ1X2ZsaXAiKTsK
IH0KIAotVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyKCkKK1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0
KQogewotICAgIEFTU0VSVChpbml0aWFsaXplT3BlbkdMU2hpbXMoKSk7CiB9CiAKIFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKQpAQCAtMzcz
LDE4ICszNjUsMTkgQEAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6On5UZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcigpCiAKIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6flN0YW5kYXJkRmlsdGVy
UHJvZ3JhbSgpCiB7Ci0gICAgZ2xEZXRhY2hTaGFkZXIobV9pZCwgbV92ZXJ0ZXhTaGFkZXIpOwot
ICAgIGdsRGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKLSAgICBnbERldGFjaFNoYWRlciht
X2lkLCBtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hh
ZGVyKTsKLSAgICBnbERlbGV0ZVByb2dyYW0obV9pZCk7CisgICAgbV9jb250ZXh0LT5kZXRhY2hT
aGFkZXIobV9pZCwgbV92ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVy
KG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihtX2lkLCBtX2Zy
YWdtZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hh
ZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV9pZCk7CiB9CiAKLVN0YW5kYXJk
RmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3Bl
cmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQotICAgIDogbV9pZCgwKQorU3RhbmRhcmRG
aWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNz
KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX2lkKDApCiB7CiAgICAgY29uc3Qg
Y2hhciogdmVydGV4U2hhZGVyU291cmNlID0KLSAgICAgICAgICAgIFZFUlRFWF9TSEFERVIoCisg
ICAgICAgICAgICBTVFJJTkdJRlkoCiAgICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92
ZXJ0ZXg7CiAgICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV90ZXhDb29yZDsKICAgICAg
ICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKQEAgLTM5Niw4ICszODks
NyBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJP
cGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICAgICAgKTsKIAogI2RlZmluZSBT
VEFOREFSRF9GSUxURVIoeC4uLikgXAotICAgICAgICBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9O
U1wKLSAgICAgICAgT0VTMl9GUkFHTUVOVF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT05cCisgICAg
ICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiJcCiAgICAgICAgICJ2YXJ5aW5nIGhpZ2hw
IHZlYzIgdl90ZXhDb29yZDtcbiJcCiAgICAgICAgICJ1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYW1v
dW50O1xuIlwKICAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbiJcCkBAIC00
MDgsOSArNDAwLDkgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dy
YW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgogICAgICAgICBmcmFnbWVu
dFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgICAgIGxvd3AgdmVjNCBz
aGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgICAgICB2ZWM0IHNoYWRlKHZlYzQgY29sb3Ip
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbG93cCBmbG9hdCBhbW91bnQgPSAxLjAg
LSB1X2Ftb3VudDsKKyAgICAgICAgICAgICAgICBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3Vu
dDsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNCgoMC4yMTI2ICsgMC43ODc0ICogYW1vdW50
KSAqIGNvbG9yLnIgKyAoMC43MTUyIC0gMC43MTUyICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4w
NzIyIC0gMC4wNzIyICogYW1vdW50KSAqIGNvbG9yLmIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKDAuMjEyNiAtIDAuMjEyNiAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiArIDAu
Mjg0OCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcyMiAqIGFtb3VudCkgKiBj
b2xvci5iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjIxMjYgLSAwLjIxMjYgKiBh
bW91bnQpICogY29sb3IuciArICgwLjcxNTIgLSAwLjcxNTIgKiBhbW91bnQpICogY29sb3IuZyAr
ICgwLjA3MjIgKyAwLjkyNzggKiBhbW91bnQpICogY29sb3IuYiwKQEAgLTQyMCw5ICs0MTIsOSBA
QCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVy
YXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6U0VQSUE6CiAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRB
UkRfRklMVEVSKAotICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikK
KyAgICAgICAgICAgIHZlYzQgc2hhZGUodmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBsb3dwIGZsb2F0IGFtb3VudCA9IDEuMCAtIHVfYW1vdW50OworICAgICAgICAg
ICAgICAgIGZsb2F0IGFtb3VudCA9IDEuMCAtIHVfYW1vdW50OwogICAgICAgICAgICAgICAgIHJl
dHVybiB2ZWM0KCgwLjM5MyArIDAuNjA3ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43NjkgLSAw
Ljc2OSAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTg5IC0gMC4xODkgKiBhbW91bnQpICogY29s
b3IuYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4zNDkgLSAwLjM0OSAqIGFtb3Vu
dCkgKiBjb2xvci5yICsgKDAuNjg2ICsgMC4zMTQgKiBhbW91bnQpICogY29sb3IuZyArICgwLjE2
OCAtIDAuMTY4ICogYW1vdW50KSAqIGNvbG9yLmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKDAuMjcyIC0gMC4yNzIgKiBhbW91bnQpICogY29sb3IuciArICgwLjUzNCAtIDAuNTM0ICog
YW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xMzEgKyAwLjg2OSAqIGFtb3VudCkgKiBjb2xvci5iLApA
QCAtNDMyLDcgKzQyNCw3IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQ
cm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKICAgICAgICAgZnJhZ21lbnRT
aGFkZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICBsb3dwIHZlYzQgc2hh
ZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICAgICAgdmVjNCBzaGFkZSh2ZWM0IGNvbG9yKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KCgwLjIxMyArIDAuNzg3
ICogdV9hbW91bnQpICogY29sb3IuciArICgwLjcxNSAtIDAuNzE1ICogdV9hbW91bnQpICogY29s
b3IuZyArICgwLjA3MiAtIDAuMDcyICogdV9hbW91bnQpICogY29sb3IuYiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoMC4yMTMgLSAwLjIxMyAqIHVfYW1vdW50KSAqIGNvbG9yLnIgKyAo
MC43MTUgKyAwLjI4NSAqIHVfYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVf
YW1vdW50KSAqIGNvbG9yLmIsCkBAIC00NDMsMTEgKzQzNSwxMSBAQCBTdGFuZGFyZEZpbHRlclBy
b2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5
cGUgdHlwZQogICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JP
VEFURToKICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCi0g
ICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICAgICAg
dmVjNCBzaGFkZSh2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGhp
Z2hwIGZsb2F0IHBpID0gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjsKLSAgICAgICAgICAgICAgICBo
aWdocCBmbG9hdCBjID0gY29zKHVfYW1vdW50ICogcGkgLyAxODAuMCk7Ci0gICAgICAgICAgICAg
ICAgaGlnaHAgZmxvYXQgcyA9IHNpbih1X2Ftb3VudCAqIHBpIC8gMTgwLjApOworICAgICAgICAg
ICAgICAgIGZsb2F0IHBpID0gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjsKKyAgICAgICAgICAgICAg
ICBmbG9hdCBjID0gY29zKHVfYW1vdW50ICogcGkgLyAxODAuMCk7CisgICAgICAgICAgICAgICAg
ZmxvYXQgcyA9IHNpbih1X2Ftb3VudCAqIHBpIC8gMTgwLjApOwogICAgICAgICAgICAgICAgIHJl
dHVybiB2ZWM0KGNvbG9yLnIgKiAoMC4yMTMgKyBjICogMC43ODcgLSBzICogMC4yMTMpICsgY29s
b3IuZyAqICgwLjcxNSAtIGMgKiAwLjcxNSAtIHMgKiAwLjcxNSkgKyBjb2xvci5iICogKDAuMDcy
IC0gYyAqIDAuMDcyICsgcyAqIDAuOTI4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b2xvci5yICogKDAuMjEzIC0gYyAqIDAuMjEzICsgcyAqIDAuMTQzKSArIGNvbG9yLmcgKiAoMC43
MTUgKyBjICogMC4yODUgKyBzICogMC4xNDApICsgY29sb3IuYiAqICgwLjA3MiAtIGMgKiAwLjA3
MiAtIHMgKiAwLjI4MyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuciAqICgw
LjIxMyAtIGMgKiAwLjIxMyAtIHMgKiAwLjc4NykgKyAgY29sb3IuZyAqICgwLjcxNSAtIGMgKiAw
LjcxNSArIHMgKiAwLjcxNSkgKyBjb2xvci5iICogKDAuMDcyICsgYyAqIDAuOTI4ICsgcyAqIDAu
MDcyKSwKQEAgLTQ1Nyw4ICs0NDksOCBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJk
RmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgogICAgICAgICBmcmFn
bWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgICAgIGxvd3AgZmxv
YXQgaW52ZXJ0KGxvd3AgZmxvYXQgbikgeyByZXR1cm4gKDEuMCAtIG4pICogdV9hbW91bnQgKyBu
ICogKDEuMCAtIHVfYW1vdW50KTsgfQotICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3Ag
dmVjNCBjb2xvcikKKyAgICAgICAgICAgIGZsb2F0IGludmVydChmbG9hdCBuKSB7IHJldHVybiAo
MS4wIC0gbikgKiB1X2Ftb3VudCArIG4gKiAoMS4wIC0gdV9hbW91bnQpOyB9CisgICAgICAgICAg
ICB2ZWM0IHNoYWRlKHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIHZlYzQoaW52ZXJ0KGNvbG9yLnIpLCBpbnZlcnQoY29sb3IuZyksIGludmVydChjb2xv
ci5iKSwgY29sb3IuYSk7CiAgICAgICAgICAgICB9CkBAIC00NjYsNyArNDU4LDcgQEAgU3RhbmRh
cmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpP
cGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkJSSUdIVE5FU1M6CiAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRf
RklMVEVSKAotICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKKyAg
ICAgICAgICAgIHZlYzQgc2hhZGUodmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gdmVjNChjb2xvci5yZ2IgKiAoMS4wICsgdV9hbW91bnQpLCBjb2xvci5h
KTsKICAgICAgICAgICAgIH0KQEAgLTQ3NCw4ICs0NjYsOCBAQCBTdGFuZGFyZEZpbHRlclByb2dy
YW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUg
dHlwZQogICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6
CiAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAg
ICAgICAgbG93cCBmbG9hdCBjb250cmFzdChsb3dwIGZsb2F0IG4pIHsgcmV0dXJuIChuIC0gMC41
KSAqIHVfYW1vdW50ICsgMC41OyB9Ci0gICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2
ZWM0IGNvbG9yKQorICAgICAgICAgICAgZmxvYXQgY29udHJhc3QoZmxvYXQgbikgeyByZXR1cm4g
KG4gLSAwLjUpICogdV9hbW91bnQgKyAwLjU7IH0KKyAgICAgICAgICAgIHZlYzQgc2hhZGUodmVj
NCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChjb250
cmFzdChjb2xvci5yKSwgY29udHJhc3QoY29sb3IuZyksIGNvbnRyYXN0KGNvbG9yLmIpLCBjb2xv
ci5hKTsKICAgICAgICAgICAgIH0KQEAgLTQ4MywyMCArNDc1LDIxIEBAIFN0YW5kYXJkRmlsdGVy
UHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9u
VHlwZSB0eXBlCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFD
SVRZOgogICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAg
ICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgICAgICB2
ZWM0IHNoYWRlKHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHZlYzQoY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSAqIHVfYW1vdW50KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJMVVI6Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gRlJBR01F
TlRfU0hBREVSKAorICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUUklOR0lGWSgKKyAg
ICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICAgICAgdmFyeWluZyBo
aWdocCB2ZWMyIHZfdGV4Q29vcmQ7CiAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1X2Js
dXJSYWRpdXM7CiAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7CiAgICAg
ICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hB
TEZfV0lEVEhdOwogCi0gICAgICAgICAgICBsb3dwIHZlYzQgc2FtcGxlQ29sb3IoZmxvYXQgcmFk
aXVzKQorICAgICAgICAgICAgdmVjNCBzYW1wbGVDb2xvcihmbG9hdCByYWRpdXMpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgKyByYWRpdXMg
KiB1X2JsdXJSYWRpdXM7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUyRCh1X3RleHR1
cmUsIGNvb3JkKSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQu
eCA8IDEuICYmIGNvb3JkLnkgPCAxLik7CkBAIC01MjMsMjAgKzUxNiwyMCBAQCBTdGFuZGFyZEZp
bHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJh
dGlvblR5cGUgdHlwZQogICAgICAgICBzd2l0Y2ggKHBhc3MpIHsKICAgICAgICAgY2FzZSAwOiB7
CiAgICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiBob3Jpem9udGFsIGFscGhhIGJsdXIuCi0gICAg
ICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IEZSQUdNRU5UX1NIQURFUigKKyAgICAgICAg
ICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RSSU5HSUZZKAogICAgICAgICAgICAgICAgIHZh
cnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOwogICAgICAgICAgICAgICAgIHVuaWZvcm0gbG93
cCBmbG9hdCB1X3NoYWRvd0JsdXJSYWRpdXM7CiAgICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dw
IHZlYzIgdV9zaGFkb3dPZmZzZXQ7CiAgICAgICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQg
dV90ZXh0dXJlOwogICAgICAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5l
bFtHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSF07CiAKLSAgICAgICAgICAgICAgICBsb3dwIGZs
b2F0IHNhbXBsZUFscGhhKGZsb2F0IHJhZGl1cykKKyAgICAgICAgICAgICAgICBmbG9hdCBzYW1w
bGVBbHBoYShmbG9hdCByYWRpdXMpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCAtIHVfc2hhZG93T2Zmc2V0ICsgdmVjMihyYWRp
dXMgKiB1X3NoYWRvd0JsdXJSYWRpdXMsIDAuKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRleHR1cmUyRCh1X3RleHR1cmUsIGNvb3JkKS5hICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNv
b3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IHNoYWRvd0JsdXJIb3Jpem9udGFs
KCkKKyAgICAgICAgICAgICAgICBmbG9hdCBzaGFkb3dCbHVySG9yaXpvbnRhbCgpCiAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBmbG9hdCB0b3RhbCA9IHNhbXBsZUFscGhh
KDApICogdV9nYXVzc2lhbktlcm5lbFswXTsKICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgaSsrKSB7CkBAIC01NTYsNyAr
NTQ5LDcgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmls
dGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgICAgIH0KICAgICAgICAg
Y2FzZSAxOiB7CiAgICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogdmVydGljYWwgYWxwaGEgYmx1
ciBhbmQgY29tcG9zaXRlIHdpdGggb3JpZ2luLgotICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXJT
b3VyY2UgPSBGUkFHTUVOVF9TSEFERVIoCisgICAgICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJj
ZSA9IFNUUklOR0lGWSgKICAgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhD
b29yZDsKICAgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9zaGFkb3dCbHVyUmFk
aXVzOwogICAgICAgICAgICAgICAgIHVuaWZvcm0gbG93cCB2ZWM0IHVfc2hhZG93Q29sb3I7CkBA
IC01NjQsMTMgKzU1NywxMyBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVy
UHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICAgICAg
ICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVfY29udGVudFRleHR1cmU7CiAgICAgICAgICAgICAgICAg
dW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRI
XTsKIAotICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgc2FtcGxlQWxwaGEoZmxvYXQgcikKKyAg
ICAgICAgICAgICAgICBmbG9hdCBzYW1wbGVBbHBoYShmbG9hdCByKQogICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgKyB2ZWMyKDAu
LCByICogdV9zaGFkb3dCbHVyUmFkaXVzKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRl
eHR1cmUyRCh1X3RleHR1cmUsIGNvb3JkKS5hICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3Jk
LnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IHNoYWRvd0JsdXJWZXJ0aWNhbCgpCisg
ICAgICAgICAgICAgICAgZmxvYXQgc2hhZG93Qmx1clZlcnRpY2FsKCkKICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHRvdGFsID0gc2FtcGxlQWxwaGEoMCkgKiB1
X2dhdXNzaWFuS2VybmVsWzBdOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsg
aSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKQEAgLTU4MSw3ICs1NzQsNyBA
QCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVy
YXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG90
YWw7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgbG93cCB2ZWM0IHNvdXJj
ZU92ZXIobG93cCB2ZWM0IHNvdXJjZSwgbG93cCB2ZWM0IGRlc3RpbmF0aW9uKQorICAgICAgICAg
ICAgICAgIHZlYzQgc291cmNlT3Zlcih2ZWM0IHNvdXJjZSwgdmVjNCBkZXN0aW5hdGlvbikKICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIC8vIENvbXBvc2l0ZSB0aGUgc2hh
ZG93IHdpdGggdGhlIG9yaWdpbmFsIHRleHR1cmUuCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzb3VyY2UgKyBkZXN0aW5hdGlvbiAqICgxLiAtIHNvdXJjZS5hKTsKQEAgLTYwMiwyNiArNTk1
LDI1IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRl
ck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAKICAgICBpZiAoIWZyYWdtZW50U2hhZGVy
U291cmNlKQogICAgICAgICByZXR1cm47Ci0gICAgR0x1aW50IHZlcnRleFNoYWRlciA9IGdsQ3Jl
YXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOwotICAgIEdMdWludCBmcmFnbWVudFNoYWRlciA9
IGdsQ3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURFUik7Ci0gICAgZ2xTaGFkZXJTb3VyY2Uo
dmVydGV4U2hhZGVyLCAxLCAmdmVydGV4U2hhZGVyU291cmNlLCAwKTsKLSAgICBnbFNoYWRlclNv
dXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdtZW50U2hhZGVyU291cmNlLCAwKTsKLSAgICBH
THVpbnQgcHJvZ3JhbUlEID0gZ2xDcmVhdGVQcm9ncmFtKCk7Ci0gICAgZ2xDb21waWxlU2hhZGVy
KHZlcnRleFNoYWRlcik7Ci0gICAgZ2xDb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVy
KEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0
IGZyYWdtZW50U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQUdNRU5UX1NIQURFUik7CisgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UodmVydGV4
U2hhZGVyLCB2ZXJ0ZXhTaGFkZXJTb3VyY2UpOworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNl
KGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlclNvdXJjZSk7CisgICAgUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtSUQgPSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKKyAgICBtX2NvbnRl
eHQtPmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmNvbXBpbGVT
aGFkZXIoZnJhZ21lbnRTaGFkZXIpOwogI2lmICFMT0dfRElTQUJMRUQKLSAgICBHTGNoYXIgbG9n
WzEwMF07Ci0gICAgR0xpbnQgbGVuOwotICAgIGdsR2V0U2hhZGVySW5mb0xvZyhmcmFnbWVudFNo
YWRlciwgMTAwLCAmbGVuLCBsb2cpOworICAgIFN0cmluZyBsb2c7CisgICAgbV9jb250ZXh0LT5n
ZXRTaGFkZXJJbmZvTG9nKGZyYWdtZW50U2hhZGVyKTsKICAgICBXVEZMb2coJkxvZ0NvbXBvc2l0
aW5nLCAiJXNcbiIsIGxvZyk7CiAjZW5kaWYKLSAgICBnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQs
IHZlcnRleFNoYWRlcik7Ci0gICAgZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNo
YWRlcik7Ci0gICAgZ2xMaW5rUHJvZ3JhbShwcm9ncmFtSUQpOworICAgIG1fY29udGV4dC0+YXR0
YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmF0dGFj
aFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmxpbmtQ
cm9ncmFtKHByb2dyYW1JRCk7CiAKLSAgICBtX3ZlcnRleEF0dHJpYiA9IGdsR2V0QXR0cmliTG9j
YXRpb24ocHJvZ3JhbUlELCAiYV92ZXJ0ZXgiKTsKLSAgICBtX3RleENvb3JkQXR0cmliID0gZ2xH
ZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3RleENvb3JkIik7Ci0gICAgbV90ZXh0dXJl
VW5pZm9ybUxvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV90ZXh0
dXJlIik7CisgICAgbV92ZXJ0ZXhBdHRyaWIgPSBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9u
KHByb2dyYW1JRCwgImFfdmVydGV4Iik7CisgICAgbV90ZXhDb29yZEF0dHJpYiA9IG1fY29udGV4
dC0+Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiYV90ZXhDb29yZCIpOworICAgIG1fdGV4
dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dy
YW1JRCwgInVfdGV4dHVyZSIpOwogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpHUkFZU0NBTEU6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgpA
QCAtNjMxLDIxICs2MjMsMjEgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRl
clByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09O
VFJBU1Q6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIG1fdW5p
Zm9ybUxvY2F0aW9ucy5hbW91bnQgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1
X2Ftb3VudCIpOworICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuYW1vdW50ID0gbV9jb250ZXh0
LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9hbW91bnQiKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6Ci0gICAgICAgIG1fdW5pZm9ybUxv
Y2F0aW9ucy5ibHVyLnJhZGl1cyA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVf
Ymx1clJhZGl1cyIpOwotICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktl
cm5lbCA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfZ2F1c3NpYW5LZXJuZWwi
KTsKKyAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmJsdXIucmFkaXVzID0gbV9jb250ZXh0LT5n
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9ibHVyUmFkaXVzIik7CisgICAgICAgIG1f
dW5pZm9ybUxvY2F0aW9ucy5ibHVyLmdhdXNzaWFuS2VybmVsID0gbV9jb250ZXh0LT5nZXRVbmlm
b3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9nYXVzc2lhbktlcm5lbCIpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6Ci0gICAgICAgIG1fdW5p
Zm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1cyA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW1JRCwgInVfc2hhZG93Qmx1clJhZGl1cyIpOwotICAgICAgICBtX3VuaWZvcm1Mb2NhdGlv
bnMuc2hhZG93LmdhdXNzaWFuS2VybmVsID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlE
LCAidV9nYXVzc2lhbktlcm5lbCIpOworICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93
LmJsdXJSYWRpdXMgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1
X3NoYWRvd0JsdXJSYWRpdXMiKTsKKyAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5n
YXVzc2lhbktlcm5lbCA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwg
InVfZ2F1c3NpYW5LZXJuZWwiKTsKICAgICAgICAgaWYgKCFwYXNzKQotICAgICAgICAgICAgbV91
bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5vZmZzZXQgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9n
cmFtSUQsICJ1X3NoYWRvd09mZnNldCIpOworICAgICAgICAgICAgbV91bmlmb3JtTG9jYXRpb25z
LnNoYWRvdy5vZmZzZXQgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQs
ICJ1X3NoYWRvd09mZnNldCIpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlIG9u
bHkgbmVlZCB0aGUgY29sb3IgYW5kIHRoZSBjb250ZW50IHRleHR1cmUgaW4gdGhlIHNlY29uZCBw
YXNzLCB0aGUgZmlyc3QgcGFzcyBpcyBvbmx5IGEgaG9yaXpvbnRhbCBhbHBoYSBibHVyLgotICAg
ICAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb2xvciA9IGdsR2V0VW5pZm9ybUxv
Y2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93Q29sb3IiKTsKLSAgICAgICAgICAgIG1fdW5pZm9y
bUxvY2F0aW9ucy5zaGFkb3cuY29udGVudFRleHR1cmUgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtSUQsICJ1X2NvbnRlbnRUZXh0dXJlIik7CisgICAgICAgICAgICBtX3VuaWZvcm1Mb2Nh
dGlvbnMuc2hhZG93LmNvbG9yID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3Jh
bUlELCAidV9zaGFkb3dDb2xvciIpOworICAgICAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNo
YWRvdy5jb250ZW50VGV4dHVyZSA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dy
YW1JRCwgInVfY29udGVudFRleHR1cmUiKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAg
ICBkZWZhdWx0OgpAQCAtNjU2LDkgKzY0OCw5IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAg
ICAgbV9mcmFnbWVudFNoYWRlciA9IGZyYWdtZW50U2hhZGVyOwogfQogCi1QYXNzUmVmUHRyPFN0
YW5kYXJkRmlsdGVyUHJvZ3JhbT4gU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpjcmVhdGUoRmlsdGVy
T3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUsIHVuc2lnbmVkIHBhc3MpCitQYXNzUmVmUHRy
PFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpjcmVhdGUoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0
eXBlLCB1bnNpZ25lZCBwYXNzKQogewotICAgIFJlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+
IHByb2dyYW0gPSBhZG9wdFJlZihuZXcgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKHR5cGUsIHBhc3Mp
KTsKKyAgICBSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0gYWRvcHRSZWYo
bmV3IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbShjb250ZXh0LCB0eXBlLCBwYXNzKSk7CiAgICAgaWYg
KCFwcm9ncmFtLT5tX2lkKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtNjk0LDIxICs2ODYsMjEg
QEAgc3RhdGljIGZsb2F0KiBnYXVzc2lhbktlcm5lbCgpCiAgICAgcmV0dXJuIGtlcm5lbDsKIH0K
IAotdm9pZCBTdGFuZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0
aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHBhc3MsIGNvbnN0IEludFNpemUmIHNpemUsIEdMdWlu
dCBjb250ZW50VGV4dHVyZSkKK3ZvaWQgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpwcmVwYXJlKGNv
bnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0aW9uLCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRT
aXplJiBzaXplLCBHQzNEdWludCBjb250ZW50VGV4dHVyZSkKIHsKLSAgICBnbFVzZVByb2dyYW0o
bV9pZCk7CisgICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKG1faWQpOwogICAgIHN3aXRjaCAob3Bl
cmF0aW9uLmdldE9wZXJhdGlvblR5cGUoKSkgewogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpH
UkFZU0NBTEU6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgogICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpTQVRVUkFURToKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JP
VEFURToKLSAgICAgICAgZ2xVbmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCwgc3Rh
dGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlv
bikuYW1vdW50KCkpOworICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihtX3VuaWZvcm1Mb2Nh
dGlvbnMuYW1vdW50LCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdI
VE5FU1M6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgogICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpPUEFDSVRZOgotICAgICAgICBnbFVuaWZvcm0xZihtX3VuaWZvcm1Mb2Nh
dGlvbnMuYW1vdW50LCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7CisgICAgICAgIG1fY29udGV4dC0+
dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0YXRpY19jYXN0PGNvbnN0IEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKICAg
ICAgICAgY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ciA9IHN0YXRpY19jYXN0PGNvbnN0
IEJsdXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pOwpAQCAtNzIwLDggKzcxMiw4IEBAIHZv
aWQgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYg
b3BlcmF0aW9uLCB1bnNpZ25lZCBwCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJhZGl1cy5z
ZXRXaWR0aChmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXIuc3RkRGV2aWF0aW9uKCksIHNpemUud2lk
dGgoKSkgLyBzaXplLndpZHRoKCkpOwogCi0gICAgICAgIGdsVW5pZm9ybTJmKG1fdW5pZm9ybUxv
Y2F0aW9ucy5ibHVyLnJhZGl1cywgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSk7Ci0g
ICAgICAgIGdsVW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktlcm5l
bCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOworICAgICAg
ICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5yYWRpdXMsIHJh
ZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpOworICAgICAgICBtX2NvbnRleHQtPnVuaWZv
cm0xZnYobV91bmlmb3JtTG9jYXRpb25zLmJsdXIuZ2F1c3NpYW5LZXJuZWwsIEdBVVNTSUFOX0tF
Uk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogewpAQCAtNzI5LDIwICs3
MjEsMjAgQEAgdm9pZCBTdGFuZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVy
T3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHAKICAgICAgICAgc3dpdGNoIChwYXNzKSB7
CiAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgIC8vIEZpcnN0IHBhc3M6IHZlcnRpY2FsIGFs
cGhhIGJsdXIuCi0gICAgICAgICAgICBnbFVuaWZvcm0yZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hh
ZG93Lm9mZnNldCwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueCgpKSAvIGZsb2F0KHNpemUud2lk
dGgoKSksIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigpLnkoKSkgLyBmbG9hdChzaXplLmhlaWdodCgp
KSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJs
dXJSYWRpdXMsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUud2lkdGgoKSkpOwot
ICAgICAgICAgICAgZ2xVbmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3Np
YW5LZXJuZWwsIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsK
KyAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFk
b3cub2Zmc2V0LCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQoc2l6ZS53aWR0
aCgpKSwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkp
KTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5z
aGFkb3cuYmx1clJhZGl1cywgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS53aWR0
aCgpKSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobV91bmlmb3JtTG9jYXRp
b25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdh
dXNzaWFuS2VybmVsKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgMToKICAg
ICAgICAgICAgIC8vIFNlY29uZCBwYXNzOiB3ZSBuZWVkIHRoZSBzaGFkb3cgY29sb3IgYW5kIHRo
ZSBjb250ZW50IHRleHR1cmUgZm9yIGNvbXBvc2l0aW5nLgotICAgICAgICAgICAgZ2xVbmlmb3Jt
MWYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzLCBzaGFkb3cuc3RkRGV2aWF0
aW9uKCkgLyBmbG9hdChzaXplLmhlaWdodCgpKSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm0xZnYo
bV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVM
X0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOwotICAgICAgICAgICAgZ2xBY3RpdmVUZXh0
dXJlKEdMX1RFWFRVUkUxKTsKLSAgICAgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgY29udGVudFRleHR1cmUpOwotICAgICAgICAgICAgZ2xVbmlmb3JtMWkobV91bmlmb3JtTG9j
YXRpb25zLnNoYWRvdy5jb250ZW50VGV4dHVyZSwgMSk7CisgICAgICAgICAgICBtX2NvbnRleHQt
PnVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMsIHNoYWRvdy5z
dGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIG1fY29u
dGV4dC0+dW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVs
LCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7CisgICAgICAg
ICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUx
KTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIGNvbnRlbnRUZXh0dXJlKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dW5p
Zm9ybTFpKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29udGVudFRleHR1cmUsIDEpOwogICAg
ICAgICAgICAgZmxvYXQgciwgZywgYiwgYTsKICAgICAgICAgICAgIHNoYWRvdy5jb2xvcigpLmdl
dFJHQkEociwgZywgYiwgYSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm00ZihtX3VuaWZvcm1Mb2Nh
dGlvbnMuc2hhZG93LmNvbG9yLCByLCBnLCBiLCBhKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+
dW5pZm9ybTRmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29sb3IsIHIsIGcsIGIsIGEpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC03NTksNyAr
NzUxLDcgQEAgUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJGb3JGaWx0ZXIKICAgICBpbnQga2V5ID0gaW50KHR5cGUp
IHwgKHBhc3MgPDwgMTYpOwogICAgIEZpbHRlck1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2Zp
bHRlck1hcC5maW5kKGtleSk7CiAgICAgaWYgKGl0ZXJhdG9yID09IG1fZmlsdGVyTWFwLmVuZCgp
KSB7Ci0gICAgICAgIHByb2dyYW0gPSBTdGFuZGFyZEZpbHRlclByb2dyYW06OmNyZWF0ZSh0eXBl
LCBwYXNzKTsKKyAgICAgICAgcHJvZ3JhbSA9IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6Y3JlYXRl
KG1fY29udGV4dCwgdHlwZSwgcGFzcyk7CiAgICAgICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAg
ICAgIHJldHVybiAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCmlu
ZGV4IDc4NTQ5OGU3ZjhhMzYyN2VhYjEwNjg2YmEzNmJmZmIzZTEwOTE0NTYuLmJlNDVjNWRhZmVm
YzY3YWVhMjFmZjhkNWIzZWNlNzRiYzY0MDUxYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5oCkBAIC0yNCw5ICsyNCw5IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAKICNpbmNsdWRlICJGbG9hdFF1YWQu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIK
LSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KQEAgLTQ0LDM5ICs0NCw0MCBAQCBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjsK
IAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gewogcHVibGljOgotICAgIEdMdWludCBpZCgpIHsg
cmV0dXJuIG1faWQ7IH0KLSAgICBHTHVpbnQgdmVydGV4QXR0cmliKCkgeyByZXR1cm4gbV92ZXJ0
ZXhBdHRyaWI7IH0KKyAgICBQbGF0Zm9ybTNET2JqZWN0IGlkKCkgeyByZXR1cm4gbV9pZDsgfQor
ICAgIEdDM0R1aW50IHZlcnRleEF0dHJpYigpIHsgcmV0dXJuIG1fdmVydGV4QXR0cmliOyB9CiAK
LSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJT
b3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKTsKKyAgICBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IGNoYXIqIHZlcnRleFNo
YWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwogICAgIHZpcnR1
YWwgflRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcHJl
cGFyZShmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKikgeyB9Ci0gICAgR0xpbnQg
bWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hdHJpeExvY2F0aW9uOyB9Ci0gICAg
R0xpbnQgZmxpcExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mbGlwTG9jYXRpb247IH0KLSAg
ICBHTGludCB0ZXh0dXJlU2l6ZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlU2l6
ZUxvY2F0aW9uOyB9Ci0gICAgR0xpbnQgc291cmNlVGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9zb3VyY2VUZXh0dXJlTG9jYXRpb247IH0KLSAgICBHTGludCBtYXNrVGV4dHVyZUxv
Y2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGV4dHVyZUxvY2F0aW9uOyB9Ci0gICAgR0xp
bnQgb3BhY2l0eUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5TG9jYXRpb247IH0K
KyAgICBHQzNEaW50IG1hdHJpeExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhMb2Nh
dGlvbjsgfQorICAgIEdDM0RpbnQgZmxpcExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mbGlw
TG9jYXRpb247IH0KKyAgICBHQzNEaW50IHRleHR1cmVTaXplTG9jYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX3RleHR1cmVTaXplTG9jYXRpb247IH0KKyAgICBHQzNEaW50IHNvdXJjZVRleHR1cmVM
b2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOyB9CisgICAg
R0MzRGludCBtYXNrVGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGV4dHVy
ZUxvY2F0aW9uOyB9CisgICAgR0MzRGludCBvcGFjaXR5TG9jYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX29wYWNpdHlMb2NhdGlvbjsgfQogCi0gICAgc3RhdGljIGJvb2wgaXNWYWxpZFVuaWZvcm1M
b2NhdGlvbihHTGludCBsb2NhdGlvbikgeyByZXR1cm4gbG9jYXRpb24gPj0gMDsgfQorICAgIHN0
YXRpYyBib29sIGlzVmFsaWRVbmlmb3JtTG9jYXRpb24oR0MzRGludCBsb2NhdGlvbikgeyByZXR1
cm4gbG9jYXRpb24gPj0gMDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBnZXRVbmlmb3JtTG9j
YXRpb24oR0xpbnQmIHZhciwgY29uc3QgY2hhciogbmFtZSk7CisgICAgdm9pZCBnZXRVbmlmb3Jt
TG9jYXRpb24oR0MzRGludCYgdmFyLCBjb25zdCBjaGFyKiBuYW1lKTsKICAgICB2b2lkIGluaXRp
YWxpemVQcm9ncmFtKCk7CiAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKSB7IH0KICAgICBj
b25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleFNo
YWRlclNvdXJjZS5kYXRhKCk7IH0KICAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhZ21lbnRTaGFkZXJTb3VyY2UuZGF0YSgpOyB9CiAKLSAg
ICBHTHVpbnQgbV9pZDsKLSAgICBHTHVpbnQgbV92ZXJ0ZXhBdHRyaWI7Ci0gICAgR0x1aW50IG1f
dmVydGV4U2hhZGVyOwotICAgIEdMdWludCBtX2ZyYWdtZW50U2hhZGVyOwotICAgIEdMaW50IG1f
bWF0cml4TG9jYXRpb247Ci0gICAgR0xpbnQgbV9mbGlwTG9jYXRpb247Ci0gICAgR0xpbnQgbV90
ZXh0dXJlU2l6ZUxvY2F0aW9uOwotICAgIEdMaW50IG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOwot
ICAgIEdMaW50IG1fb3BhY2l0eUxvY2F0aW9uOwotICAgIEdMaW50IG1fbWFza1RleHR1cmVMb2Nh
dGlvbjsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OworICAgIFBsYXRmb3JtM0RP
YmplY3QgbV9pZDsKKyAgICBHQzNEdWludCBtX3ZlcnRleEF0dHJpYjsKKyAgICBQbGF0Zm9ybTNE
T2JqZWN0IG1fdmVydGV4U2hhZGVyOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mcmFnbWVudFNo
YWRlcjsKKyAgICBHQzNEaW50IG1fbWF0cml4TG9jYXRpb247CisgICAgR0MzRGludCBtX2ZsaXBM
b2NhdGlvbjsKKyAgICBHQzNEaW50IG1fdGV4dHVyZVNpemVMb2NhdGlvbjsKKyAgICBHQzNEaW50
IG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOworICAgIEdDM0RpbnQgbV9vcGFjaXR5TG9jYXRpb247
CisgICAgR0MzRGludCBtX21hc2tUZXh0dXJlTG9jYXRpb247CiAKIHByaXZhdGU6CiAgICAgQ1N0
cmluZyBtX3ZlcnRleFNoYWRlclNvdXJjZTsKQEAgLTg3LDMzICs4OCwzNiBAQCBwcml2YXRlOgog
Y2xhc3MgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtIDogcHVibGljIFJlZkNvdW50ZWQ8U3RhbmRhcmRG
aWx0ZXJQcm9ncmFtPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U3RhbmRhcmRGaWx0ZXJQcm9n
cmFtKCk7Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiwg
dW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6ZSYsIEdMdWludCBjb250ZW50VGV4dHVyZSk7Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBjcmVhdGUoRmlsdGVy
T3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBwYXNzKTsKLSAgICBHTHVpbnQgdmVy
dGV4QXR0cmliKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWI7IH0KLSAgICBHTHVpbnQg
dGV4Q29vcmRBdHRyaWIoKSBjb25zdCB7IHJldHVybiBtX3RleENvb3JkQXR0cmliOyB9Ci0gICAg
R0x1aW50IHRleHR1cmVVbmlmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlVW5pZm9ybUxv
Y2F0aW9uOyB9CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9u
JiwgdW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6ZSYsIEdDM0R1aW50IGNvbnRlbnRUZXh0dXJl
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IGNyZWF0ZShH
cmFwaGljc0NvbnRleHQzRCosIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgdW5zaWdu
ZWQgcGFzcyk7CisgICAgR0MzRHVpbnQgdmVydGV4QXR0cmliKCkgY29uc3QgeyByZXR1cm4gbV92
ZXJ0ZXhBdHRyaWI7IH0KKyAgICBHQzNEdWludCB0ZXhDb29yZEF0dHJpYigpIGNvbnN0IHsgcmV0
dXJuIG1fdGV4Q29vcmRBdHRyaWI7IH0KKyAgICBHQzNEdWludCB0ZXh0dXJlVW5pZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbjsgfQorcHJvdGVjdGVkOgorICAg
IEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CiBwcml2YXRlOgotICAgIFN0YW5kYXJkRmls
dGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIHBhc3Mp
OwotICAgIEdMdWludCBtX2lkOwotICAgIEdMdWludCBtX3ZlcnRleFNoYWRlcjsKLSAgICBHTHVp
bnQgbV9mcmFnbWVudFNoYWRlcjsKLSAgICBHTHVpbnQgbV92ZXJ0ZXhBdHRyaWI7Ci0gICAgR0x1
aW50IG1fdGV4Q29vcmRBdHRyaWI7Ci0gICAgR0x1aW50IG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlv
bjsKKyAgICBTdGFuZGFyZEZpbHRlclByb2dyYW0oKTsKKyAgICBTdGFuZGFyZEZpbHRlclByb2dy
YW0oR3JhcGhpY3NDb250ZXh0M0QqLCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIHVu
c2lnbmVkIHBhc3MpOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9pZDsKKyAgICBQbGF0Zm9ybTNE
T2JqZWN0IG1fdmVydGV4U2hhZGVyOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mcmFnbWVudFNo
YWRlcjsKKyAgICBHQzNEdWludCBtX3ZlcnRleEF0dHJpYjsKKyAgICBHQzNEdWludCBtX3RleENv
b3JkQXR0cmliOworICAgIEdDM0R1aW50IG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbjsKICAgICB1
bmlvbiB7Ci0gICAgICAgIEdMdWludCBhbW91bnQ7CisgICAgICAgIEdDM0R1aW50IGFtb3VudDsK
IAogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0x1aW50IHJhZGl1czsKLSAgICAgICAg
ICAgIEdMdWludCBnYXVzc2lhbktlcm5lbDsKKyAgICAgICAgICAgIEdDM0R1aW50IHJhZGl1czsK
KyAgICAgICAgICAgIEdDM0R1aW50IGdhdXNzaWFuS2VybmVsOwogICAgICAgICB9IGJsdXI7CiAK
ICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIEdMdWludCBibHVyUmFkaXVzOwotICAgICAg
ICAgICAgR0x1aW50IGNvbG9yOwotICAgICAgICAgICAgR0x1aW50IG9mZnNldDsKLSAgICAgICAg
ICAgIEdMdWludCBjb250ZW50VGV4dHVyZTsKLSAgICAgICAgICAgIEdMdWludCBnYXVzc2lhbktl
cm5lbDsKKyAgICAgICAgICAgIEdDM0R1aW50IGJsdXJSYWRpdXM7CisgICAgICAgICAgICBHQzNE
dWludCBjb2xvcjsKKyAgICAgICAgICAgIEdDM0R1aW50IG9mZnNldDsKKyAgICAgICAgICAgIEdD
M0R1aW50IGNvbnRlbnRUZXh0dXJlOworICAgICAgICAgICAgR0MzRHVpbnQgZ2F1c3NpYW5LZXJu
ZWw7CiAgICAgICAgIH0gc2hhZG93OwogICAgIH0gbV91bmlmb3JtTG9jYXRpb25zOwogfTsKQEAg
LTEyMSw3NyArMTI1LDg5IEBAIHByaXZhdGU6CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU2ltcGxlIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBs
ZT4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVNpbXBsZT4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBs
ZSgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVNpbXBsZShjb250ZXh0KSk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1TaW1wbGUoR3JhcGhpY3NDb250ZXh0M0QqKTsKK3ByaXZhdGU6CiAg
ICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKTsKIH07CiAKIGNsYXNzIFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1SZWN0U2ltcGxlPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZT4gY3JlYXRlKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKGNvbnRleHQpKTsK
ICAgICB9CiAKK3Byb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RT
aW1wbGUoR3JhcGhpY3NDb250ZXh0M0QqKTsKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1SZWN0U2ltcGxlKCk7CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbU9wYWNpdHlBbmRNYXNrIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbU9wYWNpdHlBbmRNYXNrPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s+IGNyZWF0ZShHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKGNvbnRl
eHQpKTsKICAgICB9CiAKK3Byb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bU9wYWNpdHlBbmRNYXNrKEdyYXBoaWNzQ29udGV4dDNEKik7CiBwcml2YXRlOgogICAgIFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKTsKIH07CiAKIGNsYXNzIFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrIDogcHVibGljIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaz4gY3JlYXRlKCkKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5k
TWFzaz4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5
QW5kTWFzaygpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayhjb250ZXh0KSk7CiAgICAgfQogCitwcm90ZWN0
ZWQ6CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soR3Jh
cGhpY3NDb250ZXh0M0QqKTsKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1SZWN0T3BhY2l0eUFuZE1hc2soKTsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU29saWRDb2xvciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1T
b2xpZENvbG9yPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU29saWRDb2xvcj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNvbGlkQ29sb3IoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKGNvbnRleHQpKTsKICAgICB9CiAKLSAgICBH
TGludCBjb2xvckxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvckxvY2F0aW9uOyB9Cisg
ICAgR0MzRGludCBjb2xvckxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvckxvY2F0aW9u
OyB9CiAKK3Byb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29s
b3IoR3JhcGhpY3NDb250ZXh0M0QqKTsKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1Tb2xpZENvbG9yKCk7Ci0gICAgR0xpbnQgbV9jb2xvckxvY2F0aW9uOworICAgIEdD
M0RpbnQgbV9jb2xvckxvY2F0aW9uOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1BbnRpYWxpYXNpbmdOb01hc2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrPiBjcmVhdGUoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKCkpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFs
aWFzaW5nTm9NYXNrKGNvbnRleHQpKTsKICAgICB9CiAKLSAgICBHTGludCBleHBhbmRlZFF1YWRW
ZXJ0aWNlc0luVGV4dHVyZUNvb3JkaW5hdGVzTG9jYXRpb24oKSB7IHJldHVybiBtX2V4cGFuZGVk
UXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29yZGluYXRlc0xvY2F0aW9uOyB9Ci0gICAgR0xpbnQgZXhw
YW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSB7IHJldHVybiBtX2V4cGFuZGVk
UXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uOyB9CisgICAgR0MzRGludCBleHBhbmRlZFF1
YWRWZXJ0aWNlc0luVGV4dHVyZUNvb3JkaW5hdGVzTG9jYXRpb24oKSB7IHJldHVybiBtX2V4cGFu
ZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29yZGluYXRlc0xvY2F0aW9uOyB9CisgICAgR0MzRGlu
dCBleHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbigpIHsgcmV0dXJuIG1fZXhw
YW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb247IH0KIAorcHJvdGVjdGVkOgorICAg
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKEdyYXBoaWNzQ29u
dGV4dDNEKik7CiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFs
aWFzaW5nTm9NYXNrKCk7CiAKLSAgICBHTGludCBtX2V4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0
dXJlQ29yZGluYXRlc0xvY2F0aW9uOwotICAgIEdMaW50IG1fZXhwYW5kZWRRdWFkRWRnZXNJblNj
cmVlblNwYWNlTG9jYXRpb247CisgICAgR0MzRGludCBtX2V4cGFuZGVkUXVhZFZlcnRpY2VzSW5U
ZXh0dXJlQ29yZGluYXRlc0xvY2F0aW9uOworICAgIEdDM0RpbnQgbV9leHBhbmRlZFF1YWRFZGdl
c0luU2NyZWVuU3BhY2VMb2NhdGlvbjsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyIHsKQEAgLTIwNiw3ICsyMjIsOCBAQCBwdWJsaWM6CiAgICAgICAgIFNvbGlkQ29sb3IK
ICAgICB9OwogCi0gICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKTsKKyAgICBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcigpIHsgfTsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cihHcmFwaGljc0NvbnRleHQzRCopOwogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyKCk7CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCkBAIC0yMjEsMTIgKzIzOCwxMiBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxTaGFkZXJUeXBlLCBSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+LCBEZWZhdWx0SGFzaDxpbnQ+OjpIYXNoLCBI
YXNoVHJhaXRzPGludD4gPiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDsKICAgICBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcCBtX3RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFw
OworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CiAKICNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCiAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJv
Z3JhbT4gPiBGaWx0ZXJNYXA7CiAgICAgRmlsdGVyTWFwIG1fZmlsdGVyTWFwOwogI2VuZGlmCi0K
IH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153896</attachid>
            <date>2012-07-23 16:44:20 -0700</date>
            <delta_ts>2012-07-23 17:04:54 -0700</delta_ts>
            <desc>Part 1 - GraphicsContext3DQt</desc>
            <filename>bug-78672-20120723164402.patch</filename>
            <type>text/plain</type>
            <size>10960</size>
            <attacher name="Helder Correia">helder.correia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMDMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTAyOTliZjcwNTQzNjQw
N2QyNmJhYjlkNWE2MmUyOGFjMGIwOTNiMS4uZWEzNzRiYzNlMTJiODZkMTMxMGVlYjIzZDg2ZmVm
MDU1MTg5ZWNiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTA3LTIxICBIZWxk
ZXIgQ29ycmVpYSAgPGhlbGRlci5jb3JyZWlhQG5va2lhLmNvbT4KKworICAgICAgICBbVGV4bWFw
XSBNb3ZlIFRleHR1cmVNYXBwZXJHTCB0byB1c2UgR3JhcGhpY3NDb250ZXh0M0QKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NjcyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IG9mIGEg
c2V2ZXJhbCBwYXRjaC1yZWZhY3RvcmluZy4KKworICAgICAgICBJbnRyb2R1Y2UgYWRkaXRpb25h
bCBsb2dpYyBpbiBHcmFwaGljc0NvbnRleHQzRFF0IHRvIHN1cHBvcnQgdGhlCisgICAgICAgIFJl
bmRlckRpcmVjdGx5VG9Ib3N0V2luZG93IFJlbmRlclN0eWxlLiBUaGlzIGlzIG5lY2Vzc2FyeSB0
byB1c2UKKyAgICAgICAgR0MzRCBmb3Igb3RoZXIgdGhpbmdzIHRoYW4gV2ViR0wsIGxpa2UgVGV4
dHVyZU1hcHBlci4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHJlZmFjdG9yaW5nLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAg
ICAgIChHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorCiAyMDEyLTA3LTE4ICBBbGV4
YW5kcmUgRWxpYXMgIDxhZWxpYXNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIFVi
ZXJjb21wOiBjbGVhbiB1cCBDQ1JlbmRlcmVyIGludGVyZmFjZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNw
cAppbmRleCA4OTVmNzY2ODgwMzllODFmMmY3MGJmYWQ4MDA1ZjA3N2JkZTUxZDE4Li5hNGQ0M2I1
OTlmNTljZDZhZWM3MThjZjVjYTYzOGMzOWQ1NmNhZDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNw
cApAQCAtNjMsNyArNjMsNyBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUKICNlbmRp
ZgogewogcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRl
eHQzRCosIEhvc3RXaW5kb3cqKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhp
Y3NDb250ZXh0M0QqLCBIb3N0V2luZG93KiwgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRv
dyk7CiAgICAgfkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpOwogCiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQpAQCAtNzcsNiArNzcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBibGl0
TXVsdGlzYW1wbGVGcmFtZWJ1ZmZlcigpIGNvbnN0OwogICAgIHZvaWQgYmxpdE11bHRpc2FtcGxl
RnJhbWVidWZmZXJBbmRSZXN0b3JlQ29udGV4dCgpIGNvbnN0OwogICAgIGJvb2wgbWFrZUN1cnJl
bnRJZk5lZWRlZCgpIGNvbnN0OworICAgIHZvaWQgY3JlYXRlQ2FudmFzRkJPQnVmZmVycygpOwor
ICAgIHZvaWQgaW5pdGlhbGl6ZUFOR0xFKCk7CiAgICAgdm9pZCBjcmVhdGVHcmFwaGljc1N1cmZh
Y2VzKGNvbnN0IEludFNpemUmKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7
CkBAIC0xMDYsNyArMTA4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRl
ckNvbXBpbGVyKCkKIH0KICNlbmRpZgogCi1HcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSG9zdFdpbmRv
dyogaG9zdFdpbmRvdykKK0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBIb3N0V2luZG93KiBob3N0V2lu
ZG93LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQogICAgIDogbV9jb250ZXh0KGNv
bnRleHQpCiAgICAgLCBtX2hvc3RXaW5kb3coaG9zdFdpbmRvdykKICAgICAsIG1fc3VyZmFjZSgw
KQpAQCAtMTIzLDYgKzEyNSwxOCBAQCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCisgICAgaWYgKHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KSB7Cisg
ICAgICAgIC8vIFdlJ3JlIG5vdCBzZXR0aW5nIHVwIFdlYkdMIGFuZCB3YW50IHRvIHJlbHkgb24g
dGhlIGN1cnJlbnQgcGxhdGZvcm0gY29udGV4dC4KKyNpZiBIQVZFKFFUNSkKKyAgICAgICAgbV9w
bGF0Zm9ybUNvbnRleHQgPSBRT3BlbkdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKTsKKyAgICAg
ICAgbV9zdXJmYWNlID0gbV9wbGF0Zm9ybUNvbnRleHQtPnN1cmZhY2UoKTsKKyNlbHNlCisgICAg
ICAgIG1fcGxhdGZvcm1Db250ZXh0ID0gY29uc3RfY2FzdDxRR0xDb250ZXh0Kj4oUUdMQ29udGV4
dDo6Y3VycmVudENvbnRleHQoKSk7CisgICAgICAgIG1fc3VyZmFjZSA9IHN0YXRpY19jYXN0PFFH
TFdpZGdldCo+KG1fcGxhdGZvcm1Db250ZXh0LT5kZXZpY2UoKSk7CisjZW5kaWYKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQogICAgIC8vIEZJWE1F
OiBGaW5kIGEgd2F5IHRvIGNyZWF0ZSBhIFFPcGVuR0xDb250ZXh0IHdpdGhvdXQgY3JlYXRpbmcg
YSBRV2luZG93IGF0IGFsbC4KICAgICAvLyBXZSBuZWVkIHRvIGNyZWF0ZSBhIHN1cmZhY2UgaW4g
b3JkZXIgdG8gY3JlYXRlIGEgUU9wZW5HTENvbnRleHQgYW5kIG1ha2UgaXQgY3VycmVudC4KQEAg
LTI5Niw2ICszMTAsNTkgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om1ha2VDdXJy
ZW50SWZOZWVkZWQoKSBjb25zdAogI2VuZGlmCiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpjcmVhdGVDYW52YXNGQk9CdWZmZXJzKCkKK3sKKyAgICBnbEdlbkZyYW1lYnVmZmVy
cygvKiBjb3VudCAqLyAxLCAmbV9jb250ZXh0LT5tX2Zibyk7CisKKyAgICBnbEdlblRleHR1cmVz
KDEsICZtX2NvbnRleHQtPm1fdGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb250ZXh0LT5tX3RleHR1cmUpOworICAgIGdsVGV4UGFy
YW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgZ2xU
ZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAg
ICBnbFRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VE
R0UpOworICAgIGdsVGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xB
TVBfVE9fRURHRSk7CisgICAgZ2xCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgMCk7CisKKyAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCisgICAgaWYgKG1f
Y29udGV4dC0+bV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMo
MSwgJm1fY29udGV4dC0+bV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIGdsQmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9jb250ZXh0LT5tX211bHRpc2Ft
cGxlRkJPKTsKKyAgICAgICAgbV9jb250ZXh0LT5tX2JvdW5kRkJPID0gbV9jb250ZXh0LT5tX211
bHRpc2FtcGxlRkJPOworICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fY29udGV4dC0+
bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+bV9hdHRy
cy5zdGVuY2lsIHx8IG1fY29udGV4dC0+bV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIGdsR2Vu
UmVuZGVyYnVmZmVycygxLCAmbV9jb250ZXh0LT5tX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVm
ZmVyKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBCaW5kIGNhbnZhcyBGQk8uCisgICAgICAg
IGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9jb250
ZXh0LT5tX2Zibyk7CisgICAgICAgIG1fY29udGV4dC0+bV9ib3VuZEZCTyA9IG1fY29udGV4dC0+
bV9mYm87CisjaWYgVVNFKE9QRU5HTF9FU18yKQorICAgICAgICBpZiAobV9jb250ZXh0LT5tX2F0
dHJzLmRlcHRoKQorICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2NvbnRleHQt
Pm1fZGVwdGhCdWZmZXIpOworICAgICAgICBpZiAobV9jb250ZXh0LT5tX2F0dHJzLnN0ZW5jaWwp
CisgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fY29udGV4dC0+bV9zdGVuY2ls
QnVmZmVyKTsKKyNlbmRpZgorICAgICAgICBpZiAobV9jb250ZXh0LT5tX2F0dHJzLnN0ZW5jaWwg
fHwgbV9jb250ZXh0LT5tX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZm
ZXJzKDEsICZtX2NvbnRleHQtPm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppbml0aWFsaXplQU5HTEUoKQoreworICAgIFNo
QnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlczsKKyAgICBTaEluaXRCdWlsdEluUmVzb3Vy
Y2VzKCZBTkdMRVJlc291cmNlcyk7CisKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0
ZXhBdHRyaWJzKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleFVu
aWZvcm1WZWN0b3JzKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dDNEOjpNQVhfVkFSWUlOR19WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3Rv
cnMpOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9W
RVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleFRleHR1
cmVJbWFnZVVuaXRzKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1h
eENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJj
ZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMpOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291
cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKKworICAgIC8vIEFsd2F5cyBzZXQgdG8g
MSBmb3IgT3BlbkdMIEVTLgorICAgIEFOR0xFUmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0gMTsK
KyAgICBtX2NvbnRleHQtPm1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsK
K30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzU3VyZmFj
ZXMoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKQEAg
LTMxMSwxNCArMzc4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVH
cmFwaGljc1N1cmZhY2VzKGNvbnN0IEludFNpemUmIHNpemUpCiAKIFBhc3NSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4
dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKIHsKLSAgICAvLyBUaGlzIGltcGxlbWVudGF0
aW9uIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgcmVuZGVyaW5nIGRpcmVjdGx5IHRvIHRoZSBI
b3N0V2luZG93LgotICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdp
bmRvdykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
b250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93
LCBmYWxzZSkpOworICAgIGJvb2wgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cgPSAocmVuZGVy
U3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAgIFJlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRy
cywgaG9zdFdpbmRvdywgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpKTsKICAgICByZXR1cm4g
Y29udGV4dC0+bV9wcml2YXRlID8gY29udGV4dC5yZWxlYXNlKCkgOiAwOwogfQogCi1HcmFwaGlj
c0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wpCitHcmFwaGljc0NvbnRleHQz
RDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMs
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cp
CiAgICAgOiBtX2N1cnJlbnRXaWR0aCgwKQogICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCiAgICAg
LCBtX2NvbXBpbGVyKGlzR0xFUzJDb21wbGlhbnQoKSA/IFNIX0VTU0xfT1VUUFVUIDogU0hfR0xT
TF9PVVRQVVQpCkBAIC0zMzksNyArNDA0LDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNz
Q29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAg
ICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxC
dWZmZXIoMCkKICAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQotICAgICwgbV9wcml2
YXRlKGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUodGhpcywgaG9zdFdpbmRv
dykpKQorICAgICwgbV9wcml2YXRlKGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGUodGhpcywgaG9zdFdpbmRvdywgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpKSkKIHsKICAg
ICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIApAQCAtMzYwLDU0ICs0MjUsMTEgQEAgR3JhcGhpY3ND
b250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
IGF0dHJzLCBIb3N0V2kKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIENyZWF0ZSBi
dWZmZXJzIGZvciB0aGUgY2FudmFzIEZCTy4KLSAgICBnbEdlbkZyYW1lYnVmZmVycygvKiBjb3Vu
dCAqLyAxLCAmbV9mYm8pOwotCi0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAg
ICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmUp
OwotICAgIGdsVGV4UGFyYW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJ
TkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQz
RDo6TElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0
M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGlj
c0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7Ci0KLSAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBG
Qk8uCi0gICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7Ci0gICAgICAgIGdsR2VuRnJhbWVidWZm
ZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAg
bV9ib3VuZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAgIGdsR2VuUmVuZGVyYnVmZmVy
cygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgaWYgKG1fYXR0cnMuc3Rl
bmNpbCB8fCBtX2F0dHJzLmRlcHRoKQotICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEs
ICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICAvLyBCaW5kIGNhbnZhcyBGQk8uCi0gICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICBtX2JvdW5kRkJPID0gbV9m
Ym87Ci0jaWYgVVNFKE9QRU5HTF9FU18yKQotICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKLSAg
ICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAg
IGlmIChtX2F0dHJzLnN0ZW5jaWwpCi0gICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwg
Jm1fc3RlbmNpbEJ1ZmZlcik7Ci0jZW5kaWYKLSAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8
fCBtX2F0dHJzLmRlcHRoKQotICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2Rl
cHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQotCi0gICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24u
Ci0gICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzOwotICAgIFNoSW5pdEJ1aWx0
SW5SZXNvdXJjZXMoJkFOR0xFUmVzb3VyY2VzKTsKKyAgICBpZiAoIXJlbmRlckRpcmVjdGx5VG9I
b3N0V2luZG93KQorICAgICAgICAvLyBXZWJHTCBpcyB0aGUgY2xpZW50LgorICAgICAgICBtX3By
aXZhdGUtPmNyZWF0ZUNhbnZhc0ZCT0J1ZmZlcnMoKTsKIAotICAgIGdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0
ZXhBdHRyaWJzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRF
WF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9y
cyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RP
UlMsICZBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyk7Ci0gICAgZ2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xF
UmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBnZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdM
RVJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsgCi0gICAgZ2V0SW50ZWdl
cnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNv
dXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4
RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk7Ci0KLSAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9w
ZW5HTCBFUy4KLSAgICBBTkdMRVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7Ci0gICAgbV9j
b21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworICAgIG1fcHJpdmF0ZS0+aW5p
dGlhbGl6ZUFOR0xFKCk7CiAKICNpZiAhVVNFKE9QRU5HTF9FU18yKQogICAgIGdsRW5hYmxlKEdM
X1BPSU5UX1NQUklURSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153906</attachid>
            <date>2012-07-23 17:05:28 -0700</date>
            <delta_ts>2012-07-26 01:45:15 -0700</delta_ts>
            <desc>TextureMapperGL</desc>
            <filename>bug-78672-20120723170511.patch</filename>
            <type>text/plain</type>
            <size>100786</size>
            <attacher name="Helder Correia">helder.correia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMDMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWEzNzRiYzNlMTJiODZk
MTMxMGVlYjIzZDg2ZmVmMDU1MTg5ZWNiNS4uMmViYjQ0MThmNmZmMmY4YTA2NTE1Mzg4N2IyZjZk
MTYyYjBlMjkwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NiBAQAorMjAxMi0wNy0yMyAgSGVs
ZGVyIENvcnJlaWEgIDxoZWxkZXIuY29ycmVpYUBub2tpYS5jb20+CisKKyAgICAgICAgW1RleG1h
cF0gTW92ZSBUZXh0dXJlTWFwcGVyR0wgdG8gdXNlIEdyYXBoaWNzQ29udGV4dDNECisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODY3MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgcGFydCBvZiBh
IHNldmVyYWwgcGF0Y2gtcmVmYWN0b3JpbmcuCisKKyAgICAgICAgVGV4dHVyZU1hcHBlckdMIChU
TUdMKSBpbmNsdWRlcyBkaXJlY3QgR0wgY2FsbHMgYW5kCisgICAgICAgIEdyYXBoaWNzQ29udGV4
dDNEIChHQzNEKSBvZmZlcnMgbWFueSBjb252ZW5pZW5jZXMgb3ZlciB0aGUKKyAgICAgICAgZm9y
bWVyIGFwcHJvYWNoOiB1c2luZyBleGlzdGluZyBDU1Mgc2hhZGVyIGNvZGUsIEFOR0xFIGZvcgor
ICAgICAgICBzaGFkZXIgY29tcGlsYXRpb24sIHJldXNpbmcgV2ViQ29yZTo6VGV4dHVyZSwgaGF2
aW5nIHNoYWRlcnMgYW5kCisgICAgICAgIHRleHR1cmVzIHRoYXQgY2FuIGRlbGV0ZSB0aGVtc2Vs
dmVzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGUgYmFja2VuZCBvZiBUTUdMIHRv
IEdDM0QuIEl0IHdhcyBpbml0aWFsbHkKKyAgICAgICAgdGhvdWdodCB0byBpbnRyb2R1Y2UgYSBu
ZXcgYmFja2VuZCAoc2F5LCBUZXh0dXJlTWFwcGVyR0MzRCksIGJ1dAorICAgICAgICBpbiB0aGUg
ZW5kIGl0IHdhcyBhZ3JlZWQgdG8gY29uc29saWRhdGUgaXQgaW5zaWRlIFRNR0wgaW5zdGVhZCwK
KyAgICAgICAgYXMgYW4gYWRkaXRpb25hbCBUZXh0dXJlTWFwcGVyIHN1YmNsYXNzIHdvdWxkIGdl
dCBzdGFsZSB2ZXJ5CisgICAgICAgIHF1aWNrbHkuCisKKyAgICAgICAgQSBHQzNEIG9iamVjdCBp
cyBjcmVhdGVkIGJ5IFRNR0wgd2l0aCB0aGUKKyAgICAgICAgUmVuZGVyRGlyZWN0bHlUb0hvc3RX
aW5kb3cgZmxhZy4KKworICAgICAgICBUTUdMJ3MgZGVwZW5kZW5jeSBvbiBPcGVuR0xTaGltcy5o
IHdhcyBjb21wbGV0ZWx5IHJlbW92ZWQuCisgICAgICAgIEhvd2V2ZXIsIEdDM0QgZG9lcyBub3Qg
bWFwIGV2ZXJ5IHNpbmdsZSBHTCBjb25zdGFudC4gVGh1cywgaXQncworICAgICAgICBpbXBvcnRh
bnQgdG8gZG9jdW1lbnQgdGhlIGZvbGxvd2luZyBub3RlczoKKyAgICAgICAgICAgIC0gR0xfRkFM
U0Ugd2FzIG1hcHBlZCB0byBmYWxzZS4KKyAgICAgICAgICAgIC0gR0xfVU5QQUNLX1JPV19MRU5H
VEgsIEdMX1VOUEFDS19TS0lQX1BJWEVMUywKKyAgICAgICAgICAgIEdMX1VOUEFDS19TS0lQX1JP
V1MsIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgYW5kCisgICAgICAgICAgICBHTF9VTlNJR05F
RF9JTlRfOF84XzhfOF9SRVYgd2VyZSBsb2NhbGx5IGRlZmluZWQgaW4gVE1HTC4KKworICAgICAg
ICBBIG5ldyBHQzNEOjp0ZXhJbWFnZTJERGlyZWN0KCkgZnVuY3Rpb24gd2FzIGludHJvZHVjZWQg
dG8gYWxsb3cKKyAgICAgICAgaW5pdGlhbGl6YXRpb24gb2YgdGV4dHVyZXMgd2l0aG91dCBhbGxv
Y2F0aW9uLiBUaGUgZXhpc3RpbmcKKyAgICAgICAgdGV4dEltYWdlMkQoKSByZWZ1c2VzIGEgbnVs
bCBwaXhlbCBidWZmZXIsIGFuZAorICAgICAgICB0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKCkgYWxs
b3dzIGl0IGJ1dCBwZXJmb3JtcyBtZW1vcnkKKyAgICAgICAgYWxsb2NhdGlvbiBhbmQgemVyb2Vz
IHRoZSBiaXRzLiBUaGlzIHdhcyBub3QgZmFzdCBlbm91Z2ggZm9yCisgICAgICAgIEJpdG1hcFRl
eHR1cmVHTCBmcmVxdWVudCBzZXR0aW5nIHVwLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgcmVm
YWN0b3JpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5oOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJERGlyZWN0KToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTEVTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRHTERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRh
OjpTaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6
c2hhcmVkR0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OlRl
eHR1cmVNYXBwZXJHTERhdGEpOgorICAgICAgICAoVGV4dHVyZU1hcHBlckdMRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpzY2lzc29yQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyR0w6OkNsaXBTdGFjazo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckdMRGF0YTo6aW5pdGlhbGl6ZVN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMOjpUZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckdMOjpiZWdpblBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6
ZW5kUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3UXVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdU
ZXh0dXJlUmVjdGFuZ2xlQVJCKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6
ZHJhd1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6dmlld3BvcnRNYXRyaXgpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFkV2l0
aFByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpkaWRSZXNldCk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0ZpbHRlcmVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6aW5pdGlhbGl6ZVN0ZW5jaWwpOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpjbGVhcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFRleHR1cmVHTDo6Y3JlYXRlRmJvSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwVGV4dHVyZUdMOjpiaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1
cmVHTDo6fkJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
R0w6OmJpbmREZWZhdWx0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
R0w6OmJlZ2luU2Npc3NvckNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjpiZWdpbkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjplbmRDbGlw
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlVGV4dHVyZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpncmFwaGljc0NvbnRleHQzRCk6CisgICAg
ICAgIChUZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoQ2xpcFN0YWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6dGV4dHVyZVRhcmdldCk6CisgICAgICAgIChCaXRtYXBU
ZXh0dXJlR0wpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpCaXRtYXBUZXh0
dXJlR0wpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9ncmFtKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6
aW5pdGlhbGl6ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RT
aW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2spOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6flN0YW5kYXJkRmlsdGVyUHJvZ3Jh
bSk6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmls
dGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dyYW06OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRl
ckZvckZpbHRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW06OnZlcnRleEF0dHJpYik6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6bWF0cml4
TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
OmZsaXBMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbTo6dGV4dHVyZVNpemVMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6c291cmNlVGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjptYXNrVGV4dHVyZUxvY2F0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpvcGFjaXR5TG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFs
aWRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6dmVydGV4QXR0cmliKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6dGV4Q29vcmRBdHRyaWIpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp0ZXh0dXJlVW5pZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6Y3Jl
YXRlKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3JlYXRl
KToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpj
cmVhdGUpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFz
ayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFj
aXR5QW5kTWFzazo6Y3JlYXRlKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
UmVjdE9wYWNpdHlBbmRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU29saWRDb2xvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6Y29sb3JMb2NhdGlvbik6CisgICAgICAgIChU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05v
TWFzazo6ZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb29yZGluYXRlc0xvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5n
Tm9NYXNrOjpleHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbik6CisgICAgICAg
IChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIpOgorCiAyMDEy
LTA3LTIxICBIZWxkZXIgQ29ycmVpYSAgPGhlbGRlci5jb3JyZWlhQG5va2lhLmNvbT4KIAogICAg
ICAgICBbVGV4bWFwXSBNb3ZlIFRleHR1cmVNYXBwZXJHTCB0byB1c2UgR3JhcGhpY3NDb250ZXh0
M0QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5oCmluZGV4IDc0MzNkZjYyNmY0Y2FiMmFjYzZjYTA5OGE2MjgwZDQ4ZDQ5YTJiMTku
LjdiY2Q4YTE3NTlkYzY2YmQ4MDE1ZDU0Y2RlNWVjNDljYTUyNTlkYjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAt
NTI5LDYgKzUyOSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CiAjZW5k
aWYKIAorICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxsb3dzIHBpeGVs
cz09MCB3aXRoIG5vIGFsbG9jYXRpb24uCisgICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0KEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKKwogICAgIC8vIEhlbHBl
ciB0byB0ZXhJbWFnZTJEIHdpdGggcGl4ZWw9PTAgY2FzZTogcGl4ZWxzIGFyZSBpbml0aWFsaXpl
ZCB0byAwLgogICAgIC8vIFJldHVybiB0cnVlIGlmIG5vIEdMIGVycm9yIGlzIHN5bnRoZXNpemVk
LgogICAgIC8vIEJ5IGRlZmF1bHQsIGFsaWdubWVudCBpcyA0LCB0aGUgT3BlbkdMIGRlZmF1bHQg
c2V0dGluZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCmluZGV4IGZkNDUw
MTQxYzc0ZGRhM2I0OWU4OTU3ODU5Y2JhMmI5MGE4MzdmNTIuLjk4ZTExNDViM2RiMjRlNTFkN2I3
NWZkMDY3MDhmZmFlMjU2YWViMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcApAQCAtMjU2LDcgKzI1Niw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlCiAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCiAgICAgR0MzRGVudW0gb3BlbkdM
SW50ZXJuYWxGb3JtYXQgPSBpbnRlcm5hbGZvcm1hdDsKICAgICBpZiAodHlwZSA9PSBHTF9GTE9B
VCkgewogICAgICAgICBpZiAoZm9ybWF0ID09IEdMX1JHQkEpCkBAIC0yNjUsNyArMjY1LDcgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICAgICAgICAgIG9wZW5HTEludGVybmFsRm9ybWF0
ID0gR0xfUkdCMzJGX0FSQjsKICAgICB9CiAKLSAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCBvcGVuR0xJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQs
IHR5cGUsIHBpeGVscyk7CisgICAgdGV4SW1hZ2UyRERpcmVjdCh0YXJnZXQsIGxldmVsLCBvcGVu
R0xJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBp
eGVscyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0xDb21tb24uY3BwCmluZGV4IGE0ZDFlYjRjZDkzYzQ3NjMzNmMwMmY2MTNiZmM2
NTk0NGQyODZjYjguLjhhMjZhZWNlYmM4MDg4ODc2ODk5MjgyNTA0OGY3NDVjYmY5NmZlMTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApAQCAtMTM4
Miw2ICsxMzgyLDEyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgp
IGNvbnN0CiAgICAgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGVkOwogfQogCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp0ZXhJbWFnZTJERGlyZWN0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29u
c3Qgdm9pZCogcGl4ZWxzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xU
ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBi
b3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKDNE
X0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCmluZGV4
IDc5ZGRjYmJmZDlhNGI1NWVjODI2ZTQxYjU5NWVlZjg0ZTY0ZDlkMDMuLjUyODFlY2ZjM2U0ZWNm
Yjk3YzA3MzM4OTlkNzQ0ZmY1Y2EwOWYyNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0xFUy5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBVU0UoM0RfR1JBUEhJQ1MpCiAK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNE
T3BlbkdMRVMuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgpA
QCAtMjMwLDggKzIzMSw4IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlCiAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlw
ZSwgcGl4ZWxzKTsKKworICAgIHRleEltYWdlMkREaXJlY3QodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDY4OGUyNmY0
ZTg5ZmZmMTNkZTViM2Q1NzljODIwYTkzNWVmOTE3MmMuLmE4MWE0ZmYwODVhOGFiNjcyMmJiMWM2
NTc3OTNmYTMzNzliZDRkNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0yMiw3ICsyMiw2
IEBACiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkltYWdl
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5oIgpAQCAtMzksOTEgKzM4LDQyIEBACiAKICNpZiBQTEFURk9STShRVCkK
ICNpbmNsdWRlICJOYXRpdmVJbWFnZVF0LmgiCi0jaWYgSEFWRShRVDUpCi0jaW5jbHVkZSA8UU9w
ZW5HTENvbnRleHQ+Ci0jZWxzZQotI2luY2x1ZGUgPFFHTENvbnRleHQ+Ci0jZW5kaWYgLy8gUVRf
VkVSU0lPTgotI2VsaWYgT1MoV0lORE9XUykKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZWxpZiBP
UyhNQUNfT1NfWCkKLSNpbmNsdWRlIDxBR0wvYWdsLmg+Ci0jZWxpZiBkZWZpbmVkKFhQX1VOSVgp
Ci0jaW5jbHVkZSA8R0wvZ2x4Lmg+CiAjZW5kaWYKIAotI2RlZmluZSBHTF9DTUQoLi4uKSBkbyB7
IF9fVkFfQVJHU19fOyBBU1NFUlRfQVJHKF9fVkFfQVJHU19fLCAhZ2xHZXRFcnJvcigpKTsgfSB3
aGlsZSAoMCkKKyNpZiAhVVNFKFRFWE1BUF9PUEVOR0xfRVNfMikKKy8vIEZJWE1FOiBNb3ZlIHRv
IEV4dGVuc2lvbnMzRC5oLgorI2RlZmluZSBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIgMHg4NEY1
CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViAweDgzNjcKKyNkZWZpbmUgR0xf
VU5QQUNLX1JPV19MRU5HVEggMHgwQ0YyCisjZGVmaW5lIEdMX1VOUEFDS19TS0lQX1BJWEVMUyAw
eDBDRjQKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUk9XUyAweDBDRjMKKyNlbmRpZgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBzdHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAgICAgc3RydWN0
IFNoYXJlZEdMRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZEdMRGF0YT4gewotI2lmIFBM
QVRGT1JNKFFUKQotI2lmIFFUX1ZFUlNJT04gPj0gMHgwNTAwMDAKLSAgICAgICAgdHlwZWRlZiBR
T3BlbkdMQ29udGV4dCogR0xDb250ZXh0OwotICAgICAgICBzdGF0aWMgR0xDb250ZXh0IGdldEN1
cnJlbnRHTENvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUU9wZW5HTENv
bnRleHQ6OmN1cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIHR5cGVk
ZWYgY29uc3QgUUdMQ29udGV4dCogR0xDb250ZXh0OwotICAgICAgICBzdGF0aWMgR0xDb250ZXh0
IGdldEN1cnJlbnRHTENvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUUdM
Q29udGV4dDo6Y3VycmVudENvbnRleHQoKTsKLSAgICAgICAgfQotI2VuZGlmCi0jZWxpZiBPUyhX
SU5ET1dTKQotICAgICAgICB0eXBlZGVmIEhHTFJDIEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGlj
IEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIHdnbEdldEN1cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIH0KLSNlbGlmIE9TKE1BQ19P
U19YKQotICAgICAgICB0eXBlZGVmIEFHTENvbnRleHQgR0xDb250ZXh0OwotICAgICAgICBzdGF0
aWMgR0xDb250ZXh0IGdldEN1cnJlbnRHTENvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gYWdsR2V0Q3VycmVudENvbnRleHQoKTsKLSAgICAgICAgfQotI2VsaWYgZGVmaW5l
ZChYUF9VTklYKQotICAgICAgICB0eXBlZGVmIEdMWENvbnRleHQgR0xDb250ZXh0OwotICAgICAg
ICBzdGF0aWMgR0xDb250ZXh0IGdldEN1cnJlbnRHTENvbnRleHQoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2xYR2V0Q3VycmVudENvbnRleHQoKTsKLSAgICAgICAgfQotI2Vsc2UK
LSAgICAgICAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgdW5rbm93biBvcGVuZ2wuCi0g
ICAgICAgIC8vIFJldHVybnMgYWx3YXlzIGluY3JlYXNpbmcgbnVtYmVyIGFuZCBkaXNhYmxlcyBH
TCBjb250ZXh0IGRhdGEgc2hhcmluZy4KLSAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgR0xD
b250ZXh0OwotICAgICAgICBzdGF0aWMgR0xDb250ZXh0IGdldEN1cnJlbnRHTENvbnRleHQoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0aWMgR0xDb250ZXh0IGR1bW15Q29udGV4dENvdW50
ZXIgPSAwOwotICAgICAgICAgICAgcmV0dXJuICsrZHVtbXlDb250ZXh0Q291bnRlcjsKLSAgICAg
ICAgfQotCi0jZW5kaWYKLQotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8R0xDb250ZXh0LCBTaGFy
ZWRHTERhdGEqPiBHTENvbnRleHREYXRhTWFwOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCwgU2hhcmVkR0xEYXRhKj4gR0xDb250ZXh0RGF0YU1hcDsK
ICAgICAgICAgc3RhdGljIEdMQ29udGV4dERhdGFNYXAmIGdsQ29udGV4dERhdGFNYXAoKQogICAg
ICAgICB7CiAgICAgICAgICAgICBzdGF0aWMgR0xDb250ZXh0RGF0YU1hcCBtYXA7CiAgICAgICAg
ICAgICByZXR1cm4gbWFwOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U2hhcmVkR0xEYXRhPiBjdXJyZW50U2hhcmVkR0xEYXRhKCkKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U2hhcmVkR0xEYXRhPiBjdXJyZW50U2hhcmVkR0xEYXRhKEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBHTENvbnRleHQgY3VycmVudEdMQ29u
ZXh0ID0gZ2V0Q3VycmVudEdMQ29udGV4dCgpOwotICAgICAgICAgICAgR0xDb250ZXh0RGF0YU1h
cDo6aXRlcmF0b3IgaXQgPSBnbENvbnRleHREYXRhTWFwKCkuZmluZChjdXJyZW50R0xDb25leHQp
OworICAgICAgICAgICAgR0xDb250ZXh0RGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBnbENvbnRleHRE
YXRhTWFwKCkuZmluZChjb250ZXh0LT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpOwogICAg
ICAgICAgICAgaWYgKGl0ICE9IGdsQ29udGV4dERhdGFNYXAoKS5lbmQoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gaXQtPnNlY29uZDsKIAotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTaGFyZWRHTERhdGEoZ2V0Q3VycmVudEdMQ29udGV4dCgpKSk7CisgICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFNoYXJlZEdMRGF0YShjb250ZXh0KSk7CiAgICAgICAgIH0KIAotCi0K
ICAgICAgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgdGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI7CiAKLSAgICAgICAgU2hhcmVkR0xEYXRhKEdMQ29udGV4dCBnbENvbnRleHQpCisgICAg
ICAgIFNoYXJlZEdMRGF0YShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICAgICAgICAg
IDogdGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoY29udGV4dCkKICAgICAgICAgewotICAgICAg
ICAgICAgZ2xDb250ZXh0RGF0YU1hcCgpLmFkZChnbENvbnRleHQsIHRoaXMpOworICAgICAgICAg
ICAgZ2xDb250ZXh0RGF0YU1hcCgpLmFkZChjb250ZXh0LT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEKCksIHRoaXMpOwogICAgICAgICB9CiAKICAgICAgICAgflNoYXJlZEdMRGF0YSgpCkBAIC0x
NDIsMzAgKzkyLDMyIEBAIHN0cnVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsKIAogICAgIFNoYXJl
ZEdMRGF0YSYgc2hhcmVkR0xEYXRhKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAqKG1f
c2hhcmVkR0xEYXRhLmdldCgpKTsKKyAgICAgICAgcmV0dXJuICptX3NoYXJlZEdMRGF0YTsKICAg
ICB9CiAKICAgICB2b2lkIGluaXRpYWxpemVTdGVuY2lsKCk7CiAKLSAgICBUZXh0dXJlTWFwcGVy
R0xEYXRhKCkKLSAgICAgICAgOiBQYWludEZsYWdzKDApCisgICAgVGV4dHVyZU1hcHBlckdMRGF0
YShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICAgICAgOiBjb250ZXh0KGNvbnRleHQp
CisgICAgICAgICwgUGFpbnRGbGFncygwKQogICAgICAgICAsIHByZXZpb3VzUHJvZ3JhbSgwKQog
ICAgICAgICAsIHRhcmdldEZyYW1lQnVmZmVyKDApCiAgICAgICAgICwgZGlkTW9kaWZ5U3RlbmNp
bChmYWxzZSkKICAgICAgICAgLCBwcmV2aW91c1NjaXNzb3JTdGF0ZSgwKQogICAgICAgICAsIHBy
ZXZpb3VzRGVwdGhTdGF0ZSgwKQotICAgICAgICAsIG1fc2hhcmVkR0xEYXRhKFRleHR1cmVNYXBw
ZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6Y3VycmVudFNoYXJlZEdMRGF0YSgpKQorICAgICAgICAs
IG1fc2hhcmVkR0xEYXRhKFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6Y3VycmVu
dFNoYXJlZEdMRGF0YSh0aGlzLT5jb250ZXh0KSkKICAgICB7IH0KIAorICAgIEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHByb2plY3Rpb25NYXRy
aXg7CiAgICAgVGV4dHVyZU1hcHBlcjo6UGFpbnRGbGFncyBQYWludEZsYWdzOwotICAgIEdMaW50
IHByZXZpb3VzUHJvZ3JhbTsKLSAgICBHTGludCB0YXJnZXRGcmFtZUJ1ZmZlcjsKKyAgICBHQzNE
aW50IHByZXZpb3VzUHJvZ3JhbTsKKyAgICBHQzNEaW50IHRhcmdldEZyYW1lQnVmZmVyOwogICAg
IGJvb2wgZGlkTW9kaWZ5U3RlbmNpbDsKLSAgICBHTGludCBwcmV2aW91c1NjaXNzb3JTdGF0ZTsK
LSAgICBHTGludCBwcmV2aW91c0RlcHRoU3RhdGU7Ci0gICAgR0xpbnQgdmlld3BvcnRbNF07Ci0g
ICAgR0xpbnQgcHJldmlvdXNTY2lzc29yWzRdOworICAgIEdDM0RpbnQgcHJldmlvdXNTY2lzc29y
U3RhdGU7CisgICAgR0MzRGludCBwcmV2aW91c0RlcHRoU3RhdGU7CisgICAgR0MzRGludCB2aWV3
cG9ydFs0XTsKKyAgICBHQzNEaW50IHByZXZpb3VzU2Npc3Nvcls0XTsKICAgICBSZWZQdHI8U2hh
cmVkR0xEYXRhPiBtX3NoYXJlZEdMRGF0YTsKICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3Vy
cmVudFN1cmZhY2U7CiB9OwpAQCAtMTg5LDI1ICsxNDEsMjUgQEAgdm9pZCBUZXh0dXJlTWFwcGVy
R0w6OkNsaXBTdGFjazo6cG9wKCkKICAgICBjbGlwU3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCi1z
dGF0aWMgdm9pZCBzY2lzc29yQ2xpcChjb25zdCBJbnRSZWN0JiByZWN0KQorc3RhdGljIHZvaWQg
c2Npc3NvckNsaXAoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJl
Y3QpCiB7CiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBH
TGludCB2aWV3cG9ydFs0XTsKLSAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9WSUVXUE9SVCwg
dmlld3BvcnQpKTsKLSAgICBHTF9DTUQoZ2xTY2lzc29yKHJlY3QueCgpLCB2aWV3cG9ydFszXSAt
IHJlY3QubWF4WSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKKyAgICBHQzNEaW50
IHZpZXdwb3J0WzRdOworICAgIGNvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNE
OjpWSUVXUE9SVCwgdmlld3BvcnQpOworICAgIGNvbnRleHQtPnNjaXNzb3IocmVjdC54KCksIHZp
ZXdwb3J0WzNdIC0gcmVjdC5tYXhZKCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiB9
CiAKLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2s6OmFwcGx5KCkKK3ZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpDbGlwU3RhY2s6OmFwcGx5KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQog
ewotICAgIHNjaXNzb3JDbGlwKGNsaXBTdGF0ZS5zY2lzc29yQm94KTsKLSAgICBHTF9DTUQoZ2xT
dGVuY2lsT3AoR0xfS0VFUCwgR0xfS0VFUCwgR0xfS0VFUCkpOwotICAgIEdMX0NNRChnbFN0ZW5j
aWxGdW5jKEdMX0VRVUFMLCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSwgY2xpcFN0YXRlLnN0
ZW5jaWxJbmRleCAtIDEpKTsKKyAgICBzY2lzc29yQ2xpcChjb250ZXh0LCBjbGlwU3RhdGUuc2Np
c3NvckJveCk7CisgICAgY29udGV4dC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQ
LCBHcmFwaGljc0NvbnRleHQzRDo6S0VFUCwgR3JhcGhpY3NDb250ZXh0M0Q6OktFRVApOworICAg
IGNvbnRleHQtPnN0ZW5jaWxGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpFUVVBTCwgY2xpcFN0YXRl
LnN0ZW5jaWxJbmRleCAtIDEsIGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXggLSAxKTsKICAgICBpZiAo
Y2xpcFN0YXRlLnN0ZW5jaWxJbmRleCA9PSAxKQotICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdM
X1NURU5DSUxfVEVTVCkpOworICAgICAgICBjb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4
dDNEOjpTVEVOQ0lMX1RFU1QpOwogICAgIGVsc2UKLSAgICAgICAgR0xfQ01EKGdsRW5hYmxlKEdM
X1NURU5DSUxfVEVTVCkpOworICAgICAgICBjb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfVEVTVCk7CiB9CiAKIApAQCAtMjIxLDggKzE3Myw4IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlckdMRGF0YTo6aW5pdGlhbGl6ZVN0ZW5jaWwoKQogICAgIGlmIChkaWRNb2RpZnlTdGVu
Y2lsKQogICAgICAgICByZXR1cm47CiAKLSAgICBHTF9DTUQoZ2xDbGVhclN0ZW5jaWwoMCkpOwot
ICAgIEdMX0NNRChnbENsZWFyKEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpOworICAgIGNvbnRleHQt
PmNsZWFyU3RlbmNpbCgwKTsKKyAgICBjb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9CVUZGRVJfQklUKTsKICAgICBkaWRNb2RpZnlTdGVuY2lsID0gdHJ1ZTsKIH0KIApA
QCAtMjM2LDEwICsxODgsMTQgQEAgQml0bWFwVGV4dHVyZUdMKiB0b0JpdG1hcFRleHR1cmVHTChC
aXRtYXBUZXh0dXJlKiB0ZXh0dXJlKQogCiBUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJH
TCgpCiAgICAgOiBUZXh0dXJlTWFwcGVyKE9wZW5HTE1vZGUpCi0gICAgLCBtX2RhdGEobmV3IFRl
eHR1cmVNYXBwZXJHTERhdGEpCiAgICAgLCBtX2NvbnRleHQoMCkKICAgICAsIG1fZW5hYmxlRWRn
ZURpc3RhbmNlQW50aWFsaWFzaW5nKGZhbHNlKQogeworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpB
dHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CisgICAgYXR0cmlidXRlcy5hbnRpYWxpYXMgPSBmYWxzZTsK
KyAgICBhdHRyaWJ1dGVzLmRlcHRoID0gZmFsc2U7CisgICAgbV9jb250ZXh0M0QgPSBHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlKGF0dHJpYnV0ZXMsIDAgLyogaG9zdFdpbmRvdyAqLywgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICBtX2RhdGEgPSBu
ZXcgVGV4dHVyZU1hcHBlckdMRGF0YShtX2NvbnRleHQzRC5nZXQoKSk7CiB9CiAKIFRleHR1cmVN
YXBwZXJHTDo6Q2xpcFN0YWNrJiBUZXh0dXJlTWFwcGVyR0w6OmNsaXBTdGFjaygpCkBAIC0yNDks
MTUgKzIwNSw5IEBAIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrJiBUZXh0dXJlTWFwcGVyR0w6
OmNsaXBTdGFjaygpCiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKFBhaW50
RmxhZ3MgZmxhZ3MpCiB7Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgbm8gR0wgZXJyb3IgY29kZSBz
dGF5cyBmcm9tIHByZXZpb3VzIG9wZXJhdGlvbnMuCi0gICAgZ2xHZXRFcnJvcigpOwotCi0gICAg
aWYgKCFpbml0aWFsaXplT3BlbkdMU2hpbXMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR0xf
Q01EKGdsR2V0SW50ZWdlcnYoR0xfQ1VSUkVOVF9QUk9HUkFNLCAmZGF0YSgpLnByZXZpb3VzUHJv
Z3JhbSkpOwotICAgIGRhdGEoKS5wcmV2aW91c1NjaXNzb3JTdGF0ZSA9IGdsSXNFbmFibGVkKEdM
X1NDSVNTT1JfVEVTVCk7Ci0gICAgZGF0YSgpLnByZXZpb3VzRGVwdGhTdGF0ZSA9IGdsSXNFbmFi
bGVkKEdMX0RFUFRIX1RFU1QpOworICAgIG1fY29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGlj
c0NvbnRleHQzRDo6Q1VSUkVOVF9QUk9HUkFNLCAmZGF0YSgpLnByZXZpb3VzUHJvZ3JhbSk7Cisg
ICAgZGF0YSgpLnByZXZpb3VzU2Npc3NvclN0YXRlID0gbV9jb250ZXh0M0QtPmlzRW5hYmxlZChH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKKyAgICBkYXRhKCkucHJldmlvdXNEZXB0
aFN0YXRlID0gbV9jb250ZXh0M0QtPmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
VEVTVCk7CiAjaWYgUExBVEZPUk0oUVQpCiAgICAgaWYgKG1fY29udGV4dCkgewogICAgICAgICBR
UGFpbnRlciogcGFpbnRlciA9IG1fY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CkBAIC0yNjUs
MTUgKzIxNSwxNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5QYWludGluZyhQYWludEZs
YWdzIGZsYWdzKQogICAgICAgICBwYWludGVyLT5iZWdpbk5hdGl2ZVBhaW50aW5nKCk7CiAgICAg
fQogI2VuZGlmCi0gICAgZ2xEaXNhYmxlKEdMX0RFUFRIX1RFU1QpOwotICAgIGdsRW5hYmxlKEdM
X1NDSVNTT1JfVEVTVCk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX1RFU1QpOworICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgZGF0YSgpLmRpZE1vZGlmeVN0ZW5jaWwgPSBmYWxzZTsK
LSAgICBHTF9DTUQoZ2xEZXB0aE1hc2soMCkpOwotICAgIEdMX0NNRChnbEdldEludGVnZXJ2KEdM
X1ZJRVdQT1JULCBkYXRhKCkudmlld3BvcnQpKTsKLSAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihH
TF9TQ0lTU09SX0JPWCwgZGF0YSgpLnByZXZpb3VzU2Npc3NvcikpOwotICAgIGdsR2V0SW50ZWdl
cnYoR0xfRlJBTUVCVUZGRVJfQklORElORywgJmRhdGEoKS50YXJnZXRGcmFtZUJ1ZmZlcik7Cisg
ICAgbV9jb250ZXh0M0QtPmRlcHRoTWFzaygwKTsKKyAgICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdl
cnYoR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JULCBkYXRhKCkudmlld3BvcnQpOworICAgIG1f
Y29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1gsIGRh
dGEoKS5wcmV2aW91c1NjaXNzb3IpOworICAgIG1fY29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQklORElORywgJmRhdGEoKS50YXJnZXRGcmFtZUJ1
ZmZlcik7CiAgICAgbV9jbGlwU3RhY2suaW5pdChJbnRSZWN0KDAsIDAsIGRhdGEoKS52aWV3cG9y
dFsyXSwgZGF0YSgpLnZpZXdwb3J0WzNdKSk7Ci0gICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xf
RlJBTUVCVUZGRVJfQklORElORywgJmRhdGEoKS50YXJnZXRGcmFtZUJ1ZmZlcikpOworICAgIG1f
Y29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQklO
RElORywgJmRhdGEoKS50YXJnZXRGcmFtZUJ1ZmZlcik7CiAgICAgZGF0YSgpLlBhaW50RmxhZ3Mg
PSBmbGFnczsKICAgICBiaW5kU3VyZmFjZSgwKTsKIH0KQEAgLTI4MSwyMiArMjMxLDIyIEBAIHZv
aWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKFBhaW50RmxhZ3MgZmxhZ3MpCiB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZW5kUGFpbnRpbmcoKQogewogICAgIGlmIChkYXRhKCkuZGlkTW9k
aWZ5U3RlbmNpbCkgewotICAgICAgICBnbENsZWFyU3RlbmNpbCgxKTsKLSAgICAgICAgZ2xDbGVh
cihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpOworICAgICAgICBtX2NvbnRleHQzRC0+Y2xlYXJTdGVu
Y2lsKDEpOworICAgICAgICBtX2NvbnRleHQzRC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfQlVGRkVSX0JJVCk7CiAgICAgfQogCi0gICAgZ2xVc2VQcm9ncmFtKGRhdGEoKS5wcmV2
aW91c1Byb2dyYW0pOworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKGRhdGEoKS5wcmV2aW91
c1Byb2dyYW0pOwogCi0gICAgZ2xTY2lzc29yKGRhdGEoKS5wcmV2aW91c1NjaXNzb3JbMF0sIGRh
dGEoKS5wcmV2aW91c1NjaXNzb3JbMV0sIGRhdGEoKS5wcmV2aW91c1NjaXNzb3JbMl0sIGRhdGEo
KS5wcmV2aW91c1NjaXNzb3JbM10pOworICAgIG1fY29udGV4dDNELT5zY2lzc29yKGRhdGEoKS5w
cmV2aW91c1NjaXNzb3JbMF0sIGRhdGEoKS5wcmV2aW91c1NjaXNzb3JbMV0sIGRhdGEoKS5wcmV2
aW91c1NjaXNzb3JbMl0sIGRhdGEoKS5wcmV2aW91c1NjaXNzb3JbM10pOwogICAgIGlmIChkYXRh
KCkucHJldmlvdXNTY2lzc29yU3RhdGUpCi0gICAgICAgIGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVT
VCk7CisgICAgICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCk7CiAgICAgZWxzZQotICAgICAgICBnbERpc2FibGUoR0xfU0NJU1NPUl9URVNUKTsK
KyAgICAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1Jf
VEVTVCk7CiAKICAgICBpZiAoZGF0YSgpLnByZXZpb3VzRGVwdGhTdGF0ZSkKLSAgICAgICAgZ2xF
bmFibGUoR0xfREVQVEhfVEVTVCk7CisgICAgICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFUFRIX1RFU1QpOwogICAgIGVsc2UKLSAgICAgICAgZ2xEaXNhYmxlKEdM
X0RFUFRIX1RFU1QpOworICAgICAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfVEVTVCk7CiAKICNpZiBQTEFURk9STShRVCkKICAgICBpZiAoIW1fY29udGV4
dCkKQEAgLTMwNyw0MCArMjU3LDQwIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjplbmRQYWludGlu
ZygpCiAjZW5kaWYKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdRdWFkKGNvbnN0IERy
YXdRdWFkJiBxdWFkVG9EcmF3LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSogc2hhZGVyUHJvZ3JhbSwgR0xlbnVt
IGRyYXdpbmdNb2RlLCBib29sIG5lZWRzQmxlbmRpbmcpCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6
ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBzaGFk
ZXJQcm9ncmFtLCBHQzNEZW51bSBkcmF3aW5nTW9kZSwgYm9vbCBuZWVkc0JsZW5kaW5nKQogewot
ICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRl
eEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDAp
KTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3Jh
bS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5iaW5kQnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDApOwogCi0gICAgY29uc3QgR0xmbG9hdCBxdWFkW10g
PSB7CisgICAgY29uc3QgR0MzRGZsb2F0IHF1YWRbXSA9IHsKICAgICAgICAgcXVhZFRvRHJhdy50
YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAxKCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJl
Y3RNYXBwZWRUb1VuaXRTcXVhcmUucDEoKS55KCksCiAgICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0
UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMigpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFw
cGVkVG9Vbml0U3F1YXJlLnAyKCkueSgpLAogICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RN
YXBwZWRUb1VuaXRTcXVhcmUucDMoKS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRv
VW5pdFNxdWFyZS5wMygpLnkoKSwKICAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVk
VG9Vbml0U3F1YXJlLnA0KCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRT
cXVhcmUucDQoKS55KCkKICAgICB9OwotICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIo
c2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwg
cXVhZCkpOworICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlclByb2dy
YW0tPnZlcnRleEF0dHJpYigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAw
LCBHQzNEaW50cHRyKHF1YWQpKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9
IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KS5tdWx0aXBseSht
b2RlbFZpZXdNYXRyaXgpLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KAogICAgICAgICAg
ICAgcXVhZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJlY3Qud2lkdGgoKSwgMCwgMCwgMCwKICAgICAg
ICAgICAgIDAsIHF1YWRUb0RyYXcub3JpZ2luYWxUYXJnZXRSZWN0LmhlaWdodCgpLCAwLCAwLAog
ICAgICAgICAgICAgMCwgMCwgMSwgMCwKICAgICAgICAgICAgIHF1YWRUb0RyYXcub3JpZ2luYWxU
YXJnZXRSZWN0LngoKSwgcXVhZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJlY3QueSgpLCAwLCAxKSk7
Ci0gICAgY29uc3QgR0xmbG9hdCBtNFtdID0geworICAgIEdDM0RmbG9hdCBtNFtdID0gewogICAg
ICAgICBtYXRyaXgubTExKCksIG1hdHJpeC5tMTIoKSwgbWF0cml4Lm0xMygpLCBtYXRyaXgubTE0
KCksCiAgICAgICAgIG1hdHJpeC5tMjEoKSwgbWF0cml4Lm0yMigpLCBtYXRyaXgubTIzKCksIG1h
dHJpeC5tMjQoKSwKICAgICAgICAgbWF0cml4Lm0zMSgpLCBtYXRyaXgubTMyKCksIG1hdHJpeC5t
MzMoKSwgbWF0cml4Lm0zNCgpLAogICAgICAgICBtYXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwg
bWF0cml4Lm00MygpLCBtYXRyaXgubTQ0KCkKICAgICB9OwotICAgIEdMX0NNRChnbFVuaWZvcm1N
YXRyaXg0ZnYoc2hhZGVyUHJvZ3JhbS0+bWF0cml4TG9jYXRpb24oKSwgMSwgR0xfRkFMU0UsIG00
KSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVyUHJvZ3JhbS0+bWF0
cml4TG9jYXRpb24oKSwgMSwgZmFsc2UsIG00KTsKIAogICAgIGlmIChuZWVkc0JsZW5kaW5nKSB7
Ci0gICAgICAgIEdMX0NNRChnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQ
SEEpKTsKLSAgICAgICAgR0xfQ01EKGdsRW5hYmxlKEdMX0JMRU5EKSk7CisgICAgICAgIG1fY29u
dGV4dDNELT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0
M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOworICAgICAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CiAgICAgfSBlbHNlCi0gICAgICAgIEdMX0NNRChnbERp
c2FibGUoR0xfQkxFTkQpKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EKTsKIAotICAgIEdMX0NNRChnbERyYXdBcnJheXMoZHJhd2luZ01vZGUs
IDAsIDQpKTsKLSAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJv
Z3JhbS0+dmVydGV4QXR0cmliKCkpKTsKKyAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhkcmF3
aW5nTW9kZSwgMCwgNCk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgd2lkdGgsIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmll
d01hdHJpeCkKQEAgLTM0OSwxNyArMjk5LDE3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3
Qm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgd2lkdGgsIGNvbnN0IEZsb2F0UmVjCiAg
ICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNv
bGlkQ29sb3I+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIuc29saWRDb2xvclByb2dyYW0oKTsKLSAgICBHTF9DTUQoZ2xVc2VQcm9ncmFt
KHByb2dyYW0tPmlkKCkpKTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5p
ZCgpKTsKIAogICAgIGZsb2F0IGFscGhhID0gY29sb3IuYWxwaGEoKSAvIDI1NS4wOwotICAgIEdM
X0NNRChnbFVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9uKCksCisgICAgbV9jb250ZXh0
M0QtPnVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9uKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgIChjb2xvci5yZWQoKSAvIDI1NS4wKSAqIGFscGhhLAogICAgICAgICAgICAgICAgICAg
ICAgICAoY29sb3IuZ3JlZW4oKSAvIDI1NS4wKSAqIGFscGhhLAogICAgICAgICAgICAgICAgICAg
ICAgICAoY29sb3IuYmx1ZSgpIC8gMjU1LjApICogYWxwaGEsCi0gICAgICAgICAgICAgICAgICAg
ICAgIGFscGhhKSk7Ci0gICAgR0xfQ01EKGdsTGluZVdpZHRoKHdpZHRoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgIGFscGhhKTsKKyAgICBtX2NvbnRleHQzRC0+bGluZVdpZHRoKHdpZHRoKTsK
IAotICAgIGRyYXdRdWFkKHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgcHJvZ3JhbS5nZXQo
KSwgR0xfTElORV9MT09QLCBjb2xvci5oYXNBbHBoYSgpKTsKKyAgICBkcmF3UXVhZCh0YXJnZXRS
ZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5FX0xPT1AsIGNvbG9yLmhhc0FscGhhKCkpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6
ZHJhd1JlcGFpbnRDb3VudGVyKGludCB2YWx1ZSwgaW50IHBvaW50U2l6ZSwgY29uc3QgRmxvYXRQ
b2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdN
YXRyaXgpCkBAIC00MDYsNyArMzU2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0
dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYKICAgICBk
cmF3VGV4dHVyZSh0ZXh0dXJlR0wuaWQoKSwgdGV4dHVyZUdMLmlzT3BhcXVlKCkgPyAwIDogU3Vw
cG9ydHNCbGVuZGluZywgdGV4dHVyZUdMLnNpemUoKSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFj
aXR5LCBtYXNrLCBleHBvc2VkRWRnZXMpOwogfQogCi0jaWYgZGVmaW5lZChHTF9BUkJfdGV4dHVy
ZV9yZWN0YW5nbGUpCisjaWYgIVVTRShURVhNQVBfT1BFTkdMX0VTXzIpCiB2b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd1RleHR1cmVSZWN0YW5nbGVBUkIodWludDMyX3QgdGV4dHVyZSwgRmxhZ3Mg
ZmxhZ3MsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0
IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKQogewogICAgIFJlZlB0
cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbTsKQEAgLTQxNCwzNiArMzY0LDM2
IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVJlY3RhbmdsZUFSQih1aW50MzJf
dCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uCiAgICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hh
cmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdE9wYWNpdHlBbmRNYXNrKTsKICAgICBlbHNl
CiAgICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
UmVjdFNpbXBsZSk7Ci0gICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKSk7Cisg
ICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CiAKLSAgICBHTF9DTUQo
Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAg
IEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKLSAgICBHTF9DTUQoZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIHRleHR1cmUpKTsKLSAgICBHTF9DTUQo
Z2xVbmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVyZUxvY2F0aW9uKCksIDApKTsKKyAgICBt
X2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmli
KCkpOworICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFMCk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFO
R0xFX0FSQiwgdGV4dHVyZSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5z
b3VyY2VUZXh0dXJlTG9jYXRpb24oKSwgMCk7CiAKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJv
Z3JhbS0+ZmxpcExvY2F0aW9uKCksICEhKGZsYWdzICYgU2hvdWxkRmxpcFRleHR1cmUpKSk7Ci0g
ICAgR0xfQ01EKGdsVW5pZm9ybTJmKHByb2dyYW0tPnRleHR1cmVTaXplTG9jYXRpb24oKSwgdGV4
dHVyZVNpemUud2lkdGgoKSwgdGV4dHVyZVNpemUuaGVpZ2h0KCkpKTsKKyAgICBtX2NvbnRleHQz
RC0+dW5pZm9ybTFmKHByb2dyYW0tPmZsaXBMb2NhdGlvbigpLCAhIShmbGFncyAmIFNob3VsZEZs
aXBUZXh0dXJlKSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0yZihwcm9ncmFtLT50ZXh0dXJl
U2l6ZUxvY2F0aW9uKCksIHRleHR1cmVTaXplLndpZHRoKCksIHRleHR1cmVTaXplLmhlaWdodCgp
KTsKIAogICAgIGlmIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1M
b2NhdGlvbihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSkpCi0gICAgICAgIEdMX0NNRChnbFVu
aWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0eSkpOworICAgICAgICBt
X2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5
KTsKIAogICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpICYmIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0t
Pm1hc2tUZXh0dXJlTG9jYXRpb24oKSkpIHsKICAgICAgICAgY29uc3QgQml0bWFwVGV4dHVyZUdM
KiBtYXNrVGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMKj4obWFz
a1RleHR1cmUpOwotICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKSk7
Ci0gICAgICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1hc2tUZXh0dXJl
R0wtPmlkKCkpKTsKLSAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW0tPm1hc2tUZXh0
dXJlTG9jYXRpb24oKSwgMSkpOwotICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RF
WFRVUkUwKSk7CisgICAgICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFMSk7CisgICAgICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbWFza1RleHR1cmVHTC0+aWQoKSk7CisgICAgICAg
IG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpLCAx
KTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkUwKTsKICAgICB9CiAKICAgICBib29sIG5lZWRzQmxlbmRpbmcgPSAoZmxhZ3MgJiBT
dXBwb3J0c0JsZW5kaW5nKSB8fCBvcGFjaXR5IDwgMC45OSB8fCBtYXNrVGV4dHVyZTsKLSAgICBk
cmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdMX1RS
SUFOR0xFX0ZBTiwgbmVlZHNCbGVuZGluZyk7CisgICAgZHJhd1F1YWQodGFyZ2V0UmVjdCwgbW9k
ZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVf
RkFOLCBuZWVkc0JsZW5kaW5nKTsKIH0KLSNlbmRpZiAvLyBkZWZpbmVkKEdMX0FSQl90ZXh0dXJl
X3JlY3RhbmdsZSkgCisjZW5kaWYgLy8gIVVTRShURVhNQVBfT1BFTkdMX0VTXzIpCiAKIHZvaWQg
VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFn
cywgY29uc3QgSW50U2l6ZSYgLyogdGV4dHVyZVNpemUgKi8sIGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxv
YXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIHVuc2lnbmVkIGV4
cG9zZWRFZGdlcykKIHsKLSAgICBib29sIG5lZWRzQW50aWxpYWluZyA9IG1fZW5hYmxlRWRnZURp
c3RhbmNlQW50aWFsaWFzaW5nICYmICFtb2RlbFZpZXdNYXRyaXguaXNJbnRlZ2VyVHJhbnNsYXRp
b24oKTsKLSAgICBpZiAobmVlZHNBbnRpbGlhaW5nICYmIGRyYXdUZXh0dXJlV2l0aEFudGlhbGlh
c2luZyh0ZXh0dXJlLCBmbGFncywgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5
LCBtYXNrVGV4dHVyZSwgZXhwb3NlZEVkZ2VzKSkKKyAgICBib29sIG5lZWRzQW50aWFsaWFpbmcg
PSBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyAmJiAhbW9kZWxWaWV3TWF0cml4Lmlz
SW50ZWdlclRyYW5zbGF0aW9uKCk7CisgICAgaWYgKG5lZWRzQW50aWFsaWFpbmcgJiYgZHJhd1Rl
eHR1cmVXaXRoQW50aWFsaWFzaW5nKHRleHR1cmUsIGZsYWdzLCB0YXJnZXRSZWN0LCBtb2RlbFZp
ZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0dXJlLCBleHBvc2VkRWRnZXMpKQogICAgICAgIHJl
dHVybjsKIAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbTsK
QEAgLTQ1MSwxNSArNDAxLDE1IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1
aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYKICAgICAgICAgcHJv
Z3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5n
ZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5QW5kTWFz
ayk7CiAgICAgZWxzZQogICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlNpbXBsZSk7Ci0gICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5p
ZCgpKSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CiAKICAg
ICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVyZSwgZmxh
Z3MsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgbWFza1RleHR1cmUpOwog
fQogCi1zdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggdmlld3BvcnRNYXRyaXgoKQorc3RhdGlj
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHZpZXdwb3J0TWF0cml4KEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0M0QpCiB7Ci0gICAgR0xpbnQgdmlld3BvcnRbNF07Ci0gICAgR0xfQ01EKGdsR2V0SW50
ZWdlcnYoR0xfVklFV1BPUlQsIHZpZXdwb3J0KSk7CisgICAgR0MzRGludCB2aWV3cG9ydFs0XTsK
KyAgICBjb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpWSUVXUE9SVCwg
dmlld3BvcnQpOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwogICAgIG1hdHJp
eC50cmFuc2xhdGUzZCh2aWV3cG9ydFswXSwgdmlld3BvcnRbMV0sIDApOwpAQCAtNTU2LDcgKzUw
Niw3IEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmco
dWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsCiAgICAgLy8gYW50aWFsaWFzaW5nLiBOb3Rl
IGhlcmUgdGhhdCB3ZSBhcmUgYWxzbyBpbmNsdWRpbmcgdGhlIHZpZXdwb3J0IG1hdHJpeCAod2hp
Y2gKICAgICAvLyB0cmFuc2xhdGVzIGZyb20gbm9ybWFsaXplZCBkZXZpY2UgY29vcmRpbmF0ZXMg
dG8gc2NyZWVuIGNvb3JkaW5hdGVzKSwgYmVjYXVzZSB0aGVzZQogICAgIC8vIHZhbHVlcyBhcmUg
Y29uc3VtZWQgaW4gdGhlIGZyYWdtZW50IHNoYWRlciwgd2hpY2ggd29ya3MgaW4gc2NyZWVuIGNv
b3JkaW5hdGVzLgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcmVlblNwYWNlVHJhbnNmb3Jt
ID0gdmlld3BvcnRNYXRyaXgoKS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCku
cHJvamVjdGlvbk1hdHJpeCkpLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkudG8yZFRyYW5zZm9y
bSgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcmVlblNwYWNlVHJhbnNmb3JtID0gdmll
d3BvcnRNYXRyaXgobV9jb250ZXh0M0QuZ2V0KCkpLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0
cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KSkubXVsdGlwbHkobW9kZWxWaWV3TWF0cml4KS50
bzJkVHJhbnNmb3JtKCk7CiAgICAgaWYgKCFzY3JlZW5TcGFjZVRyYW5zZm9ybS5pc0ludmVydGli
bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEZsb2F0UXVhZCBxdWFkSW5TY3JlZW5T
cGFjZSA9IHNjcmVlblNwYWNlVHJhbnNmb3JtLm1hcFF1YWQob3JpZ2luYWxUYXJnZXRSZWN0KTsK
QEAgLTU4MCw4ICs1MzAsOCBAQCBib29sIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRo
QW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLAogICAgIHF1YWRUb0Vk
Z2VBcnJheShpbmZsYXRlUXVhZChxdWFkSW5TY3JlZW5TcGFjZS5ib3VuZGluZ0JveCgpLCAgaW5m
bGF0aW9uRGlzdGFuY2UpLCB0YXJnZXRRdWFkRWRnZXMgKyAxMik7CiAKICAgICBSZWZQdHI8VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s+IHByb2dyYW0gPSBkYXRh
KCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuYW50aWFsaWFzaW5n
Tm9NYXNrUHJvZ3JhbSgpOwotICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkp
OwotICAgIEdMX0NNRChnbFVuaWZvcm0zZnYocHJvZ3JhbS0+ZXhwYW5kZWRRdWFkRWRnZXNJblNj
cmVlblNwYWNlTG9jYXRpb24oKSwgOCwgdGFyZ2V0UXVhZEVkZ2VzKSk7CisgICAgbV9jb250ZXh0
M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0z
ZnYocHJvZ3JhbS0+ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSwgOCwg
dGFyZ2V0UXVhZEVkZ2VzKTsKIAogICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9n
cmFtLmdldCgpLCB0ZXh0dXJlLCBmbGFncywgRHJhd1F1YWQob3JpZ2luYWxUYXJnZXRSZWN0LCBl
eHBhbmRlZFF1YWRJblRleHR1cmVDb29yZGluYXRlcyksIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0
eSwgMCAvKiBtYXNrVGV4dHVyZSAqLyk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC01ODksMjYgKzUz
OSwyNiBAQCBib29sIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5n
KHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLAogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6
ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBw
cm9ncmFtLCB1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgRHJhd1F1YWQmIHF1
YWRUb0RyYXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZs
b2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKQogewotICAgIEdM
X0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7
Ci0gICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpOwotICAgIEdMX0NNRChn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmUpKTsKLSAgICBHTF9DTUQoZ2xVbmlm
b3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVyZUxvY2F0aW9uKCksIDApKTsKKyAgICBtX2NvbnRl
eHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOwor
ICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
MCk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCB0ZXh0dXJlKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnNv
dXJjZVRleHR1cmVMb2NhdGlvbigpLCAwKTsKIAotICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9n
cmFtLT5mbGlwTG9jYXRpb24oKSwgISEoZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVyZSkpKTsKKyAg
ICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPmZsaXBMb2NhdGlvbigpLCAhIShmbGFn
cyAmIFNob3VsZEZsaXBUZXh0dXJlKSk7CiAKICAgICBpZiAoVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCkp
KQotICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCks
IG9wYWNpdHkpKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5vcGFj
aXR5TG9jYXRpb24oKSwgb3BhY2l0eSk7CiAKICAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1Rl
eHR1cmUtPmlzVmFsaWQoKSAmJiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCkpKSB7CiAgICAgICAg
IGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0
IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKLSAgICAgICAgR0xfQ01EKGdsQWN0aXZl
VGV4dHVyZShHTF9URVhUVVJFMSkpOwotICAgICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKSk7Ci0gICAgICAgIEdMX0NNRChnbFVuaWZv
cm0xaShwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCksIDEpKTsKLSAgICAgICAgR0xfQ01E
KGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpOworICAgICAgICBtX2NvbnRleHQzRC0+YWN0
aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpOworICAgICAgICBtX2NvbnRl
eHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1hc2tUZXh0
dXJlR0wtPmlkKCkpOworICAgICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPm1h
c2tUZXh0dXJlTG9jYXRpb24oKSwgMSk7CisgICAgICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgfQogCiAgICAgYm9vbCBuZWVk
c0JsZW5kaW5nID0gKGZsYWdzICYgU3VwcG9ydHNCbGVuZGluZykgfHwgb3BhY2l0eSA8IDAuOTkg
fHwgbWFza1RleHR1cmU7Ci0gICAgZHJhd1F1YWQocXVhZFRvRHJhdywgbW9kZWxWaWV3TWF0cml4
LCBwcm9ncmFtLCBHTF9UUklBTkdMRV9GQU4sIG5lZWRzQmxlbmRpbmcpOworICAgIGRyYXdRdWFk
KHF1YWRUb0RyYXcsIG1vZGVsVmlld01hdHJpeCwgcHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRSSUFOR0xFX0ZBTiwgbmVlZHNCbGVuZGluZyk7CiB9CiAKIGJvb2wgQml0bWFwVGV4dHVyZUdM
OjpjYW5SZXVzZVdpdGgoY29uc3QgSW50U2l6ZSYgY29udGVudHNTaXplLCBGbGFncykKQEAgLTYx
OSw3ICs1NjksNyBAQCBib29sIEJpdG1hcFRleHR1cmVHTDo6Y2FuUmV1c2VXaXRoKGNvbnN0IElu
dFNpemUmIGNvbnRlbnRzU2l6ZSwgRmxhZ3MpCiAjaWYgT1MoREFSV0lOKQogI2RlZmluZSBERUZB
VUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9S
RVYKICNlbHNlCi0jZGVmaW5lIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFIEdM
X1VOU0lHTkVEX0JZVEUKKyNkZWZpbmUgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZ
UEUgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKICNlbmRpZgogCiBzdGF0aWMgYm9v
bCBkcml2ZXJTdXBwb3J0c1N1YkltYWdlKCkKQEAgLTYzNCwzMCArNTg0LDMxIEBAIHN0YXRpYyBi
b29sIGRyaXZlclN1cHBvcnRzU3ViSW1hZ2UoKQogCiB2b2lkIEJpdG1hcFRleHR1cmVHTDo6ZGlk
UmVzZXQoKQogeworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVN
YXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CiAgICAgaWYgKCFtX2lkKQotICAgICAgICBHTF9D
TUQoZ2xHZW5UZXh0dXJlcygxLCAmbV9pZCkpOwotCisgICAgICAgIG1faWQgPSBjb250ZXh0M0Qt
PmNyZWF0ZVRleHR1cmUoKTsKICAgICBtX3Nob3VsZENsZWFyID0gdHJ1ZTsKICAgICBpZiAobV90
ZXh0dXJlU2l6ZSA9PSBjb250ZW50U2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3Rl
eHR1cmVTaXplID0gY29udGVudFNpemUoKTsKLSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCBtX2lkKSk7Ci0gICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUikpOwotICAgIEdMX0NNRChnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5F
QVIpKTsKLSAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKSk7Ci0gICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVy
aShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSkpOwot
ICAgIEdMX0NNRChnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgbV90ZXh0
dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBERUZB
VUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgMCkpOworICAgIGNvbnRleHQzRC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1faWQpOworICAgIGNvbnRl
eHQzRC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVB
Uik7CisgICAgY29udGV4dDNELT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6TElORUFSKTsKKyAgICBjb250ZXh0M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywg
R3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGNvbnRleHQzRC0+dGV4UGFy
YW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAg
Y29udGV4dDNELT50ZXhJbWFnZTJERGlyZWN0KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3Rl
eHR1cmVTaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgREVGQVVMVF9U
RVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIDApOwogfQogCiAKIHZvaWQgQml0bWFwVGV4dHVy
ZUdMOjp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJn
ZXRSZWN0LCBjb25zdCBJbnRQb2ludCYgc291cmNlT2Zmc2V0LCBpbnQgYnl0ZXNQZXJMaW5lKQog
ewotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKTsKKyAgICBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0Nv
bnRleHQzRCgpOworICAgIGNvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIG1faWQpOwogCiAgICAgY29uc3QgdW5zaWduZWQgYnl0ZXNQZXJQaXhlbCA9
IDQ7CiAgICAgaWYgKGJ5dGVzUGVyTGluZSA9PSB0YXJnZXRSZWN0LndpZHRoKCkgKiBieXRlc1Bl
clBpeGVsICYmIHNvdXJjZU9mZnNldCA9PSBJbnRQb2ludDo6emVybygpKSB7Ci0gICAgICAgIEdM
X0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRh
cmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIEdM
X1JHQkEsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29uc3QgY2hhciop
ZGF0YSkpOworICAgICAgICBjb250ZXh0M0QtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0
UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIChjb25zdCBjaGFyKilkYXRh
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjc1LDE5ICs2MjYsMTkgQEAgdm9pZCBC
aXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0IElu
dFJlY3QmIHRhcmdldFJlY3QKICAgICAgICAgICAgIGRzdCArPSB0YXJnZXRCeXRlc1BlckxpbmU7
CiAgICAgICAgIH0KIAotICAgICAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVf
MkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgp
LCB0YXJnZXRSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJB
TlNGRVJfVFlQRSwgdGVtcG9yYXJ5RGF0YS5kYXRhKCkpKTsKKyAgICAgICAgY29udGV4dDNELT50
ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0
LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWln
aHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFO
U0ZFUl9UWVBFLCB0ZW1wb3JhcnlEYXRhLmRhdGEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICNpZiAhZGVmaW5lZChURVhNQVBfT1BFTkdMX0VTXzIpCiAgICAgLy8gVXNlIHRoZSBPcGVu
R0wgc3ViLWltYWdlIGV4dGVuc2lvbiwgbm93IHRoYXQgd2Uga25vdyBpdCdzIGF2YWlsYWJsZS4K
LSAgICBHTF9DTUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgYnl0ZXNQZXJM
aW5lIC8gYnl0ZXNQZXJQaXhlbCkpOwotICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdMX1VOUEFD
S19TS0lQX1JPV1MsIHNvdXJjZU9mZnNldC55KCkpKTsKLSAgICBHTF9DTUQoZ2xQaXhlbFN0b3Jl
aShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsIHNvdXJjZU9mZnNldC54KCkpKTsKLSAgICBHTF9DTUQo
Z2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRS
ZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBHTF9SR0JB
LCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgKGNvbnN0IGNoYXIqKWRhdGEp
KTsKLSAgICBHTF9DTUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgMCkpOwot
ICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JPV1MsIDApKTsKLSAgICBH
TF9DTUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsIDApKTsKKyAgICBjb250
ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCBieXRlc1BlckxpbmUgLyBi
eXRlc1BlclBpeGVsKTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQ
X1JPV1MsIHNvdXJjZU9mZnNldC55KCkpOworICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xf
VU5QQUNLX1NLSVBfUElYRUxTLCBzb3VyY2VPZmZzZXQueCgpKTsKKyAgICBjb250ZXh0M0QtPnRl
eFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3Qu
eCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdo
dCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5T
RkVSX1RZUEUsIChjb25zdCBjaGFyKilkYXRhKTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVp
KEdMX1VOUEFDS19ST1dfTEVOR1RILCAwKTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdM
X1VOUEFDS19TS0lQX1JPV1MsIDApOworICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5Q
QUNLX1NLSVBfUElYRUxTLCAwKTsKICNlbmRpZgogfQogCkBAIC03MTIsMTkgKzY2MywxOSBAQCB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0ZpbHRlcmVkKGNvbnN0IEJpdG1hcFRleHR1cmUmIHNv
dXJjZVRleHR1cmUsIGNvbnN0IEJpdAogCiAgICAgcHJvZ3JhbS0+cHJlcGFyZShmaWx0ZXIsIHBh
c3MsIHNvdXJjZVRleHR1cmUuY29udGVudFNpemUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFw
VGV4dHVyZUdMJj4oY29udGVudFRleHR1cmUpLmlkKCkpOwogCi0gICAgR0xfQ01EKGdsRW5hYmxl
VmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQo
Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigpKSk7Ci0g
ICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpOwotICAgIEdMX0NNRChnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVH
TCY+KHNvdXJjZVRleHR1cmUpLmlkKCkpKTsKLSAgICBnbFVuaWZvcm0xaShwcm9ncmFtLT50ZXh0
dXJlVW5pZm9ybSgpLCAwKTsKLSAgICBjb25zdCBHTGZsb2F0IHRhcmdldFZlcnRpY2VzW10gPSB7
LTEsIC0xLCAxLCAtMSwgMSwgMSwgLTEsIDF9OwotICAgIGNvbnN0IEdMZmxvYXQgc291cmNlVmVy
dGljZXNbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKLSAgICBHTF9DTUQoZ2xWZXJ0ZXhB
dHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBHTF9GTE9BVCwgR0xfRkFM
U0UsIDAsIHRhcmdldFZlcnRpY2VzKSk7Ci0gICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRl
cihwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHNv
dXJjZVZlcnRpY2VzKSk7Ci0gICAgR0xfQ01EKGdsRGlzYWJsZShHTF9CTEVORCkpOwotICAgIEdM
X0NNRChnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSk7Ci0gICAgR0xfQ01EKGds
RGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAg
R0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmli
KCkpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+
dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eShwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOworICAgIG1fY29udGV4dDNELT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Qml0bWFwVGV4dHVyZUdMJj4oc291cmNlVGV4dHVyZSkuaWQoKSk7CisgICAgbV9jb250ZXh0M0Qt
PnVuaWZvcm0xaShwcm9ncmFtLT50ZXh0dXJlVW5pZm9ybSgpLCAwKTsKKyAgICBjb25zdCBHQzNE
ZmxvYXQgdGFyZ2V0VmVydGljZXNbXSA9IHstMSwgLTEsIDEsIC0xLCAxLCAxLCAtMSwgMX07Cisg
ICAgY29uc3QgR0MzRGZsb2F0IHNvdXJjZVZlcnRpY2VzW10gPSB7MCwgMCwgMSwgMCwgMSwgMSwg
MCwgMX07CisgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVy
dGV4QXR0cmliKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0Rp
bnRwdHIodGFyZ2V0VmVydGljZXMpKTsKKyAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9p
bnRlcihwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHNvdXJjZVZlcnRpY2VzKSk7CisgICAgbV9jb250ZXh0
M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICBtX2NvbnRleHQzRC0+
ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKKyAgICBt
X2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJp
YigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0t
PnRleENvb3JkQXR0cmliKCkpOwogfQogCiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IEJpdG1h
cFRleHR1cmVHTDo6YXBwbHlGaWx0ZXJzKGNvbnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0
dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQpAQCAtNzY1LDE3ICs3MTYsMTgg
QEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmluaXRpYWxpemVTdGVuY2lsKCkKIHsKICAgICBpZiAo
bV9yYm8pCiAgICAgICAgIHJldHVybjsKLSAgICBHTF9DTUQoZ2xHZW5SZW5kZXJidWZmZXJzKDEs
ICZtX3JibykpOwotICAgIEdMX0NNRChnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVS
LCBtX3JibykpOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVN
YXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgbV9yYm8gPSBjb250ZXh0M0QtPmNyZWF0
ZVJlbmRlcmJ1ZmZlcigpOworICAgIGNvbnRleHQzRC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX3Jibyk7CiAjaWZkZWYgVEVYTUFQX09QRU5HTF9F
U18yCi0gICAgR0xfQ01EKGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTF9SRU5ERVJCVUZGRVIsIEdM
X1NURU5DSUxfSU5ERVg4LCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVp
Z2h0KCkpKTsKKyAgICBjb250ZXh0M0QtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4LCBt
X3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpOwogI2Vsc2UKLSAg
ICBHTF9DTUQoZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgR0xfREVQVEhf
U1RFTkNJTCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKSk7
CisgICAgY29udGV4dDNELT5yZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMLCBtX3RleHR1cmVT
aXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpOwogI2VuZGlmCi0gICAgR0xfQ01E
KGdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIDApKTsKLSAgICBHTF9DTUQoZ2xG
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hN
RU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fcmJvKSk7Ci0gICAgR0xfQ01EKGdsQ2xlYXJTdGVuY2ls
KDApKTsKLSAgICBHTF9DTUQoZ2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKTsKKyAgICBj
b250ZXh0M0QtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UiwgMCk7CisgICAgY29udGV4dDNELT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1F
TlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fcmJvKTsKKyAgICBjb250ZXh0
M0QtPmNsZWFyU3RlbmNpbCgwKTsKKyAgICBjb250ZXh0M0QtPmNsZWFyKEdyYXBoaWNzQ29udGV4
dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOwogfQogCiB2b2lkIEJpdG1hcFRleHR1cmVHTDo6Y2xl
YXJJZk5lZWRlZCgpCkBAIC03ODMsMTAgKzczNSwxMSBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6
Y2xlYXJJZk5lZWRlZCgpCiAgICAgaWYgKCFtX3Nob3VsZENsZWFyKQogICAgICAgICByZXR1cm47
CiAKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5n
cmFwaGljc0NvbnRleHQzRCgpOwogICAgIG1fY2xpcFN0YWNrLmluaXQoSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBtX3RleHR1cmVTaXplKSk7Ci0gICAgbV9jbGlwU3RhY2suYXBwbHkoKTsKLSAg
ICBHTF9DTUQoZ2xDbGVhckNvbG9yKDAsIDAsIDAsIDApKTsKLSAgICBHTF9DTUQoZ2xDbGVhcihH
TF9DT0xPUl9CVUZGRVJfQklUKSk7CisgICAgbV9jbGlwU3RhY2suYXBwbHkoY29udGV4dDNEKTsK
KyAgICBjb250ZXh0M0QtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgY29udGV4dDNELT5j
bGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCk7CiAgICAgbV9zaG91bGRD
bGVhciA9IGZhbHNlOwogfQogCkBAIC03OTUsMzMgKzc0OCwzNiBAQCB2b2lkIEJpdG1hcFRleHR1
cmVHTDo6Y3JlYXRlRmJvSWZOZWVkZWQoKQogICAgIGlmIChtX2ZibykKICAgICAgICAgcmV0dXJu
OwogCi0gICAgR0xfQ01EKGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2ZibykpOwotICAgIEdMX0NN
RChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pKTsKLSAgICBHTF9DTUQo
Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVO
VDAsIEdMX1RFWFRVUkVfMkQsIGlkKCksIDApKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOworICAgIG1fZmJv
ID0gY29udGV4dDNELT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIGNvbnRleHQzRC0+YmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIGNv
bnRleHQzRC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBpZCgpLCAwKTsKICAgICBtX3Nob3VsZENsZWFyID0gdHJ1ZTsKIH0K
IAogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmJpbmQoKQogewotICAgIEdMX0NNRChnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIDApKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNE
ID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOworICAgIGNvbnRleHQzRC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwogICAgIGNyZWF0
ZUZib0lmTmVlZGVkKCk7Ci0gICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVG
RkVSLCBtX2ZibykpOwotICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIG1fdGV4dHVyZVNpemUu
d2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSkpOworICAgIGNvbnRleHQzRC0+YmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIGNv
bnRleHQzRC0+dmlld3BvcnQoMCwgMCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVT
aXplLmhlaWdodCgpKTsKICAgICBjbGVhcklmTmVlZGVkKCk7CiAgICAgbV90ZXh0dXJlTWFwcGVy
LT5kYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgobV90ZXh0
dXJlU2l6ZSwgdHJ1ZSAvKiBtaXJyb3JlZCAqLyk7Ci0gICAgbV9jbGlwU3RhY2suYXBwbHkoKTsK
KyAgICBtX2NsaXBTdGFjay5hcHBseShjb250ZXh0M0QpOwogfQogCiBCaXRtYXBUZXh0dXJlR0w6
On5CaXRtYXBUZXh0dXJlR0woKQogeworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0Qg
PSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CiAgICAgaWYgKG1faWQpCi0g
ICAgICAgIEdMX0NNRChnbERlbGV0ZVRleHR1cmVzKDEsICZtX2lkKSk7CisgICAgICAgIGNvbnRl
eHQzRC0+ZGVsZXRlVGV4dHVyZShtX2lkKTsKIAogICAgIGlmIChtX2ZibykKLSAgICAgICAgR0xf
Q01EKGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2ZibykpOworICAgICAgICBjb250ZXh0M0Qt
PmRlbGV0ZUZyYW1lYnVmZmVyKG1fZmJvKTsKIAogICAgIGlmIChtX3JibykKLSAgICAgICAgR0xf
Q01EKGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9yYm8pKTsKKyAgICAgICAgY29udGV4dDNE
LT5kZWxldGVSZW5kZXJidWZmZXIobV9yYm8pOwogfQogCiBib29sIEJpdG1hcFRleHR1cmVHTDo6
aXNWYWxpZCgpIGNvbnN0CkBAIC04NDEsMTEgKzc5NywxMSBAQCBUZXh0dXJlTWFwcGVyR0w6On5U
ZXh0dXJlTWFwcGVyR0woKQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmluZERlZmF1bHRTdXJm
YWNlKCkKIHsKLSAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGRh
dGEoKS50YXJnZXRGcmFtZUJ1ZmZlcikpOworICAgIG1fY29udGV4dDNELT5iaW5kRnJhbWVidWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBkYXRhKCkudGFyZ2V0RnJhbWVCdWZm
ZXIpOwogICAgIEludFNpemUgdmlld3BvcnRTaXplKGRhdGEoKS52aWV3cG9ydFsyXSwgZGF0YSgp
LnZpZXdwb3J0WzNdKTsKICAgICBkYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNyZWF0ZVByb2pl
Y3Rpb25NYXRyaXgodmlld3BvcnRTaXplLCBkYXRhKCkuUGFpbnRGbGFncyAmIFBhaW50aW5nTWly
cm9yZWQpOwotICAgIEdMX0NNRChnbFZpZXdwb3J0KGRhdGEoKS52aWV3cG9ydFswXSwgZGF0YSgp
LnZpZXdwb3J0WzFdLCB2aWV3cG9ydFNpemUud2lkdGgoKSwgdmlld3BvcnRTaXplLmhlaWdodCgp
KSk7Ci0gICAgbV9jbGlwU3RhY2suYXBwbHkoKTsKKyAgICBtX2NvbnRleHQzRC0+dmlld3BvcnQo
ZGF0YSgpLnZpZXdwb3J0WzBdLCBkYXRhKCkudmlld3BvcnRbMV0sIHZpZXdwb3J0U2l6ZS53aWR0
aCgpLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpOworICAgIG1fY2xpcFN0YWNrLmFwcGx5KG1fY29u
dGV4dDNELmdldCgpKTsKICAgICBkYXRhKCkuY3VycmVudFN1cmZhY2UuY2xlYXIoKTsKIH0KIApA
QCAtODc1LDcgKzgzMSw3IEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpiZWdpblNjaXNzb3JDbGlw
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGNsaXBTdGFjaygpLmN1cnJlbnQoKS5zY2lzc29yQm94LmludGVyc2Vj
dChyZWN0KTsKLSAgICBjbGlwU3RhY2soKS5hcHBseSgpOworICAgIGNsaXBTdGFjaygpLmFwcGx5
KG1fY29udGV4dDNELmdldCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODg5LDEwICs4
NDUsMTAgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb24KIAogICAgIFJlZlB0cjxUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOjpTaW1wbGUpOwogCi0gICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgp
KSk7Ci0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4
QXR0cmliKCkpKTsKLSAgICBjb25zdCBHTGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwgMCwg
MSwgMSwgMCwgMX07Ci0gICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52
ZXJ0ZXhBdHRyaWIoKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB1bml0UmVjdCkpOworICAg
IG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOworICAgIG1fY29udGV4dDNE
LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAg
Y29uc3QgR0MzRGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07Cisg
ICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4QXR0cmli
KCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIodW5p
dFJlY3QpKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0
aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KQogICAgICAgICAgICAgLm11bHRpcGx5
KG1vZGVsVmlld01hdHJpeCkKQEAgLTkwMSwxNCArODU3LDE0IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJp
eCwgY29uCiAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKICAgICAgICAgICAgICAgICB0YXJn
ZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIDAsIDEpKTsKIAotICAgIGNvbnN0IEdMZmxvYXQg
bTRbXSA9IHsKKyAgICBjb25zdCBHQzNEZmxvYXQgbTRbXSA9IHsKICAgICAgICAgbWF0cml4Lm0x
MSgpLCBtYXRyaXgubTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAogICAgICAgICBt
YXRyaXgubTIxKCksIG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCiAg
ICAgICAgIG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5t
MzQoKSwKICAgICAgICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwg
bWF0cml4Lm00NCgpCiAgICAgfTsKIAotICAgIGNvbnN0IEdMZmxvYXQgbTRhbGxbXSA9IHsKKyAg
ICBjb25zdCBHQzNEZmxvYXQgbTRhbGxbXSA9IHsKICAgICAgICAgMiwgMCwgMCwgMCwKICAgICAg
ICAgMCwgMiwgMCwgMCwKICAgICAgICAgMCwgMCwgMSwgMCwKQEAgLTkxNyw0MyArODczLDQyIEBA
IHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAKICAgICBpbnQmIHN0ZW5jaWxJbmRleCA9IGNsaXBT
dGFjaygpLmN1cnJlbnQoKS5zdGVuY2lsSW5kZXg7CiAKLSAgICBHTF9DTUQoZ2xFbmFibGUoR0xf
U1RFTkNJTF9URVNUKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9URVNUKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBkbyBhbnkgYWN0
dWFsIGRyYXdpbmcuCi0gICAgR0xfQ01EKGdsU3RlbmNpbEZ1bmMoR0xfTkVWRVIsIHN0ZW5jaWxJ
bmRleCwgc3RlbmNpbEluZGV4KSk7CisgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxGdW5jKEdyYXBo
aWNzQ29udGV4dDNEOjpORVZFUiwgc3RlbmNpbEluZGV4LCBzdGVuY2lsSW5kZXgpOwogCiAgICAg
Ly8gT3BlcmF0ZSBvbmx5IG9uIHRoZSBzdGVuY2lsSW5kZXggYW5kIGFib3ZlLgotICAgIEdMX0NN
RChnbFN0ZW5jaWxNYXNrKDB4ZmYgJiB+KHN0ZW5jaWxJbmRleCAtIDEpKSk7CisgICAgbV9jb250
ZXh0M0QtPnN0ZW5jaWxNYXNrKDB4ZmYgJiB+KHN0ZW5jaWxJbmRleCAtIDEpKTsKIAogICAgIC8v
IEZpcnN0IGNsZWFyIHRoZSBlbnRpcmUgYnVmZmVyIGF0IHRoZSBjdXJyZW50IGluZGV4LgotICAg
IEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+bWF0cml4TG9jYXRpb24oKSwgMSwg
R0xfRkFMU0UsIG00YWxsKSk7Ci0gICAgR0xfQ01EKGdsU3RlbmNpbE9wKEdMX1pFUk8sIEdMX1pF
Uk8sIEdMX1pFUk8pKTsKLSAgICBHTF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwg
MCwgNCkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJp
eExvY2F0aW9uKCksIDEsIGZhbHNlLCBjb25zdF9jYXN0PEdDM0RmbG9hdCo+KG00YWxsKSk7Cisg
ICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxPcChHcmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhp
Y3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKKyAgICBtX2NvbnRl
eHQzRC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsK
IAogICAgIC8vIE5vdyBhcHBseSB0aGUgY3VycmVudCBpbmRleCB0byB0aGUgbmV3IHF1YWQuCi0g
ICAgR0xfQ01EKGdsU3RlbmNpbE9wKEdMX1JFUExBQ0UsIEdMX1JFUExBQ0UsIEdMX1JFUExBQ0Up
KTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9u
KCksIDEsIEdMX0ZBTFNFLCBtNCkpOwotICAgIEdMX0NNRChnbERyYXdBcnJheXMoR0xfVFJJQU5H
TEVfRkFOLCAwLCA0KSk7CisgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxPcChHcmFwaGljc0NvbnRl
eHQzRDo6UkVQTEFDRSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFUExBQ0UsIEdyYXBoaWNzQ29udGV4
dDNEOjpSRVBMQUNFKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFt
LT5tYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgY29uc3RfY2FzdDxHQzNEZmxvYXQqPihtNCkp
OworICAgIG1fY29udGV4dDNELT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdM
RV9GQU4sIDAsIDQpOwogCiAgICAgLy8gQ2xlYXIgdGhlIHN0YXRlLgotICAgIEdMX0NNRChnbERp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIEdM
X0NNRChnbFN0ZW5jaWxNYXNrKDApKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0
dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+c3Rl
bmNpbE1hc2soMCk7CiAKICAgICAvLyBJbmNyZWFzZSBzdGVuY2lsSW5kZXggYW5kIGFwcGx5IHN0
ZW5jaWwgdGVzdGluZy4KICAgICBzdGVuY2lsSW5kZXggKj0gMjsKLSAgICBjbGlwU3RhY2soKS5h
cHBseSgpOworICAgIGNsaXBTdGFjaygpLmFwcGx5KG1fY29udGV4dDNELmdldCgpKTsKIH0KIAog
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZENsaXAoKQogewogICAgIGNsaXBTdGFjaygpLnBvcCgp
OwotICAgIGNsaXBTdGFjaygpLmFwcGx5KCk7CisgICAgY2xpcFN0YWNrKCkuYXBwbHkobV9jb250
ZXh0M0QuZ2V0KCkpOwogfQogCiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBw
ZXJHTDo6Y3JlYXRlVGV4dHVyZSgpCiB7Ci0gICAgQml0bWFwVGV4dHVyZUdMKiB0ZXh0dXJlID0g
bmV3IEJpdG1hcFRleHR1cmVHTCgpOwotICAgIHRleHR1cmUtPnNldFRleHR1cmVNYXBwZXIodGhp
cyk7CisgICAgQml0bWFwVGV4dHVyZUdMKiB0ZXh0dXJlID0gbmV3IEJpdG1hcFRleHR1cmVHTCh0
aGlzKTsKICAgICByZXR1cm4gYWRvcHRSZWYodGV4dHVyZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wu
aAppbmRleCAwNzZlNjVmNzM3NzYyNjFmMGEzYjkzYmI4NTczYTUwNWRlOWMwMTcwLi44YTcyZDY3
YWY5ZWVkMmNkNmI5MGVlODFhODVjODJhOTgwOGVkOWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCkBA
IC0yMyw4ICsyMyw4IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5j
bHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNs
dWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKICNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIApAQCAtMzgs
NyArMzgsNiBAQCBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTsKIGNsYXNzIFRleHR1
cmVNYXBwZXJHTCA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc093blB0cjxUZXh0dXJlTWFwcGVyR0w+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5l
dyBUZXh0dXJlTWFwcGVyR0wpOyB9Ci0gICAgVGV4dHVyZU1hcHBlckdMKCk7CiAgICAgdmlydHVh
bCB+VGV4dHVyZU1hcHBlckdMKCk7CiAKICAgICBlbnVtIEZsYWcgewpAQCAtNTQsNyArNTMsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1
cmUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0
IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlLCB1bnNpZ25lZCBleHBv
c2VkRWRnZXMpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZSh1aW50MzJf
dCB0ZXh0dXJlLCBGbGFncywgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01h
dHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIHVu
c2lnbmVkIGV4cG9zZWRFZGdlcyA9IEFsbEVkZ2VzKTsKIAotI2lmIGRlZmluZWQoR0xfQVJCX3Rl
eHR1cmVfcmVjdGFuZ2xlKQorI2lmICFVU0UoVEVYTUFQX09QRU5HTF9FU18yKQogICAgIHZpcnR1
YWwgdm9pZCBkcmF3VGV4dHVyZVJlY3RhbmdsZUFSQih1aW50MzJfdCB0ZXh0dXJlLCBGbGFncywg
Y29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0
eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpOwogI2VuZGlmCiAKQEAgLTY2LDYg
KzY1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW50U2l6ZSBtYXhUZXh0dXJlU2l6ZSgpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIEludFNpemUoMjAwMCwgMjAwMCk7IH0KICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpIE9WRVJSSURFOwogICAg
IHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKSBPVkVSUklERSB7IHJl
dHVybiBtX2NvbnRleHQ7IH0KKyAgICBpbmxpbmUgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNz
Q29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0M0QuZ2V0KCk7IH0KICAgICB2aXJ0
dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkgT1ZF
UlJJREUgeyBtX2NvbnRleHQgPSBjb250ZXh0OyB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
CkBAIC03NSw3ICs3NSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEVuYWJsZUVkZ2VEaXN0YW5j
ZUFudGlhbGlhc2luZyhib29sIGVuYWJsZWQpIHsgbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxp
YXNpbmcgPSBlbmFibGVkOyB9CiAKIHByaXZhdGU6Ci0KICAgICBzdHJ1Y3QgQ2xpcFN0YXRlIHsK
ICAgICAgICAgSW50UmVjdCBzY2lzc29yQm94OwogICAgICAgICBpbnQgc3RlbmNpbEluZGV4OwpA
QCAtODksNyArODgsNyBAQCBwcml2YXRlOgogICAgIHB1YmxpYzoKICAgICAgICAgdm9pZCBwdXNo
KCk7CiAgICAgICAgIHZvaWQgcG9wKCk7Ci0gICAgICAgIHZvaWQgYXBwbHkoKTsKKyAgICAgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQzRCopOwogICAgICAgICBpbmxpbmUgQ2xpcFN0YXRl
JiBjdXJyZW50KCkgeyByZXR1cm4gY2xpcFN0YXRlOyB9CiAgICAgICAgIHZvaWQgaW5pdChjb25z
dCBJbnRSZWN0Jik7CiAKQEAgLTEwOSwxNiArMTA4LDE5IEBAIHByaXZhdGU6CiAgICAgICAgIEZs
b2F0UXVhZCB0YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlOwogICAgIH07CiAKKyAgICBUZXh0
dXJlTWFwcGVyR0woKTsKKwogICAgIGJvb2wgZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHVp
bnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBGbG9hdFJlY3QmIG9yaWdpbmFsVGFyZ2V0UmVj
dCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3Bh
Y2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIHVuc2lnbmVkIGV4cG9zZWRF
ZGdlcyk7CiAgICAgdm9pZCBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0oVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0qLCB1aW50MzJfdCB0ZXh0dXJlLCBGbGFncywgY29uc3QgRHJhd1F1YWQm
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFj
aXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7Ci0gICAgdm9pZCBkcmF3UXVh
ZChjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdN
YXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiwgR0xlbnVtIGRyYXdpbmdNb2RlLCBi
b29sIG5lZWRzQmxlbmRpbmcpOworICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmLCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbSosIEdDM0RlbnVtIGRyYXdpbmdNb2RlLCBib29sIG5lZWRzQmxlbmRpbmcp
OwogCiAgICAgYm9vbCBiZWdpblNjaXNzb3JDbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiwgY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBiaW5kRGVmYXVsdFN1cmZhY2UoKTsKICAg
ICBDbGlwU3RhY2smIGNsaXBTdGFjaygpOwogICAgIGlubGluZSBUZXh0dXJlTWFwcGVyR0xEYXRh
JiBkYXRhKCkgeyByZXR1cm4gKm1fZGF0YTsgfQotICAgIFRleHR1cmVNYXBwZXJHTERhdGEqIG1f
ZGF0YTsKICAgICBHcmFwaGljc0NvbnRleHQqIG1fY29udGV4dDsKKyAgICBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IG1fY29udGV4dDNEOworICAgIFRleHR1cmVNYXBwZXJHTERhdGEqIG1fZGF0
YTsKICAgICBDbGlwU3RhY2sgbV9jbGlwU3RhY2s7CiAgICAgYm9vbCBtX2VuYWJsZUVkZ2VEaXN0
YW5jZUFudGlhbGlhc2luZzsKIApAQCAtMTM1LDcgKzEzNyw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGluaXRpYWxpemVTdGVuY2lsKCk7CiAgICAgfkJpdG1hcFRleHR1cmVHTCgpOwogICAgIHZpcnR1
YWwgdWludDMyX3QgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0gICAgdWludDMyX3QgdGV4
dHVyZVRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIEdMX1RFWFRVUkVfMkQ7IH0KKyAgICB1aW50MzJf
dCB0ZXh0dXJlVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQ7IH0KICAgICBJbnRTaXplIHRleHR1cmVTaXplKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0
dXJlU2l6ZTsgfQogICAgIHZvaWQgc2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyR0wqIHRl
eG1hcCkgeyBtX3RleHR1cmVNYXBwZXIgPSB0ZXhtYXA7IH0KICAgICB2b2lkIHVwZGF0ZUNvbnRl
bnRzKEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50Jik7CkBAIC0xNDcsMjAg
KzE0OSwyMiBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBHTHVpbnQgbV9pZDsK
KyAgICBQbGF0Zm9ybTNET2JqZWN0IG1faWQ7CiAgICAgSW50U2l6ZSBtX3RleHR1cmVTaXplOwog
ICAgIEludFJlY3QgbV9kaXJ0eVJlY3Q7Ci0gICAgR0x1aW50IG1fZmJvOwotICAgIEdMdWludCBt
X3JibzsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZmJvOworICAgIFBsYXRmb3JtM0RPYmplY3Qg
bV9yYm87CiAgICAgYm9vbCBtX3Nob3VsZENsZWFyOwotICAgIFRleHR1cmVNYXBwZXJHTCogbV90
ZXh0dXJlTWFwcGVyOwogICAgIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrIG1fY2xpcFN0YWNr
OwotICAgIEJpdG1hcFRleHR1cmVHTCgpCisgICAgVGV4dHVyZU1hcHBlckdMKiBtX3RleHR1cmVN
YXBwZXI7CisKKyAgICBCaXRtYXBUZXh0dXJlR0woKTsKKyAgICBCaXRtYXBUZXh0dXJlR0woVGV4
dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVyKQogICAgICAgICA6IG1faWQoMCkKICAgICAgICAg
LCBtX2ZibygwKQogICAgICAgICAsIG1fcmJvKDApCiAgICAgICAgICwgbV9zaG91bGRDbGVhcih0
cnVlKQotICAgICAgICAsIG1fdGV4dHVyZU1hcHBlcigwKQorICAgICAgICAsIG1fdGV4dHVyZU1h
cHBlcih0ZXh0dXJlTWFwcGVyKQogICAgIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIuY3BwCmluZGV4IDBmYmRiZTk1Y2FmMTY0NzBkZDA2MzJmMDRjMTQ0
YjgyMGI2ZThiYjMuLjU1YWI4YTMwOWVhZjliZDJjYjdjNTk3YzE3ZjcxZDM0Zjg5Yjg2NTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcApAQCAtMzAsMjUgKzMw
LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmbmRlZiBURVhNQVBfT1BFTkdMX0VT
XzIKLSNkZWZpbmUgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlMgXAotICAgICIjZGVmaW5lIGxv
d3BcbiNkZWZpbmUgaGlnaHBcbiIKLSNkZWZpbmUgT0VTMl9GUkFHTUVOVF9TSEFERVJfREVGQVVM
VF9QUkVDSVNJT04KLSNlbHNlCi0jZGVmaW5lIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TCi0j
ZGVmaW5lIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFVTFRfUFJFQ0lTSU9OIFwKLSAgICAicHJl
Y2lzaW9uIG1lZGl1bXAgZmxvYXQ7IFxuIgotI2VuZGlmCi0KLSNkZWZpbmUgU1RSSU5HSUZZX1ZB
TChzcmMuLi4pICNzcmMKLSNkZWZpbmUgVkVSVEVYX1NIQURFUihzcmMuLi4pIE9FUzJfUFJFQ0lT
SU9OX0RFRklOSVRJT05TXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSSU5HSUZZ
X1ZBTChzcmMpCi0jZGVmaW5lIEZSQUdNRU5UX1NIQURFUihzcmMuLi4pIE9FUzJfUFJFQ0lTSU9O
X0RFRklOSVRJT05TXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPRVMyX0ZSQUdN
RU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTlwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU1RSSU5HSUZZX1ZBTChzcmMpCisjZGVmaW5lIFNUUklOR0lGWShzcmMuLi4pICNzcmMK
IAogc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sg
PQotICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCisgICAgICAgIHByZWNpc2lv
biBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NvdXJjZTsKICAg
ICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19tYXNrOwogICAgICAgICB1bmlmb3JtIGxvd3AgZmxv
YXQgdV9vcGFjaXR5OwpAQCAtNjQsNyArNTAsOCBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21l
bnRTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9CiAgICAgKTsKIAogc3RhdGljIGNvbnN0IGNo
YXIqIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdE9wYWNpdHlBbmRNYXNrID0KLSAgICBGUkFHTUVO
VF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9h
dDsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfc291cmNlOwogICAgICAgICB1bmlm
b3JtIHNhbXBsZXIyRFJlY3Qgc19tYXNrOwogICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9v
cGFjaXR5OwpAQCAtODAsNyArNjcsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFk
ZXJTb3VyY2VSZWN0T3BhY2l0eUFuZE1hc2sgPQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFy
KiB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9Ci0gICAgVkVSVEVYX1NIQURFUigK
KyAgICBTVFJJTkdJRlkoCiAgICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKICAgICAgICAg
dW5pZm9ybSBsb3dwIGZsb2F0IHVfZmxpcDsKICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0
ZXg7CkBAIC05NSw3ICs4Miw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2VPcGFjaXR5QW5kTWFzayA9CiAgICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50
U2hhZGVyU291cmNlU2ltcGxlID0KLSAgICBGUkFHTUVOVF9TSEFERVIoCisgICAgU1RSSU5HSUZZ
KAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgdW5pZm9ybSBzYW1w
bGVyMkQgc19zb3VyY2U7CiAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CiAg
ICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOwpAQCAtMTA3LDcgKzk1
LDggQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlU2ltcGxlID0KICAg
ICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNp
bmdOb01hc2sgPQotICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCisgICAgICAg
IHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3Nv
dXJjZTsKICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CiAgICAg
ICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CkBAIC0xNDUsNyArMTM0LDggQEAgc3Rh
dGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlQW50aWFsaWFzaW5nTm9NYXNrID0K
ICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0U2lt
cGxlID0KLSAgICBGUkFHTUVOVF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAorICAgICAgICBwcmVj
aXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfc291
cmNlOwogICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1X3RleHR1cmVTaXplOwogICAgICAgICB1
bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwpAQCAtMTU4LDcgKzE0OCw3IEBAIHN0YXRpYyBj
b25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RTaW1wbGUgPQogICAgICk7CiAKIHN0
YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUgPQotICAgIFZFUlRFWF9T
SEFERVIoCisgICAgU1RSSU5HSUZZKAogICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXg7CiAg
ICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X2ZsaXA7CiAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0
IGFfdmVydGV4OwpAQCAtMTcxLDcgKzE2MSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhT
aGFkZXJTb3VyY2VTaW1wbGUgPQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhT
aGFkZXJTb3VyY2VTb2xpZENvbG9yID0KLSAgICBWRVJURVhfU0hBREVSKAorICAgIFNUUklOR0lG
WSgKICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OwogICAgICAgICBhdHRyaWJ1dGUgdmVj
NCBhX3ZlcnRleDsKICAgICAgICAgdm9pZCBtYWluKHZvaWQpCkBAIC0xODIsNyArMTcyLDggQEAg
c3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNvbGlkQ29sb3IgPQogCiAKIHN0
YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVNvbGlkQ29sb3IgPQotICAgIFZF
UlRFWF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBm
bG9hdDsKICAgICAgICAgdW5pZm9ybSB2ZWM0IHVfY29sb3I7CiAgICAgICAgIHZvaWQgbWFpbih2
b2lkKQogICAgICAgICB7CkBAIC0yMTIsMjIgKzIwMywyMiBAQCBQYXNzUmVmUHRyPFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVy
UHJvZwogCiAgICAgc3dpdGNoIChzaGFkZXJUeXBlKSB7CiAgICAgY2FzZSBTaW1wbGU6Ci0gICAg
ICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6Y3JlYXRlKCk7
CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6Y3Jl
YXRlKG1fY29udGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUmVjdFNpbXBsZToKLSAg
ICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3Jl
YXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RT
aW1wbGU6OmNyZWF0ZShtX2NvbnRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFudGlh
bGlhc2luZ05vTWFzazoKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtQW50aWFsaWFzaW5nTm9NYXNrOjpjcmVhdGUoKTsKKyAgICAgICAgcHJvZ3JhbSA9IFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpjcmVhdGUobV9jb250ZXh0
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBPcGFjaXR5QW5kTWFzazoKLSAgICAgICAgcHJv
Z3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OmNyZWF0ZSgp
OworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5k
TWFzazo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUmVjdE9w
YWNpdHlBbmRNYXNrOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1SZWN0T3BhY2l0eUFuZE1hc2s6OmNyZWF0ZSgpOworICAgICAgICBwcm9ncmFtID0gVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OmNyZWF0ZShtX2NvbnRleHQp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNvbGlkQ29sb3I6Ci0gICAgICAgIHByb2dyYW0g
PSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OmNyZWF0ZSgpOworICAgICAg
ICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpjcmVhdGUo
bV9jb250ZXh0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnZhbGlkOgogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIzNiw4ICsyMjcsOSBAQCBQYXNzUmVmUHRyPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hh
ZGVyUHJvZwogICAgIHJldHVybiBwcm9ncmFtOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVy
U291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSkKLSAgICA6IG1faWQoMCkK
K1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNl
LCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSkKKyAgICA6IG1fY29udGV4dChjb250
ZXh0KQorICAgICwgbV9pZCgwKQogICAgICwgbV92ZXJ0ZXhBdHRyaWIoMCkKICAgICAsIG1fdmVy
dGV4U2hhZGVyKDApCiAgICAgLCBtX2ZyYWdtZW50U2hhZGVyKDApCkBAIC0yNTYsNDYgKzI0OCw0
NiBAQCB2b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppbml0aWFsaXplUHJvZ3JhbSgp
CiB7CiAgICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlUHJvZ3JhbSA9IHZlcnRleFNo
YWRlclNvdXJjZSgpOwogICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlUHJvZ3Jh
bSA9IGZyYWdtZW50U2hhZGVyU291cmNlKCk7Ci0gICAgR0x1aW50IHZlcnRleFNoYWRlciA9IGds
Q3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOwotICAgIEdMdWludCBmcmFnbWVudFNoYWRl
ciA9IGdsQ3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURFUik7Ci0gICAgZ2xTaGFkZXJTb3Vy
Y2UodmVydGV4U2hhZGVyLCAxLCAmdmVydGV4U2hhZGVyU291cmNlUHJvZ3JhbSwgMCk7Ci0gICAg
Z2xTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJjZVBy
b2dyYW0sIDApOwotICAgIEdMdWludCBwcm9ncmFtSUQgPSBnbENyZWF0ZVByb2dyYW0oKTsKLSAg
ICBnbENvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBnbENvbXBpbGVTaGFkZXIoZnJh
Z21lbnRTaGFkZXIpOworICAgIFBsYXRmb3JtM0RPYmplY3QgdmVydGV4U2hhZGVyID0gbV9jb250
ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpOworICAg
IFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKTsKKyAgICBtX2NvbnRleHQtPnNo
YWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNoYWRlclNvdXJjZVByb2dyYW0pOworICAg
IG1fY29udGV4dC0+c2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlclNv
dXJjZVByb2dyYW0pOworICAgIFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbUlEID0gbV9jb250ZXh0
LT5jcmVhdGVQcm9ncmFtKCk7CisgICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyKHZlcnRleFNo
YWRlcik7CisgICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKIAot
ICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVydGV4U2hhZGVyKTsKLSAgICBnbEF0dGFj
aFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVyKTsKLSAgICBnbExpbmtQcm9ncmFtKHBy
b2dyYW1JRCk7CisgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0ZXhT
aGFkZXIpOworICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRT
aGFkZXIpOworICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0ocHJvZ3JhbUlEKTsKIAotICAgIG1f
dmVydGV4QXR0cmliID0gZ2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3ZlcnRleCIp
OworICAgIG1fdmVydGV4QXR0cmliID0gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9n
cmFtSUQsICJhX3ZlcnRleCIpOwogCiAgICAgbV9pZCA9IHByb2dyYW1JRDsKICAgICBtX3ZlcnRl
eFNoYWRlciA9IHZlcnRleFNoYWRlcjsKICAgICBtX2ZyYWdtZW50U2hhZGVyID0gZnJhZ21lbnRT
aGFkZXI7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldFVuaWZvcm1M
b2NhdGlvbihHTGludCAmdmFyaWFibGUsIGNvbnN0IGNoYXIqIG5hbWUpCit2b2lkIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtOjpnZXRVbmlmb3JtTG9jYXRpb24oR0MzRGludCAmdmFyaWFibGUs
IGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgdmFyaWFibGUgPSBnbEdldFVuaWZvcm1Mb2NhdGlv
bihtX2lkLCBuYW1lKTsKKyAgICB2YXJpYWJsZSA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0
aW9uKG1faWQsIG5hbWUpOwogICAgIEFTU0VSVCh2YXJpYWJsZSA+PSAwKTsKIH0KIAogVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpCiB7Ci0g
ICAgR0x1aW50IHByb2dyYW1JRCA9IG1faWQ7CisgICAgUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
SUQgPSBtX2lkOwogICAgIGlmICghcHJvZ3JhbUlEKQogICAgICAgICByZXR1cm47CiAKLSAgICBn
bERldGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fdmVydGV4U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNo
YWRlcihtX3ZlcnRleFNoYWRlcik7Ci0gICAgZ2xEZXRhY2hTaGFkZXIocHJvZ3JhbUlELCBtX2Zy
YWdtZW50U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVyKTsKLSAg
ICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbUlEKTsKKyAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRl
cihwcm9ncmFtSUQsIG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRl
cihtX3ZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIocHJvZ3JhbUlE
LCBtX2ZyYWdtZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihtX2ZyYWdt
ZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbUlEKTsKIH0K
IAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU2ltcGxlKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNo
YWRlclNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUpCitUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291
cmNlU2ltcGxlKQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAgZ2V0VW5pZm9ybUxv
Y2F0aW9uKG1fZmxpcExvY2F0aW9uLCAidV9mbGlwIik7CkBAIC0zMDQsMTYgKzI5NiwxNiBAQCBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1TaW1wbGUoKQogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlMb2NhdGlvbiwgInVf
b3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcigpCi0gICAgOiBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2VTb2xpZENvbG9yLCBmcmFnbWVudFNoYWRl
clNvdXJjZVNvbGlkQ29sb3IpCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcihHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCkKKyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRl
eFNoYWRlclNvdXJjZVNvbGlkQ29sb3IsIGZyYWdtZW50U2hhZGVyU291cmNlU29saWRDb2xvcikK
IHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21h
dHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9jb2xv
ckxvY2F0aW9uLCAidV9jb2xvciIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJl
Y3RTaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgpCi0gICAgOiBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZyYWdt
ZW50U2hhZGVyU291cmNlUmVjdFNpbXBsZSkKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVj
dFNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0KQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4
dCwgdmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RTaW1w
bGUpCiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24o
bV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7CkBAIC0zMjMsOCArMzE1LDggQEAgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVJlY3RTaW1wbGUoKQogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlMb2NhdGlvbiwg
InVfb3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRN
YXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCkKLSAgICA6IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNr
LCBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrKQorVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1PcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5
QW5kTWFzayhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICA6IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrLCBm
cmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrKQogewogICAgIGluaXRpYWxpemVQcm9n
cmFtKCk7CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJp
eCIpOwpAQCAtMzM0LDggKzMyNiw4IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0
eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hCiAgICAgZ2V0
VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7CiB9CiAKLVRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaygpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRTaGFk
ZXJTb3VyY2VSZWN0T3BhY2l0eUFuZE1hc2spCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJl
Y3RPcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFu
ZE1hc2soR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzaywgZnJh
Z21lbnRTaGFkZXJTb3VyY2VSZWN0T3BhY2l0eUFuZE1hc2spCiB7CiAgICAgaW5pdGlhbGl6ZVBy
b2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0
cml4Iik7CkBAIC0zNDUsOCArMzM3LDggQEAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0
T3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWMKICAgICBn
ZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRpb24sICJ1X29wYWNpdHkiKTsKIH0KIAot
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OlRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKCkKLSAgICA6IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3Vy
Y2VBbnRpYWxpYXNpbmdOb01hc2spCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlh
c2luZ05vTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2so
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291
cmNlQW50aWFsaWFzaW5nTm9NYXNrKQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAg
Z2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwpAQCAtMzU2
LDkgKzM0OCw5IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNr
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhCiAgICAgZ2V0VW5pZm9ybUxvY2F0
aW9uKG1fZmxpcExvY2F0aW9uLCAidV9mbGlwIik7CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpCitUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKIHsKLSAgICBBU1NFUlQoaW5pdGlhbGl6
ZU9wZW5HTFNoaW1zKCkpOwogfQogCiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6flRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkKQEAgLTM3MywxOCArMzY1LDE5IEBAIFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKQogCiBTdGFuZGFy
ZEZpbHRlclByb2dyYW06On5TdGFuZGFyZEZpbHRlclByb2dyYW0oKQogewotICAgIGdsRGV0YWNo
U2hhZGVyKG1faWQsIG1fdmVydGV4U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRlcihtX3ZlcnRl
eFNoYWRlcik7Ci0gICAgZ2xEZXRhY2hTaGFkZXIobV9pZCwgbV9mcmFnbWVudFNoYWRlcik7Ci0g
ICAgZ2xEZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7Ci0gICAgZ2xEZWxldGVQcm9ncmFt
KG1faWQpOworICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG1faWQsIG1fdmVydGV4U2hhZGVy
KTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7CisgICAgbV9j
b250ZXh0LT5kZXRhY2hTaGFkZXIobV9pZCwgbV9mcmFnbWVudFNoYWRlcik7CisgICAgbV9jb250
ZXh0LT5kZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5kZWxl
dGVQcm9ncmFtKG1faWQpOwogfQogCi1TdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmls
dGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQg
cGFzcykKLSAgICA6IG1faWQoMCkKK1N0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0
ZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBGaWx0ZXJPcGVyYXRpb246Ok9w
ZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKKyAgICA6IG1fY29udGV4dChjb250ZXh0
KQorICAgICwgbV9pZCgwKQogewogICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSA9
Ci0gICAgICAgICAgICBWRVJURVhfU0hBREVSKAorICAgICAgICAgICAgU1RSSU5HSUZZKAogICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwogICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZSB2ZWM0IGFfdGV4Q29vcmQ7CiAgICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2
ZWMyIHZfdGV4Q29vcmQ7CkBAIC0zOTYsOCArMzg5LDcgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFt
OjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5
cGUKICAgICAgICAgICAgICk7CiAKICNkZWZpbmUgU1RBTkRBUkRfRklMVEVSKHguLi4pIFwKLSAg
ICAgICAgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlNcCi0gICAgICAgIE9FUzJfRlJBR01FTlRf
U0hBREVSX0RFRkFVTFRfUFJFQ0lTSU9OXAorICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxv
YXQ7XG4iXAogICAgICAgICAidmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7XG4iXAogICAg
ICAgICAidW5pZm9ybSBoaWdocCBmbG9hdCB1X2Ftb3VudDtcbiJcCiAgICAgICAgICJ1bmlmb3Jt
IHNhbXBsZXIyRCB1X3RleHR1cmU7XG4iXApAQCAtNDA4LDkgKzQwMCw5IEBAIFN0YW5kYXJkRmls
dGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0
aW9uVHlwZSB0eXBlCiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkdSQVlTQ0FMRToKICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVEFOREFSRF9G
SUxURVIoCi0gICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQorICAg
ICAgICAgICAgdmVjNCBzaGFkZSh2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGxvd3AgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9hbW91bnQ7CisgICAgICAgICAgICAg
ICAgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9hbW91bnQ7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHZlYzQoKDAuMjEyNiArIDAuNzg3NCAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiAtIDAu
NzE1MiAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcyMiAqIGFtb3VudCkgKiBj
b2xvci5iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjIxMjYgLSAwLjIxMjYgKiBh
bW91bnQpICogY29sb3IuciArICgwLjcxNTIgKyAwLjI4NDggKiBhbW91bnQpICogY29sb3IuZyAr
ICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91bnQpICogY29sb3IuYiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUy
IC0gMC43MTUyICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyICsgMC45Mjc4ICogYW1vdW50
KSAqIGNvbG9yLmIsCkBAIC00MjAsOSArNDEyLDkgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpT
dGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgogICAgICAg
ICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgICAgIGxv
d3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgICAgICB2ZWM0IHNoYWRlKHZl
YzQgY29sb3IpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbG93cCBmbG9hdCBhbW91
bnQgPSAxLjAgLSB1X2Ftb3VudDsKKyAgICAgICAgICAgICAgICBmbG9hdCBhbW91bnQgPSAxLjAg
LSB1X2Ftb3VudDsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNCgoMC4zOTMgKyAwLjYwNyAq
IGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzY5IC0gMC43NjkgKiBhbW91bnQpICogY29sb3IuZyAr
ICgwLjE4OSAtIDAuMTg5ICogYW1vdW50KSAqIGNvbG9yLmIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKDAuMzQ5IC0gMC4zNDkgKiBhbW91bnQpICogY29sb3IuciArICgwLjY4NiArIDAu
MzE0ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xNjggLSAwLjE2OCAqIGFtb3VudCkgKiBjb2xv
ci5iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjI3MiAtIDAuMjcyICogYW1vdW50
KSAqIGNvbG9yLnIgKyAoMC41MzQgLSAwLjUzNCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTMx
ICsgMC44NjkgKiBhbW91bnQpICogY29sb3IuYiwKQEAgLTQzMiw3ICs0MjQsNyBAQCBTdGFuZGFy
ZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9w
ZXJhdGlvblR5cGUgdHlwZQogICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6U0FUVVJBVEU6CiAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklM
VEVSKAotICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKKyAgICAg
ICAgICAgIHZlYzQgc2hhZGUodmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICByZXR1cm4gdmVjNCgoMC4yMTMgKyAwLjc4NyAqIHVfYW1vdW50KSAqIGNvbG9yLnIgKyAo
MC43MTUgLSAwLjcxNSAqIHVfYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVf
YW1vdW50KSAqIGNvbG9yLmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjEzIC0g
MC4yMTMgKiB1X2Ftb3VudCkgKiBjb2xvci5yICsgKDAuNzE1ICsgMC4yODUgKiB1X2Ftb3VudCkg
KiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIgKiB1X2Ftb3VudCkgKiBjb2xvci5iLApAQCAtNDQz
LDExICs0MzUsMTEgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dy
YW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6CiAgICAgICAgIGZyYWdtZW50U2hh
ZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRl
KGxvd3AgdmVjNCBjb2xvcikKKyAgICAgICAgICAgIHZlYzQgc2hhZGUodmVjNCBjb2xvcikKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBoaWdocCBmbG9hdCBwaSA9IDMuMTQxNTkyNjUz
NTg5NzkzMjM4NDY7Ci0gICAgICAgICAgICAgICAgaGlnaHAgZmxvYXQgYyA9IGNvcyh1X2Ftb3Vu
dCAqIHBpIC8gMTgwLjApOwotICAgICAgICAgICAgICAgIGhpZ2hwIGZsb2F0IHMgPSBzaW4odV9h
bW91bnQgKiBwaSAvIDE4MC4wKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBwaSA9IDMuMTQxNTky
NjUzNTg5NzkzMjM4NDY7CisgICAgICAgICAgICAgICAgZmxvYXQgYyA9IGNvcyh1X2Ftb3VudCAq
IHBpIC8gMTgwLjApOworICAgICAgICAgICAgICAgIGZsb2F0IHMgPSBzaW4odV9hbW91bnQgKiBw
aSAvIDE4MC4wKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChjb2xvci5yICogKDAuMjEz
ICsgYyAqIDAuNzg3IC0gcyAqIDAuMjEzKSArIGNvbG9yLmcgKiAoMC43MTUgLSBjICogMC43MTUg
LSBzICogMC43MTUpICsgY29sb3IuYiAqICgwLjA3MiAtIGMgKiAwLjA3MiArIHMgKiAwLjkyOCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuciAqICgwLjIxMyAtIGMgKiAwLjIx
MyArIHMgKiAwLjE0MykgKyBjb2xvci5nICogKDAuNzE1ICsgYyAqIDAuMjg1ICsgcyAqIDAuMTQw
KSArIGNvbG9yLmIgKiAoMC4wNzIgLSBjICogMC4wNzIgLSBzICogMC4yODMpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbG9yLnIgKiAoMC4yMTMgLSBjICogMC4yMTMgLSBzICogMC43
ODcpICsgIGNvbG9yLmcgKiAoMC43MTUgLSBjICogMC43MTUgKyBzICogMC43MTUpICsgY29sb3Iu
YiAqICgwLjA3MiArIGMgKiAwLjkyOCArIHMgKiAwLjA3MiksCkBAIC00NTcsOCArNDQ5LDggQEAg
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0
aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OklOVkVSVDoKICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVEFOREFS
RF9GSUxURVIoCi0gICAgICAgICAgICBsb3dwIGZsb2F0IGludmVydChsb3dwIGZsb2F0IG4pIHsg
cmV0dXJuICgxLjAgLSBuKSAqIHVfYW1vdW50ICsgbiAqICgxLjAgLSB1X2Ftb3VudCk7IH0KLSAg
ICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgICAgICBm
bG9hdCBpbnZlcnQoZmxvYXQgbikgeyByZXR1cm4gKDEuMCAtIG4pICogdV9hbW91bnQgKyBuICog
KDEuMCAtIHVfYW1vdW50KTsgfQorICAgICAgICAgICAgdmVjNCBzaGFkZSh2ZWM0IGNvbG9yKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KGludmVydChjb2xvci5y
KSwgaW52ZXJ0KGNvbG9yLmcpLCBpbnZlcnQoY29sb3IuYiksIGNvbG9yLmEpOwogICAgICAgICAg
ICAgfQpAQCAtNDY2LDcgKzQ1OCw3IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRG
aWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgogICAgICAgICBm
cmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgICAgIGxvd3Ag
dmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgICAgICB2ZWM0IHNoYWRlKHZlYzQg
Y29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3Iu
cmdiICogKDEuMCArIHVfYW1vdW50KSwgY29sb3IuYSk7CiAgICAgICAgICAgICB9CkBAIC00NzQs
OCArNDY2LDggQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0o
RmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgogICAgICAgICBmcmFnbWVudFNoYWRlclNv
dXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgICAgIGxvd3AgZmxvYXQgY29udHJhc3Qo
bG93cCBmbG9hdCBuKSB7IHJldHVybiAobiAtIDAuNSkgKiB1X2Ftb3VudCArIDAuNTsgfQotICAg
ICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKKyAgICAgICAgICAgIGZs
b2F0IGNvbnRyYXN0KGZsb2F0IG4pIHsgcmV0dXJuIChuIC0gMC41KSAqIHVfYW1vdW50ICsgMC41
OyB9CisgICAgICAgICAgICB2ZWM0IHNoYWRlKHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29udHJhc3QoY29sb3IuciksIGNvbnRyYXN0KGNv
bG9yLmcpLCBjb250cmFzdChjb2xvci5iKSwgY29sb3IuYSk7CiAgICAgICAgICAgICB9CkBAIC00
ODMsMjAgKzQ3NSwyMSBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJv
Z3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKICAgICAgICAgZnJhZ21lbnRTaGFk
ZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUo
bG93cCB2ZWM0IGNvbG9yKQorICAgICAgICAgICAgdmVjNCBzaGFkZSh2ZWM0IGNvbG9yKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KGNvbG9yLnIsIGNvbG9yLmcs
IGNvbG9yLmIsIGNvbG9yLmEgKiB1X2Ftb3VudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgotICAgICAg
ICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IEZSQUdNRU5UX1NIQURFUigKKyAgICAgICAgZnJhZ21l
bnRTaGFkZXJTb3VyY2UgPSBTVFJJTkdJRlkoCisgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVt
cCBmbG9hdDsKICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOwogICAg
ICAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzIgdV9ibHVyUmFkaXVzOwogICAgICAgICAgICAgdW5p
Zm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlOwogICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dh
dXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKIAotICAgICAgICAgICAg
bG93cCB2ZWM0IHNhbXBsZUNvbG9yKGZsb2F0IHJhZGl1cykKKyAgICAgICAgICAgIHZlYzQgc2Ft
cGxlQ29sb3IoZmxvYXQgcmFkaXVzKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHZl
YzIgY29vcmQgPSB2X3RleENvb3JkICsgcmFkaXVzICogdV9ibHVyUmFkaXVzOwogICAgICAgICAg
ICAgICAgIHJldHVybiB0ZXh0dXJlMkQodV90ZXh0dXJlLCBjb29yZCkgKiBmbG9hdChjb29yZC54
ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOwpA
QCAtNTIzLDIwICs1MTYsMjEgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRl
clByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgc3dp
dGNoIChwYXNzKSB7CiAgICAgICAgIGNhc2UgMDogewogICAgICAgICAgICAgLy8gRmlyc3QgcGFz
czogaG9yaXpvbnRhbCBhbHBoYSBibHVyLgotICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UgPSBGUkFHTUVOVF9TSEFERVIoCisgICAgICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9
IFNUUklOR0lGWSgKKyAgICAgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAg
ICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKICAgICAgICAgICAg
ICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9zaGFkb3dCbHVyUmFkaXVzOwogICAgICAgICAgICAg
ICAgIHVuaWZvcm0gbG93cCB2ZWMyIHVfc2hhZG93T2Zmc2V0OwogICAgICAgICAgICAgICAgIHVu
aWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTsKICAgICAgICAgICAgICAgICB1bmlmb3JtIGZsb2F0
IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOwogCi0gICAgICAg
ICAgICAgICAgbG93cCBmbG9hdCBzYW1wbGVBbHBoYShmbG9hdCByYWRpdXMpCisgICAgICAgICAg
ICAgICAgZmxvYXQgc2FtcGxlQWxwaGEoZmxvYXQgcmFkaXVzKQogICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgLSB1X3NoYWRvd09m
ZnNldCArIHZlYzIocmFkaXVzICogdV9zaGFkb3dCbHVyUmFkaXVzLCAwLik7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0ZXh0dXJlMkQodV90ZXh0dXJlLCBjb29yZCkuYSAqIGZsb2F0KGNv
b3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAx
Lik7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgbG93cCBmbG9hdCBzaGFk
b3dCbHVySG9yaXpvbnRhbCgpCisgICAgICAgICAgICAgICAgZmxvYXQgc2hhZG93Qmx1ckhvcml6
b250YWwoKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgdG90
YWwgPSBzYW1wbGVBbHBoYSgwKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07CiAgICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkr
KykgewpAQCAtNTU2LDcgKzU1MCw4IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRG
aWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAg
ICAgICB9CiAgICAgICAgIGNhc2UgMTogewogICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHZl
cnRpY2FsIGFscGhhIGJsdXIgYW5kIGNvbXBvc2l0ZSB3aXRoIG9yaWdpbi4KLSAgICAgICAgICAg
IGZyYWdtZW50U2hhZGVyU291cmNlID0gRlJBR01FTlRfU0hBREVSKAorICAgICAgICAgICAgZnJh
Z21lbnRTaGFkZXJTb3VyY2UgPSBTVFJJTkdJRlkoCisgICAgICAgICAgICAgICAgcHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4
Q29vcmQ7CiAgICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfc2hhZG93Qmx1clJh
ZGl1czsKICAgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjNCB1X3NoYWRvd0NvbG9yOwpA
QCAtNTY0LDEzICs1NTksMTMgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRl
clByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgICAg
ICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1X2NvbnRlbnRUZXh0dXJlOwogICAgICAgICAgICAgICAg
IHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURU
SF07CiAKLSAgICAgICAgICAgICAgICBsb3dwIGZsb2F0IHNhbXBsZUFscGhhKGZsb2F0IHIpCisg
ICAgICAgICAgICAgICAgZmxvYXQgc2FtcGxlQWxwaGEoZmxvYXQgcikKICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgIHZlYzIgY29vcmQgPSB2X3RleENvb3JkICsgdmVjMigw
LiwgciAqIHVfc2hhZG93Qmx1clJhZGl1cyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
ZXh0dXJlMkQodV90ZXh0dXJlLCBjb29yZCkuYSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29y
ZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7CiAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgbG93cCBmbG9hdCBzaGFkb3dCbHVyVmVydGljYWwoKQor
ICAgICAgICAgICAgICAgIGZsb2F0IHNoYWRvd0JsdXJWZXJ0aWNhbCgpCiAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICBmbG9hdCB0b3RhbCA9IHNhbXBsZUFscGhhKDApICog
dV9nYXVzc2lhbktlcm5lbFswXTsKICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7
IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgaSsrKSB7CkBAIC01ODEsNyArNTc2LDcg
QEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRv
dGFsOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGxvd3AgdmVjNCBzb3Vy
Y2VPdmVyKGxvd3AgdmVjNCBzb3VyY2UsIGxvd3AgdmVjNCBkZXN0aW5hdGlvbikKKyAgICAgICAg
ICAgICAgICB2ZWM0IHNvdXJjZU92ZXIodmVjNCBzb3VyY2UsIHZlYzQgZGVzdGluYXRpb24pCiAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAvLyBDb21wb3NpdGUgdGhlIHNo
YWRvdyB3aXRoIHRoZSBvcmlnaW5hbCB0ZXh0dXJlLgogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc291cmNlICsgZGVzdGluYXRpb24gKiAoMS4gLSBzb3VyY2UuYSk7CkBAIC02MDIsMjYgKzU5
NywyNSBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0
ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogCiAgICAgaWYgKCFmcmFnbWVudFNoYWRl
clNvdXJjZSkKICAgICAgICAgcmV0dXJuOwotICAgIEdMdWludCB2ZXJ0ZXhTaGFkZXIgPSBnbENy
ZWF0ZVNoYWRlcihHTF9WRVJURVhfU0hBREVSKTsKLSAgICBHTHVpbnQgZnJhZ21lbnRTaGFkZXIg
PSBnbENyZWF0ZVNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIpOwotICAgIGdsU2hhZGVyU291cmNl
KHZlcnRleFNoYWRlciwgMSwgJnZlcnRleFNoYWRlclNvdXJjZSwgMCk7Ci0gICAgZ2xTaGFkZXJT
b3VyY2UoZnJhZ21lbnRTaGFkZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJjZSwgMCk7Ci0gICAg
R0x1aW50IHByb2dyYW1JRCA9IGdsQ3JlYXRlUHJvZ3JhbSgpOwotICAgIGdsQ29tcGlsZVNoYWRl
cih2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsQ29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Cisg
ICAgUGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRl
cihHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7CisgICAgUGxhdGZvcm0zRE9iamVj
dCBmcmFnbWVudFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFHTUVOVF9TSEFERVIpOworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKHZlcnRl
eFNoYWRlciwgdmVydGV4U2hhZGVyU291cmNlKTsKKyAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJj
ZShmcmFnbWVudFNoYWRlciwgZnJhZ21lbnRTaGFkZXJTb3VyY2UpOworICAgIFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbUlEID0gbV9jb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7CisgICAgbV9jb250
ZXh0LT5jb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5jb21waWxl
U2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgR0xjaGFyIGxv
Z1sxMDBdOwotICAgIEdMaW50IGxlbjsKLSAgICBnbEdldFNoYWRlckluZm9Mb2coZnJhZ21lbnRT
aGFkZXIsIDEwMCwgJmxlbiwgbG9nKTsKKyAgICBTdHJpbmcgbG9nOworICAgIG1fY29udGV4dC0+
Z2V0U2hhZGVySW5mb0xvZyhmcmFnbWVudFNoYWRlcik7CiAgICAgV1RGTG9nKCZMb2dDb21wb3Np
dGluZywgIiVzXG4iLCBsb2cpOwogI2VuZGlmCi0gICAgZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlE
LCB2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRT
aGFkZXIpOwotICAgIGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlEKTsKKyAgICBtX2NvbnRleHQtPmF0
dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5hdHRh
Y2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5saW5r
UHJvZ3JhbShwcm9ncmFtSUQpOwogCi0gICAgbV92ZXJ0ZXhBdHRyaWIgPSBnbEdldEF0dHJpYkxv
Y2F0aW9uKHByb2dyYW1JRCwgImFfdmVydGV4Iik7Ci0gICAgbV90ZXhDb29yZEF0dHJpYiA9IGds
R2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiYV90ZXhDb29yZCIpOwotICAgIG1fdGV4dHVy
ZVVuaWZvcm1Mb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfdGV4
dHVyZSIpOworICAgIG1fdmVydGV4QXR0cmliID0gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlv
bihwcm9ncmFtSUQsICJhX3ZlcnRleCIpOworICAgIG1fdGV4Q29vcmRBdHRyaWIgPSBtX2NvbnRl
eHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdGV4Q29vcmQiKTsKKyAgICBtX3Rl
eHR1cmVVbmlmb3JtTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9n
cmFtSUQsICJ1X3RleHR1cmUiKTsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6R1JBWVNDQUxFOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToK
QEAgLTYzMSwyMSArNjI1LDIxIEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0
ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNP
TlRSQVNUOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgotICAgICAgICBtX3Vu
aWZvcm1Mb2NhdGlvbnMuYW1vdW50ID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAi
dV9hbW91bnQiKTsKKyAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCA9IG1fY29udGV4
dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfYW1vdW50Iik7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgotICAgICAgICBtX3VuaWZvcm1M
b2NhdGlvbnMuYmx1ci5yYWRpdXMgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1
X2JsdXJSYWRpdXMiKTsKLSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmJsdXIuZ2F1c3NpYW5L
ZXJuZWwgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVs
Iik7CisgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLnJhZGl1cyA9IG1fY29udGV4dC0+
Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfYmx1clJhZGl1cyIpOworICAgICAgICBt
X3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktlcm5lbCA9IG1fY29udGV4dC0+Z2V0VW5p
Zm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfZ2F1c3NpYW5LZXJuZWwiKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgotICAgICAgICBtX3Vu
aWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtSUQsICJ1X3NoYWRvd0JsdXJSYWRpdXMiKTsKLSAgICAgICAgbV91bmlmb3JtTG9jYXRp
b25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1J
RCwgInVfZ2F1c3NpYW5LZXJuZWwiKTsKKyAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRv
dy5ibHVyUmFkaXVzID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAi
dV9zaGFkb3dCbHVyUmFkaXVzIik7CisgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cu
Z2F1c3NpYW5LZXJuZWwgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQs
ICJ1X2dhdXNzaWFuS2VybmVsIik7CiAgICAgICAgIGlmICghcGFzcykKLSAgICAgICAgICAgIG1f
dW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cub2Zmc2V0ID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJv
Z3JhbUlELCAidV9zaGFkb3dPZmZzZXQiKTsKKyAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9u
cy5zaGFkb3cub2Zmc2V0ID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlE
LCAidV9zaGFkb3dPZmZzZXQiKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBXZSBv
bmx5IG5lZWQgdGhlIGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0dXJlIGluIHRoZSBzZWNvbmQg
cGFzcywgdGhlIGZpcnN0IHBhc3MgaXMgb25seSBhIGhvcml6b250YWwgYWxwaGEgYmx1ci4KLSAg
ICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29sb3IgPSBnbEdldFVuaWZvcm1M
b2NhdGlvbihwcm9ncmFtSUQsICJ1X3NoYWRvd0NvbG9yIik7Ci0gICAgICAgICAgICBtX3VuaWZv
cm1Mb2NhdGlvbnMuc2hhZG93LmNvbnRlbnRUZXh0dXJlID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24o
cHJvZ3JhbUlELCAidV9jb250ZW50VGV4dHVyZSIpOworICAgICAgICAgICAgbV91bmlmb3JtTG9j
YXRpb25zLnNoYWRvdy5jb2xvciA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dy
YW1JRCwgInVfc2hhZG93Q29sb3IiKTsKKyAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5z
aGFkb3cuY29udGVudFRleHR1cmUgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9n
cmFtSUQsICJ1X2NvbnRlbnRUZXh0dXJlIik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKQEAgLTY1Niw5ICs2NTAsOSBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0
YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQog
ICAgIG1fZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNoYWRlcjsKIH0KIAotUGFzc1JlZlB0cjxT
dGFuZGFyZEZpbHRlclByb2dyYW0+IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKEZpbHRl
ck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQorUGFzc1JlZlB0
cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUg
dHlwZSwgdW5zaWduZWQgcGFzcykKIHsKLSAgICBSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFt
PiBwcm9ncmFtID0gYWRvcHRSZWYobmV3IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbSh0eXBlLCBwYXNz
KSk7CisgICAgUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGFkb3B0UmVm
KG5ldyBTdGFuZGFyZEZpbHRlclByb2dyYW0oY29udGV4dCwgdHlwZSwgcGFzcykpOwogICAgIGlm
ICghcHJvZ3JhbS0+bV9pZCkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTY5NCwyMSArNjg4LDIx
IEBAIHN0YXRpYyBmbG9hdCogZ2F1c3NpYW5LZXJuZWwoKQogICAgIHJldHVybiBrZXJuZWw7CiB9
CiAKLXZvaWQgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJh
dGlvbiYgb3BlcmF0aW9uLCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRTaXplJiBzaXplLCBHTHVp
bnQgY29udGVudFRleHR1cmUpCit2b2lkIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6cHJlcGFyZShj
b25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwgdW5zaWduZWQgcGFzcywgY29uc3QgSW50
U2l6ZSYgc2l6ZSwgR0MzRHVpbnQgY29udGVudFRleHR1cmUpCiB7Ci0gICAgZ2xVc2VQcm9ncmFt
KG1faWQpOworICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShtX2lkKTsKICAgICBzd2l0Y2ggKG9w
ZXJhdGlvbi5nZXRPcGVyYXRpb25UeXBlKCkpIHsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
R1JBWVNDQUxFOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9S
T1RBVEU6Ci0gICAgICAgIGdsVW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0
YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRp
b24pLmFtb3VudCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9j
YXRpb25zLmFtb3VudCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklH
SFRORVNTOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgZ2xVbmlmb3JtMWYobV91bmlmb3JtTG9j
YXRpb25zLmFtb3VudCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZp
bHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOworICAgICAgICBtX2NvbnRleHQt
PnVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuYW1vdW50LCBzdGF0aWNfY2FzdDxjb25zdCBC
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7CiAg
ICAgICAgIGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJsdXIgPSBzdGF0aWNfY2FzdDxjb25z
dCBCbHVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKTsKQEAgLTcyMCw4ICs3MTQsOCBAQCB2
b2lkIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6cHJlcGFyZShjb25zdCBGaWx0ZXJPcGVyYXRpb24m
IG9wZXJhdGlvbiwgdW5zaWduZWQgcAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByYWRpdXMu
c2V0V2lkdGgoZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyLnN0ZERldmlhdGlvbigpLCBzaXplLndp
ZHRoKCkpIC8gc2l6ZS53aWR0aCgpKTsKIAotICAgICAgICBnbFVuaWZvcm0yZihtX3VuaWZvcm1M
b2NhdGlvbnMuYmx1ci5yYWRpdXMsIHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpOwot
ICAgICAgICBnbFVuaWZvcm0xZnYobV91bmlmb3JtTG9jYXRpb25zLmJsdXIuZ2F1c3NpYW5LZXJu
ZWwsIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsKKyAgICAg
ICAgbV9jb250ZXh0LT51bmlmb3JtMmYobV91bmlmb3JtTG9jYXRpb25zLmJsdXIucmFkaXVzLCBy
YWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT51bmlm
b3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9L
RVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKQEAgLTcyOSwyMCAr
NzIzLDIwIEBAIHZvaWQgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpwcmVwYXJlKGNvbnN0IEZpbHRl
ck9wZXJhdGlvbiYgb3BlcmF0aW9uLCB1bnNpZ25lZCBwCiAgICAgICAgIHN3aXRjaCAocGFzcykg
ewogICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiB2ZXJ0aWNhbCBh
bHBoYSBibHVyLgotICAgICAgICAgICAgZ2xVbmlmb3JtMmYobV91bmlmb3JtTG9jYXRpb25zLnNo
YWRvdy5vZmZzZXQsIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigpLngoKSkgLyBmbG9hdChzaXplLndp
ZHRoKCkpLCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS55KCkpIC8gZmxvYXQoc2l6ZS5oZWlnaHQo
KSkpOwotICAgICAgICAgICAgZ2xVbmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5i
bHVyUmFkaXVzLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLndpZHRoKCkpKTsK
LSAgICAgICAgICAgIGdsVW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNz
aWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7
CisgICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hh
ZG93Lm9mZnNldCwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueCgpKSAvIGZsb2F0KHNpemUud2lk
dGgoKSksIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigpLnkoKSkgLyBmbG9hdChzaXplLmhlaWdodCgp
KSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMu
c2hhZG93LmJsdXJSYWRpdXMsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUud2lk
dGgoKSkpOworICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0
aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwsIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRILCBn
YXVzc2lhbktlcm5lbCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDE6CiAg
ICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogd2UgbmVlZCB0aGUgc2hhZG93IGNvbG9yIGFuZCB0
aGUgY29udGVudCB0ZXh0dXJlIGZvciBjb21wb3NpdGluZy4KLSAgICAgICAgICAgIGdsVW5pZm9y
bTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1cywgc2hhZG93LnN0ZERldmlh
dGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICAgICAgZ2xVbmlmb3JtMWZ2
KG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwsIEdBVVNTSUFOX0tFUk5F
TF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsKLSAgICAgICAgICAgIGdsQWN0aXZlVGV4
dHVyZShHTF9URVhUVVJFMSk7Ci0gICAgICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIGNvbnRlbnRUZXh0dXJlKTsKLSAgICAgICAgICAgIGdsVW5pZm9ybTFpKG1fdW5pZm9ybUxv
Y2F0aW9ucy5zaGFkb3cuY29udGVudFRleHR1cmUsIDEpOworICAgICAgICAgICAgbV9jb250ZXh0
LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzLCBzaGFkb3cu
c3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLmhlaWdodCgpKSk7CisgICAgICAgICAgICBtX2Nv
bnRleHQtPnVuaWZvcm0xZnYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5nYXVzc2lhbktlcm5l
bCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOworICAgICAg
ICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
MSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBjb250ZW50VGV4dHVyZSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPnVu
aWZvcm0xaShtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbnRlbnRUZXh0dXJlLCAxKTsKICAg
ICAgICAgICAgIGZsb2F0IHIsIGcsIGIsIGE7CiAgICAgICAgICAgICBzaGFkb3cuY29sb3IoKS5n
ZXRSR0JBKHIsIGcsIGIsIGEpOwotICAgICAgICAgICAgZ2xVbmlmb3JtNGYobV91bmlmb3JtTG9j
YXRpb25zLnNoYWRvdy5jb2xvciwgciwgZywgYiwgYSk7CisgICAgICAgICAgICBtX2NvbnRleHQt
PnVuaWZvcm00ZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbG9yLCByLCBnLCBiLCBhKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtNzU5LDcg
Kzc1Myw3IEBAIFBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyRm9yRmlsdGVyCiAgICAgaW50IGtleSA9IGludCh0eXBl
KSB8IChwYXNzIDw8IDE2KTsKICAgICBGaWx0ZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9m
aWx0ZXJNYXAuZmluZChrZXkpOwogICAgIGlmIChpdGVyYXRvciA9PSBtX2ZpbHRlck1hcC5lbmQo
KSkgewotICAgICAgICBwcm9ncmFtID0gU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpjcmVhdGUodHlw
ZSwgcGFzcyk7CisgICAgICAgIHByb2dyYW0gPSBTdGFuZGFyZEZpbHRlclByb2dyYW06OmNyZWF0
ZShtX2NvbnRleHQsIHR5cGUsIHBhc3MpOwogICAgICAgICBpZiAoIXByb2dyYW0pCiAgICAgICAg
ICAgICByZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaApp
bmRleCA3ODU0OThlN2Y4YTM2MjdlYWIxMDY4NmJhMzZiZmZiM2UxMDkxNDU2Li5iZTQ1YzVkYWZl
ZmM2N2FlYTIxZmY4ZDViM2VjZTc0YmM2NDA1MWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuaApAQCAtMjQsOSArMjQsOSBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQogCiAjaW5jbHVkZSAiRmxvYXRRdWFk
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgi
Ci0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisj
aW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRy
aXguaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CkBAIC00NCwzOSArNDQsNDAgQEAgY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI7
CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIDogcHVibGljIFJlZkNvdW50ZWQ8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHsKIHB1YmxpYzoKLSAgICBHTHVpbnQgaWQoKSB7
IHJldHVybiBtX2lkOyB9Ci0gICAgR0x1aW50IHZlcnRleEF0dHJpYigpIHsgcmV0dXJuIG1fdmVy
dGV4QXR0cmliOyB9CisgICAgUGxhdGZvcm0zRE9iamVjdCBpZCgpIHsgcmV0dXJuIG1faWQ7IH0K
KyAgICBHQzNEdWludCB2ZXJ0ZXhBdHRyaWIoKSB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQog
Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVy
U291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSk7CisgICAgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBjaGFyKiB2ZXJ0ZXhT
aGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKTsKICAgICB2aXJ0
dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpOwogCiAgICAgdmlydHVhbCB2b2lkIHBy
ZXBhcmUoZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSopIHsgfQotICAgIEdMaW50
IG1hdHJpeExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhMb2NhdGlvbjsgfQotICAg
IEdMaW50IGZsaXBMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmxpcExvY2F0aW9uOyB9Ci0g
ICAgR0xpbnQgdGV4dHVyZVNpemVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVNp
emVMb2NhdGlvbjsgfQotICAgIEdMaW50IHNvdXJjZVRleHR1cmVMb2NhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOyB9Ci0gICAgR0xpbnQgbWFza1RleHR1cmVM
b2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFza1RleHR1cmVMb2NhdGlvbjsgfQotICAgIEdM
aW50IG9wYWNpdHlMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eUxvY2F0aW9uOyB9
CisgICAgR0MzRGludCBtYXRyaXhMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4TG9j
YXRpb247IH0KKyAgICBHQzNEaW50IGZsaXBMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmxp
cExvY2F0aW9uOyB9CisgICAgR0MzRGludCB0ZXh0dXJlU2l6ZUxvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV90ZXh0dXJlU2l6ZUxvY2F0aW9uOyB9CisgICAgR0MzRGludCBzb3VyY2VUZXh0dXJl
TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVRleHR1cmVMb2NhdGlvbjsgfQorICAg
IEdDM0RpbnQgbWFza1RleHR1cmVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFza1RleHR1
cmVMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgb3BhY2l0eUxvY2F0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9vcGFjaXR5TG9jYXRpb247IH0KIAotICAgIHN0YXRpYyBib29sIGlzVmFsaWRVbmlmb3Jt
TG9jYXRpb24oR0xpbnQgbG9jYXRpb24pIHsgcmV0dXJuIGxvY2F0aW9uID49IDA7IH0KKyAgICBz
dGF0aWMgYm9vbCBpc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKEdDM0RpbnQgbG9jYXRpb24pIHsgcmV0
dXJuIGxvY2F0aW9uID49IDA7IH0KIAogcHJvdGVjdGVkOgotICAgIHZvaWQgZ2V0VW5pZm9ybUxv
Y2F0aW9uKEdMaW50JiB2YXIsIGNvbnN0IGNoYXIqIG5hbWUpOworICAgIHZvaWQgZ2V0VW5pZm9y
bUxvY2F0aW9uKEdDM0RpbnQmIHZhciwgY29uc3QgY2hhciogbmFtZSk7CiAgICAgdm9pZCBpbml0
aWFsaXplUHJvZ3JhbSgpOwogICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKCkgeyB9CiAgICAg
Y29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhT
aGFkZXJTb3VyY2UuZGF0YSgpOyB9CiAgICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UoKSBjb25zdCB7IHJldHVybiBtX2ZyYWdtZW50U2hhZGVyU291cmNlLmRhdGEoKTsgfQogCi0g
ICAgR0x1aW50IG1faWQ7Ci0gICAgR0x1aW50IG1fdmVydGV4QXR0cmliOwotICAgIEdMdWludCBt
X3ZlcnRleFNoYWRlcjsKLSAgICBHTHVpbnQgbV9mcmFnbWVudFNoYWRlcjsKLSAgICBHTGludCBt
X21hdHJpeExvY2F0aW9uOwotICAgIEdMaW50IG1fZmxpcExvY2F0aW9uOwotICAgIEdMaW50IG1f
dGV4dHVyZVNpemVMb2NhdGlvbjsKLSAgICBHTGludCBtX3NvdXJjZVRleHR1cmVMb2NhdGlvbjsK
LSAgICBHTGludCBtX29wYWNpdHlMb2NhdGlvbjsKLSAgICBHTGludCBtX21hc2tUZXh0dXJlTG9j
YXRpb247CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBQbGF0Zm9ybTNE
T2JqZWN0IG1faWQ7CisgICAgR0MzRHVpbnQgbV92ZXJ0ZXhBdHRyaWI7CisgICAgUGxhdGZvcm0z
RE9iamVjdCBtX3ZlcnRleFNoYWRlcjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZnJhZ21lbnRT
aGFkZXI7CisgICAgR0MzRGludCBtX21hdHJpeExvY2F0aW9uOworICAgIEdDM0RpbnQgbV9mbGlw
TG9jYXRpb247CisgICAgR0MzRGludCBtX3RleHR1cmVTaXplTG9jYXRpb247CisgICAgR0MzRGlu
dCBtX3NvdXJjZVRleHR1cmVMb2NhdGlvbjsKKyAgICBHQzNEaW50IG1fb3BhY2l0eUxvY2F0aW9u
OworICAgIEdDM0RpbnQgbV9tYXNrVGV4dHVyZUxvY2F0aW9uOwogCiBwcml2YXRlOgogICAgIENT
dHJpbmcgbV92ZXJ0ZXhTaGFkZXJTb3VyY2U7CkBAIC04NywzMyArODgsMzYgQEAgcHJpdmF0ZToK
IGNsYXNzIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0YW5kYXJk
RmlsdGVyUHJvZ3JhbT4gewogcHVibGljOgogICAgIHZpcnR1YWwgflN0YW5kYXJkRmlsdGVyUHJv
Z3JhbSgpOwotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYs
IHVuc2lnbmVkIHBhc3MsIGNvbnN0IEludFNpemUmLCBHTHVpbnQgY29udGVudFRleHR1cmUpOwot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gY3JlYXRlKEZpbHRl
ck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgcGFzcyk7Ci0gICAgR0x1aW50IHZl
cnRleEF0dHJpYigpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4QXR0cmliOyB9Ci0gICAgR0x1aW50
IHRleENvb3JkQXR0cmliKCkgY29uc3QgeyByZXR1cm4gbV90ZXhDb29yZEF0dHJpYjsgfQotICAg
IEdMdWludCB0ZXh0dXJlVW5pZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVVuaWZvcm1M
b2NhdGlvbjsgfQorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlv
biYsIHVuc2lnbmVkIHBhc3MsIGNvbnN0IEludFNpemUmLCBHQzNEdWludCBjb250ZW50VGV4dHVy
ZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBjcmVhdGUo
R3JhcGhpY3NDb250ZXh0M0QqLCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIHVuc2ln
bmVkIHBhc3MpOworICAgIEdDM0R1aW50IHZlcnRleEF0dHJpYigpIGNvbnN0IHsgcmV0dXJuIG1f
dmVydGV4QXR0cmliOyB9CisgICAgR0MzRHVpbnQgdGV4Q29vcmRBdHRyaWIoKSBjb25zdCB7IHJl
dHVybiBtX3RleENvb3JkQXR0cmliOyB9CisgICAgR0MzRHVpbnQgdGV4dHVyZVVuaWZvcm0oKSBj
b25zdCB7IHJldHVybiBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb247IH0KK3Byb3RlY3RlZDoKKyAg
ICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwogcHJpdmF0ZToKLSAgICBTdGFuZGFyZEZp
bHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBwYXNz
KTsKLSAgICBHTHVpbnQgbV9pZDsKLSAgICBHTHVpbnQgbV92ZXJ0ZXhTaGFkZXI7Ci0gICAgR0x1
aW50IG1fZnJhZ21lbnRTaGFkZXI7Ci0gICAgR0x1aW50IG1fdmVydGV4QXR0cmliOwotICAgIEdM
dWludCBtX3RleENvb3JkQXR0cmliOwotICAgIEdMdWludCBtX3RleHR1cmVVbmlmb3JtTG9jYXRp
b247CisgICAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKCk7CisgICAgU3RhbmRhcmRGaWx0ZXJQcm9n
cmFtKEdyYXBoaWNzQ29udGV4dDNEKiwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCB1
bnNpZ25lZCBwYXNzKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1faWQ7CisgICAgUGxhdGZvcm0z
RE9iamVjdCBtX3ZlcnRleFNoYWRlcjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZnJhZ21lbnRT
aGFkZXI7CisgICAgR0MzRHVpbnQgbV92ZXJ0ZXhBdHRyaWI7CisgICAgR0MzRHVpbnQgbV90ZXhD
b29yZEF0dHJpYjsKKyAgICBHQzNEdWludCBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb247CiAgICAg
dW5pb24gewotICAgICAgICBHTHVpbnQgYW1vdW50OworICAgICAgICBHQzNEdWludCBhbW91bnQ7
CiAKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIEdMdWludCByYWRpdXM7Ci0gICAgICAg
ICAgICBHTHVpbnQgZ2F1c3NpYW5LZXJuZWw7CisgICAgICAgICAgICBHQzNEdWludCByYWRpdXM7
CisgICAgICAgICAgICBHQzNEdWludCBnYXVzc2lhbktlcm5lbDsKICAgICAgICAgfSBibHVyOwog
CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBHTHVpbnQgYmx1clJhZGl1czsKLSAgICAg
ICAgICAgIEdMdWludCBjb2xvcjsKLSAgICAgICAgICAgIEdMdWludCBvZmZzZXQ7Ci0gICAgICAg
ICAgICBHTHVpbnQgY29udGVudFRleHR1cmU7Ci0gICAgICAgICAgICBHTHVpbnQgZ2F1c3NpYW5L
ZXJuZWw7CisgICAgICAgICAgICBHQzNEdWludCBibHVyUmFkaXVzOworICAgICAgICAgICAgR0Mz
RHVpbnQgY29sb3I7CisgICAgICAgICAgICBHQzNEdWludCBvZmZzZXQ7CisgICAgICAgICAgICBH
QzNEdWludCBjb250ZW50VGV4dHVyZTsKKyAgICAgICAgICAgIEdDM0R1aW50IGdhdXNzaWFuS2Vy
bmVsOwogICAgICAgICB9IHNoYWRvdzsKICAgICB9IG1fdW5pZm9ybUxvY2F0aW9uczsKIH07CkBA
IC0xMjEsNzcgKzEyNSw4OSBAQCBwcml2YXRlOgogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNpbXBsZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1w
bGU+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1TaW1wbGU+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1w
bGUoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1TaW1wbGUoY29udGV4dCkpOwogICAgIH0KIAogcHJvdGVjdGVkOgorICAgIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKEdyYXBoaWNzQ29udGV4dDNEKik7Citwcml2YXRlOgog
ICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCk7CiB9OwogCiBjbGFzcyBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZT4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU+IGNyZWF0ZShHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKCkpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZShjb250ZXh0KSk7
CiAgICAgfQogCitwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0
U2ltcGxlKEdyYXBoaWNzQ29udGV4dDNEKik7CiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgpOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1PcGFjaXR5QW5kTWFzayA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1PcGFjaXR5QW5kTWFzaz4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrPiBjcmVhdGUoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayhjb250
ZXh0KSk7CiAgICAgfQogCitwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1PcGFjaXR5QW5kTWFzayhHcmFwaGljc0NvbnRleHQzRCopOwogcHJpdmF0ZToKICAgICBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCk7CiB9OwogCiBjbGFzcyBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayA6IHB1YmxpYyBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s+IGNyZWF0ZSgpCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFu
ZE1hc2s+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0
eUFuZE1hc2soKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soY29udGV4dCkpOwogICAgIH0KIAorcHJvdGVj
dGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKEdy
YXBoaWNzQ29udGV4dDNEKik7CiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtUmVjdE9wYWNpdHlBbmRNYXNrKCk7CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNvbGlkQ29sb3IgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
U29saWRDb2xvcj4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1Tb2xpZENvbG9yKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcihjb250ZXh0KSk7CiAgICAgfQogCi0gICAg
R0xpbnQgY29sb3JMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JMb2NhdGlvbjsgfQor
ICAgIEdDM0RpbnQgY29sb3JMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JMb2NhdGlv
bjsgfQogCitwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENv
bG9yKEdyYXBoaWNzQ29udGV4dDNEKik7CiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU29saWRDb2xvcigpOwotICAgIEdMaW50IG1fY29sb3JMb2NhdGlvbjsKKyAgICBH
QzNEaW50IG1fY29sb3JMb2NhdGlvbjsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaz4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaz4gY3JlYXRlKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaygpKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlh
bGlhc2luZ05vTWFzayhjb250ZXh0KSk7CiAgICAgfQogCi0gICAgR0xpbnQgZXhwYW5kZWRRdWFk
VmVydGljZXNJblRleHR1cmVDb29yZGluYXRlc0xvY2F0aW9uKCkgeyByZXR1cm4gbV9leHBhbmRl
ZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvcmRpbmF0ZXNMb2NhdGlvbjsgfQotICAgIEdMaW50IGV4
cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uKCkgeyByZXR1cm4gbV9leHBhbmRl
ZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgZXhwYW5kZWRR
dWFkVmVydGljZXNJblRleHR1cmVDb29yZGluYXRlc0xvY2F0aW9uKCkgeyByZXR1cm4gbV9leHBh
bmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvcmRpbmF0ZXNMb2NhdGlvbjsgfQorICAgIEdDM0Rp
bnQgZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSB7IHJldHVybiBtX2V4
cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uOyB9CiAKK3Byb3RlY3RlZDoKKyAg
ICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayhHcmFwaGljc0Nv
bnRleHQzRCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlh
bGlhc2luZ05vTWFzaygpOwogCi0gICAgR0xpbnQgbV9leHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4
dHVyZUNvcmRpbmF0ZXNMb2NhdGlvbjsKLSAgICBHTGludCBtX2V4cGFuZGVkUXVhZEVkZ2VzSW5T
Y3JlZW5TcGFjZUxvY2F0aW9uOworICAgIEdDM0RpbnQgbV9leHBhbmRlZFF1YWRWZXJ0aWNlc0lu
VGV4dHVyZUNvcmRpbmF0ZXNMb2NhdGlvbjsKKyAgICBHQzNEaW50IG1fZXhwYW5kZWRRdWFkRWRn
ZXNJblNjcmVlblNwYWNlTG9jYXRpb247CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlciB7CkBAIC0yMDYsNyArMjIyLDggQEAgcHVibGljOgogICAgICAgICBTb2xpZENvbG9y
CiAgICAgfTsKIAotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCk7CisgICAgVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIoKSB7IH07CisgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIoR3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcigpOwogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQpAQCAtMjIxLDEyICsyMzgsMTIg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8U2hhZGVyVHlwZSwgUmVm
UHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiwgRGVmYXVsdEhhc2g8aW50Pjo6SGFzaCwg
SGFzaFRyYWl0czxpbnQ+ID4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7CiAgICAgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAgbV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1h
cDsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwogCiAjaWYgRU5BQkxFKENTU19G
SUxURVJTKQogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxTdGFuZGFyZEZpbHRlclBy
b2dyYW0+ID4gRmlsdGVyTWFwOwogICAgIEZpbHRlck1hcCBtX2ZpbHRlck1hcDsKICNlbmRpZgot
CiB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153909</attachid>
            <date>2012-07-23 17:12:29 -0700</date>
            <delta_ts>2012-07-26 01:45:29 -0700</delta_ts>
            <desc>GraphicsContext3DQt</desc>
            <filename>bug-78672-20120723171212.patch</filename>
            <type>text/plain</type>
            <size>10838</size>
            <attacher name="Helder Correia">helder.correia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMDMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTAyOTliZjcwNTQzNjQw
N2QyNmJhYjlkNWE2MmUyOGFjMGIwOTNiMS4uZWEzNzRiYzNlMTJiODZkMTMxMGVlYjIzZDg2ZmVm
MDU1MTg5ZWNiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTA3LTIxICBIZWxk
ZXIgQ29ycmVpYSAgPGhlbGRlci5jb3JyZWlhQG5va2lhLmNvbT4KKworICAgICAgICBbVGV4bWFw
XSBNb3ZlIFRleHR1cmVNYXBwZXJHTCB0byB1c2UgR3JhcGhpY3NDb250ZXh0M0QKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NjcyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IG9mIGEg
c2V2ZXJhbCBwYXRjaC1yZWZhY3RvcmluZy4KKworICAgICAgICBJbnRyb2R1Y2UgYWRkaXRpb25h
bCBsb2dpYyBpbiBHcmFwaGljc0NvbnRleHQzRFF0IHRvIHN1cHBvcnQgdGhlCisgICAgICAgIFJl
bmRlckRpcmVjdGx5VG9Ib3N0V2luZG93IFJlbmRlclN0eWxlLiBUaGlzIGlzIG5lY2Vzc2FyeSB0
byB1c2UKKyAgICAgICAgR0MzRCBmb3Igb3RoZXIgdGhpbmdzIHRoYW4gV2ViR0wsIGxpa2UgVGV4
dHVyZU1hcHBlci4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHJlZmFjdG9yaW5nLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAg
ICAgIChHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorCiAyMDEyLTA3LTE4ICBBbGV4
YW5kcmUgRWxpYXMgIDxhZWxpYXNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIFVi
ZXJjb21wOiBjbGVhbiB1cCBDQ1JlbmRlcmVyIGludGVyZmFjZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNw
cAppbmRleCA4OTVmNzY2ODgwMzllODFmMmY3MGJmYWQ4MDA1ZjA3N2JkZTUxZDE4Li4wNGJlNzIz
ZDg5NzExMjY5MDUyZTU5ODc3NDQzN2IwYWI5YmJlMjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNw
cApAQCAtNjMsNyArNjMsNyBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUKICNlbmRp
ZgogewogcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRl
eHQzRCosIEhvc3RXaW5kb3cqKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhp
Y3NDb250ZXh0M0QqLCBIb3N0V2luZG93KiwgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRv
dyk7CiAgICAgfkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpOwogCiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQpAQCAtNzcsNiArNzcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBibGl0
TXVsdGlzYW1wbGVGcmFtZWJ1ZmZlcigpIGNvbnN0OwogICAgIHZvaWQgYmxpdE11bHRpc2FtcGxl
RnJhbWVidWZmZXJBbmRSZXN0b3JlQ29udGV4dCgpIGNvbnN0OwogICAgIGJvb2wgbWFrZUN1cnJl
bnRJZk5lZWRlZCgpIGNvbnN0OworICAgIHZvaWQgY3JlYXRlT2Zmc2NyZWVuQnVmZmVycygpOwor
ICAgIHZvaWQgaW5pdGlhbGl6ZUFOR0xFKCk7CiAgICAgdm9pZCBjcmVhdGVHcmFwaGljc1N1cmZh
Y2VzKGNvbnN0IEludFNpemUmKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7
CkBAIC0xMDYsNyArMTA4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRl
ckNvbXBpbGVyKCkKIH0KICNlbmRpZgogCi1HcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSG9zdFdpbmRv
dyogaG9zdFdpbmRvdykKK0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBIb3N0V2luZG93KiBob3N0V2lu
ZG93LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQogICAgIDogbV9jb250ZXh0KGNv
bnRleHQpCiAgICAgLCBtX2hvc3RXaW5kb3coaG9zdFdpbmRvdykKICAgICAsIG1fc3VyZmFjZSgw
KQpAQCAtMTIzLDYgKzEyNSwxNyBAQCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCisgICAgaWYgKHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KSB7Cisj
aWYgSEFWRShRVDUpCisgICAgICAgIG1fcGxhdGZvcm1Db250ZXh0ID0gUU9wZW5HTENvbnRleHQ6
OmN1cnJlbnRDb250ZXh0KCk7CisgICAgICAgIG1fc3VyZmFjZSA9IG1fcGxhdGZvcm1Db250ZXh0
LT5zdXJmYWNlKCk7CisjZWxzZQorICAgICAgICBtX3BsYXRmb3JtQ29udGV4dCA9IGNvbnN0X2Nh
c3Q8UUdMQ29udGV4dCo+KFFHTENvbnRleHQ6OmN1cnJlbnRDb250ZXh0KCkpOworICAgICAgICBt
X3N1cmZhY2UgPSBzdGF0aWNfY2FzdDxRR0xXaWRnZXQqPihtX3BsYXRmb3JtQ29udGV4dC0+ZGV2
aWNlKCkpOworI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgICB9CisKICNpZiBVU0UoR1JBUEhJ
Q1NfU1VSRkFDRSkKICAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byBjcmVhdGUgYSBRT3BlbkdM
Q29udGV4dCB3aXRob3V0IGNyZWF0aW5nIGEgUVdpbmRvdyBhdCBhbGwuCiAgICAgLy8gV2UgbmVl
ZCB0byBjcmVhdGUgYSBzdXJmYWNlIGluIG9yZGVyIHRvIGNyZWF0ZSBhIFFPcGVuR0xDb250ZXh0
IGFuZCBtYWtlIGl0IGN1cnJlbnQuCkBAIC0yOTYsNiArMzA5LDU5IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjptYWtlQ3VycmVudElmTmVlZGVkKCkgY29uc3QKICNlbmRpZgogfQog
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlT2Zmc2NyZWVuQnVmZmVycygp
Cit7CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoLyogY291bnQgKi8gMSwgJm1fY29udGV4dC0+bV9m
Ym8pOworCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb250ZXh0LT5tX3RleHR1cmUpOworICAg
IGdsQmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29udGV4dC0+
bV90ZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpMSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBo
aWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBf
VCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGdsQmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOworCisgICAgLy8gQ3JlYXRlIGEgbXVs
dGlzYW1wbGUgRkJPLgorICAgIGlmIChtX2NvbnRleHQtPm1fYXR0cnMuYW50aWFsaWFzKSB7Cisg
ICAgICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2NvbnRleHQtPm1fbXVsdGlzYW1wbGVGQk8p
OworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIG1fY29udGV4dC0+bV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIG1fY29udGV4dC0+bV9i
b3VuZEZCTyA9IG1fY29udGV4dC0+bV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgZ2xHZW5SZW5k
ZXJidWZmZXJzKDEsICZtX2NvbnRleHQtPm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAg
ICAgIGlmIChtX2NvbnRleHQtPm1fYXR0cnMuc3RlbmNpbCB8fCBtX2NvbnRleHQtPm1fYXR0cnMu
ZGVwdGgpCisgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fY29udGV4dC0+bV9t
dWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
QmluZCBjYW52YXMgRkJPLgorICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIG1fY29udGV4dC0+bV9mYm8pOworICAgICAgICBtX2NvbnRleHQt
Pm1fYm91bmRGQk8gPSBtX2NvbnRleHQtPm1fZmJvOworI2lmIFVTRShPUEVOR0xfRVNfMikKKyAg
ICAgICAgaWYgKG1fY29udGV4dC0+bV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIGdsR2VuUmVu
ZGVyYnVmZmVycygxLCAmbV9jb250ZXh0LT5tX2RlcHRoQnVmZmVyKTsKKyAgICAgICAgaWYgKG1f
Y29udGV4dC0+bV9hdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJz
KDEsICZtX2NvbnRleHQtPm1fc3RlbmNpbEJ1ZmZlcik7CisjZW5kaWYKKyAgICAgICAgaWYgKG1f
Y29udGV4dC0+bV9hdHRycy5zdGVuY2lsIHx8IG1fY29udGV4dC0+bV9hdHRycy5kZXB0aCkKKyAg
ICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9jb250ZXh0LT5tX2RlcHRoU3RlbmNp
bEJ1ZmZlcik7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aW5p
dGlhbGl6ZUFOR0xFKCkKK3sKKyAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXM7
CisgICAgU2hJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJjZXMpOworCisgICAgbV9j
b250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJT
LCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7CisgICAgbV9jb250ZXh0LT5nZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMsICZB
TkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7CisgICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFOR0xF
UmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2
KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdM
RVJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAg
ICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBt
X2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01FTlRfVU5J
Rk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk7
CisKKyAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBFUy4KKyAgICBBTkdMRVJlc291
cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7CisgICAgbV9jb250ZXh0LT5tX2NvbXBpbGVyLnNldFJl
c291cmNlcyhBTkdMRVJlc291cmNlcyk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpjcmVhdGVHcmFwaGljc1N1cmZhY2VzKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAjaWYg
VVNFKEdSQVBISUNTX1NVUkZBQ0UpCkBAIC0zMTEsMTQgKzM3NywxMiBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NTdXJmYWNlcyhjb25zdCBJbnRTaXplJiBz
aXplKQogCiBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBo
b3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiB7
Ci0gICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IHJl
bmRlcmluZyBkaXJlY3RseSB0byB0aGUgSG9zdFdpbmRvdy4KLSAgICBpZiAocmVuZGVyU3R5bGUg
PT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCi0gICAgICAgIHJldHVybiAwOwotICAgIFJl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0Nv
bnRleHQzRChhdHRycywgaG9zdFdpbmRvdywgZmFsc2UpKTsKKyAgICBib29sIHJlbmRlckRpcmVj
dGx5VG9Ib3N0V2luZG93ID0gKHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVjdGx5VG9Ib3N0V2lu
ZG93KTsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihu
ZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3csIHJlbmRlckRpcmVjdGx5VG9I
b3N0V2luZG93KSk7CiAgICAgcmV0dXJuIGNvbnRleHQtPm1fcHJpdmF0ZSA/IGNvbnRleHQucmVs
ZWFzZSgpIDogMDsKIH0KIAotR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93
LCBib29sKQorR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29u
dGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sIHJl
bmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQogICAgIDogbV9jdXJyZW50V2lkdGgoMCkKICAgICAs
IG1fY3VycmVudEhlaWdodCgwKQogICAgICwgbV9jb21waWxlcihpc0dMRVMyQ29tcGxpYW50KCkg
PyBTSF9FU1NMX09VVFBVVCA6IFNIX0dMU0xfT1VUUFVUKQpAQCAtMzM5LDcgKzQwMyw3IEBAIEdy
YXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0
cmlidXRlcyBhdHRycywgSG9zdFdpCiAgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAgICAgLCBt
X211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCiAgICAgLCBtX211bHRpc2FtcGxlQ29s
b3JCdWZmZXIoMCkKLSAgICAsIG1fcHJpdmF0ZShhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlKHRoaXMsIGhvc3RXaW5kb3cpKSkKKyAgICAsIG1fcHJpdmF0ZShhZG9wdFB0cihu
ZXcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKHRoaXMsIGhvc3RXaW5kb3csIHJlbmRlckRpcmVj
dGx5VG9Ib3N0V2luZG93KSkpCiB7CiAgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CiAKQEAgLTM2
MCw1NCArNDI0LDEwIEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICAvLyBDcmVhdGUgYnVmZmVycyBmb3IgdGhlIGNhbnZhcyBGQk8uCi0gICAg
Z2xHZW5GcmFtZWJ1ZmZlcnMoLyogY291bnQgKi8gMSwgJm1fZmJvKTsKLQotICAgIGdsR2VuVGV4
dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxU
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlO
X0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBh
cmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAg
IGdsQmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwotCi0gICAg
Ly8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykg
ewotICAgICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAg
ICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9t
dWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIG1fYm91bmRGQk8gPSBtX211bHRpc2FtcGxlRkJPOwot
ICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7
Ci0gICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKLSAgICAgICAg
ICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZl
cik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgotICAgICAgICBn
bEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsK
LSAgICAgICAgbV9ib3VuZEZCTyA9IG1fZmJvOwotI2lmIFVTRShPUEVOR0xfRVNfMikKLSAgICAg
ICAgaWYgKG1fYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwg
Jm1fZGVwdGhCdWZmZXIpOwotICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQotICAgICAgICAg
ICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOwotI2VuZGlmCi0gICAg
ICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKLSAgICAgICAgICAgIGds
R2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIH0KLQotICAg
IC8vIEFOR0xFIGluaXRpYWxpemF0aW9uLgotICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJl
c291cmNlczsKLSAgICBTaEluaXRCdWlsdEluUmVzb3VyY2VzKCZBTkdMRVJlc291cmNlcyk7Cisg
ICAgaWYgKCFyZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKKyAgICAgICAgbV9wcml2YXRlLT5j
cmVhdGVPZmZzY3JlZW5CdWZmZXJzKCk7CiAKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmli
cyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9S
TV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOwotICAg
IGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkFSWUlOR19WRUNUT1JTLCAmQU5H
TEVSZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNl
cy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJj
ZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7IAotICAgIGdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1h
eFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6
TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50
VW5pZm9ybVZlY3RvcnMpOwotCi0gICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVuR0wgRVMu
Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOwotICAgIG1fY29tcGlsZXIu
c2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKKyAgICBtX3ByaXZhdGUtPmluaXRpYWxpemVB
TkdMRSgpOwogCiAjaWYgIVVTRShPUEVOR0xfRVNfMikKICAgICBnbEVuYWJsZShHTF9QT0lOVF9T
UFJJVEUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154580</attachid>
            <date>2012-07-26 01:58:25 -0700</date>
            <delta_ts>2012-07-26 12:55:46 -0700</delta_ts>
            <desc>GraphicsContext3DQt</desc>
            <filename>bug-78672-20120726015814.patch</filename>
            <type>text/plain</type>
            <size>12493</size>
            <attacher name="Helder Correia">helder.correia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODgyNmYzMjk2YTVjZmNj
MTYyZDY1NGE1OTFjOGQ2NmIzNDRkMjIxNy4uODU4MDg5N2M0NjMyZjI3YzRlOTFmODYyMmY0NTkw
MDFhMjIwYjY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEyLTA3LTI2ICBIZWxk
ZXIgQ29ycmVpYSAgPGhlbGRlci5jb3JyZWlhQG5va2lhLmNvbT4KKworICAgICAgICBbVGV4bWFw
XSBNb3ZlIFRleHR1cmVNYXBwZXJHTCB0byB1c2UgR3JhcGhpY3NDb250ZXh0M0QKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NjcyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IG9mIGEg
c2V2ZXJhbCBwYXRjaC1yZWZhY3RvcmluZy4KKworICAgICAgICBJbnRyb2R1Y2UgYWRkaXRpb25h
bCBsb2dpYyBpbiBHcmFwaGljc0NvbnRleHQzRFF0IHRvIHN1cHBvcnQgYQorICAgICAgICBuZXcg
UmVuZGVyVG9DdXJyZW50R0xDb250ZXh0IFJlbmRlclN0eWxlLiBUaGlzIGlzIG5lY2Vzc2FyeSB0
bworICAgICAgICB1c2UgR0MzRCBmb3Igb3RoZXIgdGhpbmdzIHRoYW4gV2ViR0wsIGxpa2UgVGV4
dHVyZU1hcHBlci4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHJlZmFjdG9yaW5nLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKEdy
YXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmNyZWF0ZU9mZnNjcmVlbkJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmluaXRpYWxpemVBTkdMRSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVXcmFwcGVyRm9yQ3VycmVudEdMQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0Qp
OgorCiAyMDEyLTA3LTIwICBEYXZpZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBJbmRleGVkREI6IEluY2x1ZGUgaW50VmVyc2lvbiB3aGVuIGNvbnZlcnRpbmcgYmV0
d2VlbiBXZWJDb3JlIGFuZCBXZWJLaXQgSURCTWV0YWRhdGEgdHlwZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDc0
MzNkZjYyNmY0Y2FiMmFjYzZjYTA5OGE2MjgwZDQ4ZDQ5YTJiMTkuLjU4NDEzMGE4MTNkZGUyNjE4
YjRkZjRiZDk2MjNiYTg0NjdhM2I5NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtNDYzLDcgKzQ2Myw4IEBAIHB1
YmxpYzoKIAogICAgIGVudW0gUmVuZGVyU3R5bGUgewogICAgICAgICBSZW5kZXJPZmZzY3JlZW4s
Ci0gICAgICAgIFJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93CisgICAgICAgIFJlbmRlckRpcmVj
dGx5VG9Ib3N0V2luZG93LAorICAgICAgICBSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQKICAgICB9
OwogCiAgICAgY2xhc3MgQ29udGV4dExvc3RDYWxsYmFjayB7CkBAIC00ODIsNiArNDgzLDcgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2soUGFzc093blB0cjxFcnJv
ck1lc3NhZ2VDYWxsYmFjaz4pOwogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNyZWF0ZShBdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgUmVuZGVyU3R5bGUgPSBSZW5k
ZXJPZmZzY3JlZW4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
cmVhdGVXcmFwcGVyRm9yQ3VycmVudEdMQ29udGV4dCgpOwogICAgIH5HcmFwaGljc0NvbnRleHQz
RCgpOwogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtODY1LDYgKzg2Nyw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChHQzNEZW51bSk7CiAKICAg
cHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQzRChBdHRyaWJ1dGVzLCBIb3N0V2luZG93Kiwg
UmVuZGVyU3R5bGUgPSBSZW5kZXJPZmZzY3JlZW4pOwogICAgIEdyYXBoaWNzQ29udGV4dDNEKEF0
dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wgcmVuZGVyRGlyZWN0
bHlUb0hvc3RXaW5kb3cpOwogCiAgICAgLy8gRWFjaCBwbGF0Zm9ybSBtdXN0IHByb3ZpZGUgYW4g
aW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCmluZGV4
IDg5NWY3NjY4ODAzOWU4MWYyZjcwYmZhZDgwMDVmMDc3YmRlNTFkMTguLjQxMDhkYWIxNWQ3YWY4
Zjg5ZDgxNjM4NzYwMzA3MTk5YTBiYzU4NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCkBAIC02
Myw3ICs2Myw3IEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZQogI2VuZGlmCiB7CiBw
dWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiwg
SG9zdFdpbmRvdyopOworICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRl
eHQzRCosIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUpOwogICAg
IH5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUoKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKQEAgLTc3LDYgKzc3LDggQEAgcHVibGljOgogICAgIHZvaWQgYmxpdE11bHRpc2Ft
cGxlRnJhbWVidWZmZXIoKSBjb25zdDsKICAgICB2b2lkIGJsaXRNdWx0aXNhbXBsZUZyYW1lYnVm
ZmVyQW5kUmVzdG9yZUNvbnRleHQoKSBjb25zdDsKICAgICBib29sIG1ha2VDdXJyZW50SWZOZWVk
ZWQoKSBjb25zdDsKKyAgICB2b2lkIGNyZWF0ZU9mZnNjcmVlbkJ1ZmZlcnMoKTsKKyAgICB2b2lk
IGluaXRpYWxpemVBTkdMRSgpOwogICAgIHZvaWQgY3JlYXRlR3JhcGhpY3NTdXJmYWNlcyhjb25z
dCBJbnRTaXplJik7CiAKICAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwpAQCAtMTA2
LDcgKzEwOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxl
cigpCiB9CiAjZW5kaWYKIAotR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3cpCitHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogICAgIDogbV9jb250ZXh0
KGNvbnRleHQpCiAgICAgLCBtX2hvc3RXaW5kb3coaG9zdFdpbmRvdykKICAgICAsIG1fc3VyZmFj
ZSgwKQpAQCAtMTIzLDYgKzEyNSwxNyBAQCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSAogICAgICAg
ICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKHJlbmRlclN0eWxlID09IEdyYXBoaWNzQ29udGV4
dDNEOjpSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpIHsKKyNpZiBIQVZFKFFUNSkKKyAgICAgICAg
bV9wbGF0Zm9ybUNvbnRleHQgPSBRT3BlbkdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKTsKKyAg
ICAgICAgbV9zdXJmYWNlID0gbV9wbGF0Zm9ybUNvbnRleHQtPnN1cmZhY2UoKTsKKyNlbHNlCisg
ICAgICAgIG1fcGxhdGZvcm1Db250ZXh0ID0gY29uc3RfY2FzdDxRR0xDb250ZXh0Kj4oUUdMQ29u
dGV4dDo6Y3VycmVudENvbnRleHQoKSk7CisgICAgICAgIG1fc3VyZmFjZSA9IHN0YXRpY19jYXN0
PFFHTFdpZGdldCo+KG1fcGxhdGZvcm1Db250ZXh0LT5kZXZpY2UoKSk7CisjZW5kaWYKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKwogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQogICAgIC8vIEZJ
WE1FOiBGaW5kIGEgd2F5IHRvIGNyZWF0ZSBhIFFPcGVuR0xDb250ZXh0IHdpdGhvdXQgY3JlYXRp
bmcgYSBRV2luZG93IGF0IGFsbC4KICAgICAvLyBXZSBuZWVkIHRvIGNyZWF0ZSBhIHN1cmZhY2Ug
aW4gb3JkZXIgdG8gY3JlYXRlIGEgUU9wZW5HTENvbnRleHQgYW5kIG1ha2UgaXQgY3VycmVudC4K
QEAgLTI5Niw2ICszMDksNTkgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om1ha2VD
dXJyZW50SWZOZWVkZWQoKSBjb25zdAogI2VuZGlmCiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpjcmVhdGVPZmZzY3JlZW5CdWZmZXJzKCkKK3sKKyAgICBnbEdlbkZyYW1lYnVm
ZmVycygvKiBjb3VudCAqLyAxLCAmbV9jb250ZXh0LT5tX2Zibyk7CisKKyAgICBnbEdlblRleHR1
cmVzKDEsICZtX2NvbnRleHQtPm1fdGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb250ZXh0LT5tX3RleHR1cmUpOworICAgIGdsVGV4
UGFyYW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAg
Z2xUZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsK
KyAgICBnbFRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RP
X0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6
Q0xBTVBfVE9fRURHRSk7CisgICAgZ2xCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgMCk7CisKKyAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCisgICAgaWYg
KG1fY29udGV4dC0+bV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZl
cnMoMSwgJm1fY29udGV4dC0+bV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIGdsQmluZEZyYW1l
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9jb250ZXh0LT5tX211bHRp
c2FtcGxlRkJPKTsKKyAgICAgICAgbV9jb250ZXh0LT5tX2JvdW5kRkJPID0gbV9jb250ZXh0LT5t
X211bHRpc2FtcGxlRkJPOworICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fY29udGV4
dC0+bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+bV9h
dHRycy5zdGVuY2lsIHx8IG1fY29udGV4dC0+bV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIGds
R2VuUmVuZGVyYnVmZmVycygxLCAmbV9jb250ZXh0LT5tX211bHRpc2FtcGxlRGVwdGhTdGVuY2ls
QnVmZmVyKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBCaW5kIGNhbnZhcyBGQk8uCisgICAg
ICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9j
b250ZXh0LT5tX2Zibyk7CisgICAgICAgIG1fY29udGV4dC0+bV9ib3VuZEZCTyA9IG1fY29udGV4
dC0+bV9mYm87CisjaWYgVVNFKE9QRU5HTF9FU18yKQorICAgICAgICBpZiAobV9jb250ZXh0LT5t
X2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2NvbnRl
eHQtPm1fZGVwdGhCdWZmZXIpOworICAgICAgICBpZiAobV9jb250ZXh0LT5tX2F0dHJzLnN0ZW5j
aWwpCisgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fY29udGV4dC0+bV9zdGVu
Y2lsQnVmZmVyKTsKKyNlbmRpZgorICAgICAgICBpZiAobV9jb250ZXh0LT5tX2F0dHJzLnN0ZW5j
aWwgfHwgbV9jb250ZXh0LT5tX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgZ2xHZW5SZW5kZXJi
dWZmZXJzKDEsICZtX2NvbnRleHQtPm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppbml0aWFsaXplQU5HTEUoKQoreworICAg
IFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlczsKKyAgICBTaEluaXRCdWlsdEluUmVz
b3VyY2VzKCZBTkdMRVJlc291cmNlcyk7CisKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5NYXhW
ZXJ0ZXhBdHRyaWJzKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRl
eFVuaWZvcm1WZWN0b3JzKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfVkFSWUlOR19WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmFyeWluZ1Zl
Y3RvcnMpOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleFRl
eHR1cmVJbWFnZVVuaXRzKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2Vz
Lk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdl
cnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNv
dXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMpOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJl
c291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKKworICAgIC8vIEFsd2F5cyBzZXQg
dG8gMSBmb3IgT3BlbkdMIEVTLgorICAgIEFOR0xFUmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0g
MTsKKyAgICBtX2NvbnRleHQtPm1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2Vz
KTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzU3Vy
ZmFjZXMoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkK
QEAgLTMxNCwxMSArMzgwLDE3IEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBo
aWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpCiAgICAgLy8gVGhp
cyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IHJlbmRlcmluZyBkaXJl
Y3RseSB0byB0aGUgSG9zdFdpbmRvdy4KICAgICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVyRGly
ZWN0bHlUb0hvc3RXaW5kb3cpCiAgICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRy
cywgaG9zdFdpbmRvdywgZmFsc2UpKTsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3cs
IHJlbmRlclN0eWxlKSk7CisgICAgcmV0dXJuIGNvbnRleHQtPm1fcHJpdmF0ZSA/IGNvbnRleHQu
cmVsZWFzZSgpIDogMDsKK30KKworUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZVdyYXBwZXJGb3JDdXJyZW50R0xDb250ZXh0KCkKK3sKKyAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3ND
b250ZXh0M0QoQXR0cmlidXRlcygpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyVG9DdXJy
ZW50R0xDb250ZXh0KSk7CiAgICAgcmV0dXJuIGNvbnRleHQtPm1fcHJpdmF0ZSA/IGNvbnRleHQu
cmVsZWFzZSgpIDogMDsKIH0KIAotR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNE
KEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2lu
ZG93LCBib29sKQorR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFw
aGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiAgICAgOiBtX2N1cnJlbnRX
aWR0aCgwKQogICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCiAgICAgLCBtX2NvbXBpbGVyKGlzR0xF
UzJDb21wbGlhbnQoKSA/IFNIX0VTU0xfT1VUUFVUIDogU0hfR0xTTF9PVVRQVVQpCkBAIC0zMzks
NyArNDExLDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICAsIG1fbXVsdGlzYW1wbGVG
Qk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKICAgICAsIG1f
bXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQotICAgICwgbV9wcml2YXRlKGFkb3B0UHRyKG5ldyBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGUodGhpcywgaG9zdFdpbmRvdykpKQorICAgICwgbV9wcml2
YXRlKGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUodGhpcywgaG9zdFdpbmRv
dywgcmVuZGVyU3R5bGUpKSkKIHsKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIApAQCAtMzYw
LDU0ICs0MzIsMTAgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIC8vIENyZWF0ZSBidWZmZXJzIGZvciB0aGUgY2FudmFzIEZCTy4KLSAgICBn
bEdlbkZyYW1lYnVmZmVycygvKiBjb3VudCAqLyAxLCAmbV9mYm8pOworICAgIGlmIChyZW5kZXJT
dHlsZSA9PSBSZW5kZXJPZmZzY3JlZW4pCisgICAgICAgIG1fcHJpdmF0ZS0+Y3JlYXRlT2Zmc2Ny
ZWVuQnVmZmVycygpOwogCi0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICBn
bEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmUpOwot
ICAgIGdsVGV4UGFyYW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVB
Uik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6
TElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6
OkNMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0Nv
bnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgMCk7Ci0KLSAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8u
Ci0gICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7Ci0gICAgICAgIGdsR2VuRnJhbWVidWZmZXJz
KDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgbV9i
b3VuZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygx
LCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNp
bCB8fCBtX2F0dHJzLmRlcHRoKQotICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZt
X211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9IGVsc2UgewotICAgICAgICAv
LyBCaW5kIGNhbnZhcyBGQk8uCi0gICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICBtX2JvdW5kRkJPID0gbV9mYm87
Ci0jaWYgVVNFKE9QRU5HTF9FU18yKQotICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKLSAgICAg
ICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAgIGlm
IChtX2F0dHJzLnN0ZW5jaWwpCi0gICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1f
c3RlbmNpbEJ1ZmZlcik7Ci0jZW5kaWYKLSAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBt
X2F0dHJzLmRlcHRoKQotICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRo
U3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQotCi0gICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24uCi0g
ICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzOwotICAgIFNoSW5pdEJ1aWx0SW5S
ZXNvdXJjZXMoJkFOR0xFUmVzb3VyY2VzKTsKLQotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhBdHRy
aWJzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklG
T1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7Ci0g
ICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlMsICZB
TkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3Vy
Y2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291
cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsgCi0gICAgZ2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMu
TWF4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21l
bnRVbmlmb3JtVmVjdG9ycyk7Ci0KLSAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBF
Uy4KLSAgICBBTkdMRVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7Ci0gICAgbV9jb21waWxl
ci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworICAgIG1fcHJpdmF0ZS0+aW5pdGlhbGl6
ZUFOR0xFKCk7CiAKICNpZiAhVVNFKE9QRU5HTF9FU18yKQogICAgIGdsRW5hYmxlKEdMX1BPSU5U
X1NQUklURSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154582</attachid>
            <date>2012-07-26 02:02:03 -0700</date>
            <delta_ts>2012-07-26 12:55:51 -0700</delta_ts>
            <desc>TextureMapperGL</desc>
            <filename>bug-78672-20120726020152.patch</filename>
            <type>text/plain</type>
            <size>100829</size>
            <attacher name="Helder Correia">helder.correia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODgyNmYzMjk2YTVjZmNj
MTYyZDY1NGE1OTFjOGQ2NmIzNDRkMjIxNy4uZmI3NjdkZTZlN2Y0MDVmMWQ4N2Q4NzE3OWI1MWUz
ZmMzZDBhYjA1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NiBAQAorMjAxMi0wNy0yMyAgSGVs
ZGVyIENvcnJlaWEgIDxoZWxkZXIuY29ycmVpYUBub2tpYS5jb20+CisKKyAgICAgICAgW1RleG1h
cF0gTW92ZSBUZXh0dXJlTWFwcGVyR0wgdG8gdXNlIEdyYXBoaWNzQ29udGV4dDNECisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODY3MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgcGFydCBvZiBh
IHNldmVyYWwgcGF0Y2gtcmVmYWN0b3JpbmcuCisKKyAgICAgICAgVGV4dHVyZU1hcHBlckdMIChU
TUdMKSBpbmNsdWRlcyBkaXJlY3QgR0wgY2FsbHMgYW5kCisgICAgICAgIEdyYXBoaWNzQ29udGV4
dDNEIChHQzNEKSBvZmZlcnMgbWFueSBjb252ZW5pZW5jZXMgb3ZlciB0aGUKKyAgICAgICAgZm9y
bWVyIGFwcHJvYWNoOiB1c2luZyBleGlzdGluZyBDU1Mgc2hhZGVyIGNvZGUsIEFOR0xFIGZvcgor
ICAgICAgICBzaGFkZXIgY29tcGlsYXRpb24sIHJldXNpbmcgV2ViQ29yZTo6VGV4dHVyZSwgaGF2
aW5nIHNoYWRlcnMgYW5kCisgICAgICAgIHRleHR1cmVzIHRoYXQgY2FuIGRlbGV0ZSB0aGVtc2Vs
dmVzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGUgYmFja2VuZCBvZiBUTUdMIHRv
IEdDM0QuIEl0IHdhcyBpbml0aWFsbHkKKyAgICAgICAgdGhvdWdodCB0byBpbnRyb2R1Y2UgYSBu
ZXcgYmFja2VuZCAoc2F5LCBUZXh0dXJlTWFwcGVyR0MzRCksIGJ1dAorICAgICAgICBpbiB0aGUg
ZW5kIGl0IHdhcyBhZ3JlZWQgdG8gY29uc29saWRhdGUgaXQgaW5zaWRlIFRNR0wgaW5zdGVhZCwK
KyAgICAgICAgYXMgYW4gYWRkaXRpb25hbCBUZXh0dXJlTWFwcGVyIHN1YmNsYXNzIHdvdWxkIGdl
dCBzdGFsZSB2ZXJ5CisgICAgICAgIHF1aWNrbHkuCisKKyAgICAgICAgQSBHQzNEIG9iamVjdCBp
cyBjcmVhdGVkIGJ5IFRNR0wgd2l0aCB0aGUgbmV3bHkgaW50cm9kdWNlZAorICAgICAgICBSZW5k
ZXJUb0N1cnJlbnRHTENvbnRleHQgZmxhZy4KKworICAgICAgICBUTUdMJ3MgZGVwZW5kZW5jeSBv
biBPcGVuR0xTaGltcy5oIHdhcyBjb21wbGV0ZWx5IHJlbW92ZWQuCisgICAgICAgIEhvd2V2ZXIs
IEdDM0QgZG9lcyBub3QgbWFwIGV2ZXJ5IHNpbmdsZSBHTCBjb25zdGFudC4gVGh1cywgaXQncwor
ICAgICAgICBpbXBvcnRhbnQgdG8gZG9jdW1lbnQgdGhlIGZvbGxvd2luZyBub3RlczoKKyAgICAg
ICAgICAgIC0gR0xfRkFMU0Ugd2FzIG1hcHBlZCB0byBmYWxzZS4KKyAgICAgICAgICAgIC0gR0xf
VU5QQUNLX1JPV19MRU5HVEgsIEdMX1VOUEFDS19TS0lQX1BJWEVMUywKKyAgICAgICAgICAgIEdM
X1VOUEFDS19TS0lQX1JPV1MsIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgYW5kCisgICAgICAg
ICAgICBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYgd2VyZSBsb2NhbGx5IGRlZmluZWQgaW4g
VE1HTC4KKworICAgICAgICBBIG5ldyBHQzNEOjp0ZXhJbWFnZTJERGlyZWN0KCkgZnVuY3Rpb24g
d2FzIGludHJvZHVjZWQgdG8gYWxsb3cKKyAgICAgICAgaW5pdGlhbGl6YXRpb24gb2YgdGV4dHVy
ZXMgd2l0aG91dCBhbGxvY2F0aW9uLiBUaGUgZXhpc3RpbmcKKyAgICAgICAgdGV4dEltYWdlMkQo
KSByZWZ1c2VzIGEgbnVsbCBwaXhlbCBidWZmZXIsIGFuZAorICAgICAgICB0ZXhJbWFnZTJEUmVz
b3VyY2VTYWZlKCkgYWxsb3dzIGl0IGJ1dCBwZXJmb3JtcyBtZW1vcnkKKyAgICAgICAgYWxsb2Nh
dGlvbiBhbmQgemVyb2VzIHRoZSBiaXRzLiBUaGlzIHdhcyBub3QgZmFzdCBlbm91Z2ggZm9yCisg
ICAgICAgIEJpdG1hcFRleHR1cmVHTCBmcmVxdWVudCBzZXR0aW5nIHVwLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cywgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29t
bW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJE
RGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFNoYXJlZEdMRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OmN1
cnJlbnRTaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0
YTo6U2hhcmVkR0xEYXRhOjpTaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMRGF0YTo6c2hhcmVkR0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJHTERhdGE6OlRleHR1cmVNYXBwZXJHTERhdGEpOgorICAgICAgICAoVGV4dHVyZU1hcHBl
ckdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpzY2lzc29yQ2xpcCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjazo6YXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6aW5pdGlhbGl6ZVN0ZW5jaWwpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJHTDo6ZW5kUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMOjpkcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRy
YXdCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6dmlld3BvcnRN
YXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdp
dGhBbnRpYWxpYXNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3
VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVy
ZUdMOjpkaWRSZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnVwZGF0
ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0ZpbHRl
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6aW5pdGlhbGl6ZVN0ZW5j
aWwpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpjbGVhcklmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6Y3JlYXRlRmJvSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpiaW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFRleHR1cmVHTDo6fkJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0w6OmJpbmREZWZhdWx0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luU2Npc3NvckNsaXApOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMOjplbmRDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Y3Jl
YXRlVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHTC5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpncmFwaGljc0Nv
bnRleHQzRCk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoQ2xpcFN0YWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6dGV4dHVyZVRhcmdldCk6Cisg
ICAgICAgIChCaXRtYXBUZXh0dXJlR0wpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVy
ZUdMOjpCaXRtYXBUZXh0dXJlR0wpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6aW5pdGlhbGl6ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2lt
cGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlB
bmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNr
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2spOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6flN0YW5k
YXJkRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dy
YW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZp
bHRlclByb2dyYW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclBy
b2dyYW06OnByZXBhcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OmdldFNoYWRlckZvckZpbHRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW06OnZlcnRleEF0dHJpYik6CisgICAgICAgIChUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbTo6bWF0cml4TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW06OmZsaXBMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbTo6dGV4dHVyZVNpemVMb2NhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6c291cmNlVGV4dHVyZUxvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjptYXNrVGV4dHVy
ZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
OjpvcGFjaXR5TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoU3RhbmRhcmRGaWx0
ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6dmVy
dGV4QXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6dGV4
Q29vcmRBdHRyaWIpOgorICAgICAgICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp0
ZXh0dXJlVW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVNpbXBsZTo6Y3JlYXRlKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
U2ltcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVj
dFNpbXBsZTo6Y3JlYXRlKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVj
dFNpbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9w
YWNpdHlBbmRNYXNrOjpjcmVhdGUpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1PcGFjaXR5QW5kTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6Y3JlYXRlKToKKyAgICAgICAgKFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6Y29sb3JMb2NhdGlv
bik6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01h
c2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bUFudGlhbGlhc2luZ05vTWFzazo6ZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb29yZGlu
YXRlc0xvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtQW50aWFsaWFzaW5nTm9NYXNrOjpleHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2Nh
dGlvbik6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05v
TWFzayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIpOgorCiAyMDEyLTA3LTIwICBEYXZpZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBJbmRleGVkREI6IEluY2x1ZGUgaW50VmVyc2lvbiB3aGVuIGNvbnZlcnRp
bmcgYmV0d2VlbiBXZWJDb3JlIGFuZCBXZWJLaXQgSURCTWV0YWRhdGEgdHlwZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmlu
ZGV4IDU4NDEzMGE4MTNkZGUyNjE4YjRkZjRiZDk2MjNiYTg0NjdhM2I5NjguLjk0NGFmOWM3MmM0
NjVlYTNhODFlYjMwZjJhNzYwMDJlYjg4OGMwNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtNTMxLDYgKzUzMSw5
IEBAIHB1YmxpYzoKICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CiAjZW5kaWYKIAorICAgIC8v
IEVxdWl2YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxsb3dzIHBpeGVscz09MCB3aXRoIG5v
IGFsbG9jYXRpb24uCisgICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0KEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKKwogICAgIC8vIEhlbHBlciB0byB0ZXhJbWFn
ZTJEIHdpdGggcGl4ZWw9PTAgY2FzZTogcGl4ZWxzIGFyZSBpbml0aWFsaXplZCB0byAwLgogICAg
IC8vIFJldHVybiB0cnVlIGlmIG5vIEdMIGVycm9yIGlzIHN5bnRoZXNpemVkLgogICAgIC8vIEJ5
IGRlZmF1bHQsIGFsaWdubWVudCBpcyA0LCB0aGUgT3BlbkdMIGRlZmF1bHQgc2V0dGluZy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCmluZGV4IGZkNDUwMTQxYzc0ZGRhM2I0
OWU4OTU3ODU5Y2JhMmI5MGE4MzdmNTIuLjk4ZTExNDViM2RiMjRlNTFkN2I3NWZkMDY3MDhmZmFl
MjU2YWViMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcApAQCAtMjU2
LDcgKzI1Niw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlCiAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKElOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworCiAgICAgR0MzRGVudW0gb3BlbkdMSW50ZXJuYWxGb3Jt
YXQgPSBpbnRlcm5hbGZvcm1hdDsKICAgICBpZiAodHlwZSA9PSBHTF9GTE9BVCkgewogICAgICAg
ICBpZiAoZm9ybWF0ID09IEdMX1JHQkEpCkBAIC0yNjUsNyArMjY1LDcgQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGUKICAgICAgICAgICAgIG9wZW5HTEludGVybmFsRm9ybWF0ID0gR0xfUkdCMzJG
X0FSQjsKICAgICB9CiAKLSAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBvcGVuR0xJ
bnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVs
cyk7CisgICAgdGV4SW1hZ2UyRERpcmVjdCh0YXJnZXQsIGxldmVsLCBvcGVuR0xJbnRlcm5hbEZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xD
b21tb24uY3BwCmluZGV4IGE0ZDFlYjRjZDkzYzQ3NjMzNmMwMmY2MTNiZmM2NTk0NGQyODZjYjgu
LjhhMjZhZWNlYmM4MDg4ODc2ODk5MjgyNTA0OGY3NDVjYmY5NmZlMTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApAQCAtMTM4Miw2ICsxMzgyLDEy
IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgpIGNvbnN0CiAgICAg
cmV0dXJuIG1fbGF5ZXJDb21wb3NpdGVkOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0
ZXhJbWFnZTJERGlyZWN0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGlu
dCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4
ZWxzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xUZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1h
dCwgdHlwZSwgcGl4ZWxzKTsKK30KKwogfQogCiAjZW5kaWYgLy8gVVNFKDNEX0dSQVBISUNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCmluZGV4IDc5ZGRjYmJmZDlh
NGI1NWVjODI2ZTQxYjU5NWVlZjg0ZTY0ZDlkMDMuLjUyODFlY2ZjM2U0ZWNmYjk3YzA3MzM4OTlk
NzQ0ZmY1Y2EwOWYyNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5j
cHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBVU0UoM0RfR1JBUEhJQ1MpCiAKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgorCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMRVMuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgpAQCAtMjMwLDggKzIz
MSw4IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KElOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsK
KworICAgIHRleEltYWdlMkREaXJlY3QodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogICAgIHJldHVybiB0
cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDY4OGUyNmY0ZTg5ZmZmMTNkZTVi
M2Q1NzljODIwYTkzNWVmOTE3MmMuLjdjODIyNTY4OTQ5MzM3NjhlOTNmZTJiODFiMTMwZTZjNmE5
ZTIxMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlckdMLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5oIgpAQCAtMzksOTEgKzM4LDQyIEBACiAKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRlICJO
YXRpdmVJbWFnZVF0LmgiCi0jaWYgSEFWRShRVDUpCi0jaW5jbHVkZSA8UU9wZW5HTENvbnRleHQ+
Ci0jZWxzZQotI2luY2x1ZGUgPFFHTENvbnRleHQ+Ci0jZW5kaWYgLy8gUVRfVkVSU0lPTgotI2Vs
aWYgT1MoV0lORE9XUykKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZWxpZiBPUyhNQUNfT1NfWCkK
LSNpbmNsdWRlIDxBR0wvYWdsLmg+Ci0jZWxpZiBkZWZpbmVkKFhQX1VOSVgpCi0jaW5jbHVkZSA8
R0wvZ2x4Lmg+CiAjZW5kaWYKIAotI2RlZmluZSBHTF9DTUQoLi4uKSBkbyB7IF9fVkFfQVJHU19f
OyBBU1NFUlRfQVJHKF9fVkFfQVJHU19fLCAhZ2xHZXRFcnJvcigpKTsgfSB3aGlsZSAoMCkKKyNp
ZiAhVVNFKFRFWE1BUF9PUEVOR0xfRVNfMikKKy8vIEZJWE1FOiBNb3ZlIHRvIEV4dGVuc2lvbnMz
RC5oLgorI2RlZmluZSBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIgMHg4NEY1CisjZGVmaW5lIEdM
X1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViAweDgzNjcKKyNkZWZpbmUgR0xfVU5QQUNLX1JPV19M
RU5HVEggMHgwQ0YyCisjZGVmaW5lIEdMX1VOUEFDS19TS0lQX1BJWEVMUyAweDBDRjQKKyNkZWZp
bmUgR0xfVU5QQUNLX1NLSVBfUk9XUyAweDBDRjMKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBzdHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAgICAgc3RydWN0IFNoYXJlZEdMRGF0
YSA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZEdMRGF0YT4gewotI2lmIFBMQVRGT1JNKFFUKQot
I2lmIFFUX1ZFUlNJT04gPj0gMHgwNTAwMDAKLSAgICAgICAgdHlwZWRlZiBRT3BlbkdMQ29udGV4
dCogR0xDb250ZXh0OwotICAgICAgICBzdGF0aWMgR0xDb250ZXh0IGdldEN1cnJlbnRHTENvbnRl
eHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUU9wZW5HTENvbnRleHQ6OmN1cnJl
bnRDb250ZXh0KCk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIHR5cGVkZWYgY29uc3QgUUdM
Q29udGV4dCogR0xDb250ZXh0OwotICAgICAgICBzdGF0aWMgR0xDb250ZXh0IGdldEN1cnJlbnRH
TENvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUUdMQ29udGV4dDo6Y3Vy
cmVudENvbnRleHQoKTsKLSAgICAgICAgfQotI2VuZGlmCi0jZWxpZiBPUyhXSU5ET1dTKQotICAg
ICAgICB0eXBlZGVmIEhHTFJDIEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBn
ZXRDdXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHdnbEdl
dEN1cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIH0KLSNlbGlmIE9TKE1BQ19PU19YKQotICAgICAg
ICB0eXBlZGVmIEFHTENvbnRleHQgR0xDb250ZXh0OwotICAgICAgICBzdGF0aWMgR0xDb250ZXh0
IGdldEN1cnJlbnRHTENvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWds
R2V0Q3VycmVudENvbnRleHQoKTsKLSAgICAgICAgfQotI2VsaWYgZGVmaW5lZChYUF9VTklYKQot
ICAgICAgICB0eXBlZGVmIEdMWENvbnRleHQgR0xDb250ZXh0OwotICAgICAgICBzdGF0aWMgR0xD
b250ZXh0IGdldEN1cnJlbnRHTENvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZ2xYR2V0Q3VycmVudENvbnRleHQoKTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgLy8g
RGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgdW5rbm93biBvcGVuZ2wuCi0gICAgICAgIC8vIFJl
dHVybnMgYWx3YXlzIGluY3JlYXNpbmcgbnVtYmVyIGFuZCBkaXNhYmxlcyBHTCBjb250ZXh0IGRh
dGEgc2hhcmluZy4KLSAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgR0xDb250ZXh0OwotICAg
ICAgICBzdGF0aWMgR0xDb250ZXh0IGdldEN1cnJlbnRHTENvbnRleHQoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBzdGF0aWMgR0xDb250ZXh0IGR1bW15Q29udGV4dENvdW50ZXIgPSAwOwotICAg
ICAgICAgICAgcmV0dXJuICsrZHVtbXlDb250ZXh0Q291bnRlcjsKLSAgICAgICAgfQotCi0jZW5k
aWYKLQotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8R0xDb250ZXh0LCBTaGFyZWRHTERhdGEqPiBH
TENvbnRleHREYXRhTWFwOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQzRCwgU2hhcmVkR0xEYXRhKj4gR0xDb250ZXh0RGF0YU1hcDsKICAgICAgICAgc3Rh
dGljIEdMQ29udGV4dERhdGFNYXAmIGdsQ29udGV4dERhdGFNYXAoKQogICAgICAgICB7CiAgICAg
ICAgICAgICBzdGF0aWMgR0xDb250ZXh0RGF0YU1hcCBtYXA7CiAgICAgICAgICAgICByZXR1cm4g
bWFwOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkR0xEYXRh
PiBjdXJyZW50U2hhcmVkR0xEYXRhKCkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVk
R0xEYXRhPiBjdXJyZW50U2hhcmVkR0xEYXRhKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBHTENvbnRleHQgY3VycmVudEdMQ29uZXh0ID0gZ2V0Q3Vy
cmVudEdMQ29udGV4dCgpOwotICAgICAgICAgICAgR0xDb250ZXh0RGF0YU1hcDo6aXRlcmF0b3Ig
aXQgPSBnbENvbnRleHREYXRhTWFwKCkuZmluZChjdXJyZW50R0xDb25leHQpOworICAgICAgICAg
ICAgR0xDb250ZXh0RGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBnbENvbnRleHREYXRhTWFwKCkuZmlu
ZChjb250ZXh0LT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpOwogICAgICAgICAgICAgaWYg
KGl0ICE9IGdsQ29udGV4dERhdGFNYXAoKS5lbmQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
aXQtPnNlY29uZDsKIAotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRHTERh
dGEoZ2V0Q3VycmVudEdMQ29udGV4dCgpKSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNoYXJlZEdMRGF0YShjb250ZXh0KSk7CiAgICAgICAgIH0KIAotCi0KICAgICAgICAgVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgdGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI7CiAKLSAg
ICAgICAgU2hhcmVkR0xEYXRhKEdMQ29udGV4dCBnbENvbnRleHQpCisgICAgICAgIFNoYXJlZEdM
RGF0YShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICAgICAgICAgIDogdGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2xDb250
ZXh0RGF0YU1hcCgpLmFkZChnbENvbnRleHQsIHRoaXMpOworICAgICAgICAgICAgZ2xDb250ZXh0
RGF0YU1hcCgpLmFkZChjb250ZXh0LT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCksIHRoaXMp
OwogICAgICAgICB9CiAKICAgICAgICAgflNoYXJlZEdMRGF0YSgpCkBAIC0xNDIsMzAgKzkyLDMy
IEBAIHN0cnVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsKIAogICAgIFNoYXJlZEdMRGF0YSYgc2hh
cmVkR0xEYXRhKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAqKG1fc2hhcmVkR0xEYXRh
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuICptX3NoYXJlZEdMRGF0YTsKICAgICB9CiAKICAgICB2
b2lkIGluaXRpYWxpemVTdGVuY2lsKCk7CiAKLSAgICBUZXh0dXJlTWFwcGVyR0xEYXRhKCkKLSAg
ICAgICAgOiBQYWludEZsYWdzKDApCisgICAgVGV4dHVyZU1hcHBlckdMRGF0YShHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCkKKyAgICAgICAgOiBjb250ZXh0KGNvbnRleHQpCisgICAgICAgICwg
UGFpbnRGbGFncygwKQogICAgICAgICAsIHByZXZpb3VzUHJvZ3JhbSgwKQogICAgICAgICAsIHRh
cmdldEZyYW1lQnVmZmVyKDApCiAgICAgICAgICwgZGlkTW9kaWZ5U3RlbmNpbChmYWxzZSkKICAg
ICAgICAgLCBwcmV2aW91c1NjaXNzb3JTdGF0ZSgwKQogICAgICAgICAsIHByZXZpb3VzRGVwdGhT
dGF0ZSgwKQotICAgICAgICAsIG1fc2hhcmVkR0xEYXRhKFRleHR1cmVNYXBwZXJHTERhdGE6OlNo
YXJlZEdMRGF0YTo6Y3VycmVudFNoYXJlZEdMRGF0YSgpKQorICAgICAgICAsIG1fc2hhcmVkR0xE
YXRhKFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6Y3VycmVudFNoYXJlZEdMRGF0
YSh0aGlzLT5jb250ZXh0KSkKICAgICB7IH0KIAorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHByb2plY3Rpb25NYXRyaXg7CiAgICAgVGV4
dHVyZU1hcHBlcjo6UGFpbnRGbGFncyBQYWludEZsYWdzOwotICAgIEdMaW50IHByZXZpb3VzUHJv
Z3JhbTsKLSAgICBHTGludCB0YXJnZXRGcmFtZUJ1ZmZlcjsKKyAgICBHQzNEaW50IHByZXZpb3Vz
UHJvZ3JhbTsKKyAgICBHQzNEaW50IHRhcmdldEZyYW1lQnVmZmVyOwogICAgIGJvb2wgZGlkTW9k
aWZ5U3RlbmNpbDsKLSAgICBHTGludCBwcmV2aW91c1NjaXNzb3JTdGF0ZTsKLSAgICBHTGludCBw
cmV2aW91c0RlcHRoU3RhdGU7Ci0gICAgR0xpbnQgdmlld3BvcnRbNF07Ci0gICAgR0xpbnQgcHJl
dmlvdXNTY2lzc29yWzRdOworICAgIEdDM0RpbnQgcHJldmlvdXNTY2lzc29yU3RhdGU7CisgICAg
R0MzRGludCBwcmV2aW91c0RlcHRoU3RhdGU7CisgICAgR0MzRGludCB2aWV3cG9ydFs0XTsKKyAg
ICBHQzNEaW50IHByZXZpb3VzU2Npc3Nvcls0XTsKICAgICBSZWZQdHI8U2hhcmVkR0xEYXRhPiBt
X3NoYXJlZEdMRGF0YTsKICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3VycmVudFN1cmZhY2U7
CiB9OwpAQCAtMTg5LDI1ICsxNDEsMjUgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFj
azo6cG9wKCkKICAgICBjbGlwU3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCi1zdGF0aWMgdm9pZCBz
Y2lzc29yQ2xpcChjb25zdCBJbnRSZWN0JiByZWN0KQorc3RhdGljIHZvaWQgc2Npc3NvckNsaXAo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAg
aWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBHTGludCB2aWV3cG9y
dFs0XTsKLSAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9WSUVXUE9SVCwgdmlld3BvcnQpKTsK
LSAgICBHTF9DTUQoZ2xTY2lzc29yKHJlY3QueCgpLCB2aWV3cG9ydFszXSAtIHJlY3QubWF4WSgp
LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKKyAgICBHQzNEaW50IHZpZXdwb3J0WzRd
OworICAgIGNvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpWSUVXUE9SVCwg
dmlld3BvcnQpOworICAgIGNvbnRleHQtPnNjaXNzb3IocmVjdC54KCksIHZpZXdwb3J0WzNdIC0g
cmVjdC5tYXhZKCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiB9CiAKLXZvaWQgVGV4
dHVyZU1hcHBlckdMOjpDbGlwU3RhY2s6OmFwcGx5KCkKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpD
bGlwU3RhY2s6OmFwcGx5KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogewotICAgIHNjaXNz
b3JDbGlwKGNsaXBTdGF0ZS5zY2lzc29yQm94KTsKLSAgICBHTF9DTUQoZ2xTdGVuY2lsT3AoR0xf
S0VFUCwgR0xfS0VFUCwgR0xfS0VFUCkpOwotICAgIEdMX0NNRChnbFN0ZW5jaWxGdW5jKEdMX0VR
VUFMLCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSwgY2xpcFN0YXRlLnN0ZW5jaWxJbmRleCAt
IDEpKTsKKyAgICBzY2lzc29yQ2xpcChjb250ZXh0LCBjbGlwU3RhdGUuc2Npc3NvckJveCk7Cisg
ICAgY29udGV4dC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQLCBHcmFwaGljc0Nv
bnRleHQzRDo6S0VFUCwgR3JhcGhpY3NDb250ZXh0M0Q6OktFRVApOworICAgIGNvbnRleHQtPnN0
ZW5jaWxGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpFUVVBTCwgY2xpcFN0YXRlLnN0ZW5jaWxJbmRl
eCAtIDEsIGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXggLSAxKTsKICAgICBpZiAoY2xpcFN0YXRlLnN0
ZW5jaWxJbmRleCA9PSAxKQotICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdMX1NURU5DSUxfVEVT
VCkpOworICAgICAgICBjb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X1RFU1QpOwogICAgIGVsc2UKLSAgICAgICAgR0xfQ01EKGdsRW5hYmxlKEdMX1NURU5DSUxfVEVT
VCkpOworICAgICAgICBjb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxf
VEVTVCk7CiB9CiAKIApAQCAtMjIxLDggKzE3Myw4IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMRGF0
YTo6aW5pdGlhbGl6ZVN0ZW5jaWwoKQogICAgIGlmIChkaWRNb2RpZnlTdGVuY2lsKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBHTF9DTUQoZ2xDbGVhclN0ZW5jaWwoMCkpOwotICAgIEdMX0NNRChn
bENsZWFyKEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpOworICAgIGNvbnRleHQtPmNsZWFyU3RlbmNp
bCgwKTsKKyAgICBjb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZG
RVJfQklUKTsKICAgICBkaWRNb2RpZnlTdGVuY2lsID0gdHJ1ZTsKIH0KIApAQCAtMjM2LDEwICsx
ODgsMTQgQEAgQml0bWFwVGV4dHVyZUdMKiB0b0JpdG1hcFRleHR1cmVHTChCaXRtYXBUZXh0dXJl
KiB0ZXh0dXJlKQogCiBUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCgpCiAgICAgOiBU
ZXh0dXJlTWFwcGVyKE9wZW5HTE1vZGUpCi0gICAgLCBtX2RhdGEobmV3IFRleHR1cmVNYXBwZXJH
TERhdGEpCiAgICAgLCBtX2NvbnRleHQoMCkKICAgICAsIG1fZW5hYmxlRWRnZURpc3RhbmNlQW50
aWFsaWFzaW5nKGZhbHNlKQogeworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0
dHJpYnV0ZXM7CisgICAgYXR0cmlidXRlcy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICBhdHRyaWJ1
dGVzLmRlcHRoID0gZmFsc2U7CisgICAgbV9jb250ZXh0M0QgPSBHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlKGF0dHJpYnV0ZXMsIDAgLyogaG9zdFdpbmRvdyAqLywgR3JhcGhpY3NDb250ZXh0M0Q6
OlJlbmRlclRvQ3VycmVudEdMQ29udGV4dCk7CisgICAgbV9kYXRhID0gbmV3IFRleHR1cmVNYXBw
ZXJHTERhdGEobV9jb250ZXh0M0QuZ2V0KCkpOwogfQogCiBUZXh0dXJlTWFwcGVyR0w6OkNsaXBT
dGFjayYgVGV4dHVyZU1hcHBlckdMOjpjbGlwU3RhY2soKQpAQCAtMjQ5LDE1ICsyMDUsOSBAQCBU
ZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjayYgVGV4dHVyZU1hcHBlckdMOjpjbGlwU3RhY2soKQog
CiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5QYWludGluZyhQYWludEZsYWdzIGZsYWdzKQog
ewotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG5vIEdMIGVycm9yIGNvZGUgc3RheXMgZnJvbSBwcmV2
aW91cyBvcGVyYXRpb25zLgotICAgIGdsR2V0RXJyb3IoKTsKLQotICAgIGlmICghaW5pdGlhbGl6
ZU9wZW5HTFNoaW1zKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdMX0NNRChnbEdldEludGVn
ZXJ2KEdMX0NVUlJFTlRfUFJPR1JBTSwgJmRhdGEoKS5wcmV2aW91c1Byb2dyYW0pKTsKLSAgICBk
YXRhKCkucHJldmlvdXNTY2lzc29yU3RhdGUgPSBnbElzRW5hYmxlZChHTF9TQ0lTU09SX1RFU1Qp
OwotICAgIGRhdGEoKS5wcmV2aW91c0RlcHRoU3RhdGUgPSBnbElzRW5hYmxlZChHTF9ERVBUSF9U
RVNUKTsKKyAgICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OkNV
UlJFTlRfUFJPR1JBTSwgJmRhdGEoKS5wcmV2aW91c1Byb2dyYW0pOworICAgIGRhdGEoKS5wcmV2
aW91c1NjaXNzb3JTdGF0ZSA9IG1fY29udGV4dDNELT5pc0VuYWJsZWQoR3JhcGhpY3NDb250ZXh0
M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgZGF0YSgpLnByZXZpb3VzRGVwdGhTdGF0ZSA9IG1fY29u
dGV4dDNELT5pc0VuYWJsZWQoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1QpOwogI2lmIFBM
QVRGT1JNKFFUKQogICAgIGlmIChtX2NvbnRleHQpIHsKICAgICAgICAgUVBhaW50ZXIqIHBhaW50
ZXIgPSBtX2NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwpAQCAtMjY1LDE1ICsyMTUsMTUgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyBmbGFncykKICAg
ICAgICAgcGFpbnRlci0+YmVnaW5OYXRpdmVQYWludGluZygpOwogICAgIH0KICNlbmRpZgotICAg
IGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKTsKLSAgICBnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1Qp
OworICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNU
KTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RF
U1QpOwogICAgIGRhdGEoKS5kaWRNb2RpZnlTdGVuY2lsID0gZmFsc2U7Ci0gICAgR0xfQ01EKGds
RGVwdGhNYXNrKDApKTsKLSAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9WSUVXUE9SVCwgZGF0
YSgpLnZpZXdwb3J0KSk7Ci0gICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfU0NJU1NPUl9CT1gs
IGRhdGEoKS5wcmV2aW91c1NjaXNzb3IpKTsKLSAgICBnbEdldEludGVnZXJ2KEdMX0ZSQU1FQlVG
RkVSX0JJTkRJTkcsICZkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpOworICAgIG1fY29udGV4dDNE
LT5kZXB0aE1hc2soMCk7CisgICAgbV9jb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dDNEOjpWSUVXUE9SVCwgZGF0YSgpLnZpZXdwb3J0KTsKKyAgICBtX2NvbnRleHQzRC0+Z2V0
SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YLCBkYXRhKCkucHJldmlvdXNT
Y2lzc29yKTsKKyAgICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSX0JJTkRJTkcsICZkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpOwogICAgIG1f
Y2xpcFN0YWNrLmluaXQoSW50UmVjdCgwLCAwLCBkYXRhKCkudmlld3BvcnRbMl0sIGRhdGEoKS52
aWV3cG9ydFszXSkpOwotICAgIEdMX0NNRChnbEdldEludGVnZXJ2KEdMX0ZSQU1FQlVGRkVSX0JJ
TkRJTkcsICZkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpKTsKKyAgICBtX2NvbnRleHQzRC0+Z2V0
SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0JJTkRJTkcsICZkYXRhKCku
dGFyZ2V0RnJhbWVCdWZmZXIpOwogICAgIGRhdGEoKS5QYWludEZsYWdzID0gZmxhZ3M7CiAgICAg
YmluZFN1cmZhY2UoMCk7CiB9CkBAIC0yODEsMjIgKzIzMSwyMiBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6YmVnaW5QYWludGluZyhQYWludEZsYWdzIGZsYWdzKQogdm9pZCBUZXh0dXJlTWFwcGVy
R0w6OmVuZFBhaW50aW5nKCkKIHsKICAgICBpZiAoZGF0YSgpLmRpZE1vZGlmeVN0ZW5jaWwpIHsK
LSAgICAgICAgZ2xDbGVhclN0ZW5jaWwoMSk7Ci0gICAgICAgIGdsQ2xlYXIoR0xfU1RFTkNJTF9C
VUZGRVJfQklUKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmNsZWFyU3RlbmNpbCgxKTsKKyAgICAg
ICAgbV9jb250ZXh0M0QtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9C
SVQpOwogICAgIH0KIAotICAgIGdsVXNlUHJvZ3JhbShkYXRhKCkucHJldmlvdXNQcm9ncmFtKTsK
KyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShkYXRhKCkucHJldmlvdXNQcm9ncmFtKTsKIAot
ICAgIGdsU2Npc3NvcihkYXRhKCkucHJldmlvdXNTY2lzc29yWzBdLCBkYXRhKCkucHJldmlvdXNT
Y2lzc29yWzFdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzJdLCBkYXRhKCkucHJldmlvdXNTY2lz
c29yWzNdKTsKKyAgICBtX2NvbnRleHQzRC0+c2Npc3NvcihkYXRhKCkucHJldmlvdXNTY2lzc29y
WzBdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzFdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzJd
LCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzNdKTsKICAgICBpZiAoZGF0YSgpLnByZXZpb3VzU2Np
c3NvclN0YXRlKQotICAgICAgICBnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgICAgICBt
X2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwogICAg
IGVsc2UKLSAgICAgICAgZ2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgICAgIG1fY29u
dGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwogCiAgICAg
aWYgKGRhdGEoKS5wcmV2aW91c0RlcHRoU3RhdGUpCi0gICAgICAgIGdsRW5hYmxlKEdMX0RFUFRI
X1RFU1QpOworICAgICAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9URVNUKTsKICAgICBlbHNlCi0gICAgICAgIGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKTsK
KyAgICAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RF
U1QpOwogCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgaWYgKCFtX2NvbnRleHQpCkBAIC0zMDcsNDAg
KzI1Nyw0MCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZW5kUGFpbnRpbmcoKQogI2VuZGlmCiB9
CiAKLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYgcXVhZFRv
RHJhdywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0qIHNoYWRlclByb2dyYW0sIEdMZW51bSBkcmF3aW5nTW9kZSwg
Ym9vbCBuZWVkc0JsZW5kaW5nKQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdRdWFkKGNvbnN0
IERyYXdRdWFkJiBxdWFkVG9EcmF3LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxW
aWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSogc2hhZGVyUHJvZ3JhbSwgR0Mz
RGVudW0gZHJhd2luZ01vZGUsIGJvb2wgbmVlZHNCbGVuZGluZykKIHsKLSAgICBHTF9DTUQoZ2xF
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwot
ICAgIEdMX0NNRChnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAwKSk7CisgICAgbV9jb250
ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJp
YigpKTsKKyAgICBtX2NvbnRleHQzRC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJS
QVlfQlVGRkVSLCAwKTsKIAotICAgIGNvbnN0IEdMZmxvYXQgcXVhZFtdID0geworICAgIGNvbnN0
IEdDM0RmbG9hdCBxdWFkW10gPSB7CiAgICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBl
ZFRvVW5pdFNxdWFyZS5wMSgpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0
U3F1YXJlLnAxKCkueSgpLAogICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1Vu
aXRTcXVhcmUucDIoKS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFy
ZS5wMigpLnkoKSwKICAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1
YXJlLnAzKCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDMo
KS55KCksCiAgICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5w
NCgpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnA0KCkueSgp
CiAgICAgfTsKLSAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlclByb2dyYW0t
PnZlcnRleEF0dHJpYigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHF1YWQpKTsKKyAgICBt
X2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRy
aWIoKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cihx
dWFkKSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlv
bk1hdHJpeChkYXRhKCkucHJvamVjdGlvbk1hdHJpeCkubXVsdGlwbHkobW9kZWxWaWV3TWF0cml4
KS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgKICAgICAgICAgICAgIHF1YWRUb0RyYXcu
b3JpZ2luYWxUYXJnZXRSZWN0LndpZHRoKCksIDAsIDAsIDAsCiAgICAgICAgICAgICAwLCBxdWFk
VG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC5oZWlnaHQoKSwgMCwgMCwKICAgICAgICAgICAgIDAs
IDAsIDEsIDAsCiAgICAgICAgICAgICBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC54KCks
IHF1YWRUb0RyYXcub3JpZ2luYWxUYXJnZXRSZWN0LnkoKSwgMCwgMSkpOwotICAgIGNvbnN0IEdM
ZmxvYXQgbTRbXSA9IHsKKyAgICBHQzNEZmxvYXQgbTRbXSA9IHsKICAgICAgICAgbWF0cml4Lm0x
MSgpLCBtYXRyaXgubTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAogICAgICAgICBt
YXRyaXgubTIxKCksIG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCiAg
ICAgICAgIG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5t
MzQoKSwKICAgICAgICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwg
bWF0cml4Lm00NCgpCiAgICAgfTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRl
clByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIEdMX0ZBTFNFLCBtNCkpOworICAgIG1fY29u
dGV4dDNELT51bmlmb3JtTWF0cml4NGZ2KHNoYWRlclByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCks
IDEsIGZhbHNlLCBtNCk7CiAKICAgICBpZiAobmVlZHNCbGVuZGluZykgewotICAgICAgICBHTF9D
TUQoZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKSk7Ci0gICAgICAg
IEdMX0NNRChnbEVuYWJsZShHTF9CTEVORCkpOworICAgICAgICBtX2NvbnRleHQzRC0+YmxlbmRG
dW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNf
U1JDX0FMUEhBKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6QkxFTkQpOwogICAgIH0gZWxzZQotICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdMX0JMRU5E
KSk7CisgICAgICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RCk7CiAKLSAgICBHTF9DTUQoZ2xEcmF3QXJyYXlzKGRyYXdpbmdNb2RlLCAwLCA0KSk7Ci0gICAg
R0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleEF0
dHJpYigpKSk7CisgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoZHJhd2luZ01vZGUsIDAsIDQp
OworICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3Jh
bS0+dmVydGV4QXR0cmliKCkpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRl
cihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdpZHRoLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgpCkBAIC0z
NDksMTcgKzI5OSwxNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBD
b2xvciYgY29sb3IsIGZsb2F0IHdpZHRoLCBjb25zdCBGbG9hdFJlYwogICAgICAgICByZXR1cm47
CiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yPiBwcm9n
cmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLnNv
bGlkQ29sb3JQcm9ncmFtKCk7Ci0gICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgp
KSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CiAKICAgICBm
bG9hdCBhbHBoYSA9IGNvbG9yLmFscGhhKCkgLyAyNTUuMDsKLSAgICBHTF9DTUQoZ2xVbmlmb3Jt
NGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLAorICAgIG1fY29udGV4dDNELT51bmlmb3JtNGYo
cHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLAogICAgICAgICAgICAgICAgICAgICAgICAoY29sb3Iu
cmVkKCkgLyAyNTUuMCkgKiBhbHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgKGNvbG9yLmdy
ZWVuKCkgLyAyNTUuMCkgKiBhbHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgKGNvbG9yLmJs
dWUoKSAvIDI1NS4wKSAqIGFscGhhLAotICAgICAgICAgICAgICAgICAgICAgICBhbHBoYSkpOwot
ICAgIEdMX0NNRChnbExpbmVXaWR0aCh3aWR0aCkpOworICAgICAgICAgICAgICAgICAgICAgICBh
bHBoYSk7CisgICAgbV9jb250ZXh0M0QtPmxpbmVXaWR0aCh3aWR0aCk7CiAKLSAgICBkcmF3UXVh
ZCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdMX0xJTkVfTE9P
UCwgY29sb3IuaGFzQWxwaGEoKSk7CisgICAgZHJhd1F1YWQodGFyZ2V0UmVjdCwgbW9kZWxWaWV3
TWF0cml4LCBwcm9ncmFtLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6TElORV9MT09QLCBjb2xv
ci5oYXNBbHBoYSgpKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdSZXBhaW50Q291
bnRlcihpbnQgdmFsdWUsIGludCBwb2ludFNpemUsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBv
aW50LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4KQpAQCAtNDA2
LDcgKzM1Niw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRt
YXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmCiAgICAgZHJhd1RleHR1cmUodGV4
dHVyZUdMLmlkKCksIHRleHR1cmVHTC5pc09wYXF1ZSgpID8gMCA6IFN1cHBvcnRzQmxlbmRpbmcs
IHRleHR1cmVHTC5zaXplKCksIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSwgbWFzaywgZXhw
b3NlZEVkZ2VzKTsKIH0KIAotI2lmIGRlZmluZWQoR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlKQor
I2lmICFVU0UoVEVYTUFQX09QRU5HTF9FU18yKQogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdU
ZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJ
bnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25z
dCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKIHsKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0+IHByb2dyYW07CkBAIC00MTQsMzYgKzM2NCwzNiBAQCB2b2lkIFRleHR1
cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVSZWN0YW5nbGVBUkIodWludDMyX3QgdGV4dHVyZSwgRmxh
Z3MgZmxhZ3MsIGNvbgogICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlJlY3RPcGFjaXR5QW5kTWFzayk7CiAgICAgZWxzZQogICAgICAgICBwcm9n
cmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdl
dFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3RTaW1wbGUpOwot
ICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOworICAgIG1fY29udGV4dDNE
LT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOwogCi0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4
QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xBY3Rp
dmVUZXh0dXJlKEdMX1RFWFRVUkUwKSk7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV9SRUNUQU5HTEVfQVJCLCB0ZXh0dXJlKSk7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTFpKHBy
b2dyYW0tPnNvdXJjZVRleHR1cmVMb2NhdGlvbigpLCAwKSk7CisgICAgbV9jb250ZXh0M0QtPmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2Nv
bnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOworICAg
IG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIHRleHR1
cmUpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVyZUxv
Y2F0aW9uKCksIDApOwogCi0gICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW0tPmZsaXBMb2Nh
dGlvbigpLCAhIShmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSkpOwotICAgIEdMX0NNRChnbFVu
aWZvcm0yZihwcm9ncmFtLT50ZXh0dXJlU2l6ZUxvY2F0aW9uKCksIHRleHR1cmVTaXplLndpZHRo
KCksIHRleHR1cmVTaXplLmhlaWdodCgpKSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihw
cm9ncmFtLT5mbGlwTG9jYXRpb24oKSwgISEoZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVyZSkpOwor
ICAgIG1fY29udGV4dDNELT51bmlmb3JtMmYocHJvZ3JhbS0+dGV4dHVyZVNpemVMb2NhdGlvbigp
LCB0ZXh0dXJlU2l6ZS53aWR0aCgpLCB0ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CiAKICAgICBpZiAo
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24ocHJvZ3Jh
bS0+b3BhY2l0eUxvY2F0aW9uKCkpKQotICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3Jh
bS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPnVu
aWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0eSk7CiAKICAgICBpZiAo
bWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSAmJiBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLT5tYXNrVGV4dHVyZUxv
Y2F0aW9uKCkpKSB7CiAgICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVH
TCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKLSAg
ICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSkpOwotICAgICAgICBHTF9D
TUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKSk7Ci0g
ICAgICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCks
IDEpKTsKLSAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpOworICAg
ICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RTEpOworICAgICAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPmlkKCkpOworICAgICAgICBtX2NvbnRleHQzRC0+
dW5pZm9ybTFpKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSwgMSk7CisgICAgICAgIG1f
Y29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAg
ICAgfQogCiAgICAgYm9vbCBuZWVkc0JsZW5kaW5nID0gKGZsYWdzICYgU3VwcG9ydHNCbGVuZGlu
ZykgfHwgb3BhY2l0eSA8IDAuOTkgfHwgbWFza1RleHR1cmU7Ci0gICAgZHJhd1F1YWQodGFyZ2V0
UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdldCgpLCBHTF9UUklBTkdMRV9GQU4sIG5l
ZWRzQmxlbmRpbmcpOworICAgIGRyYXdRdWFkKHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwg
cHJvZ3JhbS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgbmVlZHNCbGVu
ZGluZyk7CiB9Ci0jZW5kaWYgLy8gZGVmaW5lZChHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUpIAor
I2VuZGlmIC8vICFVU0UoVEVYTUFQX09QRU5HTF9FU18yKQogCiB2b2lkIFRleHR1cmVNYXBwZXJH
TDo6ZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNp
emUmIC8qIHRleHR1cmVTaXplICovLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNv
bnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlLCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpCiB7
Ci0gICAgYm9vbCBuZWVkc0FudGlsaWFpbmcgPSBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlh
c2luZyAmJiAhbW9kZWxWaWV3TWF0cml4LmlzSW50ZWdlclRyYW5zbGF0aW9uKCk7Ci0gICAgaWYg
KG5lZWRzQW50aWxpYWluZyAmJiBkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodGV4dHVyZSwg
ZmxhZ3MsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgbWFza1RleHR1cmUs
IGV4cG9zZWRFZGdlcykpCisgICAgYm9vbCBuZWVkc0FudGlhbGlhaW5nID0gbV9lbmFibGVFZGdl
RGlzdGFuY2VBbnRpYWxpYXNpbmcgJiYgIW1vZGVsVmlld01hdHJpeC5pc0ludGVnZXJUcmFuc2xh
dGlvbigpOworICAgIGlmIChuZWVkc0FudGlhbGlhaW5nICYmIGRyYXdUZXh0dXJlV2l0aEFudGlh
bGlhc2luZyh0ZXh0dXJlLCBmbGFncywgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBvcGFj
aXR5LCBtYXNrVGV4dHVyZSwgZXhwb3NlZEVkZ2VzKSkKICAgICAgICByZXR1cm47CiAKICAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW07CkBAIC00NTEsMTUgKzQw
MSwxNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVy
ZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmCiAgICAgICAgIHByb2dyYW0gPSBkYXRhKCku
c2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3Jh
bShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3BhY2l0eUFuZE1hc2spOwogICAgIGVsc2UK
ICAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpT
aW1wbGUpOwotICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOworICAgIG1f
Y29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOwogCiAgICAgZHJhd1RleHR1cmVk
UXVhZFdpdGhQcm9ncmFtKHByb2dyYW0uZ2V0KCksIHRleHR1cmUsIGZsYWdzLCB0YXJnZXRSZWN0
LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0dXJlKTsKIH0KIAotc3RhdGljIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHZpZXdwb3J0TWF0cml4KCkKK3N0YXRpYyBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCB2aWV3cG9ydE1hdHJpeChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEKQogewot
ICAgIEdMaW50IHZpZXdwb3J0WzRdOwotICAgIEdMX0NNRChnbEdldEludGVnZXJ2KEdMX1ZJRVdQ
T1JULCB2aWV3cG9ydCkpOworICAgIEdDM0RpbnQgdmlld3BvcnRbNF07CisgICAgY29udGV4dDNE
LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQsIHZpZXdwb3J0KTsKIAog
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKICAgICBtYXRyaXgudHJhbnNsYXRlM2Qo
dmlld3BvcnRbMF0sIHZpZXdwb3J0WzFdLCAwKTsKQEAgLTU1Niw3ICs1MDYsNyBAQCBib29sIFRl
eHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1
cmUsIEZsYWdzIGZsYWdzLAogICAgIC8vIGFudGlhbGlhc2luZy4gTm90ZSBoZXJlIHRoYXQgd2Ug
YXJlIGFsc28gaW5jbHVkaW5nIHRoZSB2aWV3cG9ydCBtYXRyaXggKHdoaWNoCiAgICAgLy8gdHJh
bnNsYXRlcyBmcm9tIG5vcm1hbGl6ZWQgZGV2aWNlIGNvb3JkaW5hdGVzIHRvIHNjcmVlbiBjb29y
ZGluYXRlcyksIGJlY2F1c2UgdGhlc2UKICAgICAvLyB2YWx1ZXMgYXJlIGNvbnN1bWVkIGluIHRo
ZSBmcmFnbWVudCBzaGFkZXIsIHdoaWNoIHdvcmtzIGluIHNjcmVlbiBjb29yZGluYXRlcy4KLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHZpZXdwb3J0TWF0
cml4KCkubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRy
aXgpKS5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgpLnRvMmRUcmFuc2Zvcm0oKTsKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHZpZXdwb3J0TWF0cml4KG1f
Y29udGV4dDNELmdldCgpKS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCkucHJv
amVjdGlvbk1hdHJpeCkpLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkudG8yZFRyYW5zZm9ybSgp
OwogICAgIGlmICghc2NyZWVuU3BhY2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBGbG9hdFF1YWQgcXVhZEluU2NyZWVuU3BhY2UgPSBzY3JlZW5T
cGFjZVRyYW5zZm9ybS5tYXBRdWFkKG9yaWdpbmFsVGFyZ2V0UmVjdCk7CkBAIC01ODAsOCArNTMw
LDggQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1
aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywKICAgICBxdWFkVG9FZGdlQXJyYXkoaW5mbGF0
ZVF1YWQocXVhZEluU2NyZWVuU3BhY2UuYm91bmRpbmdCb3goKSwgIGluZmxhdGlvbkRpc3RhbmNl
KSwgdGFyZ2V0UXVhZEVkZ2VzICsgMTIpOwogCiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0
YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmFudGlhbGlhc2luZ05vTWFza1Byb2dyYW0o
KTsKLSAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpKTsKLSAgICBHTF9DTUQo
Z2xVbmlmb3JtM2Z2KHByb2dyYW0tPmV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0
aW9uKCksIDgsIHRhcmdldFF1YWRFZGdlcykpOworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFt
KHByb2dyYW0tPmlkKCkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtM2Z2KHByb2dyYW0tPmV4
cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uKCksIDgsIHRhcmdldFF1YWRFZGdl
cyk7CiAKICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4
dHVyZSwgZmxhZ3MsIERyYXdRdWFkKG9yaWdpbmFsVGFyZ2V0UmVjdCwgZXhwYW5kZWRRdWFkSW5U
ZXh0dXJlQ29vcmRpbmF0ZXMpLCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIDAgLyogbWFza1Rl
eHR1cmUgKi8pOwogICAgIHJldHVybiB0cnVlOwpAQCAtNTg5LDI2ICs1MzksMjYgQEAgYm9vbCBU
ZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0
dXJlLCBGbGFncyBmbGFncywKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlZFF1
YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSogcHJvZ3JhbSwgdWludDMy
X3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IERyYXdRdWFkJiBxdWFkVG9EcmF3LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBj
b25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKIHsKLSAgICBHTF9DTUQoZ2xFbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChn
bEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKLSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCB0ZXh0dXJlKSk7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW0t
PnNvdXJjZVRleHR1cmVMb2NhdGlvbigpLCAwKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZl
cnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQz
RC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOworICAgIG1fY29u
dGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVy
ZSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5zb3VyY2VUZXh0dXJlTG9j
YXRpb24oKSwgMCk7CiAKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbS0+ZmxpcExvY2F0
aW9uKCksICEhKGZsYWdzICYgU2hvdWxkRmxpcFRleHR1cmUpKSk7CisgICAgbV9jb250ZXh0M0Qt
PnVuaWZvcm0xZihwcm9ncmFtLT5mbGlwTG9jYXRpb24oKSwgISEoZmxhZ3MgJiBTaG91bGRGbGlw
VGV4dHVyZSkpOwogCiAgICAgaWYgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlk
VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpKSkKLSAgICAgICAgR0xf
Q01EKGdsVW5pZm9ybTFmKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5KSk7Cisg
ICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCks
IG9wYWNpdHkpOwogCiAgICAgaWYgKG1hc2tUZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlk
KCkgJiYgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24o
cHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpKSkgewogICAgICAgICBjb25zdCBCaXRtYXBU
ZXh0dXJlR0wqIG1hc2tUZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJl
R0wqPihtYXNrVGV4dHVyZSk7Ci0gICAgICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVY
VFVSRTEpKTsKLSAgICAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbWFz
a1RleHR1cmVHTC0+aWQoKSkpOwotICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+
bWFza1RleHR1cmVMb2NhdGlvbigpLCAxKSk7Ci0gICAgICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1
cmUoR0xfVEVYVFVSRTApKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKTsK
KyAgICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0
aW9uKCksIDEpOworICAgICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRTApOwogICAgIH0KIAogICAgIGJvb2wgbmVlZHNCbGVuZGluZyA9IChm
bGFncyAmIFN1cHBvcnRzQmxlbmRpbmcpIHx8IG9wYWNpdHkgPCAwLjk5IHx8IG1hc2tUZXh0dXJl
OwotICAgIGRyYXdRdWFkKHF1YWRUb0RyYXcsIG1vZGVsVmlld01hdHJpeCwgcHJvZ3JhbSwgR0xf
VFJJQU5HTEVfRkFOLCBuZWVkc0JsZW5kaW5nKTsKKyAgICBkcmF3UXVhZChxdWFkVG9EcmF3LCBt
b2RlbFZpZXdNYXRyaXgsIHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4s
IG5lZWRzQmxlbmRpbmcpOwogfQogCiBib29sIEJpdG1hcFRleHR1cmVHTDo6Y2FuUmV1c2VXaXRo
KGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSwgRmxhZ3MpCkBAIC02MTksNyArNTY5LDcgQEAg
Ym9vbCBCaXRtYXBUZXh0dXJlR0w6OmNhblJldXNlV2l0aChjb25zdCBJbnRTaXplJiBjb250ZW50
c1NpemUsIEZsYWdzKQogI2lmIE9TKERBUldJTikKICNkZWZpbmUgREVGQVVMVF9URVhUVVJFX1BJ
WEVMX1RSQU5TRkVSX1RZUEUgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWCiAjZWxzZQotI2Rl
ZmluZSBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSBHTF9VTlNJR05FRF9CWVRF
CisjZGVmaW5lIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFCiAjZW5kaWYKIAogc3RhdGljIGJvb2wgZHJpdmVyU3VwcG9y
dHNTdWJJbWFnZSgpCkBAIC02MzQsMzAgKzU4NCwzMSBAQCBzdGF0aWMgYm9vbCBkcml2ZXJTdXBw
b3J0c1N1YkltYWdlKCkKIAogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmRpZFJlc2V0KCkKIHsKKyAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGlj
c0NvbnRleHQzRCgpOwogICAgIGlmICghbV9pZCkKLSAgICAgICAgR0xfQ01EKGdsR2VuVGV4dHVy
ZXMoMSwgJm1faWQpKTsKLQorICAgICAgICBtX2lkID0gY29udGV4dDNELT5jcmVhdGVUZXh0dXJl
KCk7CiAgICAgbV9zaG91bGRDbGVhciA9IHRydWU7CiAgICAgaWYgKG1fdGV4dHVyZVNpemUgPT0g
Y29udGVudFNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV90ZXh0dXJlU2l6ZSA9IGNv
bnRlbnRTaXplKCk7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9p
ZCkpOwotICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpKTsKLSAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKSk7Ci0gICAgR0xf
Q01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xf
Q0xBTVBfVE9fRURHRSkpOwotICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpKTsKLSAgICBHTF9DTUQoZ2xU
ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIG1fdGV4dHVyZVNpemUud2lkdGgo
KSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgREVGQVVMVF9URVhUVVJFX1BJ
WEVMX1RSQU5TRkVSX1RZUEUsIDApKTsKKyAgICBjb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2lkKTsKKyAgICBjb250ZXh0M0QtPnRleFBhcmFt
ZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIGNvbnRl
eHQzRC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVB
Uik7CisgICAgY29udGV4dDNELT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4
dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBjb250ZXh0M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBf
VCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGNvbnRleHQzRC0+dGV4
SW1hZ2UyRERpcmVjdChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWln
aHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9U
UkFOU0ZFUl9UWVBFLCAwKTsKIH0KIAogCiB2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29u
dGVudHMoY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qg
SW50UG9pbnQmIHNvdXJjZU9mZnNldCwgaW50IGJ5dGVzUGVyTGluZSkKIHsKLSAgICBHTF9DTUQo
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKSk7CisgICAgR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAg
ICBjb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBt
X2lkKTsKIAogICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OwogICAgIGlmIChi
eXRlc1BlckxpbmUgPT0gdGFyZ2V0UmVjdC53aWR0aCgpICogYnl0ZXNQZXJQaXhlbCAmJiBzb3Vy
Y2VPZmZzZXQgPT0gSW50UG9pbnQ6Onplcm8oKSkgewotICAgICAgICBHTF9DTUQoZ2xUZXhTdWJJ
bWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwg
dGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBERUZBVUxU
X1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgKGNvbnN0IGNoYXIqKWRhdGEpKTsKKyAgICAg
ICAgY29udGV4dDNELT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwg
dGFyZ2V0UmVjdC5oZWlnaHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIERFRkFVTFRfVEVY
VFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29uc3QgY2hhciopZGF0YSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTY3NSwxOSArNjI2LDE5IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdM
Ojp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRS
ZWN0CiAgICAgICAgICAgICBkc3QgKz0gdGFyZ2V0Qnl0ZXNQZXJMaW5lOwogICAgICAgICB9CiAK
LSAgICAgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRS
ZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5o
ZWlnaHQoKSwgR0xfUkdCQSwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIHRl
bXBvcmFyeURhdGEuZGF0YSgpKSk7CisgICAgICAgIGNvbnRleHQzRC0+dGV4U3ViSW1hZ2UyRChH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJl
Y3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgdGVt
cG9yYXJ5RGF0YS5kYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAjaWYgIWRlZmlu
ZWQoVEVYTUFQX09QRU5HTF9FU18yKQogICAgIC8vIFVzZSB0aGUgT3BlbkdMIHN1Yi1pbWFnZSBl
eHRlbnNpb24sIG5vdyB0aGF0IHdlIGtub3cgaXQncyBhdmFpbGFibGUuCi0gICAgR0xfQ01EKGds
UGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIGJ5dGVzUGVyTGluZSAvIGJ5dGVzUGVy
UGl4ZWwpKTsKLSAgICBHTF9DTUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCBz
b3VyY2VPZmZzZXQueSgpKSk7Ci0gICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NL
SVBfUElYRUxTLCBzb3VyY2VPZmZzZXQueCgpKSk7Ci0gICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2Uy
RChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdl
dFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgR0xfUkdCQSwgREVGQVVMVF9URVhU
VVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIChjb25zdCBjaGFyKilkYXRhKSk7Ci0gICAgR0xfQ01E
KGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIDApKTsKLSAgICBHTF9DTUQoZ2xQ
aXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCAwKSk7Ci0gICAgR0xfQ01EKGdsUGl4ZWxT
dG9yZWkoR0xfVU5QQUNLX1NLSVBfUElYRUxTLCAwKSk7CisgICAgY29udGV4dDNELT5waXhlbFN0
b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgYnl0ZXNQZXJMaW5lIC8gYnl0ZXNQZXJQaXhlbCk7
CisgICAgY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCBzb3VyY2VP
ZmZzZXQueSgpKTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJ
WEVMUywgc291cmNlT2Zmc2V0LngoKSk7CisgICAgY29udGV4dDNELT50ZXhTdWJJbWFnZTJEKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVj
dC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29u
c3QgY2hhciopZGF0YSk7CisgICAgY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9X
X0xFTkdUSCwgMCk7CisgICAgY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9S
T1dTLCAwKTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJWEVM
UywgMCk7CiAjZW5kaWYKIH0KIApAQCAtNzEyLDE5ICs2NjMsMTkgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmRyYXdGaWx0ZXJlZChjb25zdCBCaXRtYXBUZXh0dXJlJiBzb3VyY2VUZXh0dXJlLCBj
b25zdCBCaXQKIAogICAgIHByb2dyYW0tPnByZXBhcmUoZmlsdGVyLCBwYXNzLCBzb3VyY2VUZXh0
dXJlLmNvbnRlbnRTaXplKCksIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KGNv
bnRlbnRUZXh0dXJlKS5pZCgpKTsKIAotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4
QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbEFj
dGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKLSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihzb3VyY2VUZXh0
dXJlKS5pZCgpKSk7Ci0gICAgZ2xVbmlmb3JtMWkocHJvZ3JhbS0+dGV4dHVyZVVuaWZvcm0oKSwg
MCk7Ci0gICAgY29uc3QgR0xmbG9hdCB0YXJnZXRWZXJ0aWNlc1tdID0gey0xLCAtMSwgMSwgLTEs
IDEsIDEsIC0xLCAxfTsKLSAgICBjb25zdCBHTGZsb2F0IHNvdXJjZVZlcnRpY2VzW10gPSB7MCwg
MCwgMSwgMCwgMSwgMSwgMCwgMX07Ci0gICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihw
cm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB0YXJnZXRW
ZXJ0aWNlcykpOwotICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dGV4
Q29vcmRBdHRyaWIoKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCBzb3VyY2VWZXJ0aWNlcykp
OwotICAgIEdMX0NNRChnbERpc2FibGUoR0xfQkxFTkQpKTsKLSAgICBHTF9DTUQoZ2xEcmF3QXJy
YXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpOwotICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbERpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigpKSk7CisgICAgbV9j
b250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigp
KTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4
Q29vcmRBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkUwKTsKKyAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVH
TCY+KHNvdXJjZVRleHR1cmUpLmlkKCkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJv
Z3JhbS0+dGV4dHVyZVVuaWZvcm0oKSwgMCk7CisgICAgY29uc3QgR0MzRGZsb2F0IHRhcmdldFZl
cnRpY2VzW10gPSB7LTEsIC0xLCAxLCAtMSwgMSwgMSwgLTEsIDF9OworICAgIGNvbnN0IEdDM0Rm
bG9hdCBzb3VyY2VWZXJ0aWNlc1tdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9OworICAgIG1f
Y29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAy
LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHRhcmdldFZl
cnRpY2VzKSk7CisgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+
dGV4Q29vcmRBdHRyaWIoKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwg
R0MzRGludHB0cihzb3VyY2VWZXJ0aWNlcykpOworICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7CisgICAgbV9jb250ZXh0M0QtPmRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9j
b250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT50ZXhDb29yZEF0dHJp
YigpKTsKIH0KIAogUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBCaXRtYXBUZXh0dXJlR0w6OmFw
cGx5RmlsdGVycyhjb25zdCBCaXRtYXBUZXh0dXJlJiBjb250ZW50VGV4dHVyZSwgY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYgZmlsdGVycykKQEAgLTc2NSwxNyArNzE2LDE4IEBAIHZvaWQgQml0bWFw
VGV4dHVyZUdMOjppbml0aWFsaXplU3RlbmNpbCgpCiB7CiAgICAgaWYgKG1fcmJvKQogICAgICAg
ICByZXR1cm47Ci0gICAgR0xfQ01EKGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9yYm8pKTsKLSAg
ICBHTF9DTUQoZ2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9yYm8pKTsKKyAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGlj
c0NvbnRleHQzRCgpOworICAgIG1fcmJvID0gY29udGV4dDNELT5jcmVhdGVSZW5kZXJidWZmZXIo
KTsKKyAgICBjb250ZXh0M0QtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUiwgbV9yYm8pOwogI2lmZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgotICAgIEdMX0NN
RChnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9TVEVOQ0lMX0lOREVY
OCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKSk7CisgICAg
Y29udGV4dDNELT5yZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVYOCwgbV90ZXh0dXJlU2l6ZS53
aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsKICNlbHNlCi0gICAgR0xfQ01EKGdsUmVu
ZGVyYnVmZmVyU3RvcmFnZShHTF9SRU5ERVJCVUZGRVIsIEdMX0RFUFRIX1NURU5DSUwsIG1fdGV4
dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSkpOworICAgIGNvbnRleHQz
RC0+cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBt
X3RleHR1cmVTaXplLmhlaWdodCgpKTsKICNlbmRpZgotICAgIEdMX0NNRChnbEJpbmRSZW5kZXJi
dWZmZXIoR0xfUkVOREVSQlVGRkVSLCAwKSk7Ci0gICAgR0xfQ01EKGdsRnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfUkVOREVS
QlVGRkVSLCBtX3JibykpOwotICAgIEdMX0NNRChnbENsZWFyU3RlbmNpbCgwKSk7Ci0gICAgR0xf
Q01EKGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJfQklUKSk7CisgICAgY29udGV4dDNELT5iaW5k
UmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOworICAgIGNv
bnRleHQzRC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX3Jibyk7CisgICAgY29udGV4dDNELT5jbGVhclN0ZW5j
aWwoMCk7CisgICAgY29udGV4dDNELT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9C
VUZGRVJfQklUKTsKIH0KIAogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmNsZWFySWZOZWVkZWQoKQpA
QCAtNzgzLDEwICs3MzUsMTEgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmNsZWFySWZOZWVkZWQo
KQogICAgIGlmICghbV9zaG91bGRDbGVhcikKICAgICAgICAgcmV0dXJuOwogCisgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0
M0QoKTsKICAgICBtX2NsaXBTdGFjay5pbml0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV90
ZXh0dXJlU2l6ZSkpOwotICAgIG1fY2xpcFN0YWNrLmFwcGx5KCk7Ci0gICAgR0xfQ01EKGdsQ2xl
YXJDb2xvcigwLCAwLCAwLCAwKSk7Ci0gICAgR0xfQ01EKGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVS
X0JJVCkpOworICAgIG1fY2xpcFN0YWNrLmFwcGx5KGNvbnRleHQzRCk7CisgICAgY29udGV4dDNE
LT5jbGVhckNvbG9yKDAsIDAsIDAsIDApOworICAgIGNvbnRleHQzRC0+Y2xlYXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOwogICAgIG1fc2hvdWxkQ2xlYXIgPSBmYWxzZTsK
IH0KIApAQCAtNzk1LDMzICs3NDgsMzYgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmNyZWF0ZUZi
b0lmTmVlZGVkKCkKICAgICBpZiAobV9mYm8pCiAgICAgICAgIHJldHVybjsKIAotICAgIEdMX0NN
RChnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pKTsKLSAgICBHTF9DTUQoZ2xCaW5kRnJhbWVi
dWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKSk7Ci0gICAgR0xfQ01EKGdsRnJhbWVidWZmZXJU
ZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJF
XzJELCBpZCgpLCAwKSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4
dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBtX2ZibyA9IGNvbnRleHQzRC0+
Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBjb250ZXh0M0QtPmJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICBjb250ZXh0M0QtPmZyYW1l
YnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgaWQoKSwgMCk7CiAgICAgbV9zaG91bGRDbGVhciA9IHRydWU7CiB9CiAKIHZvaWQgQml0bWFw
VGV4dHVyZUdMOjpiaW5kKCkKIHsKLSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCAwKSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1h
cHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBjb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKICAgICBjcmVhdGVGYm9JZk5lZWRlZCgp
OwotICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pKTsK
LSAgICBHTF9DTUQoZ2xWaWV3cG9ydCgwLCAwLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4
dHVyZVNpemUuaGVpZ2h0KCkpKTsKKyAgICBjb250ZXh0M0QtPmJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICBjb250ZXh0M0QtPnZpZXdw
b3J0KDAsIDAsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7
CiAgICAgY2xlYXJJZk5lZWRlZCgpOwogICAgIG1fdGV4dHVyZU1hcHBlci0+ZGF0YSgpLnByb2pl
Y3Rpb25NYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KG1fdGV4dHVyZVNpemUsIHRydWUg
LyogbWlycm9yZWQgKi8pOwotICAgIG1fY2xpcFN0YWNrLmFwcGx5KCk7CisgICAgbV9jbGlwU3Rh
Y2suYXBwbHkoY29udGV4dDNEKTsKIH0KIAogQml0bWFwVGV4dHVyZUdMOjp+Qml0bWFwVGV4dHVy
ZUdMKCkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0dXJlTWFw
cGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOwogICAgIGlmIChtX2lkKQotICAgICAgICBHTF9DTUQo
Z2xEZWxldGVUZXh0dXJlcygxLCAmbV9pZCkpOworICAgICAgICBjb250ZXh0M0QtPmRlbGV0ZVRl
eHR1cmUobV9pZCk7CiAKICAgICBpZiAobV9mYm8pCi0gICAgICAgIEdMX0NNRChnbERlbGV0ZUZy
YW1lYnVmZmVycygxLCAmbV9mYm8pKTsKKyAgICAgICAgY29udGV4dDNELT5kZWxldGVGcmFtZWJ1
ZmZlcihtX2Zibyk7CiAKICAgICBpZiAobV9yYm8pCi0gICAgICAgIEdMX0NNRChnbERlbGV0ZVJl
bmRlcmJ1ZmZlcnMoMSwgJm1fcmJvKSk7CisgICAgICAgIGNvbnRleHQzRC0+ZGVsZXRlUmVuZGVy
YnVmZmVyKG1fcmJvKTsKIH0KIAogYm9vbCBCaXRtYXBUZXh0dXJlR0w6OmlzVmFsaWQoKSBjb25z
dApAQCAtODQxLDExICs3OTcsMTEgQEAgVGV4dHVyZU1hcHBlckdMOjp+VGV4dHVyZU1hcHBlckdM
KCkKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJpbmREZWZhdWx0U3VyZmFjZSgpCiB7Ci0gICAg
R0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBkYXRhKCkudGFyZ2V0RnJh
bWVCdWZmZXIpKTsKKyAgICBtX2NvbnRleHQzRC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKTsKICAgICBJbnRT
aXplIHZpZXdwb3J0U2l6ZShkYXRhKCkudmlld3BvcnRbMl0sIGRhdGEoKS52aWV3cG9ydFszXSk7
CiAgICAgZGF0YSgpLnByb2plY3Rpb25NYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KHZp
ZXdwb3J0U2l6ZSwgZGF0YSgpLlBhaW50RmxhZ3MgJiBQYWludGluZ01pcnJvcmVkKTsKLSAgICBH
TF9DTUQoZ2xWaWV3cG9ydChkYXRhKCkudmlld3BvcnRbMF0sIGRhdGEoKS52aWV3cG9ydFsxXSwg
dmlld3BvcnRTaXplLndpZHRoKCksIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSkpOwotICAgIG1fY2xp
cFN0YWNrLmFwcGx5KCk7CisgICAgbV9jb250ZXh0M0QtPnZpZXdwb3J0KGRhdGEoKS52aWV3cG9y
dFswXSwgZGF0YSgpLnZpZXdwb3J0WzFdLCB2aWV3cG9ydFNpemUud2lkdGgoKSwgdmlld3BvcnRT
aXplLmhlaWdodCgpKTsKKyAgICBtX2NsaXBTdGFjay5hcHBseShtX2NvbnRleHQzRC5nZXQoKSk7
CiAgICAgZGF0YSgpLmN1cnJlbnRTdXJmYWNlLmNsZWFyKCk7CiB9CiAKQEAgLTg3NSw3ICs4MzEs
NyBAQCBib29sIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5TY2lzc29yQ2xpcChjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBjbGlwU3RhY2soKS5jdXJyZW50KCkuc2Npc3NvckJveC5pbnRlcnNlY3QocmVjdCk7Ci0gICAg
Y2xpcFN0YWNrKCkuYXBwbHkoKTsKKyAgICBjbGlwU3RhY2soKS5hcHBseShtX2NvbnRleHQzRC5n
ZXQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTg4OSwxMCArODQ1LDEwIEBAIHZvaWQg
VGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1v
ZGVsVmlld01hdHJpeCwgY29uCiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2ltcGxl
KTsKIAotICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOwotICAgIEdMX0NN
RChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0g
ICAgY29uc3QgR0xmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9Owot
ICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4QXR0cmliKCks
IDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5pdFJlY3QpKTsKKyAgICBtX2NvbnRleHQzRC0+
dXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4
QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIGNvbnN0IEdDM0RmbG9h
dCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9OworICAgIG1fY29udGV4dDNE
LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHVuaXRSZWN0KSk7CiAKICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRh
KCkucHJvamVjdGlvbk1hdHJpeCkKICAgICAgICAgICAgIC5tdWx0aXBseShtb2RlbFZpZXdNYXRy
aXgpCkBAIC05MDEsMTQgKzg1NywxNCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlw
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogICAgICAg
ICAgICAgICAgIDAsIDAsIDEsIDAsCiAgICAgICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCksIHRh
cmdldFJlY3QueSgpLCAwLCAxKSk7CiAKLSAgICBjb25zdCBHTGZsb2F0IG00W10gPSB7CisgICAg
Y29uc3QgR0MzRGZsb2F0IG00W10gPSB7CiAgICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0x
MigpLCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKICAgICAgICAgbWF0cml4Lm0yMSgpLCBt
YXRyaXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAogICAgICAgICBtYXRyaXgu
bTMxKCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCiAgICAgICAg
IG1hdHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQog
ICAgIH07CiAKLSAgICBjb25zdCBHTGZsb2F0IG00YWxsW10gPSB7CisgICAgY29uc3QgR0MzRGZs
b2F0IG00YWxsW10gPSB7CiAgICAgICAgIDIsIDAsIDAsIDAsCiAgICAgICAgIDAsIDIsIDAsIDAs
CiAgICAgICAgIDAsIDAsIDEsIDAsCkBAIC05MTcsNDMgKzg3Myw0MiBAQCB2b2lkIFRleHR1cmVN
YXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdN
YXRyaXgsIGNvbgogCiAgICAgaW50JiBzdGVuY2lsSW5kZXggPSBjbGlwU3RhY2soKS5jdXJyZW50
KCkuc3RlbmNpbEluZGV4OwogCi0gICAgR0xfQ01EKGdsRW5hYmxlKEdMX1NURU5DSUxfVEVTVCkp
OworICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVT
VCk7CiAKICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgZG8gYW55IGFjdHVhbCBkcmF3aW5nLgot
ICAgIEdMX0NNRChnbFN0ZW5jaWxGdW5jKEdMX05FVkVSLCBzdGVuY2lsSW5kZXgsIHN0ZW5jaWxJ
bmRleCkpOworICAgIG1fY29udGV4dDNELT5zdGVuY2lsRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6
TkVWRVIsIHN0ZW5jaWxJbmRleCwgc3RlbmNpbEluZGV4KTsKIAogICAgIC8vIE9wZXJhdGUgb25s
eSBvbiB0aGUgc3RlbmNpbEluZGV4IGFuZCBhYm92ZS4KLSAgICBHTF9DTUQoZ2xTdGVuY2lsTWFz
aygweGZmICYgfihzdGVuY2lsSW5kZXggLSAxKSkpOworICAgIG1fY29udGV4dDNELT5zdGVuY2ls
TWFzaygweGZmICYgfihzdGVuY2lsSW5kZXggLSAxKSk7CiAKICAgICAvLyBGaXJzdCBjbGVhciB0
aGUgZW50aXJlIGJ1ZmZlciBhdCB0aGUgY3VycmVudCBpbmRleC4KLSAgICBHTF9DTUQoZ2xVbmlm
b3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIEdMX0ZBTFNFLCBtNGFs
bCkpOwotICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9aRVJPLCBHTF9aRVJPLCBHTF9aRVJPKSk7
Ci0gICAgR0xfQ01EKGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpKTsKKyAgICBt
X2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAx
LCBmYWxzZSwgY29uc3RfY2FzdDxHQzNEZmxvYXQqPihtNGFsbCkpOworICAgIG1fY29udGV4dDNE
LT5zdGVuY2lsT3AoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpa
RVJPLCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTyk7CisgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJh
eXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7CiAKICAgICAvLyBOb3cg
YXBwbHkgdGhlIGN1cnJlbnQgaW5kZXggdG8gdGhlIG5ldyBxdWFkLgotICAgIEdMX0NNRChnbFN0
ZW5jaWxPcChHTF9SRVBMQUNFLCBHTF9SRVBMQUNFLCBHTF9SRVBMQUNFKSk7Ci0gICAgR0xfQ01E
KGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBHTF9GQUxT
RSwgbTQpKTsKLSAgICBHTF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkp
OworICAgIG1fY29udGV4dDNELT5zdGVuY2lsT3AoR3JhcGhpY3NDb250ZXh0M0Q6OlJFUExBQ0Us
IEdyYXBoaWNzQ29udGV4dDNEOjpSRVBMQUNFLCBHcmFwaGljc0NvbnRleHQzRDo6UkVQTEFDRSk7
CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+bWF0cml4TG9jYXRp
b24oKSwgMSwgZmFsc2UsIGNvbnN0X2Nhc3Q8R0MzRGZsb2F0Kj4obTQpKTsKKyAgICBtX2NvbnRl
eHQzRC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsK
IAogICAgIC8vIENsZWFyIHRoZSBzdGF0ZS4KLSAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xTdGVuY2ls
TWFzaygwKSk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9n
cmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxNYXNrKDApOwog
CiAgICAgLy8gSW5jcmVhc2Ugc3RlbmNpbEluZGV4IGFuZCBhcHBseSBzdGVuY2lsIHRlc3Rpbmcu
CiAgICAgc3RlbmNpbEluZGV4ICo9IDI7Ci0gICAgY2xpcFN0YWNrKCkuYXBwbHkoKTsKKyAgICBj
bGlwU3RhY2soKS5hcHBseShtX2NvbnRleHQzRC5nZXQoKSk7CiB9CiAKIHZvaWQgVGV4dHVyZU1h
cHBlckdMOjplbmRDbGlwKCkKIHsKICAgICBjbGlwU3RhY2soKS5wb3AoKTsKLSAgICBjbGlwU3Rh
Y2soKS5hcHBseSgpOworICAgIGNsaXBTdGFjaygpLmFwcGx5KG1fY29udGV4dDNELmdldCgpKTsK
IH0KIAogUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRl
eHR1cmUoKQogewotICAgIEJpdG1hcFRleHR1cmVHTCogdGV4dHVyZSA9IG5ldyBCaXRtYXBUZXh0
dXJlR0woKTsKLSAgICB0ZXh0dXJlLT5zZXRUZXh0dXJlTWFwcGVyKHRoaXMpOworICAgIEJpdG1h
cFRleHR1cmVHTCogdGV4dHVyZSA9IG5ldyBCaXRtYXBUZXh0dXJlR0wodGhpcyk7CiAgICAgcmV0
dXJuIGFkb3B0UmVmKHRleHR1cmUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKaW5kZXggMDc2ZTY1
ZjczNzc2MjYxZjBhM2I5M2JiODU3M2E1MDVkZTljMDE3MC4uOGE3MmQ2N2FmOWVlZDJjZDZiOTBl
ZTgxYTg1YzgyYTk4MDhlZDlkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaApAQCAtMjMsOCArMjMsOCBA
QAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkZsb2F0UXVh
ZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5o
IgotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgog
I2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKQEAgLTM4LDcgKzM4LDYgQEAgY2xh
c3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW07CiBjbGFzcyBUZXh0dXJlTWFwcGVyR0wgOiBw
dWJsaWMgVGV4dHVyZU1hcHBlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4
dHVyZU1hcHBlckdMPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBl
ckdMKTsgfQotICAgIFRleHR1cmVNYXBwZXJHTCgpOwogICAgIHZpcnR1YWwgflRleHR1cmVNYXBw
ZXJHTCgpOwogCiAgICAgZW51bSBGbGFnIHsKQEAgLTU0LDcgKzUzLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25z
dCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKSBPVkVS
UklERTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgRmxh
Z3MsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9w
YWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlLCB1bnNpZ25lZCBleHBvc2Vk
RWRnZXMgPSBBbGxFZGdlcyk7CiAKLSNpZiBkZWZpbmVkKEdMX0FSQl90ZXh0dXJlX3JlY3Rhbmds
ZSkKKyNpZiAhVVNFKFRFWE1BUF9PUEVOR0xfRVNfMikKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1Rl
eHR1cmVSZWN0YW5nbGVBUkIodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MsIGNvbnN0IEludFNpemUm
IHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1h
cFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKICNlbmRpZgogCkBAIC02Niw2ICs2NSw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIEludFNpemUgbWF4VGV4dHVyZVNpemUoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBJbnRTaXplKDIwMDAsIDIwMDApOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJp
dG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgT1ZFUlJJREUgeyByZXR1cm4gbV9jb250ZXh0
OyB9CisgICAgaW5saW5lIEdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQzRCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGV4dDNELmdldCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldEdy
YXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpIE9WRVJSSURFIHsgbV9jb250
ZXh0ID0gY29udGV4dDsgfQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQpAQCAtNzUsNyArNzUs
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRFbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmco
Ym9vbCBlbmFibGVkKSB7IG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nID0gZW5hYmxl
ZDsgfQogCiBwcml2YXRlOgotCiAgICAgc3RydWN0IENsaXBTdGF0ZSB7CiAgICAgICAgIEludFJl
Y3Qgc2Npc3NvckJveDsKICAgICAgICAgaW50IHN0ZW5jaWxJbmRleDsKQEAgLTg5LDcgKzg4LDcg
QEAgcHJpdmF0ZToKICAgICBwdWJsaWM6CiAgICAgICAgIHZvaWQgcHVzaCgpOwogICAgICAgICB2
b2lkIHBvcCgpOwotICAgICAgICB2b2lkIGFwcGx5KCk7CisgICAgICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0M0QqKTsKICAgICAgICAgaW5saW5lIENsaXBTdGF0ZSYgY3VycmVudCgpIHsg
cmV0dXJuIGNsaXBTdGF0ZTsgfQogICAgICAgICB2b2lkIGluaXQoY29uc3QgSW50UmVjdCYpOwog
CkBAIC0xMDksMTYgKzEwOCwxOSBAQCBwcml2YXRlOgogICAgICAgICBGbG9hdFF1YWQgdGFyZ2V0
UmVjdE1hcHBlZFRvVW5pdFNxdWFyZTsKICAgICB9OwogCisgICAgVGV4dHVyZU1hcHBlckdMKCk7
CisKICAgICBib29sIGRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJl
LCBGbGFncywgY29uc3QgRmxvYXRSZWN0JiBvcmlnaW5hbFRhcmdldFJlY3QsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJp
dG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlLCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpOwogICAgIHZv
aWQgZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
KiwgdWludDMyX3QgdGV4dHVyZSwgRmxhZ3MsIGNvbnN0IERyYXdRdWFkJiwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0
bWFwVGV4dHVyZSogbWFza1RleHR1cmUpOwotICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgRHJhd1F1
YWQmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbSosIEdMZW51bSBkcmF3aW5nTW9kZSwgYm9vbCBuZWVkc0JsZW5k
aW5nKTsKKyAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0q
LCBHQzNEZW51bSBkcmF3aW5nTW9kZSwgYm9vbCBuZWVkc0JsZW5kaW5nKTsKIAogICAgIGJvb2wg
YmVnaW5TY2lzc29yQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0
UmVjdCYpOwogICAgIHZvaWQgYmluZERlZmF1bHRTdXJmYWNlKCk7CiAgICAgQ2xpcFN0YWNrJiBj
bGlwU3RhY2soKTsKICAgICBpbmxpbmUgVGV4dHVyZU1hcHBlckdMRGF0YSYgZGF0YSgpIHsgcmV0
dXJuICptX2RhdGE7IH0KLSAgICBUZXh0dXJlTWFwcGVyR0xEYXRhKiBtX2RhdGE7CiAgICAgR3Jh
cGhpY3NDb250ZXh0KiBtX2NvbnRleHQ7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBt
X2NvbnRleHQzRDsKKyAgICBUZXh0dXJlTWFwcGVyR0xEYXRhKiBtX2RhdGE7CiAgICAgQ2xpcFN0
YWNrIG1fY2xpcFN0YWNrOwogICAgIGJvb2wgbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNp
bmc7CiAKQEAgLTEzNSw3ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbml0aWFsaXplU3Rl
bmNpbCgpOwogICAgIH5CaXRtYXBUZXh0dXJlR0woKTsKICAgICB2aXJ0dWFsIHVpbnQzMl90IGlk
KCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQotICAgIHVpbnQzMl90IHRleHR1cmVUYXJnZXQoKSBj
b25zdCB7IHJldHVybiBHTF9URVhUVVJFXzJEOyB9CisgICAgdWludDMyX3QgdGV4dHVyZVRhcmdl
dCgpIGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOyB9CiAgICAg
SW50U2l6ZSB0ZXh0dXJlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVNpemU7IH0KICAg
ICB2b2lkIHNldFRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlckdMKiB0ZXhtYXApIHsgbV90ZXh0
dXJlTWFwcGVyID0gdGV4bWFwOyB9CiAgICAgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNv
bnN0IEludFJlY3QmLCBjb25zdCBJbnRQb2ludCYpOwpAQCAtMTQ3LDIwICsxNDksMjIgQEAgcHVi
bGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgR0x1aW50IG1faWQ7CisgICAgUGxhdGZvcm0z
RE9iamVjdCBtX2lkOwogICAgIEludFNpemUgbV90ZXh0dXJlU2l6ZTsKICAgICBJbnRSZWN0IG1f
ZGlydHlSZWN0OwotICAgIEdMdWludCBtX2ZibzsKLSAgICBHTHVpbnQgbV9yYm87CisgICAgUGxh
dGZvcm0zRE9iamVjdCBtX2ZibzsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fcmJvOwogICAgIGJv
b2wgbV9zaG91bGRDbGVhcjsKLSAgICBUZXh0dXJlTWFwcGVyR0wqIG1fdGV4dHVyZU1hcHBlcjsK
ICAgICBUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjayBtX2NsaXBTdGFjazsKLSAgICBCaXRtYXBU
ZXh0dXJlR0woKQorICAgIFRleHR1cmVNYXBwZXJHTCogbV90ZXh0dXJlTWFwcGVyOworCisgICAg
Qml0bWFwVGV4dHVyZUdMKCk7CisgICAgQml0bWFwVGV4dHVyZUdMKFRleHR1cmVNYXBwZXJHTCog
dGV4dHVyZU1hcHBlcikKICAgICAgICAgOiBtX2lkKDApCiAgICAgICAgICwgbV9mYm8oMCkKICAg
ICAgICAgLCBtX3JibygwKQogICAgICAgICAsIG1fc2hvdWxkQ2xlYXIodHJ1ZSkKLSAgICAgICAg
LCBtX3RleHR1cmVNYXBwZXIoMCkKKyAgICAgICAgLCBtX3RleHR1cmVNYXBwZXIodGV4dHVyZU1h
cHBlcikKICAgICB7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmNwcAppbmRleCAwZmJkYmU5NWNhZjE2NDcwZGQwNjMyZjA0YzE0NGI4MjBiNmU4YmIzLi41
NWFiOGEzMDllYWY5YmQyY2I3YzU5N2MxN2Y3MWQzNGY4OWI4NjU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKQEAgLTMwLDI1ICszMCwxMSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLSNpZm5kZWYgVEVYTUFQX09QRU5HTF9FU18yCi0jZGVmaW5lIE9F
UzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TIFwKLSAgICAiI2RlZmluZSBsb3dwXG4jZGVmaW5lIGhp
Z2hwXG4iCi0jZGVmaW5lIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFVTFRfUFJFQ0lTSU9OCi0j
ZWxzZQotI2RlZmluZSBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9OUwotI2RlZmluZSBPRVMyX0ZS
QUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTiBcCi0gICAgInByZWNpc2lvbiBtZWRpdW1w
IGZsb2F0OyBcbiIKLSNlbmRpZgotCi0jZGVmaW5lIFNUUklOR0lGWV9WQUwoc3JjLi4uKSAjc3Jj
Ci0jZGVmaW5lIFZFUlRFWF9TSEFERVIoc3JjLi4uKSBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9O
U1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUklOR0lGWV9WQUwoc3JjKQotI2Rl
ZmluZSBGUkFHTUVOVF9TSEFERVIoc3JjLi4uKSBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9OU1wK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0VTMl9GUkFHTUVOVF9TSEFERVJfREVG
QVVMVF9QUkVDSVNJT05cCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUklOR0lG
WV9WQUwoc3JjKQorI2RlZmluZSBTVFJJTkdJRlkoc3JjLi4uKSAjc3JjCiAKIHN0YXRpYyBjb25z
dCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrID0KLSAgICBGUkFHTUVO
VF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9h
dDsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zb3VyY2U7CiAgICAgICAgIHVuaWZvcm0g
c2FtcGxlcjJEIHNfbWFzazsKICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsK
QEAgLTY0LDcgKzUwLDggQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNl
T3BhY2l0eUFuZE1hc2sgPQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNo
YWRlclNvdXJjZVJlY3RPcGFjaXR5QW5kTWFzayA9Ci0gICAgRlJBR01FTlRfU0hBREVSKAorICAg
IFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgIHVu
aWZvcm0gc2FtcGxlcjJEUmVjdCBzX3NvdXJjZTsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRS
ZWN0IHNfbWFzazsKICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKQEAgLTgw
LDcgKzY3LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdE9w
YWNpdHlBbmRNYXNrID0KICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVy
U291cmNlT3BhY2l0eUFuZE1hc2sgPQotICAgIFZFUlRFWF9TSEFERVIoCisgICAgU1RSSU5HSUZZ
KAogICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXg7CiAgICAgICAgIHVuaWZvcm0gbG93cCBm
bG9hdCB1X2ZsaXA7CiAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwpAQCAtOTUsNyAr
ODIsOCBAQCBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1h
c2sgPQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVNp
bXBsZSA9Ci0gICAgRlJBR01FTlRfU0hBREVSKAorICAgIFNUUklOR0lGWSgKKyAgICAgICAgcHJl
Y2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNl
OwogICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwogICAgICAgICB2YXJ5aW5n
IGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKQEAgLTEwNyw3ICs5NSw4IEBAIHN0YXRpYyBj
b25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVNpbXBsZSA9CiAgICAgKTsKIAogc3RhdGlj
IGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlQW50aWFsaWFzaW5nTm9NYXNrID0KLSAg
ICBGUkFHTUVOVF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAorICAgICAgICBwcmVjaXNpb24gbWVk
aXVtcCBmbG9hdDsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zb3VyY2U7CiAgICAgICAg
IHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOwogICAgICAgICB1bmlmb3JtIGxv
d3AgZmxvYXQgdV9vcGFjaXR5OwpAQCAtMTQ1LDcgKzEzNCw4IEBAIHN0YXRpYyBjb25zdCBjaGFy
KiBmcmFnbWVudFNoYWRlclNvdXJjZUFudGlhbGlhc2luZ05vTWFzayA9CiAgICAgKTsKIAogc3Rh
dGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdFNpbXBsZSA9Ci0gICAgRlJB
R01FTlRfU0hBREVSKAorICAgIFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAg
ZmxvYXQ7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX3NvdXJjZTsKICAgICAgICAg
dW5pZm9ybSBsb3dwIHZlYzIgdV90ZXh0dXJlU2l6ZTsKICAgICAgICAgdW5pZm9ybSBsb3dwIGZs
b2F0IHVfb3BhY2l0eTsKQEAgLTE1OCw3ICsxNDgsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJh
Z21lbnRTaGFkZXJTb3VyY2VSZWN0U2ltcGxlID0KICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hh
ciogdmVydGV4U2hhZGVyU291cmNlU2ltcGxlID0KLSAgICBWRVJURVhfU0hBREVSKAorICAgIFNU
UklOR0lGWSgKICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OwogICAgICAgICB1bmlmb3Jt
IGxvd3AgZmxvYXQgdV9mbGlwOwogICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKQEAg
LTE3MSw3ICsxNjEsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlU2lt
cGxlID0KICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlU29s
aWRDb2xvciA9Ci0gICAgVkVSVEVYX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCiAgICAgICAgIHVu
aWZvcm0gbWF0NCB1X21hdHJpeDsKICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CiAg
ICAgICAgIHZvaWQgbWFpbih2b2lkKQpAQCAtMTgyLDcgKzE3Miw4IEBAIHN0YXRpYyBjb25zdCBj
aGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTb2xpZENvbG9yID0KIAogCiBzdGF0aWMgY29uc3QgY2hh
ciogZnJhZ21lbnRTaGFkZXJTb3VyY2VTb2xpZENvbG9yID0KLSAgICBWRVJURVhfU0hBREVSKAor
ICAgIFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAg
IHVuaWZvcm0gdmVjNCB1X2NvbG9yOwogICAgICAgICB2b2lkIG1haW4odm9pZCkKICAgICAgICAg
ewpAQCAtMjEyLDIyICsyMDMsMjIgQEAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclByb2cKIAogICAgIHN3
aXRjaCAoc2hhZGVyVHlwZSkgewogICAgIGNhc2UgU2ltcGxlOgotICAgICAgICBwcm9ncmFtID0g
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OmNyZWF0ZSgpOworICAgICAgICBwcm9n
cmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OmNyZWF0ZShtX2NvbnRleHQp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIFJlY3RTaW1wbGU6Ci0gICAgICAgIHByb2dyYW0g
PSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmNyZWF0ZSgpOworICAgICAg
ICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpjcmVhdGUo
bV9jb250ZXh0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBbnRpYWxpYXNpbmdOb01hc2s6
Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2lu
Z05vTWFzazo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgT3BhY2l0eUFuZE1hc2s6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpjcmVhdGUoKTsKKyAgICAgICAgcHJv
Z3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OmNyZWF0ZSht
X2NvbnRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFJlY3RPcGFjaXR5QW5kTWFzazoK
LSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlB
bmRNYXNrOjpjcmVhdGUoKTsKKyAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpjcmVhdGUobV9jb250ZXh0KTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBTb2xpZENvbG9yOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpjcmVhdGUoKTsKKyAgICAgICAgcHJvZ3JhbSA9IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6Y3JlYXRlKG1fY29udGV4dCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW52YWxpZDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0yMzYsOCArMjI3LDkgQEAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclByb2cKICAgICBy
ZXR1cm4gcHJvZ3JhbTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3Qg
Y2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpCi0gICAgOiBtX2lkKDApCitUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciog
ZnJhZ21lbnRTaGFkZXJTb3VyY2UpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1f
aWQoMCkKICAgICAsIG1fdmVydGV4QXR0cmliKDApCiAgICAgLCBtX3ZlcnRleFNoYWRlcigwKQog
ICAgICwgbV9mcmFnbWVudFNoYWRlcigwKQpAQCAtMjU2LDQ2ICsyNDgsNDYgQEAgdm9pZCBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aW5pdGlhbGl6ZVByb2dyYW0oKQogewogICAgIGNvbnN0
IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVByb2dyYW0gPSB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKTsK
ICAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVByb2dyYW0gPSBmcmFnbWVudFNo
YWRlclNvdXJjZSgpOwotICAgIEdMdWludCB2ZXJ0ZXhTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcihH
TF9WRVJURVhfU0hBREVSKTsKLSAgICBHTHVpbnQgZnJhZ21lbnRTaGFkZXIgPSBnbENyZWF0ZVNo
YWRlcihHTF9GUkFHTUVOVF9TSEFERVIpOwotICAgIGdsU2hhZGVyU291cmNlKHZlcnRleFNoYWRl
ciwgMSwgJnZlcnRleFNoYWRlclNvdXJjZVByb2dyYW0sIDApOwotICAgIGdsU2hhZGVyU291cmNl
KGZyYWdtZW50U2hhZGVyLCAxLCAmZnJhZ21lbnRTaGFkZXJTb3VyY2VQcm9ncmFtLCAwKTsKLSAg
ICBHTHVpbnQgcHJvZ3JhbUlEID0gZ2xDcmVhdGVQcm9ncmFtKCk7Ci0gICAgZ2xDb21waWxlU2hh
ZGVyKHZlcnRleFNoYWRlcik7Ci0gICAgZ2xDb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsK
KyAgICBQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hh
ZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKTsKKyAgICBQbGF0Zm9ybTNET2Jq
ZWN0IGZyYWdtZW50U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUik7CisgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UodmVy
dGV4U2hhZGVyLCB2ZXJ0ZXhTaGFkZXJTb3VyY2VQcm9ncmFtKTsKKyAgICBtX2NvbnRleHQtPnNo
YWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgZnJhZ21lbnRTaGFkZXJTb3VyY2VQcm9ncmFtKTsK
KyAgICBQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCA9IG1fY29udGV4dC0+Y3JlYXRlUHJvZ3Jh
bSgpOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgIG1f
Y29udGV4dC0+Y29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CiAKLSAgICBnbEF0dGFjaFNo
YWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRlcik7Ci0gICAgZ2xBdHRhY2hTaGFkZXIocHJvZ3Jh
bUlELCBmcmFnbWVudFNoYWRlcik7Ci0gICAgZ2xMaW5rUHJvZ3JhbShwcm9ncmFtSUQpOworICAg
IG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVydGV4U2hhZGVyKTsKKyAgICBt
X2NvbnRleHQtPmF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVyKTsKKyAgICBt
X2NvbnRleHQtPmxpbmtQcm9ncmFtKHByb2dyYW1JRCk7CiAKLSAgICBtX3ZlcnRleEF0dHJpYiA9
IGdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiYV92ZXJ0ZXgiKTsKKyAgICBtX3ZlcnRl
eEF0dHJpYiA9IG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiYV92ZXJ0
ZXgiKTsKIAogICAgIG1faWQgPSBwcm9ncmFtSUQ7CiAgICAgbV92ZXJ0ZXhTaGFkZXIgPSB2ZXJ0
ZXhTaGFkZXI7CiAgICAgbV9mcmFnbWVudFNoYWRlciA9IGZyYWdtZW50U2hhZGVyOwogfQogCi12
b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpnZXRVbmlmb3JtTG9jYXRpb24oR0xpbnQg
JnZhcmlhYmxlLCBjb25zdCBjaGFyKiBuYW1lKQordm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKEdDM0RpbnQgJnZhcmlhYmxlLCBjb25zdCBjaGFyKiBu
YW1lKQogewotICAgIHZhcmlhYmxlID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9pZCwgbmFtZSk7
CisgICAgdmFyaWFibGUgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX2lkLCBuYW1l
KTsKICAgICBBU1NFUlQodmFyaWFibGUgPj0gMCk7CiB9CiAKIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKQogewotICAgIEdMdWludCBwcm9n
cmFtSUQgPSBtX2lkOworICAgIFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbUlEID0gbV9pZDsKICAg
ICBpZiAoIXByb2dyYW1JRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZ2xEZXRhY2hTaGFkZXIo
cHJvZ3JhbUlELCBtX3ZlcnRleFNoYWRlcik7Ci0gICAgZ2xEZWxldGVTaGFkZXIobV92ZXJ0ZXhT
aGFkZXIpOwotICAgIGdsRGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV9mcmFnbWVudFNoYWRlcik7
Ci0gICAgZ2xEZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7Ci0gICAgZ2xEZWxldGVQcm9n
cmFtKHByb2dyYW1JRCk7CisgICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIocHJvZ3JhbUlELCBt
X3ZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIobV92ZXJ0ZXhTaGFk
ZXIpOworICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV9mcmFnbWVudFNo
YWRlcik7CisgICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7Cisg
ICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKHByb2dyYW1JRCk7CiB9CiAKLVRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgp
Ci0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1w
bGUsIGZyYWdtZW50U2hhZGVyU291cmNlU2ltcGxlKQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1TaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwg
dmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRlclNvdXJjZVNpbXBsZSkKIHsK
ICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX2ZsaXBM
b2NhdGlvbiwgInVfZmxpcCIpOwpAQCAtMzA0LDE2ICsyOTYsMTYgQEAgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1TaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCkKICAg
ICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRpb24sICJ1X29wYWNpdHkiKTsKIH0K
IAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNvbGlkQ29sb3IoKQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0o
dmVydGV4U2hhZGVyU291cmNlU29saWRDb2xvciwgZnJhZ21lbnRTaGFkZXJTb3VyY2VTb2xpZENv
bG9yKQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAg
OiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VT
b2xpZENvbG9yLCBmcmFnbWVudFNoYWRlclNvdXJjZVNvbGlkQ29sb3IpCiB7CiAgICAgaW5pdGlh
bGl6ZVByb2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwg
InVfbWF0cml4Iik7CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fY29sb3JMb2NhdGlvbiwgInVf
Y29sb3IiKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKQotICAgIDogVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRlclNvdXJj
ZVJlY3RTaW1wbGUpCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OlRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKKyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRl
clNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0U2ltcGxlKQogewogICAgIGlu
aXRpYWxpemVQcm9ncmFtKCk7CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRp
b24sICJ1X21hdHJpeCIpOwpAQCAtMzIzLDggKzMxNSw4IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKCkK
ICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRpb24sICJ1X29wYWNpdHkiKTsK
IH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRTaGFk
ZXJTb3VyY2VPcGFjaXR5QW5kTWFzaykKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0
eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShj
b250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRTaGFkZXJT
b3VyY2VPcGFjaXR5QW5kTWFzaykKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdl
dFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKQEAgLTMzNCw4
ICszMjYsOCBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYQogICAgIGdldFVuaWZvcm1Mb2NhdGlv
bihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1S
ZWN0T3BhY2l0eUFuZE1hc2soKQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odmVy
dGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdE9w
YWNpdHlBbmRNYXNrKQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1h
c2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29u
dGV4dCwgdmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291
cmNlUmVjdE9wYWNpdHlBbmRNYXNrKQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAg
Z2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwpAQCAtMzQ1
LDggKzMzNyw4IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNr
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjCiAgICAgZ2V0VW5pZm9ybUxvY2F0
aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7CiB9CiAKLVRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bUFudGlhbGlhc2luZ05vTWFzaygpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2
ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291cmNlQW50aWFsaWFzaW5n
Tm9NYXNrKQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwg
dmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRlclNvdXJjZUFudGlhbGlhc2lu
Z05vTWFzaykKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVuaWZvcm1Mb2Nh
dGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKQEAgLTM1Niw5ICszNDgsOSBAQCBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1BbnRpYWxpYQogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX2ZsaXBMb2Nh
dGlvbiwgInVfZmxpcCIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIoKQorVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDog
bV9jb250ZXh0KGNvbnRleHQpCiB7Ci0gICAgQVNTRVJUKGluaXRpYWxpemVPcGVuR0xTaGltcygp
KTsKIH0KIAogVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6On5UZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcigpCkBAIC0zNzMsMTggKzM2NSwxOSBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6flRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkKIAogU3RhbmRhcmRGaWx0ZXJQcm9ncmFt
Ojp+U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKCkKIHsKLSAgICBnbERldGFjaFNoYWRlcihtX2lkLCBt
X3ZlcnRleFNoYWRlcik7Ci0gICAgZ2xEZWxldGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIpOwotICAg
IGdsRGV0YWNoU2hhZGVyKG1faWQsIG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsRGVsZXRlU2hh
ZGVyKG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsRGVsZXRlUHJvZ3JhbShtX2lkKTsKKyAgICBt
X2NvbnRleHQtPmRldGFjaFNoYWRlcihtX2lkLCBtX3ZlcnRleFNoYWRlcik7CisgICAgbV9jb250
ZXh0LT5kZWxldGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGV0YWNo
U2hhZGVyKG1faWQsIG1fZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGVsZXRlU2hh
ZGVyKG1fZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX2lk
KTsKIH0KIAotU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmls
dGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUsIHVuc2lnbmVkIHBhc3MpCi0gICAgOiBt
X2lkKDApCitTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5
cGUsIHVuc2lnbmVkIHBhc3MpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1faWQo
MCkKIHsKICAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPQotICAgICAgICAgICAg
VkVSVEVYX1NIQURFUigKKyAgICAgICAgICAgIFNUUklOR0lGWSgKICAgICAgICAgICAgICAgICBh
dHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBh
X3RleENvb3JkOwogICAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3Jk
OwpAQCAtMzk2LDggKzM4OSw3IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0
ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgICAg
ICApOwogCiAjZGVmaW5lIFNUQU5EQVJEX0ZJTFRFUih4Li4uKSBcCi0gICAgICAgIE9FUzJfUFJF
Q0lTSU9OX0RFRklOSVRJT05TXAotICAgICAgICBPRVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxU
X1BSRUNJU0lPTlwKKyAgICAgICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuIlwKICAgICAg
ICAgInZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkO1xuIlwKICAgICAgICAgInVuaWZvcm0g
aGlnaHAgZmxvYXQgdV9hbW91bnQ7XG4iXAogICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV90
ZXh0dXJlO1xuIlwKQEAgLTQwOCw5ICs0MDAsOSBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0
YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQog
ICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6
CiAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAg
ICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKKyAgICAgICAgICAgIHZlYzQg
c2hhZGUodmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb3dwIGZs
b2F0IGFtb3VudCA9IDEuMCAtIHVfYW1vdW50OworICAgICAgICAgICAgICAgIGZsb2F0IGFtb3Vu
dCA9IDEuMCAtIHVfYW1vdW50OwogICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KCgwLjIxMjYg
KyAwLjc4NzQgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgLSAwLjcxNTIgKiBhbW91bnQp
ICogY29sb3IuZyArICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91bnQpICogY29sb3IuYiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50KSAqIGNvbG9y
LnIgKyAoMC43MTUyICsgMC4yODQ4ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4w
NzIyICogYW1vdW50KSAqIGNvbG9yLmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAu
MjEyNiAtIDAuMjEyNiAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFt
b3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiArIDAuOTI3OCAqIGFtb3VudCkgKiBjb2xvci5iLApA
QCAtNDIwLDkgKzQxMiw5IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQ
cm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKICAgICAgICAgZnJhZ21lbnRTaGFk
ZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUo
bG93cCB2ZWM0IGNvbG9yKQorICAgICAgICAgICAgdmVjNCBzaGFkZSh2ZWM0IGNvbG9yKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9h
bW91bnQ7CisgICAgICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9hbW91bnQ7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoKDAuMzkzICsgMC42MDcgKiBhbW91bnQpICogY29s
b3IuciArICgwLjc2OSAtIDAuNzY5ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xODkgLSAwLjE4
OSAqIGFtb3VudCkgKiBjb2xvci5iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjM0
OSAtIDAuMzQ5ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC42ODYgKyAwLjMxNCAqIGFtb3VudCkg
KiBjb2xvci5nICsgKDAuMTY4IC0gMC4xNjggKiBhbW91bnQpICogY29sb3IuYiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoMC4yNzIgLSAwLjI3MiAqIGFtb3VudCkgKiBjb2xvci5yICsg
KDAuNTM0IC0gMC41MzQgKiBhbW91bnQpICogY29sb3IuZyArICgwLjEzMSArIDAuODY5ICogYW1v
dW50KSAqIGNvbG9yLmIsCkBAIC00MzIsNyArNDI0LDcgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFt
OjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5
cGUKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgog
ICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAg
ICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgICAgICB2ZWM0IHNo
YWRlKHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZl
YzQoKDAuMjEzICsgMC43ODcgKiB1X2Ftb3VudCkgKiBjb2xvci5yICsgKDAuNzE1IC0gMC43MTUg
KiB1X2Ftb3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIgKiB1X2Ftb3VudCkgKiBjb2xv
ci5iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjIxMyAtIDAuMjEzICogdV9hbW91
bnQpICogY29sb3IuciArICgwLjcxNSArIDAuMjg1ICogdV9hbW91bnQpICogY29sb3IuZyArICgw
LjA3MiAtIDAuMDcyICogdV9hbW91bnQpICogY29sb3IuYiwKQEAgLTQ0MywxMSArNDM1LDExIEBA
IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJh
dGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpIVUVfUk9UQVRFOgogICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNU
QU5EQVJEX0ZJTFRFUigKLSAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29s
b3IpCisgICAgICAgICAgICB2ZWM0IHNoYWRlKHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaGlnaHAgZmxvYXQgcGkgPSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2Owot
ICAgICAgICAgICAgICAgIGhpZ2hwIGZsb2F0IGMgPSBjb3ModV9hbW91bnQgKiBwaSAvIDE4MC4w
KTsKLSAgICAgICAgICAgICAgICBoaWdocCBmbG9hdCBzID0gc2luKHVfYW1vdW50ICogcGkgLyAx
ODAuMCk7CisgICAgICAgICAgICAgICAgZmxvYXQgcGkgPSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2
OworICAgICAgICAgICAgICAgIGZsb2F0IGMgPSBjb3ModV9hbW91bnQgKiBwaSAvIDE4MC4wKTsK
KyAgICAgICAgICAgICAgICBmbG9hdCBzID0gc2luKHVfYW1vdW50ICogcGkgLyAxODAuMCk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3IuciAqICgwLjIxMyArIGMgKiAwLjc4NyAt
IHMgKiAwLjIxMykgKyBjb2xvci5nICogKDAuNzE1IC0gYyAqIDAuNzE1IC0gcyAqIDAuNzE1KSAr
IGNvbG9yLmIgKiAoMC4wNzIgLSBjICogMC4wNzIgKyBzICogMC45MjgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbG9yLnIgKiAoMC4yMTMgLSBjICogMC4yMTMgKyBzICogMC4xNDMp
ICsgY29sb3IuZyAqICgwLjcxNSArIGMgKiAwLjI4NSArIHMgKiAwLjE0MCkgKyBjb2xvci5iICog
KDAuMDcyIC0gYyAqIDAuMDcyIC0gcyAqIDAuMjgzKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb2xvci5yICogKDAuMjEzIC0gYyAqIDAuMjEzIC0gcyAqIDAuNzg3KSArICBjb2xvci5n
ICogKDAuNzE1IC0gYyAqIDAuNzE1ICsgcyAqIDAuNzE1KSArIGNvbG9yLmIgKiAoMC4wNzIgKyBj
ICogMC45MjggKyBzICogMC4wNzIpLApAQCAtNDU3LDggKzQ0OSw4IEBAIFN0YW5kYXJkRmlsdGVy
UHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9u
VHlwZSB0eXBlCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZF
UlQ6CiAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAotICAg
ICAgICAgICAgbG93cCBmbG9hdCBpbnZlcnQobG93cCBmbG9hdCBuKSB7IHJldHVybiAoMS4wIC0g
bikgKiB1X2Ftb3VudCArIG4gKiAoMS4wIC0gdV9hbW91bnQpOyB9Ci0gICAgICAgICAgICBsb3dw
IHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICAgICAgZmxvYXQgaW52ZXJ0KGZs
b2F0IG4pIHsgcmV0dXJuICgxLjAgLSBuKSAqIHVfYW1vdW50ICsgbiAqICgxLjAgLSB1X2Ftb3Vu
dCk7IH0KKyAgICAgICAgICAgIHZlYzQgc2hhZGUodmVjNCBjb2xvcikKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChpbnZlcnQoY29sb3IuciksIGludmVydChjb2xv
ci5nKSwgaW52ZXJ0KGNvbG9yLmIpLCBjb2xvci5hKTsKICAgICAgICAgICAgIH0KQEAgLTQ2Niw3
ICs0NTgsNyBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShG
aWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICBicmVhazsKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKICAgICAgICAgZnJhZ21lbnRTaGFkZXJT
b3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93
cCB2ZWM0IGNvbG9yKQorICAgICAgICAgICAgdmVjNCBzaGFkZSh2ZWM0IGNvbG9yKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KGNvbG9yLnJnYiAqICgxLjAgKyB1
X2Ftb3VudCksIGNvbG9yLmEpOwogICAgICAgICAgICAgfQpAQCAtNDc0LDggKzQ2Niw4IEBAIFN0
YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlv
bjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpDT05UUkFTVDoKICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVEFOREFS
RF9GSUxURVIoCi0gICAgICAgICAgICBsb3dwIGZsb2F0IGNvbnRyYXN0KGxvd3AgZmxvYXQgbikg
eyByZXR1cm4gKG4gLSAwLjUpICogdV9hbW91bnQgKyAwLjU7IH0KLSAgICAgICAgICAgIGxvd3Ag
dmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgICAgICBmbG9hdCBjb250cmFzdChm
bG9hdCBuKSB7IHJldHVybiAobiAtIDAuNSkgKiB1X2Ftb3VudCArIDAuNTsgfQorICAgICAgICAg
ICAgdmVjNCBzaGFkZSh2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IHJldHVybiB2ZWM0KGNvbnRyYXN0KGNvbG9yLnIpLCBjb250cmFzdChjb2xvci5nKSwgY29udHJh
c3QoY29sb3IuYiksIGNvbG9yLmEpOwogICAgICAgICAgICAgfQpAQCAtNDgzLDIwICs0NzUsMjEg
QEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246Ok9QQUNJVFk6CiAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RB
TkRBUkRfRklMVEVSKAotICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xv
cikKKyAgICAgICAgICAgIHZlYzQgc2hhZGUodmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gdmVjNChjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xv
ci5hICogdV9hbW91bnQpOwogICAgICAgICAgICAgfQogICAgICAgICApOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKLSAgICAgICAgZnJhZ21lbnRTaGFk
ZXJTb3VyY2UgPSBGUkFHTUVOVF9TSEFERVIoCisgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNl
ID0gU1RSSU5HSUZZKAorICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAg
ICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKICAgICAgICAgICAgIHVuaWZv
cm0gbG93cCB2ZWMyIHVfYmx1clJhZGl1czsKICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJE
IHVfdGV4dHVyZTsKICAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtH
QVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSF07CiAKLSAgICAgICAgICAgIGxvd3AgdmVjNCBzYW1w
bGVDb2xvcihmbG9hdCByYWRpdXMpCisgICAgICAgICAgICB2ZWM0IHNhbXBsZUNvbG9yKGZsb2F0
IHJhZGl1cykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90
ZXhDb29yZCArIHJhZGl1cyAqIHVfYmx1clJhZGl1czsKICAgICAgICAgICAgICAgICByZXR1cm4g
dGV4dHVyZTJEKHVfdGV4dHVyZSwgY29vcmQpICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3Jk
LnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKQEAgLTUyMywyMCArNTE2
LDIxIEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRl
ck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgIHN3aXRjaCAocGFzcykgewog
ICAgICAgICBjYXNlIDA6IHsKICAgICAgICAgICAgIC8vIEZpcnN0IHBhc3M6IGhvcml6b250YWwg
YWxwaGEgYmx1ci4KLSAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gRlJBR01FTlRf
U0hBREVSKAorICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVFJJTkdJRlkoCisg
ICAgICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgICAgICAgICAg
dmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7CiAgICAgICAgICAgICAgICAgdW5pZm9ybSBs
b3dwIGZsb2F0IHVfc2hhZG93Qmx1clJhZGl1czsKICAgICAgICAgICAgICAgICB1bmlmb3JtIGxv
d3AgdmVjMiB1X3NoYWRvd09mZnNldDsKICAgICAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIy
RCB1X3RleHR1cmU7CiAgICAgICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2Vy
bmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKIAotICAgICAgICAgICAgICAgIGxvd3Ag
ZmxvYXQgc2FtcGxlQWxwaGEoZmxvYXQgcmFkaXVzKQorICAgICAgICAgICAgICAgIGZsb2F0IHNh
bXBsZUFscGhhKGZsb2F0IHJhZGl1cykKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgIHZlYzIgY29vcmQgPSB2X3RleENvb3JkIC0gdV9zaGFkb3dPZmZzZXQgKyB2ZWMyKHJh
ZGl1cyAqIHVfc2hhZG93Qmx1clJhZGl1cywgMC4pOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGV4dHVyZTJEKHVfdGV4dHVyZSwgY29vcmQpLmEgKiBmbG9hdChjb29yZC54ID4gMC4gJiYg
Y29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOwogICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgc2hhZG93Qmx1ckhvcml6b250
YWwoKQorICAgICAgICAgICAgICAgIGZsb2F0IHNoYWRvd0JsdXJIb3Jpem9udGFsKCkKICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHRvdGFsID0gc2FtcGxlQWxw
aGEoMCkgKiB1X2dhdXNzaWFuS2VybmVsWzBdOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKQEAgLTU1Niw3
ICs1NTAsOCBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShG
aWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICAgICAgfQogICAgICAg
ICBjYXNlIDE6IHsKICAgICAgICAgICAgIC8vIFNlY29uZCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBi
bHVyIGFuZCBjb21wb3NpdGUgd2l0aCBvcmlnaW4uCi0gICAgICAgICAgICBmcmFnbWVudFNoYWRl
clNvdXJjZSA9IEZSQUdNRU5UX1NIQURFUigKKyAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyU291
cmNlID0gU1RSSU5HSUZZKAorICAgICAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0
OwogICAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOwogICAgICAg
ICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X3NoYWRvd0JsdXJSYWRpdXM7CiAgICAgICAg
ICAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzQgdV9zaGFkb3dDb2xvcjsKQEAgLTU2NCwxMyArNTU5
LDEzIEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRl
ck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgICAgICAgICAgdW5pZm9ybSBz
YW1wbGVyMkQgdV9jb250ZW50VGV4dHVyZTsKICAgICAgICAgICAgICAgICB1bmlmb3JtIGZsb2F0
IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOwogCi0gICAgICAg
ICAgICAgICAgbG93cCBmbG9hdCBzYW1wbGVBbHBoYShmbG9hdCByKQorICAgICAgICAgICAgICAg
IGZsb2F0IHNhbXBsZUFscGhhKGZsb2F0IHIpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCArIHZlYzIoMC4sIHIgKiB1X3NoYWRv
d0JsdXJSYWRpdXMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHVfdGV4
dHVyZSwgY29vcmQpLmEgKiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNv
b3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgIGxvd3AgZmxvYXQgc2hhZG93Qmx1clZlcnRpY2FsKCkKKyAgICAgICAgICAgICAg
ICBmbG9hdCBzaGFkb3dCbHVyVmVydGljYWwoKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgdG90YWwgPSBzYW1wbGVBbHBoYSgwKSAqIHVfZ2F1c3NpYW5LZXJu
ZWxbMF07CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgR0FVU1NJQU5f
S0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgewpAQCAtNTgxLDcgKzU3Niw3IEBAIFN0YW5kYXJkRmls
dGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0
aW9uVHlwZSB0eXBlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbDsKICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBsb3dwIHZlYzQgc291cmNlT3Zlcihsb3dwIHZl
YzQgc291cmNlLCBsb3dwIHZlYzQgZGVzdGluYXRpb24pCisgICAgICAgICAgICAgICAgdmVjNCBz
b3VyY2VPdmVyKHZlYzQgc291cmNlLCB2ZWM0IGRlc3RpbmF0aW9uKQogICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gQ29tcG9zaXRlIHRoZSBzaGFkb3cgd2l0aCB0aGUg
b3JpZ2luYWwgdGV4dHVyZS4KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZSArIGRl
c3RpbmF0aW9uICogKDEuIC0gc291cmNlLmEpOwpAQCAtNjAyLDI2ICs1OTcsMjUgQEAgU3RhbmRh
cmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpP
cGVyYXRpb25UeXBlIHR5cGUKIAogICAgIGlmICghZnJhZ21lbnRTaGFkZXJTb3VyY2UpCiAgICAg
ICAgIHJldHVybjsKLSAgICBHTHVpbnQgdmVydGV4U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xf
VkVSVEVYX1NIQURFUik7Ci0gICAgR0x1aW50IGZyYWdtZW50U2hhZGVyID0gZ2xDcmVhdGVTaGFk
ZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKLSAgICBnbFNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIs
IDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsIDApOwotICAgIGdsU2hhZGVyU291cmNlKGZyYWdtZW50
U2hhZGVyLCAxLCAmZnJhZ21lbnRTaGFkZXJTb3VyY2UsIDApOwotICAgIEdMdWludCBwcm9ncmFt
SUQgPSBnbENyZWF0ZVByb2dyYW0oKTsKLSAgICBnbENvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVy
KTsKLSAgICBnbENvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgIFBsYXRmb3JtM0RP
YmplY3QgdmVydGV4U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OlZFUlRFWF9TSEFERVIpOworICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFk
ZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRf
U0hBREVSKTsKKyAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRl
eFNoYWRlclNvdXJjZSk7CisgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFk
ZXIsIGZyYWdtZW50U2hhZGVyU291cmNlKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW1J
RCA9IG1fY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNo
YWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihmcmFnbWVu
dFNoYWRlcik7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgIEdMY2hhciBsb2dbMTAwXTsKLSAgICBH
TGludCBsZW47Ci0gICAgZ2xHZXRTaGFkZXJJbmZvTG9nKGZyYWdtZW50U2hhZGVyLCAxMDAsICZs
ZW4sIGxvZyk7CisgICAgU3RyaW5nIGxvZzsKKyAgICBtX2NvbnRleHQtPmdldFNoYWRlckluZm9M
b2coZnJhZ21lbnRTaGFkZXIpOwogICAgIFdURkxvZygmTG9nQ29tcG9zaXRpbmcsICIlc1xuIiwg
bG9nKTsKICNlbmRpZgotICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVydGV4U2hhZGVy
KTsKLSAgICBnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVyKTsKLSAgICBn
bExpbmtQcm9ncmFtKHByb2dyYW1JRCk7CisgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIocHJv
Z3JhbUlELCB2ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dy
YW1JRCwgZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0ocHJvZ3Jh
bUlEKTsKIAotICAgIG1fdmVydGV4QXR0cmliID0gZ2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFt
SUQsICJhX3ZlcnRleCIpOwotICAgIG1fdGV4Q29vcmRBdHRyaWIgPSBnbEdldEF0dHJpYkxvY2F0
aW9uKHByb2dyYW1JRCwgImFfdGV4Q29vcmQiKTsKLSAgICBtX3RleHR1cmVVbmlmb3JtTG9jYXRp
b24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3RleHR1cmUiKTsKKyAgICBt
X3ZlcnRleEF0dHJpYiA9IG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAi
YV92ZXJ0ZXgiKTsKKyAgICBtX3RleENvb3JkQXR0cmliID0gbV9jb250ZXh0LT5nZXRBdHRyaWJM
b2NhdGlvbihwcm9ncmFtSUQsICJhX3RleENvb3JkIik7CisgICAgbV90ZXh0dXJlVW5pZm9ybUxv
Y2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV90ZXh0
dXJlIik7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdS
QVlTQ0FMRToKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CkBAIC02MzEsMjEgKzYy
NSwyMSBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0
ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpCUklHSFRORVNTOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25z
LmFtb3VudCA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfYW1vdW50Iik7Cisg
ICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1M
b2NhdGlvbihwcm9ncmFtSUQsICJ1X2Ftb3VudCIpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKLSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmJsdXIu
cmFkaXVzID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9ibHVyUmFkaXVzIik7
Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLmdhdXNzaWFuS2VybmVsID0gZ2xHZXRV
bmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9nYXVzc2lhbktlcm5lbCIpOworICAgICAgICBt
X3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5yYWRpdXMgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2Nh
dGlvbihwcm9ncmFtSUQsICJ1X2JsdXJSYWRpdXMiKTsKKyAgICAgICAgbV91bmlmb3JtTG9jYXRp
b25zLmJsdXIuZ2F1c3NpYW5LZXJuZWwgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKLSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25z
LnNoYWRvdy5ibHVyUmFkaXVzID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9z
aGFkb3dCbHVyUmFkaXVzIik7Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1
c3NpYW5LZXJuZWwgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFu
S2VybmVsIik7CisgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1cyA9
IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93Qmx1clJh
ZGl1cyIpOworICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVs
ID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9nYXVzc2lhbktl
cm5lbCIpOwogICAgICAgICBpZiAoIXBhc3MpCi0gICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlv
bnMuc2hhZG93Lm9mZnNldCA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfc2hh
ZG93T2Zmc2V0Iik7CisgICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93Lm9mZnNl
dCA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93T2Zm
c2V0Iik7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSBj
b2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBpbiB0aGUgc2Vjb25kIHBhc3MsIHRoZSBmaXJz
dCBwYXNzIGlzIG9ubHkgYSBob3Jpem9udGFsIGFscGhhIGJsdXIuCi0gICAgICAgICAgICBtX3Vu
aWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbG9yID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3Jh
bUlELCAidV9zaGFkb3dDb2xvciIpOwotICAgICAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNo
YWRvdy5jb250ZW50VGV4dHVyZSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVf
Y29udGVudFRleHR1cmUiKTsKKyAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cu
Y29sb3IgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3NoYWRv
d0NvbG9yIik7CisgICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbnRlbnRU
ZXh0dXJlID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9jb250
ZW50VGV4dHVyZSIpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBA
IC02NTYsOSArNjUwLDkgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclBy
b2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICBtX2ZyYWdtZW50
U2hhZGVyID0gZnJhZ21lbnRTaGFkZXI7CiB9CiAKLVBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQ
cm9ncmFtPiBTdGFuZGFyZEZpbHRlclByb2dyYW06OmNyZWF0ZShGaWx0ZXJPcGVyYXRpb246Ok9w
ZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKK1Bhc3NSZWZQdHI8U3RhbmRhcmRGaWx0
ZXJQcm9ncmFtPiBTdGFuZGFyZEZpbHRlclByb2dyYW06OmNyZWF0ZShHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUsIHVuc2lnbmVk
IHBhc3MpCiB7Ci0gICAgUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGFk
b3B0UmVmKG5ldyBTdGFuZGFyZEZpbHRlclByb2dyYW0odHlwZSwgcGFzcykpOworICAgIFJlZlB0
cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IHByb2dyYW0gPSBhZG9wdFJlZihuZXcgU3RhbmRhcmRG
aWx0ZXJQcm9ncmFtKGNvbnRleHQsIHR5cGUsIHBhc3MpKTsKICAgICBpZiAoIXByb2dyYW0tPm1f
aWQpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC02OTQsMjEgKzY4OCwyMSBAQCBzdGF0aWMgZmxv
YXQqIGdhdXNzaWFuS2VybmVsKCkKICAgICByZXR1cm4ga2VybmVsOwogfQogCi12b2lkIFN0YW5k
YXJkRmlsdGVyUHJvZ3JhbTo6cHJlcGFyZShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlv
biwgdW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0x1aW50IGNvbnRlbnRUZXh0
dXJlKQordm9pZCBTdGFuZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVyT3Bl
cmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHBhc3MsIGNvbnN0IEludFNpemUmIHNpemUsIEdD
M0R1aW50IGNvbnRlbnRUZXh0dXJlKQogewotICAgIGdsVXNlUHJvZ3JhbShtX2lkKTsKKyAgICBt
X2NvbnRleHQtPnVzZVByb2dyYW0obV9pZCk7CiAgICAgc3dpdGNoIChvcGVyYXRpb24uZ2V0T3Bl
cmF0aW9uVHlwZSgpKSB7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OlNBVFVSQVRFOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgotICAgICAg
ICBnbFVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuYW1vdW50LCBzdGF0aWNfY2FzdDxjb25z
dCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7
CisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQs
IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihvcGVy
YXRpb24pLmFtb3VudCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OklOVkVSVDoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
Ok9QQUNJVFk6Ci0gICAgICAgIGdsVW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQs
IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24m
PihvcGVyYXRpb24pLmFtb3VudCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobV91
bmlmb3JtTG9jYXRpb25zLmFtb3VudCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewogICAgICAgICBjb25zdCBC
bHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZpbHRlck9w
ZXJhdGlvbiY+KG9wZXJhdGlvbik7CkBAIC03MjAsOCArNzE0LDggQEAgdm9pZCBTdGFuZGFyZEZp
bHRlclByb2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVu
c2lnbmVkIHAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmFkaXVzLnNldFdpZHRoKGZsb2F0
VmFsdWVGb3JMZW5ndGgoYmx1ci5zdGREZXZpYXRpb24oKSwgc2l6ZS53aWR0aCgpKSAvIHNpemUu
d2lkdGgoKSk7CiAKLSAgICAgICAgZ2xVbmlmb3JtMmYobV91bmlmb3JtTG9jYXRpb25zLmJsdXIu
cmFkaXVzLCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKTsKLSAgICAgICAgZ2xVbmlm
b3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9L
RVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7CisgICAgICAgIG1fY29udGV4dC0+
dW5pZm9ybTJmKG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLnJhZGl1cywgcmFkaXVzLndpZHRoKCks
IHJhZGl1cy5oZWlnaHQoKSk7CisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihtX3VuaWZv
cm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lE
VEgsIGdhdXNzaWFuS2VybmVsKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7CkBAIC03MjksMjAgKzcyMywyMCBAQCB2b2lk
IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6cHJlcGFyZShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9w
ZXJhdGlvbiwgdW5zaWduZWQgcAogICAgICAgICBzd2l0Y2ggKHBhc3MpIHsKICAgICAgICAgY2Fz
ZSAwOgogICAgICAgICAgICAgLy8gRmlyc3QgcGFzczogdmVydGljYWwgYWxwaGEgYmx1ci4KLSAg
ICAgICAgICAgIGdsVW5pZm9ybTJmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cub2Zmc2V0LCBm
bG9hdChzaGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwgZmxvYXQo
c2hhZG93LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAg
ICAgIGdsVW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1cywgc2hh
ZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSk7Ci0gICAgICAgICAgICBn
bFVuaWZvcm0xZnYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCwgR0FV
U1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOworICAgICAgICAgICAg
bV9jb250ZXh0LT51bmlmb3JtMmYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5vZmZzZXQsIGZs
b2F0KHNoYWRvdy5sb2NhdGlvbigpLngoKSkgLyBmbG9hdChzaXplLndpZHRoKCkpLCBmbG9hdChz
aGFkb3cubG9jYXRpb24oKS55KCkpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAg
ICAgbV9jb250ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFk
aXVzLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLndpZHRoKCkpKTsKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93Lmdh
dXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwo
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgLy8g
U2Vjb25kIHBhc3M6IHdlIG5lZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4
dHVyZSBmb3IgY29tcG9zaXRpbmcuCi0gICAgICAgICAgICBnbFVuaWZvcm0xZihtX3VuaWZvcm1M
b2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0
KHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGdsVW5pZm9ybTFmdihtX3VuaWZvcm1Mb2Nh
dGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwg
Z2F1c3NpYW5LZXJuZWwoKSk7Ci0gICAgICAgICAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVS
RTEpOwotICAgICAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBjb250ZW50VGV4
dHVyZSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm0xaShtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93
LmNvbnRlbnRUZXh0dXJlLCAxKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1f
dW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1cywgc2hhZG93LnN0ZERldmlhdGlvbigp
IC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3Jt
MWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwsIEdBVVNTSUFOX0tF
Uk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsKKyAgICAgICAgICAgIG1fY29udGV4
dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpOworICAgICAgICAg
ICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
Y29udGVudFRleHR1cmUpOworICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWkobV91bmlm
b3JtTG9jYXRpb25zLnNoYWRvdy5jb250ZW50VGV4dHVyZSwgMSk7CiAgICAgICAgICAgICBmbG9h
dCByLCBnLCBiLCBhOwogICAgICAgICAgICAgc2hhZG93LmNvbG9yKCkuZ2V0UkdCQShyLCBnLCBi
LCBhKTsKLSAgICAgICAgICAgIGdsVW5pZm9ybTRmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cu
Y29sb3IsIHIsIGcsIGIsIGEpOworICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtNGYobV91
bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb2xvciwgciwgZywgYiwgYSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTc1OSw3ICs3NTMsNyBAQCBQYXNz
UmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OmdldFNoYWRlckZvckZpbHRlcgogICAgIGludCBrZXkgPSBpbnQodHlwZSkgfCAocGFzcyA8PCAx
Nik7CiAgICAgRmlsdGVyTWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZmlsdGVyTWFwLmZpbmQo
a2V5KTsKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9maWx0ZXJNYXAuZW5kKCkpIHsKLSAgICAgICAg
cHJvZ3JhbSA9IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKHR5cGUsIHBhc3MpOworICAg
ICAgICBwcm9ncmFtID0gU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpjcmVhdGUobV9jb250ZXh0LCB0
eXBlLCBwYXNzKTsKICAgICAgICAgaWYgKCFwcm9ncmFtKQogICAgICAgICAgICAgcmV0dXJuIDA7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKaW5kZXggNzg1NDk4ZTdm
OGEzNjI3ZWFiMTA2ODZiYTM2YmZmYjNlMTA5MTQ1Ni4uYmU0NWM1ZGFmZWZjNjdhZWEyMWZmOGQ1
YjNlY2U3NGJjNjQwNTFjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
LmgKQEAgLTI0LDkgKzI0LDkgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYm
IFVTRShURVhUVVJFX01BUFBFUikKIAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIk9w
ZW5HTFNoaW1zLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJHTC5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtNDQsMzkg
KzQ0LDQwIEBAIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwogCiBjbGFzcyBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtPiB7CiBwdWJsaWM6Ci0gICAgR0x1aW50IGlkKCkgeyByZXR1cm4gbV9pZDsg
fQotICAgIEdMdWludCB2ZXJ0ZXhBdHRyaWIoKSB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQor
ICAgIFBsYXRmb3JtM0RPYmplY3QgaWQoKSB7IHJldHVybiBtX2lkOyB9CisgICAgR0MzRHVpbnQg
dmVydGV4QXR0cmliKCkgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWI7IH0KIAotICAgIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3Qg
Y2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpOworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBj
b25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSk7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0oKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKGZsb2F0IG9w
YWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqKSB7IH0KLSAgICBHTGludCBtYXRyaXhMb2NhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4TG9jYXRpb247IH0KLSAgICBHTGludCBmbGlwTG9j
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZsaXBMb2NhdGlvbjsgfQotICAgIEdMaW50IHRleHR1
cmVTaXplTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVTaXplTG9jYXRpb247IH0K
LSAgICBHTGludCBzb3VyY2VUZXh0dXJlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NvdXJj
ZVRleHR1cmVMb2NhdGlvbjsgfQotICAgIEdMaW50IG1hc2tUZXh0dXJlTG9jYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX21hc2tUZXh0dXJlTG9jYXRpb247IH0KLSAgICBHTGludCBvcGFjaXR5TG9j
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHlMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQg
bWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hdHJpeExvY2F0aW9uOyB9CisgICAg
R0MzRGludCBmbGlwTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZsaXBMb2NhdGlvbjsgfQor
ICAgIEdDM0RpbnQgdGV4dHVyZVNpemVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVy
ZVNpemVMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgc291cmNlVGV4dHVyZUxvY2F0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9zb3VyY2VUZXh0dXJlTG9jYXRpb247IH0KKyAgICBHQzNEaW50IG1hc2tU
ZXh0dXJlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hc2tUZXh0dXJlTG9jYXRpb247IH0K
KyAgICBHQzNEaW50IG9wYWNpdHlMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eUxv
Y2F0aW9uOyB9CiAKLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKEdMaW50
IGxvY2F0aW9uKSB7IHJldHVybiBsb2NhdGlvbiA+PSAwOyB9CisgICAgc3RhdGljIGJvb2wgaXNW
YWxpZFVuaWZvcm1Mb2NhdGlvbihHQzNEaW50IGxvY2F0aW9uKSB7IHJldHVybiBsb2NhdGlvbiA+
PSAwOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGdldFVuaWZvcm1Mb2NhdGlvbihHTGludCYg
dmFyLCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB2b2lkIGdldFVuaWZvcm1Mb2NhdGlvbihHQzNE
aW50JiB2YXIsIGNvbnN0IGNoYXIqIG5hbWUpOwogICAgIHZvaWQgaW5pdGlhbGl6ZVByb2dyYW0o
KTsKICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpIHsgfQogICAgIGNvbnN0IGNoYXIqIHZl
cnRleFNoYWRlclNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4U2hhZGVyU291cmNlLmRh
dGEoKTsgfQogICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFnbWVudFNoYWRlclNvdXJjZS5kYXRhKCk7IH0KIAotICAgIEdMdWludCBtX2lk
OwotICAgIEdMdWludCBtX3ZlcnRleEF0dHJpYjsKLSAgICBHTHVpbnQgbV92ZXJ0ZXhTaGFkZXI7
Ci0gICAgR0x1aW50IG1fZnJhZ21lbnRTaGFkZXI7Ci0gICAgR0xpbnQgbV9tYXRyaXhMb2NhdGlv
bjsKLSAgICBHTGludCBtX2ZsaXBMb2NhdGlvbjsKLSAgICBHTGludCBtX3RleHR1cmVTaXplTG9j
YXRpb247Ci0gICAgR0xpbnQgbV9zb3VyY2VUZXh0dXJlTG9jYXRpb247Ci0gICAgR0xpbnQgbV9v
cGFjaXR5TG9jYXRpb247Ci0gICAgR0xpbnQgbV9tYXNrVGV4dHVyZUxvY2F0aW9uOworICAgIEdy
YXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2lkOwor
ICAgIEdDM0R1aW50IG1fdmVydGV4QXR0cmliOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV92ZXJ0
ZXhTaGFkZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZyYWdtZW50U2hhZGVyOworICAgIEdD
M0RpbnQgbV9tYXRyaXhMb2NhdGlvbjsKKyAgICBHQzNEaW50IG1fZmxpcExvY2F0aW9uOworICAg
IEdDM0RpbnQgbV90ZXh0dXJlU2l6ZUxvY2F0aW9uOworICAgIEdDM0RpbnQgbV9zb3VyY2VUZXh0
dXJlTG9jYXRpb247CisgICAgR0MzRGludCBtX29wYWNpdHlMb2NhdGlvbjsKKyAgICBHQzNEaW50
IG1fbWFza1RleHR1cmVMb2NhdGlvbjsKIAogcHJpdmF0ZToKICAgICBDU3RyaW5nIG1fdmVydGV4
U2hhZGVyU291cmNlOwpAQCAtODcsMzMgKzg4LDM2IEBAIHByaXZhdGU6CiBjbGFzcyBTdGFuZGFy
ZEZpbHRlclByb2dyYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxTdGFuZGFyZEZpbHRlclByb2dyYW0+
IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TdGFuZGFyZEZpbHRlclByb2dyYW0oKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcHJlcGFyZShjb25zdCBGaWx0ZXJPcGVyYXRpb24mLCB1bnNpZ25lZCBwYXNz
LCBjb25zdCBJbnRTaXplJiwgR0x1aW50IGNvbnRlbnRUZXh0dXJlKTsKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IGNyZWF0ZShGaWx0ZXJPcGVyYXRpb246Ok9w
ZXJhdGlvblR5cGUsIHVuc2lnbmVkIHBhc3MpOwotICAgIEdMdWludCB2ZXJ0ZXhBdHRyaWIoKSBj
b25zdCB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQotICAgIEdMdWludCB0ZXhDb29yZEF0dHJp
YigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4Q29vcmRBdHRyaWI7IH0KLSAgICBHTHVpbnQgdGV4dHVy
ZVVuaWZvcm0oKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb247IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShjb25zdCBGaWx0ZXJPcGVyYXRpb24mLCB1bnNpZ25lZCBw
YXNzLCBjb25zdCBJbnRTaXplJiwgR0MzRHVpbnQgY29udGVudFRleHR1cmUpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gY3JlYXRlKEdyYXBoaWNzQ29udGV4
dDNEKiwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBwYXNzKTsKKyAg
ICBHQzNEdWludCB2ZXJ0ZXhBdHRyaWIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsg
fQorICAgIEdDM0R1aW50IHRleENvb3JkQXR0cmliKCkgY29uc3QgeyByZXR1cm4gbV90ZXhDb29y
ZEF0dHJpYjsgfQorICAgIEdDM0R1aW50IHRleHR1cmVVbmlmb3JtKCkgY29uc3QgeyByZXR1cm4g
bV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOyB9Citwcm90ZWN0ZWQ6CisgICAgR3JhcGhpY3NDb250
ZXh0M0QqIG1fY29udGV4dDsKIHByaXZhdGU6Ci0gICAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZp
bHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgcGFzcyk7Ci0gICAgR0x1aW50
IG1faWQ7Ci0gICAgR0x1aW50IG1fdmVydGV4U2hhZGVyOwotICAgIEdMdWludCBtX2ZyYWdtZW50
U2hhZGVyOwotICAgIEdMdWludCBtX3ZlcnRleEF0dHJpYjsKLSAgICBHTHVpbnQgbV90ZXhDb29y
ZEF0dHJpYjsKLSAgICBHTHVpbnQgbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOworICAgIFN0YW5k
YXJkRmlsdGVyUHJvZ3JhbSgpOworICAgIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbShHcmFwaGljc0Nv
bnRleHQzRCosIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgcGFzcyk7
CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2lkOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV92ZXJ0
ZXhTaGFkZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZyYWdtZW50U2hhZGVyOworICAgIEdD
M0R1aW50IG1fdmVydGV4QXR0cmliOworICAgIEdDM0R1aW50IG1fdGV4Q29vcmRBdHRyaWI7Cisg
ICAgR0MzRHVpbnQgbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOwogICAgIHVuaW9uIHsKLSAgICAg
ICAgR0x1aW50IGFtb3VudDsKKyAgICAgICAgR0MzRHVpbnQgYW1vdW50OwogCiAgICAgICAgIHN0
cnVjdCB7Ci0gICAgICAgICAgICBHTHVpbnQgcmFkaXVzOwotICAgICAgICAgICAgR0x1aW50IGdh
dXNzaWFuS2VybmVsOworICAgICAgICAgICAgR0MzRHVpbnQgcmFkaXVzOworICAgICAgICAgICAg
R0MzRHVpbnQgZ2F1c3NpYW5LZXJuZWw7CiAgICAgICAgIH0gYmx1cjsKIAogICAgICAgICBzdHJ1
Y3QgewotICAgICAgICAgICAgR0x1aW50IGJsdXJSYWRpdXM7Ci0gICAgICAgICAgICBHTHVpbnQg
Y29sb3I7Ci0gICAgICAgICAgICBHTHVpbnQgb2Zmc2V0OwotICAgICAgICAgICAgR0x1aW50IGNv
bnRlbnRUZXh0dXJlOwotICAgICAgICAgICAgR0x1aW50IGdhdXNzaWFuS2VybmVsOworICAgICAg
ICAgICAgR0MzRHVpbnQgYmx1clJhZGl1czsKKyAgICAgICAgICAgIEdDM0R1aW50IGNvbG9yOwor
ICAgICAgICAgICAgR0MzRHVpbnQgb2Zmc2V0OworICAgICAgICAgICAgR0MzRHVpbnQgY29udGVu
dFRleHR1cmU7CisgICAgICAgICAgICBHQzNEdWludCBnYXVzc2lhbktlcm5lbDsKICAgICAgICAg
fSBzaGFkb3c7CiAgICAgfSBtX3VuaWZvcm1Mb2NhdGlvbnM7CiB9OwpAQCAtMTIxLDc3ICsxMjUs
ODkgQEAgcHJpdmF0ZToKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUg
OiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlPiBjcmVhdGUoKQor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlPiBj
cmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCkpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKGNv
bnRleHQpKTsKICAgICB9CiAKIHByb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVNpbXBsZShHcmFwaGljc0NvbnRleHQzRCopOworcHJpdmF0ZToKICAgICBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1SZWN0U2ltcGxlIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVJlY3RTaW1wbGU+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1SZWN0U2ltcGxlPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdFNpbXBsZSgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoY29udGV4dCkpOwogICAgIH0KIAorcHJv
dGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZShHcmFwaGlj
c0NvbnRleHQzRCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJl
Y3RTaW1wbGUoKTsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0
eUFuZE1hc2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFu
ZE1hc2s+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1PcGFjaXR5QW5kTWFzaz4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soY29udGV4dCkpOwogICAgIH0K
IAorcHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1h
c2soR3JhcGhpY3NDb250ZXh0M0QqKTsKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1PcGFjaXR5QW5kTWFzaygpOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrPiBjcmVhdGUo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKCkpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVj
dE9wYWNpdHlBbmRNYXNrKGNvbnRleHQpKTsKICAgICB9CiAKK3Byb3RlY3RlZDoKKyAgICBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayhHcmFwaGljc0NvbnRleHQz
RCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5
QW5kTWFzaygpOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENv
bG9yIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IGNy
ZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1T
b2xpZENvbG9yPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRD
b2xvcigpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNvbGlkQ29sb3IoY29udGV4dCkpOwogICAgIH0KIAotICAgIEdMaW50IGNvbG9yTG9j
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbG9yTG9jYXRpb247IH0KKyAgICBHQzNEaW50IGNv
bG9yTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbG9yTG9jYXRpb247IH0KIAorcHJvdGVj
dGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcihHcmFwaGljc0Nv
bnRleHQzRCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlk
Q29sb3IoKTsKLSAgICBHTGludCBtX2NvbG9yTG9jYXRpb247CisgICAgR0MzRGludCBtX2NvbG9y
TG9jYXRpb247CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlh
c2luZ05vTWFzayA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxp
YXNpbmdOb01hc2s+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2soKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2so
Y29udGV4dCkpOwogICAgIH0KIAotICAgIEdMaW50IGV4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0
dXJlQ29vcmRpbmF0ZXNMb2NhdGlvbigpIHsgcmV0dXJuIG1fZXhwYW5kZWRRdWFkVmVydGljZXNJ
blRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247IH0KLSAgICBHTGludCBleHBhbmRlZFF1YWRFZGdl
c0luU2NyZWVuU3BhY2VMb2NhdGlvbigpIHsgcmV0dXJuIG1fZXhwYW5kZWRRdWFkRWRnZXNJblNj
cmVlblNwYWNlTG9jYXRpb247IH0KKyAgICBHQzNEaW50IGV4cGFuZGVkUXVhZFZlcnRpY2VzSW5U
ZXh0dXJlQ29vcmRpbmF0ZXNMb2NhdGlvbigpIHsgcmV0dXJuIG1fZXhwYW5kZWRRdWFkVmVydGlj
ZXNJblRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247IH0KKyAgICBHQzNEaW50IGV4cGFuZGVkUXVh
ZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uKCkgeyByZXR1cm4gbV9leHBhbmRlZFF1YWRFZGdl
c0luU2NyZWVuU3BhY2VMb2NhdGlvbjsgfQogCitwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2soR3JhcGhpY3NDb250ZXh0M0QqKTsKIHBy
aXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2so
KTsKIAotICAgIEdMaW50IG1fZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb3JkaW5hdGVz
TG9jYXRpb247Ci0gICAgR0xpbnQgbV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2Nh
dGlvbjsKKyAgICBHQzNEaW50IG1fZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb3JkaW5h
dGVzTG9jYXRpb247CisgICAgR0MzRGludCBtX2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFj
ZUxvY2F0aW9uOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgewpAQCAt
MjA2LDcgKzIyMiw4IEBAIHB1YmxpYzoKICAgICAgICAgU29saWRDb2xvcgogICAgIH07CiAKLSAg
ICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpOworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyKCkgeyB9OworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKEdyYXBoaWNzQ29u
dGV4dDNEKik7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKTsKIAog
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTIyMSwxMiArMjM4LDEyIEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFNoYWRlclR5cGUsIFJlZlB0cjxUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbT4sIERlZmF1bHRIYXNoPGludD46Okhhc2gsIEhhc2hUcmFpdHM8aW50
PiA+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOwogICAgIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtTWFwIG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7CisgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIG1fY29udGV4dDsKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICB0
eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiA+IEZpbHRl
ck1hcDsKICAgICBGaWx0ZXJNYXAgbV9maWx0ZXJNYXA7CiAjZW5kaWYKLQogfTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154725</attachid>
            <date>2012-07-26 12:55:56 -0700</date>
            <delta_ts>2012-07-26 16:01:48 -0700</delta_ts>
            <desc>GraphicsContext3DQt</desc>
            <filename>bug-78672-20120726125545.patch</filename>
            <type>text/plain</type>
            <size>13351</size>
            <attacher name="Helder Correia">helder.correia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODgyNmYzMjk2YTVjZmNj
MTYyZDY1NGE1OTFjOGQ2NmIzNDRkMjIxNy4uYmI3YjRkMGQ0MDM2ZGNhN2U3YjE3Y2NhZjBmYmZi
MTdkNmYzODU0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEyLTA3LTI2ICBIZWxk
ZXIgQ29ycmVpYSAgPGhlbGRlci5jb3JyZWlhQG5va2lhLmNvbT4KKworICAgICAgICBbVGV4bWFw
XSBNb3ZlIFRleHR1cmVNYXBwZXJHTCB0byB1c2UgR3JhcGhpY3NDb250ZXh0M0QKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NjcyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IG9mIGEg
c2V2ZXJhbCBwYXRjaC1yZWZhY3RvcmluZy4KKworICAgICAgICBJbnRyb2R1Y2UgYWRkaXRpb25h
bCBsb2dpYyBpbiBHcmFwaGljc0NvbnRleHQzRFF0IHRvIHN1cHBvcnQgYQorICAgICAgICBuZXcg
UmVuZGVyVG9DdXJyZW50R0xDb250ZXh0IFJlbmRlclN0eWxlLiBUaGlzIGlzIG5lY2Vzc2FyeSB0
bworICAgICAgICB1c2UgR0MzRCBmb3Igb3RoZXIgdGhpbmdzIHRoYW4gV2ViR0wsIGxpa2UgVGV4
dHVyZU1hcHBlci4gQSBuZXcKKyAgICAgICAgR0MzRDo6Y3JlYXRlV3JhcHBlckZvckN1cnJlbnRH
TENvbnRleHQoKSBidWlsZGVyIHdhcyBpbnRyb2R1Y2VkCisgICAgICAgIHRvIGJldHRlciBhYnN0
cmFjdCB0aGUgZ29hbCBvZiB1c2luZyBHQzNEIHdpdGggdGhlIGN1cnJlbnQKKyAgICAgICAgY29u
dGV4dC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHJlZmFjdG9yaW5nLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKEdyYXBoaWNz
Q29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZVdyYXBwZXJGb3JDdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQu
Y3BwOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlT2Zmc2Ny
ZWVuQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6aW5pdGlhbGl6ZUFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKwogMjAxMi0wNy0yMCAgRGF2aWQgR3JvZ2Fu
ICA8ZGdyb2dhbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBJbmNsdWRlIGlu
dFZlcnNpb24gd2hlbiBjb252ZXJ0aW5nIGJldHdlZW4gV2ViQ29yZSBhbmQgV2ViS2l0IElEQk1l
dGFkYXRhIHR5cGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCA3NDMzZGY2MjZmNGNhYjJhY2M2Y2EwOThhNjI4MGQ0
OGQ0OWEyYjE5Li41ODQxMzBhODEzZGRlMjYxOGI0ZGY0YmQ5NjIzYmE4NDY3YTNiOTY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmgKQEAgLTQ2Myw3ICs0NjMsOCBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFJlbmRlclN0eWxl
IHsKICAgICAgICAgUmVuZGVyT2Zmc2NyZWVuLAotICAgICAgICBSZW5kZXJEaXJlY3RseVRvSG9z
dFdpbmRvdworICAgICAgICBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdywKKyAgICAgICAgUmVu
ZGVyVG9DdXJyZW50R0xDb250ZXh0CiAgICAgfTsKIAogICAgIGNsYXNzIENvbnRleHRMb3N0Q2Fs
bGJhY2sgewpAQCAtNDgyLDYgKzQ4Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEVycm9yTWVz
c2FnZUNhbGxiYWNrKFBhc3NPd25QdHI8RXJyb3JNZXNzYWdlQ2FsbGJhY2s+KTsKIAogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGUoQXR0cmlidXRlcywgSG9z
dFdpbmRvdyosIFJlbmRlclN0eWxlID0gUmVuZGVyT2Zmc2NyZWVuKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlV3JhcHBlckZvckN1cnJlbnRHTENvbnRl
eHQoKTsKICAgICB+R3JhcGhpY3NDb250ZXh0M0QoKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKQEAg
LTg2NSw2ICs4NjcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHVuc2lnbmVkIGdldENoYW5uZWxC
aXRzQnlGb3JtYXQoR0MzRGVudW0pOwogCiAgIHByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0
M0QoQXR0cmlidXRlcywgSG9zdFdpbmRvdyosIFJlbmRlclN0eWxlID0gUmVuZGVyT2Zmc2NyZWVu
KTsKICAgICBHcmFwaGljc0NvbnRleHQzRChBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBo
b3N0V2luZG93LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKIAogICAgIC8vIEVh
Y2ggcGxhdGZvcm0gbXVzdCBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9k
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXgg
YTRkMWViNGNkOTNjNDc2MzM2YzAyZjYxM2JmYzY1OTQ0ZDI4NmNiOC4uODcyMjhjYmEwMjBiMmQz
MDZhMGNmYzA1ZTEzYjBhYjBkYjIyNzQzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0xDb21tb24uY3BwCkBAIC03MCw2ICs3MCwxMiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK1Bhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVXcmFwcGVyRm9yQ3VycmVudEdMQ29udGV4dCgpCit7CisgICAgUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKEF0
dHJpYnV0ZXMoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclRvQ3VycmVudEdMQ29udGV4
dCkpOworICAgIHJldHVybiBjb250ZXh0LT5tX3ByaXZhdGUgPyBjb250ZXh0LnJlbGVhc2UoKSA6
IDA7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKGNv
bnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikKIHsKICAgICBFeHRlbnNpb25z
M0QqIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCmlu
ZGV4IDg5NWY3NjY4ODAzOWU4MWYyZjcwYmZhZDgwMDVmMDc3YmRlNTFkMTguLjk4NTY1MzU5N2M5
MTgwYjAzYzlmOWI0YThiMmI4NDljNzJlOTA0ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCkBA
IC02Myw3ICs2Myw3IEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZQogI2VuZGlmCiB7
CiBwdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNE
KiwgSG9zdFdpbmRvdyopOworICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0Nv
bnRleHQzRCosIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUpOwog
ICAgIH5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUoKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKQEAgLTc3LDYgKzc3LDggQEAgcHVibGljOgogICAgIHZvaWQgYmxpdE11bHRp
c2FtcGxlRnJhbWVidWZmZXIoKSBjb25zdDsKICAgICB2b2lkIGJsaXRNdWx0aXNhbXBsZUZyYW1l
YnVmZmVyQW5kUmVzdG9yZUNvbnRleHQoKSBjb25zdDsKICAgICBib29sIG1ha2VDdXJyZW50SWZO
ZWVkZWQoKSBjb25zdDsKKyAgICB2b2lkIGNyZWF0ZU9mZnNjcmVlbkJ1ZmZlcnMoKTsKKyAgICB2
b2lkIGluaXRpYWxpemVBTkdMRSgpOwogICAgIHZvaWQgY3JlYXRlR3JhcGhpY3NTdXJmYWNlcyhj
b25zdCBJbnRTaXplJik7CiAKICAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwpAQCAt
MTA2LDcgKzEwOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21w
aWxlcigpCiB9CiAjZW5kaWYKIAotR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3cpCitHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywg
R3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogICAgIDogbV9jb250
ZXh0KGNvbnRleHQpCiAgICAgLCBtX2hvc3RXaW5kb3coaG9zdFdpbmRvdykKICAgICAsIG1fc3Vy
ZmFjZSgwKQpAQCAtMTIzLDYgKzEyNSwxNyBAQCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Okdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSAogICAg
ICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKHJlbmRlclN0eWxlID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpIHsKKyNpZiBIQVZFKFFUNSkKKyAgICAg
ICAgbV9wbGF0Zm9ybUNvbnRleHQgPSBRT3BlbkdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKTsK
KyAgICAgICAgbV9zdXJmYWNlID0gbV9wbGF0Zm9ybUNvbnRleHQtPnN1cmZhY2UoKTsKKyNlbHNl
CisgICAgICAgIG1fcGxhdGZvcm1Db250ZXh0ID0gY29uc3RfY2FzdDxRR0xDb250ZXh0Kj4oUUdM
Q29udGV4dDo6Y3VycmVudENvbnRleHQoKSk7CisgICAgICAgIG1fc3VyZmFjZSA9IHN0YXRpY19j
YXN0PFFHTFdpZGdldCo+KG1fcGxhdGZvcm1Db250ZXh0LT5kZXZpY2UoKSk7CisjZW5kaWYKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKwogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQogICAgIC8v
IEZJWE1FOiBGaW5kIGEgd2F5IHRvIGNyZWF0ZSBhIFFPcGVuR0xDb250ZXh0IHdpdGhvdXQgY3Jl
YXRpbmcgYSBRV2luZG93IGF0IGFsbC4KICAgICAvLyBXZSBuZWVkIHRvIGNyZWF0ZSBhIHN1cmZh
Y2UgaW4gb3JkZXIgdG8gY3JlYXRlIGEgUU9wZW5HTENvbnRleHQgYW5kIG1ha2UgaXQgY3VycmVu
dC4KQEAgLTI5Niw2ICszMDksNTkgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om1h
a2VDdXJyZW50SWZOZWVkZWQoKSBjb25zdAogI2VuZGlmCiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpjcmVhdGVPZmZzY3JlZW5CdWZmZXJzKCkKK3sKKyAgICBnbEdlbkZyYW1l
YnVmZmVycygvKiBjb3VudCAqLyAxLCAmbV9jb250ZXh0LT5tX2Zibyk7CisKKyAgICBnbEdlblRl
eHR1cmVzKDEsICZtX2NvbnRleHQtPm1fdGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb250ZXh0LT5tX3RleHR1cmUpOworICAgIGds
VGV4UGFyYW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Cisg
ICAgZ2xUZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFS
KTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1Q
X1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQz
RDo6Q0xBTVBfVE9fRURHRSk7CisgICAgZ2xCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgMCk7CisKKyAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCisgICAg
aWYgKG1fY29udGV4dC0+bV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZ2xHZW5GcmFtZWJ1
ZmZlcnMoMSwgJm1fY29udGV4dC0+bV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIGdsQmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9jb250ZXh0LT5tX211
bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgbV9jb250ZXh0LT5tX2JvdW5kRkJPID0gbV9jb250ZXh0
LT5tX211bHRpc2FtcGxlRkJPOworICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fY29u
dGV4dC0+bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+
bV9hdHRycy5zdGVuY2lsIHx8IG1fY29udGV4dC0+bV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAg
IGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9jb250ZXh0LT5tX211bHRpc2FtcGxlRGVwdGhTdGVu
Y2lsQnVmZmVyKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBCaW5kIGNhbnZhcyBGQk8uCisg
ICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
bV9jb250ZXh0LT5tX2Zibyk7CisgICAgICAgIG1fY29udGV4dC0+bV9ib3VuZEZCTyA9IG1fY29u
dGV4dC0+bV9mYm87CisjaWYgVVNFKE9QRU5HTF9FU18yKQorICAgICAgICBpZiAobV9jb250ZXh0
LT5tX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2Nv
bnRleHQtPm1fZGVwdGhCdWZmZXIpOworICAgICAgICBpZiAobV9jb250ZXh0LT5tX2F0dHJzLnN0
ZW5jaWwpCisgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fY29udGV4dC0+bV9z
dGVuY2lsQnVmZmVyKTsKKyNlbmRpZgorICAgICAgICBpZiAobV9jb250ZXh0LT5tX2F0dHJzLnN0
ZW5jaWwgfHwgbV9jb250ZXh0LT5tX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgZ2xHZW5SZW5k
ZXJidWZmZXJzKDEsICZtX2NvbnRleHQtPm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppbml0aWFsaXplQU5HTEUoKQorewor
ICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlczsKKyAgICBTaEluaXRCdWlsdElu
UmVzb3VyY2VzKCZBTkdMRVJlc291cmNlcyk7CisKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2
KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5N
YXhWZXJ0ZXhBdHRyaWJzKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZl
cnRleFVuaWZvcm1WZWN0b3JzKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfVkFSWUlOR19WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmFyeWlu
Z1ZlY3RvcnMpOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRl
eFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3Vy
Y2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIG1fY29udGV4dC0+Z2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVS
ZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMpOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdl
cnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdM
RVJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKKworICAgIC8vIEFsd2F5cyBz
ZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgorICAgIEFOR0xFUmVzb3VyY2VzLk1heERyYXdCdWZmZXJz
ID0gMTsKKyAgICBtX2NvbnRleHQtPm1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3Vy
Y2VzKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNz
U3VyZmFjZXMoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKQEAgLTMxNCwxMSArMzgwLDExIEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpCiAgICAgLy8g
VGhpcyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IHJlbmRlcmluZyBk
aXJlY3RseSB0byB0aGUgSG9zdFdpbmRvdy4KICAgICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVy
RGlyZWN0bHlUb0hvc3RXaW5kb3cpCiAgICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChh
dHRycywgaG9zdFdpbmRvdywgZmFsc2UpKTsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5k
b3csIHJlbmRlclN0eWxlKSk7CiAgICAgcmV0dXJuIGNvbnRleHQtPm1fcHJpdmF0ZSA/IGNvbnRl
eHQucmVsZWFzZSgpIDogMDsKIH0KIAotR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4
dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0
V2luZG93LCBib29sKQorR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBH
cmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiAgICAgOiBtX2N1cnJl
bnRXaWR0aCgwKQogICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCiAgICAgLCBtX2NvbXBpbGVyKGlz
R0xFUzJDb21wbGlhbnQoKSA/IFNIX0VTU0xfT1VUUFVUIDogU0hfR0xTTF9PVVRQVVQpCkBAIC0z
MzksNyArNDA1LDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICAsIG1fbXVsdGlzYW1w
bGVGQk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKICAgICAs
IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQotICAgICwgbV9wcml2YXRlKGFkb3B0UHRyKG5l
dyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUodGhpcywgaG9zdFdpbmRvdykpKQorICAgICwgbV9w
cml2YXRlKGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUodGhpcywgaG9zdFdp
bmRvdywgcmVuZGVyU3R5bGUpKSkKIHsKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIApAQCAt
MzYwLDU0ICs0MjYsMTAgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIC8vIENyZWF0ZSBidWZmZXJzIGZvciB0aGUgY2FudmFzIEZCTy4KLSAg
ICBnbEdlbkZyYW1lYnVmZmVycygvKiBjb3VudCAqLyAxLCAmbV9mYm8pOwotCi0gICAgZ2xHZW5U
ZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJ
TFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9N
SU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7Ci0g
ICAgZ2xCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CisgICAg
aWYgKHJlbmRlclN0eWxlID09IFJlbmRlck9mZnNjcmVlbikKKyAgICAgICAgbV9wcml2YXRlLT5j
cmVhdGVPZmZzY3JlZW5CdWZmZXJzKCk7CiAKLSAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBG
Qk8uCi0gICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7Ci0gICAgICAgIGdsR2VuRnJhbWVidWZm
ZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAg
bV9ib3VuZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAgIGdsR2VuUmVuZGVyYnVmZmVy
cygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgaWYgKG1fYXR0cnMuc3Rl
bmNpbCB8fCBtX2F0dHJzLmRlcHRoKQotICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEs
ICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICAvLyBCaW5kIGNhbnZhcyBGQk8uCi0gICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICBtX2JvdW5kRkJPID0gbV9m
Ym87Ci0jaWYgVVNFKE9QRU5HTF9FU18yKQotICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKLSAg
ICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAg
IGlmIChtX2F0dHJzLnN0ZW5jaWwpCi0gICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwg
Jm1fc3RlbmNpbEJ1ZmZlcik7Ci0jZW5kaWYKLSAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8
fCBtX2F0dHJzLmRlcHRoKQotICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2Rl
cHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQotCi0gICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24u
Ci0gICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzOwotICAgIFNoSW5pdEJ1aWx0
SW5SZXNvdXJjZXMoJkFOR0xFUmVzb3VyY2VzKTsKLQotICAgIGdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhB
dHRyaWJzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9V
TklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7
Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlMs
ICZBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVz
b3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFw
aGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJl
c291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsgCi0gICAgZ2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJj
ZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dDNEOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4RnJh
Z21lbnRVbmlmb3JtVmVjdG9ycyk7Ci0KLSAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5H
TCBFUy4KLSAgICBBTkdMRVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7Ci0gICAgbV9jb21w
aWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworICAgIG1fcHJpdmF0ZS0+aW5pdGlh
bGl6ZUFOR0xFKCk7CiAKICNpZiAhVVNFKE9QRU5HTF9FU18yKQogICAgIGdsRW5hYmxlKEdMX1BP
SU5UX1NQUklURSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154727</attachid>
            <date>2012-07-26 12:57:50 -0700</date>
            <delta_ts>2012-07-26 16:01:54 -0700</delta_ts>
            <desc>TextureMapperGL</desc>
            <filename>bug-78672-20120726125738.patch</filename>
            <type>text/plain</type>
            <size>108733</size>
            <attacher name="Helder Correia">helder.correia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2ZiM2QwOWNjYjgwNTQ4
ZjQ5MGFhN2M2MTNmN2U5MmE0OTIxZTA1YS4uOTg3OGJhZDM5OTRiZWNkMzI0MTllOWRkMmJkYTM0
NDQwMTcyMWVkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNyw2ICs3LDE2NyBAQAogCiAgICAgICAgIFRoaXMg
aXMgcGFydCBvZiBhIHNldmVyYWwgcGF0Y2gtcmVmYWN0b3JpbmcuCiAKKyAgICAgICAgVGV4dHVy
ZU1hcHBlckdMIChUTUdMKSBpbmNsdWRlcyBkaXJlY3QgR0wgY2FsbHMgYW5kCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dDNEIChHQzNEKSBvZmZlcnMgbWFueSBjb252ZW5pZW5jZXMgb3ZlciB0aGUK
KyAgICAgICAgZm9ybWVyIGFwcHJvYWNoOiB1c2luZyBleGlzdGluZyBDU1Mgc2hhZGVyIGNvZGUs
IEFOR0xFIGZvcgorICAgICAgICBzaGFkZXIgY29tcGlsYXRpb24sIHJldXNpbmcgV2ViQ29yZTo6
VGV4dHVyZSwgaGF2aW5nIHNoYWRlcnMgYW5kCisgICAgICAgIHRleHR1cmVzIHRoYXQgY2FuIGRl
bGV0ZSB0aGVtc2VsdmVzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGUgYmFja2Vu
ZCBvZiBUTUdMIHRvIEdDM0QuIEl0IHdhcyBpbml0aWFsbHkKKyAgICAgICAgdGhvdWdodCB0byBp
bnRyb2R1Y2UgYSBuZXcgYmFja2VuZCAoc2F5LCBUZXh0dXJlTWFwcGVyR0MzRCksIGJ1dAorICAg
ICAgICBpbiB0aGUgZW5kIGl0IHdhcyBhZ3JlZWQgdG8gY29uc29saWRhdGUgaXQgaW5zaWRlIFRN
R0wgaW5zdGVhZCwKKyAgICAgICAgYXMgYW4gYWRkaXRpb25hbCBUZXh0dXJlTWFwcGVyIHN1YmNs
YXNzIHdvdWxkIGdldCBzdGFsZSB2ZXJ5CisgICAgICAgIHF1aWNrbHkuCisKKyAgICAgICAgQSBH
QzNEIG9iamVjdCBpcyBjcmVhdGVkIGJ5IFRNR0wgd2l0aCB0aGUgbmV3bHkgaW50cm9kdWNlZAor
ICAgICAgICBSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQgZmxhZy4gVGhlIEdDM0QgY29uc3RydWN0
b3Igbm93IGFjY2VwdHMKKyAgICAgICAgdGhlIFJlbmRlclN0eWxlIGluc3RlYWQgb2YgdGhlIGJv
b2xlYW4KKyAgICAgICAgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cgYW5kIHRodXMgbWltaWMg
Y3JlYXRlKCkncyBzaWduYXR1cmUuCisgICAgICAgIFRoaXMgaGFzIGJlZW4gY2hhbmdlZCBmb3Ig
YWxsIHBvcnRzIGluIHRoaXMgcGF0Y2guCisKKyAgICAgICAgVE1HTCdzIGRlcGVuZGVuY3kgb24g
T3BlbkdMU2hpbXMuaCB3YXMgY29tcGxldGVseSByZW1vdmVkLgorICAgICAgICBIb3dldmVyLCBH
QzNEIGRvZXMgbm90IG1hcCBldmVyeSBzaW5nbGUgR0wgY29uc3RhbnQuIFRodXMsIGl0J3MKKyAg
ICAgICAgaW1wb3J0YW50IHRvIGRvY3VtZW50IHRoZSBmb2xsb3dpbmcgbm90ZXM6CisgICAgICAg
ICAgICAtIEdMX0ZBTFNFIHdhcyBtYXBwZWQgdG8gZmFsc2UuCisgICAgICAgICAgICAtIEdMX1VO
UEFDS19ST1dfTEVOR1RILCBHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsCisgICAgICAgICAgICBHTF9V
TlBBQ0tfU0tJUF9ST1dTLCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIGFuZAorICAgICAgICAg
ICAgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWIHdlcmUgbG9jYWxseSBkZWZpbmVkIGluIFRN
R0wuCisKKyAgICAgICAgQSBuZXcgR0MzRDo6dGV4SW1hZ2UyRERpcmVjdCgpIGZ1bmN0aW9uIHdh
cyBpbnRyb2R1Y2VkIHRvIGFsbG93CisgICAgICAgIGluaXRpYWxpemF0aW9uIG9mIHRleHR1cmVz
IHdpdGhvdXQgYWxsb2NhdGlvbi4gVGhlIGV4aXN0aW5nCisgICAgICAgIHRleHRJbWFnZTJEKCkg
cmVmdXNlcyBhIG51bGwgcGl4ZWwgYnVmZmVyLCBhbmQKKyAgICAgICAgdGV4SW1hZ2UyRFJlc291
cmNlU2FmZSgpIGFsbG93cyBpdCBidXQgcGVyZm9ybXMgbWVtb3J5CisgICAgICAgIGFsbG9jYXRp
b24gYW5kIHplcm9lcyB0aGUgYml0cy4gVGhpcyB3YXMgbm90IGZhc3QgZW5vdWdoIGZvcgorICAg
ICAgICBCaXRtYXBUZXh0dXJlR0wgZnJlcXVlbnQgc2V0dGluZyB1cC4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIHJlZmFjdG9yaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4dDNEQmxhY2tCZXJy
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJERGlyZWN0KToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFNoYXJlZEdMRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRH
TERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xE
YXRhOjpTaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0
YTo6c2hhcmVkR0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6
OlRleHR1cmVNYXBwZXJHTERhdGEpOgorICAgICAgICAoVGV4dHVyZU1hcHBlckdMRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpzY2lzc29yQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OkNsaXBTdGFjazo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMRGF0YTo6aW5pdGlhbGl6ZVN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMOjpiZWdpblBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TDo6ZW5kUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3
UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRy
YXdUZXh0dXJlUmVjdGFuZ2xlQVJCKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TDo6ZHJhd1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6dmlld3BvcnRNYXRyaXgpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFk
V2l0aFByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpkaWRSZXNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0ZpbHRlcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6aW5pdGlhbGl6ZVN0ZW5jaWwpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpjbGVhcklmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6Y3JlYXRlRmJvSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwVGV4dHVyZUdMOjpiaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRl
eHR1cmVHTDo6fkJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyR0w6OmJpbmREZWZhdWx0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyR0w6OmJlZ2luU2Npc3NvckNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckdMOjpiZWdpbkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjplbmRD
bGlwKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlVGV4dHVyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpncmFwaGljc0NvbnRleHQzRCk6Cisg
ICAgICAgIChUZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoQ2xpcFN0YWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6dGV4dHVyZVRhcmdldCk6CisgICAgICAgIChCaXRt
YXBUZXh0dXJlR0wpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpCaXRtYXBU
ZXh0dXJlR0wpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bTo6aW5pdGlhbGl6ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29s
aWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJl
Y3RTaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2spOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6flN0YW5kYXJkRmlsdGVyUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJk
RmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dyYW06
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dyYW06OnByZXBh
cmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNo
YWRlckZvckZpbHRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW06OnZlcnRleEF0dHJpYik6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6bWF0
cml4TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmZsaXBMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbTo6dGV4dHVyZVNpemVMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbTo6c291cmNlVGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjptYXNrVGV4dHVyZUxvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpvcGFjaXR5TG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Omlz
VmFsaWRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6dmVydGV4QXR0cmliKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6dGV4Q29vcmRBdHRyaWIp
OgorICAgICAgICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp0ZXh0dXJlVW5pZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6
Y3JlYXRlKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3Jl
YXRlKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNr
OjpjcmVhdGUpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5k
TWFzayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RP
cGFjaXR5QW5kTWFzazo6Y3JlYXRlKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtUmVjdE9wYWNpdHlBbmRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU29saWRDb2xvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6Y29sb3JMb2NhdGlvbik6CisgICAgICAg
IChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2lu
Z05vTWFzazo6ZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb29yZGluYXRlc0xvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFz
aW5nTm9NYXNrOjpleHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbik6CisgICAg
ICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIpOgorCisy
MDEyLTA3LTI2ICBIZWxkZXIgQ29ycmVpYSAgPGhlbGRlci5jb3JyZWlhQG5va2lhLmNvbT4KKwor
ICAgICAgICBbVGV4bWFwXSBNb3ZlIFRleHR1cmVNYXBwZXJHTCB0byB1c2UgR3JhcGhpY3NDb250
ZXh0M0QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4
NjcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBpcyBwYXJ0IG9mIGEgc2V2ZXJhbCBwYXRjaC1yZWZhY3RvcmluZy4KKwogICAgICAgICBJbnRy
b2R1Y2UgYWRkaXRpb25hbCBsb2dpYyBpbiBHcmFwaGljc0NvbnRleHQzRFF0IHRvIHN1cHBvcnQg
YQogICAgICAgICBuZXcgUmVuZGVyVG9DdXJyZW50R0xDb250ZXh0IFJlbmRlclN0eWxlLiBUaGlz
IGlzIG5lY2Vzc2FyeSB0bwogICAgICAgICB1c2UgR0MzRCBmb3Igb3RoZXIgdGhpbmdzIHRoYW4g
V2ViR0wsIGxpa2UgVGV4dHVyZU1hcHBlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDU4NDEzMGE4MTNkZGUyNjE4
YjRkZjRiZDk2MjNiYTg0NjdhM2I5NjguLjIwZjhmNTA0Njk0ZjViZGQxODQzODhhZDRiZTlmNDJj
YzViMTA2ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaApAQCAtNTMxLDYgKzUzMSw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IHByZXBhcmVUZXh0dXJlKCk7CiAjZW5kaWYKIAorICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRl
eEltYWdlMkQoKS4gQWxsb3dzIHBpeGVscz09MCB3aXRoIG5vIGFsbG9jYXRpb24uCisgICAgdm9p
ZCB0ZXhJbWFnZTJERGlyZWN0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCog
cGl4ZWxzKTsKKwogICAgIC8vIEhlbHBlciB0byB0ZXhJbWFnZTJEIHdpdGggcGl4ZWw9PTAgY2Fz
ZTogcGl4ZWxzIGFyZSBpbml0aWFsaXplZCB0byAwLgogICAgIC8vIFJldHVybiB0cnVlIGlmIG5v
IEdMIGVycm9yIGlzIHN5bnRoZXNpemVkLgogICAgIC8vIEJ5IGRlZmF1bHQsIGFsaWdubWVudCBp
cyA0LCB0aGUgT3BlbkdMIGRlZmF1bHQgc2V0dGluZy4KQEAgLTg2OCw3ICs4NzEsNiBAQCBwdWJs
aWM6CiAKICAgcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHQzRChBdHRyaWJ1dGVzLCBIb3N0
V2luZG93KiwgUmVuZGVyU3R5bGUgPSBSZW5kZXJPZmZzY3JlZW4pOwotICAgIEdyYXBoaWNzQ29u
dGV4dDNEKEF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wgcmVu
ZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwogCiAgICAgLy8gRWFjaCBwbGF0Zm9ybSBtdXN0IHBy
b3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QuCiAgICAgLy8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3ND
b250ZXh0M0RCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcAppbmRleCBkZDRlM2Y0
Yzg1YTg2MzQ1MTljM2ZlMmMwM2ZlM2FjY2MwNTNjOGE3Li45Y2IyNGY5ZTQzMDYwNjgzNDE2Zjc5
OGFiN2MzMzA4ODA1YzRlNWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4dDNEQmxhY2tCZXJyeS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRl
eHQzREJsYWNrQmVycnkuY3BwCkBAIC00NywxMCArNDcsMTAgQEAgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShBdHRyaWJ1dGVzIGF0dHJpYnMs
IEhvc3QKICAgICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cp
CiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHcmFwaGljc0Nv
bnRleHQzRChhdHRyaWJzLCBob3N0V2luZG93LCBmYWxzZSkpOworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cmlicywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUp
KTsKIH0KIAotR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29u
dGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiwgYm9vbCByZW5kZXJEaXJlY3Rs
eVRvSG9zdFdpbmRvdykKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyosIEdyYXBoaWNzQ29u
dGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKICAgICA6IG1fY3VycmVudFdpZHRoKDAp
CiAgICAgLCBtX2N1cnJlbnRIZWlnaHQoMCkKICAgICAsIG1fY29udGV4dChCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OmNyZWF0ZVdlYkdMQ29udGV4dCgpKQpAQCAtNjYsNyArNjYsNyBA
QCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQogICAgICwgbV9ib3VuZFRleHR1cmUwKDApCiAgICAg
LCBtX2lzSW1hZ2luYXRpb25IYXJkd2FyZSgwKQogewotICAgIGlmICghcmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3cpIHsKKyAgICBpZiAocmVuZGVyU3R5bGUgIT0gUmVuZGVyRGlyZWN0bHlUb0hv
c3RXaW5kb3cpIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgICAgIG1f
Y29tcG9zaXRpbmdMYXllciA9IFdlYkdMTGF5ZXJXZWJLaXRUaHJlYWQ6OmNyZWF0ZSgpOwogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHQzRENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCmluZGV4IDYyZGExYTE2YzkxMWI0
MDRhY2EwMzc1MzQxNjczZjI3NjgxOTI1ZjYuLjcwM2IzZGM2OWQyNTY0YmZhMzZlY2ZlYWEzM2I1
MWYxNjc3M2RkMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCkBAIC02MCwx
MSArNjAsMTEgQEAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0
M0Q6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmkKICAgICBpZiAoIXN1Y2Nlc3MpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0
ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3cs
IGZhbHNlKSk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRS
ZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3csIHJlbmRlclN0
eWxlKSk7CiAgICAgcmV0dXJuIGNvbnRleHQucmVsZWFzZSgpOwogfQogCi1HcmFwaGljc0NvbnRl
eHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0
cmlidXRlcywgSG9zdFdpbmRvdyosIGJvb2wpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3ND
b250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdp
bmRvdyosIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSkKICAgICA6IG1fY3VycmVudFdp
ZHRoKDApCiAgICAgLCBtX2N1cnJlbnRIZWlnaHQoMCkKICAgICAsIG1fYXR0cnMoYXR0cmlidXRl
cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIv
R3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcAppbmRleCA0YjRiMGUz
OWRiYWU1MTYzYTBhMTUxOTE3MDFlZTgyMmNkYTExYzA3Li5hYmZiZDQ3ZTZhZTMyMjkwODhhMzgz
YjAzNGU2ZjkxN2UzNGM4YmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0
ZXIuY3BwCkBAIC00MiwxMSArNDIsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cs
IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKIHsKLSAgICBSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250
ZXh0M0QoYXR0cmlidXRlcywgaG9zdFdpbmRvdywgZmFsc2UpKTsKKyAgICBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0
cmlidXRlcywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUpKTsKICAgICByZXR1cm4gY29udGV4dC5y
ZWxlYXNlKCk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiBob3N0V2lu
ZG93LCBib29sKQorR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cs
IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKIHsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKaW5kZXggZWZlMWExMmUy
YzI2NWYwZmFhOWU4ZGU0MTk2NDk5OTY1MmFlZWExYS4uNzIxZDdjN2JlYTU2ZTE4OTkwYTQxM2Y4
MTg1ZjJhZmU3ZjY1OTkzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCkBAIC0zNiwxMiAr
MzYsMTIgQEAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmkKICAgICBpZiAoIWludGVybmFsKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9
IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRvdywgcmVuZGVy
RGlyZWN0bHlUb0V2YXNHTE9iamVjdCkpOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRv
dywgcmVuZGVyU3R5bGUpKTsKICAgICBjb250ZXh0LT5tX3ByaXZhdGUgPSBpbnRlcm5hbC5yZWxl
YXNlKCk7CiAgICAgcmV0dXJuIGNvbnRleHQucmVsZWFzZSgpOwogfQogCi1HcmFwaGljc0NvbnRl
eHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0
cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5k
b3cpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0
M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29u
dGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKICAgICA6IG1fY3VycmVudFdpZHRoKDAp
CiAgICAgLCBtX2N1cnJlbnRIZWlnaHQoMCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQppbmRl
eCBkMDQyYzY2MGNmMzAyYTU2OWYwYzBmOWU0NWY2ZWE5MzZmYjRiMzg1Li4wMGU4MzEzNTBlNDRi
ZjAzY2IwYmM4YmQyZDkyZDBiMTc0MTEwYWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCkBA
IC05OCwxMSArOTgsMTEgQEAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3ND
b250ZXh0M0Q6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmkKICAgICAvLyBUaGlzIGlt
cGxlbWVudGF0aW9uIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgcmVuZGVyaW5nIGRpcmVjdGx5
IHRvIHRoZSBIb3N0V2luZG93LgogICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3Rs
eVRvSG9zdFdpbmRvdykKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBo
b3N0V2luZG93LCBmYWxzZSkpOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4
dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRvdywgcmVu
ZGVyU3R5bGUpKTsKICAgICByZXR1cm4gY29udGV4dC0+bV9jb250ZXh0T2JqID8gY29udGV4dC5y
ZWxlYXNlKCkgOiAwOwogfQogCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0Qo
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3csIGJvb2wpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBo
aWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKICAgICA6IG1fY3VycmVudFdp
ZHRoKDApCiAgICAgLCBtX2N1cnJlbnRIZWlnaHQoMCkKICAgICAsIG1fY29udGV4dE9iaigwKQpA
QCAtMTIyLDYgKzEyMiw3IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAgICAgLCBtX3ByaXZh
dGUoYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSh0aGlzKSkpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cpOworICAgIFVOVVNFRF9QQVJBTShyZW5kZXJTdHlsZSk7
CiAKICAgICBWZWN0b3I8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+IGF0dHJpYnM7CiAgICAgQ0dM
UGl4ZWxGb3JtYXRPYmogcGl4ZWxGb3JtYXRPYmogPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHQzRE9wZW5HTC5jcHAKaW5kZXggZmQ0NTAxNDFjNzRkZGEzYjQ5ZTg5NTc4NTljYmEyYjkwYTgz
N2Y1Mi4uOThlMTE0NWIzZGIyNGU1MWQ3Yjc1ZmQwNjcwOGZmYWUyNTZhZWIxMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCkBAIC0yNTYsNyArMjU2LDcgQEAgYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGUKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxV
RSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisKICAgICBHQzNEZW51bSBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IGludGVybmFsZm9ybWF0
OwogICAgIGlmICh0eXBlID09IEdMX0ZMT0FUKSB7CiAgICAgICAgIGlmIChmb3JtYXQgPT0gR0xf
UkdCQSkKQEAgLTI2NSw3ICsyNjUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZQogICAgICAg
ICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9SR0IzMkZfQVJCOwogICAgIH0KIAotICAg
IDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIG9wZW5HTEludGVybmFsRm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICB0ZXhJbWFnZTJE
RGlyZWN0KHRhcmdldCwgbGV2ZWwsIG9wZW5HTEludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggODcy
MjhjYmEwMjBiMmQzMDZhMGNmYzA1ZTEzYjBhYjBkYjIyNzQzYS4uODM1OTdmZjFhZjgwZDA3ZWE1
MWUwMjk4YjFjYTM5NDQ4MDhmMTRiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0xDb21tb24uY3BwCkBAIC0xMzg4LDYgKzEzODgsMTIgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9sYXllckNvbXBv
c2l0ZWQ7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkREaXJlY3QoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwor
fQorCiB9CiAKICNlbmRpZiAvLyBVU0UoM0RfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xF
Uy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0xFUy5jcHAKaW5kZXggNzlkZGNiYmZkOWE0YjU1ZWM4MjZlNDFiNTk1ZWVm
ODRlNjRkOWQwMy4uNTI4MWVjZmMzZTRlY2ZiOTdjMDczMzg5OWQ3NDRmZjVjYTA5ZjI2YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMRVMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcApAQCAtMzEsNiArMzEsNyBA
QAogI2lmIFVTRSgzRF9HUkFQSElDUykKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CisKICNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKICNpbmNsdWRlICJJbnRTaXplLmgiCkBAIC0yMzAsOCArMjMxLDggQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGUKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworCisgICAgdGV4SW1hZ2UyRERp
cmVjdCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVy
LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHTC5jcHAKaW5kZXggNjg4ZTI2ZjRlODlmZmYxM2RlNWIzZDU3OWM4MjBhOTM1ZWY5MTcy
Yy4uN2M4MjI1Njg5NDkzMzc2OGU5M2ZlMmI4MWIxMzBlNmM2YTllMjEyZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHTC5jcHAKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wu
aCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgiCkBAIC0zOSw5MSArMzgs
NDIgQEAKIAogI2lmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlUXQuaCIKLSNp
ZiBIQVZFKFFUNSkKLSNpbmNsdWRlIDxRT3BlbkdMQ29udGV4dD4KLSNlbHNlCi0jaW5jbHVkZSA8
UUdMQ29udGV4dD4KLSNlbmRpZiAvLyBRVF9WRVJTSU9OCi0jZWxpZiBPUyhXSU5ET1dTKQotI2lu
Y2x1ZGUgPHdpbmRvd3MuaD4KLSNlbGlmIE9TKE1BQ19PU19YKQotI2luY2x1ZGUgPEFHTC9hZ2wu
aD4KLSNlbGlmIGRlZmluZWQoWFBfVU5JWCkKLSNpbmNsdWRlIDxHTC9nbHguaD4KICNlbmRpZgog
Ci0jZGVmaW5lIEdMX0NNRCguLi4pIGRvIHsgX19WQV9BUkdTX187IEFTU0VSVF9BUkcoX19WQV9B
UkdTX18sICFnbEdldEVycm9yKCkpOyB9IHdoaWxlICgwKQorI2lmICFVU0UoVEVYTUFQX09QRU5H
TF9FU18yKQorLy8gRklYTUU6IE1vdmUgdG8gRXh0ZW5zaW9uczNELmguCisjZGVmaW5lIEdMX1RF
WFRVUkVfUkVDVEFOR0xFX0FSQiAweDg0RjUKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UXzhfOF84
XzhfUkVWIDB4ODM2NworI2RlZmluZSBHTF9VTlBBQ0tfUk9XX0xFTkdUSCAweDBDRjIKKyNkZWZp
bmUgR0xfVU5QQUNLX1NLSVBfUElYRUxTIDB4MENGNAorI2RlZmluZSBHTF9VTlBBQ0tfU0tJUF9S
T1dTIDB4MENGMworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0cnVjdCBUZXh0dXJl
TWFwcGVyR0xEYXRhIHsKICAgICBzdHJ1Y3QgU2hhcmVkR0xEYXRhIDogcHVibGljIFJlZkNvdW50
ZWQ8U2hhcmVkR0xEYXRhPiB7Ci0jaWYgUExBVEZPUk0oUVQpCi0jaWYgUVRfVkVSU0lPTiA+PSAw
eDA1MDAwMAotICAgICAgICB0eXBlZGVmIFFPcGVuR0xDb250ZXh0KiBHTENvbnRleHQ7Ci0gICAg
ICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdMQ29udGV4dCgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBRT3BlbkdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKTsKLSAgICAg
ICAgfQotI2Vsc2UKLSAgICAgICAgdHlwZWRlZiBjb25zdCBRR0xDb250ZXh0KiBHTENvbnRleHQ7
Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdMQ29udGV4dCgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBRR0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgpOwotICAg
ICAgICB9Ci0jZW5kaWYKLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgICAgIHR5cGVkZWYgSEdMUkMg
R0xDb250ZXh0OwotICAgICAgICBzdGF0aWMgR0xDb250ZXh0IGdldEN1cnJlbnRHTENvbnRleHQo
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gd2dsR2V0Q3VycmVudENvbnRleHQoKTsK
LSAgICAgICAgfQotI2VsaWYgT1MoTUFDX09TX1gpCi0gICAgICAgIHR5cGVkZWYgQUdMQ29udGV4
dCBHTENvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdMQ29udGV4
dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZ2xHZXRDdXJyZW50Q29udGV4dCgp
OwotICAgICAgICB9Ci0jZWxpZiBkZWZpbmVkKFhQX1VOSVgpCi0gICAgICAgIHR5cGVkZWYgR0xY
Q29udGV4dCBHTENvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdM
Q29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbFhHZXRDdXJyZW50Q29u
dGV4dCgpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICAvLyBEZWZhdWx0IGltcGxlbWVudGF0
aW9uIGZvciB1bmtub3duIG9wZW5nbC4KLSAgICAgICAgLy8gUmV0dXJucyBhbHdheXMgaW5jcmVh
c2luZyBudW1iZXIgYW5kIGRpc2FibGVzIEdMIGNvbnRleHQgZGF0YSBzaGFyaW5nLgotICAgICAg
ICB0eXBlZGVmIHVuc2lnbmVkIGludCBHTENvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRl
eHQgZ2V0Q3VycmVudEdMQ29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YXRpYyBH
TENvbnRleHQgZHVtbXlDb250ZXh0Q291bnRlciA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gKytk
dW1teUNvbnRleHRDb3VudGVyOwotICAgICAgICB9Ci0KLSNlbmRpZgotCi0gICAgICAgIHR5cGVk
ZWYgSGFzaE1hcDxHTENvbnRleHQsIFNoYXJlZEdMRGF0YSo+IEdMQ29udGV4dERhdGFNYXA7Cisg
ICAgICAgIHR5cGVkZWYgSGFzaE1hcDxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNELCBTaGFyZWRH
TERhdGEqPiBHTENvbnRleHREYXRhTWFwOwogICAgICAgICBzdGF0aWMgR0xDb250ZXh0RGF0YU1h
cCYgZ2xDb250ZXh0RGF0YU1hcCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0YXRpYyBHTENv
bnRleHREYXRhTWFwIG1hcDsKICAgICAgICAgICAgIHJldHVybiBtYXA7CiAgICAgICAgIH0KIAot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRHTERhdGE+IGN1cnJlbnRTaGFyZWRHTERh
dGEoKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRHTERhdGE+IGN1cnJlbnRTaGFy
ZWRHTERhdGEoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEdMQ29udGV4dCBjdXJyZW50R0xDb25leHQgPSBnZXRDdXJyZW50R0xDb250ZXh0KCk7Ci0g
ICAgICAgICAgICBHTENvbnRleHREYXRhTWFwOjppdGVyYXRvciBpdCA9IGdsQ29udGV4dERhdGFN
YXAoKS5maW5kKGN1cnJlbnRHTENvbmV4dCk7CisgICAgICAgICAgICBHTENvbnRleHREYXRhTWFw
OjppdGVyYXRvciBpdCA9IGdsQ29udGV4dERhdGFNYXAoKS5maW5kKGNvbnRleHQtPnBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QoKSk7CiAgICAgICAgICAgICBpZiAoaXQgIT0gZ2xDb250ZXh0RGF0
YU1hcCgpLmVuZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOwogCi0gICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZEdMRGF0YShnZXRDdXJyZW50R0xDb250
ZXh0KCkpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkR0xEYXRhKGNv
bnRleHQpKTsKICAgICAgICAgfQogCi0KLQogICAgICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlciB0ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjsKIAotICAgICAgICBTaGFyZWRHTERhdGEo
R0xDb250ZXh0IGdsQ29udGV4dCkKKyAgICAgICAgU2hhcmVkR0xEYXRhKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KQorICAgICAgICAgICAgOiB0ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcihj
b250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbENvbnRleHREYXRhTWFwKCkuYWRkKGds
Q29udGV4dCwgdGhpcyk7CisgICAgICAgICAgICBnbENvbnRleHREYXRhTWFwKCkuYWRkKGNvbnRl
eHQtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSwgdGhpcyk7CiAgICAgICAgIH0KIAogICAg
ICAgICB+U2hhcmVkR0xEYXRhKCkKQEAgLTE0MiwzMCArOTIsMzIgQEAgc3RydWN0IFRleHR1cmVN
YXBwZXJHTERhdGEgewogCiAgICAgU2hhcmVkR0xEYXRhJiBzaGFyZWRHTERhdGEoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuICoobV9zaGFyZWRHTERhdGEuZ2V0KCkpOworICAgICAgICBy
ZXR1cm4gKm1fc2hhcmVkR0xEYXRhOwogICAgIH0KIAogICAgIHZvaWQgaW5pdGlhbGl6ZVN0ZW5j
aWwoKTsKIAotICAgIFRleHR1cmVNYXBwZXJHTERhdGEoKQotICAgICAgICA6IFBhaW50RmxhZ3Mo
MCkKKyAgICBUZXh0dXJlTWFwcGVyR0xEYXRhKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQor
ICAgICAgICA6IGNvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBQYWludEZsYWdzKDApCiAgICAg
ICAgICwgcHJldmlvdXNQcm9ncmFtKDApCiAgICAgICAgICwgdGFyZ2V0RnJhbWVCdWZmZXIoMCkK
ICAgICAgICAgLCBkaWRNb2RpZnlTdGVuY2lsKGZhbHNlKQogICAgICAgICAsIHByZXZpb3VzU2Np
c3NvclN0YXRlKDApCiAgICAgICAgICwgcHJldmlvdXNEZXB0aFN0YXRlKDApCi0gICAgICAgICwg
bV9zaGFyZWRHTERhdGEoVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpjdXJyZW50
U2hhcmVkR0xEYXRhKCkpCisgICAgICAgICwgbV9zaGFyZWRHTERhdGEoVGV4dHVyZU1hcHBlckdM
RGF0YTo6U2hhcmVkR0xEYXRhOjpjdXJyZW50U2hhcmVkR0xEYXRhKHRoaXMtPmNvbnRleHQpKQog
ICAgIHsgfQogCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQ7CiAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggcHJvamVjdGlvbk1hdHJpeDsKICAgICBUZXh0dXJlTWFwcGVyOjpQYWludEZs
YWdzIFBhaW50RmxhZ3M7Ci0gICAgR0xpbnQgcHJldmlvdXNQcm9ncmFtOwotICAgIEdMaW50IHRh
cmdldEZyYW1lQnVmZmVyOworICAgIEdDM0RpbnQgcHJldmlvdXNQcm9ncmFtOworICAgIEdDM0Rp
bnQgdGFyZ2V0RnJhbWVCdWZmZXI7CiAgICAgYm9vbCBkaWRNb2RpZnlTdGVuY2lsOwotICAgIEdM
aW50IHByZXZpb3VzU2Npc3NvclN0YXRlOwotICAgIEdMaW50IHByZXZpb3VzRGVwdGhTdGF0ZTsK
LSAgICBHTGludCB2aWV3cG9ydFs0XTsKLSAgICBHTGludCBwcmV2aW91c1NjaXNzb3JbNF07Cisg
ICAgR0MzRGludCBwcmV2aW91c1NjaXNzb3JTdGF0ZTsKKyAgICBHQzNEaW50IHByZXZpb3VzRGVw
dGhTdGF0ZTsKKyAgICBHQzNEaW50IHZpZXdwb3J0WzRdOworICAgIEdDM0RpbnQgcHJldmlvdXNT
Y2lzc29yWzRdOwogICAgIFJlZlB0cjxTaGFyZWRHTERhdGE+IG1fc2hhcmVkR0xEYXRhOwogICAg
IFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBjdXJyZW50U3VyZmFjZTsKIH07CkBAIC0xODksMjUgKzE0
MSwyNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjpwb3AoKQogICAgIGNsaXBT
dGFjay5yZW1vdmVMYXN0KCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNjaXNzb3JDbGlwKGNvbnN0IElu
dFJlY3QmIHJlY3QpCitzdGF0aWMgdm9pZCBzY2lzc29yQ2xpcChHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAocmVjdC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEdMaW50IHZpZXdwb3J0WzRdOwotICAgIEdMX0NNRChn
bEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCB2aWV3cG9ydCkpOwotICAgIEdMX0NNRChnbFNjaXNz
b3IocmVjdC54KCksIHZpZXdwb3J0WzNdIC0gcmVjdC5tYXhZKCksIHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSkpOworICAgIEdDM0RpbnQgdmlld3BvcnRbNF07CisgICAgY29udGV4dC0+Z2V0
SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JULCB2aWV3cG9ydCk7CisgICAgY29u
dGV4dC0+c2Npc3NvcihyZWN0LngoKSwgdmlld3BvcnRbM10gLSByZWN0Lm1heFkoKSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OkNsaXBT
dGFjazo6YXBwbHkoKQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjazo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7Ci0gICAgc2Npc3NvckNsaXAoY2xpcFN0YXRlLnNj
aXNzb3JCb3gpOwotICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9LRUVQLCBHTF9LRUVQLCBHTF9L
RUVQKSk7Ci0gICAgR0xfQ01EKGdsU3RlbmNpbEZ1bmMoR0xfRVFVQUwsIGNsaXBTdGF0ZS5zdGVu
Y2lsSW5kZXggLSAxLCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSkpOworICAgIHNjaXNzb3JD
bGlwKGNvbnRleHQsIGNsaXBTdGF0ZS5zY2lzc29yQm94KTsKKyAgICBjb250ZXh0LT5zdGVuY2ls
T3AoR3JhcGhpY3NDb250ZXh0M0Q6OktFRVAsIEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQLCBHcmFw
aGljc0NvbnRleHQzRDo6S0VFUCk7CisgICAgY29udGV4dC0+c3RlbmNpbEZ1bmMoR3JhcGhpY3ND
b250ZXh0M0Q6OkVRVUFMLCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSwgY2xpcFN0YXRlLnN0
ZW5jaWxJbmRleCAtIDEpOwogICAgIGlmIChjbGlwU3RhdGUuc3RlbmNpbEluZGV4ID09IDEpCi0g
ICAgICAgIEdMX0NNRChnbERpc2FibGUoR0xfU1RFTkNJTF9URVNUKSk7CisgICAgICAgIGNvbnRl
eHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCk7CiAgICAgZWxzZQot
ICAgICAgICBHTF9DTUQoZ2xFbmFibGUoR0xfU1RFTkNJTF9URVNUKSk7CisgICAgICAgIGNvbnRl
eHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKTsKIH0KIAogCkBAIC0y
MjEsOCArMTczLDggQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0xEYXRhOjppbml0aWFsaXplU3RlbmNp
bCgpCiAgICAgaWYgKGRpZE1vZGlmeVN0ZW5jaWwpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdM
X0NNRChnbENsZWFyU3RlbmNpbCgwKSk7Ci0gICAgR0xfQ01EKGdsQ2xlYXIoR0xfU1RFTkNJTF9C
VUZGRVJfQklUKSk7CisgICAgY29udGV4dC0+Y2xlYXJTdGVuY2lsKDApOworICAgIGNvbnRleHQt
PmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOwogICAgIGRpZE1v
ZGlmeVN0ZW5jaWwgPSB0cnVlOwogfQogCkBAIC0yMzYsMTAgKzE4OCwxNCBAQCBCaXRtYXBUZXh0
dXJlR0wqIHRvQml0bWFwVGV4dHVyZUdMKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpCiAKIFRleHR1
cmVNYXBwZXJHTDo6VGV4dHVyZU1hcHBlckdMKCkKICAgICA6IFRleHR1cmVNYXBwZXIoT3BlbkdM
TW9kZSkKLSAgICAsIG1fZGF0YShuZXcgVGV4dHVyZU1hcHBlckdMRGF0YSkKICAgICAsIG1fY29u
dGV4dCgwKQogICAgICwgbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcoZmFsc2UpCiB7
CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlczsKKyAgICBhdHRy
aWJ1dGVzLmFudGlhbGlhcyA9IGZhbHNlOworICAgIGF0dHJpYnV0ZXMuZGVwdGggPSBmYWxzZTsK
KyAgICBtX2NvbnRleHQzRCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0cmlidXRlcywg
MCAvKiBob3N0V2luZG93ICovLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyVG9DdXJyZW50R0xD
b250ZXh0KTsKKyAgICBtX2RhdGEgPSBuZXcgVGV4dHVyZU1hcHBlckdMRGF0YShtX2NvbnRleHQz
RC5nZXQoKSk7CiB9CiAKIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrJiBUZXh0dXJlTWFwcGVy
R0w6OmNsaXBTdGFjaygpCkBAIC0yNDksMTUgKzIwNSw5IEBAIFRleHR1cmVNYXBwZXJHTDo6Q2xp
cFN0YWNrJiBUZXh0dXJlTWFwcGVyR0w6OmNsaXBTdGFjaygpCiAKIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpiZWdpblBhaW50aW5nKFBhaW50RmxhZ3MgZmxhZ3MpCiB7Ci0gICAgLy8gTWFrZSBzdXJl
IHRoYXQgbm8gR0wgZXJyb3IgY29kZSBzdGF5cyBmcm9tIHByZXZpb3VzIG9wZXJhdGlvbnMuCi0g
ICAgZ2xHZXRFcnJvcigpOwotCi0gICAgaWYgKCFpbml0aWFsaXplT3BlbkdMU2hpbXMoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfQ1VSUkVOVF9QUk9H
UkFNLCAmZGF0YSgpLnByZXZpb3VzUHJvZ3JhbSkpOwotICAgIGRhdGEoKS5wcmV2aW91c1NjaXNz
b3JTdGF0ZSA9IGdsSXNFbmFibGVkKEdMX1NDSVNTT1JfVEVTVCk7Ci0gICAgZGF0YSgpLnByZXZp
b3VzRGVwdGhTdGF0ZSA9IGdsSXNFbmFibGVkKEdMX0RFUFRIX1RFU1QpOworICAgIG1fY29udGV4
dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9QUk9HUkFNLCAmZGF0
YSgpLnByZXZpb3VzUHJvZ3JhbSk7CisgICAgZGF0YSgpLnByZXZpb3VzU2Npc3NvclN0YXRlID0g
bV9jb250ZXh0M0QtPmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsK
KyAgICBkYXRhKCkucHJldmlvdXNEZXB0aFN0YXRlID0gbV9jb250ZXh0M0QtPmlzRW5hYmxlZChH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCk7CiAjaWYgUExBVEZPUk0oUVQpCiAgICAgaWYg
KG1fY29udGV4dCkgewogICAgICAgICBRUGFpbnRlciogcGFpbnRlciA9IG1fY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCk7CkBAIC0yNjUsMTUgKzIxNSwxNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJH
TDo6YmVnaW5QYWludGluZyhQYWludEZsYWdzIGZsYWdzKQogICAgICAgICBwYWludGVyLT5iZWdp
bk5hdGl2ZVBhaW50aW5nKCk7CiAgICAgfQogI2VuZGlmCi0gICAgZ2xEaXNhYmxlKEdMX0RFUFRI
X1RFU1QpOwotICAgIGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgbV9jb250ZXh0M0Qt
PmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1QpOworICAgIG1fY29udGV4dDNE
LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgZGF0YSgpLmRp
ZE1vZGlmeVN0ZW5jaWwgPSBmYWxzZTsKLSAgICBHTF9DTUQoZ2xEZXB0aE1hc2soMCkpOwotICAg
IEdMX0NNRChnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCBkYXRhKCkudmlld3BvcnQpKTsKLSAg
ICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9TQ0lTU09SX0JPWCwgZGF0YSgpLnByZXZpb3VzU2Np
c3NvcikpOwotICAgIGdsR2V0SW50ZWdlcnYoR0xfRlJBTUVCVUZGRVJfQklORElORywgJmRhdGEo
KS50YXJnZXRGcmFtZUJ1ZmZlcik7CisgICAgbV9jb250ZXh0M0QtPmRlcHRoTWFzaygwKTsKKyAg
ICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JULCBk
YXRhKCkudmlld3BvcnQpOworICAgIG1fY29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0Nv
bnRleHQzRDo6U0NJU1NPUl9CT1gsIGRhdGEoKS5wcmV2aW91c1NjaXNzb3IpOworICAgIG1fY29u
dGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQklORElO
RywgJmRhdGEoKS50YXJnZXRGcmFtZUJ1ZmZlcik7CiAgICAgbV9jbGlwU3RhY2suaW5pdChJbnRS
ZWN0KDAsIDAsIGRhdGEoKS52aWV3cG9ydFsyXSwgZGF0YSgpLnZpZXdwb3J0WzNdKSk7Ci0gICAg
R0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfRlJBTUVCVUZGRVJfQklORElORywgJmRhdGEoKS50YXJn
ZXRGcmFtZUJ1ZmZlcikpOworICAgIG1fY29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVJfQklORElORywgJmRhdGEoKS50YXJnZXRGcmFtZUJ1ZmZlcik7
CiAgICAgZGF0YSgpLlBhaW50RmxhZ3MgPSBmbGFnczsKICAgICBiaW5kU3VyZmFjZSgwKTsKIH0K
QEAgLTI4MSwyMiArMjMxLDIyIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5n
KFBhaW50RmxhZ3MgZmxhZ3MpCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZW5kUGFpbnRpbmcoKQog
ewogICAgIGlmIChkYXRhKCkuZGlkTW9kaWZ5U3RlbmNpbCkgewotICAgICAgICBnbENsZWFyU3Rl
bmNpbCgxKTsKLSAgICAgICAgZ2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpOworICAgICAg
ICBtX2NvbnRleHQzRC0+Y2xlYXJTdGVuY2lsKDEpOworICAgICAgICBtX2NvbnRleHQzRC0+Y2xl
YXIoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCk7CiAgICAgfQogCi0gICAg
Z2xVc2VQcm9ncmFtKGRhdGEoKS5wcmV2aW91c1Byb2dyYW0pOworICAgIG1fY29udGV4dDNELT51
c2VQcm9ncmFtKGRhdGEoKS5wcmV2aW91c1Byb2dyYW0pOwogCi0gICAgZ2xTY2lzc29yKGRhdGEo
KS5wcmV2aW91c1NjaXNzb3JbMF0sIGRhdGEoKS5wcmV2aW91c1NjaXNzb3JbMV0sIGRhdGEoKS5w
cmV2aW91c1NjaXNzb3JbMl0sIGRhdGEoKS5wcmV2aW91c1NjaXNzb3JbM10pOworICAgIG1fY29u
dGV4dDNELT5zY2lzc29yKGRhdGEoKS5wcmV2aW91c1NjaXNzb3JbMF0sIGRhdGEoKS5wcmV2aW91
c1NjaXNzb3JbMV0sIGRhdGEoKS5wcmV2aW91c1NjaXNzb3JbMl0sIGRhdGEoKS5wcmV2aW91c1Nj
aXNzb3JbM10pOwogICAgIGlmIChkYXRhKCkucHJldmlvdXNTY2lzc29yU3RhdGUpCi0gICAgICAg
IGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgICAgIG1fY29udGV4dDNELT5lbmFibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgZWxzZQotICAgICAgICBnbERp
c2FibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAKICAgICBpZiAoZGF0YSgpLnByZXZpb3Vz
RGVwdGhTdGF0ZSkKLSAgICAgICAgZ2xFbmFibGUoR0xfREVQVEhfVEVTVCk7CisgICAgICAgIG1f
Y29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1QpOwogICAgIGVs
c2UKLSAgICAgICAgZ2xEaXNhYmxlKEdMX0RFUFRIX1RFU1QpOworICAgICAgICBtX2NvbnRleHQz
RC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCk7CiAKICNpZiBQTEFURk9S
TShRVCkKICAgICBpZiAoIW1fY29udGV4dCkKQEAgLTMwNyw0MCArMjU3LDQwIEBAIHZvaWQgVGV4
dHVyZU1hcHBlckdMOjplbmRQYWludGluZygpCiAjZW5kaWYKIH0KIAotdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiBxdWFkVG9EcmF3LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSogc2hhZGVyUHJvZ3JhbSwgR0xlbnVtIGRyYXdpbmdNb2RlLCBib29sIG5lZWRzQmxlbmRpbmcp
Cit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmIHF1YWRUb0Ry
YXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKiBzaGFkZXJQcm9ncmFtLCBHQzNEZW51bSBkcmF3aW5nTW9kZSwg
Ym9vbCBuZWVkc0JsZW5kaW5nKQogewotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsQmluZEJ1
ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4
QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4
dDNELT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDApOwogCi0g
ICAgY29uc3QgR0xmbG9hdCBxdWFkW10gPSB7CisgICAgY29uc3QgR0MzRGZsb2F0IHF1YWRbXSA9
IHsKICAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAxKCku
eCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDEoKS55KCksCiAg
ICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMigpLngoKSwg
cXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAyKCkueSgpLAogICAgICAg
ICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDMoKS54KCksIHF1YWRU
b0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMygpLnkoKSwKICAgICAgICAgcXVh
ZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnA0KCkueCgpLCBxdWFkVG9EcmF3
LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDQoKS55KCkKICAgICB9OwotICAgIEdMX0NN
RChnbFZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIs
IEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgcXVhZCkpOworICAgIG1fY29udGV4dDNELT52ZXJ0ZXhB
dHRyaWJQb2ludGVyKHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHF1YWQpKTsKIAogICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9q
ZWN0aW9uTWF0cml4KS5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgpLm11bHRpcGx5KFRyYW5zZm9y
bWF0aW9uTWF0cml4KAogICAgICAgICAgICAgcXVhZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJlY3Qu
d2lkdGgoKSwgMCwgMCwgMCwKICAgICAgICAgICAgIDAsIHF1YWRUb0RyYXcub3JpZ2luYWxUYXJn
ZXRSZWN0LmhlaWdodCgpLCAwLCAwLAogICAgICAgICAgICAgMCwgMCwgMSwgMCwKICAgICAgICAg
ICAgIHF1YWRUb0RyYXcub3JpZ2luYWxUYXJnZXRSZWN0LngoKSwgcXVhZFRvRHJhdy5vcmlnaW5h
bFRhcmdldFJlY3QueSgpLCAwLCAxKSk7Ci0gICAgY29uc3QgR0xmbG9hdCBtNFtdID0geworICAg
IEdDM0RmbG9hdCBtNFtdID0gewogICAgICAgICBtYXRyaXgubTExKCksIG1hdHJpeC5tMTIoKSwg
bWF0cml4Lm0xMygpLCBtYXRyaXgubTE0KCksCiAgICAgICAgIG1hdHJpeC5tMjEoKSwgbWF0cml4
Lm0yMigpLCBtYXRyaXgubTIzKCksIG1hdHJpeC5tMjQoKSwKICAgICAgICAgbWF0cml4Lm0zMSgp
LCBtYXRyaXgubTMyKCksIG1hdHJpeC5tMzMoKSwgbWF0cml4Lm0zNCgpLAogICAgICAgICBtYXRy
aXgubTQxKCksIG1hdHJpeC5tNDIoKSwgbWF0cml4Lm00MygpLCBtYXRyaXgubTQ0KCkKICAgICB9
OwotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVyUHJvZ3JhbS0+bWF0cml4TG9j
YXRpb24oKSwgMSwgR0xfRkFMU0UsIG00KSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm1NYXRy
aXg0ZnYoc2hhZGVyUHJvZ3JhbS0+bWF0cml4TG9jYXRpb24oKSwgMSwgZmFsc2UsIG00KTsKIAog
ICAgIGlmIChuZWVkc0JsZW5kaW5nKSB7Ci0gICAgICAgIEdMX0NNRChnbEJsZW5kRnVuYyhHTF9P
TkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKTsKLSAgICAgICAgR0xfQ01EKGdsRW5hYmxlKEdM
X0JMRU5EKSk7CisgICAgICAgIG1fY29udGV4dDNELT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0
M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOworICAgICAg
ICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CiAgICAgfSBl
bHNlCi0gICAgICAgIEdMX0NNRChnbERpc2FibGUoR0xfQkxFTkQpKTsKKyAgICAgICAgbV9jb250
ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKIAotICAgIEdMX0NNRChn
bERyYXdBcnJheXMoZHJhd2luZ01vZGUsIDAsIDQpKTsKLSAgICBHTF9DTUQoZ2xEaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKKyAgICBtX2Nv
bnRleHQzRC0+ZHJhd0FycmF5cyhkcmF3aW5nTW9kZSwgMCwgNCk7CisgICAgbV9jb250ZXh0M0Qt
PmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7
CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiBjb2xv
ciwgZmxvYXQgd2lkdGgsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCkKQEAgLTM0OSwxNyArMjk5LDE3IEBAIHZv
aWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQg
d2lkdGgsIGNvbnN0IEZsb2F0UmVjCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVk
R0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuc29saWRDb2xvclByb2dyYW0oKTsK
LSAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpKTsKKyAgICBtX2NvbnRleHQz
RC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKTsKIAogICAgIGZsb2F0IGFscGhhID0gY29sb3Iu
YWxwaGEoKSAvIDI1NS4wOwotICAgIEdMX0NNRChnbFVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxv
Y2F0aW9uKCksCisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0
aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAgIChjb2xvci5yZWQoKSAvIDI1NS4wKSAqIGFs
cGhhLAogICAgICAgICAgICAgICAgICAgICAgICAoY29sb3IuZ3JlZW4oKSAvIDI1NS4wKSAqIGFs
cGhhLAogICAgICAgICAgICAgICAgICAgICAgICAoY29sb3IuYmx1ZSgpIC8gMjU1LjApICogYWxw
aGEsCi0gICAgICAgICAgICAgICAgICAgICAgIGFscGhhKSk7Ci0gICAgR0xfQ01EKGdsTGluZVdp
ZHRoKHdpZHRoKSk7CisgICAgICAgICAgICAgICAgICAgICAgIGFscGhhKTsKKyAgICBtX2NvbnRl
eHQzRC0+bGluZVdpZHRoKHdpZHRoKTsKIAotICAgIGRyYXdRdWFkKHRhcmdldFJlY3QsIG1vZGVs
Vmlld01hdHJpeCwgcHJvZ3JhbS5nZXQoKSwgR0xfTElORV9MT09QLCBjb2xvci5oYXNBbHBoYSgp
KTsKKyAgICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0uZ2V0
KCksIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1AsIGNvbG9yLmhhc0FscGhhKCkpOwogfQog
CiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1JlcGFpbnRDb3VudGVyKGludCB2YWx1ZSwgaW50
IHBvaW50U2l6ZSwgY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgpCkBAIC00MDYsNyArMzU2LDcgQEAgdm9pZCBU
ZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUs
IGNvbnN0IEZsb2F0UmVjdCYKICAgICBkcmF3VGV4dHVyZSh0ZXh0dXJlR0wuaWQoKSwgdGV4dHVy
ZUdMLmlzT3BhcXVlKCkgPyAwIDogU3VwcG9ydHNCbGVuZGluZywgdGV4dHVyZUdMLnNpemUoKSwg
dGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5LCBtYXNrLCBleHBvc2VkRWRnZXMpOwogfQogCi0j
aWYgZGVmaW5lZChHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUpCisjaWYgIVVTRShURVhNQVBfT1BF
TkdMX0VTXzIpCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVSZWN0YW5nbGVBUkIo
dWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXpl
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1h
c2tUZXh0dXJlKQogewogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJv
Z3JhbTsKQEAgLTQxNCwzNiArMzY0LDM2IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4
dHVyZVJlY3RhbmdsZUFSQih1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uCiAgICAg
ICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdE9w
YWNpdHlBbmRNYXNrKTsKICAgICBlbHNlCiAgICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVk
R0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdFNpbXBsZSk7Ci0gICAgR0xfQ01EKGdsVXNlUHJv
Z3JhbShwcm9ncmFtLT5pZCgpKSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3Jh
bS0+aWQoKSk7CiAKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFt
LT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVS
RTApKTsKLSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIs
IHRleHR1cmUpKTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVy
ZUxvY2F0aW9uKCksIDApKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJy
YXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgdGV4dHVyZSk7CisgICAgbV9jb250ZXh0
M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5zb3VyY2VUZXh0dXJlTG9jYXRpb24oKSwgMCk7CiAKLSAg
ICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbS0+ZmxpcExvY2F0aW9uKCksICEhKGZsYWdzICYg
U2hvdWxkRmxpcFRleHR1cmUpKSk7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTJmKHByb2dyYW0tPnRl
eHR1cmVTaXplTG9jYXRpb24oKSwgdGV4dHVyZVNpemUud2lkdGgoKSwgdGV4dHVyZVNpemUuaGVp
Z2h0KCkpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPmZsaXBMb2NhdGlv
bigpLCAhIShmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSk7CisgICAgbV9jb250ZXh0M0QtPnVu
aWZvcm0yZihwcm9ncmFtLT50ZXh0dXJlU2l6ZUxvY2F0aW9uKCksIHRleHR1cmVTaXplLndpZHRo
KCksIHRleHR1cmVTaXplLmhlaWdodCgpKTsKIAogICAgIGlmIChUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24o
KSkpCi0gICAgICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24o
KSwgb3BhY2l0eSkpOworICAgICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPm9w
YWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5KTsKIAogICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNr
VGV4dHVyZS0+aXNWYWxpZCgpICYmIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlk
VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSkpIHsKICAgICAg
ICAgY29uc3QgQml0bWFwVGV4dHVyZUdMKiBtYXNrVGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQml0bWFwVGV4dHVyZUdMKj4obWFza1RleHR1cmUpOwotICAgICAgICBHTF9DTUQoZ2xBY3Rp
dmVUZXh0dXJlKEdMX1RFWFRVUkUxKSk7Ci0gICAgICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPmlkKCkpKTsKLSAgICAgICAgR0xfQ01EKGdsVW5p
Zm9ybTFpKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSwgMSkpOwotICAgICAgICBHTF9D
TUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSk7CisgICAgICAgIG1fY29udGV4dDNELT5h
Y3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSk7CisgICAgICAgIG1fY29u
dGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbWFza1Rl
eHR1cmVHTC0+aWQoKSk7CisgICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+
bWFza1RleHR1cmVMb2NhdGlvbigpLCAxKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKICAgICB9CiAKICAgICBib29sIG5l
ZWRzQmxlbmRpbmcgPSAoZmxhZ3MgJiBTdXBwb3J0c0JsZW5kaW5nKSB8fCBvcGFjaXR5IDwgMC45
OSB8fCBtYXNrVGV4dHVyZTsKLSAgICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRy
aXgsIHByb2dyYW0uZ2V0KCksIEdMX1RSSUFOR0xFX0ZBTiwgbmVlZHNCbGVuZGluZyk7CisgICAg
ZHJhd1F1YWQodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdldCgpLCBHcmFw
aGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCBuZWVkc0JsZW5kaW5nKTsKIH0KLSNlbmRpZiAv
LyBkZWZpbmVkKEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSkgCisjZW5kaWYgLy8gIVVTRShURVhN
QVBfT1BFTkdMX0VTXzIpCiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50
MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYgLyogdGV4dHVyZVNpemUg
Ki8sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSog
bWFza1RleHR1cmUsIHVuc2lnbmVkIGV4cG9zZWRFZGdlcykKIHsKLSAgICBib29sIG5lZWRzQW50
aWxpYWluZyA9IG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nICYmICFtb2RlbFZpZXdN
YXRyaXguaXNJbnRlZ2VyVHJhbnNsYXRpb24oKTsKLSAgICBpZiAobmVlZHNBbnRpbGlhaW5nICYm
IGRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh0ZXh0dXJlLCBmbGFncywgdGFyZ2V0UmVjdCwg
bW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5LCBtYXNrVGV4dHVyZSwgZXhwb3NlZEVkZ2VzKSkKKyAg
ICBib29sIG5lZWRzQW50aWFsaWFpbmcgPSBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2lu
ZyAmJiAhbW9kZWxWaWV3TWF0cml4LmlzSW50ZWdlclRyYW5zbGF0aW9uKCk7CisgICAgaWYgKG5l
ZWRzQW50aWFsaWFpbmcgJiYgZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHRleHR1cmUsIGZs
YWdzLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0dXJlLCBl
eHBvc2VkRWRnZXMpKQogICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbTsKQEAgLTQ1MSwxNSArNDAxLDE1IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29u
c3QgSW50U2l6ZSYKICAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjpPcGFjaXR5QW5kTWFzayk7CiAgICAgZWxzZQogICAgICAgICBwcm9ncmFtID0g
ZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRl
clByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNpbXBsZSk7Ci0gICAgR0xfQ01E
KGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dy
YW0ocHJvZ3JhbS0+aWQoKSk7CiAKICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJv
Z3JhbS5nZXQoKSwgdGV4dHVyZSwgZmxhZ3MsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwg
b3BhY2l0eSwgbWFza1RleHR1cmUpOwogfQogCi1zdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXgg
dmlld3BvcnRNYXRyaXgoKQorc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZpZXdwb3J0TWF0
cml4KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QpCiB7Ci0gICAgR0xpbnQgdmlld3BvcnRb
NF07Ci0gICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIHZpZXdwb3J0KSk7Cisg
ICAgR0MzRGludCB2aWV3cG9ydFs0XTsKKyAgICBjb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dDNEOjpWSUVXUE9SVCwgdmlld3BvcnQpOwogCiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbWF0cml4OwogICAgIG1hdHJpeC50cmFuc2xhdGUzZCh2aWV3cG9ydFswXSwgdmlld3Bv
cnRbMV0sIDApOwpAQCAtNTU2LDcgKzUwNiw3IEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpkcmF3
VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsCiAg
ICAgLy8gYW50aWFsaWFzaW5nLiBOb3RlIGhlcmUgdGhhdCB3ZSBhcmUgYWxzbyBpbmNsdWRpbmcg
dGhlIHZpZXdwb3J0IG1hdHJpeCAod2hpY2gKICAgICAvLyB0cmFuc2xhdGVzIGZyb20gbm9ybWFs
aXplZCBkZXZpY2UgY29vcmRpbmF0ZXMgdG8gc2NyZWVuIGNvb3JkaW5hdGVzKSwgYmVjYXVzZSB0
aGVzZQogICAgIC8vIHZhbHVlcyBhcmUgY29uc3VtZWQgaW4gdGhlIGZyYWdtZW50IHNoYWRlciwg
d2hpY2ggd29ya3MgaW4gc2NyZWVuIGNvb3JkaW5hdGVzLgotICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHNjcmVlblNwYWNlVHJhbnNmb3JtID0gdmlld3BvcnRNYXRyaXgoKS5tdWx0aXBseShUcmFu
c2Zvcm1hdGlvbk1hdHJpeChkYXRhKCkucHJvamVjdGlvbk1hdHJpeCkpLm11bHRpcGx5KG1vZGVs
Vmlld01hdHJpeCkudG8yZFRyYW5zZm9ybSgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNj
cmVlblNwYWNlVHJhbnNmb3JtID0gdmlld3BvcnRNYXRyaXgobV9jb250ZXh0M0QuZ2V0KCkpLm11
bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KSkubXVs
dGlwbHkobW9kZWxWaWV3TWF0cml4KS50bzJkVHJhbnNmb3JtKCk7CiAgICAgaWYgKCFzY3JlZW5T
cGFjZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IEZsb2F0UXVhZCBxdWFkSW5TY3JlZW5TcGFjZSA9IHNjcmVlblNwYWNlVHJhbnNmb3JtLm1hcFF1
YWQob3JpZ2luYWxUYXJnZXRSZWN0KTsKQEAgLTU4MCw4ICs1MzAsOCBAQCBib29sIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUsIEZs
YWdzIGZsYWdzLAogICAgIHF1YWRUb0VkZ2VBcnJheShpbmZsYXRlUXVhZChxdWFkSW5TY3JlZW5T
cGFjZS5ib3VuZGluZ0JveCgpLCAgaW5mbGF0aW9uRGlzdGFuY2UpLCB0YXJnZXRRdWFkRWRnZXMg
KyAxMik7CiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNp
bmdOb01hc2s+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIuYW50aWFsaWFzaW5nTm9NYXNrUHJvZ3JhbSgpOwotICAgIEdMX0NNRChnbFVz
ZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOwotICAgIEdMX0NNRChnbFVuaWZvcm0zZnYocHJvZ3Jh
bS0+ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSwgOCwgdGFyZ2V0UXVh
ZEVkZ2VzKSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7Cisg
ICAgbV9jb250ZXh0M0QtPnVuaWZvcm0zZnYocHJvZ3JhbS0+ZXhwYW5kZWRRdWFkRWRnZXNJblNj
cmVlblNwYWNlTG9jYXRpb24oKSwgOCwgdGFyZ2V0UXVhZEVkZ2VzKTsKIAogICAgIGRyYXdUZXh0
dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0dXJlLCBmbGFncywgRHJhd1F1
YWQob3JpZ2luYWxUYXJnZXRSZWN0LCBleHBhbmRlZFF1YWRJblRleHR1cmVDb29yZGluYXRlcyks
IG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgMCAvKiBtYXNrVGV4dHVyZSAqLyk7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC01ODksMjYgKzUzOSwyNiBAQCBib29sIFRleHR1cmVNYXBwZXJHTDo6ZHJh
d1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLAog
CiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCB1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBm
bGFncywgY29uc3QgRHJhd1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUq
IG1hc2tUZXh0dXJlKQogewotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHBy
b2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9U
RVhUVVJFMCkpOwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1
cmUpKTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVyZUxvY2F0
aW9uKCksIDApKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJv
Z3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBtX2NvbnRleHQz
RC0+dW5pZm9ybTFpKHByb2dyYW0tPnNvdXJjZVRleHR1cmVMb2NhdGlvbigpLCAwKTsKIAotICAg
IEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtLT5mbGlwTG9jYXRpb24oKSwgISEoZmxhZ3MgJiBT
aG91bGRGbGlwVGV4dHVyZSkpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0t
PmZsaXBMb2NhdGlvbigpLCAhIShmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSk7CiAKICAgICBp
ZiAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24ocHJv
Z3JhbS0+b3BhY2l0eUxvY2F0aW9uKCkpKQotICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJv
Z3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpKTsKKyAgICAgICAgbV9jb250ZXh0M0Qt
PnVuaWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0eSk7CiAKICAgICBp
ZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSAmJiBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLT5tYXNrVGV4dHVy
ZUxvY2F0aW9uKCkpKSB7CiAgICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1
cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsK
LSAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSkpOwotICAgICAgICBH
TF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKSk7
Ci0gICAgICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9u
KCksIDEpKTsKLSAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpOwor
ICAgICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRTEpOworICAgICAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPmlkKCkpOworICAgICAgICBtX2NvbnRleHQz
RC0+dW5pZm9ybTFpKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSwgMSk7CisgICAgICAg
IG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7
CiAgICAgfQogCiAgICAgYm9vbCBuZWVkc0JsZW5kaW5nID0gKGZsYWdzICYgU3VwcG9ydHNCbGVu
ZGluZykgfHwgb3BhY2l0eSA8IDAuOTkgfHwgbWFza1RleHR1cmU7Ci0gICAgZHJhd1F1YWQocXVh
ZFRvRHJhdywgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLCBHTF9UUklBTkdMRV9GQU4sIG5lZWRz
QmxlbmRpbmcpOworICAgIGRyYXdRdWFkKHF1YWRUb0RyYXcsIG1vZGVsVmlld01hdHJpeCwgcHJv
Z3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgbmVlZHNCbGVuZGluZyk7CiB9
CiAKIGJvb2wgQml0bWFwVGV4dHVyZUdMOjpjYW5SZXVzZVdpdGgoY29uc3QgSW50U2l6ZSYgY29u
dGVudHNTaXplLCBGbGFncykKQEAgLTYxOSw3ICs1NjksNyBAQCBib29sIEJpdG1hcFRleHR1cmVH
TDo6Y2FuUmV1c2VXaXRoKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSwgRmxhZ3MpCiAjaWYg
T1MoREFSV0lOKQogI2RlZmluZSBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSBH
TF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYKICNlbHNlCi0jZGVmaW5lIERFRkFVTFRfVEVYVFVS
RV9QSVhFTF9UUkFOU0ZFUl9UWVBFIEdMX1VOU0lHTkVEX0JZVEUKKyNkZWZpbmUgREVGQVVMVF9U
RVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUKICNlbmRpZgogCiBzdGF0aWMgYm9vbCBkcml2ZXJTdXBwb3J0c1N1YkltYWdlKCkKQEAgLTYz
NCwzMCArNTg0LDMxIEBAIHN0YXRpYyBib29sIGRyaXZlclN1cHBvcnRzU3ViSW1hZ2UoKQogCiB2
b2lkIEJpdG1hcFRleHR1cmVHTDo6ZGlkUmVzZXQoKQogeworICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CiAgICAg
aWYgKCFtX2lkKQotICAgICAgICBHTF9DTUQoZ2xHZW5UZXh0dXJlcygxLCAmbV9pZCkpOwotCisg
ICAgICAgIG1faWQgPSBjb250ZXh0M0QtPmNyZWF0ZVRleHR1cmUoKTsKICAgICBtX3Nob3VsZENs
ZWFyID0gdHJ1ZTsKICAgICBpZiAobV90ZXh0dXJlU2l6ZSA9PSBjb250ZW50U2l6ZSgpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBtX3RleHR1cmVTaXplID0gY29udGVudFNpemUoKTsKLSAgICBH
TF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKSk7Ci0gICAgR0xfQ01EKGds
VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJ
TkVBUikpOwotICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVY
VFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpKTsKLSAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKSk7Ci0g
ICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
VCwgR0xfQ0xBTVBfVE9fRURHRSkpOwotICAgIEdMX0NNRChnbFRleEltYWdlMkQoR0xfVEVYVFVS
RV8yRCwgMCwgR0xfUkdCQSwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhl
aWdodCgpLCAwLCBHTF9SR0JBLCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwg
MCkpOworICAgIGNvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIG1faWQpOworICAgIGNvbnRleHQzRC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgY29udGV4dDNELT50ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICBjb250ZXh0M0Qt
PnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0Up
OworICAgIGNvbnRleHQzRC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQz
RDo6Q0xBTVBfVE9fRURHRSk7CisgICAgY29udGV4dDNELT50ZXhJbWFnZTJERGlyZWN0KEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgbV90
ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIDApOwog
fQogCiAKIHZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBk
YXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRQb2ludCYgc291cmNlT2Zm
c2V0LCBpbnQgYnl0ZXNQZXJMaW5lKQogewotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIG1faWQpKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90
ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOworICAgIGNvbnRleHQzRC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1faWQpOwogCiAgICAgY29uc3Qg
dW5zaWduZWQgYnl0ZXNQZXJQaXhlbCA9IDQ7CiAgICAgaWYgKGJ5dGVzUGVyTGluZSA9PSB0YXJn
ZXRSZWN0LndpZHRoKCkgKiBieXRlc1BlclBpeGVsICYmIHNvdXJjZU9mZnNldCA9PSBJbnRQb2lu
dDo6emVybygpKSB7Ci0gICAgICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8y
RCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCks
IHRhcmdldFJlY3QuaGVpZ2h0KCksIEdMX1JHQkEsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFO
U0ZFUl9UWVBFLCAoY29uc3QgY2hhciopZGF0YSkpOworICAgICAgICBjb250ZXh0M0QtPnRleFN1
YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgp
LCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgp
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVS
X1RZUEUsIChjb25zdCBjaGFyKilkYXRhKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
Njc1LDE5ICs2MjYsMTkgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKGNv
bnN0IHZvaWQqIGRhdGEsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QKICAgICAgICAgICAgIGRz
dCArPSB0YXJnZXRCeXRlc1BlckxpbmU7CiAgICAgICAgIH0KIAotICAgICAgICBHTF9DTUQoZ2xU
ZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0
LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBE
RUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgdGVtcG9yYXJ5RGF0YS5kYXRhKCkp
KTsKKyAgICAgICAgY29udGV4dDNELT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qu
d2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIERF
RkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCB0ZW1wb3JhcnlEYXRhLmRhdGEoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiAhZGVmaW5lZChURVhNQVBfT1BFTkdMX0VT
XzIpCiAgICAgLy8gVXNlIHRoZSBPcGVuR0wgc3ViLWltYWdlIGV4dGVuc2lvbiwgbm93IHRoYXQg
d2Uga25vdyBpdCdzIGF2YWlsYWJsZS4KLSAgICBHTF9DTUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBB
Q0tfUk9XX0xFTkdUSCwgYnl0ZXNQZXJMaW5lIC8gYnl0ZXNQZXJQaXhlbCkpOwotICAgIEdMX0NN
RChnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JPV1MsIHNvdXJjZU9mZnNldC55KCkpKTsK
LSAgICBHTF9DTUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsIHNvdXJjZU9m
ZnNldC54KCkpKTsKLSAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAs
IHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJn
ZXRSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJf
VFlQRSwgKGNvbnN0IGNoYXIqKWRhdGEpKTsKLSAgICBHTF9DTUQoZ2xQaXhlbFN0b3JlaShHTF9V
TlBBQ0tfUk9XX0xFTkdUSCwgMCkpOwotICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdMX1VOUEFD
S19TS0lQX1JPV1MsIDApKTsKLSAgICBHTF9DTUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJ
UF9QSVhFTFMsIDApKTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1df
TEVOR1RILCBieXRlc1BlckxpbmUgLyBieXRlc1BlclBpeGVsKTsKKyAgICBjb250ZXh0M0QtPnBp
eGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JPV1MsIHNvdXJjZU9mZnNldC55KCkpOworICAgIGNv
bnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUElYRUxTLCBzb3VyY2VPZmZzZXQu
eCgpKTsKKyAgICBjb250ZXh0M0QtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53
aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgREVG
QVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIChjb25zdCBjaGFyKilkYXRhKTsKKyAg
ICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCAwKTsKKyAgICBj
b250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JPV1MsIDApOworICAgIGNvbnRl
eHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUElYRUxTLCAwKTsKICNlbmRpZgogfQog
CkBAIC03MTIsMTkgKzY2MywxOSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0ZpbHRlcmVk
KGNvbnN0IEJpdG1hcFRleHR1cmUmIHNvdXJjZVRleHR1cmUsIGNvbnN0IEJpdAogCiAgICAgcHJv
Z3JhbS0+cHJlcGFyZShmaWx0ZXIsIHBhc3MsIHNvdXJjZVRleHR1cmUuY29udGVudFNpemUoKSwg
c3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oY29udGVudFRleHR1cmUpLmlkKCkp
OwogCi0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4
QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFt
LT50ZXhDb29yZEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhU
VVJFMCkpOwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHN0YXRpY19j
YXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHNvdXJjZVRleHR1cmUpLmlkKCkpKTsKLSAgICBn
bFVuaWZvcm0xaShwcm9ncmFtLT50ZXh0dXJlVW5pZm9ybSgpLCAwKTsKLSAgICBjb25zdCBHTGZs
b2F0IHRhcmdldFZlcnRpY2VzW10gPSB7LTEsIC0xLCAxLCAtMSwgMSwgMSwgLTEsIDF9OwotICAg
IGNvbnN0IEdMZmxvYXQgc291cmNlVmVydGljZXNbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAx
fTsKLSAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0dHJp
YigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHRhcmdldFZlcnRpY2VzKSk7Ci0gICAgR0xf
Q01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigpLCAyLCBH
TF9GTE9BVCwgR0xfRkFMU0UsIDAsIHNvdXJjZVZlcnRpY2VzKSk7Ci0gICAgR0xfQ01EKGdsRGlz
YWJsZShHTF9CTEVORCkpOwotICAgIEdMX0NNRChnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFO
LCAwLCA0KSk7Ci0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0t
PnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KHByb2dyYW0tPnRleENvb3JkQXR0cmliKCkpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNE
LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigpKTsKKyAg
ICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAp
OworICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oc291cmNlVGV4dHVyZSku
aWQoKSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT50ZXh0dXJlVW5pZm9y
bSgpLCAwKTsKKyAgICBjb25zdCBHQzNEZmxvYXQgdGFyZ2V0VmVydGljZXNbXSA9IHstMSwgLTEs
IDEsIC0xLCAxLCAxLCAtMSwgMX07CisgICAgY29uc3QgR0MzRGZsb2F0IHNvdXJjZVZlcnRpY2Vz
W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07CisgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0
dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIodGFyZ2V0VmVydGljZXMpKTsKKyAgICBtX2Nv
bnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigpLCAy
LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHNvdXJjZVZl
cnRpY2VzKSk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJM
RU5EKTsKKyAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJ
QU5HTEVfRkFOLCAwLCA0KTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmliKCkpOwogfQogCiBQYXNzUmVm
UHRyPEJpdG1hcFRleHR1cmU+IEJpdG1hcFRleHR1cmVHTDo6YXBwbHlGaWx0ZXJzKGNvbnN0IEJp
dG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0
ZXJzKQpAQCAtNzY1LDE3ICs3MTYsMTggQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmluaXRpYWxp
emVTdGVuY2lsKCkKIHsKICAgICBpZiAobV9yYm8pCiAgICAgICAgIHJldHVybjsKLSAgICBHTF9D
TUQoZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX3JibykpOwotICAgIEdMX0NNRChnbEJpbmRSZW5k
ZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX3JibykpOworICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAg
bV9yYm8gPSBjb250ZXh0M0QtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworICAgIGNvbnRleHQzRC0+
YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX3Jibyk7
CiAjaWZkZWYgVEVYTUFQX09QRU5HTF9FU18yCi0gICAgR0xfQ01EKGdsUmVuZGVyYnVmZmVyU3Rv
cmFnZShHTF9SRU5ERVJCVUZGRVIsIEdMX1NURU5DSUxfSU5ERVg4LCBtX3RleHR1cmVTaXplLndp
ZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKTsKKyAgICBjb250ZXh0M0QtPnJlbmRlcmJ1
ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfSU5ERVg4LCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNp
emUuaGVpZ2h0KCkpOwogI2Vsc2UKLSAgICBHTF9DTUQoZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdM
X1JFTkRFUkJVRkZFUiwgR0xfREVQVEhfU1RFTkNJTCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBt
X3RleHR1cmVTaXplLmhlaWdodCgpKSk7CisgICAgY29udGV4dDNELT5yZW5kZXJidWZmZXJTdG9y
YWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9TVEVOQ0lMLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0
KCkpOwogI2VuZGlmCi0gICAgR0xfQ01EKGdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZG
RVIsIDApKTsKLSAgICBHTF9DTUQoZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJV
RkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fcmJvKSk7Ci0g
ICAgR0xfQ01EKGdsQ2xlYXJTdGVuY2lsKDApKTsKLSAgICBHTF9DTUQoZ2xDbGVhcihHTF9TVEVO
Q0lMX0JVRkZFUl9CSVQpKTsKKyAgICBjb250ZXh0M0QtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7CisgICAgY29udGV4dDNELT5mcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVIsIG1fcmJvKTsKKyAgICBjb250ZXh0M0QtPmNsZWFyU3RlbmNpbCgwKTsKKyAgICBjb250ZXh0
M0QtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOwogfQogCiB2
b2lkIEJpdG1hcFRleHR1cmVHTDo6Y2xlYXJJZk5lZWRlZCgpCkBAIC03ODMsMTAgKzczNSwxMSBA
QCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6Y2xlYXJJZk5lZWRlZCgpCiAgICAgaWYgKCFtX3Nob3Vs
ZENsZWFyKQogICAgICAgICByZXR1cm47CiAKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOwogICAgIG1fY2xpcFN0
YWNrLmluaXQoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX3RleHR1cmVTaXplKSk7Ci0gICAg
bV9jbGlwU3RhY2suYXBwbHkoKTsKLSAgICBHTF9DTUQoZ2xDbGVhckNvbG9yKDAsIDAsIDAsIDAp
KTsKLSAgICBHTF9DTUQoZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKSk7CisgICAgbV9jbGlw
U3RhY2suYXBwbHkoY29udGV4dDNEKTsKKyAgICBjb250ZXh0M0QtPmNsZWFyQ29sb3IoMCwgMCwg
MCwgMCk7CisgICAgY29udGV4dDNELT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVG
RkVSX0JJVCk7CiAgICAgbV9zaG91bGRDbGVhciA9IGZhbHNlOwogfQogCkBAIC03OTUsMzMgKzc0
OCwzNiBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6Y3JlYXRlRmJvSWZOZWVkZWQoKQogICAgIGlm
IChtX2ZibykKICAgICAgICAgcmV0dXJuOwogCi0gICAgR0xfQ01EKGdsR2VuRnJhbWVidWZmZXJz
KDEsICZtX2ZibykpOwotICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZF
UiwgbV9mYm8pKTsKLSAgICBHTF9DTUQoZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJV
RkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIGlkKCksIDApKTsKKyAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGlj
c0NvbnRleHQzRCgpOworICAgIG1fZmJvID0gY29udGV4dDNELT5jcmVhdGVGcmFtZWJ1ZmZlcigp
OworICAgIGNvbnRleHQzRC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgbV9mYm8pOworICAgIGNvbnRleHQzRC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRU
QUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBpZCgpLCAwKTsKICAgICBt
X3Nob3VsZENsZWFyID0gdHJ1ZTsKIH0KIAogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmJpbmQoKQog
ewotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApKTsKKyAgICBHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRl
eHQzRCgpOworICAgIGNvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIDApOwogICAgIGNyZWF0ZUZib0lmTmVlZGVkKCk7Ci0gICAgR0xfQ01EKGdsQmlu
ZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2ZibykpOwotICAgIEdMX0NNRChnbFZpZXdw
b3J0KDAsIDAsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSkp
OworICAgIGNvbnRleHQzRC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgbV9mYm8pOworICAgIGNvbnRleHQzRC0+dmlld3BvcnQoMCwgMCwgbV90ZXh0dXJl
U2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsKICAgICBjbGVhcklmTmVlZGVk
KCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5kYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNyZWF0
ZVByb2plY3Rpb25NYXRyaXgobV90ZXh0dXJlU2l6ZSwgdHJ1ZSAvKiBtaXJyb3JlZCAqLyk7Ci0g
ICAgbV9jbGlwU3RhY2suYXBwbHkoKTsKKyAgICBtX2NsaXBTdGFjay5hcHBseShjb250ZXh0M0Qp
OwogfQogCiBCaXRtYXBUZXh0dXJlR0w6On5CaXRtYXBUZXh0dXJlR0woKQogeworICAgIEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4
dDNEKCk7CiAgICAgaWYgKG1faWQpCi0gICAgICAgIEdMX0NNRChnbERlbGV0ZVRleHR1cmVzKDEs
ICZtX2lkKSk7CisgICAgICAgIGNvbnRleHQzRC0+ZGVsZXRlVGV4dHVyZShtX2lkKTsKIAogICAg
IGlmIChtX2ZibykKLSAgICAgICAgR0xfQ01EKGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zi
bykpOworICAgICAgICBjb250ZXh0M0QtPmRlbGV0ZUZyYW1lYnVmZmVyKG1fZmJvKTsKIAogICAg
IGlmIChtX3JibykKLSAgICAgICAgR0xfQ01EKGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9y
Ym8pKTsKKyAgICAgICAgY29udGV4dDNELT5kZWxldGVSZW5kZXJidWZmZXIobV9yYm8pOwogfQog
CiBib29sIEJpdG1hcFRleHR1cmVHTDo6aXNWYWxpZCgpIGNvbnN0CkBAIC04NDEsMTEgKzc5Nywx
MSBAQCBUZXh0dXJlTWFwcGVyR0w6On5UZXh0dXJlTWFwcGVyR0woKQogCiB2b2lkIFRleHR1cmVN
YXBwZXJHTDo6YmluZERlZmF1bHRTdXJmYWNlKCkKIHsKLSAgICBHTF9DTUQoZ2xCaW5kRnJhbWVi
dWZmZXIoR0xfRlJBTUVCVUZGRVIsIGRhdGEoKS50YXJnZXRGcmFtZUJ1ZmZlcikpOworICAgIG1f
Y29udGV4dDNELT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpOwogICAgIEludFNpemUgdmlld3BvcnRTaXplKGRh
dGEoKS52aWV3cG9ydFsyXSwgZGF0YSgpLnZpZXdwb3J0WzNdKTsKICAgICBkYXRhKCkucHJvamVj
dGlvbk1hdHJpeCA9IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgodmlld3BvcnRTaXplLCBkYXRhKCku
UGFpbnRGbGFncyAmIFBhaW50aW5nTWlycm9yZWQpOwotICAgIEdMX0NNRChnbFZpZXdwb3J0KGRh
dGEoKS52aWV3cG9ydFswXSwgZGF0YSgpLnZpZXdwb3J0WzFdLCB2aWV3cG9ydFNpemUud2lkdGgo
KSwgdmlld3BvcnRTaXplLmhlaWdodCgpKSk7Ci0gICAgbV9jbGlwU3RhY2suYXBwbHkoKTsKKyAg
ICBtX2NvbnRleHQzRC0+dmlld3BvcnQoZGF0YSgpLnZpZXdwb3J0WzBdLCBkYXRhKCkudmlld3Bv
cnRbMV0sIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpOworICAg
IG1fY2xpcFN0YWNrLmFwcGx5KG1fY29udGV4dDNELmdldCgpKTsKICAgICBkYXRhKCkuY3VycmVu
dFN1cmZhY2UuY2xlYXIoKTsKIH0KIApAQCAtODc1LDcgKzgzMSw3IEBAIGJvb2wgVGV4dHVyZU1h
cHBlckdMOjpiZWdpblNjaXNzb3JDbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2Rl
bFZpZXdNYXRyCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNsaXBTdGFjaygpLmN1cnJl
bnQoKS5zY2lzc29yQm94LmludGVyc2VjdChyZWN0KTsKLSAgICBjbGlwU3RhY2soKS5hcHBseSgp
OworICAgIGNsaXBTdGFjaygpLmFwcGx5KG1fY29udGV4dDNELmdldCgpKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtODg5LDEwICs4NDUsMTAgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJl
Z2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb24K
IAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEo
KS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9n
cmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaW1wbGUpOwogCi0gICAgR0xfQ01EKGds
VXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKSk7Ci0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0
cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBjb25zdCBHTGZsb2F0IHVu
aXRSZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07Ci0gICAgR0xfQ01EKGdsVmVydGV4
QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR0xfRkxPQVQsIEdMX0ZB
TFNFLCAwLCB1bml0UmVjdCkpOworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0t
PmlkKCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFt
LT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgY29uc3QgR0MzRGZsb2F0IHVuaXRSZWN0W10gPSB7MCwg
MCwgMSwgMCwgMSwgMSwgMCwgMX07CisgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50
ZXIocHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwg
ZmFsc2UsIDAsIEdDM0RpbnRwdHIodW5pdFJlY3QpKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4
KQogICAgICAgICAgICAgLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkKQEAgLTkwMSwxNCArODU3
LDE0IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAgICAgICAgICAgICAgICAgMCwgMCwgMSwg
MCwKICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIDAsIDEp
KTsKIAotICAgIGNvbnN0IEdMZmxvYXQgbTRbXSA9IHsKKyAgICBjb25zdCBHQzNEZmxvYXQgbTRb
XSA9IHsKICAgICAgICAgbWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIG1hdHJpeC5tMTMoKSwg
bWF0cml4Lm0xNCgpLAogICAgICAgICBtYXRyaXgubTIxKCksIG1hdHJpeC5tMjIoKSwgbWF0cml4
Lm0yMygpLCBtYXRyaXgubTI0KCksCiAgICAgICAgIG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0zMigp
LCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwKICAgICAgICAgbWF0cml4Lm00MSgpLCBtYXRy
aXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgpCiAgICAgfTsKIAotICAgIGNvbnN0
IEdMZmxvYXQgbTRhbGxbXSA9IHsKKyAgICBjb25zdCBHQzNEZmxvYXQgbTRhbGxbXSA9IHsKICAg
ICAgICAgMiwgMCwgMCwgMCwKICAgICAgICAgMCwgMiwgMCwgMCwKICAgICAgICAgMCwgMCwgMSwg
MCwKQEAgLTkxNyw0MyArODczLDQyIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAKICAgICBp
bnQmIHN0ZW5jaWxJbmRleCA9IGNsaXBTdGFjaygpLmN1cnJlbnQoKS5zdGVuY2lsSW5kZXg7CiAK
LSAgICBHTF9DTUQoZ2xFbmFibGUoR0xfU1RFTkNJTF9URVNUKSk7CisgICAgbV9jb250ZXh0M0Qt
PmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKTsKIAogICAgIC8vIE1ha2Ug
c3VyZSB3ZSBkb24ndCBkbyBhbnkgYWN0dWFsIGRyYXdpbmcuCi0gICAgR0xfQ01EKGdsU3RlbmNp
bEZ1bmMoR0xfTkVWRVIsIHN0ZW5jaWxJbmRleCwgc3RlbmNpbEluZGV4KSk7CisgICAgbV9jb250
ZXh0M0QtPnN0ZW5jaWxGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpORVZFUiwgc3RlbmNpbEluZGV4
LCBzdGVuY2lsSW5kZXgpOwogCiAgICAgLy8gT3BlcmF0ZSBvbmx5IG9uIHRoZSBzdGVuY2lsSW5k
ZXggYW5kIGFib3ZlLgotICAgIEdMX0NNRChnbFN0ZW5jaWxNYXNrKDB4ZmYgJiB+KHN0ZW5jaWxJ
bmRleCAtIDEpKSk7CisgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxNYXNrKDB4ZmYgJiB+KHN0ZW5j
aWxJbmRleCAtIDEpKTsKIAogICAgIC8vIEZpcnN0IGNsZWFyIHRoZSBlbnRpcmUgYnVmZmVyIGF0
IHRoZSBjdXJyZW50IGluZGV4LgotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3Jh
bS0+bWF0cml4TG9jYXRpb24oKSwgMSwgR0xfRkFMU0UsIG00YWxsKSk7Ci0gICAgR0xfQ01EKGds
U3RlbmNpbE9wKEdMX1pFUk8sIEdMX1pFUk8sIEdMX1pFUk8pKTsKLSAgICBHTF9DTUQoZ2xEcmF3
QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpOworICAgIG1fY29udGV4dDNELT51bmlmb3Jt
TWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIGZhbHNlLCBjb25zdF9jYXN0
PEdDM0RmbG9hdCo+KG00YWxsKSk7CisgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxPcChHcmFwaGlj
c0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4
dDNEOjpaRVJPKTsKKyAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQz
RDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKIAogICAgIC8vIE5vdyBhcHBseSB0aGUgY3VycmVudCBp
bmRleCB0byB0aGUgbmV3IHF1YWQuCi0gICAgR0xfQ01EKGdsU3RlbmNpbE9wKEdMX1JFUExBQ0Us
IEdMX1JFUExBQ0UsIEdMX1JFUExBQ0UpKTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2
KHByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIEdMX0ZBTFNFLCBtNCkpOwotICAgIEdMX0NN
RChnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSk7CisgICAgbV9jb250ZXh0M0Qt
PnN0ZW5jaWxPcChHcmFwaGljc0NvbnRleHQzRDo6UkVQTEFDRSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFUExBQ0UsIEdyYXBoaWNzQ29udGV4dDNEOjpSRVBMQUNFKTsKKyAgICBtX2NvbnRleHQzRC0+
dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgY29u
c3RfY2FzdDxHQzNEZmxvYXQqPihtNCkpOworICAgIG1fY29udGV4dDNELT5kcmF3QXJyYXlzKEdy
YXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQpOwogCiAgICAgLy8gQ2xlYXIgdGhl
IHN0YXRlLgotICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52
ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbFN0ZW5jaWxNYXNrKDApKTsKKyAgICBtX2Nv
bnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigp
KTsKKyAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE1hc2soMCk7CiAKICAgICAvLyBJbmNyZWFzZSBz
dGVuY2lsSW5kZXggYW5kIGFwcGx5IHN0ZW5jaWwgdGVzdGluZy4KICAgICBzdGVuY2lsSW5kZXgg
Kj0gMjsKLSAgICBjbGlwU3RhY2soKS5hcHBseSgpOworICAgIGNsaXBTdGFjaygpLmFwcGx5KG1f
Y29udGV4dDNELmdldCgpKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZENsaXAoKQog
ewogICAgIGNsaXBTdGFjaygpLnBvcCgpOwotICAgIGNsaXBTdGFjaygpLmFwcGx5KCk7CisgICAg
Y2xpcFN0YWNrKCkuYXBwbHkobV9jb250ZXh0M0QuZ2V0KCkpOwogfQogCiBQYXNzUmVmUHRyPEJp
dG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlVGV4dHVyZSgpCiB7Ci0gICAgQml0
bWFwVGV4dHVyZUdMKiB0ZXh0dXJlID0gbmV3IEJpdG1hcFRleHR1cmVHTCgpOwotICAgIHRleHR1
cmUtPnNldFRleHR1cmVNYXBwZXIodGhpcyk7CisgICAgQml0bWFwVGV4dHVyZUdMKiB0ZXh0dXJl
ID0gbmV3IEJpdG1hcFRleHR1cmVHTCh0aGlzKTsKICAgICByZXR1cm4gYWRvcHRSZWYodGV4dHVy
ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaAppbmRleCAwNzZlNjVmNzM3NzYyNjFmMGEzYjkzYmI4
NTczYTUwNWRlOWMwMTcwLi44YTcyZDY3YWY5ZWVkMmNkNmI5MGVlODFhODVjODJhOTgwOGVkOWRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHTC5oCkBAIC0yMyw4ICsyMyw4IEBACiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiT3BlbkdM
U2hpbXMuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3Jt
YXRpb25NYXRyaXguaCIKIApAQCAtMzgsNyArMzgsNiBAQCBjbGFzcyBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTsKIGNsYXNzIFRleHR1cmVNYXBwZXJHTCA6IHB1YmxpYyBUZXh0dXJlTWFwcGVy
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyR0w+IGNyZWF0
ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyR0wpOyB9Ci0gICAgVGV4dHVy
ZU1hcHBlckdMKCk7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlckdMKCk7CiAKICAgICBlbnVt
IEZsYWcgewpAQCAtNTQsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRyYXdU
ZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1h
c2tUZXh0dXJlLCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpIE9WRVJSSURFOwogICAgIHZpcnR1YWwg
dm9pZCBkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncywgY29uc3QgSW50U2l6ZSYg
dGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFw
VGV4dHVyZSogbWFza1RleHR1cmUsIHVuc2lnbmVkIGV4cG9zZWRFZGdlcyA9IEFsbEVkZ2VzKTsK
IAotI2lmIGRlZmluZWQoR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlKQorI2lmICFVU0UoVEVYTUFQ
X09QRU5HTF9FU18yKQogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZVJlY3RhbmdsZUFSQih1
aW50MzJfdCB0ZXh0dXJlLCBGbGFncywgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVs
Vmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1
cmUpOwogI2VuZGlmCiAKQEAgLTY2LDYgKzY1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW50
U2l6ZSBtYXhUZXh0dXJlU2l6ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIEludFNpemUoMjAw
MCwgMjAwMCk7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRl
VGV4dHVyZSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRleHQoKSBPVkVSUklERSB7IHJldHVybiBtX2NvbnRleHQ7IH0KKyAgICBpbmxpbmUgR3Jh
cGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZXh0M0QuZ2V0KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCkgT1ZFUlJJREUgeyBtX2NvbnRleHQgPSBjb250ZXh0OyB9CiAK
ICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCkBAIC03NSw3ICs3NSw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldEVuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyhib29sIGVuYWJsZWQpIHsgbV9l
bmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcgPSBlbmFibGVkOyB9CiAKIHByaXZhdGU6Ci0K
ICAgICBzdHJ1Y3QgQ2xpcFN0YXRlIHsKICAgICAgICAgSW50UmVjdCBzY2lzc29yQm94OwogICAg
ICAgICBpbnQgc3RlbmNpbEluZGV4OwpAQCAtODksNyArODgsNyBAQCBwcml2YXRlOgogICAgIHB1
YmxpYzoKICAgICAgICAgdm9pZCBwdXNoKCk7CiAgICAgICAgIHZvaWQgcG9wKCk7Ci0gICAgICAg
IHZvaWQgYXBwbHkoKTsKKyAgICAgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQzRCopOwog
ICAgICAgICBpbmxpbmUgQ2xpcFN0YXRlJiBjdXJyZW50KCkgeyByZXR1cm4gY2xpcFN0YXRlOyB9
CiAgICAgICAgIHZvaWQgaW5pdChjb25zdCBJbnRSZWN0Jik7CiAKQEAgLTEwOSwxNiArMTA4LDE5
IEBAIHByaXZhdGU6CiAgICAgICAgIEZsb2F0UXVhZCB0YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1
YXJlOwogICAgIH07CiAKKyAgICBUZXh0dXJlTWFwcGVyR0woKTsKKwogICAgIGJvb2wgZHJhd1Rl
eHR1cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBGbG9h
dFJlY3QmIG9yaWdpbmFsVGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1v
ZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1Rl
eHR1cmUsIHVuc2lnbmVkIGV4cG9zZWRFZGdlcyk7CiAgICAgdm9pZCBkcmF3VGV4dHVyZWRRdWFk
V2l0aFByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qLCB1aW50MzJfdCB0ZXh0dXJl
LCBGbGFncywgY29uc3QgRHJhd1F1YWQmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9k
ZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4
dHVyZSk7Ci0gICAgdm9pZCBkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
KiwgR0xlbnVtIGRyYXdpbmdNb2RlLCBib29sIG5lZWRzQmxlbmRpbmcpOworICAgIHZvaWQgZHJh
d1F1YWQoY29uc3QgRHJhd1F1YWQmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxW
aWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIEdDM0RlbnVtIGRyYXdpbmdN
b2RlLCBib29sIG5lZWRzQmxlbmRpbmcpOwogCiAgICAgYm9vbCBiZWdpblNjaXNzb3JDbGlwKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBi
aW5kRGVmYXVsdFN1cmZhY2UoKTsKICAgICBDbGlwU3RhY2smIGNsaXBTdGFjaygpOwogICAgIGlu
bGluZSBUZXh0dXJlTWFwcGVyR0xEYXRhJiBkYXRhKCkgeyByZXR1cm4gKm1fZGF0YTsgfQotICAg
IFRleHR1cmVNYXBwZXJHTERhdGEqIG1fZGF0YTsKICAgICBHcmFwaGljc0NvbnRleHQqIG1fY29u
dGV4dDsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDNEOworICAgIFRl
eHR1cmVNYXBwZXJHTERhdGEqIG1fZGF0YTsKICAgICBDbGlwU3RhY2sgbV9jbGlwU3RhY2s7CiAg
ICAgYm9vbCBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZzsKIApAQCAtMTM1LDcgKzEz
Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGluaXRpYWxpemVTdGVuY2lsKCk7CiAgICAgfkJpdG1h
cFRleHR1cmVHTCgpOwogICAgIHZpcnR1YWwgdWludDMyX3QgaWQoKSBjb25zdCB7IHJldHVybiBt
X2lkOyB9Ci0gICAgdWludDMyX3QgdGV4dHVyZVRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIEdMX1RF
WFRVUkVfMkQ7IH0KKyAgICB1aW50MzJfdCB0ZXh0dXJlVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4g
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ7IH0KICAgICBJbnRTaXplIHRleHR1cmVTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlU2l6ZTsgfQogICAgIHZvaWQgc2V0VGV4dHVyZU1h
cHBlcihUZXh0dXJlTWFwcGVyR0wqIHRleG1hcCkgeyBtX3RleHR1cmVNYXBwZXIgPSB0ZXhtYXA7
IH0KICAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0
IEludFBvaW50Jik7CkBAIC0xNDcsMjAgKzE0OSwyMiBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJp
dmF0ZToKLSAgICBHTHVpbnQgbV9pZDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1faWQ7CiAgICAg
SW50U2l6ZSBtX3RleHR1cmVTaXplOwogICAgIEludFJlY3QgbV9kaXJ0eVJlY3Q7Ci0gICAgR0x1
aW50IG1fZmJvOwotICAgIEdMdWludCBtX3JibzsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZmJv
OworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9yYm87CiAgICAgYm9vbCBtX3Nob3VsZENsZWFyOwot
ICAgIFRleHR1cmVNYXBwZXJHTCogbV90ZXh0dXJlTWFwcGVyOwogICAgIFRleHR1cmVNYXBwZXJH
TDo6Q2xpcFN0YWNrIG1fY2xpcFN0YWNrOwotICAgIEJpdG1hcFRleHR1cmVHTCgpCisgICAgVGV4
dHVyZU1hcHBlckdMKiBtX3RleHR1cmVNYXBwZXI7CisKKyAgICBCaXRtYXBUZXh0dXJlR0woKTsK
KyAgICBCaXRtYXBUZXh0dXJlR0woVGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVyKQogICAg
ICAgICA6IG1faWQoMCkKICAgICAgICAgLCBtX2ZibygwKQogICAgICAgICAsIG1fcmJvKDApCiAg
ICAgICAgICwgbV9zaG91bGRDbGVhcih0cnVlKQotICAgICAgICAsIG1fdGV4dHVyZU1hcHBlcigw
KQorICAgICAgICAsIG1fdGV4dHVyZU1hcHBlcih0ZXh0dXJlTWFwcGVyKQogICAgIHsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCmluZGV4IDBmYmRi
ZTk1Y2FmMTY0NzBkZDA2MzJmMDRjMTQ0YjgyMGI2ZThiYjMuLjU1YWI4YTMwOWVhZjliZDJjYjdj
NTk3YzE3ZjcxZDM0Zjg5Yjg2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyLmNwcApAQCAtMzAsMjUgKzMwLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
I2lmbmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSNkZWZpbmUgT0VTMl9QUkVDSVNJT05fREVGSU5J
VElPTlMgXAotICAgICIjZGVmaW5lIGxvd3BcbiNkZWZpbmUgaGlnaHBcbiIKLSNkZWZpbmUgT0VT
Ml9GUkFHTUVOVF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT04KLSNlbHNlCi0jZGVmaW5lIE9FUzJf
UFJFQ0lTSU9OX0RFRklOSVRJT05TCi0jZGVmaW5lIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFV
TFRfUFJFQ0lTSU9OIFwKLSAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IFxuIgotI2VuZGlm
Ci0KLSNkZWZpbmUgU1RSSU5HSUZZX1ZBTChzcmMuLi4pICNzcmMKLSNkZWZpbmUgVkVSVEVYX1NI
QURFUihzcmMuLi4pIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TXAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU1RSSU5HSUZZX1ZBTChzcmMpCi0jZGVmaW5lIEZSQUdNRU5UX1NIQURF
UihzcmMuLi4pIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TXAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBPRVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTlwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSSU5HSUZZX1ZBTChzcmMpCisjZGVmaW5l
IFNUUklOR0lGWShzcmMuLi4pICNzcmMKIAogc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hh
ZGVyU291cmNlT3BhY2l0eUFuZE1hc2sgPQotICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICBTVFJJ
TkdJRlkoCisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1bmlmb3Jt
IHNhbXBsZXIyRCBzX3NvdXJjZTsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19tYXNrOwog
ICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwpAQCAtNjQsNyArNTAsOCBAQCBz
dGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9CiAg
ICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdE9wYWNp
dHlBbmRNYXNrID0KLSAgICBGUkFHTUVOVF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAorICAgICAg
ICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0
IHNfc291cmNlOwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc19tYXNrOwogICAgICAg
ICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwpAQCAtODAsNyArNjcsNyBAQCBzdGF0aWMg
Y29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0T3BhY2l0eUFuZE1hc2sgPQogICAg
ICk7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFz
ayA9Ci0gICAgVkVSVEVYX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCiAgICAgICAgIHVuaWZvcm0g
bWF0NCB1X21hdHJpeDsKICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfZmxpcDsKICAgICAg
ICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CkBAIC05NSw3ICs4Miw4IEBAIHN0YXRpYyBjb25z
dCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9CiAgICAgKTsKIAogc3Rh
dGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlU2ltcGxlID0KLSAgICBGUkFHTUVO
VF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9h
dDsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zb3VyY2U7CiAgICAgICAgIHVuaWZvcm0g
bG93cCBmbG9hdCB1X29wYWNpdHk7CiAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJj
ZVRleENvb3JkOwpAQCAtMTA3LDcgKzk1LDggQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50
U2hhZGVyU291cmNlU2ltcGxlID0KICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21l
bnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNpbmdOb01hc2sgPQotICAgIEZSQUdNRU5UX1NIQURFUigK
KyAgICBTVFJJTkdJRlkoCisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAg
ICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NvdXJjZTsKICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMy
IHZfc291cmNlVGV4Q29vcmQ7CiAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7
CkBAIC0xNDUsNyArMTM0LDggQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291
cmNlQW50aWFsaWFzaW5nTm9NYXNrID0KICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogZnJh
Z21lbnRTaGFkZXJTb3VyY2VSZWN0U2ltcGxlID0KLSAgICBGUkFHTUVOVF9TSEFERVIoCisgICAg
U1RSSU5HSUZZKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgdW5p
Zm9ybSBzYW1wbGVyMkRSZWN0IHNfc291cmNlOwogICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1
X3RleHR1cmVTaXplOwogICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwpAQCAt
MTU4LDcgKzE0OCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVJl
Y3RTaW1wbGUgPQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2VTaW1wbGUgPQotICAgIFZFUlRFWF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAogICAgICAgICB1
bmlmb3JtIG1hdDQgdV9tYXRyaXg7CiAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X2ZsaXA7
CiAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwpAQCAtMTcxLDcgKzE2MSw3IEBAIHN0
YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUgPQogICAgICk7CiAKIHN0
YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTb2xpZENvbG9yID0KLSAgICBWRVJU
RVhfU0hBREVSKAorICAgIFNUUklOR0lGWSgKICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4
OwogICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKICAgICAgICAgdm9pZCBtYWluKHZv
aWQpCkBAIC0xODIsNyArMTcyLDggQEAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNv
dXJjZVNvbGlkQ29sb3IgPQogCiAKIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNv
dXJjZVNvbGlkQ29sb3IgPQotICAgIFZFUlRFWF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAorICAg
ICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgdW5pZm9ybSB2ZWM0IHVfY29s
b3I7CiAgICAgICAgIHZvaWQgbWFpbih2b2lkKQogICAgICAgICB7CkBAIC0yMTIsMjIgKzIwMywy
MiBAQCBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZwogCiAgICAgc3dpdGNoIChzaGFkZXJUeXBlKSB7
CiAgICAgY2FzZSBTaW1wbGU6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNpbXBsZTo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVNpbXBsZTo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgUmVjdFNpbXBsZToKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmNyZWF0ZShtX2NvbnRleHQpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEFudGlhbGlhc2luZ05vTWFzazoKLSAgICAgICAgcHJvZ3JhbSA9
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpjcmVhdGUoKTsK
KyAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5n
Tm9NYXNrOjpjcmVhdGUobV9jb250ZXh0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBPcGFj
aXR5QW5kTWFzazoKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
T3BhY2l0eUFuZE1hc2s6OmNyZWF0ZSgpOworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgUmVjdE9wYWNpdHlBbmRNYXNrOgotICAgICAgICBwcm9ncmFtID0g
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OmNyZWF0ZSgpOwor
ICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFu
ZE1hc2s6OmNyZWF0ZShtX2NvbnRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNvbGlk
Q29sb3I6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlk
Q29sb3I6OmNyZWF0ZSgpOworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1Tb2xpZENvbG9yOjpjcmVhdGUobV9jb250ZXh0KTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJbnZhbGlkOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIzNiw4ICsy
MjcsOSBAQCBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZwogICAgIHJldHVybiBwcm9ncmFtOwogfQog
Ci1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0o
Y29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRl
clNvdXJjZSkKLSAgICA6IG1faWQoMCkKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3Qg
Y2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJj
ZSkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9pZCgwKQogICAgICwgbV92ZXJ0
ZXhBdHRyaWIoMCkKICAgICAsIG1fdmVydGV4U2hhZGVyKDApCiAgICAgLCBtX2ZyYWdtZW50U2hh
ZGVyKDApCkBAIC0yNTYsNDYgKzI0OCw0NiBAQCB2b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtOjppbml0aWFsaXplUHJvZ3JhbSgpCiB7CiAgICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVy
U291cmNlUHJvZ3JhbSA9IHZlcnRleFNoYWRlclNvdXJjZSgpOwogICAgIGNvbnN0IGNoYXIqIGZy
YWdtZW50U2hhZGVyU291cmNlUHJvZ3JhbSA9IGZyYWdtZW50U2hhZGVyU291cmNlKCk7Ci0gICAg
R0x1aW50IHZlcnRleFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOwot
ICAgIEdMdWludCBmcmFnbWVudFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NI
QURFUik7Ci0gICAgZ2xTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAmdmVydGV4U2hhZGVy
U291cmNlUHJvZ3JhbSwgMCk7Ci0gICAgZ2xTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIDEs
ICZmcmFnbWVudFNoYWRlclNvdXJjZVByb2dyYW0sIDApOwotICAgIEdMdWludCBwcm9ncmFtSUQg
PSBnbENyZWF0ZVByb2dyYW0oKTsKLSAgICBnbENvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsK
LSAgICBnbENvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgIFBsYXRmb3JtM0RPYmpl
Y3QgdmVydGV4U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OlZFUlRFWF9TSEFERVIpOworICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIg
PSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hB
REVSKTsKKyAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNo
YWRlclNvdXJjZVByb2dyYW0pOworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKGZyYWdtZW50
U2hhZGVyLCBmcmFnbWVudFNoYWRlclNvdXJjZVByb2dyYW0pOworICAgIFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbUlEID0gbV9jb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7CisgICAgbV9jb250ZXh0
LT5jb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5jb21waWxlU2hh
ZGVyKGZyYWdtZW50U2hhZGVyKTsKIAotICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVy
dGV4U2hhZGVyKTsKLSAgICBnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVy
KTsKLSAgICBnbExpbmtQcm9ncmFtKHByb2dyYW1JRCk7CisgICAgbV9jb250ZXh0LT5hdHRhY2hT
aGFkZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+YXR0YWNoU2hh
ZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29udGV4dC0+bGlua1Byb2dy
YW0ocHJvZ3JhbUlEKTsKIAotICAgIG1fdmVydGV4QXR0cmliID0gZ2xHZXRBdHRyaWJMb2NhdGlv
bihwcm9ncmFtSUQsICJhX3ZlcnRleCIpOworICAgIG1fdmVydGV4QXR0cmliID0gbV9jb250ZXh0
LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3ZlcnRleCIpOwogCiAgICAgbV9pZCA9
IHByb2dyYW1JRDsKICAgICBtX3ZlcnRleFNoYWRlciA9IHZlcnRleFNoYWRlcjsKICAgICBtX2Zy
YWdtZW50U2hhZGVyID0gZnJhZ21lbnRTaGFkZXI7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbihHTGludCAmdmFyaWFibGUsIGNvbnN0IGNo
YXIqIG5hbWUpCit2b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpnZXRVbmlmb3JtTG9j
YXRpb24oR0MzRGludCAmdmFyaWFibGUsIGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgdmFyaWFi
bGUgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX2lkLCBuYW1lKTsKKyAgICB2YXJpYWJsZSA9IG1f
Y29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1faWQsIG5hbWUpOwogICAgIEFTU0VSVCh2YXJp
YWJsZSA+PSAwKTsKIH0KIAogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06On5UZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSgpCiB7Ci0gICAgR0x1aW50IHByb2dyYW1JRCA9IG1faWQ7CisgICAg
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtSUQgPSBtX2lkOwogICAgIGlmICghcHJvZ3JhbUlEKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBnbERldGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fdmVydGV4
U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7Ci0gICAgZ2xEZXRh
Y2hTaGFkZXIocHJvZ3JhbUlELCBtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRl
cihtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbUlEKTsKKyAg
ICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fdmVydGV4U2hhZGVyKTsKKyAg
ICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0
LT5kZXRhY2hTaGFkZXIocHJvZ3JhbUlELCBtX2ZyYWdtZW50U2hhZGVyKTsKKyAgICBtX2NvbnRl
eHQtPmRlbGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0
ZVByb2dyYW0ocHJvZ3JhbUlEKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1w
bGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCkKLSAgICA6IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJT
b3VyY2VTaW1wbGUpCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1TaW1wbGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAg
OiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VT
aW1wbGUsIGZyYWdtZW50U2hhZGVyU291cmNlU2ltcGxlKQogewogICAgIGluaXRpYWxpemVQcm9n
cmFtKCk7CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fZmxpcExvY2F0aW9uLCAidV9mbGlwIik7
CkBAIC0zMDQsMTYgKzI5NiwxNiBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKQogICAgIGdldFVuaWZvcm1Mb2NhdGlv
bihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xv
cigpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2VT
b2xpZENvbG9yLCBmcmFnbWVudFNoYWRlclNvdXJjZVNvbGlkQ29sb3IpCitUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRD
b2xvcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICA6IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJjZVNvbGlkQ29sb3IsIGZyYWdtZW50
U2hhZGVyU291cmNlU29saWRDb2xvcikKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAg
IGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKICAgICBn
ZXRVbmlmb3JtTG9jYXRpb24obV9jb2xvckxvY2F0aW9uLCAidV9jb2xvciIpOwogfQogCi1UZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtUmVjdFNpbXBsZSgpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhT
aGFkZXJTb3VyY2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdFNpbXBsZSkKK1RleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1SZWN0U2ltcGxlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDogVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFn
bWVudFNoYWRlclNvdXJjZVJlY3RTaW1wbGUpCiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsK
ICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7CkBA
IC0zMjMsOCArMzE1LDggQEAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKQogICAgIGdldFVuaWZvcm1Mb2Nh
dGlvbihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9w
YWNpdHlBbmRNYXNrKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNo
YWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRN
YXNrKQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayhHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKKyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRl
clNvdXJjZU9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNr
KQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1f
bWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwpAQCAtMzM0LDggKzMyNiw4IEBAIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtT3BhY2l0eUFuZE1hCiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9u
LCAidV9vcGFjaXR5Iik7CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNp
dHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaygp
Ci0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFj
aXR5QW5kTWFzaywgZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0T3BhY2l0eUFuZE1hc2spCitUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQp
CisgICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJT
b3VyY2VPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0T3BhY2l0eUFuZE1h
c2spCiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24o
bV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7CkBAIC0zNDUsOCArMzM3LDggQEAgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdE9wYWMKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRp
b24sICJ1X29wYWNpdHkiKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxp
YXNpbmdOb01hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNr
KCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZVNp
bXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNpbmdOb01hc2spCitUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1BbnRpYWxpYXNpbmdOb01hc2soR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAg
OiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VT
aW1wbGUsIGZyYWdtZW50U2hhZGVyU291cmNlQW50aWFsaWFzaW5nTm9NYXNrKQogewogICAgIGlu
aXRpYWxpemVQcm9ncmFtKCk7CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRp
b24sICJ1X21hdHJpeCIpOwpAQCAtMzU2LDkgKzM0OCw5IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlh
bGlhCiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fZmxpcExvY2F0aW9uLCAidV9mbGlwIik7CiB9
CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cigpCitUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkK
IHsKLSAgICBBU1NFUlQoaW5pdGlhbGl6ZU9wZW5HTFNoaW1zKCkpOwogfQogCiBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6flRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkKQEAgLTM3Mywx
OCArMzY1LDE5IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIoKQogCiBTdGFuZGFyZEZpbHRlclByb2dyYW06On5TdGFuZGFyZEZpbHRlclBy
b2dyYW0oKQogewotICAgIGdsRGV0YWNoU2hhZGVyKG1faWQsIG1fdmVydGV4U2hhZGVyKTsKLSAg
ICBnbERlbGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7Ci0gICAgZ2xEZXRhY2hTaGFkZXIobV9p
ZCwgbV9mcmFnbWVudFNoYWRlcik7Ci0gICAgZ2xEZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRl
cik7Ci0gICAgZ2xEZWxldGVQcm9ncmFtKG1faWQpOworICAgIG1fY29udGV4dC0+ZGV0YWNoU2hh
ZGVyKG1faWQsIG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlciht
X3ZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIobV9pZCwgbV9mcmFn
bWVudFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRl
cik7CisgICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1faWQpOwogfQogCi1TdGFuZGFyZEZp
bHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJh
dGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKLSAgICA6IG1faWQoMCkKK1N0YW5kYXJkRmls
dGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykK
KyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9pZCgwKQogewogICAgIGNvbnN0IGNo
YXIqIHZlcnRleFNoYWRlclNvdXJjZSA9Ci0gICAgICAgICAgICBWRVJURVhfU0hBREVSKAorICAg
ICAgICAgICAgU1RSSU5HSUZZKAogICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVy
dGV4OwogICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdGV4Q29vcmQ7CiAgICAgICAg
ICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7CkBAIC0zOTYsOCArMzg5LDcg
QEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgICAgICk7CiAKICNkZWZpbmUgU1RB
TkRBUkRfRklMVEVSKHguLi4pIFwKLSAgICAgICAgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlNc
Ci0gICAgICAgIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFVTFRfUFJFQ0lTSU9OXAorICAgICAg
ICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iXAogICAgICAgICAidmFyeWluZyBoaWdocCB2
ZWMyIHZfdGV4Q29vcmQ7XG4iXAogICAgICAgICAidW5pZm9ybSBoaWdocCBmbG9hdCB1X2Ftb3Vu
dDtcbiJcCiAgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG4iXApAQCAtNDA4
LDkgKzQwMCw5IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFt
KEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgc3dpdGNoICh0eXBlKSB7
CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKICAgICAgICAgZnJhZ21lbnRT
aGFkZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICBsb3dwIHZlYzQgc2hh
ZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICAgICAgdmVjNCBzaGFkZSh2ZWM0IGNvbG9yKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgYW1vdW50ID0gMS4wIC0g
dV9hbW91bnQ7CisgICAgICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9hbW91bnQ7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoKDAuMjEyNiArIDAuNzg3NCAqIGFtb3VudCkg
KiBjb2xvci5yICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcy
MiAtIDAuMDcyMiAqIGFtb3VudCkgKiBjb2xvci5iLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICgwLjIxMjYgLSAwLjIxMjYgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgKyAwLjI4
NDggKiBhbW91bnQpICogY29sb3IuZyArICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91bnQpICogY29s
b3IuYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yMTI2IC0gMC4yMTI2ICogYW1v
dW50KSAqIGNvbG9yLnIgKyAoMC43MTUyIC0gMC43MTUyICogYW1vdW50KSAqIGNvbG9yLmcgKyAo
MC4wNzIyICsgMC45Mjc4ICogYW1vdW50KSAqIGNvbG9yLmIsCkBAIC00MjAsOSArNDEyLDkgQEAg
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0
aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OlNFUElBOgogICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJE
X0ZJTFRFUigKLSAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisg
ICAgICAgICAgICB2ZWM0IHNoYWRlKHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgbG93cCBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3VudDsKKyAgICAgICAgICAg
ICAgICBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3VudDsKICAgICAgICAgICAgICAgICByZXR1
cm4gdmVjNCgoMC4zOTMgKyAwLjYwNyAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzY5IC0gMC43
NjkgKiBhbW91bnQpICogY29sb3IuZyArICgwLjE4OSAtIDAuMTg5ICogYW1vdW50KSAqIGNvbG9y
LmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMzQ5IC0gMC4zNDkgKiBhbW91bnQp
ICogY29sb3IuciArICgwLjY4NiArIDAuMzE0ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xNjgg
LSAwLjE2OCAqIGFtb3VudCkgKiBjb2xvci5iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICgwLjI3MiAtIDAuMjcyICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC41MzQgLSAwLjUzNCAqIGFt
b3VudCkgKiBjb2xvci5nICsgKDAuMTMxICsgMC44NjkgKiBhbW91bnQpICogY29sb3IuYiwKQEAg
LTQzMiw3ICs0MjQsNyBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJv
Z3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6CiAgICAgICAgIGZyYWdtZW50U2hh
ZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRl
KGxvd3AgdmVjNCBjb2xvcikKKyAgICAgICAgICAgIHZlYzQgc2hhZGUodmVjNCBjb2xvcikKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVjNCgoMC4yMTMgKyAwLjc4NyAq
IHVfYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAqIHVfYW1vdW50KSAqIGNvbG9y
LmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVfYW1vdW50KSAqIGNvbG9yLmIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKDAuMjEzIC0gMC4yMTMgKiB1X2Ftb3VudCkgKiBjb2xvci5yICsgKDAu
NzE1ICsgMC4yODUgKiB1X2Ftb3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIgKiB1X2Ft
b3VudCkgKiBjb2xvci5iLApAQCAtNDQzLDExICs0MzUsMTEgQEAgU3RhbmRhcmRGaWx0ZXJQcm9n
cmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBl
IHR5cGUKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RB
VEU6CiAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAotICAg
ICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKKyAgICAgICAgICAgIHZl
YzQgc2hhZGUodmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBoaWdo
cCBmbG9hdCBwaSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDY7Ci0gICAgICAgICAgICAgICAgaGln
aHAgZmxvYXQgYyA9IGNvcyh1X2Ftb3VudCAqIHBpIC8gMTgwLjApOwotICAgICAgICAgICAgICAg
IGhpZ2hwIGZsb2F0IHMgPSBzaW4odV9hbW91bnQgKiBwaSAvIDE4MC4wKTsKKyAgICAgICAgICAg
ICAgICBmbG9hdCBwaSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDY7CisgICAgICAgICAgICAgICAg
ZmxvYXQgYyA9IGNvcyh1X2Ftb3VudCAqIHBpIC8gMTgwLjApOworICAgICAgICAgICAgICAgIGZs
b2F0IHMgPSBzaW4odV9hbW91bnQgKiBwaSAvIDE4MC4wKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gdmVjNChjb2xvci5yICogKDAuMjEzICsgYyAqIDAuNzg3IC0gcyAqIDAuMjEzKSArIGNvbG9y
LmcgKiAoMC43MTUgLSBjICogMC43MTUgLSBzICogMC43MTUpICsgY29sb3IuYiAqICgwLjA3MiAt
IGMgKiAwLjA3MiArIHMgKiAwLjkyOCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29s
b3IuciAqICgwLjIxMyAtIGMgKiAwLjIxMyArIHMgKiAwLjE0MykgKyBjb2xvci5nICogKDAuNzE1
ICsgYyAqIDAuMjg1ICsgcyAqIDAuMTQwKSArIGNvbG9yLmIgKiAoMC4wNzIgLSBjICogMC4wNzIg
LSBzICogMC4yODMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLnIgKiAoMC4y
MTMgLSBjICogMC4yMTMgLSBzICogMC43ODcpICsgIGNvbG9yLmcgKiAoMC43MTUgLSBjICogMC43
MTUgKyBzICogMC43MTUpICsgY29sb3IuYiAqICgwLjA3MiArIGMgKiAwLjkyOCArIHMgKiAwLjA3
MiksCkBAIC00NTcsOCArNDQ5LDggQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZp
bHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKICAgICAgICAgZnJhZ21l
bnRTaGFkZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICBsb3dwIGZsb2F0
IGludmVydChsb3dwIGZsb2F0IG4pIHsgcmV0dXJuICgxLjAgLSBuKSAqIHVfYW1vdW50ICsgbiAq
ICgxLjAgLSB1X2Ftb3VudCk7IH0KLSAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZl
YzQgY29sb3IpCisgICAgICAgICAgICBmbG9hdCBpbnZlcnQoZmxvYXQgbikgeyByZXR1cm4gKDEu
MCAtIG4pICogdV9hbW91bnQgKyBuICogKDEuMCAtIHVfYW1vdW50KTsgfQorICAgICAgICAgICAg
dmVjNCBzaGFkZSh2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiB2ZWM0KGludmVydChjb2xvci5yKSwgaW52ZXJ0KGNvbG9yLmcpLCBpbnZlcnQoY29sb3Iu
YiksIGNvbG9yLmEpOwogICAgICAgICAgICAgfQpAQCAtNDY2LDcgKzQ1OCw3IEBAIFN0YW5kYXJk
RmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3Bl
cmF0aW9uVHlwZSB0eXBlCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpCUklHSFRORVNTOgogICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJ
TFRFUigKLSAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAg
ICAgICAgICB2ZWM0IHNoYWRlKHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHZlYzQoY29sb3IucmdiICogKDEuMCArIHVfYW1vdW50KSwgY29sb3IuYSk7
CiAgICAgICAgICAgICB9CkBAIC00NzQsOCArNDY2LDggQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFt
OjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5
cGUKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgog
ICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAg
ICAgIGxvd3AgZmxvYXQgY29udHJhc3QobG93cCBmbG9hdCBuKSB7IHJldHVybiAobiAtIDAuNSkg
KiB1X2Ftb3VudCArIDAuNTsgfQotICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVj
NCBjb2xvcikKKyAgICAgICAgICAgIGZsb2F0IGNvbnRyYXN0KGZsb2F0IG4pIHsgcmV0dXJuIChu
IC0gMC41KSAqIHVfYW1vdW50ICsgMC41OyB9CisgICAgICAgICAgICB2ZWM0IHNoYWRlKHZlYzQg
Y29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29udHJh
c3QoY29sb3IuciksIGNvbnRyYXN0KGNvbG9yLmcpLCBjb250cmFzdChjb2xvci5iKSwgY29sb3Iu
YSk7CiAgICAgICAgICAgICB9CkBAIC00ODMsMjAgKzQ3NSwyMSBAQCBTdGFuZGFyZEZpbHRlclBy
b2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5
cGUgdHlwZQogICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lU
WToKICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCi0gICAg
ICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICAgICAgdmVj
NCBzaGFkZSh2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVy
biB2ZWM0KGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgKiB1X2Ftb3VudCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpCTFVSOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IEZSQUdNRU5U
X1NIQURFUigKKyAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVFJJTkdJRlkoCisgICAg
ICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgICAgIHZhcnlpbmcgaGln
aHAgdmVjMiB2X3RleENvb3JkOwogICAgICAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzIgdV9ibHVy
UmFkaXVzOwogICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlOwogICAgICAg
ICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxG
X1dJRFRIXTsKIAotICAgICAgICAgICAgbG93cCB2ZWM0IHNhbXBsZUNvbG9yKGZsb2F0IHJhZGl1
cykKKyAgICAgICAgICAgIHZlYzQgc2FtcGxlQ29sb3IoZmxvYXQgcmFkaXVzKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIHZlYzIgY29vcmQgPSB2X3RleENvb3JkICsgcmFkaXVzICog
dV9ibHVyUmFkaXVzOwogICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlMkQodV90ZXh0dXJl
LCBjb29yZCkgKiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3JkLngg
PCAxLiAmJiBjb29yZC55IDwgMS4pOwpAQCAtNTIzLDIwICs1MTYsMjEgQEAgU3RhbmRhcmRGaWx0
ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRp
b25UeXBlIHR5cGUKICAgICAgICAgc3dpdGNoIChwYXNzKSB7CiAgICAgICAgIGNhc2UgMDogewog
ICAgICAgICAgICAgLy8gRmlyc3QgcGFzczogaG9yaXpvbnRhbCBhbHBoYSBibHVyLgotICAgICAg
ICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBGUkFHTUVOVF9TSEFERVIoCisgICAgICAgICAg
ICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUUklOR0lGWSgKKyAgICAgICAgICAgICAgICBwcmVj
aXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIg
dl90ZXhDb29yZDsKICAgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9zaGFkb3dC
bHVyUmFkaXVzOwogICAgICAgICAgICAgICAgIHVuaWZvcm0gbG93cCB2ZWMyIHVfc2hhZG93T2Zm
c2V0OwogICAgICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTsKICAgICAg
ICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVM
X0hBTEZfV0lEVEhdOwogCi0gICAgICAgICAgICAgICAgbG93cCBmbG9hdCBzYW1wbGVBbHBoYShm
bG9hdCByYWRpdXMpCisgICAgICAgICAgICAgICAgZmxvYXQgc2FtcGxlQWxwaGEoZmxvYXQgcmFk
aXVzKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdmVjMiBjb29yZCA9
IHZfdGV4Q29vcmQgLSB1X3NoYWRvd09mZnNldCArIHZlYzIocmFkaXVzICogdV9zaGFkb3dCbHVy
UmFkaXVzLCAwLik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlMkQodV90ZXh0
dXJlLCBjb29yZCkuYSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29v
cmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgbG93cCBmbG9hdCBzaGFkb3dCbHVySG9yaXpvbnRhbCgpCisgICAgICAgICAgICAg
ICAgZmxvYXQgc2hhZG93Qmx1ckhvcml6b250YWwoKQogICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgZmxvYXQgdG90YWwgPSBzYW1wbGVBbHBoYSgwKSAqIHVfZ2F1c3NpYW5L
ZXJuZWxbMF07CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgR0FVU1NJ
QU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgewpAQCAtNTU2LDcgKzU1MCw4IEBAIFN0YW5kYXJk
RmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3Bl
cmF0aW9uVHlwZSB0eXBlCiAgICAgICAgICAgICB9CiAgICAgICAgIGNhc2UgMTogewogICAgICAg
ICAgICAgLy8gU2Vjb25kIHBhc3M6IHZlcnRpY2FsIGFscGhhIGJsdXIgYW5kIGNvbXBvc2l0ZSB3
aXRoIG9yaWdpbi4KLSAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gRlJBR01FTlRf
U0hBREVSKAorICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVFJJTkdJRlkoCisg
ICAgICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgICAgICAgICAg
dmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7CiAgICAgICAgICAgICAgICAgdW5pZm9ybSBs
b3dwIGZsb2F0IHVfc2hhZG93Qmx1clJhZGl1czsKICAgICAgICAgICAgICAgICB1bmlmb3JtIGxv
d3AgdmVjNCB1X3NoYWRvd0NvbG9yOwpAQCAtNTY0LDEzICs1NTksMTMgQEAgU3RhbmRhcmRGaWx0
ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRp
b25UeXBlIHR5cGUKICAgICAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1X2NvbnRlbnRU
ZXh0dXJlOwogICAgICAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtH
QVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSF07CiAKLSAgICAgICAgICAgICAgICBsb3dwIGZsb2F0
IHNhbXBsZUFscGhhKGZsb2F0IHIpCisgICAgICAgICAgICAgICAgZmxvYXQgc2FtcGxlQWxwaGEo
ZmxvYXQgcikKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHZlYzIgY29v
cmQgPSB2X3RleENvb3JkICsgdmVjMigwLiwgciAqIHVfc2hhZG93Qmx1clJhZGl1cyk7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlMkQodV90ZXh0dXJlLCBjb29yZCkuYSAqIGZs
b2F0KGNvb3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3Jk
LnkgPCAxLik7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgbG93cCBmbG9h
dCBzaGFkb3dCbHVyVmVydGljYWwoKQorICAgICAgICAgICAgICAgIGZsb2F0IHNoYWRvd0JsdXJW
ZXJ0aWNhbCgpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBmbG9hdCB0
b3RhbCA9IHNhbXBsZUFscGhhKDApICogdV9nYXVzc2lhbktlcm5lbFswXTsKICAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsg
aSsrKSB7CkBAIC01ODEsNyArNTc2LDcgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFy
ZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgIGxvd3AgdmVjNCBzb3VyY2VPdmVyKGxvd3AgdmVjNCBzb3VyY2UsIGxvd3AgdmVj
NCBkZXN0aW5hdGlvbikKKyAgICAgICAgICAgICAgICB2ZWM0IHNvdXJjZU92ZXIodmVjNCBzb3Vy
Y2UsIHZlYzQgZGVzdGluYXRpb24pCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAvLyBDb21wb3NpdGUgdGhlIHNoYWRvdyB3aXRoIHRoZSBvcmlnaW5hbCB0ZXh0dXJlLgog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlICsgZGVzdGluYXRpb24gKiAoMS4gLSBz
b3VyY2UuYSk7CkBAIC02MDIsMjYgKzU5NywyNSBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0
YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQog
CiAgICAgaWYgKCFmcmFnbWVudFNoYWRlclNvdXJjZSkKICAgICAgICAgcmV0dXJuOwotICAgIEdM
dWludCB2ZXJ0ZXhTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9WRVJURVhfU0hBREVSKTsKLSAg
ICBHTHVpbnQgZnJhZ21lbnRTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9GUkFHTUVOVF9TSEFE
RVIpOwotICAgIGdsU2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgMSwgJnZlcnRleFNoYWRlclNv
dXJjZSwgMCk7Ci0gICAgZ2xTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIDEsICZmcmFnbWVu
dFNoYWRlclNvdXJjZSwgMCk7Ci0gICAgR0x1aW50IHByb2dyYW1JRCA9IGdsQ3JlYXRlUHJvZ3Jh
bSgpOwotICAgIGdsQ29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsQ29tcGlsZVNo
YWRlcihmcmFnbWVudFNoYWRlcik7CisgICAgUGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFkZXIg
PSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURF
Uik7CisgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNoYWRlciA9IG1fY29udGV4dC0+Y3Jl
YXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpOworICAgIG1fY29u
dGV4dC0+c2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyU291cmNlKTsKKyAg
ICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgZnJhZ21lbnRTaGFkZXJT
b3VyY2UpOworICAgIFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbUlEID0gbV9jb250ZXh0LT5jcmVh
dGVQcm9ncmFtKCk7CisgICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7
CisgICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKICNpZiAhTE9H
X0RJU0FCTEVECi0gICAgR0xjaGFyIGxvZ1sxMDBdOwotICAgIEdMaW50IGxlbjsKLSAgICBnbEdl
dFNoYWRlckluZm9Mb2coZnJhZ21lbnRTaGFkZXIsIDEwMCwgJmxlbiwgbG9nKTsKKyAgICBTdHJp
bmcgbG9nOworICAgIG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhmcmFnbWVudFNoYWRlcik7
CiAgICAgV1RGTG9nKCZMb2dDb21wb3NpdGluZywgIiVzXG4iLCBsb2cpOwogI2VuZGlmCi0gICAg
Z2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsQXR0YWNoU2hh
ZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsTGlua1Byb2dyYW0ocHJvZ3Jh
bUlEKTsKKyAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRl
cik7CisgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRl
cik7CisgICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShwcm9ncmFtSUQpOwogCi0gICAgbV92ZXJ0
ZXhBdHRyaWIgPSBnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdmVydGV4Iik7Ci0g
ICAgbV90ZXhDb29yZEF0dHJpYiA9IGdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiYV90
ZXhDb29yZCIpOwotICAgIG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxv
Y2F0aW9uKHByb2dyYW1JRCwgInVfdGV4dHVyZSIpOworICAgIG1fdmVydGV4QXR0cmliID0gbV9j
b250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3ZlcnRleCIpOworICAgIG1f
dGV4Q29vcmRBdHRyaWIgPSBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwg
ImFfdGV4Q29vcmQiKTsKKyAgICBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBtX2NvbnRleHQt
PmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3RleHR1cmUiKTsKICAgICBzd2l0Y2gg
KHR5cGUpIHsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgogICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKQEAgLTYzMSwyMSArNjI1LDIxIEBAIFN0YW5kYXJkRmls
dGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0
aW9uVHlwZSB0eXBlCiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CiAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpPUEFDSVRZOgotICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuYW1vdW50ID0gZ2xHZXRVbmlm
b3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9hbW91bnQiKTsKKyAgICAgICAgbV91bmlmb3JtTG9j
YXRpb25zLmFtb3VudCA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwg
InVfYW1vdW50Iik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpC
TFVSOgotICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5yYWRpdXMgPSBnbEdldFVuaWZv
cm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2JsdXJSYWRpdXMiKTsKLSAgICAgICAgbV91bmlmb3Jt
TG9jYXRpb25zLmJsdXIuZ2F1c3NpYW5LZXJuZWwgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9n
cmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7CisgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5i
bHVyLnJhZGl1cyA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVf
Ymx1clJhZGl1cyIpOworICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktl
cm5lbCA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfZ2F1c3Np
YW5LZXJuZWwiKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRS
T1BfU0hBRE9XOgotICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMg
PSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3NoYWRvd0JsdXJSYWRpdXMiKTsK
LSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCA9IGdsR2V0
VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfZ2F1c3NpYW5LZXJuZWwiKTsKKyAgICAgICAg
bV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzID0gbV9jb250ZXh0LT5nZXRVbmlm
b3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dCbHVyUmFkaXVzIik7CisgICAgICAgIG1f
dW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwgPSBtX2NvbnRleHQtPmdldFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7CiAgICAgICAgIGlm
ICghcGFzcykKLSAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cub2Zmc2V0ID0g
Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dPZmZzZXQiKTsKKyAgICAg
ICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cub2Zmc2V0ID0gbV9jb250ZXh0LT5nZXRV
bmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dPZmZzZXQiKTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIGNvbG9yIGFuZCB0aGUgY29udGVu
dCB0ZXh0dXJlIGluIHRoZSBzZWNvbmQgcGFzcywgdGhlIGZpcnN0IHBhc3MgaXMgb25seSBhIGhv
cml6b250YWwgYWxwaGEgYmx1ci4KLSAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFk
b3cuY29sb3IgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3NoYWRvd0NvbG9y
Iik7Ci0gICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbnRlbnRUZXh0dXJl
ID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9jb250ZW50VGV4dHVyZSIpOwor
ICAgICAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb2xvciA9IG1fY29udGV4dC0+
Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93Q29sb3IiKTsKKyAgICAgICAg
ICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29udGVudFRleHR1cmUgPSBtX2NvbnRleHQt
PmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2NvbnRlbnRUZXh0dXJlIik7CiAgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTY1Niw5ICs2NTAsOSBAQCBT
dGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRp
b246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgIG1fZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNo
YWRlcjsKIH0KIAotUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IFN0YW5kYXJkRmls
dGVyUHJvZ3JhbTo6Y3JlYXRlKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1
bnNpZ25lZCBwYXNzKQorUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IFN0YW5kYXJk
RmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBGaWx0ZXJP
cGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKIHsKLSAgICBSZWZQ
dHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0gYWRvcHRSZWYobmV3IFN0YW5kYXJk
RmlsdGVyUHJvZ3JhbSh0eXBlLCBwYXNzKSk7CisgICAgUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJv
Z3JhbT4gcHJvZ3JhbSA9IGFkb3B0UmVmKG5ldyBTdGFuZGFyZEZpbHRlclByb2dyYW0oY29udGV4
dCwgdHlwZSwgcGFzcykpOwogICAgIGlmICghcHJvZ3JhbS0+bV9pZCkKICAgICAgICAgcmV0dXJu
IDA7CiAKQEAgLTY5NCwyMSArNjg4LDIxIEBAIHN0YXRpYyBmbG9hdCogZ2F1c3NpYW5LZXJuZWwo
KQogICAgIHJldHVybiBrZXJuZWw7CiB9CiAKLXZvaWQgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpw
cmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0aW9uLCB1bnNpZ25lZCBwYXNzLCBj
b25zdCBJbnRTaXplJiBzaXplLCBHTHVpbnQgY29udGVudFRleHR1cmUpCit2b2lkIFN0YW5kYXJk
RmlsdGVyUHJvZ3JhbTo6cHJlcGFyZShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwg
dW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRHVpbnQgY29udGVudFRleHR1
cmUpCiB7Ci0gICAgZ2xVc2VQcm9ncmFtKG1faWQpOworICAgIG1fY29udGV4dC0+dXNlUHJvZ3Jh
bShtX2lkKTsKICAgICBzd2l0Y2ggKG9wZXJhdGlvbi5nZXRPcGVyYXRpb25UeXBlKCkpIHsKICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpTRVBJQToKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6CiAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6Ci0gICAgICAgIGdsVW5pZm9ybTFmKG1fdW5p
Zm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKKyAgICAgICAgbV9jb250ZXh0
LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCwgc3RhdGljX2Nhc3Q8Y29uc3Qg
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgogICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpDT05UUkFTVDoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAg
Z2xVbmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCwgc3RhdGljX2Nhc3Q8Y29uc3Qg
QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50
KCkpOworICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuYW1v
dW50LCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0
aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpCTFVSOiB7CiAgICAgICAgIGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24m
IGJsdXIgPSBzdGF0aWNfY2FzdDxjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9u
KTsKQEAgLTcyMCw4ICs3MTQsOCBAQCB2b2lkIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6cHJlcGFy
ZShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwgdW5zaWduZWQgcAogICAgICAgICBl
bHNlCiAgICAgICAgICAgICByYWRpdXMuc2V0V2lkdGgoZmxvYXRWYWx1ZUZvckxlbmd0aChibHVy
LnN0ZERldmlhdGlvbigpLCBzaXplLndpZHRoKCkpIC8gc2l6ZS53aWR0aCgpKTsKIAotICAgICAg
ICBnbFVuaWZvcm0yZihtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5yYWRpdXMsIHJhZGl1cy53aWR0
aCgpLCByYWRpdXMuaGVpZ2h0KCkpOwotICAgICAgICBnbFVuaWZvcm0xZnYobV91bmlmb3JtTG9j
YXRpb25zLmJsdXIuZ2F1c3NpYW5LZXJuZWwsIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRILCBn
YXVzc2lhbktlcm5lbCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobV91bmlmb3Jt
TG9jYXRpb25zLmJsdXIucmFkaXVzLCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKTsK
KyAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLmdh
dXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJP
UF9TSEFET1c6IHsKQEAgLTcyOSwyMCArNzIzLDIwIEBAIHZvaWQgU3RhbmRhcmRGaWx0ZXJQcm9n
cmFtOjpwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0aW9uLCB1bnNpZ25lZCBw
CiAgICAgICAgIHN3aXRjaCAocGFzcykgewogICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAv
LyBGaXJzdCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBibHVyLgotICAgICAgICAgICAgZ2xVbmlmb3Jt
MmYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5vZmZzZXQsIGZsb2F0KHNoYWRvdy5sb2NhdGlv
bigpLngoKSkgLyBmbG9hdChzaXplLndpZHRoKCkpLCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS55
KCkpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICAgICAgZ2xVbmlmb3JtMWYobV91
bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkg
LyBmbG9hdChzaXplLndpZHRoKCkpKTsKLSAgICAgICAgICAgIGdsVW5pZm9ybTFmdihtX3VuaWZv
cm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9X
SURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0y
ZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93Lm9mZnNldCwgZmxvYXQoc2hhZG93LmxvY2F0aW9u
KCkueCgpKSAvIGZsb2F0KHNpemUud2lkdGgoKSksIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigpLnko
KSkgLyBmbG9hdChzaXplLmhlaWdodCgpKSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZv
cm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMsIHNoYWRvdy5zdGREZXZp
YXRpb24oKSAvIGZsb2F0KHNpemUud2lkdGgoKSkpOworICAgICAgICAgICAgbV9jb250ZXh0LT51
bmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwsIEdBVVNT
SUFOX0tFUk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogd2UgbmVl
ZCB0aGUgc2hhZG93IGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0dXJlIGZvciBjb21wb3NpdGlu
Zy4KLSAgICAgICAgICAgIGdsVW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1
clJhZGl1cywgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwot
ICAgICAgICAgICAgZ2xVbmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3Np
YW5LZXJuZWwsIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsK
LSAgICAgICAgICAgIGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSk7Ci0gICAgICAgICAgICBn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIGNvbnRlbnRUZXh0dXJlKTsKLSAgICAgICAgICAg
IGdsVW5pZm9ybTFpKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29udGVudFRleHR1cmUsIDEp
OworICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLnNo
YWRvdy5ibHVyUmFkaXVzLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLmhlaWdo
dCgpKSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobV91bmlmb3JtTG9jYXRp
b25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdh
dXNzaWFuS2VybmVsKCkpOworICAgICAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBjb250ZW50VGV4dHVyZSk7Cisg
ICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xaShtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93
LmNvbnRlbnRUZXh0dXJlLCAxKTsKICAgICAgICAgICAgIGZsb2F0IHIsIGcsIGIsIGE7CiAgICAg
ICAgICAgICBzaGFkb3cuY29sb3IoKS5nZXRSR0JBKHIsIGcsIGIsIGEpOwotICAgICAgICAgICAg
Z2xVbmlmb3JtNGYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb2xvciwgciwgZywgYiwgYSk7
CisgICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm00ZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hh
ZG93LmNvbG9yLCByLCBnLCBiLCBhKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwpAQCAtNzU5LDcgKzc1Myw3IEBAIFBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0
ZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyRm9yRmlsdGVy
CiAgICAgaW50IGtleSA9IGludCh0eXBlKSB8IChwYXNzIDw8IDE2KTsKICAgICBGaWx0ZXJNYXA6
Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9maWx0ZXJNYXAuZmluZChrZXkpOwogICAgIGlmIChpdGVy
YXRvciA9PSBtX2ZpbHRlck1hcC5lbmQoKSkgewotICAgICAgICBwcm9ncmFtID0gU3RhbmRhcmRG
aWx0ZXJQcm9ncmFtOjpjcmVhdGUodHlwZSwgcGFzcyk7CisgICAgICAgIHByb2dyYW0gPSBTdGFu
ZGFyZEZpbHRlclByb2dyYW06OmNyZWF0ZShtX2NvbnRleHQsIHR5cGUsIHBhc3MpOwogICAgICAg
ICBpZiAoIXByb2dyYW0pCiAgICAgICAgICAgICByZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIuaAppbmRleCA3ODU0OThlN2Y4YTM2MjdlYWIxMDY4NmJhMzZi
ZmZiM2UxMDkxNDU2Li5iZTQ1YzVkYWZlZmM2N2FlYTIxZmY4ZDViM2VjZTc0YmM2NDA1MWM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaApAQCAtMjQsOSArMjQsOSBA
QAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVS
KQogCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKICNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCiAjaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC00NCwzOSArNDQsNDAgQEAgY2xhc3MgVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI7CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHsKIHB1
YmxpYzoKLSAgICBHTHVpbnQgaWQoKSB7IHJldHVybiBtX2lkOyB9Ci0gICAgR0x1aW50IHZlcnRl
eEF0dHJpYigpIHsgcmV0dXJuIG1fdmVydGV4QXR0cmliOyB9CisgICAgUGxhdGZvcm0zRE9iamVj
dCBpZCgpIHsgcmV0dXJuIG1faWQ7IH0KKyAgICBHQzNEdWludCB2ZXJ0ZXhBdHRyaWIoKSB7IHJl
dHVybiBtX3ZlcnRleEF0dHJpYjsgfQogCi0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0o
Y29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRl
clNvdXJjZSk7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0
M0QqLCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50
U2hhZGVyU291cmNlKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgp
OwogCiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmUoZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFw
VGV4dHVyZSopIHsgfQotICAgIEdMaW50IG1hdHJpeExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9tYXRyaXhMb2NhdGlvbjsgfQotICAgIEdMaW50IGZsaXBMb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZmxpcExvY2F0aW9uOyB9Ci0gICAgR0xpbnQgdGV4dHVyZVNpemVMb2NhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fdGV4dHVyZVNpemVMb2NhdGlvbjsgfQotICAgIEdMaW50IHNvdXJjZVRl
eHR1cmVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOyB9
Ci0gICAgR0xpbnQgbWFza1RleHR1cmVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFza1Rl
eHR1cmVMb2NhdGlvbjsgfQotICAgIEdMaW50IG9wYWNpdHlMb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fb3BhY2l0eUxvY2F0aW9uOyB9CisgICAgR0MzRGludCBtYXRyaXhMb2NhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fbWF0cml4TG9jYXRpb247IH0KKyAgICBHQzNEaW50IGZsaXBMb2NhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZmxpcExvY2F0aW9uOyB9CisgICAgR0MzRGludCB0ZXh0dXJl
U2l6ZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlU2l6ZUxvY2F0aW9uOyB9Cisg
ICAgR0MzRGludCBzb3VyY2VUZXh0dXJlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NvdXJj
ZVRleHR1cmVMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgbWFza1RleHR1cmVMb2NhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fbWFza1RleHR1cmVMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgb3BhY2l0
eUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5TG9jYXRpb247IH0KIAotICAgIHN0
YXRpYyBib29sIGlzVmFsaWRVbmlmb3JtTG9jYXRpb24oR0xpbnQgbG9jYXRpb24pIHsgcmV0dXJu
IGxvY2F0aW9uID49IDA7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVW5pZm9ybUxvY2F0aW9u
KEdDM0RpbnQgbG9jYXRpb24pIHsgcmV0dXJuIGxvY2F0aW9uID49IDA7IH0KIAogcHJvdGVjdGVk
OgotICAgIHZvaWQgZ2V0VW5pZm9ybUxvY2F0aW9uKEdMaW50JiB2YXIsIGNvbnN0IGNoYXIqIG5h
bWUpOworICAgIHZvaWQgZ2V0VW5pZm9ybUxvY2F0aW9uKEdDM0RpbnQmIHZhciwgY29uc3QgY2hh
ciogbmFtZSk7CiAgICAgdm9pZCBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIHZpcnR1YWwgdm9p
ZCBpbml0aWFsaXplKCkgeyB9CiAgICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlKCkg
Y29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhTaGFkZXJTb3VyY2UuZGF0YSgpOyB9CiAgICAgY29uc3Qg
Y2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2ZyYWdtZW50U2hh
ZGVyU291cmNlLmRhdGEoKTsgfQogCi0gICAgR0x1aW50IG1faWQ7Ci0gICAgR0x1aW50IG1fdmVy
dGV4QXR0cmliOwotICAgIEdMdWludCBtX3ZlcnRleFNoYWRlcjsKLSAgICBHTHVpbnQgbV9mcmFn
bWVudFNoYWRlcjsKLSAgICBHTGludCBtX21hdHJpeExvY2F0aW9uOwotICAgIEdMaW50IG1fZmxp
cExvY2F0aW9uOwotICAgIEdMaW50IG1fdGV4dHVyZVNpemVMb2NhdGlvbjsKLSAgICBHTGludCBt
X3NvdXJjZVRleHR1cmVMb2NhdGlvbjsKLSAgICBHTGludCBtX29wYWNpdHlMb2NhdGlvbjsKLSAg
ICBHTGludCBtX21hc2tUZXh0dXJlTG9jYXRpb247CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1f
Y29udGV4dDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1faWQ7CisgICAgR0MzRHVpbnQgbV92ZXJ0
ZXhBdHRyaWI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZlcnRleFNoYWRlcjsKKyAgICBQbGF0
Zm9ybTNET2JqZWN0IG1fZnJhZ21lbnRTaGFkZXI7CisgICAgR0MzRGludCBtX21hdHJpeExvY2F0
aW9uOworICAgIEdDM0RpbnQgbV9mbGlwTG9jYXRpb247CisgICAgR0MzRGludCBtX3RleHR1cmVT
aXplTG9jYXRpb247CisgICAgR0MzRGludCBtX3NvdXJjZVRleHR1cmVMb2NhdGlvbjsKKyAgICBH
QzNEaW50IG1fb3BhY2l0eUxvY2F0aW9uOworICAgIEdDM0RpbnQgbV9tYXNrVGV4dHVyZUxvY2F0
aW9uOwogCiBwcml2YXRlOgogICAgIENTdHJpbmcgbV92ZXJ0ZXhTaGFkZXJTb3VyY2U7CkBAIC04
NywzMyArODgsMzYgQEAgcHJpdmF0ZToKIGNsYXNzIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbSA6IHB1
YmxpYyBSZWZDb3VudGVkPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gewogcHVibGljOgogICAgIHZp
cnR1YWwgflN0YW5kYXJkRmlsdGVyUHJvZ3JhbSgpOwotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJl
KGNvbnN0IEZpbHRlck9wZXJhdGlvbiYsIHVuc2lnbmVkIHBhc3MsIGNvbnN0IEludFNpemUmLCBH
THVpbnQgY29udGVudFRleHR1cmUpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0YW5kYXJkRmls
dGVyUHJvZ3JhbT4gY3JlYXRlKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgdW5zaWdu
ZWQgcGFzcyk7Ci0gICAgR0x1aW50IHZlcnRleEF0dHJpYigpIGNvbnN0IHsgcmV0dXJuIG1fdmVy
dGV4QXR0cmliOyB9Ci0gICAgR0x1aW50IHRleENvb3JkQXR0cmliKCkgY29uc3QgeyByZXR1cm4g
bV90ZXhDb29yZEF0dHJpYjsgfQotICAgIEdMdWludCB0ZXh0dXJlVW5pZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbjsgfQorICAgIHZpcnR1YWwgdm9pZCBwcmVw
YXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYsIHVuc2lnbmVkIHBhc3MsIGNvbnN0IEludFNpemUm
LCBHQzNEdWludCBjb250ZW50VGV4dHVyZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RhbmRh
cmRGaWx0ZXJQcm9ncmFtPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBGaWx0ZXJPcGVyYXRp
b246Ok9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIHBhc3MpOworICAgIEdDM0R1aW50IHZlcnRleEF0
dHJpYigpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4QXR0cmliOyB9CisgICAgR0MzRHVpbnQgdGV4
Q29vcmRBdHRyaWIoKSBjb25zdCB7IHJldHVybiBtX3RleENvb3JkQXR0cmliOyB9CisgICAgR0Mz
RHVpbnQgdGV4dHVyZVVuaWZvcm0oKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVVbmlmb3JtTG9j
YXRpb247IH0KK3Byb3RlY3RlZDoKKyAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0Owog
cHJpdmF0ZToKLSAgICBTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVy
YXRpb25UeXBlLCB1bnNpZ25lZCBwYXNzKTsKLSAgICBHTHVpbnQgbV9pZDsKLSAgICBHTHVpbnQg
bV92ZXJ0ZXhTaGFkZXI7Ci0gICAgR0x1aW50IG1fZnJhZ21lbnRTaGFkZXI7Ci0gICAgR0x1aW50
IG1fdmVydGV4QXR0cmliOwotICAgIEdMdWludCBtX3RleENvb3JkQXR0cmliOwotICAgIEdMdWlu
dCBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb247CisgICAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKCk7
CisgICAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiwgRmlsdGVyT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBwYXNzKTsKKyAgICBQbGF0Zm9ybTNET2Jq
ZWN0IG1faWQ7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZlcnRleFNoYWRlcjsKKyAgICBQbGF0
Zm9ybTNET2JqZWN0IG1fZnJhZ21lbnRTaGFkZXI7CisgICAgR0MzRHVpbnQgbV92ZXJ0ZXhBdHRy
aWI7CisgICAgR0MzRHVpbnQgbV90ZXhDb29yZEF0dHJpYjsKKyAgICBHQzNEdWludCBtX3RleHR1
cmVVbmlmb3JtTG9jYXRpb247CiAgICAgdW5pb24gewotICAgICAgICBHTHVpbnQgYW1vdW50Owor
ICAgICAgICBHQzNEdWludCBhbW91bnQ7CiAKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAg
IEdMdWludCByYWRpdXM7Ci0gICAgICAgICAgICBHTHVpbnQgZ2F1c3NpYW5LZXJuZWw7CisgICAg
ICAgICAgICBHQzNEdWludCByYWRpdXM7CisgICAgICAgICAgICBHQzNEdWludCBnYXVzc2lhbktl
cm5lbDsKICAgICAgICAgfSBibHVyOwogCiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBH
THVpbnQgYmx1clJhZGl1czsKLSAgICAgICAgICAgIEdMdWludCBjb2xvcjsKLSAgICAgICAgICAg
IEdMdWludCBvZmZzZXQ7Ci0gICAgICAgICAgICBHTHVpbnQgY29udGVudFRleHR1cmU7Ci0gICAg
ICAgICAgICBHTHVpbnQgZ2F1c3NpYW5LZXJuZWw7CisgICAgICAgICAgICBHQzNEdWludCBibHVy
UmFkaXVzOworICAgICAgICAgICAgR0MzRHVpbnQgY29sb3I7CisgICAgICAgICAgICBHQzNEdWlu
dCBvZmZzZXQ7CisgICAgICAgICAgICBHQzNEdWludCBjb250ZW50VGV4dHVyZTsKKyAgICAgICAg
ICAgIEdDM0R1aW50IGdhdXNzaWFuS2VybmVsOwogICAgICAgICB9IHNoYWRvdzsKICAgICB9IG1f
dW5pZm9ybUxvY2F0aW9uczsKIH07CkBAIC0xMjEsNzcgKzEyNSw4OSBAQCBwcml2YXRlOgogCiBj
bGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSA6IHB1YmxpYyBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU+IGNyZWF0ZShHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoY29udGV4dCkpOwogICAgIH0KIAog
cHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKEdyYXBoaWNz
Q29udGV4dDNEKik7Citwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2lt
cGxlKCk7CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUg
OiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZT4gY3JlYXRl
KCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RT
aW1wbGU+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxl
KCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtUmVjdFNpbXBsZShjb250ZXh0KSk7CiAgICAgfQogCitwcm90ZWN0ZWQ6CisgICAgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKEdyYXBoaWNzQ29udGV4dDNEKik7CiBwcml2
YXRlOgogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgpOwogfTsKIAog
Y2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayA6IHB1YmxpYyBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gY3JlYXRlKCkKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRN
YXNrPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1h
c2soKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1PcGFjaXR5QW5kTWFzayhjb250ZXh0KSk7CiAgICAgfQogCitwcm90ZWN0ZWQ6CisgICAg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayhHcmFwaGljc0NvbnRleHQz
RCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRN
YXNrKCk7CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5
QW5kTWFzayA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0
eUFuZE1hc2s+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soY29u
dGV4dCkpOwogICAgIH0KIAorcHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtUmVjdE9wYWNpdHlBbmRNYXNrKEdyYXBoaWNzQ29udGV4dDNEKik7CiBwcml2YXRlOgogICAg
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKCk7CiB9OwogCiBj
bGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IgOiBwdWJsaWMgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4gY3JlYXRlKCkKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IGNyZWF0ZShH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKCkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcihj
b250ZXh0KSk7CiAgICAgfQogCi0gICAgR0xpbnQgY29sb3JMb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fY29sb3JMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgY29sb3JMb2NhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fY29sb3JMb2NhdGlvbjsgfQogCitwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKEdyYXBoaWNzQ29udGV4dDNEKik7CiBwcml2YXRl
OgogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcigpOwotICAgIEdMaW50
IG1fY29sb3JMb2NhdGlvbjsKKyAgICBHQzNEaW50IG1fY29sb3JMb2NhdGlvbjsKIH07CiAKIGNs
YXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrIDogcHVibGlj
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaz4gY3JlYXRl
KCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlh
bGlhc2luZ05vTWFzaz4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFu
dGlhbGlhc2luZ05vTWFzaygpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayhjb250ZXh0KSk7CiAgICAgfQog
Ci0gICAgR0xpbnQgZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb29yZGluYXRlc0xvY2F0
aW9uKCkgeyByZXR1cm4gbV9leHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvcmRpbmF0ZXNM
b2NhdGlvbjsgfQotICAgIEdMaW50IGV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0
aW9uKCkgeyByZXR1cm4gbV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbjsg
fQorICAgIEdDM0RpbnQgZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb29yZGluYXRlc0xv
Y2F0aW9uKCkgeyByZXR1cm4gbV9leHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvcmRpbmF0
ZXNMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNl
TG9jYXRpb24oKSB7IHJldHVybiBtX2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0
aW9uOyB9CiAKK3Byb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlh
bGlhc2luZ05vTWFzayhHcmFwaGljc0NvbnRleHQzRCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaygpOwogCi0gICAgR0xpbnQgbV9l
eHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvcmRpbmF0ZXNMb2NhdGlvbjsKLSAgICBHTGlu
dCBtX2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uOworICAgIEdDM0RpbnQg
bV9leHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvcmRpbmF0ZXNMb2NhdGlvbjsKKyAgICBH
QzNEaW50IG1fZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb247CiB9OwogCiBj
bGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlciB7CkBAIC0yMDYsNyArMjIyLDggQEAgcHVi
bGljOgogICAgICAgICBTb2xpZENvbG9yCiAgICAgfTsKIAotICAgIFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyKCk7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKSB7IH07CisgICAg
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoR3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICB2aXJ0
dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpOwogCiAjaWYgRU5BQkxFKENTU19GSUxU
RVJTKQpAQCAtMjIxLDEyICsyMzgsMTIgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB0eXBlZGVm
IEhhc2hNYXA8U2hhZGVyVHlwZSwgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiwg
RGVmYXVsdEhhc2g8aW50Pjo6SGFzaCwgSGFzaFRyYWl0czxpbnQ+ID4gVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1NYXA7CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXAgbV90ZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250
ZXh0OwogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQs
IFJlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+ID4gRmlsdGVyTWFwOwogICAgIEZpbHRlck1h
cCBtX2ZpbHRlck1hcDsKICNlbmRpZgotCiB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154777</attachid>
            <date>2012-07-26 16:02:00 -0700</date>
            <delta_ts>2012-07-27 05:01:32 -0700</delta_ts>
            <desc>RenderToCurrentGLContext/GC3DQt</desc>
            <filename>bug-78672-20120726160148.patch</filename>
            <type>text/plain</type>
            <size>20849</size>
            <attacher name="Helder Correia">helder.correia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODgyNmYzMjk2YTVjZmNj
MTYyZDY1NGE1OTFjOGQ2NmIzNDRkMjIxNy4uOTZmZWI5YzQyMjY0NmZiMWJmZWJmMTc4NjdhNTNh
ZmIxNmE4YTBmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDEyLTA3LTI2ICBIZWxk
ZXIgQ29ycmVpYSAgPGhlbGRlci5jb3JyZWlhQG5va2lhLmNvbT4KKworICAgICAgICBbVGV4bWFw
XSBNb3ZlIFRleHR1cmVNYXBwZXJHTCB0byB1c2UgR3JhcGhpY3NDb250ZXh0M0QKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NjcyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IG9mIGEg
c2V2ZXJhbCBwYXRjaC1yZWZhY3RvcmluZy4KKworICAgICAgICBJbnRyb2R1Y2UgYWRkaXRpb25h
bCBsb2dpYyBpbiBHcmFwaGljc0NvbnRleHQzRFF0IHRvIHN1cHBvcnQgYQorICAgICAgICBuZXcg
UmVuZGVyVG9DdXJyZW50R0xDb250ZXh0IFJlbmRlclN0eWxlLiBUaGlzIGlzIG5lY2Vzc2FyeSB0
bworICAgICAgICB1c2UgR0MzRCBmb3Igb3RoZXIgdGhpbmdzIHRoYW4gV2ViR0wsIGxpa2UgVGV4
dHVyZU1hcHBlci4KKworICAgICAgICBUaGUgR0MzRCBjb25zdHJ1Y3RvciBub3cgYWNjZXB0cyBh
IFJlbmRlclN0eWxlIGluc3RlYWQgb2YgdGhlCisgICAgICAgIGJvb2xlYW4gcmVuZGVyRGlyZWN0
bHlUb0hvc3RXaW5kb3cgYW5kIHRodXMgbWltaWNzIGNyZWF0ZSgpJ3MKKyAgICAgICAgc2lnbmF0
dXJlLiBUaGlzIGhhcyBiZWVuIGNoYW5nZWQgZm9yIGFsbCBwb3J0cyBpbiB0aGlzIHBhdGNoLgor
CisgICAgICAgIEEgbmV3IEdDM0Q6OmNyZWF0ZVdyYXBwZXJGb3JDdXJyZW50R0xDb250ZXh0KCkg
YnVpbGRlciB3YXMKKyAgICAgICAgaW50cm9kdWNlZCB0byBiZXR0ZXIgYWJzdHJhY3QgdGhlIGdv
YWwgb2YgdXNpbmcgR0MzRCB3aXRoIHRoZQorICAgICAgICBjdXJyZW50IGNvbnRleHQuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLCByZWZhY3RvcmluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQz
REJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250
ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dDNEQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0
M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0
M0RDbHV0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4
dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RF
ZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVdyYXBwZXJG
b3JDdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlT2Zmc2NyZWVuQnVmZmVycyk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
aW5pdGlhbGl6ZUFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29u
dGV4dDNEKToKKwogMjAxMi0wNy0yMCAgRGF2aWQgR3JvZ2FuICA8ZGdyb2dhbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBJbmNsdWRlIGludFZlcnNpb24gd2hlbiBjb252ZXJ0
aW5nIGJldHdlZW4gV2ViQ29yZSBhbmQgV2ViS2l0IElEQk1ldGFkYXRhIHR5cGVzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApp
bmRleCA3NDMzZGY2MjZmNGNhYjJhY2M2Y2EwOThhNjI4MGQ0OGQ0OWEyYjE5Li42NzkyMWU5MGIz
NmI2ZmQxZTY1ODBkNTk0ZTBlNzAyZmI5ODQ4MjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKQEAgLTQ2Myw3ICs0NjMs
OCBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFJlbmRlclN0eWxlIHsKICAgICAgICAgUmVuZGVyT2Zm
c2NyZWVuLAotICAgICAgICBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdworICAgICAgICBSZW5k
ZXJEaXJlY3RseVRvSG9zdFdpbmRvdywKKyAgICAgICAgUmVuZGVyVG9DdXJyZW50R0xDb250ZXh0
CiAgICAgfTsKIAogICAgIGNsYXNzIENvbnRleHRMb3N0Q2FsbGJhY2sgewpAQCAtNDgyLDYgKzQ4
Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEVycm9yTWVzc2FnZUNhbGxiYWNrKFBhc3NPd25Q
dHI8RXJyb3JNZXNzYWdlQ2FsbGJhY2s+KTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBjcmVhdGUoQXR0cmlidXRlcywgSG9zdFdpbmRvdyosIFJlbmRlclN0eWxl
ID0gUmVuZGVyT2Zmc2NyZWVuKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY3JlYXRlV3JhcHBlckZvckN1cnJlbnRHTENvbnRleHQoKTsKICAgICB+R3JhcGhpY3ND
b250ZXh0M0QoKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTg2NSw3ICs4NjcsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHVuc2lnbmVkIGdldENoYW5uZWxCaXRzQnlGb3JtYXQoR0MzRGVudW0p
OwogCiAgIHByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QoQXR0cmlidXRlcyBhdHRycywg
SG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7
CisgICAgR3JhcGhpY3NDb250ZXh0M0QoQXR0cmlidXRlcywgSG9zdFdpbmRvdyosIFJlbmRlclN0
eWxlID0gUmVuZGVyT2Zmc2NyZWVuKTsKIAogICAgIC8vIEVhY2ggcGxhdGZvcm0gbXVzdCBwcm92
aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kLgogICAgIC8vCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzQ29u
dGV4dDNEQmxhY2tCZXJyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4dDNEQmxhY2tCZXJyeS5jcHAKaW5kZXggZGQ0ZTNmNGM4
NWE4NjM0NTE5YzNmZTJjMDNmZTNhY2NjMDUzYzhhNy4uOWNiMjRmOWU0MzA2MDY4MzQxNmY3OThh
YjdjMzMwODgwNWM0ZTVmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJsYWNrQmVycnkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0
M0RCbGFja0JlcnJ5LmNwcApAQCAtNDcsMTAgKzQ3LDEwIEBAIFBhc3NSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoQXR0cmlidXRlcyBhdHRyaWJzLCBI
b3N0CiAgICAgaWYgKHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQog
ICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250
ZXh0M0QoYXR0cmlicywgaG9zdFdpbmRvdywgZmFsc2UpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJpYnMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSk7
CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRl
eHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyosIGJvb2wgcmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3cpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRl
eHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiAgICAgOiBtX2N1cnJlbnRXaWR0aCgwKQog
ICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCiAgICAgLCBtX2NvbnRleHQoQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkdyYXBoaWNzOjpjcmVhdGVXZWJHTENvbnRleHQoKSkKQEAgLTY2LDcgKzY2LDcgQEAg
R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpB
dHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICAsIG1fYm91bmRUZXh0dXJlMCgwKQogICAgICwg
bV9pc0ltYWdpbmF0aW9uSGFyZHdhcmUoMCkKIHsKLSAgICBpZiAoIXJlbmRlckRpcmVjdGx5VG9I
b3N0V2luZG93KSB7CisgICAgaWYgKHJlbmRlclN0eWxlICE9IFJlbmRlckRpcmVjdGx5VG9Ib3N0
V2luZG93KSB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgICAgICBtX2Nv
bXBvc2l0aW5nTGF5ZXIgPSBXZWJHTExheWVyV2ViS2l0VGhyZWFkOjpjcmVhdGUoKTsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0M0RDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAppbmRleCA2MmRhMWExNmM5MTFiNDA0
YWNhMDM3NTM0MTY3M2YyNzY4MTkyNWY2Li43MDNiM2RjNjlkMjU2NGJmYTM2ZWNmZWFhMzNiNTFm
MTY3NzNkZDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcApAQCAtNjAsMTEg
KzYwLDExIEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpCiAgICAgaWYgKCFzdWNjZXNzKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9
IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRyaWJ1dGVzLCBob3N0V2luZG93LCBm
YWxzZSkpOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVm
KG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRyaWJ1dGVzLCBob3N0V2luZG93LCByZW5kZXJTdHls
ZSkpOwogICAgIHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0
M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJp
YnV0ZXMsIEhvc3RXaW5kb3cqLCBib29sKQorR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29u
dGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5k
b3cqLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUpCiAgICAgOiBtX2N1cnJlbnRXaWR0
aCgwKQogICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCiAgICAgLCBtX2F0dHJzKGF0dHJpYnV0ZXMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dy
YXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHAKaW5kZXggNGI0YjBlMzlk
YmFlNTE2M2EwYTE1MTkxNzAxZWU4MjJjZGExMWMwNy4uYWJmYmQ0N2U2YWUzMjI5MDg4YTM4M2Iw
MzRlNmY5MTdlMzRjOGJlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVy
LmNwcApAQCAtNDIsMTEgKzQyLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBH
cmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiB7Ci0gICAgUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4
dDNEKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3csIGZhbHNlKSk7CisgICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJp
YnV0ZXMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSk7CiAgICAgcmV0dXJuIGNvbnRleHQucmVs
ZWFzZSgpOwogfQogCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dywgYm9vbCkKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBH
cmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCmluZGV4IGVmZTFhMTJlMmMy
NjVmMGZhYTllOGRlNDE5NjQ5OTk2NTJhZWVhMWEuLjcyMWQ3YzdiZWE1NmUxODk5MGE0MTNmODE4
NWYyYWZlN2Y2NTk5MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcApAQCAtMzYsMTIgKzM2
LDEyIEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpCiAgICAgaWYgKCFpbnRlcm5hbCkKICAgICAg
ICAgcmV0dXJuIDA7CiAKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBh
ZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3csIHJlbmRlckRp
cmVjdGx5VG9FdmFzR0xPYmplY3QpKTsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3cs
IHJlbmRlclN0eWxlKSk7CiAgICAgY29udGV4dC0+bV9wcml2YXRlID0gaW50ZXJuYWwucmVsZWFz
ZSgpOwogICAgIHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0
M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJz
LCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93
KQorR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRl
eHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiAgICAgOiBtX2N1cnJlbnRXaWR0aCgwKQog
ICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0KaW5kZXgg
ZDA0MmM2NjBjZjMwMmE1NjlmMGMwZjllNDVmNmVhOTM2ZmI0YjM4NS4uMDBlODMxMzUwZTQ0YmYw
M2NiMGJjOGJkMmQ5MmQwYjE3NDExMGFlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQpAQCAt
OTgsMTEgKzk4LDExIEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29u
dGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpCiAgICAgLy8gVGhpcyBpbXBs
ZW1lbnRhdGlvbiBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IHJlbmRlcmluZyBkaXJlY3RseSB0
byB0aGUgSG9zdFdpbmRvdy4KICAgICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3cpCiAgICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRycywgaG9z
dFdpbmRvdywgZmFsc2UpKTsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQg
PSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3csIHJlbmRl
clN0eWxlKSk7CiAgICAgcmV0dXJuIGNvbnRleHQtPm1fY29udGV4dE9iaiA/IGNvbnRleHQucmVs
ZWFzZSgpIDogMDsKIH0KIAotR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93
LCBib29sKQorR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29u
dGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGlj
c0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiAgICAgOiBtX2N1cnJlbnRXaWR0
aCgwKQogICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCiAgICAgLCBtX2NvbnRleHRPYmooMCkKQEAg
LTEyMiw2ICsxMjIsNyBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQogICAgICwgbV9wcml2YXRl
KGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUodGhpcykpKQogewogICAgIFVO
VVNFRF9QQVJBTShob3N0V2luZG93KTsKKyAgICBVTlVTRURfUEFSQU0ocmVuZGVyU3R5bGUpOwog
CiAgICAgVmVjdG9yPENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPiBhdHRyaWJzOwogICAgIENHTFBp
eGVsRm9ybWF0T2JqIHBpeGVsRm9ybWF0T2JqID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1v
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0xDb21tb24uY3BwCmluZGV4IGE0ZDFlYjRjZDkzYzQ3NjMzNmMwMmY2MTNi
ZmM2NTk0NGQyODZjYjguLjg3MjI4Y2JhMDIwYjJkMzA2YTBjZmMwNWUxM2IwYWIwZGIyMjc0M2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApAQCAt
NzAsNiArNzAsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlV3JhcHBlckZvckN1cnJlbnRH
TENvbnRleHQoKQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFk
b3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChBdHRyaWJ1dGVzKCksIDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpKTsKKyAgICByZXR1cm4gY29udGV4dC0+
bV9wcml2YXRlID8gY29udGV4dC5yZWxlYXNlKCkgOiAwOworfQorCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5j
aWxFeHRlbnNpb24pCiB7CiAgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5z
aW9ucygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAppbmRleCA4OTVmNzY2ODgwMzllODFmMmY3MGJm
YWQ4MDA1ZjA3N2JkZTUxZDE4Li45ODU2NTM1OTdjOTE4MGIwM2M5ZjliNGE4YjJiODQ5YzcyZTkw
NGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAtNjMsNyArNjMsNyBAQCBjbGFzcyBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGUKICNlbmRpZgogewogcHVibGljOgotICAgIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCosIEhvc3RXaW5kb3cqKTsKKyAgICBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBIb3N0V2luZG93KiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlKTsKICAgICB+R3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKCk7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC03Nyw2ICs3Nyw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIGJsaXRNdWx0aXNhbXBsZUZyYW1lYnVmZmVyKCkgY29uc3Q7
CiAgICAgdm9pZCBibGl0TXVsdGlzYW1wbGVGcmFtZWJ1ZmZlckFuZFJlc3RvcmVDb250ZXh0KCkg
Y29uc3Q7CiAgICAgYm9vbCBtYWtlQ3VycmVudElmTmVlZGVkKCkgY29uc3Q7CisgICAgdm9pZCBj
cmVhdGVPZmZzY3JlZW5CdWZmZXJzKCk7CisgICAgdm9pZCBpbml0aWFsaXplQU5HTEUoKTsKICAg
ICB2b2lkIGNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMoY29uc3QgSW50U2l6ZSYpOwogCiAgICAgR3Jh
cGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKQEAgLTEwNiw3ICsxMDgsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQogfQogI2VuZGlmCiAKLUdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LCBIb3N0V2luZG93KiBob3N0V2luZG93KQorR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJT
dHlsZSByZW5kZXJTdHlsZSkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9ob3N0
V2luZG93KGhvc3RXaW5kb3cpCiAgICAgLCBtX3N1cmZhY2UoMCkKQEAgLTEyMyw2ICsxMjUsMTcg
QEAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAg
IGlmIChyZW5kZXJTdHlsZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyVG9DdXJyZW50R0xD
b250ZXh0KSB7CisjaWYgSEFWRShRVDUpCisgICAgICAgIG1fcGxhdGZvcm1Db250ZXh0ID0gUU9w
ZW5HTENvbnRleHQ6OmN1cnJlbnRDb250ZXh0KCk7CisgICAgICAgIG1fc3VyZmFjZSA9IG1fcGxh
dGZvcm1Db250ZXh0LT5zdXJmYWNlKCk7CisjZWxzZQorICAgICAgICBtX3BsYXRmb3JtQ29udGV4
dCA9IGNvbnN0X2Nhc3Q8UUdMQ29udGV4dCo+KFFHTENvbnRleHQ6OmN1cnJlbnRDb250ZXh0KCkp
OworICAgICAgICBtX3N1cmZhY2UgPSBzdGF0aWNfY2FzdDxRR0xXaWRnZXQqPihtX3BsYXRmb3Jt
Q29udGV4dC0+ZGV2aWNlKCkpOworI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgICB9CisKICNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKICAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byBjcmVh
dGUgYSBRT3BlbkdMQ29udGV4dCB3aXRob3V0IGNyZWF0aW5nIGEgUVdpbmRvdyBhdCBhbGwuCiAg
ICAgLy8gV2UgbmVlZCB0byBjcmVhdGUgYSBzdXJmYWNlIGluIG9yZGVyIHRvIGNyZWF0ZSBhIFFP
cGVuR0xDb250ZXh0IGFuZCBtYWtlIGl0IGN1cnJlbnQuCkBAIC0yOTYsNiArMzA5LDU5IEBAIGJv
b2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlQ3VycmVudElmTmVlZGVkKCkgY29uc3QK
ICNlbmRpZgogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlT2Zmc2Ny
ZWVuQnVmZmVycygpCit7CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoLyogY291bnQgKi8gMSwgJm1f
Y29udGV4dC0+bV9mYm8pOworCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb250ZXh0LT5tX3Rl
eHR1cmUpOworICAgIGdsQmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IG1fY29udGV4dC0+bV90ZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIs
IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyZihHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJ
TFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9X
UkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFt
ZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGds
QmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOworCisgICAgLy8g
Q3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgorICAgIGlmIChtX2NvbnRleHQtPm1fYXR0cnMuYW50
aWFsaWFzKSB7CisgICAgICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2NvbnRleHQtPm1fbXVs
dGlzYW1wbGVGQk8pOworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIG1fY29udGV4dC0+bV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIG1f
Y29udGV4dC0+bV9ib3VuZEZCTyA9IG1fY29udGV4dC0+bV9tdWx0aXNhbXBsZUZCTzsKKyAgICAg
ICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2NvbnRleHQtPm1fbXVsdGlzYW1wbGVDb2xvckJ1
ZmZlcik7CisgICAgICAgIGlmIChtX2NvbnRleHQtPm1fYXR0cnMuc3RlbmNpbCB8fCBtX2NvbnRl
eHQtPm1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1f
Y29udGV4dC0+bV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgorICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fY29udGV4dC0+bV9mYm8pOworICAgICAg
ICBtX2NvbnRleHQtPm1fYm91bmRGQk8gPSBtX2NvbnRleHQtPm1fZmJvOworI2lmIFVTRShPUEVO
R0xfRVNfMikKKyAgICAgICAgaWYgKG1fY29udGV4dC0+bV9hdHRycy5kZXB0aCkKKyAgICAgICAg
ICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9jb250ZXh0LT5tX2RlcHRoQnVmZmVyKTsKKyAg
ICAgICAgaWYgKG1fY29udGV4dC0+bV9hdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgZ2xHZW5S
ZW5kZXJidWZmZXJzKDEsICZtX2NvbnRleHQtPm1fc3RlbmNpbEJ1ZmZlcik7CisjZW5kaWYKKyAg
ICAgICAgaWYgKG1fY29udGV4dC0+bV9hdHRycy5zdGVuY2lsIHx8IG1fY29udGV4dC0+bV9hdHRy
cy5kZXB0aCkKKyAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9jb250ZXh0LT5t
X2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6aW5pdGlhbGl6ZUFOR0xFKCkKK3sKKyAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5H
TEVSZXNvdXJjZXM7CisgICAgU2hJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJjZXMp
OworCisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZF
UlRFWF9BVFRSSUJTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7CisgICAgbV9j
b250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JN
X1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7CisgICAg
bV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVD
VE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKKyAgICBtX2NvbnRleHQt
PmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0Vf
VU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAg
bV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RF
WFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFn
ZVVuaXRzKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVu
aXRzKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
RlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlm
b3JtVmVjdG9ycyk7CisKKyAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBFUy4KKyAg
ICBBTkdMRVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7CisgICAgbV9jb250ZXh0LT5tX2Nv
bXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7Cit9CisKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc1N1cmZhY2VzKGNvbnN0IEludFNpemUmIHNp
emUpCiB7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCkBAIC0zMTQsMTEgKzM4MCwxMSBAQCBQ
YXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaQogICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lc24n
dCBjdXJyZW50bHkgc3VwcG9ydCByZW5kZXJpbmcgZGlyZWN0bHkgdG8gdGhlIEhvc3RXaW5kb3cu
CiAgICAgaWYgKHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQogICAg
ICAgICByZXR1cm4gMDsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBh
ZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3csIGZhbHNlKSk7
CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdy
YXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkpOwogICAgIHJl
dHVybiBjb250ZXh0LT5tX3ByaXZhdGUgPyBjb250ZXh0LnJlbGVhc2UoKSA6IDA7CiB9CiAKLUdy
YXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0
cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCkKK0dyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0
eWxlIHJlbmRlclN0eWxlKQogICAgIDogbV9jdXJyZW50V2lkdGgoMCkKICAgICAsIG1fY3VycmVu
dEhlaWdodCgwKQogICAgICwgbV9jb21waWxlcihpc0dMRVMyQ29tcGxpYW50KCkgPyBTSF9FU1NM
X09VVFBVVCA6IFNIX0dMU0xfT1VUUFVUKQpAQCAtMzM5LDcgKzQwNSw3IEBAIEdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRycywgSG9zdFdpCiAgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2Ft
cGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCiAgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIo
MCkKLSAgICAsIG1fcHJpdmF0ZShhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
KHRoaXMsIGhvc3RXaW5kb3cpKSkKKyAgICAsIG1fcHJpdmF0ZShhZG9wdFB0cihuZXcgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlKHRoaXMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSkpCiB7CiAg
ICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CiAKQEAgLTM2MCw1NCArNDI2LDEwIEBAIEdyYXBoaWNz
Q29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBhdHRycywgSG9zdFdpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBDcmVhdGUg
YnVmZmVycyBmb3IgdGhlIGNhbnZhcyBGQk8uCi0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoLyogY291
bnQgKi8gMSwgJm1fZmJvKTsKLQotICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0g
ICAgZ2xCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJl
KTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkxJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4
dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIGdsQmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOworICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJP
ZmZzY3JlZW4pCisgICAgICAgIG1fcHJpdmF0ZS0+Y3JlYXRlT2Zmc2NyZWVuQnVmZmVycygpOwog
Ci0gICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgotICAgIGlmIChtX2F0dHJzLmFudGlh
bGlhcykgewotICAgICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7
Ci0gICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIG1fYm91bmRGQk8gPSBtX211bHRpc2FtcGxl
RkJPOwotICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1
ZmZlcik7Ci0gICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKLSAg
ICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNp
bEJ1ZmZlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgotICAg
ICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1f
ZmJvKTsKLSAgICAgICAgbV9ib3VuZEZCTyA9IG1fZmJvOwotI2lmIFVTRShPUEVOR0xfRVNfMikK
LSAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZl
cnMoMSwgJm1fZGVwdGhCdWZmZXIpOwotICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQotICAg
ICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOwotI2VuZGlm
Ci0gICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKLSAgICAgICAg
ICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIH0K
LQotICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9uLgotICAgIFNoQnVpbHRJblJlc291cmNlcyBB
TkdMRVJlc291cmNlczsKLSAgICBTaEluaXRCdWlsdEluUmVzb3VyY2VzKCZBTkdMRVJlc291cmNl
cyk7Ci0KLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRS
SUJTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7Ci0gICAgZ2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNv
dXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfVkFSWUlOR19WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmFyeWlu
Z1ZlY3RvcnMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVY
X1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1h
Z2VVbml0cyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5F
RF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJl
SW1hZ2VVbml0cyk7IAotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVY
VFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsK
LSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1f
VkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOwotCi0g
ICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVuR0wgRVMuCi0gICAgQU5HTEVSZXNvdXJjZXMu
TWF4RHJhd0J1ZmZlcnMgPSAxOwotICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVz
b3VyY2VzKTsKKyAgICBtX3ByaXZhdGUtPmluaXRpYWxpemVBTkdMRSgpOwogCiAjaWYgIVVTRShP
UEVOR0xfRVNfMikKICAgICBnbEVuYWJsZShHTF9QT0lOVF9TUFJJVEUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154782</attachid>
            <date>2012-07-26 16:13:17 -0700</date>
            <delta_ts>2012-08-12 14:57:01 -0700</delta_ts>
            <desc>texImage2DDirect</desc>
            <filename>bug-78672-20120726161306.patch</filename>
            <type>text/plain</type>
            <size>5532</size>
            <attacher name="Helder Correia">helder.correia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTZmZWI5YzQyMjY0NmZi
MWJmZWJmMTc4NjdhNTNhZmIxNmE4YTBmNC4uZGViYzk2Y2QxOTVlOTYzODEzMzhiZGNhZTY3NmUz
NjVhMjZhMjkxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtNyw2ICs3LDM0IEBACiAKICAgICAgICAgVGhpcyBp
cyBwYXJ0IG9mIGEgc2V2ZXJhbCBwYXRjaC1yZWZhY3RvcmluZy4KIAorICAgICAgICBJbnRyb2R1
Y2luZyBhIG5ldyBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRERpcmVjdCgpIHRvIGFsbG93
CisgICAgICAgIGluaXRpYWxpemF0aW9uIG9mIHRleHR1cmVzIHdpdGhvdXQgYWxsb2NhdGlvbi4g
VGhlIGV4aXN0aW5nCisgICAgICAgIHRleHRJbWFnZTJEKCkgcmVmdXNlcyBhIG51bGwgcGl4ZWwg
YnVmZmVyLCBhbmQKKyAgICAgICAgdGV4SW1hZ2UyRFJlc291cmNlU2FmZSgpIGFsbG93cyBpdCBi
dXQgcGVyZm9ybXMgbWVtb3J5CisgICAgICAgIGFsbG9jYXRpb24gYW5kIHplcm9lcyB0aGUgYml0
cy4gVGhpcyB3YXMgbm90IGZhc3QgZW5vdWdoIGZvcgorICAgICAgICBCaXRtYXBUZXh0dXJlR0wg
ZnJlcXVlbnQgc2V0dGluZyB1cC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHJlZmFjdG9yaW5n
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAg
ICAgICAgKEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRERpcmVjdCk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0xFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4
SW1hZ2UyRCk6CisKKzIwMTItMDctMjYgIEhlbGRlciBDb3JyZWlhICA8aGVsZGVyLmNvcnJlaWFA
bm9raWEuY29tPgorCisgICAgICAgIFtUZXhtYXBdIE1vdmUgVGV4dHVyZU1hcHBlckdMIHRvIHVz
ZSBHcmFwaGljc0NvbnRleHQzRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Nzg2NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIGlzIHBhcnQgb2YgYSBzZXZlcmFsIHBhdGNoLXJlZmFjdG9yaW5nLgor
CiAgICAgICAgIEludHJvZHVjZSBhZGRpdGlvbmFsIGxvZ2ljIGluIEdyYXBoaWNzQ29udGV4dDNE
UXQgdG8gc3VwcG9ydCBhCiAgICAgICAgIG5ldyBSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQgUmVu
ZGVyU3R5bGUuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvCiAgICAgICAgIHVzZSBHQzNEIGZvciBvdGhl
ciB0aGluZ3MgdGhhbiBXZWJHTCwgbGlrZSBUZXh0dXJlTWFwcGVyLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggNjc5
MjFlOTBiMzZiNmZkMWU2NTgwZDU5NGUwZTcwMmZiOTg0ODI3Yi4uMjBmOGY1MDQ2OTRmNWJkZDE4
NDM4OGFkNGJlOWY0MmNjNWIxMDZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC01MzEsNiArNTMxLDkgQEAgcHVi
bGljOgogICAgIHZvaWQgcHJlcGFyZVRleHR1cmUoKTsKICNlbmRpZgogCisgICAgLy8gRXF1aXZh
bGVudCB0byA6OmdsVGV4SW1hZ2UyRCgpLiBBbGxvd3MgcGl4ZWxzPT0wIHdpdGggbm8gYWxsb2Nh
dGlvbi4KKyAgICB2b2lkIHRleEltYWdlMkREaXJlY3QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBjb25zdCB2b2lkKiBwaXhlbHMpOworCiAgICAgLy8gSGVscGVyIHRvIHRleEltYWdlMkQgd2l0
aCBwaXhlbD09MCBjYXNlOiBwaXhlbHMgYXJlIGluaXRpYWxpemVkIHRvIDAuCiAgICAgLy8gUmV0
dXJuIHRydWUgaWYgbm8gR0wgZXJyb3IgaXMgc3ludGhlc2l6ZWQuCiAgICAgLy8gQnkgZGVmYXVs
dCwgYWxpZ25tZW50IGlzIDQsIHRoZSBPcGVuR0wgZGVmYXVsdCBzZXR0aW5nLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKaW5kZXggZmQ0NTAxNDFjNzRkZGEzYjQ5ZTg5NTc4
NTljYmEyYjkwYTgzN2Y1Mi4uOThlMTE0NWIzZGIyNGU1MWQ3Yjc1ZmQwNjcwOGZmYWUyNTZhZWIx
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCkBAIC0yNTYsNyArMjU2
LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisKICAgICBHQzNEZW51bSBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IGlu
dGVybmFsZm9ybWF0OwogICAgIGlmICh0eXBlID09IEdMX0ZMT0FUKSB7CiAgICAgICAgIGlmIChm
b3JtYXQgPT0gR0xfUkdCQSkKQEAgLTI2NSw3ICsyNjUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4
dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZQogICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9SR0IzMkZfQVJCOwog
ICAgIH0KIAotICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIG9wZW5HTEludGVybmFs
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAg
ICB0ZXhJbWFnZTJERGlyZWN0KHRhcmdldCwgbGV2ZWwsIG9wZW5HTEludGVybmFsRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5j
cHAKaW5kZXggODcyMjhjYmEwMjBiMmQzMDZhMGNmYzA1ZTEzYjBhYjBkYjIyNzQzYS4uODM1OTdm
ZjFhZjgwZDA3ZWE1MWUwMjk4YjFjYTM5NDQ4MDhmMTRiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29t
bW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCkBAIC0xMzg4LDYgKzEzODgsMTIgQEAgYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKCkgY29uc3QKICAgICByZXR1cm4g
bV9sYXllckNvbXBvc2l0ZWQ7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdl
MkREaXJlY3QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
ciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBl
LCBwaXhlbHMpOworfQorCiB9CiAKICNlbmRpZiAvLyBVU0UoM0RfR1JBUEhJQ1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKaW5kZXggNzlkZGNiYmZkOWE0YjU1ZWM4
MjZlNDFiNTk1ZWVmODRlNjRkOWQwMy4uNTI4MWVjZmMzZTRlY2ZiOTdjMDczMzg5OWQ3NDRmZjVj
YTA5ZjI2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcApAQCAt
MzEsNiArMzEsNyBAQAogI2lmIFVTRSgzRF9HUkFQSElDUykKIAogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCisKICNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgogI2luY2x1
ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCkBAIC0yMzAsOCArMjMxLDggQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJ
RF9WQUxVRSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworCisgICAg
dGV4SW1hZ2UyRERpcmVjdCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAK
</data>
<flag name="review"
          id="164110"
          type_id="1"
          status="+"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154783</attachid>
            <date>2012-07-26 16:15:14 -0700</date>
            <delta_ts>2012-07-26 16:42:48 -0700</delta_ts>
            <desc>TextureMapperGL</desc>
            <filename>bug-78672-20120726161503.patch</filename>
            <type>text/plain</type>
            <size>96152</size>
            <attacher name="Helder Correia">helder.correia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGViYzk2Y2QxOTVlOTYz
ODEzMzhiZGNhZTY3NmUzNjVhMjZhMjkxZC4uNGRhNjFiYzY2ZTM2YmJiOWM3YzViZmJiYmNhNGM4
NTllM2FhOTg1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMyw2ICszLDEzMCBAQAogICAgICAgICBbVGV4bWFw
XSBNb3ZlIFRleHR1cmVNYXBwZXJHTCB0byB1c2UgR3JhcGhpY3NDb250ZXh0M0QKICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NjcyCiAKKyAgICAgICAg
VGV4dHVyZU1hcHBlckdMIChUTUdMKSBpbmNsdWRlcyBkaXJlY3QgR0wgY2FsbHMgYW5kCisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dDNEIChHQzNEKSBvZmZlcnMgbWFueSBjb252ZW5pZW5jZXMgb3Zl
ciB0aGUKKyAgICAgICAgZm9ybWVyIGFwcHJvYWNoOiB1c2luZyBleGlzdGluZyBDU1Mgc2hhZGVy
IGNvZGUsIEFOR0xFIGZvcgorICAgICAgICBzaGFkZXIgY29tcGlsYXRpb24sIHJldXNpbmcgV2Vi
Q29yZTo6VGV4dHVyZSwgaGF2aW5nIHNoYWRlcnMgYW5kCisgICAgICAgIHRleHR1cmVzIHRoYXQg
Y2FuIGRlbGV0ZSB0aGVtc2VsdmVzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGUg
YmFja2VuZCBvZiBUTUdMIHRvIEdDM0QuIEl0IHdhcyBpbml0aWFsbHkKKyAgICAgICAgdGhvdWdo
dCB0byBpbnRyb2R1Y2UgYSBuZXcgYmFja2VuZCAoc2F5LCBUZXh0dXJlTWFwcGVyR0MzRCksIGJ1
dAorICAgICAgICBpbiB0aGUgZW5kIGl0IHdhcyBhZ3JlZWQgdG8gY29uc29saWRhdGUgaXQgaW5z
aWRlIFRNR0wgaW5zdGVhZCwKKyAgICAgICAgYXMgYW4gYWRkaXRpb25hbCBUZXh0dXJlTWFwcGVy
IHN1YmNsYXNzIHdvdWxkIGdldCBzdGFsZSB2ZXJ5CisgICAgICAgIHF1aWNrbHkuCisKKyAgICAg
ICAgQSBHQzNEIG9iamVjdCBpcyBjcmVhdGVkIGJ5IFRNR0wgd2l0aCB0aGUgbmV3bHkgaW50cm9k
dWNlZAorICAgICAgICBidWlsZGVyIGNyZWF0ZVdyYXBwZXJGb3JDdXJyZW50R0xDb250ZXh0KCks
IHdoaWNoIGluIHR1cm4gdXNlcworICAgICAgICB0aGUgbmV3IFJlbmRlclRvQ3VycmVudEdMQ29u
dGV4dCBmbGFnIHVuZGVybmVhdGguCisKKyAgICAgICAgVE1HTCdzIGRlcGVuZGVuY3kgb24gT3Bl
bkdMU2hpbXMuaCB3YXMgY29tcGxldGVseSByZW1vdmVkLgorICAgICAgICBIb3dldmVyLCBHQzNE
IGRvZXMgbm90IG1hcCBldmVyeSBzaW5nbGUgR0wgY29uc3RhbnQuIFRodXMsIGl0J3MKKyAgICAg
ICAgaW1wb3J0YW50IHRvIGRvY3VtZW50IHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAtIEdM
X0ZBTFNFIHdhcyBtYXBwZWQgdG8gZmFsc2UuCisgICAgICAgICAgICAtIEdMX1VOUEFDS19ST1df
TEVOR1RILCBHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsCisgICAgICAgICAgICBHTF9VTlBBQ0tfU0tJ
UF9ST1dTLCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIGFuZAorICAgICAgICAgICAgR0xfVU5T
SUdORURfSU5UXzhfOF84XzhfUkVWIHdlcmUgbG9jYWxseSBkZWZpbmVkIGluIFRNR0wuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLCByZWZhY3RvcmluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoU2hhcmVkR0xEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6
Y3VycmVudFNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xE
YXRhOjpTaGFyZWRHTERhdGE6OlNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0xEYXRhOjpzaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMRGF0YTo6VGV4dHVyZU1hcHBlckdMRGF0YSk6CisgICAgICAgIChUZXh0dXJlTWFw
cGVyR0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnNjaXNzb3JDbGlwKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjphcHBseSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjppbml0aWFsaXplU3RlbmNpbCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjplbmRQYWludGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OmRyYXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6
ZHJhd0JvcmRlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVSZWN0YW5nbGVBUkIpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjp2aWV3cG9y
dE1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJl
V2l0aEFudGlhbGlhc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRy
YXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0
dXJlR0w6OmRpZFJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6dXBk
YXRlQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3Rmls
dGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjppbml0aWFsaXplU3Rl
bmNpbCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmNsZWFySWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpjcmVhdGVGYm9JZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmJpbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwVGV4dHVyZUdMOjp+Qml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJHTDo6YmluZERlZmF1bHRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJHTDo6YmVnaW5TY2lzc29yQ2xpcCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OmVuZENsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpj
cmVhdGVUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmdyYXBoaWNz
Q29udGV4dDNEKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChDbGlwU3Rh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjp0ZXh0dXJlVGFyZ2V0KToK
KyAgICAgICAgKEJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0
dXJlR0w6OkJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjppbml0aWFsaXplUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1T
aW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1Tb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2lt
cGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0
eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1h
c2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNr
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp+U3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJv
Z3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJk
RmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVy
UHJvZ3JhbTo6cHJlcGFyZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6Z2V0U2hhZGVyRm9yRmlsdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6dmVydGV4QXR0cmliKToKKyAgICAgICAgKFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjptYXRyaXhMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6ZmxpcExvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp0ZXh0dXJlU2l6ZUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzb3VyY2VUZXh0dXJlTG9jYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Om1hc2tUZXh0
dXJlTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06Om9wYWNpdHlMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChTdGFuZGFyZEZp
bHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp2
ZXJ0ZXhBdHRyaWIpOgorICAgICAgICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp0
ZXhDb29yZEF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dyYW06
OnRleHR1cmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU2ltcGxlOjpjcmVhdGUpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1TaW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1S
ZWN0U2ltcGxlOjpjcmVhdGUpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1S
ZWN0U2ltcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
T3BhY2l0eUFuZE1hc2s6OmNyZWF0ZSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbU9wYWNpdHlBbmRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpjcmVhdGUpOgorICAgICAgICAoVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpjb2xvckxvY2F0
aW9uKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05v
TWFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtQW50aWFsaWFzaW5nTm9NYXNrOjpleHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvb3Jk
aW5hdGVzTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OmV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxv
Y2F0aW9uKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5n
Tm9NYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcik6CisKKzIwMTItMDctMjYgIEhlbGRlciBDb3JyZWlhICA8aGVsZGVyLmNvcnJlaWFA
bm9raWEuY29tPgorCisgICAgICAgIFtUZXhtYXBdIE1vdmUgVGV4dHVyZU1hcHBlckdMIHRvIHVz
ZSBHcmFwaGljc0NvbnRleHQzRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Nzg2NzIKKwogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
IAogICAgICAgICBUaGlzIGlzIHBhcnQgb2YgYSBzZXZlcmFsIHBhdGNoLXJlZmFjdG9yaW5nLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCA2ODhlMjZmNGU4OWZmZjEzZGU1YjNkNTc5YzgyMGE5
MzVlZjkxNzJjLi5mNDFhZjQ4ZGMxYmNlNTBlNjIwYzc1MjI1OGVjOGVjMWZlZjAxYmQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJHTC5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCIKQEAgLTM5
LDkxICszOCw0MiBAQAogCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VR
dC5oIgotI2lmIEhBVkUoUVQ1KQotI2luY2x1ZGUgPFFPcGVuR0xDb250ZXh0PgotI2Vsc2UKLSNp
bmNsdWRlIDxRR0xDb250ZXh0PgotI2VuZGlmIC8vIFFUX1ZFUlNJT04KLSNlbGlmIE9TKFdJTkRP
V1MpCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2VsaWYgT1MoTUFDX09TX1gpCi0jaW5jbHVkZSA8
QUdML2FnbC5oPgotI2VsaWYgZGVmaW5lZChYUF9VTklYKQotI2luY2x1ZGUgPEdML2dseC5oPgog
I2VuZGlmCiAKLSNkZWZpbmUgR0xfQ01EKC4uLikgZG8geyBfX1ZBX0FSR1NfXzsgQVNTRVJUX0FS
RyhfX1ZBX0FSR1NfXywgIWdsR2V0RXJyb3IoKSk7IH0gd2hpbGUgKDApCisjaWYgIVVTRShURVhN
QVBfT1BFTkdMX0VTXzIpCisvLyBGSVhNRTogTW92ZSB0byBFeHRlbnNpb25zM0QuaC4KKyNkZWZp
bmUgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCIDB4ODRGNQorI2RlZmluZSBHTF9VTlNJR05FRF9J
TlRfOF84XzhfOF9SRVYgMHg4MzY3CisjZGVmaW5lIEdMX1VOUEFDS19ST1dfTEVOR1RIIDB4MENG
MgorI2RlZmluZSBHTF9VTlBBQ0tfU0tJUF9QSVhFTFMgMHgwQ0Y0CisjZGVmaW5lIEdMX1VOUEFD
S19TS0lQX1JPV1MgMHgwQ0YzCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0
IFRleHR1cmVNYXBwZXJHTERhdGEgewogICAgIHN0cnVjdCBTaGFyZWRHTERhdGEgOiBwdWJsaWMg
UmVmQ291bnRlZDxTaGFyZWRHTERhdGE+IHsKLSNpZiBQTEFURk9STShRVCkKLSNpZiBRVF9WRVJT
SU9OID49IDB4MDUwMDAwCi0gICAgICAgIHR5cGVkZWYgUU9wZW5HTENvbnRleHQqIEdMQ29udGV4
dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIFFPcGVuR0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgp
OwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICB0eXBlZGVmIGNvbnN0IFFHTENvbnRleHQqIEdM
Q29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFFHTENvbnRleHQ6OmN1cnJlbnRDb250ZXh0
KCk7Ci0gICAgICAgIH0KLSNlbmRpZgotI2VsaWYgT1MoV0lORE9XUykKLSAgICAgICAgdHlwZWRl
ZiBIR0xSQyBHTENvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdM
Q29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB3Z2xHZXRDdXJyZW50Q29u
dGV4dCgpOwotICAgICAgICB9Ci0jZWxpZiBPUyhNQUNfT1NfWCkKLSAgICAgICAgdHlwZWRlZiBB
R0xDb250ZXh0IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50
R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFnbEdldEN1cnJlbnRD
b250ZXh0KCk7Ci0gICAgICAgIH0KLSNlbGlmIGRlZmluZWQoWFBfVU5JWCkKLSAgICAgICAgdHlw
ZWRlZiBHTFhDb250ZXh0IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRD
dXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsWEdldEN1
cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIC8vIERlZmF1bHQgaW1w
bGVtZW50YXRpb24gZm9yIHVua25vd24gb3BlbmdsLgotICAgICAgICAvLyBSZXR1cm5zIGFsd2F5
cyBpbmNyZWFzaW5nIG51bWJlciBhbmQgZGlzYWJsZXMgR0wgY29udGV4dCBkYXRhIHNoYXJpbmcu
Ci0gICAgICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGlj
IEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAg
c3RhdGljIEdMQ29udGV4dCBkdW1teUNvbnRleHRDb3VudGVyID0gMDsKLSAgICAgICAgICAgIHJl
dHVybiArK2R1bW15Q29udGV4dENvdW50ZXI7Ci0gICAgICAgIH0KLQotI2VuZGlmCi0KLSAgICAg
ICAgdHlwZWRlZiBIYXNoTWFwPEdMQ29udGV4dCwgU2hhcmVkR0xEYXRhKj4gR0xDb250ZXh0RGF0
YU1hcDsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qs
IFNoYXJlZEdMRGF0YSo+IEdMQ29udGV4dERhdGFNYXA7CiAgICAgICAgIHN0YXRpYyBHTENvbnRl
eHREYXRhTWFwJiBnbENvbnRleHREYXRhTWFwKCkKICAgICAgICAgewogICAgICAgICAgICAgc3Rh
dGljIEdMQ29udGV4dERhdGFNYXAgbWFwOwogICAgICAgICAgICAgcmV0dXJuIG1hcDsKICAgICAg
ICAgfQogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEdMRGF0YT4gY3VycmVudFNo
YXJlZEdMRGF0YSgpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEdMRGF0YT4gY3Vy
cmVudFNoYXJlZEdMRGF0YShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICAgICAgewot
ICAgICAgICAgICAgR0xDb250ZXh0IGN1cnJlbnRHTENvbmV4dCA9IGdldEN1cnJlbnRHTENvbnRl
eHQoKTsKLSAgICAgICAgICAgIEdMQ29udGV4dERhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gZ2xDb250
ZXh0RGF0YU1hcCgpLmZpbmQoY3VycmVudEdMQ29uZXh0KTsKKyAgICAgICAgICAgIEdMQ29udGV4
dERhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgpLmZpbmQoY29udGV4dC0+
cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKICAgICAgICAgICAgIGlmIChpdCAhPSBnbENv
bnRleHREYXRhTWFwKCkuZW5kKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7
CiAKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkR0xEYXRhKGdldEN1cnJl
bnRHTENvbnRleHQoKSkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRH
TERhdGEoY29udGV4dCkpOwogICAgICAgICB9CiAKLQotCiAgICAgICAgIFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyIHRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwogCi0gICAgICAgIFNoYXJl
ZEdMRGF0YShHTENvbnRleHQgZ2xDb250ZXh0KQorICAgICAgICBTaGFyZWRHTERhdGEoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgICAgICAgICA6IHRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsQ29udGV4dERhdGFNYXAo
KS5hZGQoZ2xDb250ZXh0LCB0aGlzKTsKKyAgICAgICAgICAgIGdsQ29udGV4dERhdGFNYXAoKS5h
ZGQoY29udGV4dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpLCB0aGlzKTsKICAgICAgICAg
fQogCiAgICAgICAgIH5TaGFyZWRHTERhdGEoKQpAQCAtMTQyLDMwICs5MiwzMiBAQCBzdHJ1Y3Qg
VGV4dHVyZU1hcHBlckdMRGF0YSB7CiAKICAgICBTaGFyZWRHTERhdGEmIHNoYXJlZEdMRGF0YSgp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gKihtX3NoYXJlZEdMRGF0YS5nZXQoKSk7Cisg
ICAgICAgIHJldHVybiAqbV9zaGFyZWRHTERhdGE7CiAgICAgfQogCiAgICAgdm9pZCBpbml0aWFs
aXplU3RlbmNpbCgpOwogCi0gICAgVGV4dHVyZU1hcHBlckdMRGF0YSgpCi0gICAgICAgIDogUGFp
bnRGbGFncygwKQorICAgIFRleHR1cmVNYXBwZXJHTERhdGEoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCisgICAgICAgIDogY29udGV4dChjb250ZXh0KQorICAgICAgICAsIFBhaW50RmxhZ3Mo
MCkKICAgICAgICAgLCBwcmV2aW91c1Byb2dyYW0oMCkKICAgICAgICAgLCB0YXJnZXRGcmFtZUJ1
ZmZlcigwKQogICAgICAgICAsIGRpZE1vZGlmeVN0ZW5jaWwoZmFsc2UpCiAgICAgICAgICwgcHJl
dmlvdXNTY2lzc29yU3RhdGUoMCkKICAgICAgICAgLCBwcmV2aW91c0RlcHRoU3RhdGUoMCkKLSAg
ICAgICAgLCBtX3NoYXJlZEdMRGF0YShUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6
OmN1cnJlbnRTaGFyZWRHTERhdGEoKSkKKyAgICAgICAgLCBtX3NoYXJlZEdMRGF0YShUZXh0dXJl
TWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRHTERhdGEodGhpcy0+Y29u
dGV4dCkpCiAgICAgeyB9CiAKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDsKICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4OwogICAgIFRleHR1cmVNYXBwZXI6
OlBhaW50RmxhZ3MgUGFpbnRGbGFnczsKLSAgICBHTGludCBwcmV2aW91c1Byb2dyYW07Ci0gICAg
R0xpbnQgdGFyZ2V0RnJhbWVCdWZmZXI7CisgICAgR0MzRGludCBwcmV2aW91c1Byb2dyYW07Cisg
ICAgR0MzRGludCB0YXJnZXRGcmFtZUJ1ZmZlcjsKICAgICBib29sIGRpZE1vZGlmeVN0ZW5jaWw7
Ci0gICAgR0xpbnQgcHJldmlvdXNTY2lzc29yU3RhdGU7Ci0gICAgR0xpbnQgcHJldmlvdXNEZXB0
aFN0YXRlOwotICAgIEdMaW50IHZpZXdwb3J0WzRdOwotICAgIEdMaW50IHByZXZpb3VzU2Npc3Nv
cls0XTsKKyAgICBHQzNEaW50IHByZXZpb3VzU2Npc3NvclN0YXRlOworICAgIEdDM0RpbnQgcHJl
dmlvdXNEZXB0aFN0YXRlOworICAgIEdDM0RpbnQgdmlld3BvcnRbNF07CisgICAgR0MzRGludCBw
cmV2aW91c1NjaXNzb3JbNF07CiAgICAgUmVmUHRyPFNoYXJlZEdMRGF0YT4gbV9zaGFyZWRHTERh
dGE7CiAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IGN1cnJlbnRTdXJmYWNlOwogfTsKQEAgLTE4
OSwyNSArMTQxLDI1IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2s6OnBvcCgpCiAg
ICAgY2xpcFN0YWNrLnJlbW92ZUxhc3QoKTsKIH0KIAotc3RhdGljIHZvaWQgc2Npc3NvckNsaXAo
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3N0YXRpYyB2b2lkIHNjaXNzb3JDbGlwKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIGlmIChyZWN0Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR0xpbnQgdmlld3BvcnRbNF07Ci0gICAg
R0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIHZpZXdwb3J0KSk7Ci0gICAgR0xfQ01E
KGdsU2Npc3NvcihyZWN0LngoKSwgdmlld3BvcnRbM10gLSByZWN0Lm1heFkoKSwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKSk7CisgICAgR0MzRGludCB2aWV3cG9ydFs0XTsKKyAgICBjb250
ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQsIHZpZXdwb3J0KTsK
KyAgICBjb250ZXh0LT5zY2lzc29yKHJlY3QueCgpLCB2aWV3cG9ydFszXSAtIHJlY3QubWF4WSgp
LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJH
TDo6Q2xpcFN0YWNrOjphcHBseSgpCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjph
cHBseShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIHsKLSAgICBzY2lzc29yQ2xpcChjbGlw
U3RhdGUuc2Npc3NvckJveCk7Ci0gICAgR0xfQ01EKGdsU3RlbmNpbE9wKEdMX0tFRVAsIEdMX0tF
RVAsIEdMX0tFRVApKTsKLSAgICBHTF9DTUQoZ2xTdGVuY2lsRnVuYyhHTF9FUVVBTCwgY2xpcFN0
YXRlLnN0ZW5jaWxJbmRleCAtIDEsIGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXggLSAxKSk7CisgICAg
c2Npc3NvckNsaXAoY29udGV4dCwgY2xpcFN0YXRlLnNjaXNzb3JCb3gpOworICAgIGNvbnRleHQt
PnN0ZW5jaWxPcChHcmFwaGljc0NvbnRleHQzRDo6S0VFUCwgR3JhcGhpY3NDb250ZXh0M0Q6OktF
RVAsIEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQKTsKKyAgICBjb250ZXh0LT5zdGVuY2lsRnVuYyhH
cmFwaGljc0NvbnRleHQzRDo6RVFVQUwsIGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXggLSAxLCBjbGlw
U3RhdGUuc3RlbmNpbEluZGV4IC0gMSk7CiAgICAgaWYgKGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXgg
PT0gMSkKLSAgICAgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9TVEVOQ0lMX1RFU1QpKTsKKyAgICAg
ICAgY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKTsKICAg
ICBlbHNlCi0gICAgICAgIEdMX0NNRChnbEVuYWJsZShHTF9TVEVOQ0lMX1RFU1QpKTsKKyAgICAg
ICAgY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpOwogfQog
CiAKQEAgLTIyMSw4ICsxNzMsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTERhdGE6OmluaXRpYWxp
emVTdGVuY2lsKCkKICAgICBpZiAoZGlkTW9kaWZ5U3RlbmNpbCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgR0xfQ01EKGdsQ2xlYXJTdGVuY2lsKDApKTsKLSAgICBHTF9DTUQoZ2xDbGVhcihHTF9T
VEVOQ0lMX0JVRkZFUl9CSVQpKTsKKyAgICBjb250ZXh0LT5jbGVhclN0ZW5jaWwoMCk7CisgICAg
Y29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCk7CiAg
ICAgZGlkTW9kaWZ5U3RlbmNpbCA9IHRydWU7CiB9CiAKQEAgLTIzNiwxMCArMTg4LDE0IEBAIEJp
dG1hcFRleHR1cmVHTCogdG9CaXRtYXBUZXh0dXJlR0woQml0bWFwVGV4dHVyZSogdGV4dHVyZSkK
IAogVGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0woKQogICAgIDogVGV4dHVyZU1hcHBl
cihPcGVuR0xNb2RlKQotICAgICwgbV9kYXRhKG5ldyBUZXh0dXJlTWFwcGVyR0xEYXRhKQogICAg
ICwgbV9jb250ZXh0KDApCiAgICAgLCBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyhm
YWxzZSkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzOwor
ICAgIGF0dHJpYnV0ZXMuYW50aWFsaWFzID0gZmFsc2U7CisgICAgYXR0cmlidXRlcy5kZXB0aCA9
IGZhbHNlOworICAgIG1fY29udGV4dDNEID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVdyYXBw
ZXJGb3JDdXJyZW50R0xDb250ZXh0KCk7CisgICAgbV9kYXRhID0gbmV3IFRleHR1cmVNYXBwZXJH
TERhdGEobV9jb250ZXh0M0QuZ2V0KCkpOwogfQogCiBUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFj
ayYgVGV4dHVyZU1hcHBlckdMOjpjbGlwU3RhY2soKQpAQCAtMjQ5LDE1ICsyMDUsOSBAQCBUZXh0
dXJlTWFwcGVyR0w6OkNsaXBTdGFjayYgVGV4dHVyZU1hcHBlckdMOjpjbGlwU3RhY2soKQogCiB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5QYWludGluZyhQYWludEZsYWdzIGZsYWdzKQogewot
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG5vIEdMIGVycm9yIGNvZGUgc3RheXMgZnJvbSBwcmV2aW91
cyBvcGVyYXRpb25zLgotICAgIGdsR2V0RXJyb3IoKTsKLQotICAgIGlmICghaW5pdGlhbGl6ZU9w
ZW5HTFNoaW1zKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdMX0NNRChnbEdldEludGVnZXJ2
KEdMX0NVUlJFTlRfUFJPR1JBTSwgJmRhdGEoKS5wcmV2aW91c1Byb2dyYW0pKTsKLSAgICBkYXRh
KCkucHJldmlvdXNTY2lzc29yU3RhdGUgPSBnbElzRW5hYmxlZChHTF9TQ0lTU09SX1RFU1QpOwot
ICAgIGRhdGEoKS5wcmV2aW91c0RlcHRoU3RhdGUgPSBnbElzRW5hYmxlZChHTF9ERVBUSF9URVNU
KTsKKyAgICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJF
TlRfUFJPR1JBTSwgJmRhdGEoKS5wcmV2aW91c1Byb2dyYW0pOworICAgIGRhdGEoKS5wcmV2aW91
c1NjaXNzb3JTdGF0ZSA9IG1fY29udGV4dDNELT5pc0VuYWJsZWQoR3JhcGhpY3NDb250ZXh0M0Q6
OlNDSVNTT1JfVEVTVCk7CisgICAgZGF0YSgpLnByZXZpb3VzRGVwdGhTdGF0ZSA9IG1fY29udGV4
dDNELT5pc0VuYWJsZWQoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1QpOwogI2lmIFBMQVRG
T1JNKFFUKQogICAgIGlmIChtX2NvbnRleHQpIHsKICAgICAgICAgUVBhaW50ZXIqIHBhaW50ZXIg
PSBtX2NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwpAQCAtMjY1LDE1ICsyMTUsMTUgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyBmbGFncykKICAgICAg
ICAgcGFpbnRlci0+YmVnaW5OYXRpdmVQYWludGluZygpOwogICAgIH0KICNlbmRpZgotICAgIGds
RGlzYWJsZShHTF9ERVBUSF9URVNUKTsKLSAgICBnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOwor
ICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUKTsK
KyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Qp
OwogICAgIGRhdGEoKS5kaWRNb2RpZnlTdGVuY2lsID0gZmFsc2U7Ci0gICAgR0xfQ01EKGdsRGVw
dGhNYXNrKDApKTsKLSAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9WSUVXUE9SVCwgZGF0YSgp
LnZpZXdwb3J0KSk7Ci0gICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfU0NJU1NPUl9CT1gsIGRh
dGEoKS5wcmV2aW91c1NjaXNzb3IpKTsKLSAgICBnbEdldEludGVnZXJ2KEdMX0ZSQU1FQlVGRkVS
X0JJTkRJTkcsICZkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpOworICAgIG1fY29udGV4dDNELT5k
ZXB0aE1hc2soMCk7CisgICAgbV9jb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dDNEOjpWSUVXUE9SVCwgZGF0YSgpLnZpZXdwb3J0KTsKKyAgICBtX2NvbnRleHQzRC0+Z2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YLCBkYXRhKCkucHJldmlvdXNTY2lz
c29yKTsKKyAgICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0JJTkRJTkcsICZkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpOwogICAgIG1fY2xp
cFN0YWNrLmluaXQoSW50UmVjdCgwLCAwLCBkYXRhKCkudmlld3BvcnRbMl0sIGRhdGEoKS52aWV3
cG9ydFszXSkpOwotICAgIEdMX0NNRChnbEdldEludGVnZXJ2KEdMX0ZSQU1FQlVGRkVSX0JJTkRJ
TkcsICZkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpKTsKKyAgICBtX2NvbnRleHQzRC0+Z2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0JJTkRJTkcsICZkYXRhKCkudGFy
Z2V0RnJhbWVCdWZmZXIpOwogICAgIGRhdGEoKS5QYWludEZsYWdzID0gZmxhZ3M7CiAgICAgYmlu
ZFN1cmZhY2UoMCk7CiB9CkBAIC0yODEsMjIgKzIzMSwyMiBAQCB2b2lkIFRleHR1cmVNYXBwZXJH
TDo6YmVnaW5QYWludGluZyhQYWludEZsYWdzIGZsYWdzKQogdm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmVuZFBhaW50aW5nKCkKIHsKICAgICBpZiAoZGF0YSgpLmRpZE1vZGlmeVN0ZW5jaWwpIHsKLSAg
ICAgICAgZ2xDbGVhclN0ZW5jaWwoMSk7Ci0gICAgICAgIGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZG
RVJfQklUKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmNsZWFyU3RlbmNpbCgxKTsKKyAgICAgICAg
bV9jb250ZXh0M0QtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQp
OwogICAgIH0KIAotICAgIGdsVXNlUHJvZ3JhbShkYXRhKCkucHJldmlvdXNQcm9ncmFtKTsKKyAg
ICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShkYXRhKCkucHJldmlvdXNQcm9ncmFtKTsKIAotICAg
IGdsU2Npc3NvcihkYXRhKCkucHJldmlvdXNTY2lzc29yWzBdLCBkYXRhKCkucHJldmlvdXNTY2lz
c29yWzFdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzJdLCBkYXRhKCkucHJldmlvdXNTY2lzc29y
WzNdKTsKKyAgICBtX2NvbnRleHQzRC0+c2Npc3NvcihkYXRhKCkucHJldmlvdXNTY2lzc29yWzBd
LCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzFdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzJdLCBk
YXRhKCkucHJldmlvdXNTY2lzc29yWzNdKTsKICAgICBpZiAoZGF0YSgpLnByZXZpb3VzU2Npc3Nv
clN0YXRlKQotICAgICAgICBnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgICAgICBtX2Nv
bnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwogICAgIGVs
c2UKLSAgICAgICAgZ2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgICAgIG1fY29udGV4
dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwogCiAgICAgaWYg
KGRhdGEoKS5wcmV2aW91c0RlcHRoU3RhdGUpCi0gICAgICAgIGdsRW5hYmxlKEdMX0RFUFRIX1RF
U1QpOworICAgICAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9URVNUKTsKICAgICBlbHNlCi0gICAgICAgIGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKTsKKyAg
ICAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1Qp
OwogCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgaWYgKCFtX2NvbnRleHQpCkBAIC0zMDcsNDAgKzI1
Nyw0MCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZW5kUGFpbnRpbmcoKQogI2VuZGlmCiB9CiAK
LXZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYgcXVhZFRvRHJh
dywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0qIHNoYWRlclByb2dyYW0sIEdMZW51bSBkcmF3aW5nTW9kZSwgYm9v
bCBuZWVkc0JsZW5kaW5nKQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdRdWFkKGNvbnN0IERy
YXdRdWFkJiBxdWFkVG9EcmF3LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSogc2hhZGVyUHJvZ3JhbSwgR0MzRGVu
dW0gZHJhd2luZ01vZGUsIGJvb2wgbmVlZHNCbGVuZGluZykKIHsKLSAgICBHTF9DTUQoZ2xFbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAg
IEdMX0NNRChnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAwKSk7CisgICAgbV9jb250ZXh0
M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigp
KTsKKyAgICBtX2NvbnRleHQzRC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlf
QlVGRkVSLCAwKTsKIAotICAgIGNvbnN0IEdMZmxvYXQgcXVhZFtdID0geworICAgIGNvbnN0IEdD
M0RmbG9hdCBxdWFkW10gPSB7CiAgICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRv
VW5pdFNxdWFyZS5wMSgpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1
YXJlLnAxKCkueSgpLAogICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRT
cXVhcmUucDIoKS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5w
MigpLnkoKSwKICAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJl
LnAzKCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDMoKS55
KCksCiAgICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wNCgp
LngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnA0KCkueSgpCiAg
ICAgfTsKLSAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlclByb2dyYW0tPnZl
cnRleEF0dHJpYigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHF1YWQpKTsKKyAgICBtX2Nv
bnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIo
KSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cihxdWFk
KSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1h
dHJpeChkYXRhKCkucHJvamVjdGlvbk1hdHJpeCkubXVsdGlwbHkobW9kZWxWaWV3TWF0cml4KS5t
dWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgKICAgICAgICAgICAgIHF1YWRUb0RyYXcub3Jp
Z2luYWxUYXJnZXRSZWN0LndpZHRoKCksIDAsIDAsIDAsCiAgICAgICAgICAgICAwLCBxdWFkVG9E
cmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC5oZWlnaHQoKSwgMCwgMCwKICAgICAgICAgICAgIDAsIDAs
IDEsIDAsCiAgICAgICAgICAgICBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC54KCksIHF1
YWRUb0RyYXcub3JpZ2luYWxUYXJnZXRSZWN0LnkoKSwgMCwgMSkpOwotICAgIGNvbnN0IEdMZmxv
YXQgbTRbXSA9IHsKKyAgICBHQzNEZmxvYXQgbTRbXSA9IHsKICAgICAgICAgbWF0cml4Lm0xMSgp
LCBtYXRyaXgubTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAogICAgICAgICBtYXRy
aXgubTIxKCksIG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCiAgICAg
ICAgIG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQo
KSwKICAgICAgICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0
cml4Lm00NCgpCiAgICAgfTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRlclBy
b2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIEdMX0ZBTFNFLCBtNCkpOworICAgIG1fY29udGV4
dDNELT51bmlmb3JtTWF0cml4NGZ2KHNoYWRlclByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEs
IGZhbHNlLCBtNCk7CiAKICAgICBpZiAobmVlZHNCbGVuZGluZykgewotICAgICAgICBHTF9DTUQo
Z2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKSk7Ci0gICAgICAgIEdM
X0NNRChnbEVuYWJsZShHTF9CTEVORCkpOworICAgICAgICBtX2NvbnRleHQzRC0+YmxlbmRGdW5j
KEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JD
X0FMUEhBKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
QkxFTkQpOwogICAgIH0gZWxzZQotICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdMX0JMRU5EKSk7
CisgICAgICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7
CiAKLSAgICBHTF9DTUQoZ2xEcmF3QXJyYXlzKGRyYXdpbmdNb2RlLCAwLCA0KSk7Ci0gICAgR0xf
Q01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJp
YigpKSk7CisgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoZHJhd2luZ01vZGUsIDAsIDQpOwor
ICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+
dmVydGV4QXR0cmliKCkpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihj
b25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdpZHRoLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgpCkBAIC0zNDks
MTcgKzI5OSwxNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDb2xv
ciYgY29sb3IsIGZsb2F0IHdpZHRoLCBjb25zdCBGbG9hdFJlYwogICAgICAgICByZXR1cm47CiAK
ICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yPiBwcm9ncmFt
ID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLnNvbGlk
Q29sb3JQcm9ncmFtKCk7Ci0gICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKSk7
CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CiAKICAgICBmbG9h
dCBhbHBoYSA9IGNvbG9yLmFscGhhKCkgLyAyNTUuMDsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtNGYo
cHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLAorICAgIG1fY29udGV4dDNELT51bmlmb3JtNGYocHJv
Z3JhbS0+Y29sb3JMb2NhdGlvbigpLAogICAgICAgICAgICAgICAgICAgICAgICAoY29sb3IucmVk
KCkgLyAyNTUuMCkgKiBhbHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgKGNvbG9yLmdyZWVu
KCkgLyAyNTUuMCkgKiBhbHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgKGNvbG9yLmJsdWUo
KSAvIDI1NS4wKSAqIGFscGhhLAotICAgICAgICAgICAgICAgICAgICAgICBhbHBoYSkpOwotICAg
IEdMX0NNRChnbExpbmVXaWR0aCh3aWR0aCkpOworICAgICAgICAgICAgICAgICAgICAgICBhbHBo
YSk7CisgICAgbV9jb250ZXh0M0QtPmxpbmVXaWR0aCh3aWR0aCk7CiAKLSAgICBkcmF3UXVhZCh0
YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdMX0xJTkVfTE9PUCwg
Y29sb3IuaGFzQWxwaGEoKSk7CisgICAgZHJhd1F1YWQodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0
cml4LCBwcm9ncmFtLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6TElORV9MT09QLCBjb2xvci5o
YXNBbHBoYSgpKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdSZXBhaW50Q291bnRl
cihpbnQgdmFsdWUsIGludCBwb2ludFNpemUsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4KQpAQCAtNDA2LDcg
KzM1Niw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBU
ZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmCiAgICAgZHJhd1RleHR1cmUodGV4dHVy
ZUdMLmlkKCksIHRleHR1cmVHTC5pc09wYXF1ZSgpID8gMCA6IFN1cHBvcnRzQmxlbmRpbmcsIHRl
eHR1cmVHTC5zaXplKCksIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSwgbWFzaywgZXhwb3Nl
ZEVkZ2VzKTsKIH0KIAotI2lmIGRlZmluZWQoR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlKQorI2lm
ICFVU0UoVEVYTUFQX09QRU5HTF9FU18yKQogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0
dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJbnRT
aXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBC
aXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKIHsKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0+IHByb2dyYW07CkBAIC00MTQsMzYgKzM2NCwzNiBAQCB2b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd1RleHR1cmVSZWN0YW5nbGVBUkIodWludDMyX3QgdGV4dHVyZSwgRmxhZ3Mg
ZmxhZ3MsIGNvbgogICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlJlY3RPcGFjaXR5QW5kTWFzayk7CiAgICAgZWxzZQogICAgICAgICBwcm9ncmFt
ID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNo
YWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3RTaW1wbGUpOwotICAg
IEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOworICAgIG1fY29udGV4dDNELT51
c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOwogCi0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0
cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xBY3RpdmVU
ZXh0dXJlKEdMX1RFWFRVUkUwKSk7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV9SRUNUQU5HTEVfQVJCLCB0ZXh0dXJlKSk7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dy
YW0tPnNvdXJjZVRleHR1cmVMb2NhdGlvbigpLCAwKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRl
eHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOworICAgIG1f
Y29udGV4dDNELT5iaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIHRleHR1cmUp
OworICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVyZUxvY2F0
aW9uKCksIDApOwogCi0gICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW0tPmZsaXBMb2NhdGlv
bigpLCAhIShmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSkpOwotICAgIEdMX0NNRChnbFVuaWZv
cm0yZihwcm9ncmFtLT50ZXh0dXJlU2l6ZUxvY2F0aW9uKCksIHRleHR1cmVTaXplLndpZHRoKCks
IHRleHR1cmVTaXplLmhlaWdodCgpKSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9n
cmFtLT5mbGlwTG9jYXRpb24oKSwgISEoZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVyZSkpOworICAg
IG1fY29udGV4dDNELT51bmlmb3JtMmYocHJvZ3JhbS0+dGV4dHVyZVNpemVMb2NhdGlvbigpLCB0
ZXh0dXJlU2l6ZS53aWR0aCgpLCB0ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CiAKICAgICBpZiAoVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+
b3BhY2l0eUxvY2F0aW9uKCkpKQotICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbS0+
b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPnVuaWZv
cm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0eSk7CiAKICAgICBpZiAobWFz
a1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSAmJiBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0
aW9uKCkpKSB7CiAgICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9
IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKLSAgICAg
ICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSkpOwotICAgICAgICBHTF9DTUQo
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKSk7Ci0gICAg
ICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCksIDEp
KTsKLSAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpOworICAgICAg
ICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEp
OworICAgICAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPmlkKCkpOworICAgICAgICBtX2NvbnRleHQzRC0+dW5p
Zm9ybTFpKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSwgMSk7CisgICAgICAgIG1fY29u
dGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAg
fQogCiAgICAgYm9vbCBuZWVkc0JsZW5kaW5nID0gKGZsYWdzICYgU3VwcG9ydHNCbGVuZGluZykg
fHwgb3BhY2l0eSA8IDAuOTkgfHwgbWFza1RleHR1cmU7Ci0gICAgZHJhd1F1YWQodGFyZ2V0UmVj
dCwgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdldCgpLCBHTF9UUklBTkdMRV9GQU4sIG5lZWRz
QmxlbmRpbmcpOworICAgIGRyYXdRdWFkKHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgcHJv
Z3JhbS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgbmVlZHNCbGVuZGlu
Zyk7CiB9Ci0jZW5kaWYgLy8gZGVmaW5lZChHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUpIAorI2Vu
ZGlmIC8vICFVU0UoVEVYTUFQX09QRU5HTF9FU18yKQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6
ZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUm
IC8qIHRleHR1cmVTaXplICovLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0
IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlLCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpCiB7Ci0g
ICAgYm9vbCBuZWVkc0FudGlsaWFpbmcgPSBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2lu
ZyAmJiAhbW9kZWxWaWV3TWF0cml4LmlzSW50ZWdlclRyYW5zbGF0aW9uKCk7Ci0gICAgaWYgKG5l
ZWRzQW50aWxpYWluZyAmJiBkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodGV4dHVyZSwgZmxh
Z3MsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgbWFza1RleHR1cmUsIGV4
cG9zZWRFZGdlcykpCisgICAgYm9vbCBuZWVkc0FudGlhbGlhaW5nID0gbV9lbmFibGVFZGdlRGlz
dGFuY2VBbnRpYWxpYXNpbmcgJiYgIW1vZGVsVmlld01hdHJpeC5pc0ludGVnZXJUcmFuc2xhdGlv
bigpOworICAgIGlmIChuZWVkc0FudGlhbGlhaW5nICYmIGRyYXdUZXh0dXJlV2l0aEFudGlhbGlh
c2luZyh0ZXh0dXJlLCBmbGFncywgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5
LCBtYXNrVGV4dHVyZSwgZXhwb3NlZEVkZ2VzKSkKICAgICAgICByZXR1cm47CiAKICAgICBSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW07CkBAIC00NTEsMTUgKzQwMSwx
NSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwg
RmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmCiAgICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hh
cmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3BhY2l0eUFuZE1hc2spOwogICAgIGVsc2UKICAg
ICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaW1w
bGUpOwotICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOworICAgIG1fY29u
dGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOwogCiAgICAgZHJhd1RleHR1cmVkUXVh
ZFdpdGhQcm9ncmFtKHByb2dyYW0uZ2V0KCksIHRleHR1cmUsIGZsYWdzLCB0YXJnZXRSZWN0LCBt
b2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0dXJlKTsKIH0KIAotc3RhdGljIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHZpZXdwb3J0TWF0cml4KCkKK3N0YXRpYyBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB2aWV3cG9ydE1hdHJpeChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEKQogewotICAg
IEdMaW50IHZpZXdwb3J0WzRdOwotICAgIEdMX0NNRChnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JU
LCB2aWV3cG9ydCkpOworICAgIEdDM0RpbnQgdmlld3BvcnRbNF07CisgICAgY29udGV4dDNELT5n
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQsIHZpZXdwb3J0KTsKIAogICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKICAgICBtYXRyaXgudHJhbnNsYXRlM2Qodmll
d3BvcnRbMF0sIHZpZXdwb3J0WzFdLCAwKTsKQEAgLTU1Niw3ICs1MDYsNyBAQCBib29sIFRleHR1
cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUs
IEZsYWdzIGZsYWdzLAogICAgIC8vIGFudGlhbGlhc2luZy4gTm90ZSBoZXJlIHRoYXQgd2UgYXJl
IGFsc28gaW5jbHVkaW5nIHRoZSB2aWV3cG9ydCBtYXRyaXggKHdoaWNoCiAgICAgLy8gdHJhbnNs
YXRlcyBmcm9tIG5vcm1hbGl6ZWQgZGV2aWNlIGNvb3JkaW5hdGVzIHRvIHNjcmVlbiBjb29yZGlu
YXRlcyksIGJlY2F1c2UgdGhlc2UKICAgICAvLyB2YWx1ZXMgYXJlIGNvbnN1bWVkIGluIHRoZSBm
cmFnbWVudCBzaGFkZXIsIHdoaWNoIHdvcmtzIGluIHNjcmVlbiBjb29yZGluYXRlcy4KLSAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHZpZXdwb3J0TWF0cml4
KCkubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgp
KS5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgpLnRvMmRUcmFuc2Zvcm0oKTsKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBzY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHZpZXdwb3J0TWF0cml4KG1fY29u
dGV4dDNELmdldCgpKS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCkucHJvamVj
dGlvbk1hdHJpeCkpLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkudG8yZFRyYW5zZm9ybSgpOwog
ICAgIGlmICghc2NyZWVuU3BhY2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBGbG9hdFF1YWQgcXVhZEluU2NyZWVuU3BhY2UgPSBzY3JlZW5TcGFj
ZVRyYW5zZm9ybS5tYXBRdWFkKG9yaWdpbmFsVGFyZ2V0UmVjdCk7CkBAIC01ODAsOCArNTMwLDgg
QEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50
MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywKICAgICBxdWFkVG9FZGdlQXJyYXkoaW5mbGF0ZVF1
YWQocXVhZEluU2NyZWVuU3BhY2UuYm91bmRpbmdCb3goKSwgIGluZmxhdGlvbkRpc3RhbmNlKSwg
dGFyZ2V0UXVhZEVkZ2VzICsgMTIpOwogCiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgp
LnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmFudGlhbGlhc2luZ05vTWFza1Byb2dyYW0oKTsK
LSAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpKTsKLSAgICBHTF9DTUQoZ2xV
bmlmb3JtM2Z2KHByb2dyYW0tPmV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9u
KCksIDgsIHRhcmdldFF1YWRFZGdlcykpOworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHBy
b2dyYW0tPmlkKCkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtM2Z2KHByb2dyYW0tPmV4cGFu
ZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uKCksIDgsIHRhcmdldFF1YWRFZGdlcyk7
CiAKICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVy
ZSwgZmxhZ3MsIERyYXdRdWFkKG9yaWdpbmFsVGFyZ2V0UmVjdCwgZXhwYW5kZWRRdWFkSW5UZXh0
dXJlQ29vcmRpbmF0ZXMpLCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIDAgLyogbWFza1RleHR1
cmUgKi8pOwogICAgIHJldHVybiB0cnVlOwpAQCAtNTg5LDI2ICs1MzksMjYgQEAgYm9vbCBUZXh0
dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJl
LCBGbGFncyBmbGFncywKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlZFF1YWRX
aXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSogcHJvZ3JhbSwgdWludDMyX3Qg
dGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IERyYXdRdWFkJiBxdWFkVG9EcmF3LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25z
dCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKIHsKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbEFj
dGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKLSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCB0ZXh0dXJlKSk7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW0tPnNv
dXJjZVRleHR1cmVMb2NhdGlvbigpLCAwKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+
YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOworICAgIG1fY29udGV4
dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZSk7
CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5zb3VyY2VUZXh0dXJlTG9jYXRp
b24oKSwgMCk7CiAKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbS0+ZmxpcExvY2F0aW9u
KCksICEhKGZsYWdzICYgU2hvdWxkRmxpcFRleHR1cmUpKSk7CisgICAgbV9jb250ZXh0M0QtPnVu
aWZvcm0xZihwcm9ncmFtLT5mbGlwTG9jYXRpb24oKSwgISEoZmxhZ3MgJiBTaG91bGRGbGlwVGV4
dHVyZSkpOwogCiAgICAgaWYgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlkVW5p
Zm9ybUxvY2F0aW9uKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpKSkKLSAgICAgICAgR0xfQ01E
KGdsVW5pZm9ybTFmKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5KSk7CisgICAg
ICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9w
YWNpdHkpOwogCiAgICAgaWYgKG1hc2tUZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkg
JiYgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24ocHJv
Z3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpKSkgewogICAgICAgICBjb25zdCBCaXRtYXBUZXh0
dXJlR0wqIG1hc2tUZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wq
PihtYXNrVGV4dHVyZSk7Ci0gICAgICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVS
RTEpKTsKLSAgICAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbWFza1Rl
eHR1cmVHTC0+aWQoKSkpOwotICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+bWFz
a1RleHR1cmVMb2NhdGlvbigpLCAxKSk7Ci0gICAgICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUo
R0xfVEVYVFVSRTApKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKTsKKyAg
ICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9u
KCksIDEpOworICAgICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRTApOwogICAgIH0KIAogICAgIGJvb2wgbmVlZHNCbGVuZGluZyA9IChmbGFn
cyAmIFN1cHBvcnRzQmxlbmRpbmcpIHx8IG9wYWNpdHkgPCAwLjk5IHx8IG1hc2tUZXh0dXJlOwot
ICAgIGRyYXdRdWFkKHF1YWRUb0RyYXcsIG1vZGVsVmlld01hdHJpeCwgcHJvZ3JhbSwgR0xfVFJJ
QU5HTEVfRkFOLCBuZWVkc0JsZW5kaW5nKTsKKyAgICBkcmF3UXVhZChxdWFkVG9EcmF3LCBtb2Rl
bFZpZXdNYXRyaXgsIHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIG5l
ZWRzQmxlbmRpbmcpOwogfQogCiBib29sIEJpdG1hcFRleHR1cmVHTDo6Y2FuUmV1c2VXaXRoKGNv
bnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSwgRmxhZ3MpCkBAIC02MTksNyArNTY5LDcgQEAgYm9v
bCBCaXRtYXBUZXh0dXJlR0w6OmNhblJldXNlV2l0aChjb25zdCBJbnRTaXplJiBjb250ZW50c1Np
emUsIEZsYWdzKQogI2lmIE9TKERBUldJTikKICNkZWZpbmUgREVGQVVMVF9URVhUVVJFX1BJWEVM
X1RSQU5TRkVSX1RZUEUgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWCiAjZWxzZQotI2RlZmlu
ZSBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSBHTF9VTlNJR05FRF9CWVRFCisj
ZGVmaW5lIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFCiAjZW5kaWYKIAogc3RhdGljIGJvb2wgZHJpdmVyU3VwcG9ydHNT
dWJJbWFnZSgpCkBAIC02MzQsMzAgKzU4NCwzMSBAQCBzdGF0aWMgYm9vbCBkcml2ZXJTdXBwb3J0
c1N1YkltYWdlKCkKIAogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmRpZFJlc2V0KCkKIHsKKyAgICBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0Nv
bnRleHQzRCgpOwogICAgIGlmICghbV9pZCkKLSAgICAgICAgR0xfQ01EKGdsR2VuVGV4dHVyZXMo
MSwgJm1faWQpKTsKLQorICAgICAgICBtX2lkID0gY29udGV4dDNELT5jcmVhdGVUZXh0dXJlKCk7
CiAgICAgbV9zaG91bGRDbGVhciA9IHRydWU7CiAgICAgaWYgKG1fdGV4dHVyZVNpemUgPT0gY29u
dGVudFNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV90ZXh0dXJlU2l6ZSA9IGNvbnRl
bnRTaXplKCk7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkp
OwotICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9N
SU5fRklMVEVSLCBHTF9MSU5FQVIpKTsKLSAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKSk7Ci0gICAgR0xfQ01E
KGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xB
TVBfVE9fRURHRSkpOwotICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpKTsKLSAgICBHTF9DTUQoZ2xUZXhJ
bWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwg
bV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgREVGQVVMVF9URVhUVVJFX1BJWEVM
X1RSQU5TRkVSX1RZUEUsIDApKTsKKyAgICBjb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBtX2lkKTsKKyAgICBjb250ZXh0M0QtPnRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIGNvbnRleHQz
RC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7
CisgICAgY29udGV4dDNELT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNE
OjpDTEFNUF9UT19FREdFKTsKKyAgICBjb250ZXh0M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwg
R3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGNvbnRleHQzRC0+dGV4SW1h
Z2UyRERpcmVjdChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQo
KSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFO
U0ZFUl9UWVBFLCAwKTsKIH0KIAogCiB2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVu
dHMoY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50
UG9pbnQmIHNvdXJjZU9mZnNldCwgaW50IGJ5dGVzUGVyTGluZSkKIHsKLSAgICBHTF9DTUQoZ2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBj
b250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2lk
KTsKIAogICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OwogICAgIGlmIChieXRl
c1BlckxpbmUgPT0gdGFyZ2V0UmVjdC53aWR0aCgpICogYnl0ZXNQZXJQaXhlbCAmJiBzb3VyY2VP
ZmZzZXQgPT0gSW50UG9pbnQ6Onplcm8oKSkgewotICAgICAgICBHTF9DTUQoZ2xUZXhTdWJJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFy
Z2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBERUZBVUxUX1RF
WFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgKGNvbnN0IGNoYXIqKWRhdGEpKTsKKyAgICAgICAg
Y29udGV4dDNELT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAw
LCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFy
Z2V0UmVjdC5oZWlnaHQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIERFRkFVTFRfVEVYVFVS
RV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29uc3QgY2hhciopZGF0YSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTY3NSwxOSArNjI2LDE5IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjp1
cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0
CiAgICAgICAgICAgICBkc3QgKz0gdGFyZ2V0Qnl0ZXNQZXJMaW5lOwogICAgICAgICB9CiAKLSAg
ICAgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0
LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWln
aHQoKSwgR0xfUkdCQSwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIHRlbXBv
cmFyeURhdGEuZGF0YSgpKSk7CisgICAgICAgIGNvbnRleHQzRC0+dGV4U3ViSW1hZ2UyRChHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3Qu
eSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgdGVtcG9y
YXJ5RGF0YS5kYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAjaWYgIWRlZmluZWQo
VEVYTUFQX09QRU5HTF9FU18yKQogICAgIC8vIFVzZSB0aGUgT3BlbkdMIHN1Yi1pbWFnZSBleHRl
bnNpb24sIG5vdyB0aGF0IHdlIGtub3cgaXQncyBhdmFpbGFibGUuCi0gICAgR0xfQ01EKGdsUGl4
ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIGJ5dGVzUGVyTGluZSAvIGJ5dGVzUGVyUGl4
ZWwpKTsKLSAgICBHTF9DTUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCBzb3Vy
Y2VPZmZzZXQueSgpKSk7Ci0gICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBf
UElYRUxTLCBzb3VyY2VPZmZzZXQueCgpKSk7Ci0gICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJl
Y3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgR0xfUkdCQSwgREVGQVVMVF9URVhUVVJF
X1BJWEVMX1RSQU5TRkVSX1RZUEUsIChjb25zdCBjaGFyKilkYXRhKSk7Ci0gICAgR0xfQ01EKGds
UGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIDApKTsKLSAgICBHTF9DTUQoZ2xQaXhl
bFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCAwKSk7Ci0gICAgR0xfQ01EKGdsUGl4ZWxTdG9y
ZWkoR0xfVU5QQUNLX1NLSVBfUElYRUxTLCAwKSk7CisgICAgY29udGV4dDNELT5waXhlbFN0b3Jl
aShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgYnl0ZXNQZXJMaW5lIC8gYnl0ZXNQZXJQaXhlbCk7Cisg
ICAgY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCBzb3VyY2VPZmZz
ZXQueSgpKTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJWEVM
Uywgc291cmNlT2Zmc2V0LngoKSk7CisgICAgY29udGV4dDNELT50ZXhTdWJJbWFnZTJEKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55
KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29uc3Qg
Y2hhciopZGF0YSk7CisgICAgY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9XX0xF
TkdUSCwgMCk7CisgICAgY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dT
LCAwKTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJWEVMUywg
MCk7CiAjZW5kaWYKIH0KIApAQCAtNzEyLDE5ICs2NjMsMTkgQEAgdm9pZCBUZXh0dXJlTWFwcGVy
R0w6OmRyYXdGaWx0ZXJlZChjb25zdCBCaXRtYXBUZXh0dXJlJiBzb3VyY2VUZXh0dXJlLCBjb25z
dCBCaXQKIAogICAgIHByb2dyYW0tPnByZXBhcmUoZmlsdGVyLCBwYXNzLCBzb3VyY2VUZXh0dXJl
LmNvbnRlbnRTaXplKCksIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KGNvbnRl
bnRUZXh0dXJlKS5pZCgpKTsKIAotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0
cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbEFjdGl2
ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKLSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihzb3VyY2VUZXh0dXJl
KS5pZCgpKSk7Ci0gICAgZ2xVbmlmb3JtMWkocHJvZ3JhbS0+dGV4dHVyZVVuaWZvcm0oKSwgMCk7
Ci0gICAgY29uc3QgR0xmbG9hdCB0YXJnZXRWZXJ0aWNlc1tdID0gey0xLCAtMSwgMSwgLTEsIDEs
IDEsIC0xLCAxfTsKLSAgICBjb25zdCBHTGZsb2F0IHNvdXJjZVZlcnRpY2VzW10gPSB7MCwgMCwg
MSwgMCwgMSwgMSwgMCwgMX07Ci0gICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9n
cmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB0YXJnZXRWZXJ0
aWNlcykpOwotICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dGV4Q29v
cmRBdHRyaWIoKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCBzb3VyY2VWZXJ0aWNlcykpOwot
ICAgIEdMX0NNRChnbERpc2FibGUoR0xfQkxFTkQpKTsKLSAgICBHTF9DTUQoZ2xEcmF3QXJyYXlz
KEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpOwotICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRy
aWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbERpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigpKSk7CisgICAgbV9jb250
ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsK
KyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29v
cmRBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkUwKTsKKyAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+
KHNvdXJjZVRleHR1cmUpLmlkKCkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3Jh
bS0+dGV4dHVyZVVuaWZvcm0oKSwgMCk7CisgICAgY29uc3QgR0MzRGZsb2F0IHRhcmdldFZlcnRp
Y2VzW10gPSB7LTEsIC0xLCAxLCAtMSwgMSwgMSwgLTEsIDF9OworICAgIGNvbnN0IEdDM0RmbG9h
dCBzb3VyY2VWZXJ0aWNlc1tdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9OworICAgIG1fY29u
dGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBH
cmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHRhcmdldFZlcnRp
Y2VzKSk7CisgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dGV4
Q29vcmRBdHRyaWIoKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0Mz
RGludHB0cihzb3VyY2VWZXJ0aWNlcykpOworICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7CisgICAgbV9jb250ZXh0M0QtPmRpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250
ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigp
KTsKIH0KIAogUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBCaXRtYXBUZXh0dXJlR0w6OmFwcGx5
RmlsdGVycyhjb25zdCBCaXRtYXBUZXh0dXJlJiBjb250ZW50VGV4dHVyZSwgY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYgZmlsdGVycykKQEAgLTc2NSwxNyArNzE2LDE4IEBAIHZvaWQgQml0bWFwVGV4
dHVyZUdMOjppbml0aWFsaXplU3RlbmNpbCgpCiB7CiAgICAgaWYgKG1fcmJvKQogICAgICAgICBy
ZXR1cm47Ci0gICAgR0xfQ01EKGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9yYm8pKTsKLSAgICBH
TF9DTUQoZ2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9yYm8pKTsKKyAgICBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0Nv
bnRleHQzRCgpOworICAgIG1fcmJvID0gY29udGV4dDNELT5jcmVhdGVSZW5kZXJidWZmZXIoKTsK
KyAgICBjb250ZXh0M0QtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUiwgbV9yYm8pOwogI2lmZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgotICAgIEdMX0NNRChn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9TVEVOQ0lMX0lOREVYOCwg
bV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKSk7CisgICAgY29u
dGV4dDNELT5yZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVYOCwgbV90ZXh0dXJlU2l6ZS53aWR0
aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsKICNlbHNlCi0gICAgR0xfQ01EKGdsUmVuZGVy
YnVmZmVyU3RvcmFnZShHTF9SRU5ERVJCVUZGRVIsIEdMX0RFUFRIX1NURU5DSUwsIG1fdGV4dHVy
ZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSkpOworICAgIGNvbnRleHQzRC0+
cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3Rl
eHR1cmVTaXplLmhlaWdodCgpKTsKICNlbmRpZgotICAgIEdMX0NNRChnbEJpbmRSZW5kZXJidWZm
ZXIoR0xfUkVOREVSQlVGRkVSLCAwKSk7Ci0gICAgR0xfQ01EKGdsRnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVG
RkVSLCBtX3JibykpOwotICAgIEdMX0NNRChnbENsZWFyU3RlbmNpbCgwKSk7Ci0gICAgR0xfQ01E
KGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJfQklUKSk7CisgICAgY29udGV4dDNELT5iaW5kUmVu
ZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOworICAgIGNvbnRl
eHQzRC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSLCBtX3Jibyk7CisgICAgY29udGV4dDNELT5jbGVhclN0ZW5jaWwo
MCk7CisgICAgY29udGV4dDNELT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZG
RVJfQklUKTsKIH0KIAogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmNsZWFySWZOZWVkZWQoKQpAQCAt
NzgzLDEwICs3MzUsMTEgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmNsZWFySWZOZWVkZWQoKQog
ICAgIGlmICghbV9zaG91bGRDbGVhcikKICAgICAgICAgcmV0dXJuOwogCisgICAgR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0Qo
KTsKICAgICBtX2NsaXBTdGFjay5pbml0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV90ZXh0
dXJlU2l6ZSkpOwotICAgIG1fY2xpcFN0YWNrLmFwcGx5KCk7Ci0gICAgR0xfQ01EKGdsQ2xlYXJD
b2xvcigwLCAwLCAwLCAwKSk7Ci0gICAgR0xfQ01EKGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJ
VCkpOworICAgIG1fY2xpcFN0YWNrLmFwcGx5KGNvbnRleHQzRCk7CisgICAgY29udGV4dDNELT5j
bGVhckNvbG9yKDAsIDAsIDAsIDApOworICAgIGNvbnRleHQzRC0+Y2xlYXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOwogICAgIG1fc2hvdWxkQ2xlYXIgPSBmYWxzZTsKIH0K
IApAQCAtNzk1LDMzICs3NDgsMzYgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmNyZWF0ZUZib0lm
TmVlZGVkKCkKICAgICBpZiAobV9mYm8pCiAgICAgICAgIHJldHVybjsKIAotICAgIEdMX0NNRChn
bEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pKTsKLSAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKSk7Ci0gICAgR0xfQ01EKGdsRnJhbWVidWZmZXJUZXh0
dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJE
LCBpZCgpLCAwKSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVy
ZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBtX2ZibyA9IGNvbnRleHQzRC0+Y3Jl
YXRlRnJhbWVidWZmZXIoKTsKKyAgICBjb250ZXh0M0QtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICBjb250ZXh0M0QtPmZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
aWQoKSwgMCk7CiAgICAgbV9zaG91bGRDbGVhciA9IHRydWU7CiB9CiAKIHZvaWQgQml0bWFwVGV4
dHVyZUdMOjpiaW5kKCkKIHsKLSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJE
LCAwKSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBl
ci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBjb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKICAgICBjcmVhdGVGYm9JZk5lZWRlZCgpOwot
ICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pKTsKLSAg
ICBHTF9DTUQoZ2xWaWV3cG9ydCgwLCAwLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVy
ZVNpemUuaGVpZ2h0KCkpKTsKKyAgICBjb250ZXh0M0QtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICBjb250ZXh0M0QtPnZpZXdwb3J0
KDAsIDAsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CiAg
ICAgY2xlYXJJZk5lZWRlZCgpOwogICAgIG1fdGV4dHVyZU1hcHBlci0+ZGF0YSgpLnByb2plY3Rp
b25NYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KG1fdGV4dHVyZVNpemUsIHRydWUgLyog
bWlycm9yZWQgKi8pOwotICAgIG1fY2xpcFN0YWNrLmFwcGx5KCk7CisgICAgbV9jbGlwU3RhY2su
YXBwbHkoY29udGV4dDNEKTsKIH0KIAogQml0bWFwVGV4dHVyZUdMOjp+Qml0bWFwVGV4dHVyZUdM
KCkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0dXJlTWFwcGVy
LT5ncmFwaGljc0NvbnRleHQzRCgpOwogICAgIGlmIChtX2lkKQotICAgICAgICBHTF9DTUQoZ2xE
ZWxldGVUZXh0dXJlcygxLCAmbV9pZCkpOworICAgICAgICBjb250ZXh0M0QtPmRlbGV0ZVRleHR1
cmUobV9pZCk7CiAKICAgICBpZiAobV9mYm8pCi0gICAgICAgIEdMX0NNRChnbERlbGV0ZUZyYW1l
YnVmZmVycygxLCAmbV9mYm8pKTsKKyAgICAgICAgY29udGV4dDNELT5kZWxldGVGcmFtZWJ1ZmZl
cihtX2Zibyk7CiAKICAgICBpZiAobV9yYm8pCi0gICAgICAgIEdMX0NNRChnbERlbGV0ZVJlbmRl
cmJ1ZmZlcnMoMSwgJm1fcmJvKSk7CisgICAgICAgIGNvbnRleHQzRC0+ZGVsZXRlUmVuZGVyYnVm
ZmVyKG1fcmJvKTsKIH0KIAogYm9vbCBCaXRtYXBUZXh0dXJlR0w6OmlzVmFsaWQoKSBjb25zdApA
QCAtODQxLDExICs3OTcsMTEgQEAgVGV4dHVyZU1hcHBlckdMOjp+VGV4dHVyZU1hcHBlckdMKCkK
IAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJpbmREZWZhdWx0U3VyZmFjZSgpCiB7Ci0gICAgR0xf
Q01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBkYXRhKCkudGFyZ2V0RnJhbWVC
dWZmZXIpKTsKKyAgICBtX2NvbnRleHQzRC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKTsKICAgICBJbnRTaXpl
IHZpZXdwb3J0U2l6ZShkYXRhKCkudmlld3BvcnRbMl0sIGRhdGEoKS52aWV3cG9ydFszXSk7CiAg
ICAgZGF0YSgpLnByb2plY3Rpb25NYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KHZpZXdw
b3J0U2l6ZSwgZGF0YSgpLlBhaW50RmxhZ3MgJiBQYWludGluZ01pcnJvcmVkKTsKLSAgICBHTF9D
TUQoZ2xWaWV3cG9ydChkYXRhKCkudmlld3BvcnRbMF0sIGRhdGEoKS52aWV3cG9ydFsxXSwgdmll
d3BvcnRTaXplLndpZHRoKCksIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSkpOwotICAgIG1fY2xpcFN0
YWNrLmFwcGx5KCk7CisgICAgbV9jb250ZXh0M0QtPnZpZXdwb3J0KGRhdGEoKS52aWV3cG9ydFsw
XSwgZGF0YSgpLnZpZXdwb3J0WzFdLCB2aWV3cG9ydFNpemUud2lkdGgoKSwgdmlld3BvcnRTaXpl
LmhlaWdodCgpKTsKKyAgICBtX2NsaXBTdGFjay5hcHBseShtX2NvbnRleHQzRC5nZXQoKSk7CiAg
ICAgZGF0YSgpLmN1cnJlbnRTdXJmYWNlLmNsZWFyKCk7CiB9CiAKQEAgLTg3NSw3ICs4MzEsNyBA
QCBib29sIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5TY2lzc29yQ2xpcChjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBj
bGlwU3RhY2soKS5jdXJyZW50KCkuc2Npc3NvckJveC5pbnRlcnNlY3QocmVjdCk7Ci0gICAgY2xp
cFN0YWNrKCkuYXBwbHkoKTsKKyAgICBjbGlwU3RhY2soKS5hcHBseShtX2NvbnRleHQzRC5nZXQo
KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTg4OSwxMCArODQ1LDEwIEBAIHZvaWQgVGV4
dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVs
Vmlld01hdHJpeCwgY29uCiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+
IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2ltcGxlKTsK
IAotICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOwotICAgIEdMX0NNRChn
bEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAg
Y29uc3QgR0xmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9OwotICAg
IEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIs
IEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5pdFJlY3QpKTsKKyAgICBtX2NvbnRleHQzRC0+dXNl
UHJvZ3JhbShwcm9ncmFtLT5pZCgpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0
cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIGNvbnN0IEdDM0RmbG9hdCB1
bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9OworICAgIG1fY29udGV4dDNELT52
ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHVuaXRSZWN0KSk7CiAKICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCku
cHJvamVjdGlvbk1hdHJpeCkKICAgICAgICAgICAgIC5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgp
CkBAIC05MDEsMTQgKzg1NywxNCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogICAgICAgICAg
ICAgICAgIDAsIDAsIDEsIDAsCiAgICAgICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCksIHRhcmdl
dFJlY3QueSgpLCAwLCAxKSk7CiAKLSAgICBjb25zdCBHTGZsb2F0IG00W10gPSB7CisgICAgY29u
c3QgR0MzRGZsb2F0IG00W10gPSB7CiAgICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigp
LCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKICAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRy
aXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAogICAgICAgICBtYXRyaXgubTMx
KCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCiAgICAgICAgIG1h
dHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQogICAg
IH07CiAKLSAgICBjb25zdCBHTGZsb2F0IG00YWxsW10gPSB7CisgICAgY29uc3QgR0MzRGZsb2F0
IG00YWxsW10gPSB7CiAgICAgICAgIDIsIDAsIDAsIDAsCiAgICAgICAgIDAsIDIsIDAsIDAsCiAg
ICAgICAgIDAsIDAsIDEsIDAsCkBAIC05MTcsNDMgKzg3Myw0MiBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRy
aXgsIGNvbgogCiAgICAgaW50JiBzdGVuY2lsSW5kZXggPSBjbGlwU3RhY2soKS5jdXJyZW50KCku
c3RlbmNpbEluZGV4OwogCi0gICAgR0xfQ01EKGdsRW5hYmxlKEdMX1NURU5DSUxfVEVTVCkpOwor
ICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCk7
CiAKICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgZG8gYW55IGFjdHVhbCBkcmF3aW5nLgotICAg
IEdMX0NNRChnbFN0ZW5jaWxGdW5jKEdMX05FVkVSLCBzdGVuY2lsSW5kZXgsIHN0ZW5jaWxJbmRl
eCkpOworICAgIG1fY29udGV4dDNELT5zdGVuY2lsRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6TkVW
RVIsIHN0ZW5jaWxJbmRleCwgc3RlbmNpbEluZGV4KTsKIAogICAgIC8vIE9wZXJhdGUgb25seSBv
biB0aGUgc3RlbmNpbEluZGV4IGFuZCBhYm92ZS4KLSAgICBHTF9DTUQoZ2xTdGVuY2lsTWFzaygw
eGZmICYgfihzdGVuY2lsSW5kZXggLSAxKSkpOworICAgIG1fY29udGV4dDNELT5zdGVuY2lsTWFz
aygweGZmICYgfihzdGVuY2lsSW5kZXggLSAxKSk7CiAKICAgICAvLyBGaXJzdCBjbGVhciB0aGUg
ZW50aXJlIGJ1ZmZlciBhdCB0aGUgY3VycmVudCBpbmRleC4KLSAgICBHTF9DTUQoZ2xVbmlmb3Jt
TWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIEdMX0ZBTFNFLCBtNGFsbCkp
OwotICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9aRVJPLCBHTF9aRVJPLCBHTF9aRVJPKSk7Ci0g
ICAgR0xfQ01EKGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpKTsKKyAgICBtX2Nv
bnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBm
YWxzZSwgY29uc3RfY2FzdDxHQzNEZmxvYXQqPihtNGFsbCkpOworICAgIG1fY29udGV4dDNELT5z
dGVuY2lsT3AoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJP
LCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTyk7CisgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMo
R3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7CiAKICAgICAvLyBOb3cgYXBw
bHkgdGhlIGN1cnJlbnQgaW5kZXggdG8gdGhlIG5ldyBxdWFkLgotICAgIEdMX0NNRChnbFN0ZW5j
aWxPcChHTF9SRVBMQUNFLCBHTF9SRVBMQUNFLCBHTF9SRVBMQUNFKSk7Ci0gICAgR0xfQ01EKGds
VW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBHTF9GQUxTRSwg
bTQpKTsKLSAgICBHTF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpOwor
ICAgIG1fY29udGV4dDNELT5zdGVuY2lsT3AoR3JhcGhpY3NDb250ZXh0M0Q6OlJFUExBQ0UsIEdy
YXBoaWNzQ29udGV4dDNEOjpSRVBMQUNFLCBHcmFwaGljc0NvbnRleHQzRDo6UkVQTEFDRSk7Cisg
ICAgbV9jb250ZXh0M0QtPnVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+bWF0cml4TG9jYXRpb24o
KSwgMSwgZmFsc2UsIGNvbnN0X2Nhc3Q8R0MzRGZsb2F0Kj4obTQpKTsKKyAgICBtX2NvbnRleHQz
RC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKIAog
ICAgIC8vIENsZWFyIHRoZSBzdGF0ZS4KLSAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xTdGVuY2lsTWFz
aygwKSk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFt
LT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxNYXNrKDApOwogCiAg
ICAgLy8gSW5jcmVhc2Ugc3RlbmNpbEluZGV4IGFuZCBhcHBseSBzdGVuY2lsIHRlc3RpbmcuCiAg
ICAgc3RlbmNpbEluZGV4ICo9IDI7Ci0gICAgY2xpcFN0YWNrKCkuYXBwbHkoKTsKKyAgICBjbGlw
U3RhY2soKS5hcHBseShtX2NvbnRleHQzRC5nZXQoKSk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjplbmRDbGlwKCkKIHsKICAgICBjbGlwU3RhY2soKS5wb3AoKTsKLSAgICBjbGlwU3RhY2so
KS5hcHBseSgpOworICAgIGNsaXBTdGFjaygpLmFwcGx5KG1fY29udGV4dDNELmdldCgpKTsKIH0K
IAogUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRleHR1
cmUoKQogewotICAgIEJpdG1hcFRleHR1cmVHTCogdGV4dHVyZSA9IG5ldyBCaXRtYXBUZXh0dXJl
R0woKTsKLSAgICB0ZXh0dXJlLT5zZXRUZXh0dXJlTWFwcGVyKHRoaXMpOworICAgIEJpdG1hcFRl
eHR1cmVHTCogdGV4dHVyZSA9IG5ldyBCaXRtYXBUZXh0dXJlR0wodGhpcyk7CiAgICAgcmV0dXJu
IGFkb3B0UmVmKHRleHR1cmUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKaW5kZXggMDc2ZTY1Zjcz
Nzc2MjYxZjBhM2I5M2JiODU3M2E1MDVkZTljMDE3MC4uOGE3MmQ2N2FmOWVlZDJjZDZiOTBlZTgx
YTg1YzgyYTk4MDhlZDlkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaApAQCAtMjMsOCArMjMsOCBAQAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkZsb2F0UXVhZC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgot
I2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgogI2lu
Y2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKQEAgLTM4LDcgKzM4LDYgQEAgY2xhc3Mg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW07CiBjbGFzcyBUZXh0dXJlTWFwcGVyR0wgOiBwdWJs
aWMgVGV4dHVyZU1hcHBlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVy
ZU1hcHBlckdMPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlckdM
KTsgfQotICAgIFRleHR1cmVNYXBwZXJHTCgpOwogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJH
TCgpOwogCiAgICAgZW51bSBGbGFnIHsKQEAgLTU0LDcgKzUzLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBC
aXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKSBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgRmxhZ3Ms
IGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3Qs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNp
dHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlLCB1bnNpZ25lZCBleHBvc2VkRWRn
ZXMgPSBBbGxFZGdlcyk7CiAKLSNpZiBkZWZpbmVkKEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSkK
KyNpZiAhVVNFKFRFWE1BUF9PUEVOR0xfRVNfMikKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1
cmVSZWN0YW5nbGVBUkIodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MsIGNvbnN0IEludFNpemUmIHRl
eHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRl
eHR1cmUqIG1hc2tUZXh0dXJlKTsKICNlbmRpZgogCkBAIC02Niw2ICs2NSw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIEludFNpemUgbWF4VGV4dHVyZVNpemUoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBJbnRTaXplKDIwMDAsIDIwMDApOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1h
cFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIEdyYXBoaWNz
Q29udGV4dCogZ3JhcGhpY3NDb250ZXh0KCkgT1ZFUlJJREUgeyByZXR1cm4gbV9jb250ZXh0OyB9
CisgICAgaW5saW5lIEdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQzRCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGV4dDNELmdldCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldEdyYXBo
aWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpIE9WRVJSSURFIHsgbV9jb250ZXh0
ID0gY29udGV4dDsgfQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQpAQCAtNzUsNyArNzUsNiBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRFbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcoYm9v
bCBlbmFibGVkKSB7IG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nID0gZW5hYmxlZDsg
fQogCiBwcml2YXRlOgotCiAgICAgc3RydWN0IENsaXBTdGF0ZSB7CiAgICAgICAgIEludFJlY3Qg
c2Npc3NvckJveDsKICAgICAgICAgaW50IHN0ZW5jaWxJbmRleDsKQEAgLTg5LDcgKzg4LDcgQEAg
cHJpdmF0ZToKICAgICBwdWJsaWM6CiAgICAgICAgIHZvaWQgcHVzaCgpOwogICAgICAgICB2b2lk
IHBvcCgpOwotICAgICAgICB2b2lkIGFwcGx5KCk7CisgICAgICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0M0QqKTsKICAgICAgICAgaW5saW5lIENsaXBTdGF0ZSYgY3VycmVudCgpIHsgcmV0
dXJuIGNsaXBTdGF0ZTsgfQogICAgICAgICB2b2lkIGluaXQoY29uc3QgSW50UmVjdCYpOwogCkBA
IC0xMDksMTYgKzEwOCwxOSBAQCBwcml2YXRlOgogICAgICAgICBGbG9hdFF1YWQgdGFyZ2V0UmVj
dE1hcHBlZFRvVW5pdFNxdWFyZTsKICAgICB9OwogCisgICAgVGV4dHVyZU1hcHBlckdMKCk7CisK
ICAgICBib29sIGRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBG
bGFncywgY29uc3QgRmxvYXRSZWN0JiBvcmlnaW5hbFRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1h
cFRleHR1cmUqIG1hc2tUZXh0dXJlLCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpOwogICAgIHZvaWQg
ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiwg
dWludDMyX3QgdGV4dHVyZSwgRmxhZ3MsIGNvbnN0IERyYXdRdWFkJiwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFw
VGV4dHVyZSogbWFza1RleHR1cmUpOwotICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQm
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSosIEdMZW51bSBkcmF3aW5nTW9kZSwgYm9vbCBuZWVkc0JsZW5kaW5n
KTsKKyAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qLCBH
QzNEZW51bSBkcmF3aW5nTW9kZSwgYm9vbCBuZWVkc0JsZW5kaW5nKTsKIAogICAgIGJvb2wgYmVn
aW5TY2lzc29yQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVj
dCYpOwogICAgIHZvaWQgYmluZERlZmF1bHRTdXJmYWNlKCk7CiAgICAgQ2xpcFN0YWNrJiBjbGlw
U3RhY2soKTsKICAgICBpbmxpbmUgVGV4dHVyZU1hcHBlckdMRGF0YSYgZGF0YSgpIHsgcmV0dXJu
ICptX2RhdGE7IH0KLSAgICBUZXh0dXJlTWFwcGVyR0xEYXRhKiBtX2RhdGE7CiAgICAgR3JhcGhp
Y3NDb250ZXh0KiBtX2NvbnRleHQ7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2Nv
bnRleHQzRDsKKyAgICBUZXh0dXJlTWFwcGVyR0xEYXRhKiBtX2RhdGE7CiAgICAgQ2xpcFN0YWNr
IG1fY2xpcFN0YWNrOwogICAgIGJvb2wgbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmc7
CiAKQEAgLTEzNSw3ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbml0aWFsaXplU3RlbmNp
bCgpOwogICAgIH5CaXRtYXBUZXh0dXJlR0woKTsKICAgICB2aXJ0dWFsIHVpbnQzMl90IGlkKCkg
Y29uc3QgeyByZXR1cm4gbV9pZDsgfQotICAgIHVpbnQzMl90IHRleHR1cmVUYXJnZXQoKSBjb25z
dCB7IHJldHVybiBHTF9URVhUVVJFXzJEOyB9CisgICAgdWludDMyX3QgdGV4dHVyZVRhcmdldCgp
IGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOyB9CiAgICAgSW50
U2l6ZSB0ZXh0dXJlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVNpemU7IH0KICAgICB2
b2lkIHNldFRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlckdMKiB0ZXhtYXApIHsgbV90ZXh0dXJl
TWFwcGVyID0gdGV4bWFwOyB9CiAgICAgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNvbnN0
IEludFJlY3QmLCBjb25zdCBJbnRQb2ludCYpOwpAQCAtMTQ3LDIwICsxNDksMjIgQEAgcHVibGlj
OgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgR0x1aW50IG1faWQ7CisgICAgUGxhdGZvcm0zRE9i
amVjdCBtX2lkOwogICAgIEludFNpemUgbV90ZXh0dXJlU2l6ZTsKICAgICBJbnRSZWN0IG1fZGly
dHlSZWN0OwotICAgIEdMdWludCBtX2ZibzsKLSAgICBHTHVpbnQgbV9yYm87CisgICAgUGxhdGZv
cm0zRE9iamVjdCBtX2ZibzsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fcmJvOwogICAgIGJvb2wg
bV9zaG91bGRDbGVhcjsKLSAgICBUZXh0dXJlTWFwcGVyR0wqIG1fdGV4dHVyZU1hcHBlcjsKICAg
ICBUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjayBtX2NsaXBTdGFjazsKLSAgICBCaXRtYXBUZXh0
dXJlR0woKQorICAgIFRleHR1cmVNYXBwZXJHTCogbV90ZXh0dXJlTWFwcGVyOworCisgICAgQml0
bWFwVGV4dHVyZUdMKCk7CisgICAgQml0bWFwVGV4dHVyZUdMKFRleHR1cmVNYXBwZXJHTCogdGV4
dHVyZU1hcHBlcikKICAgICAgICAgOiBtX2lkKDApCiAgICAgICAgICwgbV9mYm8oMCkKICAgICAg
ICAgLCBtX3JibygwKQogICAgICAgICAsIG1fc2hvdWxkQ2xlYXIodHJ1ZSkKLSAgICAgICAgLCBt
X3RleHR1cmVNYXBwZXIoMCkKKyAgICAgICAgLCBtX3RleHR1cmVNYXBwZXIodGV4dHVyZU1hcHBl
cikKICAgICB7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
LmNwcAppbmRleCAwZmJkYmU5NWNhZjE2NDcwZGQwNjMyZjA0YzE0NGI4MjBiNmU4YmIzLi41NWFi
OGEzMDllYWY5YmQyY2I3YzU5N2MxN2Y3MWQzNGY4OWI4NjU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKQEAgLTMwLDI1ICszMCwxMSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSNpZm5kZWYgVEVYTUFQX09QRU5HTF9FU18yCi0jZGVmaW5lIE9FUzJf
UFJFQ0lTSU9OX0RFRklOSVRJT05TIFwKLSAgICAiI2RlZmluZSBsb3dwXG4jZGVmaW5lIGhpZ2hw
XG4iCi0jZGVmaW5lIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFVTFRfUFJFQ0lTSU9OCi0jZWxz
ZQotI2RlZmluZSBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9OUwotI2RlZmluZSBPRVMyX0ZSQUdN
RU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTiBcCi0gICAgInByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OyBcbiIKLSNlbmRpZgotCi0jZGVmaW5lIFNUUklOR0lGWV9WQUwoc3JjLi4uKSAjc3JjCi0j
ZGVmaW5lIFZFUlRFWF9TSEFERVIoc3JjLi4uKSBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9OU1wK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUklOR0lGWV9WQUwoc3JjKQotI2RlZmlu
ZSBGUkFHTUVOVF9TSEFERVIoc3JjLi4uKSBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9OU1wKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0VTMl9GUkFHTUVOVF9TSEFERVJfREVGQVVM
VF9QUkVDSVNJT05cCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUklOR0lGWV9W
QUwoc3JjKQorI2RlZmluZSBTVFJJTkdJRlkoc3JjLi4uKSAjc3JjCiAKIHN0YXRpYyBjb25zdCBj
aGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrID0KLSAgICBGUkFHTUVOVF9T
SEFERVIoCisgICAgU1RSSU5HSUZZKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsK
ICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zb3VyY2U7CiAgICAgICAgIHVuaWZvcm0gc2Ft
cGxlcjJEIHNfbWFzazsKICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKQEAg
LTY0LDcgKzUwLDggQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlT3Bh
Y2l0eUFuZE1hc2sgPQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRl
clNvdXJjZVJlY3RPcGFjaXR5QW5kTWFzayA9Ci0gICAgRlJBR01FTlRfU0hBREVSKAorICAgIFNU
UklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgIHVuaWZv
cm0gc2FtcGxlcjJEUmVjdCBzX3NvdXJjZTsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0
IHNfbWFzazsKICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKQEAgLTgwLDcg
KzY3LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdE9wYWNp
dHlBbmRNYXNrID0KICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291
cmNlT3BhY2l0eUFuZE1hc2sgPQotICAgIFZFUlRFWF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAog
ICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXg7CiAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9h
dCB1X2ZsaXA7CiAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwpAQCAtOTUsNyArODIs
OCBAQCBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sg
PQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVNpbXBs
ZSA9Ci0gICAgRlJBR01FTlRfU0hBREVSKAorICAgIFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lz
aW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwog
ICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwogICAgICAgICB2YXJ5aW5nIGhp
Z2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKQEAgLTEwNyw3ICs5NSw4IEBAIHN0YXRpYyBjb25z
dCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVNpbXBsZSA9CiAgICAgKTsKIAogc3RhdGljIGNv
bnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlQW50aWFsaWFzaW5nTm9NYXNrID0KLSAgICBG
UkFHTUVOVF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVt
cCBmbG9hdDsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zb3VyY2U7CiAgICAgICAgIHZh
cnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOwogICAgICAgICB1bmlmb3JtIGxvd3Ag
ZmxvYXQgdV9vcGFjaXR5OwpAQCAtMTQ1LDcgKzEzNCw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBm
cmFnbWVudFNoYWRlclNvdXJjZUFudGlhbGlhc2luZ05vTWFzayA9CiAgICAgKTsKIAogc3RhdGlj
IGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdFNpbXBsZSA9Ci0gICAgRlJBR01F
TlRfU0hBREVSKAorICAgIFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxv
YXQ7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX3NvdXJjZTsKICAgICAgICAgdW5p
Zm9ybSBsb3dwIHZlYzIgdV90ZXh0dXJlU2l6ZTsKICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0
IHVfb3BhY2l0eTsKQEAgLTE1OCw3ICsxNDgsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21l
bnRTaGFkZXJTb3VyY2VSZWN0U2ltcGxlID0KICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciog
dmVydGV4U2hhZGVyU291cmNlU2ltcGxlID0KLSAgICBWRVJURVhfU0hBREVSKAorICAgIFNUUklO
R0lGWSgKICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OwogICAgICAgICB1bmlmb3JtIGxv
d3AgZmxvYXQgdV9mbGlwOwogICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKQEAgLTE3
MSw3ICsxNjEsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlU2ltcGxl
ID0KICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlU29saWRD
b2xvciA9Ci0gICAgVkVSVEVYX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCiAgICAgICAgIHVuaWZv
cm0gbWF0NCB1X21hdHJpeDsKICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CiAgICAg
ICAgIHZvaWQgbWFpbih2b2lkKQpAQCAtMTgyLDcgKzE3Miw4IEBAIHN0YXRpYyBjb25zdCBjaGFy
KiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTb2xpZENvbG9yID0KIAogCiBzdGF0aWMgY29uc3QgY2hhciog
ZnJhZ21lbnRTaGFkZXJTb3VyY2VTb2xpZENvbG9yID0KLSAgICBWRVJURVhfU0hBREVSKAorICAg
IFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgIHVu
aWZvcm0gdmVjNCB1X2NvbG9yOwogICAgICAgICB2b2lkIG1haW4odm9pZCkKICAgICAgICAgewpA
QCAtMjEyLDIyICsyMDMsMjIgQEAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclByb2cKIAogICAgIHN3aXRj
aCAoc2hhZGVyVHlwZSkgewogICAgIGNhc2UgU2ltcGxlOgotICAgICAgICBwcm9ncmFtID0gVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OmNyZWF0ZSgpOworICAgICAgICBwcm9ncmFt
ID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OmNyZWF0ZShtX2NvbnRleHQpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIFJlY3RTaW1wbGU6Ci0gICAgICAgIHByb2dyYW0gPSBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmNyZWF0ZSgpOworICAgICAgICBw
cm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpjcmVhdGUobV9j
b250ZXh0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBbnRpYWxpYXNpbmdOb01hc2s6Ci0g
ICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05v
TWFzazo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbUFudGlhbGlhc2luZ05vTWFzazo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgT3BhY2l0eUFuZE1hc2s6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpjcmVhdGUoKTsKKyAgICAgICAgcHJvZ3Jh
bSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OmNyZWF0ZShtX2Nv
bnRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFJlY3RPcGFjaXR5QW5kTWFzazoKLSAg
ICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRN
YXNrOjpjcmVhdGUoKTsKKyAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpjcmVhdGUobV9jb250ZXh0KTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBTb2xpZENvbG9yOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1Tb2xpZENvbG9yOjpjcmVhdGUoKTsKKyAgICAgICAgcHJvZ3JhbSA9IFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgSW52YWxpZDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC0yMzYsOCArMjI3LDkgQEAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclByb2cKICAgICByZXR1
cm4gcHJvZ3JhbTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hh
ciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpCi0gICAgOiBtX2lkKDApCitUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJh
Z21lbnRTaGFkZXJTb3VyY2UpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1faWQo
MCkKICAgICAsIG1fdmVydGV4QXR0cmliKDApCiAgICAgLCBtX3ZlcnRleFNoYWRlcigwKQogICAg
ICwgbV9mcmFnbWVudFNoYWRlcigwKQpAQCAtMjU2LDQ2ICsyNDgsNDYgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbTo6aW5pdGlhbGl6ZVByb2dyYW0oKQogewogICAgIGNvbnN0IGNo
YXIqIHZlcnRleFNoYWRlclNvdXJjZVByb2dyYW0gPSB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKTsKICAg
ICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVByb2dyYW0gPSBmcmFnbWVudFNoYWRl
clNvdXJjZSgpOwotICAgIEdMdWludCB2ZXJ0ZXhTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9W
RVJURVhfU0hBREVSKTsKLSAgICBHTHVpbnQgZnJhZ21lbnRTaGFkZXIgPSBnbENyZWF0ZVNoYWRl
cihHTF9GUkFHTUVOVF9TSEFERVIpOwotICAgIGdsU2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwg
MSwgJnZlcnRleFNoYWRlclNvdXJjZVByb2dyYW0sIDApOwotICAgIGdsU2hhZGVyU291cmNlKGZy
YWdtZW50U2hhZGVyLCAxLCAmZnJhZ21lbnRTaGFkZXJTb3VyY2VQcm9ncmFtLCAwKTsKLSAgICBH
THVpbnQgcHJvZ3JhbUlEID0gZ2xDcmVhdGVQcm9ncmFtKCk7Ci0gICAgZ2xDb21waWxlU2hhZGVy
KHZlcnRleFNoYWRlcik7Ci0gICAgZ2xDb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVy
KEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0
IGZyYWdtZW50U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQUdNRU5UX1NIQURFUik7CisgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UodmVydGV4
U2hhZGVyLCB2ZXJ0ZXhTaGFkZXJTb3VyY2VQcm9ncmFtKTsKKyAgICBtX2NvbnRleHQtPnNoYWRl
clNvdXJjZShmcmFnbWVudFNoYWRlciwgZnJhZ21lbnRTaGFkZXJTb3VyY2VQcm9ncmFtKTsKKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCA9IG1fY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgp
OworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29u
dGV4dC0+Y29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CiAKLSAgICBnbEF0dGFjaFNoYWRl
cihwcm9ncmFtSUQsIHZlcnRleFNoYWRlcik7Ci0gICAgZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlE
LCBmcmFnbWVudFNoYWRlcik7Ci0gICAgZ2xMaW5rUHJvZ3JhbShwcm9ncmFtSUQpOworICAgIG1f
Y29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVydGV4U2hhZGVyKTsKKyAgICBtX2Nv
bnRleHQtPmF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVyKTsKKyAgICBtX2Nv
bnRleHQtPmxpbmtQcm9ncmFtKHByb2dyYW1JRCk7CiAKLSAgICBtX3ZlcnRleEF0dHJpYiA9IGds
R2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiYV92ZXJ0ZXgiKTsKKyAgICBtX3ZlcnRleEF0
dHJpYiA9IG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiYV92ZXJ0ZXgi
KTsKIAogICAgIG1faWQgPSBwcm9ncmFtSUQ7CiAgICAgbV92ZXJ0ZXhTaGFkZXIgPSB2ZXJ0ZXhT
aGFkZXI7CiAgICAgbV9mcmFnbWVudFNoYWRlciA9IGZyYWdtZW50U2hhZGVyOwogfQogCi12b2lk
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpnZXRVbmlmb3JtTG9jYXRpb24oR0xpbnQgJnZh
cmlhYmxlLCBjb25zdCBjaGFyKiBuYW1lKQordm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bTo6Z2V0VW5pZm9ybUxvY2F0aW9uKEdDM0RpbnQgJnZhcmlhYmxlLCBjb25zdCBjaGFyKiBuYW1l
KQogewotICAgIHZhcmlhYmxlID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9pZCwgbmFtZSk7Cisg
ICAgdmFyaWFibGUgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX2lkLCBuYW1lKTsK
ICAgICBBU1NFUlQodmFyaWFibGUgPj0gMCk7CiB9CiAKIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKQogewotICAgIEdMdWludCBwcm9ncmFt
SUQgPSBtX2lkOworICAgIFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbUlEID0gbV9pZDsKICAgICBp
ZiAoIXByb2dyYW1JRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZ2xEZXRhY2hTaGFkZXIocHJv
Z3JhbUlELCBtX3ZlcnRleFNoYWRlcik7Ci0gICAgZ2xEZWxldGVTaGFkZXIobV92ZXJ0ZXhTaGFk
ZXIpOwotICAgIGdsRGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV9mcmFnbWVudFNoYWRlcik7Ci0g
ICAgZ2xEZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7Ci0gICAgZ2xEZWxldGVQcm9ncmFt
KHByb2dyYW1JRCk7CisgICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIocHJvZ3JhbUlELCBtX3Zl
cnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIp
OworICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV9mcmFnbWVudFNoYWRl
cik7CisgICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7CisgICAg
bV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKHByb2dyYW1JRCk7CiB9CiAKLVRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpCi0g
ICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUs
IGZyYWdtZW50U2hhZGVyU291cmNlU2ltcGxlKQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1T
aW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0KQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVy
dGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRlclNvdXJjZVNpbXBsZSkKIHsKICAg
ICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX2ZsaXBMb2Nh
dGlvbiwgInVfZmxpcCIpOwpAQCAtMzA0LDE2ICsyOTYsMTYgQEAgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1TaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCkKICAgICBn
ZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRpb24sICJ1X29wYWNpdHkiKTsKIH0KIAot
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNvbGlkQ29sb3IoKQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odmVy
dGV4U2hhZGVyU291cmNlU29saWRDb2xvciwgZnJhZ21lbnRTaGFkZXJTb3VyY2VTb2xpZENvbG9y
KQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNvbGlkQ29sb3IoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTb2xp
ZENvbG9yLCBmcmFnbWVudFNoYWRlclNvdXJjZVNvbGlkQ29sb3IpCiB7CiAgICAgaW5pdGlhbGl6
ZVByb2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgInVf
bWF0cml4Iik7CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fY29sb3JMb2NhdGlvbiwgInVfY29s
b3IiKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0odmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRlclNvdXJjZVJl
Y3RTaW1wbGUpCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OlRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkK
KyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNv
dXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0U2ltcGxlKQogewogICAgIGluaXRp
YWxpemVQcm9ncmFtKCk7CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24s
ICJ1X21hdHJpeCIpOwpAQCAtMzIzLDggKzMxNSw4IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtUmVjdFNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKCkKICAg
ICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRpb24sICJ1X29wYWNpdHkiKTsKIH0K
IAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRTaGFkZXJT
b3VyY2VPcGFjaXR5QW5kTWFzaykKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFu
ZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250
ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRTaGFkZXJTb3Vy
Y2VPcGFjaXR5QW5kTWFzaykKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVu
aWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKQEAgLTMzNCw4ICsz
MjYsOCBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYQogICAgIGdldFVuaWZvcm1Mb2NhdGlvbiht
X29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0
T3BhY2l0eUFuZE1hc2soKQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odmVydGV4
U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdE9wYWNp
dHlBbmRNYXNrKQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0KQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4
dCwgdmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291cmNl
UmVjdE9wYWNpdHlBbmRNYXNrKQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAgZ2V0
VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwpAQCAtMzQ1LDgg
KzMzNyw4IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjCiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9u
KG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFu
dGlhbGlhc2luZ05vTWFzaygpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0
ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291cmNlQW50aWFsaWFzaW5nTm9N
YXNrKQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OlRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0KQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVy
dGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRlclNvdXJjZUFudGlhbGlhc2luZ05v
TWFzaykKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVuaWZvcm1Mb2NhdGlv
bihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKQEAgLTM1Niw5ICszNDgsOSBAQCBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1BbnRpYWxpYQogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX2ZsaXBMb2NhdGlv
biwgInVfZmxpcCIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIoKQorVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDogbV9j
b250ZXh0KGNvbnRleHQpCiB7Ci0gICAgQVNTRVJUKGluaXRpYWxpemVPcGVuR0xTaGltcygpKTsK
IH0KIAogVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6On5UZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcigpCkBAIC0zNzMsMTggKzM2NSwxOSBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
flRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkKIAogU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp+
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKCkKIHsKLSAgICBnbERldGFjaFNoYWRlcihtX2lkLCBtX3Zl
cnRleFNoYWRlcik7Ci0gICAgZ2xEZWxldGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIpOwotICAgIGds
RGV0YWNoU2hhZGVyKG1faWQsIG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsRGVsZXRlU2hhZGVy
KG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsRGVsZXRlUHJvZ3JhbShtX2lkKTsKKyAgICBtX2Nv
bnRleHQtPmRldGFjaFNoYWRlcihtX2lkLCBtX3ZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0
LT5kZWxldGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGV0YWNoU2hh
ZGVyKG1faWQsIG1fZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVy
KG1fZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX2lkKTsK
IH0KIAotU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVy
T3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUsIHVuc2lnbmVkIHBhc3MpCi0gICAgOiBtX2lk
KDApCitTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUs
IHVuc2lnbmVkIHBhc3MpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1faWQoMCkK
IHsKICAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPQotICAgICAgICAgICAgVkVS
VEVYX1NIQURFUigKKyAgICAgICAgICAgIFNUUklOR0lGWSgKICAgICAgICAgICAgICAgICBhdHRy
aWJ1dGUgdmVjNCBhX3ZlcnRleDsKICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3Rl
eENvb3JkOwogICAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOwpA
QCAtMzk2LDggKzM4OSw3IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQ
cm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgICAgICAp
OwogCiAjZGVmaW5lIFNUQU5EQVJEX0ZJTFRFUih4Li4uKSBcCi0gICAgICAgIE9FUzJfUFJFQ0lT
SU9OX0RFRklOSVRJT05TXAotICAgICAgICBPRVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BS
RUNJU0lPTlwKKyAgICAgICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuIlwKICAgICAgICAg
InZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkO1xuIlwKICAgICAgICAgInVuaWZvcm0gaGln
aHAgZmxvYXQgdV9hbW91bnQ7XG4iXAogICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0
dXJlO1xuIlwKQEAgLTQwOCw5ICs0MDAsOSBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5k
YXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAg
IHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6CiAg
ICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAg
ICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKKyAgICAgICAgICAgIHZlYzQgc2hh
ZGUodmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb3dwIGZsb2F0
IGFtb3VudCA9IDEuMCAtIHVfYW1vdW50OworICAgICAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9
IDEuMCAtIHVfYW1vdW50OwogICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KCgwLjIxMjYgKyAw
Ljc4NzQgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgLSAwLjcxNTIgKiBhbW91bnQpICog
Y29sb3IuZyArICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91bnQpICogY29sb3IuYiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50KSAqIGNvbG9yLnIg
KyAoMC43MTUyICsgMC4yODQ4ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIy
ICogYW1vdW50KSAqIGNvbG9yLmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjEy
NiAtIDAuMjEyNiAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFtb3Vu
dCkgKiBjb2xvci5nICsgKDAuMDcyMiArIDAuOTI3OCAqIGFtb3VudCkgKiBjb2xvci5iLApAQCAt
NDIwLDkgKzQxMiw5IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9n
cmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKICAgICAgICAgZnJhZ21lbnRTaGFkZXJT
b3VyY2UgPSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93
cCB2ZWM0IGNvbG9yKQorICAgICAgICAgICAgdmVjNCBzaGFkZSh2ZWM0IGNvbG9yKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9hbW91
bnQ7CisgICAgICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9hbW91bnQ7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHZlYzQoKDAuMzkzICsgMC42MDcgKiBhbW91bnQpICogY29sb3Iu
ciArICgwLjc2OSAtIDAuNzY5ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xODkgLSAwLjE4OSAq
IGFtb3VudCkgKiBjb2xvci5iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjM0OSAt
IDAuMzQ5ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC42ODYgKyAwLjMxNCAqIGFtb3VudCkgKiBj
b2xvci5nICsgKDAuMTY4IC0gMC4xNjggKiBhbW91bnQpICogY29sb3IuYiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoMC4yNzIgLSAwLjI3MiAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAu
NTM0IC0gMC41MzQgKiBhbW91bnQpICogY29sb3IuZyArICgwLjEzMSArIDAuODY5ICogYW1vdW50
KSAqIGNvbG9yLmIsCkBAIC00MzIsNyArNDI0LDcgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpT
dGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgogICAg
ICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgICAg
IGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgICAgICB2ZWM0IHNoYWRl
KHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQo
KDAuMjEzICsgMC43ODcgKiB1X2Ftb3VudCkgKiBjb2xvci5yICsgKDAuNzE1IC0gMC43MTUgKiB1
X2Ftb3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIgKiB1X2Ftb3VudCkgKiBjb2xvci5i
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjIxMyAtIDAuMjEzICogdV9hbW91bnQp
ICogY29sb3IuciArICgwLjcxNSArIDAuMjg1ICogdV9hbW91bnQpICogY29sb3IuZyArICgwLjA3
MiAtIDAuMDcyICogdV9hbW91bnQpICogY29sb3IuYiwKQEAgLTQ0MywxMSArNDM1LDExIEBAIFN0
YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlv
bjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpIVUVfUk9UQVRFOgogICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUQU5E
QVJEX0ZJTFRFUigKLSAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3Ip
CisgICAgICAgICAgICB2ZWM0IHNoYWRlKHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaGlnaHAgZmxvYXQgcGkgPSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2OwotICAg
ICAgICAgICAgICAgIGhpZ2hwIGZsb2F0IGMgPSBjb3ModV9hbW91bnQgKiBwaSAvIDE4MC4wKTsK
LSAgICAgICAgICAgICAgICBoaWdocCBmbG9hdCBzID0gc2luKHVfYW1vdW50ICogcGkgLyAxODAu
MCk7CisgICAgICAgICAgICAgICAgZmxvYXQgcGkgPSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2Owor
ICAgICAgICAgICAgICAgIGZsb2F0IGMgPSBjb3ModV9hbW91bnQgKiBwaSAvIDE4MC4wKTsKKyAg
ICAgICAgICAgICAgICBmbG9hdCBzID0gc2luKHVfYW1vdW50ICogcGkgLyAxODAuMCk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3IuciAqICgwLjIxMyArIGMgKiAwLjc4NyAtIHMg
KiAwLjIxMykgKyBjb2xvci5nICogKDAuNzE1IC0gYyAqIDAuNzE1IC0gcyAqIDAuNzE1KSArIGNv
bG9yLmIgKiAoMC4wNzIgLSBjICogMC4wNzIgKyBzICogMC45MjgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbG9yLnIgKiAoMC4yMTMgLSBjICogMC4yMTMgKyBzICogMC4xNDMpICsg
Y29sb3IuZyAqICgwLjcxNSArIGMgKiAwLjI4NSArIHMgKiAwLjE0MCkgKyBjb2xvci5iICogKDAu
MDcyIC0gYyAqIDAuMDcyIC0gcyAqIDAuMjgzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb2xvci5yICogKDAuMjEzIC0gYyAqIDAuMjEzIC0gcyAqIDAuNzg3KSArICBjb2xvci5nICog
KDAuNzE1IC0gYyAqIDAuNzE1ICsgcyAqIDAuNzE1KSArIGNvbG9yLmIgKiAoMC4wNzIgKyBjICog
MC45MjggKyBzICogMC4wNzIpLApAQCAtNDU3LDggKzQ0OSw4IEBAIFN0YW5kYXJkRmlsdGVyUHJv
Z3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlw
ZSB0eXBlCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6
CiAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRBUkRfRklMVEVSKAotICAgICAg
ICAgICAgbG93cCBmbG9hdCBpbnZlcnQobG93cCBmbG9hdCBuKSB7IHJldHVybiAoMS4wIC0gbikg
KiB1X2Ftb3VudCArIG4gKiAoMS4wIC0gdV9hbW91bnQpOyB9Ci0gICAgICAgICAgICBsb3dwIHZl
YzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICAgICAgZmxvYXQgaW52ZXJ0KGZsb2F0
IG4pIHsgcmV0dXJuICgxLjAgLSBuKSAqIHVfYW1vdW50ICsgbiAqICgxLjAgLSB1X2Ftb3VudCk7
IH0KKyAgICAgICAgICAgIHZlYzQgc2hhZGUodmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gdmVjNChpbnZlcnQoY29sb3IuciksIGludmVydChjb2xvci5n
KSwgaW52ZXJ0KGNvbG9yLmIpLCBjb2xvci5hKTsKICAgICAgICAgICAgIH0KQEAgLTQ2Niw3ICs0
NTgsNyBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0
ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICBicmVhazsKICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UgPSBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2
ZWM0IGNvbG9yKQorICAgICAgICAgICAgdmVjNCBzaGFkZSh2ZWM0IGNvbG9yKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KGNvbG9yLnJnYiAqICgxLjAgKyB1X2Ft
b3VudCksIGNvbG9yLmEpOwogICAgICAgICAgICAgfQpAQCAtNDc0LDggKzQ2Niw4IEBAIFN0YW5k
YXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6
T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpDT05UUkFTVDoKICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVEFOREFSRF9G
SUxURVIoCi0gICAgICAgICAgICBsb3dwIGZsb2F0IGNvbnRyYXN0KGxvd3AgZmxvYXQgbikgeyBy
ZXR1cm4gKG4gLSAwLjUpICogdV9hbW91bnQgKyAwLjU7IH0KLSAgICAgICAgICAgIGxvd3AgdmVj
NCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgICAgICBmbG9hdCBjb250cmFzdChmbG9h
dCBuKSB7IHJldHVybiAobiAtIDAuNSkgKiB1X2Ftb3VudCArIDAuNTsgfQorICAgICAgICAgICAg
dmVjNCBzaGFkZSh2ZWM0IGNvbG9yKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiB2ZWM0KGNvbnRyYXN0KGNvbG9yLnIpLCBjb250cmFzdChjb2xvci5nKSwgY29udHJhc3Qo
Y29sb3IuYiksIGNvbG9yLmEpOwogICAgICAgICAgICAgfQpAQCAtNDgzLDIwICs0NzUsMjEgQEAg
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0
aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246Ok9QQUNJVFk6CiAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RBTkRB
UkRfRklMVEVSKAotICAgICAgICAgICAgbG93cCB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikK
KyAgICAgICAgICAgIHZlYzQgc2hhZGUodmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gdmVjNChjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5h
ICogdV9hbW91bnQpOwogICAgICAgICAgICAgfQogICAgICAgICApOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKLSAgICAgICAgZnJhZ21lbnRTaGFkZXJT
b3VyY2UgPSBGUkFHTUVOVF9TSEFERVIoCisgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0g
U1RSSU5HSUZZKAorICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAg
ICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKICAgICAgICAgICAgIHVuaWZvcm0g
bG93cCB2ZWMyIHVfYmx1clJhZGl1czsKICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVf
dGV4dHVyZTsKICAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtHQVVT
U0lBTl9LRVJORUxfSEFMRl9XSURUSF07CiAKLSAgICAgICAgICAgIGxvd3AgdmVjNCBzYW1wbGVD
b2xvcihmbG9hdCByYWRpdXMpCisgICAgICAgICAgICB2ZWM0IHNhbXBsZUNvbG9yKGZsb2F0IHJh
ZGl1cykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhD
b29yZCArIHJhZGl1cyAqIHVfYmx1clJhZGl1czsKICAgICAgICAgICAgICAgICByZXR1cm4gdGV4
dHVyZTJEKHVfdGV4dHVyZSwgY29vcmQpICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkg
PiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKQEAgLTUyMywyMCArNTE2LDIx
IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9w
ZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgIHN3aXRjaCAocGFzcykgewogICAg
ICAgICBjYXNlIDA6IHsKICAgICAgICAgICAgIC8vIEZpcnN0IHBhc3M6IGhvcml6b250YWwgYWxw
aGEgYmx1ci4KLSAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gRlJBR01FTlRfU0hB
REVSKAorICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVFJJTkdJRlkoCisgICAg
ICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgICAgICAgICAgdmFy
eWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7CiAgICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dw
IGZsb2F0IHVfc2hhZG93Qmx1clJhZGl1czsKICAgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3Ag
dmVjMiB1X3NoYWRvd09mZnNldDsKICAgICAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1
X3RleHR1cmU7CiAgICAgICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVs
W0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKIAotICAgICAgICAgICAgICAgIGxvd3AgZmxv
YXQgc2FtcGxlQWxwaGEoZmxvYXQgcmFkaXVzKQorICAgICAgICAgICAgICAgIGZsb2F0IHNhbXBs
ZUFscGhhKGZsb2F0IHJhZGl1cykKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgIHZlYzIgY29vcmQgPSB2X3RleENvb3JkIC0gdV9zaGFkb3dPZmZzZXQgKyB2ZWMyKHJhZGl1
cyAqIHVfc2hhZG93Qmx1clJhZGl1cywgMC4pOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGV4dHVyZTJEKHVfdGV4dHVyZSwgY29vcmQpLmEgKiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29v
cmQueSA+IDAuICYmIGNvb3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOwogICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIGxvd3AgZmxvYXQgc2hhZG93Qmx1ckhvcml6b250YWwo
KQorICAgICAgICAgICAgICAgIGZsb2F0IHNoYWRvd0JsdXJIb3Jpem9udGFsKCkKICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHRvdGFsID0gc2FtcGxlQWxwaGEo
MCkgKiB1X2dhdXNzaWFuS2VybmVsWzBdOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBp
ID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKQEAgLTU1Niw3ICs1
NTAsOCBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0
ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICAgICAgfQogICAgICAgICBj
YXNlIDE6IHsKICAgICAgICAgICAgIC8vIFNlY29uZCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBibHVy
IGFuZCBjb21wb3NpdGUgd2l0aCBvcmlnaW4uCi0gICAgICAgICAgICBmcmFnbWVudFNoYWRlclNv
dXJjZSA9IEZSQUdNRU5UX1NIQURFUigKKyAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNl
ID0gU1RSSU5HSUZZKAorICAgICAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0Owog
ICAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOwogICAgICAgICAg
ICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X3NoYWRvd0JsdXJSYWRpdXM7CiAgICAgICAgICAg
ICAgICAgdW5pZm9ybSBsb3dwIHZlYzQgdV9zaGFkb3dDb2xvcjsKQEAgLTU2NCwxMyArNTU5LDEz
IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9w
ZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgICAgICAgICAgdW5pZm9ybSBzYW1w
bGVyMkQgdV9jb250ZW50VGV4dHVyZTsKICAgICAgICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVf
Z2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOwogCi0gICAgICAgICAg
ICAgICAgbG93cCBmbG9hdCBzYW1wbGVBbHBoYShmbG9hdCByKQorICAgICAgICAgICAgICAgIGZs
b2F0IHNhbXBsZUFscGhhKGZsb2F0IHIpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCArIHZlYzIoMC4sIHIgKiB1X3NoYWRvd0Js
dXJSYWRpdXMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHVfdGV4dHVy
ZSwgY29vcmQpLmEgKiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3Jk
LnggPCAxLiAmJiBjb29yZC55IDwgMS4pOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIGxvd3AgZmxvYXQgc2hhZG93Qmx1clZlcnRpY2FsKCkKKyAgICAgICAgICAgICAgICBm
bG9hdCBzaGFkb3dCbHVyVmVydGljYWwoKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgZmxvYXQgdG90YWwgPSBzYW1wbGVBbHBoYSgwKSAqIHVfZ2F1c3NpYW5LZXJuZWxb
MF07CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgR0FVU1NJQU5fS0VS
TkVMX0hBTEZfV0lEVEg7IGkrKykgewpAQCAtNTgxLDcgKzU3Niw3IEBAIFN0YW5kYXJkRmlsdGVy
UHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9u
VHlwZSB0eXBlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbDsKICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICBsb3dwIHZlYzQgc291cmNlT3Zlcihsb3dwIHZlYzQg
c291cmNlLCBsb3dwIHZlYzQgZGVzdGluYXRpb24pCisgICAgICAgICAgICAgICAgdmVjNCBzb3Vy
Y2VPdmVyKHZlYzQgc291cmNlLCB2ZWM0IGRlc3RpbmF0aW9uKQogICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gQ29tcG9zaXRlIHRoZSBzaGFkb3cgd2l0aCB0aGUgb3Jp
Z2luYWwgdGV4dHVyZS4KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZSArIGRlc3Rp
bmF0aW9uICogKDEuIC0gc291cmNlLmEpOwpAQCAtNjAyLDI2ICs1OTcsMjUgQEAgU3RhbmRhcmRG
aWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVy
YXRpb25UeXBlIHR5cGUKIAogICAgIGlmICghZnJhZ21lbnRTaGFkZXJTb3VyY2UpCiAgICAgICAg
IHJldHVybjsKLSAgICBHTHVpbnQgdmVydGV4U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfVkVS
VEVYX1NIQURFUik7Ci0gICAgR0x1aW50IGZyYWdtZW50U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIo
R0xfRlJBR01FTlRfU0hBREVSKTsKLSAgICBnbFNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEs
ICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsIDApOwotICAgIGdsU2hhZGVyU291cmNlKGZyYWdtZW50U2hh
ZGVyLCAxLCAmZnJhZ21lbnRTaGFkZXJTb3VyY2UsIDApOwotICAgIEdMdWludCBwcm9ncmFtSUQg
PSBnbENyZWF0ZVByb2dyYW0oKTsKLSAgICBnbENvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsK
LSAgICBnbENvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgIFBsYXRmb3JtM0RPYmpl
Y3QgdmVydGV4U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OlZFUlRFWF9TSEFERVIpOworICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIg
PSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hB
REVSKTsKKyAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNo
YWRlclNvdXJjZSk7CisgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIs
IGZyYWdtZW50U2hhZGVyU291cmNlKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCA9
IG1fY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRl
cih2ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihmcmFnbWVudFNo
YWRlcik7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgIEdMY2hhciBsb2dbMTAwXTsKLSAgICBHTGlu
dCBsZW47Ci0gICAgZ2xHZXRTaGFkZXJJbmZvTG9nKGZyYWdtZW50U2hhZGVyLCAxMDAsICZsZW4s
IGxvZyk7CisgICAgU3RyaW5nIGxvZzsKKyAgICBtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2co
ZnJhZ21lbnRTaGFkZXIpOwogICAgIFdURkxvZygmTG9nQ29tcG9zaXRpbmcsICIlc1xuIiwgbG9n
KTsKICNlbmRpZgotICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVydGV4U2hhZGVyKTsK
LSAgICBnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVyKTsKLSAgICBnbExp
bmtQcm9ncmFtKHByb2dyYW1JRCk7CisgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIocHJvZ3Jh
bUlELCB2ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW1J
RCwgZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0ocHJvZ3JhbUlE
KTsKIAotICAgIG1fdmVydGV4QXR0cmliID0gZ2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQs
ICJhX3ZlcnRleCIpOwotICAgIG1fdGV4Q29vcmRBdHRyaWIgPSBnbEdldEF0dHJpYkxvY2F0aW9u
KHByb2dyYW1JRCwgImFfdGV4Q29vcmQiKTsKLSAgICBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb24g
PSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3RleHR1cmUiKTsKKyAgICBtX3Zl
cnRleEF0dHJpYiA9IG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiYV92
ZXJ0ZXgiKTsKKyAgICBtX3RleENvb3JkQXR0cmliID0gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2Nh
dGlvbihwcm9ncmFtSUQsICJhX3RleENvb3JkIik7CisgICAgbV90ZXh0dXJlVW5pZm9ybUxvY2F0
aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV90ZXh0dXJl
Iik7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlT
Q0FMRToKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CkBAIC02MzEsMjEgKzYyNSwy
MSBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJP
cGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpC
UklHSFRORVNTOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmFt
b3VudCA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfYW1vdW50Iik7CisgICAg
ICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2Nh
dGlvbihwcm9ncmFtSUQsICJ1X2Ftb3VudCIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6QkxVUjoKLSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmJsdXIucmFk
aXVzID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9ibHVyUmFkaXVzIik7Ci0g
ICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLmdhdXNzaWFuS2VybmVsID0gZ2xHZXRVbmlm
b3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9nYXVzc2lhbktlcm5lbCIpOworICAgICAgICBtX3Vu
aWZvcm1Mb2NhdGlvbnMuYmx1ci5yYWRpdXMgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlv
bihwcm9ncmFtSUQsICJ1X2JsdXJSYWRpdXMiKTsKKyAgICAgICAgbV91bmlmb3JtTG9jYXRpb25z
LmJsdXIuZ2F1c3NpYW5LZXJuZWwgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9n
cmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKLSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNo
YWRvdy5ibHVyUmFkaXVzID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFk
b3dCbHVyUmFkaXVzIik7Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3Np
YW5LZXJuZWwgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFuS2Vy
bmVsIik7CisgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1cyA9IG1f
Y29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93Qmx1clJhZGl1
cyIpOworICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsID0g
bV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9nYXVzc2lhbktlcm5l
bCIpOwogICAgICAgICBpZiAoIXBhc3MpCi0gICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMu
c2hhZG93Lm9mZnNldCA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93
T2Zmc2V0Iik7CisgICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93Lm9mZnNldCA9
IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93T2Zmc2V0
Iik7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSBjb2xv
ciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBpbiB0aGUgc2Vjb25kIHBhc3MsIHRoZSBmaXJzdCBw
YXNzIGlzIG9ubHkgYSBob3Jpem9udGFsIGFscGhhIGJsdXIuCi0gICAgICAgICAgICBtX3VuaWZv
cm1Mb2NhdGlvbnMuc2hhZG93LmNvbG9yID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlE
LCAidV9zaGFkb3dDb2xvciIpOwotICAgICAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRv
dy5jb250ZW50VGV4dHVyZSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfY29u
dGVudFRleHR1cmUiKTsKKyAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29s
b3IgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3NoYWRvd0Nv
bG9yIik7CisgICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbnRlbnRUZXh0
dXJlID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9jb250ZW50
VGV4dHVyZSIpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC02
NTYsOSArNjUwLDkgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dy
YW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICBtX2ZyYWdtZW50U2hh
ZGVyID0gZnJhZ21lbnRTaGFkZXI7CiB9CiAKLVBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9n
cmFtPiBTdGFuZGFyZEZpbHRlclByb2dyYW06OmNyZWF0ZShGaWx0ZXJPcGVyYXRpb246Ok9wZXJh
dGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKK1Bhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQ
cm9ncmFtPiBTdGFuZGFyZEZpbHRlclByb2dyYW06OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUsIHVuc2lnbmVkIHBh
c3MpCiB7Ci0gICAgUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGFkb3B0
UmVmKG5ldyBTdGFuZGFyZEZpbHRlclByb2dyYW0odHlwZSwgcGFzcykpOworICAgIFJlZlB0cjxT
dGFuZGFyZEZpbHRlclByb2dyYW0+IHByb2dyYW0gPSBhZG9wdFJlZihuZXcgU3RhbmRhcmRGaWx0
ZXJQcm9ncmFtKGNvbnRleHQsIHR5cGUsIHBhc3MpKTsKICAgICBpZiAoIXByb2dyYW0tPm1faWQp
CiAgICAgICAgIHJldHVybiAwOwogCkBAIC02OTQsMjEgKzY4OCwyMSBAQCBzdGF0aWMgZmxvYXQq
IGdhdXNzaWFuS2VybmVsKCkKICAgICByZXR1cm4ga2VybmVsOwogfQogCi12b2lkIFN0YW5kYXJk
RmlsdGVyUHJvZ3JhbTo6cHJlcGFyZShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwg
dW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0x1aW50IGNvbnRlbnRUZXh0dXJl
KQordm9pZCBTdGFuZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0
aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHBhc3MsIGNvbnN0IEludFNpemUmIHNpemUsIEdDM0R1
aW50IGNvbnRlbnRUZXh0dXJlKQogewotICAgIGdsVXNlUHJvZ3JhbShtX2lkKTsKKyAgICBtX2Nv
bnRleHQtPnVzZVByb2dyYW0obV9pZCk7CiAgICAgc3dpdGNoIChvcGVyYXRpb24uZ2V0T3BlcmF0
aW9uVHlwZSgpKSB7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNB
VFVSQVRFOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgotICAgICAgICBn
bFVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuYW1vdW50LCBzdGF0aWNfY2FzdDxjb25zdCBC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7Cisg
ICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0
YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRp
b24pLmFtb3VudCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OklOVkVSVDoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9Q
QUNJVFk6Ci0gICAgICAgIGdsVW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0
YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihv
cGVyYXRpb24pLmFtb3VudCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobV91bmlm
b3JtTG9jYXRpb25zLmFtb3VudCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFu
c2ZlckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewogICAgICAgICBjb25zdCBCbHVy
RmlsdGVyT3BlcmF0aW9uJiBibHVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZpbHRlck9wZXJh
dGlvbiY+KG9wZXJhdGlvbik7CkBAIC03MjAsOCArNzE0LDggQEAgdm9pZCBTdGFuZGFyZEZpbHRl
clByb2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2ln
bmVkIHAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmFkaXVzLnNldFdpZHRoKGZsb2F0VmFs
dWVGb3JMZW5ndGgoYmx1ci5zdGREZXZpYXRpb24oKSwgc2l6ZS53aWR0aCgpKSAvIHNpemUud2lk
dGgoKSk7CiAKLSAgICAgICAgZ2xVbmlmb3JtMmYobV91bmlmb3JtTG9jYXRpb25zLmJsdXIucmFk
aXVzLCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKTsKLSAgICAgICAgZ2xVbmlmb3Jt
MWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJO
RUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7CisgICAgICAgIG1fY29udGV4dC0+dW5p
Zm9ybTJmKG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLnJhZGl1cywgcmFkaXVzLndpZHRoKCksIHJh
ZGl1cy5oZWlnaHQoKSk7CisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihtX3VuaWZvcm1M
b2NhdGlvbnMuYmx1ci5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgs
IGdhdXNzaWFuS2VybmVsKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7CkBAIC03MjksMjAgKzcyMywyMCBAQCB2b2lkIFN0
YW5kYXJkRmlsdGVyUHJvZ3JhbTo6cHJlcGFyZShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJh
dGlvbiwgdW5zaWduZWQgcAogICAgICAgICBzd2l0Y2ggKHBhc3MpIHsKICAgICAgICAgY2FzZSAw
OgogICAgICAgICAgICAgLy8gRmlyc3QgcGFzczogdmVydGljYWwgYWxwaGEgYmx1ci4KLSAgICAg
ICAgICAgIGdsVW5pZm9ybTJmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cub2Zmc2V0LCBmbG9h
dChzaGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwgZmxvYXQoc2hh
ZG93LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAg
IGdsVW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1cywgc2hhZG93
LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSk7Ci0gICAgICAgICAgICBnbFVu
aWZvcm0xZnYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCwgR0FVU1NJ
QU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOworICAgICAgICAgICAgbV9j
b250ZXh0LT51bmlmb3JtMmYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5vZmZzZXQsIGZsb2F0
KHNoYWRvdy5sb2NhdGlvbigpLngoKSkgLyBmbG9hdChzaXplLndpZHRoKCkpLCBmbG9hdChzaGFk
b3cubG9jYXRpb24oKS55KCkpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAgICAg
bV9jb250ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVz
LCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLndpZHRoKCkpKTsKKyAgICAgICAg
ICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNz
aWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgLy8gU2Vj
b25kIHBhc3M6IHdlIG5lZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVy
ZSBmb3IgY29tcG9zaXRpbmcuCi0gICAgICAgICAgICBnbFVuaWZvcm0xZihtX3VuaWZvcm1Mb2Nh
dGlvbnMuc2hhZG93LmJsdXJSYWRpdXMsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNp
emUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGdsVW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlv
bnMuc2hhZG93LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1
c3NpYW5LZXJuZWwoKSk7Ci0gICAgICAgICAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEp
OwotICAgICAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBjb250ZW50VGV4dHVy
ZSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm0xaShtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNv
bnRlbnRUZXh0dXJlLCAxKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1fdW5p
Zm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1cywgc2hhZG93LnN0ZERldmlhdGlvbigpIC8g
ZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2
KG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwsIEdBVVNTSUFOX0tFUk5F
TF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+
YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpOworICAgICAgICAgICAg
bV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgY29u
dGVudFRleHR1cmUpOworICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWkobV91bmlmb3Jt
TG9jYXRpb25zLnNoYWRvdy5jb250ZW50VGV4dHVyZSwgMSk7CiAgICAgICAgICAgICBmbG9hdCBy
LCBnLCBiLCBhOwogICAgICAgICAgICAgc2hhZG93LmNvbG9yKCkuZ2V0UkdCQShyLCBnLCBiLCBh
KTsKLSAgICAgICAgICAgIGdsVW5pZm9ybTRmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29s
b3IsIHIsIGcsIGIsIGEpOworICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtNGYobV91bmlm
b3JtTG9jYXRpb25zLnNoYWRvdy5jb2xvciwgciwgZywgYiwgYSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTc1OSw3ICs3NTMsNyBAQCBQYXNzUmVm
UHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Omdl
dFNoYWRlckZvckZpbHRlcgogICAgIGludCBrZXkgPSBpbnQodHlwZSkgfCAocGFzcyA8PCAxNik7
CiAgICAgRmlsdGVyTWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZmlsdGVyTWFwLmZpbmQoa2V5
KTsKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9maWx0ZXJNYXAuZW5kKCkpIHsKLSAgICAgICAgcHJv
Z3JhbSA9IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKHR5cGUsIHBhc3MpOworICAgICAg
ICBwcm9ncmFtID0gU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpjcmVhdGUobV9jb250ZXh0LCB0eXBl
LCBwYXNzKTsKICAgICAgICAgaWYgKCFwcm9ncmFtKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKaW5kZXggNzg1NDk4ZTdmOGEz
NjI3ZWFiMTA2ODZiYTM2YmZmYjNlMTA5MTQ1Ni4uYmU0NWM1ZGFmZWZjNjdhZWEyMWZmOGQ1YjNl
Y2U3NGJjNjQwNTFjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgK
QEAgLTI0LDkgKzI0LDkgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikKIAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIk9wZW5H
TFNoaW1zLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJHTC5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtNDQsMzkgKzQ0
LDQwIEBAIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwogCiBjbGFzcyBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtPiB7CiBwdWJsaWM6Ci0gICAgR0x1aW50IGlkKCkgeyByZXR1cm4gbV9pZDsgfQot
ICAgIEdMdWludCB2ZXJ0ZXhBdHRyaWIoKSB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQorICAg
IFBsYXRmb3JtM0RPYmplY3QgaWQoKSB7IHJldHVybiBtX2lkOyB9CisgICAgR0MzRHVpbnQgdmVy
dGV4QXR0cmliKCkgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWI7IH0KIAotICAgIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hh
ciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpOworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
KEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25z
dCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSk7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0oKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKGZsb2F0IG9wYWNp
dHksIGNvbnN0IEJpdG1hcFRleHR1cmUqKSB7IH0KLSAgICBHTGludCBtYXRyaXhMb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4TG9jYXRpb247IH0KLSAgICBHTGludCBmbGlwTG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2ZsaXBMb2NhdGlvbjsgfQotICAgIEdMaW50IHRleHR1cmVT
aXplTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVTaXplTG9jYXRpb247IH0KLSAg
ICBHTGludCBzb3VyY2VUZXh0dXJlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVRl
eHR1cmVMb2NhdGlvbjsgfQotICAgIEdMaW50IG1hc2tUZXh0dXJlTG9jYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX21hc2tUZXh0dXJlTG9jYXRpb247IH0KLSAgICBHTGludCBvcGFjaXR5TG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHlMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgbWF0
cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hdHJpeExvY2F0aW9uOyB9CisgICAgR0Mz
RGludCBmbGlwTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZsaXBMb2NhdGlvbjsgfQorICAg
IEdDM0RpbnQgdGV4dHVyZVNpemVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVNp
emVMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgc291cmNlVGV4dHVyZUxvY2F0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2VUZXh0dXJlTG9jYXRpb247IH0KKyAgICBHQzNEaW50IG1hc2tUZXh0
dXJlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hc2tUZXh0dXJlTG9jYXRpb247IH0KKyAg
ICBHQzNEaW50IG9wYWNpdHlMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eUxvY2F0
aW9uOyB9CiAKLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKEdMaW50IGxv
Y2F0aW9uKSB7IHJldHVybiBsb2NhdGlvbiA+PSAwOyB9CisgICAgc3RhdGljIGJvb2wgaXNWYWxp
ZFVuaWZvcm1Mb2NhdGlvbihHQzNEaW50IGxvY2F0aW9uKSB7IHJldHVybiBsb2NhdGlvbiA+PSAw
OyB9CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGdldFVuaWZvcm1Mb2NhdGlvbihHTGludCYgdmFy
LCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB2b2lkIGdldFVuaWZvcm1Mb2NhdGlvbihHQzNEaW50
JiB2YXIsIGNvbnN0IGNoYXIqIG5hbWUpOwogICAgIHZvaWQgaW5pdGlhbGl6ZVByb2dyYW0oKTsK
ICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpIHsgfQogICAgIGNvbnN0IGNoYXIqIHZlcnRl
eFNoYWRlclNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4U2hhZGVyU291cmNlLmRhdGEo
KTsgfQogICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKCkgY29uc3QgeyByZXR1
cm4gbV9mcmFnbWVudFNoYWRlclNvdXJjZS5kYXRhKCk7IH0KIAotICAgIEdMdWludCBtX2lkOwot
ICAgIEdMdWludCBtX3ZlcnRleEF0dHJpYjsKLSAgICBHTHVpbnQgbV92ZXJ0ZXhTaGFkZXI7Ci0g
ICAgR0x1aW50IG1fZnJhZ21lbnRTaGFkZXI7Ci0gICAgR0xpbnQgbV9tYXRyaXhMb2NhdGlvbjsK
LSAgICBHTGludCBtX2ZsaXBMb2NhdGlvbjsKLSAgICBHTGludCBtX3RleHR1cmVTaXplTG9jYXRp
b247Ci0gICAgR0xpbnQgbV9zb3VyY2VUZXh0dXJlTG9jYXRpb247Ci0gICAgR0xpbnQgbV9vcGFj
aXR5TG9jYXRpb247Ci0gICAgR0xpbnQgbV9tYXNrVGV4dHVyZUxvY2F0aW9uOworICAgIEdyYXBo
aWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2lkOworICAg
IEdDM0R1aW50IG1fdmVydGV4QXR0cmliOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV92ZXJ0ZXhT
aGFkZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZyYWdtZW50U2hhZGVyOworICAgIEdDM0Rp
bnQgbV9tYXRyaXhMb2NhdGlvbjsKKyAgICBHQzNEaW50IG1fZmxpcExvY2F0aW9uOworICAgIEdD
M0RpbnQgbV90ZXh0dXJlU2l6ZUxvY2F0aW9uOworICAgIEdDM0RpbnQgbV9zb3VyY2VUZXh0dXJl
TG9jYXRpb247CisgICAgR0MzRGludCBtX29wYWNpdHlMb2NhdGlvbjsKKyAgICBHQzNEaW50IG1f
bWFza1RleHR1cmVMb2NhdGlvbjsKIAogcHJpdmF0ZToKICAgICBDU3RyaW5nIG1fdmVydGV4U2hh
ZGVyU291cmNlOwpAQCAtODcsMzMgKzg4LDM2IEBAIHByaXZhdGU6CiBjbGFzcyBTdGFuZGFyZEZp
bHRlclByb2dyYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxTdGFuZGFyZEZpbHRlclByb2dyYW0+IHsK
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TdGFuZGFyZEZpbHRlclByb2dyYW0oKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcHJlcGFyZShjb25zdCBGaWx0ZXJPcGVyYXRpb24mLCB1bnNpZ25lZCBwYXNzLCBj
b25zdCBJbnRTaXplJiwgR0x1aW50IGNvbnRlbnRUZXh0dXJlKTsKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IGNyZWF0ZShGaWx0ZXJPcGVyYXRpb246Ok9wZXJh
dGlvblR5cGUsIHVuc2lnbmVkIHBhc3MpOwotICAgIEdMdWludCB2ZXJ0ZXhBdHRyaWIoKSBjb25z
dCB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQotICAgIEdMdWludCB0ZXhDb29yZEF0dHJpYigp
IGNvbnN0IHsgcmV0dXJuIG1fdGV4Q29vcmRBdHRyaWI7IH0KLSAgICBHTHVpbnQgdGV4dHVyZVVu
aWZvcm0oKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb247IH0KKyAgICB2
aXJ0dWFsIHZvaWQgcHJlcGFyZShjb25zdCBGaWx0ZXJPcGVyYXRpb24mLCB1bnNpZ25lZCBwYXNz
LCBjb25zdCBJbnRTaXplJiwgR0MzRHVpbnQgY29udGVudFRleHR1cmUpOworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNE
KiwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBwYXNzKTsKKyAgICBH
QzNEdWludCB2ZXJ0ZXhBdHRyaWIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQor
ICAgIEdDM0R1aW50IHRleENvb3JkQXR0cmliKCkgY29uc3QgeyByZXR1cm4gbV90ZXhDb29yZEF0
dHJpYjsgfQorICAgIEdDM0R1aW50IHRleHR1cmVVbmlmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90
ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOyB9Citwcm90ZWN0ZWQ6CisgICAgR3JhcGhpY3NDb250ZXh0
M0QqIG1fY29udGV4dDsKIHByaXZhdGU6Ci0gICAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRl
ck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgcGFzcyk7Ci0gICAgR0x1aW50IG1f
aWQ7Ci0gICAgR0x1aW50IG1fdmVydGV4U2hhZGVyOwotICAgIEdMdWludCBtX2ZyYWdtZW50U2hh
ZGVyOwotICAgIEdMdWludCBtX3ZlcnRleEF0dHJpYjsKLSAgICBHTHVpbnQgbV90ZXhDb29yZEF0
dHJpYjsKLSAgICBHTHVpbnQgbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOworICAgIFN0YW5kYXJk
RmlsdGVyUHJvZ3JhbSgpOworICAgIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbShHcmFwaGljc0NvbnRl
eHQzRCosIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgcGFzcyk7Cisg
ICAgUGxhdGZvcm0zRE9iamVjdCBtX2lkOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV92ZXJ0ZXhT
aGFkZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZyYWdtZW50U2hhZGVyOworICAgIEdDM0R1
aW50IG1fdmVydGV4QXR0cmliOworICAgIEdDM0R1aW50IG1fdGV4Q29vcmRBdHRyaWI7CisgICAg
R0MzRHVpbnQgbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOwogICAgIHVuaW9uIHsKLSAgICAgICAg
R0x1aW50IGFtb3VudDsKKyAgICAgICAgR0MzRHVpbnQgYW1vdW50OwogCiAgICAgICAgIHN0cnVj
dCB7Ci0gICAgICAgICAgICBHTHVpbnQgcmFkaXVzOwotICAgICAgICAgICAgR0x1aW50IGdhdXNz
aWFuS2VybmVsOworICAgICAgICAgICAgR0MzRHVpbnQgcmFkaXVzOworICAgICAgICAgICAgR0Mz
RHVpbnQgZ2F1c3NpYW5LZXJuZWw7CiAgICAgICAgIH0gYmx1cjsKIAogICAgICAgICBzdHJ1Y3Qg
ewotICAgICAgICAgICAgR0x1aW50IGJsdXJSYWRpdXM7Ci0gICAgICAgICAgICBHTHVpbnQgY29s
b3I7Ci0gICAgICAgICAgICBHTHVpbnQgb2Zmc2V0OwotICAgICAgICAgICAgR0x1aW50IGNvbnRl
bnRUZXh0dXJlOwotICAgICAgICAgICAgR0x1aW50IGdhdXNzaWFuS2VybmVsOworICAgICAgICAg
ICAgR0MzRHVpbnQgYmx1clJhZGl1czsKKyAgICAgICAgICAgIEdDM0R1aW50IGNvbG9yOworICAg
ICAgICAgICAgR0MzRHVpbnQgb2Zmc2V0OworICAgICAgICAgICAgR0MzRHVpbnQgY29udGVudFRl
eHR1cmU7CisgICAgICAgICAgICBHQzNEdWludCBnYXVzc2lhbktlcm5lbDsKICAgICAgICAgfSBz
aGFkb3c7CiAgICAgfSBtX3VuaWZvcm1Mb2NhdGlvbnM7CiB9OwpAQCAtMTIxLDc3ICsxMjUsODkg
QEAgcHJpdmF0ZToKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUgOiBw
dWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlPiBjcmVhdGUoKQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlPiBjcmVh
dGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKGNvbnRl
eHQpKTsKICAgICB9CiAKIHByb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVNpbXBsZShHcmFwaGljc0NvbnRleHQzRCopOworcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVNpbXBsZSgpOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1SZWN0U2ltcGxlIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJl
Y3RTaW1wbGU+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1SZWN0U2ltcGxlPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQp
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtUmVjdFNpbXBsZSgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoY29udGV4dCkpOwogICAgIH0KIAorcHJvdGVj
dGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZShHcmFwaGljc0Nv
bnRleHQzRCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RT
aW1wbGUoKTsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFu
ZE1hc2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1h
c2s+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1PcGFjaXR5QW5kTWFzaz4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbU9wYWNpdHlBbmRNYXNrKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soY29udGV4dCkpOwogICAgIH0KIAor
cHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2so
R3JhcGhpY3NDb250ZXh0M0QqKTsKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1PcGFjaXR5QW5kTWFzaygpOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1SZWN0T3BhY2l0eUFuZE1hc2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrPiBjcmVhdGUoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKCkpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9w
YWNpdHlBbmRNYXNrKGNvbnRleHQpKTsKICAgICB9CiAKK3Byb3RlY3RlZDoKKyAgICBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayhHcmFwaGljc0NvbnRleHQzRCop
OwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5k
TWFzaygpOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9y
IDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IGNyZWF0
ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xp
ZENvbG9yPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xv
cigpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVNvbGlkQ29sb3IoY29udGV4dCkpOwogICAgIH0KIAotICAgIEdMaW50IGNvbG9yTG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2NvbG9yTG9jYXRpb247IH0KKyAgICBHQzNEaW50IGNvbG9y
TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbG9yTG9jYXRpb247IH0KIAorcHJvdGVjdGVk
OgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcihHcmFwaGljc0NvbnRl
eHQzRCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29s
b3IoKTsKLSAgICBHTGludCBtX2NvbG9yTG9jYXRpb247CisgICAgR0MzRGludCBtX2NvbG9yTG9j
YXRpb247CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2lu
Z05vTWFzayA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNp
bmdOb01hc2s+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2soKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2soY29u
dGV4dCkpOwogICAgIH0KIAotICAgIEdMaW50IGV4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJl
Q29vcmRpbmF0ZXNMb2NhdGlvbigpIHsgcmV0dXJuIG1fZXhwYW5kZWRRdWFkVmVydGljZXNJblRl
eHR1cmVDb3JkaW5hdGVzTG9jYXRpb247IH0KLSAgICBHTGludCBleHBhbmRlZFF1YWRFZGdlc0lu
U2NyZWVuU3BhY2VMb2NhdGlvbigpIHsgcmV0dXJuIG1fZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVl
blNwYWNlTG9jYXRpb247IH0KKyAgICBHQzNEaW50IGV4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0
dXJlQ29vcmRpbmF0ZXNMb2NhdGlvbigpIHsgcmV0dXJuIG1fZXhwYW5kZWRRdWFkVmVydGljZXNJ
blRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247IH0KKyAgICBHQzNEaW50IGV4cGFuZGVkUXVhZEVk
Z2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uKCkgeyByZXR1cm4gbV9leHBhbmRlZFF1YWRFZGdlc0lu
U2NyZWVuU3BhY2VMb2NhdGlvbjsgfQogCitwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2soR3JhcGhpY3NDb250ZXh0M0QqKTsKIHByaXZh
dGU6CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2soKTsK
IAotICAgIEdMaW50IG1fZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb3JkaW5hdGVzTG9j
YXRpb247Ci0gICAgR0xpbnQgbV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlv
bjsKKyAgICBHQzNEaW50IG1fZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb3JkaW5hdGVz
TG9jYXRpb247CisgICAgR0MzRGludCBtX2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxv
Y2F0aW9uOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgewpAQCAtMjA2
LDcgKzIyMiw4IEBAIHB1YmxpYzoKICAgICAgICAgU29saWRDb2xvcgogICAgIH07CiAKLSAgICBU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpOworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyKCkgeyB9OworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKEdyYXBoaWNzQ29udGV4
dDNEKik7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKTsKIAogI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTIyMSwxMiArMjM4LDEyIEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFNoYWRlclR5cGUsIFJlZlB0cjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbT4sIERlZmF1bHRIYXNoPGludD46Okhhc2gsIEhhc2hUcmFpdHM8aW50PiA+
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOwogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtTWFwIG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7CisgICAgR3JhcGhpY3ND
b250ZXh0M0QqIG1fY29udGV4dDsKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICB0eXBl
ZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiA+IEZpbHRlck1h
cDsKICAgICBGaWx0ZXJNYXAgbV9maWx0ZXJNYXA7CiAjZW5kaWYKLQogfTsKIAogfQo=
</data>
<flag name="review"
          id="164111"
          type_id="1"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154787</attachid>
            <date>2012-07-26 16:46:39 -0700</date>
            <delta_ts>2012-08-12 14:57:01 -0700</delta_ts>
            <desc>TextureMapperGL</desc>
            <filename>bug-78672-20120726164627.patch</filename>
            <type>text/plain</type>
            <size>88382</size>
            <attacher name="Helder Correia">helder.correia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGViYzk2Y2QxOTVlOTYz
ODEzMzhiZGNhZTY3NmUzNjVhMjZhMjkxZC4uNGRhNjFiYzY2ZTM2YmJiOWM3YzViZmJiYmNhNGM4
NTllM2FhOTg1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMyw2ICszLDEzMCBAQAogICAgICAgICBbVGV4bWFw
XSBNb3ZlIFRleHR1cmVNYXBwZXJHTCB0byB1c2UgR3JhcGhpY3NDb250ZXh0M0QKICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NjcyCiAKKyAgICAgICAg
VGV4dHVyZU1hcHBlckdMIChUTUdMKSBpbmNsdWRlcyBkaXJlY3QgR0wgY2FsbHMgYW5kCisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dDNEIChHQzNEKSBvZmZlcnMgbWFueSBjb252ZW5pZW5jZXMgb3Zl
ciB0aGUKKyAgICAgICAgZm9ybWVyIGFwcHJvYWNoOiB1c2luZyBleGlzdGluZyBDU1Mgc2hhZGVy
IGNvZGUsIEFOR0xFIGZvcgorICAgICAgICBzaGFkZXIgY29tcGlsYXRpb24sIHJldXNpbmcgV2Vi
Q29yZTo6VGV4dHVyZSwgaGF2aW5nIHNoYWRlcnMgYW5kCisgICAgICAgIHRleHR1cmVzIHRoYXQg
Y2FuIGRlbGV0ZSB0aGVtc2VsdmVzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGUg
YmFja2VuZCBvZiBUTUdMIHRvIEdDM0QuIEl0IHdhcyBpbml0aWFsbHkKKyAgICAgICAgdGhvdWdo
dCB0byBpbnRyb2R1Y2UgYSBuZXcgYmFja2VuZCAoc2F5LCBUZXh0dXJlTWFwcGVyR0MzRCksIGJ1
dAorICAgICAgICBpbiB0aGUgZW5kIGl0IHdhcyBhZ3JlZWQgdG8gY29uc29saWRhdGUgaXQgaW5z
aWRlIFRNR0wgaW5zdGVhZCwKKyAgICAgICAgYXMgYW4gYWRkaXRpb25hbCBUZXh0dXJlTWFwcGVy
IHN1YmNsYXNzIHdvdWxkIGdldCBzdGFsZSB2ZXJ5CisgICAgICAgIHF1aWNrbHkuCisKKyAgICAg
ICAgQSBHQzNEIG9iamVjdCBpcyBjcmVhdGVkIGJ5IFRNR0wgd2l0aCB0aGUgbmV3bHkgaW50cm9k
dWNlZAorICAgICAgICBidWlsZGVyIGNyZWF0ZVdyYXBwZXJGb3JDdXJyZW50R0xDb250ZXh0KCks
IHdoaWNoIGluIHR1cm4gdXNlcworICAgICAgICB0aGUgbmV3IFJlbmRlclRvQ3VycmVudEdMQ29u
dGV4dCBmbGFnIHVuZGVybmVhdGguCisKKyAgICAgICAgVE1HTCdzIGRlcGVuZGVuY3kgb24gT3Bl
bkdMU2hpbXMuaCB3YXMgY29tcGxldGVseSByZW1vdmVkLgorICAgICAgICBIb3dldmVyLCBHQzNE
IGRvZXMgbm90IG1hcCBldmVyeSBzaW5nbGUgR0wgY29uc3RhbnQuIFRodXMsIGl0J3MKKyAgICAg
ICAgaW1wb3J0YW50IHRvIGRvY3VtZW50IHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAtIEdM
X0ZBTFNFIHdhcyBtYXBwZWQgdG8gZmFsc2UuCisgICAgICAgICAgICAtIEdMX1VOUEFDS19ST1df
TEVOR1RILCBHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsCisgICAgICAgICAgICBHTF9VTlBBQ0tfU0tJ
UF9ST1dTLCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIGFuZAorICAgICAgICAgICAgR0xfVU5T
SUdORURfSU5UXzhfOF84XzhfUkVWIHdlcmUgbG9jYWxseSBkZWZpbmVkIGluIFRNR0wuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLCByZWZhY3RvcmluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoU2hhcmVkR0xEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6
Y3VycmVudFNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xE
YXRhOjpTaGFyZWRHTERhdGE6OlNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0xEYXRhOjpzaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMRGF0YTo6VGV4dHVyZU1hcHBlckdMRGF0YSk6CisgICAgICAgIChUZXh0dXJlTWFw
cGVyR0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnNjaXNzb3JDbGlwKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjphcHBseSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjppbml0aWFsaXplU3RlbmNpbCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjplbmRQYWludGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OmRyYXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6
ZHJhd0JvcmRlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVSZWN0YW5nbGVBUkIpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjp2aWV3cG9y
dE1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJl
V2l0aEFudGlhbGlhc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRy
YXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0
dXJlR0w6OmRpZFJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6dXBk
YXRlQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3Rmls
dGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjppbml0aWFsaXplU3Rl
bmNpbCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmNsZWFySWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpjcmVhdGVGYm9JZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmJpbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwVGV4dHVyZUdMOjp+Qml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJHTDo6YmluZERlZmF1bHRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJHTDo6YmVnaW5TY2lzc29yQ2xpcCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OmVuZENsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpj
cmVhdGVUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmdyYXBoaWNz
Q29udGV4dDNEKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChDbGlwU3Rh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjp0ZXh0dXJlVGFyZ2V0KToK
KyAgICAgICAgKEJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0
dXJlR0w6OkJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjppbml0aWFsaXplUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1T
aW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1Tb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2lt
cGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0
eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1h
c2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNr
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp+U3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJv
Z3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJk
RmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVy
UHJvZ3JhbTo6cHJlcGFyZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6Z2V0U2hhZGVyRm9yRmlsdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6dmVydGV4QXR0cmliKToKKyAgICAgICAgKFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjptYXRyaXhMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6ZmxpcExvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp0ZXh0dXJlU2l6ZUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzb3VyY2VUZXh0dXJlTG9jYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Om1hc2tUZXh0
dXJlTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06Om9wYWNpdHlMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChTdGFuZGFyZEZp
bHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp2
ZXJ0ZXhBdHRyaWIpOgorICAgICAgICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp0
ZXhDb29yZEF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dyYW06
OnRleHR1cmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU2ltcGxlOjpjcmVhdGUpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1TaW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1S
ZWN0U2ltcGxlOjpjcmVhdGUpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1S
ZWN0U2ltcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
T3BhY2l0eUFuZE1hc2s6OmNyZWF0ZSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbU9wYWNpdHlBbmRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpjcmVhdGUpOgorICAgICAgICAoVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpjb2xvckxvY2F0
aW9uKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05v
TWFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtQW50aWFsaWFzaW5nTm9NYXNrOjpleHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvb3Jk
aW5hdGVzTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OmV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxv
Y2F0aW9uKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5n
Tm9NYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcik6CisKKzIwMTItMDctMjYgIEhlbGRlciBDb3JyZWlhICA8aGVsZGVyLmNvcnJlaWFA
bm9raWEuY29tPgorCisgICAgICAgIFtUZXhtYXBdIE1vdmUgVGV4dHVyZU1hcHBlckdMIHRvIHVz
ZSBHcmFwaGljc0NvbnRleHQzRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Nzg2NzIKKwogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
IAogICAgICAgICBUaGlzIGlzIHBhcnQgb2YgYSBzZXZlcmFsIHBhdGNoLXJlZmFjdG9yaW5nLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCA2ODhlMjZmNGU4OWZmZjEzZGU1YjNkNTc5YzgyMGE5
MzVlZjkxNzJjLi5mZTc4ODFiNTkyNzlhNjEzYTg1ZDZkYWM3NzY2YTBmYjg3MmY5ZjU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJHTC5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCIKQEAgLTM5
LDkxICszOCw0MiBAQAogCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VR
dC5oIgotI2lmIEhBVkUoUVQ1KQotI2luY2x1ZGUgPFFPcGVuR0xDb250ZXh0PgotI2Vsc2UKLSNp
bmNsdWRlIDxRR0xDb250ZXh0PgotI2VuZGlmIC8vIFFUX1ZFUlNJT04KLSNlbGlmIE9TKFdJTkRP
V1MpCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2VsaWYgT1MoTUFDX09TX1gpCi0jaW5jbHVkZSA8
QUdML2FnbC5oPgotI2VsaWYgZGVmaW5lZChYUF9VTklYKQotI2luY2x1ZGUgPEdML2dseC5oPgog
I2VuZGlmCiAKLSNkZWZpbmUgR0xfQ01EKC4uLikgZG8geyBfX1ZBX0FSR1NfXzsgQVNTRVJUX0FS
RyhfX1ZBX0FSR1NfXywgIWdsR2V0RXJyb3IoKSk7IH0gd2hpbGUgKDApCisjaWYgIVVTRShURVhN
QVBfT1BFTkdMX0VTXzIpCisvLyBGSVhNRTogTW92ZSB0byBFeHRlbnNpb25zM0QuaC4KKyNkZWZp
bmUgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCIDB4ODRGNQorI2RlZmluZSBHTF9VTlNJR05FRF9J
TlRfOF84XzhfOF9SRVYgMHg4MzY3CisjZGVmaW5lIEdMX1VOUEFDS19ST1dfTEVOR1RIIDB4MENG
MgorI2RlZmluZSBHTF9VTlBBQ0tfU0tJUF9QSVhFTFMgMHgwQ0Y0CisjZGVmaW5lIEdMX1VOUEFD
S19TS0lQX1JPV1MgMHgwQ0YzCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0
IFRleHR1cmVNYXBwZXJHTERhdGEgewogICAgIHN0cnVjdCBTaGFyZWRHTERhdGEgOiBwdWJsaWMg
UmVmQ291bnRlZDxTaGFyZWRHTERhdGE+IHsKLSNpZiBQTEFURk9STShRVCkKLSNpZiBRVF9WRVJT
SU9OID49IDB4MDUwMDAwCi0gICAgICAgIHR5cGVkZWYgUU9wZW5HTENvbnRleHQqIEdMQ29udGV4
dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIFFPcGVuR0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgp
OwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICB0eXBlZGVmIGNvbnN0IFFHTENvbnRleHQqIEdM
Q29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFFHTENvbnRleHQ6OmN1cnJlbnRDb250ZXh0
KCk7Ci0gICAgICAgIH0KLSNlbmRpZgotI2VsaWYgT1MoV0lORE9XUykKLSAgICAgICAgdHlwZWRl
ZiBIR0xSQyBHTENvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdM
Q29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB3Z2xHZXRDdXJyZW50Q29u
dGV4dCgpOwotICAgICAgICB9Ci0jZWxpZiBPUyhNQUNfT1NfWCkKLSAgICAgICAgdHlwZWRlZiBB
R0xDb250ZXh0IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50
R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFnbEdldEN1cnJlbnRD
b250ZXh0KCk7Ci0gICAgICAgIH0KLSNlbGlmIGRlZmluZWQoWFBfVU5JWCkKLSAgICAgICAgdHlw
ZWRlZiBHTFhDb250ZXh0IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRD
dXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsWEdldEN1
cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIC8vIERlZmF1bHQgaW1w
bGVtZW50YXRpb24gZm9yIHVua25vd24gb3BlbmdsLgotICAgICAgICAvLyBSZXR1cm5zIGFsd2F5
cyBpbmNyZWFzaW5nIG51bWJlciBhbmQgZGlzYWJsZXMgR0wgY29udGV4dCBkYXRhIHNoYXJpbmcu
Ci0gICAgICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGlj
IEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAg
c3RhdGljIEdMQ29udGV4dCBkdW1teUNvbnRleHRDb3VudGVyID0gMDsKLSAgICAgICAgICAgIHJl
dHVybiArK2R1bW15Q29udGV4dENvdW50ZXI7Ci0gICAgICAgIH0KLQotI2VuZGlmCi0KLSAgICAg
ICAgdHlwZWRlZiBIYXNoTWFwPEdMQ29udGV4dCwgU2hhcmVkR0xEYXRhKj4gR0xDb250ZXh0RGF0
YU1hcDsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qs
IFNoYXJlZEdMRGF0YSo+IEdMQ29udGV4dERhdGFNYXA7CiAgICAgICAgIHN0YXRpYyBHTENvbnRl
eHREYXRhTWFwJiBnbENvbnRleHREYXRhTWFwKCkKICAgICAgICAgewogICAgICAgICAgICAgc3Rh
dGljIEdMQ29udGV4dERhdGFNYXAgbWFwOwogICAgICAgICAgICAgcmV0dXJuIG1hcDsKICAgICAg
ICAgfQogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEdMRGF0YT4gY3VycmVudFNo
YXJlZEdMRGF0YSgpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEdMRGF0YT4gY3Vy
cmVudFNoYXJlZEdMRGF0YShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICAgICAgewot
ICAgICAgICAgICAgR0xDb250ZXh0IGN1cnJlbnRHTENvbmV4dCA9IGdldEN1cnJlbnRHTENvbnRl
eHQoKTsKLSAgICAgICAgICAgIEdMQ29udGV4dERhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gZ2xDb250
ZXh0RGF0YU1hcCgpLmZpbmQoY3VycmVudEdMQ29uZXh0KTsKKyAgICAgICAgICAgIEdMQ29udGV4
dERhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgpLmZpbmQoY29udGV4dC0+
cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKICAgICAgICAgICAgIGlmIChpdCAhPSBnbENv
bnRleHREYXRhTWFwKCkuZW5kKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7
CiAKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkR0xEYXRhKGdldEN1cnJl
bnRHTENvbnRleHQoKSkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRH
TERhdGEoY29udGV4dCkpOwogICAgICAgICB9CiAKLQotCiAgICAgICAgIFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyIHRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwogCi0gICAgICAgIFNoYXJl
ZEdMRGF0YShHTENvbnRleHQgZ2xDb250ZXh0KQorICAgICAgICBTaGFyZWRHTERhdGEoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgICAgICAgICA6IHRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsQ29udGV4dERhdGFNYXAo
KS5hZGQoZ2xDb250ZXh0LCB0aGlzKTsKKyAgICAgICAgICAgIGdsQ29udGV4dERhdGFNYXAoKS5h
ZGQoY29udGV4dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpLCB0aGlzKTsKICAgICAgICAg
fQogCiAgICAgICAgIH5TaGFyZWRHTERhdGEoKQpAQCAtMTQyLDMwICs5MiwzMiBAQCBzdHJ1Y3Qg
VGV4dHVyZU1hcHBlckdMRGF0YSB7CiAKICAgICBTaGFyZWRHTERhdGEmIHNoYXJlZEdMRGF0YSgp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gKihtX3NoYXJlZEdMRGF0YS5nZXQoKSk7Cisg
ICAgICAgIHJldHVybiAqbV9zaGFyZWRHTERhdGE7CiAgICAgfQogCiAgICAgdm9pZCBpbml0aWFs
aXplU3RlbmNpbCgpOwogCi0gICAgVGV4dHVyZU1hcHBlckdMRGF0YSgpCi0gICAgICAgIDogUGFp
bnRGbGFncygwKQorICAgIFRleHR1cmVNYXBwZXJHTERhdGEoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCisgICAgICAgIDogY29udGV4dChjb250ZXh0KQorICAgICAgICAsIFBhaW50RmxhZ3Mo
MCkKICAgICAgICAgLCBwcmV2aW91c1Byb2dyYW0oMCkKICAgICAgICAgLCB0YXJnZXRGcmFtZUJ1
ZmZlcigwKQogICAgICAgICAsIGRpZE1vZGlmeVN0ZW5jaWwoZmFsc2UpCiAgICAgICAgICwgcHJl
dmlvdXNTY2lzc29yU3RhdGUoMCkKICAgICAgICAgLCBwcmV2aW91c0RlcHRoU3RhdGUoMCkKLSAg
ICAgICAgLCBtX3NoYXJlZEdMRGF0YShUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6
OmN1cnJlbnRTaGFyZWRHTERhdGEoKSkKKyAgICAgICAgLCBtX3NoYXJlZEdMRGF0YShUZXh0dXJl
TWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRHTERhdGEodGhpcy0+Y29u
dGV4dCkpCiAgICAgeyB9CiAKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDsKICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4OwogICAgIFRleHR1cmVNYXBwZXI6
OlBhaW50RmxhZ3MgUGFpbnRGbGFnczsKLSAgICBHTGludCBwcmV2aW91c1Byb2dyYW07Ci0gICAg
R0xpbnQgdGFyZ2V0RnJhbWVCdWZmZXI7CisgICAgR0MzRGludCBwcmV2aW91c1Byb2dyYW07Cisg
ICAgR0MzRGludCB0YXJnZXRGcmFtZUJ1ZmZlcjsKICAgICBib29sIGRpZE1vZGlmeVN0ZW5jaWw7
Ci0gICAgR0xpbnQgcHJldmlvdXNTY2lzc29yU3RhdGU7Ci0gICAgR0xpbnQgcHJldmlvdXNEZXB0
aFN0YXRlOwotICAgIEdMaW50IHZpZXdwb3J0WzRdOwotICAgIEdMaW50IHByZXZpb3VzU2Npc3Nv
cls0XTsKKyAgICBHQzNEaW50IHByZXZpb3VzU2Npc3NvclN0YXRlOworICAgIEdDM0RpbnQgcHJl
dmlvdXNEZXB0aFN0YXRlOworICAgIEdDM0RpbnQgdmlld3BvcnRbNF07CisgICAgR0MzRGludCBw
cmV2aW91c1NjaXNzb3JbNF07CiAgICAgUmVmUHRyPFNoYXJlZEdMRGF0YT4gbV9zaGFyZWRHTERh
dGE7CiAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IGN1cnJlbnRTdXJmYWNlOwogfTsKQEAgLTE4
OSwyNSArMTQxLDI1IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2s6OnBvcCgpCiAg
ICAgY2xpcFN0YWNrLnJlbW92ZUxhc3QoKTsKIH0KIAotc3RhdGljIHZvaWQgc2Npc3NvckNsaXAo
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3N0YXRpYyB2b2lkIHNjaXNzb3JDbGlwKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIGlmIChyZWN0Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR0xpbnQgdmlld3BvcnRbNF07Ci0gICAg
R0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIHZpZXdwb3J0KSk7Ci0gICAgR0xfQ01E
KGdsU2Npc3NvcihyZWN0LngoKSwgdmlld3BvcnRbM10gLSByZWN0Lm1heFkoKSwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKSk7CisgICAgR0MzRGludCB2aWV3cG9ydFs0XTsKKyAgICBjb250
ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQsIHZpZXdwb3J0KTsK
KyAgICBjb250ZXh0LT5zY2lzc29yKHJlY3QueCgpLCB2aWV3cG9ydFszXSAtIHJlY3QubWF4WSgp
LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJH
TDo6Q2xpcFN0YWNrOjphcHBseSgpCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjph
cHBseShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIHsKLSAgICBzY2lzc29yQ2xpcChjbGlw
U3RhdGUuc2Npc3NvckJveCk7Ci0gICAgR0xfQ01EKGdsU3RlbmNpbE9wKEdMX0tFRVAsIEdMX0tF
RVAsIEdMX0tFRVApKTsKLSAgICBHTF9DTUQoZ2xTdGVuY2lsRnVuYyhHTF9FUVVBTCwgY2xpcFN0
YXRlLnN0ZW5jaWxJbmRleCAtIDEsIGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXggLSAxKSk7CisgICAg
c2Npc3NvckNsaXAoY29udGV4dCwgY2xpcFN0YXRlLnNjaXNzb3JCb3gpOworICAgIGNvbnRleHQt
PnN0ZW5jaWxPcChHcmFwaGljc0NvbnRleHQzRDo6S0VFUCwgR3JhcGhpY3NDb250ZXh0M0Q6OktF
RVAsIEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQKTsKKyAgICBjb250ZXh0LT5zdGVuY2lsRnVuYyhH
cmFwaGljc0NvbnRleHQzRDo6RVFVQUwsIGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXggLSAxLCBjbGlw
U3RhdGUuc3RlbmNpbEluZGV4IC0gMSk7CiAgICAgaWYgKGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXgg
PT0gMSkKLSAgICAgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9TVEVOQ0lMX1RFU1QpKTsKKyAgICAg
ICAgY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKTsKICAg
ICBlbHNlCi0gICAgICAgIEdMX0NNRChnbEVuYWJsZShHTF9TVEVOQ0lMX1RFU1QpKTsKKyAgICAg
ICAgY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpOwogfQog
CiAKQEAgLTIyMSw4ICsxNzMsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTERhdGE6OmluaXRpYWxp
emVTdGVuY2lsKCkKICAgICBpZiAoZGlkTW9kaWZ5U3RlbmNpbCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgR0xfQ01EKGdsQ2xlYXJTdGVuY2lsKDApKTsKLSAgICBHTF9DTUQoZ2xDbGVhcihHTF9T
VEVOQ0lMX0JVRkZFUl9CSVQpKTsKKyAgICBjb250ZXh0LT5jbGVhclN0ZW5jaWwoMCk7CisgICAg
Y29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCk7CiAg
ICAgZGlkTW9kaWZ5U3RlbmNpbCA9IHRydWU7CiB9CiAKQEAgLTIzNiwxMCArMTg4LDExIEBAIEJp
dG1hcFRleHR1cmVHTCogdG9CaXRtYXBUZXh0dXJlR0woQml0bWFwVGV4dHVyZSogdGV4dHVyZSkK
IAogVGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0woKQogICAgIDogVGV4dHVyZU1hcHBl
cihPcGVuR0xNb2RlKQotICAgICwgbV9kYXRhKG5ldyBUZXh0dXJlTWFwcGVyR0xEYXRhKQogICAg
ICwgbV9jb250ZXh0KDApCiAgICAgLCBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyhm
YWxzZSkKIHsKKyAgICBtX2NvbnRleHQzRCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVXcmFw
cGVyRm9yQ3VycmVudEdMQ29udGV4dCgpOworICAgIG1fZGF0YSA9IG5ldyBUZXh0dXJlTWFwcGVy
R0xEYXRhKG1fY29udGV4dDNELmdldCgpKTsKIH0KIAogVGV4dHVyZU1hcHBlckdMOjpDbGlwU3Rh
Y2smIFRleHR1cmVNYXBwZXJHTDo6Y2xpcFN0YWNrKCkKQEAgLTI0OSwxNSArMjAyLDkgQEAgVGV4
dHVyZU1hcHBlckdMOjpDbGlwU3RhY2smIFRleHR1cmVNYXBwZXJHTDo6Y2xpcFN0YWNrKCkKIAog
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyBmbGFncykKIHsK
LSAgICAvLyBNYWtlIHN1cmUgdGhhdCBubyBHTCBlcnJvciBjb2RlIHN0YXlzIGZyb20gcHJldmlv
dXMgb3BlcmF0aW9ucy4KLSAgICBnbEdldEVycm9yKCk7Ci0KLSAgICBpZiAoIWluaXRpYWxpemVP
cGVuR0xTaGltcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHTF9DTUQoZ2xHZXRJbnRlZ2Vy
dihHTF9DVVJSRU5UX1BST0dSQU0sICZkYXRhKCkucHJldmlvdXNQcm9ncmFtKSk7Ci0gICAgZGF0
YSgpLnByZXZpb3VzU2Npc3NvclN0YXRlID0gZ2xJc0VuYWJsZWQoR0xfU0NJU1NPUl9URVNUKTsK
LSAgICBkYXRhKCkucHJldmlvdXNEZXB0aFN0YXRlID0gZ2xJc0VuYWJsZWQoR0xfREVQVEhfVEVT
VCk7CisgICAgbV9jb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpDVVJS
RU5UX1BST0dSQU0sICZkYXRhKCkucHJldmlvdXNQcm9ncmFtKTsKKyAgICBkYXRhKCkucHJldmlv
dXNTY2lzc29yU3RhdGUgPSBtX2NvbnRleHQzRC0+aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNE
OjpTQ0lTU09SX1RFU1QpOworICAgIGRhdGEoKS5wcmV2aW91c0RlcHRoU3RhdGUgPSBtX2NvbnRl
eHQzRC0+aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUKTsKICNpZiBQTEFU
Rk9STShRVCkKICAgICBpZiAobV9jb250ZXh0KSB7CiAgICAgICAgIFFQYWludGVyKiBwYWludGVy
ID0gbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKQEAgLTI2NSwxNSArMjEyLDE1IEBAIHZv
aWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKFBhaW50RmxhZ3MgZmxhZ3MpCiAgICAg
ICAgIHBhaW50ZXItPmJlZ2luTmF0aXZlUGFpbnRpbmcoKTsKICAgICB9CiAjZW5kaWYKLSAgICBn
bERpc2FibGUoR0xfREVQVEhfVEVTVCk7Ci0gICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsK
KyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCk7
CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
KTsKICAgICBkYXRhKCkuZGlkTW9kaWZ5U3RlbmNpbCA9IGZhbHNlOwotICAgIEdMX0NNRChnbERl
cHRoTWFzaygwKSk7Ci0gICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIGRhdGEo
KS52aWV3cG9ydCkpOwotICAgIEdMX0NNRChnbEdldEludGVnZXJ2KEdMX1NDSVNTT1JfQk9YLCBk
YXRhKCkucHJldmlvdXNTY2lzc29yKSk7Ci0gICAgZ2xHZXRJbnRlZ2VydihHTF9GUkFNRUJVRkZF
Ul9CSU5ESU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKTsKKyAgICBtX2NvbnRleHQzRC0+
ZGVwdGhNYXNrKDApOworICAgIG1fY29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRl
eHQzRDo6VklFV1BPUlQsIGRhdGEoKS52aWV3cG9ydCk7CisgICAgbV9jb250ZXh0M0QtPmdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX0JPWCwgZGF0YSgpLnByZXZpb3VzU2Np
c3Nvcik7CisgICAgbV9jb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUl9CSU5ESU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKTsKICAgICBtX2Ns
aXBTdGFjay5pbml0KEludFJlY3QoMCwgMCwgZGF0YSgpLnZpZXdwb3J0WzJdLCBkYXRhKCkudmll
d3BvcnRbM10pKTsKLSAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9GUkFNRUJVRkZFUl9CSU5E
SU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKSk7CisgICAgbV9jb250ZXh0M0QtPmdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5ESU5HLCAmZGF0YSgpLnRh
cmdldEZyYW1lQnVmZmVyKTsKICAgICBkYXRhKCkuUGFpbnRGbGFncyA9IGZsYWdzOwogICAgIGJp
bmRTdXJmYWNlKDApOwogfQpAQCAtMjgxLDIyICsyMjgsMjIgQEAgdm9pZCBUZXh0dXJlTWFwcGVy
R0w6OmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyBmbGFncykKIHZvaWQgVGV4dHVyZU1hcHBlckdM
OjplbmRQYWludGluZygpCiB7CiAgICAgaWYgKGRhdGEoKS5kaWRNb2RpZnlTdGVuY2lsKSB7Ci0g
ICAgICAgIGdsQ2xlYXJTdGVuY2lsKDEpOwotICAgICAgICBnbENsZWFyKEdMX1NURU5DSUxfQlVG
RkVSX0JJVCk7CisgICAgICAgIG1fY29udGV4dDNELT5jbGVhclN0ZW5jaWwoMSk7CisgICAgICAg
IG1fY29udGV4dDNELT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklU
KTsKICAgICB9CiAKLSAgICBnbFVzZVByb2dyYW0oZGF0YSgpLnByZXZpb3VzUHJvZ3JhbSk7Cisg
ICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0oZGF0YSgpLnByZXZpb3VzUHJvZ3JhbSk7CiAKLSAg
ICBnbFNjaXNzb3IoZGF0YSgpLnByZXZpb3VzU2Npc3NvclswXSwgZGF0YSgpLnByZXZpb3VzU2Np
c3NvclsxXSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclsyXSwgZGF0YSgpLnByZXZpb3VzU2Npc3Nv
clszXSk7CisgICAgbV9jb250ZXh0M0QtPnNjaXNzb3IoZGF0YSgpLnByZXZpb3VzU2Npc3Nvclsw
XSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclsxXSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclsyXSwg
ZGF0YSgpLnByZXZpb3VzU2Npc3NvclszXSk7CiAgICAgaWYgKGRhdGEoKS5wcmV2aW91c1NjaXNz
b3JTdGF0ZSkKLSAgICAgICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICAgICAgbV9j
b250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKICAgICBl
bHNlCi0gICAgICAgIGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgICAgICBtX2NvbnRl
eHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKIAogICAgIGlm
IChkYXRhKCkucHJldmlvdXNEZXB0aFN0YXRlKQotICAgICAgICBnbEVuYWJsZShHTF9ERVBUSF9U
RVNUKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfVEVTVCk7CiAgICAgZWxzZQotICAgICAgICBnbERpc2FibGUoR0xfREVQVEhfVEVTVCk7Cisg
ICAgICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNU
KTsKIAogI2lmIFBMQVRGT1JNKFFUKQogICAgIGlmICghbV9jb250ZXh0KQpAQCAtMzA3LDQwICsy
NTQsNDAgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50aW5nKCkKICNlbmRpZgogfQog
Ci12b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmIHF1YWRUb0Ry
YXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKiBzaGFkZXJQcm9ncmFtLCBHTGVudW0gZHJhd2luZ01vZGUsIGJv
b2wgbmVlZHNCbGVuZGluZykKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZChjb25zdCBE
cmF3UXVhZCYgcXVhZFRvRHJhdywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmll
d01hdHJpeCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHNoYWRlclByb2dyYW0sIEdDM0Rl
bnVtIGRyYXdpbmdNb2RlLCBib29sIG5lZWRzQmxlbmRpbmcpCiB7Ci0gICAgR0xfQ01EKGdsRW5h
YmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAg
ICBHTF9DTUQoZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCkpOworICAgIG1fY29udGV4
dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIo
KSk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZ
X0JVRkZFUiwgMCk7CiAKLSAgICBjb25zdCBHTGZsb2F0IHF1YWRbXSA9IHsKKyAgICBjb25zdCBH
QzNEZmxvYXQgcXVhZFtdID0gewogICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRU
b1VuaXRTcXVhcmUucDEoKS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNx
dWFyZS5wMSgpLnkoKSwKICAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0
U3F1YXJlLnAyKCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUu
cDIoKS55KCksCiAgICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFy
ZS5wMygpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAzKCku
eSgpLAogICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDQo
KS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wNCgpLnkoKQog
ICAgIH07Ci0gICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXJQcm9ncmFtLT52
ZXJ0ZXhBdHRyaWIoKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCBxdWFkKSk7CisgICAgbV9j
b250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmli
KCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIocXVh
ZCkpOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25N
YXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCku
bXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgoCiAgICAgICAgICAgICBxdWFkVG9EcmF3Lm9y
aWdpbmFsVGFyZ2V0UmVjdC53aWR0aCgpLCAwLCAwLCAwLAogICAgICAgICAgICAgMCwgcXVhZFRv
RHJhdy5vcmlnaW5hbFRhcmdldFJlY3QuaGVpZ2h0KCksIDAsIDAsCiAgICAgICAgICAgICAwLCAw
LCAxLCAwLAogICAgICAgICAgICAgcXVhZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJlY3QueCgpLCBx
dWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC55KCksIDAsIDEpKTsKLSAgICBjb25zdCBHTGZs
b2F0IG00W10gPSB7CisgICAgR0MzRGZsb2F0IG00W10gPSB7CiAgICAgICAgIG1hdHJpeC5tMTEo
KSwgbWF0cml4Lm0xMigpLCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKICAgICAgICAgbWF0
cml4Lm0yMSgpLCBtYXRyaXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAogICAg
ICAgICBtYXRyaXgubTMxKCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0
KCksCiAgICAgICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1h
dHJpeC5tNDQoKQogICAgIH07Ci0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihzaGFkZXJQ
cm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBHTF9GQUxTRSwgbTQpKTsKKyAgICBtX2NvbnRl
eHQzRC0+dW5pZm9ybU1hdHJpeDRmdihzaGFkZXJQcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAx
LCBmYWxzZSwgbTQpOwogCiAgICAgaWYgKG5lZWRzQmxlbmRpbmcpIHsKLSAgICAgICAgR0xfQ01E
KGdsQmxlbmRGdW5jKEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSkpOwotICAgICAgICBH
TF9DTUQoZ2xFbmFibGUoR0xfQkxFTkQpKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmJsZW5kRnVu
YyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NS
Q19BTFBIQSk7CisgICAgICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EKTsKICAgICB9IGVsc2UKLSAgICAgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9CTEVORCkp
OworICAgICAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQp
OwogCi0gICAgR0xfQ01EKGdsRHJhd0FycmF5cyhkcmF3aW5nTW9kZSwgMCwgNCkpOwotICAgIEdM
X0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRy
aWIoKSkpOworICAgIG1fY29udGV4dDNELT5kcmF3QXJyYXlzKGRyYXdpbmdNb2RlLCAwLCA0KTsK
KyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0t
PnZlcnRleEF0dHJpYigpKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIo
Y29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCB3aWR0aCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4KQpAQCAtMzQ5
LDE3ICsyOTYsMTcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29s
b3ImIGNvbG9yLCBmbG9hdCB3aWR0aCwgY29uc3QgRmxvYXRSZWMKICAgICAgICAgcmV0dXJuOwog
CiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4gcHJvZ3Jh
bSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5zb2xp
ZENvbG9yUHJvZ3JhbSgpOwotICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkp
OworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOwogCiAgICAgZmxv
YXQgYWxwaGEgPSBjb2xvci5hbHBoYSgpIC8gMjU1LjA7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTRm
KHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTRmKHBy
b2dyYW0tPmNvbG9yTG9jYXRpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgKGNvbG9yLnJl
ZCgpIC8gMjU1LjApICogYWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgIChjb2xvci5ncmVl
bigpIC8gMjU1LjApICogYWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgIChjb2xvci5ibHVl
KCkgLyAyNTUuMCkgKiBhbHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgYWxwaGEpKTsKLSAg
ICBHTF9DTUQoZ2xMaW5lV2lkdGgod2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgYWxw
aGEpOworICAgIG1fY29udGV4dDNELT5saW5lV2lkdGgod2lkdGgpOwogCi0gICAgZHJhd1F1YWQo
dGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdldCgpLCBHTF9MSU5FX0xPT1As
IGNvbG9yLmhhc0FscGhhKCkpOworICAgIGRyYXdRdWFkKHRhcmdldFJlY3QsIG1vZGVsVmlld01h
dHJpeCwgcHJvZ3JhbS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUCwgY29sb3Iu
aGFzQWxwaGEoKSk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3UmVwYWludENvdW50
ZXIoaW50IHZhbHVlLCBpbnQgcG9pbnRTaXplLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2lu
dCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCkKQEAgLTQwNiw3
ICszNTMsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFw
VGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JgogICAgIGRyYXdUZXh0dXJlKHRleHR1
cmVHTC5pZCgpLCB0ZXh0dXJlR0wuaXNPcGFxdWUoKSA/IDAgOiBTdXBwb3J0c0JsZW5kaW5nLCB0
ZXh0dXJlR0wuc2l6ZSgpLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHksIG1hc2ssIGV4cG9z
ZWRFZGdlcyk7CiB9CiAKLSNpZiBkZWZpbmVkKEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSkKKyNp
ZiAhVVNFKFRFWE1BUF9PUEVOR0xfRVNfMikKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4
dHVyZVJlY3RhbmdsZUFSQih1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50
U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3Qg
Qml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCiB7CiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtPiBwcm9ncmFtOwpAQCAtNDE0LDM2ICszNjEsMzYgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZsYWdz
IGZsYWdzLCBjb24KICAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjpSZWN0T3BhY2l0eUFuZE1hc2spOwogICAgIGVsc2UKICAgICAgICAgcHJvZ3Jh
bSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRT
aGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpSZWN0U2ltcGxlKTsKLSAg
ICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpKTsKKyAgICBtX2NvbnRleHQzRC0+
dXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKTsKIAotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsQWN0aXZl
VGV4dHVyZShHTF9URVhUVVJFMCkpOwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfUkVDVEFOR0xFX0FSQiwgdGV4dHVyZSkpOwotICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9n
cmFtLT5zb3VyY2VUZXh0dXJlTG9jYXRpb24oKSwgMCkpOworICAgIG1fY29udGV4dDNELT5lbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250
ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKyAgICBt
X2NvbnRleHQzRC0+YmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCB0ZXh0dXJl
KTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnNvdXJjZVRleHR1cmVMb2Nh
dGlvbigpLCAwKTsKIAotICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtLT5mbGlwTG9jYXRp
b24oKSwgISEoZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVyZSkpKTsKLSAgICBHTF9DTUQoZ2xVbmlm
b3JtMmYocHJvZ3JhbS0+dGV4dHVyZVNpemVMb2NhdGlvbigpLCB0ZXh0dXJlU2l6ZS53aWR0aCgp
LCB0ZXh0dXJlU2l6ZS5oZWlnaHQoKSkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJv
Z3JhbS0+ZmxpcExvY2F0aW9uKCksICEhKGZsYWdzICYgU2hvdWxkRmxpcFRleHR1cmUpKTsKKyAg
ICBtX2NvbnRleHQzRC0+dW5pZm9ybTJmKHByb2dyYW0tPnRleHR1cmVTaXplTG9jYXRpb24oKSwg
dGV4dHVyZVNpemUud2lkdGgoKSwgdGV4dHVyZVNpemUuaGVpZ2h0KCkpOwogCiAgICAgaWYgKFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0t
Pm9wYWNpdHlMb2NhdGlvbigpKSkKLSAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW0t
Pm9wYWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5KSk7CisgICAgICAgIG1fY29udGV4dDNELT51bmlm
b3JtMWYocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpOwogCiAgICAgaWYgKG1h
c2tUZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkgJiYgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+bWFza1RleHR1cmVMb2Nh
dGlvbigpKSkgewogICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wqIG1hc2tUZXh0dXJlR0wg
PSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNrVGV4dHVyZSk7Ci0gICAg
ICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpKTsKLSAgICAgICAgR0xfQ01E
KGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbWFza1RleHR1cmVHTC0+aWQoKSkpOwotICAg
ICAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpLCAx
KSk7Ci0gICAgICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKKyAgICAg
ICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUx
KTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPnVu
aWZvcm0xaShwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCksIDEpOworICAgICAgICBtX2Nv
bnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwogICAg
IH0KIAogICAgIGJvb2wgbmVlZHNCbGVuZGluZyA9IChmbGFncyAmIFN1cHBvcnRzQmxlbmRpbmcp
IHx8IG9wYWNpdHkgPCAwLjk5IHx8IG1hc2tUZXh0dXJlOwotICAgIGRyYXdRdWFkKHRhcmdldFJl
Y3QsIG1vZGVsVmlld01hdHJpeCwgcHJvZ3JhbS5nZXQoKSwgR0xfVFJJQU5HTEVfRkFOLCBuZWVk
c0JsZW5kaW5nKTsKKyAgICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHBy
b2dyYW0uZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIG5lZWRzQmxlbmRp
bmcpOwogfQotI2VuZGlmIC8vIGRlZmluZWQoR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlKSAKKyNl
bmRpZiAvLyAhVVNFKFRFWE1BUF9PUEVOR0xfRVNfMikKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJbnRTaXpl
JiAvKiB0ZXh0dXJlU2l6ZSAqLywgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25z
dCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKQogewot
ICAgIGJvb2wgbmVlZHNBbnRpbGlhaW5nID0gbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNp
bmcgJiYgIW1vZGVsVmlld01hdHJpeC5pc0ludGVnZXJUcmFuc2xhdGlvbigpOwotICAgIGlmIChu
ZWVkc0FudGlsaWFpbmcgJiYgZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHRleHR1cmUsIGZs
YWdzLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0dXJlLCBl
eHBvc2VkRWRnZXMpKQorICAgIGJvb2wgbmVlZHNBbnRpYWxpYWluZyA9IG1fZW5hYmxlRWRnZURp
c3RhbmNlQW50aWFsaWFzaW5nICYmICFtb2RlbFZpZXdNYXRyaXguaXNJbnRlZ2VyVHJhbnNsYXRp
b24oKTsKKyAgICBpZiAobmVlZHNBbnRpYWxpYWluZyAmJiBkcmF3VGV4dHVyZVdpdGhBbnRpYWxp
YXNpbmcodGV4dHVyZSwgZmxhZ3MsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0
eSwgbWFza1RleHR1cmUsIGV4cG9zZWRFZGdlcykpCiAgICAgICAgcmV0dXJuOwogCiAgICAgUmVm
UHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtOwpAQCAtNDUxLDE1ICszOTgs
MTUgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUs
IEZsYWdzIGZsYWdzLCBjb25zdCBJbnRTaXplJgogICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNo
YXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0o
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHlBbmRNYXNrKTsKICAgICBlbHNlCiAg
ICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2lt
cGxlKTsKLSAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpKTsKKyAgICBtX2Nv
bnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKTsKIAogICAgIGRyYXdUZXh0dXJlZFF1
YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0dXJlLCBmbGFncywgdGFyZ2V0UmVjdCwg
bW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5LCBtYXNrVGV4dHVyZSk7CiB9CiAKLXN0YXRpYyBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB2aWV3cG9ydE1hdHJpeCgpCitzdGF0aWMgVHJhbnNmb3JtYXRpb25N
YXRyaXggdmlld3BvcnRNYXRyaXgoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCkKIHsKLSAg
ICBHTGludCB2aWV3cG9ydFs0XTsKLSAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9WSUVXUE9S
VCwgdmlld3BvcnQpKTsKKyAgICBHQzNEaW50IHZpZXdwb3J0WzRdOworICAgIGNvbnRleHQzRC0+
Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JULCB2aWV3cG9ydCk7CiAKICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CiAgICAgbWF0cml4LnRyYW5zbGF0ZTNkKHZp
ZXdwb3J0WzBdLCB2aWV3cG9ydFsxXSwgMCk7CkBAIC01NTYsNyArNTAzLDcgQEAgYm9vbCBUZXh0
dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJl
LCBGbGFncyBmbGFncywKICAgICAvLyBhbnRpYWxpYXNpbmcuIE5vdGUgaGVyZSB0aGF0IHdlIGFy
ZSBhbHNvIGluY2x1ZGluZyB0aGUgdmlld3BvcnQgbWF0cml4ICh3aGljaAogICAgIC8vIHRyYW5z
bGF0ZXMgZnJvbSBub3JtYWxpemVkIGRldmljZSBjb29yZGluYXRlcyB0byBzY3JlZW4gY29vcmRp
bmF0ZXMpLCBiZWNhdXNlIHRoZXNlCiAgICAgLy8gdmFsdWVzIGFyZSBjb25zdW1lZCBpbiB0aGUg
ZnJhZ21lbnQgc2hhZGVyLCB3aGljaCB3b3JrcyBpbiBzY3JlZW4gY29vcmRpbmF0ZXMuCi0gICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggc2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSB2aWV3cG9ydE1hdHJp
eCgpLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4
KSkubXVsdGlwbHkobW9kZWxWaWV3TWF0cml4KS50bzJkVHJhbnNmb3JtKCk7CisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggc2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSB2aWV3cG9ydE1hdHJpeChtX2Nv
bnRleHQzRC5nZXQoKSkubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2pl
Y3Rpb25NYXRyaXgpKS5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgpLnRvMmRUcmFuc2Zvcm0oKTsK
ICAgICBpZiAoIXNjcmVlblNwYWNlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgRmxvYXRRdWFkIHF1YWRJblNjcmVlblNwYWNlID0gc2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0ubWFwUXVhZChvcmlnaW5hbFRhcmdldFJlY3QpOwpAQCAtNTgwLDggKzUyNyw4
IEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWlu
dDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsCiAgICAgcXVhZFRvRWRnZUFycmF5KGluZmxhdGVR
dWFkKHF1YWRJblNjcmVlblNwYWNlLmJvdW5kaW5nQm94KCksICBpbmZsYXRpb25EaXN0YW5jZSks
IHRhcmdldFF1YWRFZGdlcyArIDEyKTsKIAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaz4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEo
KS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5hbnRpYWxpYXNpbmdOb01hc2tQcm9ncmFtKCk7
Ci0gICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKSk7Ci0gICAgR0xfQ01EKGds
VW5pZm9ybTNmdihwcm9ncmFtLT5leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlv
bigpLCA4LCB0YXJnZXRRdWFkRWRnZXMpKTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShw
cm9ncmFtLT5pZCgpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTNmdihwcm9ncmFtLT5leHBh
bmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbigpLCA4LCB0YXJnZXRRdWFkRWRnZXMp
OwogCiAgICAgZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKHByb2dyYW0uZ2V0KCksIHRleHR1
cmUsIGZsYWdzLCBEcmF3UXVhZChvcmlnaW5hbFRhcmdldFJlY3QsIGV4cGFuZGVkUXVhZEluVGV4
dHVyZUNvb3JkaW5hdGVzKSwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5LCAwIC8qIG1hc2tUZXh0
dXJlICovKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU4OSwyNiArNTM2LDI2IEBAIGJvb2wgVGV4
dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVy
ZSwgRmxhZ3MgZmxhZ3MsCiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFk
V2l0aFByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHByb2dyYW0sIHVpbnQzMl90
IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBEcmF3UXVhZCYgcXVhZFRvRHJhdywgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29u
c3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCiB7Ci0gICAgR0xfQ01EKGdsRW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xB
Y3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSk7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgdGV4dHVyZSkpOwotICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtLT5z
b3VyY2VUZXh0dXJlTG9jYXRpb24oKSwgMCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0Qt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKyAgICBtX2NvbnRl
eHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmUp
OworICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVyZUxvY2F0
aW9uKCksIDApOwogCi0gICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW0tPmZsaXBMb2NhdGlv
bigpLCAhIShmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSkpOworICAgIG1fY29udGV4dDNELT51
bmlmb3JtMWYocHJvZ3JhbS0+ZmxpcExvY2F0aW9uKCksICEhKGZsYWdzICYgU2hvdWxkRmxpcFRl
eHR1cmUpKTsKIAogICAgIGlmIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSkpCi0gICAgICAgIEdMX0NN
RChnbFVuaWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0eSkpOworICAg
ICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpLCBv
cGFjaXR5KTsKIAogICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgp
ICYmIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSkpIHsKICAgICAgICAgY29uc3QgQml0bWFwVGV4
dHVyZUdMKiBtYXNrVGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdM
Kj4obWFza1RleHR1cmUpOwotICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRV
UkUxKSk7Ci0gICAgICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1hc2tU
ZXh0dXJlR0wtPmlkKCkpKTsKLSAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW0tPm1h
c2tUZXh0dXJlTG9jYXRpb24oKSwgMSkpOwotICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJl
KEdMX1RFWFRVUkUwKSk7CisgICAgICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMSk7CisgICAgICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbWFza1RleHR1cmVHTC0+aWQoKSk7Cisg
ICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlv
bigpLCAxKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkUwKTsKICAgICB9CiAKICAgICBib29sIG5lZWRzQmxlbmRpbmcgPSAoZmxh
Z3MgJiBTdXBwb3J0c0JsZW5kaW5nKSB8fCBvcGFjaXR5IDwgMC45OSB8fCBtYXNrVGV4dHVyZTsK
LSAgICBkcmF3UXVhZChxdWFkVG9EcmF3LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0sIEdMX1RS
SUFOR0xFX0ZBTiwgbmVlZHNCbGVuZGluZyk7CisgICAgZHJhd1F1YWQocXVhZFRvRHJhdywgbW9k
ZWxWaWV3TWF0cml4LCBwcm9ncmFtLCBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCBu
ZWVkc0JsZW5kaW5nKTsKIH0KIAogYm9vbCBCaXRtYXBUZXh0dXJlR0w6OmNhblJldXNlV2l0aChj
b25zdCBJbnRTaXplJiBjb250ZW50c1NpemUsIEZsYWdzKQpAQCAtNjE5LDcgKzU2Niw3IEBAIGJv
b2wgQml0bWFwVGV4dHVyZUdMOjpjYW5SZXVzZVdpdGgoY29uc3QgSW50U2l6ZSYgY29udGVudHNT
aXplLCBGbGFncykKICNpZiBPUyhEQVJXSU4pCiAjZGVmaW5lIERFRkFVTFRfVEVYVFVSRV9QSVhF
TF9UUkFOU0ZFUl9UWVBFIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFVgogI2Vsc2UKLSNkZWZp
bmUgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUgR0xfVU5TSUdORURfQllURQor
I2RlZmluZSBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURQogI2VuZGlmCiAKIHN0YXRpYyBib29sIGRyaXZlclN1cHBvcnRz
U3ViSW1hZ2UoKQpAQCAtNjM0LDMwICs1ODEsMzEgQEAgc3RhdGljIGJvb2wgZHJpdmVyU3VwcG9y
dHNTdWJJbWFnZSgpCiAKIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpkaWRSZXNldCgpCiB7CisgICAg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3ND
b250ZXh0M0QoKTsKICAgICBpZiAoIW1faWQpCi0gICAgICAgIEdMX0NNRChnbEdlblRleHR1cmVz
KDEsICZtX2lkKSk7Ci0KKyAgICAgICAgbV9pZCA9IGNvbnRleHQzRC0+Y3JlYXRlVGV4dHVyZSgp
OwogICAgIG1fc2hvdWxkQ2xlYXIgPSB0cnVlOwogICAgIGlmIChtX3RleHR1cmVTaXplID09IGNv
bnRlbnRTaXplKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fdGV4dHVyZVNpemUgPSBjb250
ZW50U2l6ZSgpOwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQp
KTsKLSAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
TUlOX0ZJTFRFUiwgR0xfTElORUFSKSk7Ci0gICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUikpOwotICAgIEdMX0NN
RChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpKTsKLSAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKSk7Ci0gICAgR0xfQ01EKGdsVGV4
SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCBtX3RleHR1cmVTaXplLndpZHRoKCks
IG1fdGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIERFRkFVTFRfVEVYVFVSRV9QSVhF
TF9UUkFOU0ZFUl9UWVBFLCAwKSk7CisgICAgY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9pZCk7CisgICAgY29udGV4dDNELT50ZXhQYXJhbWV0
ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICBjb250ZXh0
M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIp
OworICAgIGNvbnRleHQzRC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQz
RDo6Q0xBTVBfVE9fRURHRSk7CisgICAgY29udGV4dDNELT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Qs
IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBjb250ZXh0M0QtPnRleElt
YWdlMkREaXJlY3QoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0
KCksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJB
TlNGRVJfVFlQRSwgMCk7CiB9CiAKIAogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRl
bnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IElu
dFBvaW50JiBzb3VyY2VPZmZzZXQsIGludCBieXRlc1BlckxpbmUpCiB7Ci0gICAgR0xfQ01EKGds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpOworICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAg
Y29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9p
ZCk7CiAKICAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclBpeGVsID0gNDsKICAgICBpZiAoYnl0
ZXNQZXJMaW5lID09IHRhcmdldFJlY3Qud2lkdGgoKSAqIGJ5dGVzUGVyUGl4ZWwgJiYgc291cmNl
T2Zmc2V0ID09IEludFBvaW50Ojp6ZXJvKCkpIHsKLSAgICAgICAgR0xfQ01EKGdsVGV4U3ViSW1h
Z2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRh
cmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgR0xfUkdCQSwgREVGQVVMVF9U
RVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIChjb25zdCBjaGFyKilkYXRhKSk7CisgICAgICAg
IGNvbnRleHQzRC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
MCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRh
cmdldFJlY3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBERUZBVUxUX1RFWFRV
UkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgKGNvbnN0IGNoYXIqKWRhdGEpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC02NzUsMTkgKzYyMywxOSBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6
dXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVj
dAogICAgICAgICAgICAgZHN0ICs9IHRhcmdldEJ5dGVzUGVyTGluZTsKICAgICAgICAgfQogCi0g
ICAgICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVj
dC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVp
Z2h0KCksIEdMX1JHQkEsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCB0ZW1w
b3JhcnlEYXRhLmRhdGEoKSkpOworICAgICAgICBjb250ZXh0M0QtPnRleFN1YkltYWdlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0
LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIHRlbXBv
cmFyeURhdGEuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lmICFkZWZpbmVk
KFRFWE1BUF9PUEVOR0xfRVNfMikKICAgICAvLyBVc2UgdGhlIE9wZW5HTCBzdWItaW1hZ2UgZXh0
ZW5zaW9uLCBub3cgdGhhdCB3ZSBrbm93IGl0J3MgYXZhaWxhYmxlLgotICAgIEdMX0NNRChnbFBp
eGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCBieXRlc1BlckxpbmUgLyBieXRlc1BlclBp
eGVsKSk7Ci0gICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgc291
cmNlT2Zmc2V0LnkoKSkpOwotICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQ
X1BJWEVMUywgc291cmNlT2Zmc2V0LngoKSkpOwotICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQo
R0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRS
ZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIEdMX1JHQkEsIERFRkFVTFRfVEVYVFVS
RV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29uc3QgY2hhciopZGF0YSkpOwotICAgIEdMX0NNRChn
bFBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCAwKSk7Ci0gICAgR0xfQ01EKGdsUGl4
ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgMCkpOwotICAgIEdMX0NNRChnbFBpeGVsU3Rv
cmVpKEdMX1VOUEFDS19TS0lQX1BJWEVMUywgMCkpOworICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9y
ZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIGJ5dGVzUGVyTGluZSAvIGJ5dGVzUGVyUGl4ZWwpOwor
ICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgc291cmNlT2Zm
c2V0LnkoKSk7CisgICAgY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhF
TFMsIHNvdXJjZU9mZnNldC54KCkpOworICAgIGNvbnRleHQzRC0+dGV4U3ViSW1hZ2UyRChHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3Qu
eSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgKGNvbnN0
IGNoYXIqKWRhdGEpOworICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19M
RU5HVEgsIDApOworICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9X
UywgMCk7CisgICAgY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMs
IDApOwogI2VuZGlmCiB9CiAKQEAgLTcxMiwxOSArNjYwLDE5IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpkcmF3RmlsdGVyZWQoY29uc3QgQml0bWFwVGV4dHVyZSYgc291cmNlVGV4dHVyZSwgY29u
c3QgQml0CiAKICAgICBwcm9ncmFtLT5wcmVwYXJlKGZpbHRlciwgcGFzcywgc291cmNlVGV4dHVy
ZS5jb250ZW50U2l6ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihjb250
ZW50VGV4dHVyZSkuaWQoKSk7CiAKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xBY3Rp
dmVUZXh0dXJlKEdMX1RFWFRVUkUwKSk7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oc291cmNlVGV4dHVy
ZSkuaWQoKSkpOwotICAgIGdsVW5pZm9ybTFpKHByb2dyYW0tPnRleHR1cmVVbmlmb3JtKCksIDAp
OwotICAgIGNvbnN0IEdMZmxvYXQgdGFyZ2V0VmVydGljZXNbXSA9IHstMSwgLTEsIDEsIC0xLCAx
LCAxLCAtMSwgMX07Ci0gICAgY29uc3QgR0xmbG9hdCBzb3VyY2VWZXJ0aWNlc1tdID0gezAsIDAs
IDEsIDAsIDEsIDEsIDAsIDF9OwotICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJv
Z3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdGFyZ2V0VmVy
dGljZXMpKTsKLSAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnRleENv
b3JkQXR0cmliKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgc291cmNlVmVydGljZXMpKTsK
LSAgICBHTF9DTUQoZ2xEaXNhYmxlKEdMX0JMRU5EKSk7Ci0gICAgR0xfQ01EKGdsRHJhd0FycmF5
cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpKTsKLSAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xEaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSkpOworICAgIG1fY29u
dGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7
CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENv
b3JkQXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFMCk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wm
Pihzb3VyY2VUZXh0dXJlKS5pZCgpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dy
YW0tPnRleHR1cmVVbmlmb3JtKCksIDApOworICAgIGNvbnN0IEdDM0RmbG9hdCB0YXJnZXRWZXJ0
aWNlc1tdID0gey0xLCAtMSwgMSwgLTEsIDEsIDEsIC0xLCAxfTsKKyAgICBjb25zdCBHQzNEZmxv
YXQgc291cmNlVmVydGljZXNbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKKyAgICBtX2Nv
bnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwg
R3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cih0YXJnZXRWZXJ0
aWNlcykpOworICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnRl
eENvb3JkQXR0cmliKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdD
M0RpbnRwdHIoc291cmNlVmVydGljZXMpKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgIG1fY29udGV4dDNELT5kcmF3QXJyYXlzKEdyYXBo
aWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQpOworICAgIG1fY29udGV4dDNELT5kaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29u
dGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIo
KSk7CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQml0bWFwVGV4dHVyZUdMOjphcHBs
eUZpbHRlcnMoY29uc3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIGZpbHRlcnMpCkBAIC03NjUsMTcgKzcxMywxOCBAQCB2b2lkIEJpdG1hcFRl
eHR1cmVHTDo6aW5pdGlhbGl6ZVN0ZW5jaWwoKQogewogICAgIGlmIChtX3JibykKICAgICAgICAg
cmV0dXJuOwotICAgIEdMX0NNRChnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fcmJvKSk7Ci0gICAg
R0xfQ01EKGdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fcmJvKSk7CisgICAg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3ND
b250ZXh0M0QoKTsKKyAgICBtX3JibyA9IGNvbnRleHQzRC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7
CisgICAgY29udGV4dDNELT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVIsIG1fcmJvKTsKICNpZmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSAgICBHTF9DTUQo
Z2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgR0xfU1RFTkNJTF9JTkRFWDgs
IG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSkpOworICAgIGNv
bnRleHQzRC0+cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDgsIG1fdGV4dHVyZVNpemUud2lk
dGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CiAjZWxzZQotICAgIEdMX0NNRChnbFJlbmRl
cmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9ERVBUSF9TVEVOQ0lMLCBtX3RleHR1
cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKTsKKyAgICBjb250ZXh0M0Qt
PnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUwsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90
ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CiAjZW5kaWYKLSAgICBHTF9DTUQoZ2xCaW5kUmVuZGVyYnVm
ZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCkpOwotICAgIEdMX0NNRChnbEZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJV
RkZFUiwgbV9yYm8pKTsKLSAgICBHTF9DTUQoZ2xDbGVhclN0ZW5jaWwoMCkpOwotICAgIEdMX0NN
RChnbENsZWFyKEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpOworICAgIGNvbnRleHQzRC0+YmluZFJl
bmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKKyAgICBjb250
ZXh0M0QtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9yYm8pOworICAgIGNvbnRleHQzRC0+Y2xlYXJTdGVuY2ls
KDApOworICAgIGNvbnRleHQzRC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVG
RkVSX0JJVCk7CiB9CiAKIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpjbGVhcklmTmVlZGVkKCkKQEAg
LTc4MywxMCArNzMyLDExIEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpjbGVhcklmTmVlZGVkKCkK
ICAgICBpZiAoIW1fc2hvdWxkQ2xlYXIpCiAgICAgICAgIHJldHVybjsKIAorICAgIEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNE
KCk7CiAgICAgbV9jbGlwU3RhY2suaW5pdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fdGV4
dHVyZVNpemUpKTsKLSAgICBtX2NsaXBTdGFjay5hcHBseSgpOwotICAgIEdMX0NNRChnbENsZWFy
Q29sb3IoMCwgMCwgMCwgMCkpOwotICAgIEdMX0NNRChnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9C
SVQpKTsKKyAgICBtX2NsaXBTdGFjay5hcHBseShjb250ZXh0M0QpOworICAgIGNvbnRleHQzRC0+
Y2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyAgICBjb250ZXh0M0QtPmNsZWFyKEdyYXBoaWNzQ29u
dGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsKICAgICBtX3Nob3VsZENsZWFyID0gZmFsc2U7CiB9
CiAKQEAgLTc5NSwzMyArNzQ1LDM2IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpjcmVhdGVGYm9J
Zk5lZWRlZCgpCiAgICAgaWYgKG1fZmJvKQogICAgICAgICByZXR1cm47CiAKLSAgICBHTF9DTUQo
Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKSk7Ci0gICAgR0xfQ01EKGdsQmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2ZibykpOwotICAgIEdMX0NNRChnbEZyYW1lYnVmZmVyVGV4
dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8y
RCwgaWQoKSwgMCkpOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1
cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgbV9mYm8gPSBjb250ZXh0M0QtPmNy
ZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgY29udGV4dDNELT5iaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgY29udGV4dDNELT5mcmFtZWJ1
ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IGlkKCksIDApOwogICAgIG1fc2hvdWxkQ2xlYXIgPSB0cnVlOwogfQogCiB2b2lkIEJpdG1hcFRl
eHR1cmVHTDo6YmluZCgpCiB7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgMCkpOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBw
ZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CiAgICAgY3JlYXRlRmJvSWZOZWVkZWQoKTsK
LSAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKSk7Ci0g
ICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1
cmVTaXplLmhlaWdodCgpKSk7CisgICAgY29udGV4dDNELT5iaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgY29udGV4dDNELT52aWV3cG9y
dCgwLCAwLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpOwog
ICAgIGNsZWFySWZOZWVkZWQoKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmRhdGEoKS5wcm9qZWN0
aW9uTWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeChtX3RleHR1cmVTaXplLCB0cnVlIC8q
IG1pcnJvcmVkICovKTsKLSAgICBtX2NsaXBTdGFjay5hcHBseSgpOworICAgIG1fY2xpcFN0YWNr
LmFwcGx5KGNvbnRleHQzRCk7CiB9CiAKIEJpdG1hcFRleHR1cmVHTDo6fkJpdG1hcFRleHR1cmVH
TCgpCiB7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBl
ci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKICAgICBpZiAobV9pZCkKLSAgICAgICAgR0xfQ01EKGds
RGVsZXRlVGV4dHVyZXMoMSwgJm1faWQpKTsKKyAgICAgICAgY29udGV4dDNELT5kZWxldGVUZXh0
dXJlKG1faWQpOwogCiAgICAgaWYgKG1fZmJvKQotICAgICAgICBHTF9DTUQoZ2xEZWxldGVGcmFt
ZWJ1ZmZlcnMoMSwgJm1fZmJvKSk7CisgICAgICAgIGNvbnRleHQzRC0+ZGVsZXRlRnJhbWVidWZm
ZXIobV9mYm8pOwogCiAgICAgaWYgKG1fcmJvKQotICAgICAgICBHTF9DTUQoZ2xEZWxldGVSZW5k
ZXJidWZmZXJzKDEsICZtX3JibykpOworICAgICAgICBjb250ZXh0M0QtPmRlbGV0ZVJlbmRlcmJ1
ZmZlcihtX3Jibyk7CiB9CiAKIGJvb2wgQml0bWFwVGV4dHVyZUdMOjppc1ZhbGlkKCkgY29uc3QK
QEAgLTg0MSwxMSArNzk0LDExIEBAIFRleHR1cmVNYXBwZXJHTDo6flRleHR1cmVNYXBwZXJHTCgp
CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiaW5kRGVmYXVsdFN1cmZhY2UoKQogewotICAgIEdM
X0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZGF0YSgpLnRhcmdldEZyYW1l
QnVmZmVyKSk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIGRhdGEoKS50YXJnZXRGcmFtZUJ1ZmZlcik7CiAgICAgSW50U2l6
ZSB2aWV3cG9ydFNpemUoZGF0YSgpLnZpZXdwb3J0WzJdLCBkYXRhKCkudmlld3BvcnRbM10pOwog
ICAgIGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeCh2aWV3
cG9ydFNpemUsIGRhdGEoKS5QYWludEZsYWdzICYgUGFpbnRpbmdNaXJyb3JlZCk7Ci0gICAgR0xf
Q01EKGdsVmlld3BvcnQoZGF0YSgpLnZpZXdwb3J0WzBdLCBkYXRhKCkudmlld3BvcnRbMV0sIHZp
ZXdwb3J0U2l6ZS53aWR0aCgpLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpKTsKLSAgICBtX2NsaXBT
dGFjay5hcHBseSgpOworICAgIG1fY29udGV4dDNELT52aWV3cG9ydChkYXRhKCkudmlld3BvcnRb
MF0sIGRhdGEoKS52aWV3cG9ydFsxXSwgdmlld3BvcnRTaXplLndpZHRoKCksIHZpZXdwb3J0U2l6
ZS5oZWlnaHQoKSk7CisgICAgbV9jbGlwU3RhY2suYXBwbHkobV9jb250ZXh0M0QuZ2V0KCkpOwog
ICAgIGRhdGEoKS5jdXJyZW50U3VyZmFjZS5jbGVhcigpOwogfQogCkBAIC04NzUsNyArODI4LDcg
QEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luU2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Y2xpcFN0YWNrKCkuY3VycmVudCgpLnNjaXNzb3JCb3guaW50ZXJzZWN0KHJlY3QpOwotICAgIGNs
aXBTdGFjaygpLmFwcGx5KCk7CisgICAgY2xpcFN0YWNrKCkuYXBwbHkobV9jb250ZXh0M0QuZ2V0
KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC04ODksMTAgKzg0MiwxMCBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2Rl
bFZpZXdNYXRyaXgsIGNvbgogCiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
PiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNpbXBsZSk7
CiAKLSAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpKTsKLSAgICBHTF9DTUQo
Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAg
IGNvbnN0IEdMZmxvYXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKLSAg
ICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAy
LCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHVuaXRSZWN0KSk7CisgICAgbV9jb250ZXh0M0QtPnVz
ZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBjb25zdCBHQzNEZmxvYXQg
dW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKKyAgICBtX2NvbnRleHQzRC0+
dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cih1bml0UmVjdCkpOwogCiAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgp
LnByb2plY3Rpb25NYXRyaXgpCiAgICAgICAgICAgICAubXVsdGlwbHkobW9kZWxWaWV3TWF0cml4
KQpAQCAtOTAxLDE0ICs4NTQsMTQgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb24KICAgICAgICAg
ICAgICAgICAwLCAwLCAxLCAwLAogICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpLCB0YXJn
ZXRSZWN0LnkoKSwgMCwgMSkpOwogCi0gICAgY29uc3QgR0xmbG9hdCBtNFtdID0geworICAgIGNv
bnN0IEdDM0RmbG9hdCBtNFtdID0gewogICAgICAgICBtYXRyaXgubTExKCksIG1hdHJpeC5tMTIo
KSwgbWF0cml4Lm0xMygpLCBtYXRyaXgubTE0KCksCiAgICAgICAgIG1hdHJpeC5tMjEoKSwgbWF0
cml4Lm0yMigpLCBtYXRyaXgubTIzKCksIG1hdHJpeC5tMjQoKSwKICAgICAgICAgbWF0cml4Lm0z
MSgpLCBtYXRyaXgubTMyKCksIG1hdHJpeC5tMzMoKSwgbWF0cml4Lm0zNCgpLAogICAgICAgICBt
YXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwgbWF0cml4Lm00MygpLCBtYXRyaXgubTQ0KCkKICAg
ICB9OwogCi0gICAgY29uc3QgR0xmbG9hdCBtNGFsbFtdID0geworICAgIGNvbnN0IEdDM0RmbG9h
dCBtNGFsbFtdID0gewogICAgICAgICAyLCAwLCAwLCAwLAogICAgICAgICAwLCAyLCAwLCAwLAog
ICAgICAgICAwLCAwLCAxLCAwLApAQCAtOTE3LDQzICs4NzAsNDIgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0
cml4LCBjb24KIAogICAgIGludCYgc3RlbmNpbEluZGV4ID0gY2xpcFN0YWNrKCkuY3VycmVudCgp
LnN0ZW5jaWxJbmRleDsKIAotICAgIEdMX0NNRChnbEVuYWJsZShHTF9TVEVOQ0lMX1RFU1QpKTsK
KyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Qp
OwogCiAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGRvIGFueSBhY3R1YWwgZHJhd2luZy4KLSAg
ICBHTF9DTUQoZ2xTdGVuY2lsRnVuYyhHTF9ORVZFUiwgc3RlbmNpbEluZGV4LCBzdGVuY2lsSW5k
ZXgpKTsKKyAgICBtX2NvbnRleHQzRC0+c3RlbmNpbEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok5F
VkVSLCBzdGVuY2lsSW5kZXgsIHN0ZW5jaWxJbmRleCk7CiAKICAgICAvLyBPcGVyYXRlIG9ubHkg
b24gdGhlIHN0ZW5jaWxJbmRleCBhbmQgYWJvdmUuCi0gICAgR0xfQ01EKGdsU3RlbmNpbE1hc2so
MHhmZiAmIH4oc3RlbmNpbEluZGV4IC0gMSkpKTsKKyAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE1h
c2soMHhmZiAmIH4oc3RlbmNpbEluZGV4IC0gMSkpOwogCiAgICAgLy8gRmlyc3QgY2xlYXIgdGhl
IGVudGlyZSBidWZmZXIgYXQgdGhlIGN1cnJlbnQgaW5kZXguCi0gICAgR0xfQ01EKGdsVW5pZm9y
bU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBHTF9GQUxTRSwgbTRhbGwp
KTsKLSAgICBHTF9DTUQoZ2xTdGVuY2lsT3AoR0xfWkVSTywgR0xfWkVSTywgR0xfWkVSTykpOwot
ICAgIEdMX0NNRChnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSk7CisgICAgbV9j
b250ZXh0M0QtPnVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+bWF0cml4TG9jYXRpb24oKSwgMSwg
ZmFsc2UsIGNvbnN0X2Nhc3Q8R0MzRGZsb2F0Kj4obTRhbGwpKTsKKyAgICBtX2NvbnRleHQzRC0+
c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6WkVS
TywgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOworICAgIG1fY29udGV4dDNELT5kcmF3QXJyYXlz
KEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQpOwogCiAgICAgLy8gTm93IGFw
cGx5IHRoZSBjdXJyZW50IGluZGV4IHRvIHRoZSBuZXcgcXVhZC4KLSAgICBHTF9DTUQoZ2xTdGVu
Y2lsT3AoR0xfUkVQTEFDRSwgR0xfUkVQTEFDRSwgR0xfUkVQTEFDRSkpOwotICAgIEdMX0NNRChn
bFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+bWF0cml4TG9jYXRpb24oKSwgMSwgR0xfRkFMU0Us
IG00KSk7Ci0gICAgR0xfQ01EKGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpKTsK
KyAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpSRVBMQUNFLCBH
cmFwaGljc0NvbnRleHQzRDo6UkVQTEFDRSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFUExBQ0UpOwor
ICAgIG1fY29udGV4dDNELT51bmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9u
KCksIDEsIGZhbHNlLCBjb25zdF9jYXN0PEdDM0RmbG9hdCo+KG00KSk7CisgICAgbV9jb250ZXh0
M0QtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7CiAK
ICAgICAvLyBDbGVhciB0aGUgc3RhdGUuCi0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsU3RlbmNpbE1h
c2soMCkpOworICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3Jh
bS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5zdGVuY2lsTWFzaygwKTsKIAog
ICAgIC8vIEluY3JlYXNlIHN0ZW5jaWxJbmRleCBhbmQgYXBwbHkgc3RlbmNpbCB0ZXN0aW5nLgog
ICAgIHN0ZW5jaWxJbmRleCAqPSAyOwotICAgIGNsaXBTdGFjaygpLmFwcGx5KCk7CisgICAgY2xp
cFN0YWNrKCkuYXBwbHkobV9jb250ZXh0M0QuZ2V0KCkpOwogfQogCiB2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6ZW5kQ2xpcCgpCiB7CiAgICAgY2xpcFN0YWNrKCkucG9wKCk7Ci0gICAgY2xpcFN0YWNr
KCkuYXBwbHkoKTsKKyAgICBjbGlwU3RhY2soKS5hcHBseShtX2NvbnRleHQzRC5nZXQoKSk7CiB9
CiAKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0
dXJlKCkKIHsKLSAgICBCaXRtYXBUZXh0dXJlR0wqIHRleHR1cmUgPSBuZXcgQml0bWFwVGV4dHVy
ZUdMKCk7Ci0gICAgdGV4dHVyZS0+c2V0VGV4dHVyZU1hcHBlcih0aGlzKTsKKyAgICBCaXRtYXBU
ZXh0dXJlR0wqIHRleHR1cmUgPSBuZXcgQml0bWFwVGV4dHVyZUdMKHRoaXMpOwogICAgIHJldHVy
biBhZG9wdFJlZih0ZXh0dXJlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCmluZGV4IDA3NmU2NWY3
Mzc3NjI2MWYwYTNiOTNiYjg1NzNhNTA1ZGU5YzAxNzAuLjhhNzJkNjdhZjllZWQyY2Q2YjkwZWU4
MWE4NWM4MmE5ODA4ZWQ5ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKQEAgLTIzLDggKzIzLDggQEAK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJGbG9hdFF1YWQu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIK
LSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNp
bmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCkBAIC0zOCw3ICszOCw2IEBAIGNsYXNz
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOwogY2xhc3MgVGV4dHVyZU1hcHBlckdMIDogcHVi
bGljIFRleHR1cmVNYXBwZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1
cmVNYXBwZXJHTD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJH
TCk7IH0KLSAgICBUZXh0dXJlTWFwcGVyR0woKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVy
R0woKTsKIAogICAgIGVudW0gRmxhZyB7CkBAIC01NCw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3Qg
Qml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIHVuc2lnbmVkIGV4cG9zZWRFZGdlcykgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIEZsYWdz
LCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFj
aXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVk
Z2VzID0gQWxsRWRnZXMpOwogCi0jaWYgZGVmaW5lZChHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUp
CisjaWYgIVVTRShURVhNQVBfT1BFTkdMX0VTXzIpCiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0
dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXplJiB0
ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBU
ZXh0dXJlKiBtYXNrVGV4dHVyZSk7CiAjZW5kaWYKIApAQCAtNjYsNiArNjUsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBJbnRTaXplIG1heFRleHR1cmVTaXplKCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gSW50U2l6ZSgyMDAwLCAyMDAwKTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRt
YXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBHcmFwaGlj
c0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCgpIE9WRVJSSURFIHsgcmV0dXJuIG1fY29udGV4dDsg
fQorICAgIGlubGluZSBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRleHQzRC5nZXQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFw
aGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KSBPVkVSUklERSB7IG1fY29udGV4
dCA9IGNvbnRleHQ7IH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTc1LDcgKzc1LDYg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0RW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nKGJv
b2wgZW5hYmxlZCkgeyBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyA9IGVuYWJsZWQ7
IH0KIAogcHJpdmF0ZToKLQogICAgIHN0cnVjdCBDbGlwU3RhdGUgewogICAgICAgICBJbnRSZWN0
IHNjaXNzb3JCb3g7CiAgICAgICAgIGludCBzdGVuY2lsSW5kZXg7CkBAIC04OSw3ICs4OCw3IEBA
IHByaXZhdGU6CiAgICAgcHVibGljOgogICAgICAgICB2b2lkIHB1c2goKTsKICAgICAgICAgdm9p
ZCBwb3AoKTsKLSAgICAgICAgdm9pZCBhcHBseSgpOworICAgICAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dDNEKik7CiAgICAgICAgIGlubGluZSBDbGlwU3RhdGUmIGN1cnJlbnQoKSB7IHJl
dHVybiBjbGlwU3RhdGU7IH0KICAgICAgICAgdm9pZCBpbml0KGNvbnN0IEludFJlY3QmKTsKIApA
QCAtMTA5LDE2ICsxMDgsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgRmxvYXRRdWFkIHRhcmdldFJl
Y3RNYXBwZWRUb1VuaXRTcXVhcmU7CiAgICAgfTsKIAorICAgIFRleHR1cmVNYXBwZXJHTCgpOwor
CiAgICAgYm9vbCBkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVyZSwg
RmxhZ3MsIGNvbnN0IEZsb2F0UmVjdCYgb3JpZ2luYWxUYXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRt
YXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKTsKICAgICB2b2lk
IGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSos
IHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1h
cFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKLSAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IERyYXdRdWFk
JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0qLCBHTGVudW0gZHJhd2luZ01vZGUsIGJvb2wgbmVlZHNCbGVuZGlu
Zyk7CisgICAgdm9pZCBkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiwg
R0MzRGVudW0gZHJhd2luZ01vZGUsIGJvb2wgbmVlZHNCbGVuZGluZyk7CiAKICAgICBib29sIGJl
Z2luU2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJl
Y3QmKTsKICAgICB2b2lkIGJpbmREZWZhdWx0U3VyZmFjZSgpOwogICAgIENsaXBTdGFjayYgY2xp
cFN0YWNrKCk7CiAgICAgaW5saW5lIFRleHR1cmVNYXBwZXJHTERhdGEmIGRhdGEoKSB7IHJldHVy
biAqbV9kYXRhOyB9Ci0gICAgVGV4dHVyZU1hcHBlckdMRGF0YSogbV9kYXRhOwogICAgIEdyYXBo
aWNzQ29udGV4dCogbV9jb250ZXh0OworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9j
b250ZXh0M0Q7CisgICAgVGV4dHVyZU1hcHBlckdMRGF0YSogbV9kYXRhOwogICAgIENsaXBTdGFj
ayBtX2NsaXBTdGFjazsKICAgICBib29sIG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5n
OwogCkBAIC0xMzUsNyArMTM3LDcgQEAgcHVibGljOgogICAgIHZvaWQgaW5pdGlhbGl6ZVN0ZW5j
aWwoKTsKICAgICB+Qml0bWFwVGV4dHVyZUdMKCk7CiAgICAgdmlydHVhbCB1aW50MzJfdCBpZCgp
IGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLSAgICB1aW50MzJfdCB0ZXh0dXJlVGFyZ2V0KCkgY29u
c3QgeyByZXR1cm4gR0xfVEVYVFVSRV8yRDsgfQorICAgIHVpbnQzMl90IHRleHR1cmVUYXJnZXQo
KSBjb25zdCB7IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDsgfQogICAgIElu
dFNpemUgdGV4dHVyZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVTaXplOyB9CiAgICAg
dm9pZCBzZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXJHTCogdGV4bWFwKSB7IG1fdGV4dHVy
ZU1hcHBlciA9IHRleG1hcDsgfQogICAgIHZvaWQgdXBkYXRlQ29udGVudHMoSW1hZ2UqLCBjb25z
dCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmKTsKQEAgLTE0NywyMCArMTQ5LDIyIEBAIHB1Ymxp
YzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIEdMdWludCBtX2lkOworICAgIFBsYXRmb3JtM0RP
YmplY3QgbV9pZDsKICAgICBJbnRTaXplIG1fdGV4dHVyZVNpemU7CiAgICAgSW50UmVjdCBtX2Rp
cnR5UmVjdDsKLSAgICBHTHVpbnQgbV9mYm87Ci0gICAgR0x1aW50IG1fcmJvOworICAgIFBsYXRm
b3JtM0RPYmplY3QgbV9mYm87CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3JibzsKICAgICBib29s
IG1fc2hvdWxkQ2xlYXI7Ci0gICAgVGV4dHVyZU1hcHBlckdMKiBtX3RleHR1cmVNYXBwZXI7CiAg
ICAgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2sgbV9jbGlwU3RhY2s7Ci0gICAgQml0bWFwVGV4
dHVyZUdMKCkKKyAgICBUZXh0dXJlTWFwcGVyR0wqIG1fdGV4dHVyZU1hcHBlcjsKKworICAgIEJp
dG1hcFRleHR1cmVHTCgpOworICAgIEJpdG1hcFRleHR1cmVHTChUZXh0dXJlTWFwcGVyR0wqIHRl
eHR1cmVNYXBwZXIpCiAgICAgICAgIDogbV9pZCgwKQogICAgICAgICAsIG1fZmJvKDApCiAgICAg
ICAgICwgbV9yYm8oMCkKICAgICAgICAgLCBtX3Nob3VsZENsZWFyKHRydWUpCi0gICAgICAgICwg
bV90ZXh0dXJlTWFwcGVyKDApCisgICAgICAgICwgbV90ZXh0dXJlTWFwcGVyKHRleHR1cmVNYXBw
ZXIpCiAgICAgewogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5jcHAKaW5kZXggMGZiZGJlOTVjYWYxNjQ3MGRkMDYzMmYwNGMxNDRiODIwYjZlOGJiMy4uZmE4
YWMwNTMyM2U1ZGYyOGYzMTkzZmU2ZWFkZmQyNjU1YzY4NzU1ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCkBAIC0zMCwyNSArMzAsMTEgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi0jaWZuZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgotI2RlZmluZSBPRVMy
X1BSRUNJU0lPTl9ERUZJTklUSU9OUyBcCi0gICAgIiNkZWZpbmUgbG93cFxuI2RlZmluZSBoaWdo
cFxuIgotI2RlZmluZSBPRVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTgotI2Vs
c2UKLSNkZWZpbmUgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlMKLSNkZWZpbmUgT0VTMl9GUkFH
TUVOVF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT04gXAotICAgICJwcmVjaXNpb24gbWVkaXVtcCBm
bG9hdDsgXG4iCi0jZW5kaWYKLQotI2RlZmluZSBTVFJJTkdJRllfVkFMKHNyYy4uLikgI3NyYwot
I2RlZmluZSBWRVJURVhfU0hBREVSKHNyYy4uLikgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlNc
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJJTkdJRllfVkFMKHNyYykKLSNkZWZp
bmUgRlJBR01FTlRfU0hBREVSKHNyYy4uLikgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlNcCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFV
TFRfUFJFQ0lTSU9OXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJJTkdJRllf
VkFMKHNyYykKKyNkZWZpbmUgU1RSSU5HSUZZKHNyYy4uLikgI3NyYwogCiBzdGF0aWMgY29uc3Qg
Y2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9Ci0gICAgRlJBR01FTlRf
U0hBREVSKAorICAgIFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7
CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwogICAgICAgICB1bmlmb3JtIHNh
bXBsZXIyRCBzX21hc2s7CiAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CkBA
IC02NCw3ICs1MCw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZU9w
YWNpdHlBbmRNYXNrID0KICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFk
ZXJTb3VyY2VSZWN0T3BhY2l0eUFuZE1hc2sgPQotICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICBT
VFJJTkdJRlkoCisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1bmlm
b3JtIHNhbXBsZXIyRFJlY3Qgc19zb3VyY2U7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVj
dCBzX21hc2s7CiAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CkBAIC04MCw3
ICs2Nyw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFj
aXR5QW5kTWFzayA9CiAgICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNv
dXJjZU9wYWNpdHlBbmRNYXNrID0KLSAgICBWRVJURVhfU0hBREVSKAorICAgIFNUUklOR0lGWSgK
ICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OwogICAgICAgICB1bmlmb3JtIGxvd3AgZmxv
YXQgdV9mbGlwOwogICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKQEAgLTk1LDcgKzgy
LDggQEAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNr
ID0KICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1w
bGUgPQotICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCisgICAgICAgIHByZWNp
c2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NvdXJjZTsK
ICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKICAgICAgICAgdmFyeWluZyBo
aWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CkBAIC0xMDcsNyArOTUsOCBAQCBzdGF0aWMgY29u
c3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUgPQogICAgICk7CiAKIHN0YXRpYyBj
b25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZUFudGlhbGlhc2luZ05vTWFzayA9Ci0gICAg
RlJBR01FTlRfU0hBREVSKAorICAgIFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1
bXAgZmxvYXQ7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwogICAgICAgICB2
YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKICAgICAgICAgdW5pZm9ybSBsb3dw
IGZsb2F0IHVfb3BhY2l0eTsKQEAgLTE0NSw3ICsxMzQsOCBAQCBzdGF0aWMgY29uc3QgY2hhciog
ZnJhZ21lbnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNpbmdOb01hc2sgPQogICAgICk7CiAKIHN0YXRp
YyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RTaW1wbGUgPQotICAgIEZSQUdN
RU5UX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc19zb3VyY2U7CiAgICAgICAgIHVu
aWZvcm0gbG93cCB2ZWMyIHVfdGV4dHVyZVNpemU7CiAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9h
dCB1X29wYWNpdHk7CkBAIC0xNTgsNyArMTQ4LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdt
ZW50U2hhZGVyU291cmNlUmVjdFNpbXBsZSA9CiAgICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIq
IHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSA9Ci0gICAgVkVSVEVYX1NIQURFUigKKyAgICBTVFJJ
TkdJRlkoCiAgICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKICAgICAgICAgdW5pZm9ybSBs
b3dwIGZsb2F0IHVfZmxpcDsKICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CkBAIC0x
NzEsNyArMTYxLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNpbXBs
ZSA9CiAgICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNvbGlk
Q29sb3IgPQotICAgIFZFUlRFWF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAogICAgICAgICB1bmlm
b3JtIG1hdDQgdV9tYXRyaXg7CiAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwogICAg
ICAgICB2b2lkIG1haW4odm9pZCkKQEAgLTE4Miw3ICsxNzIsOCBAQCBzdGF0aWMgY29uc3QgY2hh
ciogdmVydGV4U2hhZGVyU291cmNlU29saWRDb2xvciA9CiAKIAogc3RhdGljIGNvbnN0IGNoYXIq
IGZyYWdtZW50U2hhZGVyU291cmNlU29saWRDb2xvciA9Ci0gICAgVkVSVEVYX1NIQURFUigKKyAg
ICBTVFJJTkdJRlkoCisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1
bmlmb3JtIHZlYzQgdV9jb2xvcjsKICAgICAgICAgdm9pZCBtYWluKHZvaWQpCiAgICAgICAgIHsK
QEAgLTIxMiwyMiArMjAzLDIyIEBAIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9nCiAKICAgICBzd2l0
Y2ggKHNoYWRlclR5cGUpIHsKICAgICBjYXNlIFNpbXBsZToKLSAgICAgICAgcHJvZ3JhbSA9IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpjcmVhdGUoKTsKKyAgICAgICAgcHJvZ3Jh
bSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpjcmVhdGUobV9jb250ZXh0KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSZWN0U2ltcGxlOgotICAgICAgICBwcm9ncmFtID0g
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpjcmVhdGUoKTsKKyAgICAgICAg
cHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3JlYXRlKG1f
Y29udGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQW50aWFsaWFzaW5nTm9NYXNrOgot
ICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdO
b01hc2s6OmNyZWF0ZSgpOworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OmNyZWF0ZShtX2NvbnRleHQpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIE9wYWNpdHlBbmRNYXNrOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dy
YW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpjcmVhdGUobV9j
b250ZXh0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSZWN0T3BhY2l0eUFuZE1hc2s6Ci0g
ICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5k
TWFzazo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgU29saWRDb2xvcjoKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU29saWRDb2xvcjo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OmNyZWF0ZShtX2NvbnRleHQpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEludmFsaWQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtMjM2LDggKzIyNyw5IEBAIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9nCiAgICAgcmV0
dXJuIHByb2dyYW07CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbShjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNo
YXIqIGZyYWdtZW50U2hhZGVyU291cmNlKQotICAgIDogbV9pZCgwKQorVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW06OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0LCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZy
YWdtZW50U2hhZGVyU291cmNlKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX2lk
KDApCiAgICAgLCBtX3ZlcnRleEF0dHJpYigwKQogICAgICwgbV92ZXJ0ZXhTaGFkZXIoMCkKICAg
ICAsIG1fZnJhZ21lbnRTaGFkZXIoMCkKQEAgLTI1Niw0NiArMjQ4LDQ2IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW06OmluaXRpYWxpemVQcm9ncmFtKCkKIHsKICAgICBjb25zdCBj
aGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VQcm9ncmFtID0gdmVydGV4U2hhZGVyU291cmNlKCk7CiAg
ICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VQcm9ncmFtID0gZnJhZ21lbnRTaGFk
ZXJTb3VyY2UoKTsKLSAgICBHTHVpbnQgdmVydGV4U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xf
VkVSVEVYX1NIQURFUik7Ci0gICAgR0x1aW50IGZyYWdtZW50U2hhZGVyID0gZ2xDcmVhdGVTaGFk
ZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKLSAgICBnbFNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIs
IDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2VQcm9ncmFtLCAwKTsKLSAgICBnbFNoYWRlclNvdXJjZShm
cmFnbWVudFNoYWRlciwgMSwgJmZyYWdtZW50U2hhZGVyU291cmNlUHJvZ3JhbSwgMCk7Ci0gICAg
R0x1aW50IHByb2dyYW1JRCA9IGdsQ3JlYXRlUHJvZ3JhbSgpOwotICAgIGdsQ29tcGlsZVNoYWRl
cih2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsQ29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Cisg
ICAgUGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRl
cihHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7CisgICAgUGxhdGZvcm0zRE9iamVj
dCBmcmFnbWVudFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFHTUVOVF9TSEFERVIpOworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKHZlcnRl
eFNoYWRlciwgdmVydGV4U2hhZGVyU291cmNlUHJvZ3JhbSk7CisgICAgbV9jb250ZXh0LT5zaGFk
ZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyU291cmNlUHJvZ3JhbSk7Cisg
ICAgUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtSUQgPSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0o
KTsKKyAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKKyAgICBtX2Nv
bnRleHQtPmNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOwogCi0gICAgZ2xBdHRhY2hTaGFk
ZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1J
RCwgZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlEKTsKKyAgICBt
X2NvbnRleHQtPmF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRlcik7CisgICAgbV9j
b250ZXh0LT5hdHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcik7CisgICAgbV9j
b250ZXh0LT5saW5rUHJvZ3JhbShwcm9ncmFtSUQpOwogCi0gICAgbV92ZXJ0ZXhBdHRyaWIgPSBn
bEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdmVydGV4Iik7CisgICAgbV92ZXJ0ZXhB
dHRyaWIgPSBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdmVydGV4
Iik7CiAKICAgICBtX2lkID0gcHJvZ3JhbUlEOwogICAgIG1fdmVydGV4U2hhZGVyID0gdmVydGV4
U2hhZGVyOwogICAgIG1fZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNoYWRlcjsKIH0KIAotdm9p
ZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKEdMaW50ICZ2
YXJpYWJsZSwgY29uc3QgY2hhciogbmFtZSkKK3ZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmdldFVuaWZvcm1Mb2NhdGlvbihHQzNEaW50ICZ2YXJpYWJsZSwgY29uc3QgY2hhciogbmFt
ZSkKIHsKLSAgICB2YXJpYWJsZSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1faWQsIG5hbWUpOwor
ICAgIHZhcmlhYmxlID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9pZCwgbmFtZSk7
CiAgICAgQVNTRVJUKHZhcmlhYmxlID49IDApOwogfQogCiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCkKIHsKLSAgICBHTHVpbnQgcHJvZ3Jh
bUlEID0gbV9pZDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCA9IG1faWQ7CiAgICAg
aWYgKCFwcm9ncmFtSUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGdsRGV0YWNoU2hhZGVyKHBy
b2dyYW1JRCwgbV92ZXJ0ZXhTaGFkZXIpOwotICAgIGdsRGVsZXRlU2hhZGVyKG1fdmVydGV4U2hh
ZGVyKTsKLSAgICBnbERldGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fZnJhZ21lbnRTaGFkZXIpOwot
ICAgIGdsRGVsZXRlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsRGVsZXRlUHJvZ3Jh
bShwcm9ncmFtSUQpOworICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV92
ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVy
KTsKKyAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fZnJhZ21lbnRTaGFk
ZXIpOworICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOworICAg
IG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwogfQogCi1UZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKQot
ICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlU2ltcGxl
LCBmcmFnbWVudFNoYWRlclNvdXJjZVNpbXBsZSkKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
U2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZShHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCkKKyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZl
cnRleFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUpCiB7CiAg
ICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9mbGlwTG9j
YXRpb24sICJ1X2ZsaXAiKTsKQEAgLTMwNCwxNiArMjk2LDE2IEBAIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpCiAgICAg
Z2V0VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7CiB9CiAK
LVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1Tb2xpZENvbG9yKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZl
cnRleFNoYWRlclNvdXJjZVNvbGlkQ29sb3IsIGZyYWdtZW50U2hhZGVyU291cmNlU29saWRDb2xv
cikKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1Tb2xpZENvbG9yKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDog
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlU29s
aWRDb2xvciwgZnJhZ21lbnRTaGFkZXJTb3VyY2VTb2xpZENvbG9yKQogewogICAgIGluaXRpYWxp
emVQcm9ncmFtKCk7CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1
X21hdHJpeCIpOwogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX2NvbG9yTG9jYXRpb24sICJ1X2Nv
bG9yIik7CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VS
ZWN0U2ltcGxlKQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQp
CisgICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJT
b3VyY2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdFNpbXBsZSkKIHsKICAgICBpbml0
aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9u
LCAidV9tYXRyaXgiKTsKQEAgLTMyMyw4ICszMTUsOCBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVJlY3RTaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgpCiAg
ICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7CiB9
CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0odmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVy
U291cmNlT3BhY2l0eUFuZE1hc2spCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlB
bmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29u
dGV4dCwgdmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291
cmNlT3BhY2l0eUFuZE1hc2spCiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICBnZXRV
bmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7CkBAIC0zMzQsOCAr
MzI2LDggQEAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWEKICAgICBnZXRVbmlmb3JtTG9jYXRpb24o
bV9vcGFjaXR5TG9jYXRpb24sICJ1X29wYWNpdHkiKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVj
dE9wYWNpdHlBbmRNYXNrKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRl
eFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFj
aXR5QW5kTWFzaykKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNr
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayhHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCkKKyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRl
eHQsIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJj
ZVJlY3RPcGFjaXR5QW5kTWFzaykKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdl
dFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKQEAgLTM0NSw4
ICszMzcsOCBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhYwogICAgIGdldFVuaWZvcm1Mb2NhdGlv
bihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1B
bnRpYWxpYXNpbmdOb01hc2soKQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odmVy
dGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRlclNvdXJjZUFudGlhbGlhc2luZ05v
TWFzaykKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayhHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCkKKyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZl
cnRleFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNpbmdO
b01hc2spCiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRp
b24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7CkBAIC0zNTYsOSArMzQ4LDkgQEAgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OlRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtQW50aWFsaWEKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9mbGlwTG9jYXRp
b24sICJ1X2ZsaXAiKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyKCkKK1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICA6IG1f
Y29udGV4dChjb250ZXh0KQogewotICAgIEFTU0VSVChpbml0aWFsaXplT3BlbkdMU2hpbXMoKSk7
CiB9CiAKIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIoKQpAQCAtMzczLDE4ICszNjUsMTkgQEAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
On5UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpCiAKIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6
flN0YW5kYXJkRmlsdGVyUHJvZ3JhbSgpCiB7Ci0gICAgZ2xEZXRhY2hTaGFkZXIobV9pZCwgbV92
ZXJ0ZXhTaGFkZXIpOwotICAgIGdsRGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKLSAgICBn
bERldGFjaFNoYWRlcihtX2lkLCBtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRl
cihtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBnbERlbGV0ZVByb2dyYW0obV9pZCk7CisgICAgbV9j
b250ZXh0LT5kZXRhY2hTaGFkZXIobV9pZCwgbV92ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4
dC0+ZGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRldGFjaFNo
YWRlcihtX2lkLCBtX2ZyYWdtZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRl
cihtX2ZyYWdtZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV9pZCk7
CiB9CiAKLVN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRl
ck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQotICAgIDogbV9p
ZCgwKQorU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQsIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBl
LCB1bnNpZ25lZCBwYXNzKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX2lkKDAp
CiB7CiAgICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlID0KLSAgICAgICAgICAgIFZF
UlRFWF9TSEFERVIoCisgICAgICAgICAgICBTVFJJTkdJRlkoCiAgICAgICAgICAgICAgICAgYXR0
cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CiAgICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV90
ZXhDb29yZDsKICAgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsK
QEAgLTM5Niw4ICszODksNyBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVy
UHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICAgICAg
KTsKIAogI2RlZmluZSBTVEFOREFSRF9GSUxURVIoeC4uLikgXAotICAgICAgICBPRVMyX1BSRUNJ
U0lPTl9ERUZJTklUSU9OU1wKLSAgICAgICAgT0VTMl9GUkFHTUVOVF9TSEFERVJfREVGQVVMVF9Q
UkVDSVNJT05cCisgICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiJcCiAgICAgICAg
ICJ2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDtcbiJcCiAgICAgICAgICJ1bmlmb3JtIGhp
Z2hwIGZsb2F0IHVfYW1vdW50O1xuIlwKICAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4
dHVyZTtcbiJcCkBAIC00OTAsNyArNDgyLDggQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFu
ZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAg
ICAgICAgKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6
Ci0gICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gRlJBR01FTlRfU0hBREVSKAorICAgICAg
ICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUUklOR0lGWSgKKyAgICAgICAgICAgIHByZWNpc2lv
biBtZWRpdW1wIGZsb2F0OwogICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29v
cmQ7CiAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1X2JsdXJSYWRpdXM7CiAgICAgICAg
ICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7CkBAIC01MjMsNyArNTE2LDggQEAgU3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9u
OjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgc3dpdGNoIChwYXNzKSB7CiAgICAgICAgIGNh
c2UgMDogewogICAgICAgICAgICAgLy8gRmlyc3QgcGFzczogaG9yaXpvbnRhbCBhbHBoYSBibHVy
LgotICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBGUkFHTUVOVF9TSEFERVIoCisg
ICAgICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNUUklOR0lGWSgKKyAgICAgICAgICAg
ICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgICAgICAgICB2YXJ5aW5nIGhp
Z2hwIHZlYzIgdl90ZXhDb29yZDsKICAgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQg
dV9zaGFkb3dCbHVyUmFkaXVzOwogICAgICAgICAgICAgICAgIHVuaWZvcm0gbG93cCB2ZWMyIHVf
c2hhZG93T2Zmc2V0OwpAQCAtNTU2LDcgKzU1MCw4IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBl
CiAgICAgICAgICAgICB9CiAgICAgICAgIGNhc2UgMTogewogICAgICAgICAgICAgLy8gU2Vjb25k
IHBhc3M6IHZlcnRpY2FsIGFscGhhIGJsdXIgYW5kIGNvbXBvc2l0ZSB3aXRoIG9yaWdpbi4KLSAg
ICAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gRlJBR01FTlRfU0hBREVSKAorICAgICAg
ICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVFJJTkdJRlkoCisgICAgICAgICAgICAgICAg
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2
ZWMyIHZfdGV4Q29vcmQ7CiAgICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfc2hh
ZG93Qmx1clJhZGl1czsKICAgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjNCB1X3NoYWRv
d0NvbG9yOwpAQCAtNjAyLDI2ICs1OTcsMjUgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFu
ZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKIAog
ICAgIGlmICghZnJhZ21lbnRTaGFkZXJTb3VyY2UpCiAgICAgICAgIHJldHVybjsKLSAgICBHTHVp
bnQgdmVydGV4U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7Ci0gICAg
R0x1aW50IGZyYWdtZW50U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVS
KTsKLSAgICBnbFNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3Vy
Y2UsIDApOwotICAgIGdsU2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCAxLCAmZnJhZ21lbnRT
aGFkZXJTb3VyY2UsIDApOwotICAgIEdMdWludCBwcm9ncmFtSUQgPSBnbENyZWF0ZVByb2dyYW0o
KTsKLSAgICBnbENvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBnbENvbXBpbGVTaGFk
ZXIoZnJhZ21lbnRTaGFkZXIpOworICAgIFBsYXRmb3JtM0RPYmplY3QgdmVydGV4U2hhZGVyID0g
bV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIp
OworICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0
ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKTsKKyAgICBtX2NvbnRl
eHQtPnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNoYWRlclNvdXJjZSk7CisgICAg
bV9jb250ZXh0LT5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyU291
cmNlKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCA9IG1fY29udGV4dC0+Y3JlYXRl
UHJvZ3JhbSgpOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwor
ICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CiAjaWYgIUxPR19E
SVNBQkxFRAotICAgIEdMY2hhciBsb2dbMTAwXTsKLSAgICBHTGludCBsZW47Ci0gICAgZ2xHZXRT
aGFkZXJJbmZvTG9nKGZyYWdtZW50U2hhZGVyLCAxMDAsICZsZW4sIGxvZyk7CisgICAgU3RyaW5n
IGxvZzsKKyAgICBtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2coZnJhZ21lbnRTaGFkZXIpOwog
ICAgIFdURkxvZygmTG9nQ29tcG9zaXRpbmcsICIlc1xuIiwgbG9nKTsKICNlbmRpZgotICAgIGds
QXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVydGV4U2hhZGVyKTsKLSAgICBnbEF0dGFjaFNoYWRl
cihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVyKTsKLSAgICBnbExpbmtQcm9ncmFtKHByb2dyYW1J
RCk7CisgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFkZXIp
OworICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRTaGFkZXIp
OworICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0ocHJvZ3JhbUlEKTsKIAotICAgIG1fdmVydGV4
QXR0cmliID0gZ2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3ZlcnRleCIpOwotICAg
IG1fdGV4Q29vcmRBdHRyaWIgPSBnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdGV4
Q29vcmQiKTsKLSAgICBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2Nh
dGlvbihwcm9ncmFtSUQsICJ1X3RleHR1cmUiKTsKKyAgICBtX3ZlcnRleEF0dHJpYiA9IG1fY29u
dGV4dC0+Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiYV92ZXJ0ZXgiKTsKKyAgICBtX3Rl
eENvb3JkQXR0cmliID0gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJh
X3RleENvb3JkIik7CisgICAgbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uID0gbV9jb250ZXh0LT5n
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV90ZXh0dXJlIik7CiAgICAgc3dpdGNoICh0
eXBlKSB7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6U0VQSUE6CkBAIC02MzEsMjEgKzYyNSwyMSBAQCBTdGFuZGFyZEZpbHRl
clByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlv
blR5cGUgdHlwZQogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgogICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
T1BBQ0lUWToKLSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCA9IGdsR2V0VW5pZm9y
bUxvY2F0aW9uKHByb2dyYW1JRCwgInVfYW1vdW50Iik7CisgICAgICAgIG1fdW5pZm9ybUxvY2F0
aW9ucy5hbW91bnQgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1
X2Ftb3VudCIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxV
UjoKLSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmJsdXIucmFkaXVzID0gZ2xHZXRVbmlmb3Jt
TG9jYXRpb24ocHJvZ3JhbUlELCAidV9ibHVyUmFkaXVzIik7Ci0gICAgICAgIG1fdW5pZm9ybUxv
Y2F0aW9ucy5ibHVyLmdhdXNzaWFuS2VybmVsID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3Jh
bUlELCAidV9nYXVzc2lhbktlcm5lbCIpOworICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1
ci5yYWRpdXMgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2Js
dXJSYWRpdXMiKTsKKyAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmJsdXIuZ2F1c3NpYW5LZXJu
ZWwgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFu
S2VybmVsIik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9Q
X1NIQURPVzoKLSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzID0g
Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dCbHVyUmFkaXVzIik7Ci0g
ICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwgPSBnbEdldFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7CisgICAgICAgIG1f
dW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1cyA9IG1fY29udGV4dC0+Z2V0VW5pZm9y
bUxvY2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93Qmx1clJhZGl1cyIpOworICAgICAgICBtX3Vu
aWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsID0gbV9jb250ZXh0LT5nZXRVbmlm
b3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9nYXVzc2lhbktlcm5lbCIpOwogICAgICAgICBpZiAo
IXBhc3MpCi0gICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93Lm9mZnNldCA9IGds
R2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93T2Zmc2V0Iik7CisgICAgICAg
ICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93Lm9mZnNldCA9IG1fY29udGV4dC0+Z2V0VW5p
Zm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93T2Zmc2V0Iik7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSBjb2xvciBhbmQgdGhlIGNvbnRlbnQg
dGV4dHVyZSBpbiB0aGUgc2Vjb25kIHBhc3MsIHRoZSBmaXJzdCBwYXNzIGlzIG9ubHkgYSBob3Jp
em9udGFsIGFscGhhIGJsdXIuCi0gICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93
LmNvbG9yID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dDb2xvciIp
OwotICAgICAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb250ZW50VGV4dHVyZSA9
IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfY29udGVudFRleHR1cmUiKTsKKyAg
ICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29sb3IgPSBtX2NvbnRleHQtPmdl
dFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3NoYWRvd0NvbG9yIik7CisgICAgICAgICAg
ICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbnRlbnRUZXh0dXJlID0gbV9jb250ZXh0LT5n
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9jb250ZW50VGV4dHVyZSIpOwogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC02NTYsOSArNjUwLDkgQEAgU3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9u
OjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICBtX2ZyYWdtZW50U2hhZGVyID0gZnJhZ21lbnRTaGFk
ZXI7CiB9CiAKLVBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBTdGFuZGFyZEZpbHRl
clByb2dyYW06OmNyZWF0ZShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5z
aWduZWQgcGFzcykKK1Bhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBTdGFuZGFyZEZp
bHRlclByb2dyYW06OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRmlsdGVyT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUsIHVuc2lnbmVkIHBhc3MpCiB7Ci0gICAgUmVmUHRy
PFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGFkb3B0UmVmKG5ldyBTdGFuZGFyZEZp
bHRlclByb2dyYW0odHlwZSwgcGFzcykpOworICAgIFJlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dy
YW0+IHByb2dyYW0gPSBhZG9wdFJlZihuZXcgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKGNvbnRleHQs
IHR5cGUsIHBhc3MpKTsKICAgICBpZiAoIXByb2dyYW0tPm1faWQpCiAgICAgICAgIHJldHVybiAw
OwogCkBAIC02OTQsMjEgKzY4OCwyMSBAQCBzdGF0aWMgZmxvYXQqIGdhdXNzaWFuS2VybmVsKCkK
ICAgICByZXR1cm4ga2VybmVsOwogfQogCi12b2lkIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6cHJl
cGFyZShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwgdW5zaWduZWQgcGFzcywgY29u
c3QgSW50U2l6ZSYgc2l6ZSwgR0x1aW50IGNvbnRlbnRUZXh0dXJlKQordm9pZCBTdGFuZGFyZEZp
bHRlclByb2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVu
c2lnbmVkIHBhc3MsIGNvbnN0IEludFNpemUmIHNpemUsIEdDM0R1aW50IGNvbnRlbnRUZXh0dXJl
KQogewotICAgIGdsVXNlUHJvZ3JhbShtX2lkKTsKKyAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0o
bV9pZCk7CiAgICAgc3dpdGNoIChvcGVyYXRpb24uZ2V0T3BlcmF0aW9uVHlwZSgpKSB7CiAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6U0VQSUE6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgogICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgotICAgICAgICBnbFVuaWZvcm0xZihtX3VuaWZv
cm1Mb2NhdGlvbnMuYW1vdW50LCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7CisgICAgICAgIG1fY29udGV4dC0+
dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0YXRpY19jYXN0PGNvbnN0IEJh
c2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
Q09OVFJBU1Q6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIGds
VW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0YXRpY19jYXN0PGNvbnN0IEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgp
KTsKKyAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLmFtb3Vu
dCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
biY+KG9wZXJhdGlvbikuYW1vdW50KCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6QkxVUjogewogICAgICAgICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBi
bHVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbik7
CkBAIC03MjAsOCArNzE0LDggQEAgdm9pZCBTdGFuZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUo
Y29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHAKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgcmFkaXVzLnNldFdpZHRoKGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ci5z
dGREZXZpYXRpb24oKSwgc2l6ZS53aWR0aCgpKSAvIHNpemUud2lkdGgoKSk7CiAKLSAgICAgICAg
Z2xVbmlmb3JtMmYobV91bmlmb3JtTG9jYXRpb25zLmJsdXIucmFkaXVzLCByYWRpdXMud2lkdGgo
KSwgcmFkaXVzLmhlaWdodCgpKTsKLSAgICAgICAgZ2xVbmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0
aW9ucy5ibHVyLmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1
c3NpYW5LZXJuZWwoKSk7CisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKG1fdW5pZm9ybUxv
Y2F0aW9ucy5ibHVyLnJhZGl1cywgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSk7Cisg
ICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5nYXVz
c2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1Bf
U0hBRE9XOiB7CkBAIC03MjksMjAgKzcyMywyMCBAQCB2b2lkIFN0YW5kYXJkRmlsdGVyUHJvZ3Jh
bTo6cHJlcGFyZShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwgdW5zaWduZWQgcAog
ICAgICAgICBzd2l0Y2ggKHBhc3MpIHsKICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgLy8g
Rmlyc3QgcGFzczogdmVydGljYWwgYWxwaGEgYmx1ci4KLSAgICAgICAgICAgIGdsVW5pZm9ybTJm
KG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cub2Zmc2V0LCBmbG9hdChzaGFkb3cubG9jYXRpb24o
KS54KCkpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueSgp
KSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGdsVW5pZm9ybTFmKG1fdW5p
Zm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1cywgc2hhZG93LnN0ZERldmlhdGlvbigpIC8g
ZmxvYXQoc2l6ZS53aWR0aCgpKSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm0xZnYobV91bmlmb3Jt
TG9jYXRpb25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lE
VEgsIGdhdXNzaWFuS2VybmVsKCkpOworICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmYo
bV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5vZmZzZXQsIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigp
LngoKSkgLyBmbG9hdChzaXplLndpZHRoKCkpLCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS55KCkp
IC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3Jt
MWYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzLCBzaGFkb3cuc3RkRGV2aWF0
aW9uKCkgLyBmbG9hdChzaXplLndpZHRoKCkpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dW5p
Zm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lB
Tl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHdlIG5lZWQg
dGhlIHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3IgY29tcG9zaXRpbmcu
Ci0gICAgICAgICAgICBnbFVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJS
YWRpdXMsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKLSAg
ICAgICAgICAgIGdsVW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFu
S2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7Ci0g
ICAgICAgICAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpOwotICAgICAgICAgICAgZ2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBjb250ZW50VGV4dHVyZSk7Ci0gICAgICAgICAgICBn
bFVuaWZvcm0xaShtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbnRlbnRUZXh0dXJlLCAxKTsK
KyAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFk
b3cuYmx1clJhZGl1cywgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQo
KSkpOworICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9u
cy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwsIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRILCBnYXVz
c2lhbktlcm5lbCgpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRTEpOworICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgY29udGVudFRleHR1cmUpOworICAg
ICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWkobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5j
b250ZW50VGV4dHVyZSwgMSk7CiAgICAgICAgICAgICBmbG9hdCByLCBnLCBiLCBhOwogICAgICAg
ICAgICAgc2hhZG93LmNvbG9yKCkuZ2V0UkdCQShyLCBnLCBiLCBhKTsKLSAgICAgICAgICAgIGds
VW5pZm9ybTRmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29sb3IsIHIsIGcsIGIsIGEpOwor
ICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtNGYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRv
dy5jb2xvciwgciwgZywgYiwgYSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBicmVhazsKQEAgLTc1OSw3ICs3NTMsNyBAQCBQYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVy
UHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlckZvckZpbHRlcgog
ICAgIGludCBrZXkgPSBpbnQodHlwZSkgfCAocGFzcyA8PCAxNik7CiAgICAgRmlsdGVyTWFwOjpp
dGVyYXRvciBpdGVyYXRvciA9IG1fZmlsdGVyTWFwLmZpbmQoa2V5KTsKICAgICBpZiAoaXRlcmF0
b3IgPT0gbV9maWx0ZXJNYXAuZW5kKCkpIHsKLSAgICAgICAgcHJvZ3JhbSA9IFN0YW5kYXJkRmls
dGVyUHJvZ3JhbTo6Y3JlYXRlKHR5cGUsIHBhc3MpOworICAgICAgICBwcm9ncmFtID0gU3RhbmRh
cmRGaWx0ZXJQcm9ncmFtOjpjcmVhdGUobV9jb250ZXh0LCB0eXBlLCBwYXNzKTsKICAgICAgICAg
aWYgKCFwcm9ncmFtKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLmgKaW5kZXggNzg1NDk4ZTdmOGEzNjI3ZWFiMTA2ODZiYTM2YmZm
YjNlMTA5MTQ1Ni4uYmU0NWM1ZGFmZWZjNjdhZWEyMWZmOGQ1YjNlY2U3NGJjNjQwNTFjNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKQEAgLTI0LDkgKzI0LDkgQEAK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikK
IAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0jaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgogI2luY2x1
ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtNDQsMzkgKzQ0LDQwIEBAIGNsYXNzIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiB7CiBwdWJs
aWM6Ci0gICAgR0x1aW50IGlkKCkgeyByZXR1cm4gbV9pZDsgfQotICAgIEdMdWludCB2ZXJ0ZXhB
dHRyaWIoKSB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQorICAgIFBsYXRmb3JtM0RPYmplY3Qg
aWQoKSB7IHJldHVybiBtX2lkOyB9CisgICAgR0MzRHVpbnQgdmVydGV4QXR0cmliKCkgeyByZXR1
cm4gbV92ZXJ0ZXhBdHRyaWI7IH0KIAotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNv
bnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJT
b3VyY2UpOworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNE
KiwgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNo
YWRlclNvdXJjZSk7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRl
eHR1cmUqKSB7IH0KLSAgICBHTGludCBtYXRyaXhMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
bWF0cml4TG9jYXRpb247IH0KLSAgICBHTGludCBmbGlwTG9jYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2ZsaXBMb2NhdGlvbjsgfQotICAgIEdMaW50IHRleHR1cmVTaXplTG9jYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3RleHR1cmVTaXplTG9jYXRpb247IH0KLSAgICBHTGludCBzb3VyY2VUZXh0
dXJlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVRleHR1cmVMb2NhdGlvbjsgfQot
ICAgIEdMaW50IG1hc2tUZXh0dXJlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hc2tUZXh0
dXJlTG9jYXRpb247IH0KLSAgICBHTGludCBvcGFjaXR5TG9jYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX29wYWNpdHlMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgbWF0cml4TG9jYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX21hdHJpeExvY2F0aW9uOyB9CisgICAgR0MzRGludCBmbGlwTG9jYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2ZsaXBMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgdGV4dHVyZVNp
emVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVNpemVMb2NhdGlvbjsgfQorICAg
IEdDM0RpbnQgc291cmNlVGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VU
ZXh0dXJlTG9jYXRpb247IH0KKyAgICBHQzNEaW50IG1hc2tUZXh0dXJlTG9jYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX21hc2tUZXh0dXJlTG9jYXRpb247IH0KKyAgICBHQzNEaW50IG9wYWNpdHlM
b2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eUxvY2F0aW9uOyB9CiAKLSAgICBzdGF0
aWMgYm9vbCBpc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKEdMaW50IGxvY2F0aW9uKSB7IHJldHVybiBs
b2NhdGlvbiA+PSAwOyB9CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihH
QzNEaW50IGxvY2F0aW9uKSB7IHJldHVybiBsb2NhdGlvbiA+PSAwOyB9CiAKIHByb3RlY3RlZDoK
LSAgICB2b2lkIGdldFVuaWZvcm1Mb2NhdGlvbihHTGludCYgdmFyLCBjb25zdCBjaGFyKiBuYW1l
KTsKKyAgICB2b2lkIGdldFVuaWZvcm1Mb2NhdGlvbihHQzNEaW50JiB2YXIsIGNvbnN0IGNoYXIq
IG5hbWUpOwogICAgIHZvaWQgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICB2aXJ0dWFsIHZvaWQg
aW5pdGlhbGl6ZSgpIHsgfQogICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmVydGV4U2hhZGVyU291cmNlLmRhdGEoKTsgfQogICAgIGNvbnN0IGNo
YXIqIGZyYWdtZW50U2hhZGVyU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9mcmFnbWVudFNoYWRl
clNvdXJjZS5kYXRhKCk7IH0KIAotICAgIEdMdWludCBtX2lkOwotICAgIEdMdWludCBtX3ZlcnRl
eEF0dHJpYjsKLSAgICBHTHVpbnQgbV92ZXJ0ZXhTaGFkZXI7Ci0gICAgR0x1aW50IG1fZnJhZ21l
bnRTaGFkZXI7Ci0gICAgR0xpbnQgbV9tYXRyaXhMb2NhdGlvbjsKLSAgICBHTGludCBtX2ZsaXBM
b2NhdGlvbjsKLSAgICBHTGludCBtX3RleHR1cmVTaXplTG9jYXRpb247Ci0gICAgR0xpbnQgbV9z
b3VyY2VUZXh0dXJlTG9jYXRpb247Ci0gICAgR0xpbnQgbV9vcGFjaXR5TG9jYXRpb247Ci0gICAg
R0xpbnQgbV9tYXNrVGV4dHVyZUxvY2F0aW9uOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2Nv
bnRleHQ7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2lkOworICAgIEdDM0R1aW50IG1fdmVydGV4
QXR0cmliOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV92ZXJ0ZXhTaGFkZXI7CisgICAgUGxhdGZv
cm0zRE9iamVjdCBtX2ZyYWdtZW50U2hhZGVyOworICAgIEdDM0RpbnQgbV9tYXRyaXhMb2NhdGlv
bjsKKyAgICBHQzNEaW50IG1fZmxpcExvY2F0aW9uOworICAgIEdDM0RpbnQgbV90ZXh0dXJlU2l6
ZUxvY2F0aW9uOworICAgIEdDM0RpbnQgbV9zb3VyY2VUZXh0dXJlTG9jYXRpb247CisgICAgR0Mz
RGludCBtX29wYWNpdHlMb2NhdGlvbjsKKyAgICBHQzNEaW50IG1fbWFza1RleHR1cmVMb2NhdGlv
bjsKIAogcHJpdmF0ZToKICAgICBDU3RyaW5nIG1fdmVydGV4U2hhZGVyU291cmNlOwpAQCAtODcs
MzMgKzg4LDM2IEBAIHByaXZhdGU6CiBjbGFzcyBTdGFuZGFyZEZpbHRlclByb2dyYW0gOiBwdWJs
aWMgUmVmQ291bnRlZDxTdGFuZGFyZEZpbHRlclByb2dyYW0+IHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5TdGFuZGFyZEZpbHRlclByb2dyYW0oKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShj
b25zdCBGaWx0ZXJPcGVyYXRpb24mLCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRTaXplJiwgR0x1
aW50IGNvbnRlbnRUZXh0dXJlKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRl
clByb2dyYW0+IGNyZWF0ZShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIHVuc2lnbmVk
IHBhc3MpOwotICAgIEdMdWludCB2ZXJ0ZXhBdHRyaWIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRl
eEF0dHJpYjsgfQotICAgIEdMdWludCB0ZXhDb29yZEF0dHJpYigpIGNvbnN0IHsgcmV0dXJuIG1f
dGV4Q29vcmRBdHRyaWI7IH0KLSAgICBHTHVpbnQgdGV4dHVyZVVuaWZvcm0oKSBjb25zdCB7IHJl
dHVybiBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb247IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFy
ZShjb25zdCBGaWx0ZXJPcGVyYXRpb24mLCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRTaXplJiwg
R0MzRHVpbnQgY29udGVudFRleHR1cmUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0YW5kYXJk
RmlsdGVyUHJvZ3JhbT4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgRmlsdGVyT3BlcmF0aW9u
OjpPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBwYXNzKTsKKyAgICBHQzNEdWludCB2ZXJ0ZXhBdHRy
aWIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQorICAgIEdDM0R1aW50IHRleENv
b3JkQXR0cmliKCkgY29uc3QgeyByZXR1cm4gbV90ZXhDb29yZEF0dHJpYjsgfQorICAgIEdDM0R1
aW50IHRleHR1cmVVbmlmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlVW5pZm9ybUxvY2F0
aW9uOyB9Citwcm90ZWN0ZWQ6CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKIHBy
aXZhdGU6Ci0gICAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0
aW9uVHlwZSwgdW5zaWduZWQgcGFzcyk7Ci0gICAgR0x1aW50IG1faWQ7Ci0gICAgR0x1aW50IG1f
dmVydGV4U2hhZGVyOwotICAgIEdMdWludCBtX2ZyYWdtZW50U2hhZGVyOwotICAgIEdMdWludCBt
X3ZlcnRleEF0dHJpYjsKLSAgICBHTHVpbnQgbV90ZXhDb29yZEF0dHJpYjsKLSAgICBHTHVpbnQg
bV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOworICAgIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbSgpOwor
ICAgIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCosIEZpbHRlck9wZXJh
dGlvbjo6T3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgcGFzcyk7CisgICAgUGxhdGZvcm0zRE9iamVj
dCBtX2lkOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV92ZXJ0ZXhTaGFkZXI7CisgICAgUGxhdGZv
cm0zRE9iamVjdCBtX2ZyYWdtZW50U2hhZGVyOworICAgIEdDM0R1aW50IG1fdmVydGV4QXR0cmli
OworICAgIEdDM0R1aW50IG1fdGV4Q29vcmRBdHRyaWI7CisgICAgR0MzRHVpbnQgbV90ZXh0dXJl
VW5pZm9ybUxvY2F0aW9uOwogICAgIHVuaW9uIHsKLSAgICAgICAgR0x1aW50IGFtb3VudDsKKyAg
ICAgICAgR0MzRHVpbnQgYW1vdW50OwogCiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBH
THVpbnQgcmFkaXVzOwotICAgICAgICAgICAgR0x1aW50IGdhdXNzaWFuS2VybmVsOworICAgICAg
ICAgICAgR0MzRHVpbnQgcmFkaXVzOworICAgICAgICAgICAgR0MzRHVpbnQgZ2F1c3NpYW5LZXJu
ZWw7CiAgICAgICAgIH0gYmx1cjsKIAogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0x1
aW50IGJsdXJSYWRpdXM7Ci0gICAgICAgICAgICBHTHVpbnQgY29sb3I7Ci0gICAgICAgICAgICBH
THVpbnQgb2Zmc2V0OwotICAgICAgICAgICAgR0x1aW50IGNvbnRlbnRUZXh0dXJlOwotICAgICAg
ICAgICAgR0x1aW50IGdhdXNzaWFuS2VybmVsOworICAgICAgICAgICAgR0MzRHVpbnQgYmx1clJh
ZGl1czsKKyAgICAgICAgICAgIEdDM0R1aW50IGNvbG9yOworICAgICAgICAgICAgR0MzRHVpbnQg
b2Zmc2V0OworICAgICAgICAgICAgR0MzRHVpbnQgY29udGVudFRleHR1cmU7CisgICAgICAgICAg
ICBHQzNEdWludCBnYXVzc2lhbktlcm5lbDsKICAgICAgICAgfSBzaGFkb3c7CiAgICAgfSBtX3Vu
aWZvcm1Mb2NhdGlvbnM7CiB9OwpAQCAtMTIxLDc3ICsxMjUsODkgQEAgcHJpdmF0ZToKIAogY2xh
c3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUgOiBwdWJsaWMgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKGNvbnRleHQpKTsKICAgICB9CiAKIHBy
b3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZShHcmFwaGljc0Nv
bnRleHQzRCopOworcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBs
ZSgpOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlIDog
cHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU+IGNyZWF0ZSgp
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2lt
cGxlPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVJlY3RTaW1wbGUoY29udGV4dCkpOwogICAgIH0KIAorcHJvdGVjdGVkOgorICAgIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZShHcmFwaGljc0NvbnRleHQzRCopOwogcHJpdmF0
ZToKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKTsKIH07CiAKIGNs
YXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2sgOiBwdWJsaWMgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s+IGNyZWF0ZSgpCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFz
az4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNr
KCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtT3BhY2l0eUFuZE1hc2soY29udGV4dCkpOwogICAgIH0KIAorcHJvdGVjdGVkOgorICAgIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soR3JhcGhpY3NDb250ZXh0M0Qq
KTsKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFz
aygpOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFu
ZE1hc2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlB
bmRNYXNrPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKCkpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKGNvbnRl
eHQpKTsKICAgICB9CiAKK3Byb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVJlY3RPcGFjaXR5QW5kTWFzayhHcmFwaGljc0NvbnRleHQzRCopOwogcHJpdmF0ZToKICAgICBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaygpOwogfTsKIAogY2xh
c3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yIDogcHVibGljIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yPiBjcmVhdGUoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcigpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoY29u
dGV4dCkpOwogICAgIH0KIAotICAgIEdMaW50IGNvbG9yTG9jYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2NvbG9yTG9jYXRpb247IH0KKyAgICBHQzNEaW50IGNvbG9yTG9jYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2NvbG9yTG9jYXRpb247IH0KIAorcHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcihHcmFwaGljc0NvbnRleHQzRCopOwogcHJpdmF0ZToK
ICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoKTsKLSAgICBHTGludCBt
X2NvbG9yTG9jYXRpb247CisgICAgR0MzRGludCBtX2NvbG9yTG9jYXRpb247CiB9OwogCiBjbGFz
cyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayA6IHB1YmxpYyBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s+IGNyZWF0ZSgp
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxp
YXNpbmdOb01hc2s+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRp
YWxpYXNpbmdOb01hc2soKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2soY29udGV4dCkpOwogICAgIH0KIAot
ICAgIEdMaW50IGV4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29vcmRpbmF0ZXNMb2NhdGlv
bigpIHsgcmV0dXJuIG1fZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb3JkaW5hdGVzTG9j
YXRpb247IH0KLSAgICBHTGludCBleHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlv
bigpIHsgcmV0dXJuIG1fZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb247IH0K
KyAgICBHQzNEaW50IGV4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29vcmRpbmF0ZXNMb2Nh
dGlvbigpIHsgcmV0dXJuIG1fZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb3JkaW5hdGVz
TG9jYXRpb247IH0KKyAgICBHQzNEaW50IGV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxv
Y2F0aW9uKCkgeyByZXR1cm4gbV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlv
bjsgfQogCitwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxp
YXNpbmdOb01hc2soR3JhcGhpY3NDb250ZXh0M0QqKTsKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2soKTsKIAotICAgIEdMaW50IG1fZXhw
YW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247Ci0gICAgR0xpbnQg
bV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbjsKKyAgICBHQzNEaW50IG1f
ZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247CisgICAgR0Mz
RGludCBtX2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uOwogfTsKIAogY2xh
c3MgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgewpAQCAtMjA2LDcgKzIyMiw4IEBAIHB1Ymxp
YzoKICAgICAgICAgU29saWRDb2xvcgogICAgIH07CiAKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcigpOworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkgeyB9OworICAgIFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKEdyYXBoaWNzQ29udGV4dDNEKik7CiAgICAgdmlydHVh
bCB+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKTsKIAogI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKQEAgLTIyMSwxMiArMjM4LDEyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBI
YXNoTWFwPFNoYWRlclR5cGUsIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4sIERl
ZmF1bHRIYXNoPGludD46Okhhc2gsIEhhc2hUcmFpdHM8aW50PiA+IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtTWFwOwogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwIG1fdGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1NYXA7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4
dDsKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBS
ZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiA+IEZpbHRlck1hcDsKICAgICBGaWx0ZXJNYXAg
bV9maWx0ZXJNYXA7CiAjZW5kaWYKLQogfTsKIAogfQo=
</data>
<flag name="review"
          id="164117"
          type_id="1"
          status="+"
          setter="noam"
    />
    <flag name="commit-queue"
          id="164181"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154818</attachid>
            <date>2012-07-26 19:55:42 -0700</date>
            <delta_ts>2012-08-12 14:57:01 -0700</delta_ts>
            <desc>RenderToCurrentGLContext/GC3DQt - try fix Cr</desc>
            <filename>bug-78672-20120726195530.patch</filename>
            <type>text/plain</type>
            <size>22845</size>
            <attacher name="Helder Correia">helder.correia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODgyNmYzMjk2YTVjZmNj
MTYyZDY1NGE1OTFjOGQ2NmIzNDRkMjIxNy4uYTI0M2ZjYWUyMDlhZTM2M2E1NTQwYTFiMzcxM2E3
M2JlNDQ5ODRjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA3LTI2ICBIZWxk
ZXIgQ29ycmVpYSAgPGhlbGRlci5jb3JyZWlhQG5va2lhLmNvbT4KKworICAgICAgICBbVGV4bWFw
XSBNb3ZlIFRleHR1cmVNYXBwZXJHTCB0byB1c2UgR3JhcGhpY3NDb250ZXh0M0QKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NjcyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IG9mIGEg
c2V2ZXJhbCBwYXRjaC1yZWZhY3RvcmluZy4KKworICAgICAgICBJbnRyb2R1Y2UgYWRkaXRpb25h
bCBsb2dpYyBpbiBHcmFwaGljc0NvbnRleHQzRFF0IHRvIHN1cHBvcnQgYQorICAgICAgICBuZXcg
UmVuZGVyVG9DdXJyZW50R0xDb250ZXh0IFJlbmRlclN0eWxlLiBUaGlzIGlzIG5lY2Vzc2FyeSB0
bworICAgICAgICB1c2UgR0MzRCBmb3Igb3RoZXIgdGhpbmdzIHRoYW4gV2ViR0wsIGxpa2UgVGV4
dHVyZU1hcHBlci4KKworICAgICAgICBUaGUgR0MzRCBjb25zdHJ1Y3RvciBub3cgYWNjZXB0cyBh
IFJlbmRlclN0eWxlIGluc3RlYWQgb2YgdGhlCisgICAgICAgIGJvb2xlYW4gcmVuZGVyRGlyZWN0
bHlUb0hvc3RXaW5kb3cgYW5kIHRodXMgbWltaWNzIGNyZWF0ZSgpJ3MKKyAgICAgICAgc2lnbmF0
dXJlLiBUaGlzIGhhcyBiZWVuIGNoYW5nZWQgZm9yIGFsbCBwb3J0cyBpbiB0aGlzIHBhdGNoLgor
CisgICAgICAgIEEgbmV3IEdDM0Q6OmNyZWF0ZVdyYXBwZXJGb3JDdXJyZW50R0xDb250ZXh0KCkg
YnVpbGRlciB3YXMKKyAgICAgICAgaW50cm9kdWNlZCB0byBiZXR0ZXIgYWJzdHJhY3QgdGhlIGdv
YWwgb2YgdXNpbmcgR0MzRCB3aXRoIHRoZQorICAgICAgICBjdXJyZW50IGNvbnRleHQuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLCByZWZhY3RvcmluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhp
Y3NDb250ZXh0RnJvbVdlYkNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJsYWNrQmVy
cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVdyYXBwZXJGb3JDdXJyZW50
R0xDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6Y3JlYXRlT2Zmc2NyZWVuQnVmZmVycyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aW5pdGlhbGl6
ZUFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToK
KwogMjAxMi0wNy0yMCAgRGF2aWQgR3JvZ2FuICA8ZGdyb2dhbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgSW5kZXhlZERCOiBJbmNsdWRlIGludFZlcnNpb24gd2hlbiBjb252ZXJ0aW5nIGJldHdl
ZW4gV2ViQ29yZSBhbmQgV2ViS2l0IElEQk1ldGFkYXRhIHR5cGVzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0dyYXBoaWNzQ29udGV4dDNEQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9HcmFw
aGljc0NvbnRleHQzRENocm9taXVtLmNwcAppbmRleCAxMjdmY2ZhMDkyOWE3NmVjYzljZjVjNWU0
ZTRkMWVjZTAwMjkwM2EzLi5mOGU0NmQ4NzFjNTMzMzk4NTZkNWI5ZTk1NTgwODExZDhmNzA5MzQ1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0dy
YXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKQEAgLTQzLDcg
KzQzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1HcmFwaGljc0NvbnRleHQzRDo6R3Jh
cGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cq
LCBib29sKQorR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29u
dGV4dDNEOjpBdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRl
clN0eWxlKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9zdXBwb3J0L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAK
aW5kZXggZjZiNzMwZGRmZmFhYjc4YWI2YWFhMDI3MTI4MGEwNDg1YmY4Y2Q5Yi4uMGQ1NzFiNGJj
Nzg4ZTJkYTE5YzE1OWMyMzBmODQ2Nzk0MWYxODdmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlLmNwcApAQCAtNzcsNyArNzcsNyBAQCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6On5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUoKQogCiBQYXNzUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4
dEZyb21XZWJDb250ZXh0KFBhc3NPd25QdHI8V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRD4g
d2ViQ29udGV4dCwgYm9vbCBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIpCiB7Ci0gICAgUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNE
KEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKCksIDAsIGZhbHNlIC8qIG9uc2NyZWVuICov
KSk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3
IEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKCksIDApKTsK
IAogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IHByaXYgPSBhZG9wdFB0cihu
ZXcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKHdlYkNvbnRleHQsIHByZXNlcnZlRHJhd2luZ0J1
ZmZlcikpOwogICAgIGNvbnRleHQtPm1fcHJpdmF0ZSA9IHByaXYucmVsZWFzZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgK
aW5kZXggNzQzM2RmNjI2ZjRjYWIyYWNjNmNhMDk4YTYyODBkNDhkNDlhMmIxOS4uNjc5MjFlOTBi
MzZiNmZkMWU2NTgwZDU5NGUwZTcwMmZiOTg0ODI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC00NjMsNyArNDYz
LDggQEAgcHVibGljOgogCiAgICAgZW51bSBSZW5kZXJTdHlsZSB7CiAgICAgICAgIFJlbmRlck9m
ZnNjcmVlbiwKLSAgICAgICAgUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cKKyAgICAgICAgUmVu
ZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3csCisgICAgICAgIFJlbmRlclRvQ3VycmVudEdMQ29udGV4
dAogICAgIH07CiAKICAgICBjbGFzcyBDb250ZXh0TG9zdENhbGxiYWNrIHsKQEAgLTQ4Miw2ICs0
ODMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRFcnJvck1lc3NhZ2VDYWxsYmFjayhQYXNzT3du
UHRyPEVycm9yTWVzc2FnZUNhbGxiYWNrPik7CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gY3JlYXRlKEF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBSZW5kZXJTdHls
ZSA9IFJlbmRlck9mZnNjcmVlbik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNyZWF0ZVdyYXBwZXJGb3JDdXJyZW50R0xDb250ZXh0KCk7CiAgICAgfkdyYXBoaWNz
Q29udGV4dDNEKCk7CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC04NjUsNyArODY3LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyB1bnNpZ25lZCBnZXRDaGFubmVsQml0c0J5Rm9ybWF0KEdDM0RlbnVt
KTsKIAogICBwcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dDNEKEF0dHJpYnV0ZXMgYXR0cnMs
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cp
OworICAgIEdyYXBoaWNzQ29udGV4dDNEKEF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBSZW5kZXJT
dHlsZSA9IFJlbmRlck9mZnNjcmVlbik7CiAKICAgICAvLyBFYWNoIHBsYXRmb3JtIG11c3QgcHJv
dmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZC4KICAgICAvLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0Nv
bnRleHQzREJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJsYWNrQmVycnkuY3BwCmluZGV4IGRkNGUzZjRj
ODVhODYzNDUxOWMzZmUyYzAzZmUzYWNjYzA1M2M4YTcuLjljYjI0ZjllNDMwNjA2ODM0MTZmNzk4
YWI3YzMzMDg4MDVjNGU1ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4
dDNEQmxhY2tCZXJyeS5jcHAKQEAgLTQ3LDEwICs0NywxMCBAQCBQYXNzUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEF0dHJpYnV0ZXMgYXR0cmlicywg
SG9zdAogICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29u
dGV4dDNEKGF0dHJpYnMsIGhvc3RXaW5kb3csIGZhbHNlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRyaWJzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkp
OwogfQogCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqLCBib29sIHJlbmRlckRpcmVjdGx5
VG9Ib3N0V2luZG93KQorR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogICAgIDogbV9jdXJyZW50V2lkdGgoMCkK
ICAgICAsIG1fY3VycmVudEhlaWdodCgwKQogICAgICwgbV9jb250ZXh0KEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpHcmFwaGljczo6Y3JlYXRlV2ViR0xDb250ZXh0KCkpCkBAIC02Niw3ICs2Niw3IEBA
IEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAgICAgLCBtX2JvdW5kVGV4dHVyZTAoMCkKICAgICAs
IG1faXNJbWFnaW5hdGlvbkhhcmR3YXJlKDApCiB7Ci0gICAgaWYgKCFyZW5kZXJEaXJlY3RseVRv
SG9zdFdpbmRvdykgeworICAgIGlmIChyZW5kZXJTdHlsZSAhPSBSZW5kZXJEaXJlY3RseVRvSG9z
dFdpbmRvdykgewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICAgICAgbV9j
b21wb3NpdGluZ0xheWVyID0gV2ViR0xMYXllcldlYktpdFRocmVhZDo6Y3JlYXRlKCk7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKaW5kZXggNjJkYTFhMTZjOTExYjQw
NGFjYTAzNzUzNDE2NzNmMjc2ODE5MjVmNi4uNzAzYjNkYzY5ZDI1NjRiZmEzNmVjZmVhYTMzYjUx
ZjE2NzczZGQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKQEAgLTYwLDEx
ICs2MCwxMSBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaQogICAgIGlmICghc3VjY2VzcykKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQg
PSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cmlidXRlcywgaG9zdFdpbmRvdywg
ZmFsc2UpKTsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJl
ZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cmlidXRlcywgaG9zdFdpbmRvdywgcmVuZGVyU3R5
bGUpKTsKICAgICByZXR1cm4gY29udGV4dC5yZWxlYXNlKCk7CiB9CiAKLUdyYXBoaWNzQ29udGV4
dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRy
aWJ1dGVzLCBIb3N0V2luZG93KiwgYm9vbCkKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0Nv
bnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2lu
ZG93KiwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlKQogICAgIDogbV9jdXJyZW50V2lk
dGgoMCkKICAgICAsIG1fY3VycmVudEhlaWdodCgwKQogICAgICwgbV9hdHRycyhhdHRyaWJ1dGVz
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9H
cmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwCmluZGV4IDRiNGIwZTM5
ZGJhZTUxNjNhMGExNTE5MTcwMWVlODIyY2RhMTFjMDcuLmFiZmJkNDdlNmFlMzIyOTA4OGEzODNi
MDM0ZTZmOTE3ZTM0YzhiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRl
ci5jcHAKQEAgLTQyLDExICs0MiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywg
R3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogewotICAgIFJlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRl
eHQzRChhdHRyaWJ1dGVzLCBob3N0V2luZG93LCBmYWxzZSkpOworICAgIFJlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRy
aWJ1dGVzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkpOwogICAgIHJldHVybiBjb250ZXh0LnJl
bGVhc2UoKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3csIGJvb2wpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywg
R3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogewogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAppbmRleCBlZmUxYTEyZTJj
MjY1ZjBmYWE5ZThkZTQxOTY0OTk5NjUyYWVlYTFhLi43MjFkN2M3YmVhNTZlMTg5OTBhNDEzZjgx
ODVmMmFmZTdmNjU5OTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKQEAgLTM2LDEyICsz
NiwxMiBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaQogICAgIGlmICghaW50ZXJuYWwpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0g
YWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCByZW5kZXJE
aXJlY3RseVRvRXZhc0dMT2JqZWN0KSk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
b250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93
LCByZW5kZXJTdHlsZSkpOwogICAgIGNvbnRleHQtPm1fcHJpdmF0ZSA9IGludGVybmFsLnJlbGVh
c2UoKTsKICAgICByZXR1cm4gY29udGV4dC5yZWxlYXNlKCk7CiB9CiAKLUdyYXBoaWNzQ29udGV4
dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRy
cywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRv
dykKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogICAgIDogbV9jdXJyZW50V2lkdGgoMCkK
ICAgICAsIG1fY3VycmVudEhlaWdodCgwKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCmluZGV4
IGQwNDJjNjYwY2YzMDJhNTY5ZjBjMGY5ZTQ1ZjZlYTkzNmZiNGIzODUuLjAwZTgzMTM1MGU0NGJm
MDNjYjBiYzhiZDJkOTJkMGIxNzQxMTBhZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0KQEAg
LTk4LDExICs5OCwxMSBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaQogICAgIC8vIFRoaXMgaW1w
bGVtZW50YXRpb24gZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCByZW5kZXJpbmcgZGlyZWN0bHkg
dG8gdGhlIEhvc3RXaW5kb3cuCiAgICAgaWYgKHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVjdGx5
VG9Ib3N0V2luZG93KQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhv
c3RXaW5kb3csIGZhbHNlKSk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0
ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCByZW5k
ZXJTdHlsZSkpOwogICAgIHJldHVybiBjb250ZXh0LT5tX2NvbnRleHRPYmogPyBjb250ZXh0LnJl
bGVhc2UoKSA6IDA7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dywgYm9vbCkKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogICAgIDogbV9jdXJyZW50V2lk
dGgoMCkKICAgICAsIG1fY3VycmVudEhlaWdodCgwKQogICAgICwgbV9jb250ZXh0T2JqKDApCkBA
IC0xMjIsNiArMTIyLDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICAsIG1fcHJpdmF0
ZShhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKHRoaXMpKSkKIHsKICAgICBV
TlVTRURfUEFSQU0oaG9zdFdpbmRvdyk7CisgICAgVU5VU0VEX1BBUkFNKHJlbmRlclN0eWxlKTsK
IAogICAgIFZlY3RvcjxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4gYXR0cmliczsKICAgICBDR0xQ
aXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdE9iaiA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAppbmRleCBhNGQxZWI0Y2Q5M2M0NzYzMzZjMDJmNjEz
YmZjNjU5NDRkMjg2Y2I4Li44NzIyOGNiYTAyMGIyZDMwNmEwY2ZjMDVlMTNiMGFiMGRiMjI3NDNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKQEAg
LTcwLDYgKzcwLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorUGFzc1JlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVdyYXBwZXJGb3JDdXJyZW50
R0xDb250ZXh0KCkKK3sKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBh
ZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoQXR0cmlidXRlcygpLCAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6UmVuZGVyVG9DdXJyZW50R0xDb250ZXh0KSk7CisgICAgcmV0dXJuIGNvbnRleHQt
Pm1fcHJpdmF0ZSA/IGNvbnRleHQucmVsZWFzZSgpIDogMDsKK30KKwogdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVu
Y2lsRXh0ZW5zaW9uKQogewogICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4dGVu
c2lvbnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKaW5kZXggODk1Zjc2Njg4MDM5ZTgxZjJmNzBi
ZmFkODAwNWYwNzdiZGU1MWQxOC4uOTg1NjUzNTk3YzkxODBiMDNjOWY5YjRhOGIyYjg0OWM3MmU5
MDRmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NDb250ZXh0M0RRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlCiAjZW5kaWYKIHsKIHB1YmxpYzoKLSAgICBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBIb3N0V2luZG93Kik7CisgICAgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgSG9zdFdpbmRvdyosIEdy
YXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSk7CiAgICAgfkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZSgpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtNzcsNiArNzcs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBibGl0TXVsdGlzYW1wbGVGcmFtZWJ1ZmZlcigpIGNvbnN0
OwogICAgIHZvaWQgYmxpdE11bHRpc2FtcGxlRnJhbWVidWZmZXJBbmRSZXN0b3JlQ29udGV4dCgp
IGNvbnN0OwogICAgIGJvb2wgbWFrZUN1cnJlbnRJZk5lZWRlZCgpIGNvbnN0OworICAgIHZvaWQg
Y3JlYXRlT2Zmc2NyZWVuQnVmZmVycygpOworICAgIHZvaWQgaW5pdGlhbGl6ZUFOR0xFKCk7CiAg
ICAgdm9pZCBjcmVhdGVHcmFwaGljc1N1cmZhY2VzKGNvbnN0IEludFNpemUmKTsKIAogICAgIEdy
YXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CkBAIC0xMDYsNyArMTA4LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKIH0KICNlbmRpZgogCi1HcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK0dyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVy
U3R5bGUgcmVuZGVyU3R5bGUpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1faG9z
dFdpbmRvdyhob3N0V2luZG93KQogICAgICwgbV9zdXJmYWNlKDApCkBAIC0xMjMsNiArMTI1LDE3
IEBAIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBICiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAg
ICBpZiAocmVuZGVyU3R5bGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclRvQ3VycmVudEdM
Q29udGV4dCkgeworI2lmIEhBVkUoUVQ1KQorICAgICAgICBtX3BsYXRmb3JtQ29udGV4dCA9IFFP
cGVuR0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgpOworICAgICAgICBtX3N1cmZhY2UgPSBtX3Bs
YXRmb3JtQ29udGV4dC0+c3VyZmFjZSgpOworI2Vsc2UKKyAgICAgICAgbV9wbGF0Zm9ybUNvbnRl
eHQgPSBjb25zdF9jYXN0PFFHTENvbnRleHQqPihRR0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgp
KTsKKyAgICAgICAgbV9zdXJmYWNlID0gc3RhdGljX2Nhc3Q8UUdMV2lkZ2V0Kj4obV9wbGF0Zm9y
bUNvbnRleHQtPmRldmljZSgpKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorCiAj
aWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiAgICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8gY3Jl
YXRlIGEgUU9wZW5HTENvbnRleHQgd2l0aG91dCBjcmVhdGluZyBhIFFXaW5kb3cgYXQgYWxsLgog
ICAgIC8vIFdlIG5lZWQgdG8gY3JlYXRlIGEgc3VyZmFjZSBpbiBvcmRlciB0byBjcmVhdGUgYSBR
T3BlbkdMQ29udGV4dCBhbmQgbWFrZSBpdCBjdXJyZW50LgpAQCAtMjk2LDYgKzMwOSw1OSBAQCBi
b29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFrZUN1cnJlbnRJZk5lZWRlZCgpIGNvbnN0
CiAjZW5kaWYKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZU9mZnNj
cmVlbkJ1ZmZlcnMoKQoreworICAgIGdsR2VuRnJhbWVidWZmZXJzKC8qIGNvdW50ICovIDEsICZt
X2NvbnRleHQtPm1fZmJvKTsKKworICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fY29udGV4dC0+bV90
ZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBtX2NvbnRleHQtPm1fdGV4dHVyZSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVS
LCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9G
SUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyaShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
V1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJh
bWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBn
bEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKKworICAgIC8v
IENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KKyAgICBpZiAobV9jb250ZXh0LT5tX2F0dHJzLmFu
dGlhbGlhcykgeworICAgICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9jb250ZXh0LT5tX211
bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBtX2NvbnRleHQtPm1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBt
X2NvbnRleHQtPm1fYm91bmRGQk8gPSBtX2NvbnRleHQtPm1fbXVsdGlzYW1wbGVGQk87CisgICAg
ICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9jb250ZXh0LT5tX211bHRpc2FtcGxlQ29sb3JC
dWZmZXIpOworICAgICAgICBpZiAobV9jb250ZXh0LT5tX2F0dHJzLnN0ZW5jaWwgfHwgbV9jb250
ZXh0LT5tX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZt
X2NvbnRleHQtPm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIEJpbmQgY2FudmFzIEZCTy4KKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2NvbnRleHQtPm1fZmJvKTsKKyAgICAg
ICAgbV9jb250ZXh0LT5tX2JvdW5kRkJPID0gbV9jb250ZXh0LT5tX2ZibzsKKyNpZiBVU0UoT1BF
TkdMX0VTXzIpCisgICAgICAgIGlmIChtX2NvbnRleHQtPm1fYXR0cnMuZGVwdGgpCisgICAgICAg
ICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fY29udGV4dC0+bV9kZXB0aEJ1ZmZlcik7Cisg
ICAgICAgIGlmIChtX2NvbnRleHQtPm1fYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgICAgIGdsR2Vu
UmVuZGVyYnVmZmVycygxLCAmbV9jb250ZXh0LT5tX3N0ZW5jaWxCdWZmZXIpOworI2VuZGlmCisg
ICAgICAgIGlmIChtX2NvbnRleHQtPm1fYXR0cnMuc3RlbmNpbCB8fCBtX2NvbnRleHQtPm1fYXR0
cnMuZGVwdGgpCisgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fY29udGV4dC0+
bV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmluaXRpYWxpemVBTkdMRSgpCit7CisgICAgU2hCdWlsdEluUmVzb3VyY2VzIEFO
R0xFUmVzb3VyY2VzOworICAgIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMoJkFOR0xFUmVzb3VyY2Vz
KTsKKworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9W
RVJURVhfQVRUUklCUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAgIG1f
Y29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9S
TV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOworICAg
IG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZF
Q1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyk7CisgICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdF
X1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOworICAg
IG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9U
RVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1h
Z2VVbml0cyk7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VV
bml0cyk7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5p
Zm9ybVZlY3RvcnMpOworCisgICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVuR0wgRVMuCisg
ICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOworICAgIG1fY29udGV4dC0+bV9j
b21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworfQorCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NTdXJmYWNlcyhjb25zdCBJbnRTaXplJiBz
aXplKQogewogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQpAQCAtMzE0LDExICszODAsMTEgQEAg
UGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmkKICAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXNu
J3QgY3VycmVudGx5IHN1cHBvcnQgcmVuZGVyaW5nIGRpcmVjdGx5IHRvIHRoZSBIb3N0V2luZG93
LgogICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0g
YWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCBmYWxzZSkp
OworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBH
cmFwaGljc0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUpKTsKICAgICBy
ZXR1cm4gY29udGV4dC0+bV9wcml2YXRlID8gY29udGV4dC5yZWxlYXNlKCkgOiAwOwogfQogCi1H
cmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wpCitHcmFwaGljc0Nv
bnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMg
YXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJT
dHlsZSByZW5kZXJTdHlsZSkKICAgICA6IG1fY3VycmVudFdpZHRoKDApCiAgICAgLCBtX2N1cnJl
bnRIZWlnaHQoMCkKICAgICAsIG1fY29tcGlsZXIoaXNHTEVTMkNvbXBsaWFudCgpID8gU0hfRVNT
TF9PVVRQVVQgOiBTSF9HTFNMX09VVFBVVCkKQEAgLTMzOSw3ICs0MDUsNyBAQCBHcmFwaGljc0Nv
bnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMg
YXR0cnMsIEhvc3RXaQogICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwgbV9tdWx0aXNh
bXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQogICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVy
KDApCi0gICAgLCBtX3ByaXZhdGUoYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZSh0aGlzLCBob3N0V2luZG93KSkpCisgICAgLCBtX3ByaXZhdGUoYWRvcHRQdHIobmV3IEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZSh0aGlzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkpKQogewog
ICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwogCkBAIC0zNjAsNTQgKzQyNiwxMCBAQCBHcmFwaGlj
c0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgYXR0cnMsIEhvc3RXaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gQ3JlYXRl
IGJ1ZmZlcnMgZm9yIHRoZSBjYW52YXMgRkJPLgotICAgIGdsR2VuRnJhbWVidWZmZXJzKC8qIGNv
dW50ICovIDEsICZtX2Zibyk7Ci0KLSAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwot
ICAgIGdsQmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVy
ZSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6
TElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpMSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRl
eHQzRDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBo
aWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKKyAgICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVy
T2Zmc2NyZWVuKQorICAgICAgICBtX3ByaXZhdGUtPmNyZWF0ZU9mZnNjcmVlbkJ1ZmZlcnMoKTsK
IAotICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KLSAgICBpZiAobV9hdHRycy5hbnRp
YWxpYXMpIHsKLSAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8p
OwotICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICBtX2JvdW5kRkJPID0gbV9tdWx0aXNhbXBs
ZUZCTzsKLSAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JC
dWZmZXIpOwotICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCi0g
ICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5j
aWxCdWZmZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEJpbmQgY2FudmFzIEZCTy4KLSAg
ICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBt
X2Zibyk7Ci0gICAgICAgIG1fYm91bmRGQk8gPSBtX2ZibzsKLSNpZiBVU0UoT1BFTkdMX0VTXzIp
Ci0gICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQotICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZm
ZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKLSAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKLSAg
ICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKLSNlbmRp
ZgotICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCi0gICAgICAg
ICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9
Ci0KLSAgICAvLyBBTkdMRSBpbml0aWFsaXphdGlvbi4KLSAgICBTaEJ1aWx0SW5SZXNvdXJjZXMg
QU5HTEVSZXNvdXJjZXM7Ci0gICAgU2hJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJj
ZXMpOwotCi0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRU
UklCUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOwotICAgIGdldEludGVnZXJ2
KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVz
b3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZhcnlp
bmdWZWN0b3JzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRF
WF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUlt
YWdlVW5pdHMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklO
RURfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVy
ZUltYWdlVW5pdHMpOyAKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RF
WFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0cyk7
Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JN
X1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKLQot
ICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgotICAgIEFOR0xFUmVzb3VyY2Vz
Lk1heERyYXdCdWZmZXJzID0gMTsKLSAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJl
c291cmNlcyk7CisgICAgbV9wcml2YXRlLT5pbml0aWFsaXplQU5HTEUoKTsKIAogI2lmICFVU0Uo
T1BFTkdMX0VTXzIpCiAgICAgZ2xFbmFibGUoR0xfUE9JTlRfU1BSSVRFKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154819</attachid>
            <date>2012-07-26 20:02:49 -0700</date>
            <delta_ts>2012-08-12 14:57:01 -0700</delta_ts>
            <desc>Unified patch for EWS</desc>
            <filename>bug-78672-20120726200238.patch</filename>
            <type>text/plain</type>
            <size>114986</size>
            <attacher name="Helder Correia">helder.correia</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODgyNmYzMjk2YTVjZmNj
MTYyZDY1NGE1OTFjOGQ2NmIzNDRkMjIxNy4uMDg0OWMxNjY4OWI4YzQ0ODk5MzBkYTliZDE3YjNj
M2FiM2E2YTFkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxMSBAQAorMjAxMi0wNy0yNiAgSGVs
ZGVyIENvcnJlaWEgIDxoZWxkZXIuY29ycmVpYUBub2tpYS5jb20+CisKKyAgICAgICAgW1RleG1h
cF0gTW92ZSBUZXh0dXJlTWFwcGVyR0wgdG8gdXNlIEdyYXBoaWNzQ29udGV4dDNECisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODY3MgorCisgICAgICAg
IFRleHR1cmVNYXBwZXJHTCAoVE1HTCkgaW5jbHVkZXMgZGlyZWN0IEdMIGNhbGxzIGFuZAorICAg
ICAgICBHcmFwaGljc0NvbnRleHQzRCAoR0MzRCkgb2ZmZXJzIG1hbnkgY29udmVuaWVuY2VzIG92
ZXIgdGhlCisgICAgICAgIGZvcm1lciBhcHByb2FjaDogdXNpbmcgZXhpc3RpbmcgQ1NTIHNoYWRl
ciBjb2RlLCBBTkdMRSBmb3IKKyAgICAgICAgc2hhZGVyIGNvbXBpbGF0aW9uLCByZXVzaW5nIFdl
YkNvcmU6OlRleHR1cmUsIGhhdmluZyBzaGFkZXJzIGFuZAorICAgICAgICB0ZXh0dXJlcyB0aGF0
IGNhbiBkZWxldGUgdGhlbXNlbHZlcy4KKworICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMgdGhl
IGJhY2tlbmQgb2YgVE1HTCB0byBHQzNELiBJdCB3YXMgaW5pdGlhbGx5CisgICAgICAgIHRob3Vn
aHQgdG8gaW50cm9kdWNlIGEgbmV3IGJhY2tlbmQgKHNheSwgVGV4dHVyZU1hcHBlckdDM0QpLCBi
dXQKKyAgICAgICAgaW4gdGhlIGVuZCBpdCB3YXMgYWdyZWVkIHRvIGNvbnNvbGlkYXRlIGl0IGlu
c2lkZSBUTUdMIGluc3RlYWQsCisgICAgICAgIGFzIGFuIGFkZGl0aW9uYWwgVGV4dHVyZU1hcHBl
ciBzdWJjbGFzcyB3b3VsZCBnZXQgc3RhbGUgdmVyeQorICAgICAgICBxdWlja2x5LgorCisgICAg
ICAgIEEgR0MzRCBvYmplY3QgaXMgY3JlYXRlZCBieSBUTUdMIHdpdGggdGhlIG5ld2x5IGludHJv
ZHVjZWQKKyAgICAgICAgYnVpbGRlciBjcmVhdGVXcmFwcGVyRm9yQ3VycmVudEdMQ29udGV4dCgp
LCB3aGljaCBpbiB0dXJuIHVzZXMKKyAgICAgICAgdGhlIG5ldyBSZW5kZXJUb0N1cnJlbnRHTENv
bnRleHQgZmxhZyB1bmRlcm5lYXRoLgorCisgICAgICAgIFRNR0wncyBkZXBlbmRlbmN5IG9uIE9w
ZW5HTFNoaW1zLmggd2FzIGNvbXBsZXRlbHkgcmVtb3ZlZC4KKyAgICAgICAgSG93ZXZlciwgR0Mz
RCBkb2VzIG5vdCBtYXAgZXZlcnkgc2luZ2xlIEdMIGNvbnN0YW50LiBUaHVzLCBpdCdzCisgICAg
ICAgIGltcG9ydGFudCB0byBkb2N1bWVudCB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgLSBH
TF9GQUxTRSB3YXMgbWFwcGVkIHRvIGZhbHNlLgorICAgICAgICAgICAgLSBHTF9VTlBBQ0tfUk9X
X0xFTkdUSCwgR0xfVU5QQUNLX1NLSVBfUElYRUxTLAorICAgICAgICAgICAgR0xfVU5QQUNLX1NL
SVBfUk9XUywgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBhbmQKKyAgICAgICAgICAgIEdMX1VO
U0lHTkVEX0lOVF84XzhfOF84X1JFViB3ZXJlIGxvY2FsbHkgZGVmaW5lZCBpbiBUTUdMLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cywgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFNoYXJlZEdMRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6
OmN1cnJlbnRTaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
RGF0YTo6U2hhcmVkR0xEYXRhOjpTaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckdMRGF0YTo6c2hhcmVkR0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJHTERhdGE6OlRleHR1cmVNYXBwZXJHTERhdGEpOgorICAgICAgICAoVGV4dHVyZU1h
cHBlckdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpzY2lzc29yQ2xpcCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjazo6YXBwbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6aW5pdGlhbGl6ZVN0ZW5jaWwpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJHTDo6ZW5kUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMOjpkcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6
OmRyYXdCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6dmlld3Bv
cnRNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVy
ZVdpdGhBbnRpYWxpYXNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpk
cmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4
dHVyZUdMOjpkaWRSZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnVw
ZGF0ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0Zp
bHRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6aW5pdGlhbGl6ZVN0
ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpjbGVhcklmTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6Y3JlYXRlRmJvSWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpiaW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6fkJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJpbmREZWZhdWx0U3VyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luU2Npc3NvckNsaXApOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMOjplbmRDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6
Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJHTC5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpncmFwaGlj
c0NvbnRleHQzRCk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAoQ2xpcFN0
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6dGV4dHVyZVRhcmdldCk6
CisgICAgICAgIChCaXRtYXBUZXh0dXJlR0wpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4
dHVyZUdMOjpCaXRtYXBUZXh0dXJlR0wpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6aW5pdGlhbGl6ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
U2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OlRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNp
bXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNp
dHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRN
YXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFz
azo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2spOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6flN0
YW5kYXJkRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclBy
b2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFy
ZEZpbHRlclByb2dyYW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRl
clByb2dyYW06OnByZXBhcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OmdldFNoYWRlckZvckZpbHRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW06OnZlcnRleEF0dHJpYik6CisgICAgICAgIChUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6bWF0cml4TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW06OmZsaXBMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6dGV4dHVyZVNpemVMb2NhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6c291cmNlVGV4dHVyZUxvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjptYXNrVGV4
dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtOjpvcGFjaXR5TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoU3RhbmRhcmRG
aWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6
dmVydGV4QXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6
dGV4Q29vcmRBdHRyaWIpOgorICAgICAgICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFt
Ojp0ZXh0dXJlVW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNpbXBsZTo6Y3JlYXRlKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU2ltcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
UmVjdFNpbXBsZTo6Y3JlYXRlKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
UmVjdFNpbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bU9wYWNpdHlBbmRNYXNrOjpjcmVhdGUpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1PcGFjaXR5QW5kTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6Y3JlYXRlKToKKyAgICAgICAgKFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6Y29sb3JMb2Nh
dGlvbik6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdO
b01hc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbUFudGlhbGlhc2luZ05vTWFzazo6ZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb29y
ZGluYXRlc0xvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpleHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VM
b2NhdGlvbik6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2lu
Z05vTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIpOgorCisyMDEyLTA3LTI2ICBIZWxkZXIgQ29ycmVpYSAgPGhlbGRlci5jb3JyZWlh
QG5va2lhLmNvbT4KKworICAgICAgICBbVGV4bWFwXSBNb3ZlIFRleHR1cmVNYXBwZXJHTCB0byB1
c2UgR3JhcGhpY3NDb250ZXh0M0QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc4NjcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IG9mIGEgc2V2ZXJhbCBwYXRjaC1yZWZhY3RvcmluZy4K
KworICAgICAgICBJbnRyb2R1Y2luZyBhIG5ldyBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2Uy
RERpcmVjdCgpIHRvIGFsbG93CisgICAgICAgIGluaXRpYWxpemF0aW9uIG9mIHRleHR1cmVzIHdp
dGhvdXQgYWxsb2NhdGlvbi4gVGhlIGV4aXN0aW5nCisgICAgICAgIHRleHRJbWFnZTJEKCkgcmVm
dXNlcyBhIG51bGwgcGl4ZWwgYnVmZmVyLCBhbmQKKyAgICAgICAgdGV4SW1hZ2UyRFJlc291cmNl
U2FmZSgpIGFsbG93cyBpdCBidXQgcGVyZm9ybXMgbWVtb3J5CisgICAgICAgIGFsbG9jYXRpb24g
YW5kIHplcm9lcyB0aGUgYml0cy4gVGhpcyB3YXMgbm90IGZhc3QgZW5vdWdoIGZvcgorICAgICAg
ICBCaXRtYXBUZXh0dXJlR0wgZnJlcXVlbnQgc2V0dGluZyB1cC4KKworICAgICAgICBObyBuZXcg
dGVzdHMsIHJlZmFjdG9yaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaDoKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRERpcmVj
dCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisKKzIwMTItMDctMjYgIEhlbGRlciBDb3JyZWlh
ICA8aGVsZGVyLmNvcnJlaWFAbm9raWEuY29tPgorCisgICAgICAgIFtUZXhtYXBdIE1vdmUgVGV4
dHVyZU1hcHBlckdMIHRvIHVzZSBHcmFwaGljc0NvbnRleHQzRAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2NzIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHBhcnQgb2YgYSBzZXZlcmFsIHBh
dGNoLXJlZmFjdG9yaW5nLgorCisgICAgICAgIEludHJvZHVjZSBhZGRpdGlvbmFsIGxvZ2ljIGlu
IEdyYXBoaWNzQ29udGV4dDNEUXQgdG8gc3VwcG9ydCBhCisgICAgICAgIG5ldyBSZW5kZXJUb0N1
cnJlbnRHTENvbnRleHQgUmVuZGVyU3R5bGUuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvCisgICAgICAg
IHVzZSBHQzNEIGZvciBvdGhlciB0aGluZ3MgdGhhbiBXZWJHTCwgbGlrZSBUZXh0dXJlTWFwcGVy
LgorCisgICAgICAgIFRoZSBHQzNEIGNvbnN0cnVjdG9yIG5vdyBhY2NlcHRzIGEgUmVuZGVyU3R5
bGUgaW5zdGVhZCBvZiB0aGUKKyAgICAgICAgYm9vbGVhbiByZW5kZXJEaXJlY3RseVRvSG9zdFdp
bmRvdyBhbmQgdGh1cyBtaW1pY3MgY3JlYXRlKCkncworICAgICAgICBzaWduYXR1cmUuIFRoaXMg
aGFzIGJlZW4gY2hhbmdlZCBmb3IgYWxsIHBvcnRzIGluIHRoaXMgcGF0Y2guCisKKyAgICAgICAg
QSBuZXcgR0MzRDo6Y3JlYXRlV3JhcHBlckZvckN1cnJlbnRHTENvbnRleHQoKSBidWlsZGVyIHdh
cworICAgICAgICBpbnRyb2R1Y2VkIHRvIGJldHRlciBhYnN0cmFjdCB0aGUgZ29hbCBvZiB1c2lu
ZyBHQzNEIHdpdGggdGhlCisgICAgICAgIGN1cnJlbnQgY29udGV4dC4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIHJlZmFjdG9yaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3Vw
cG9ydC9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vc3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRG
cm9tV2ViQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuaDoKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4dDNEQmxhY2tCZXJyeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlV3JhcHBlckZvckN1cnJlbnRHTENvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRFByaXZhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpjcmVhdGVPZmZzY3JlZW5CdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppbml0aWFsaXplQU5HTEUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorCiAyMDEyLTA3
LTIwICBEYXZpZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbmRl
eGVkREI6IEluY2x1ZGUgaW50VmVyc2lvbiB3aGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBXZWJDb3Jl
IGFuZCBXZWJLaXQgSURCTWV0YWRhdGEgdHlwZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0dyYXBoaWNzQ29udGV4
dDNEQ2hyb21pdW0uY3BwCmluZGV4IDEyN2ZjZmEwOTI5YTc2ZWNjOWNmNWM1ZTRlNGQxZWNlMDAy
OTAzYTMuLmY4ZTQ2ZDg3MWM1MzMzOTg1NmQ1YjllOTU1ODA4MTFkOGY3MDkzNDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250
ZXh0M0RDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
c3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcApAQCAtNDMsNyArNDMsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRl
eHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcywgSG9zdFdpbmRvdyosIGJvb2wpCitH
cmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUpCiB7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBv
cnQvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAppbmRleCBmNmI3
MzBkZGZmYWFiNzhhYjZhYWEwMjcxMjgwYTA0ODViZjhjZDliLi4wZDU3MWI0YmM3ODhlMmRhMTlj
MTU5YzIzMGY4NDY3OTQxZjE4N2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9zdXBwb3J0L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6fkdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpCiAKIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNv
bnRleHQoUGFzc093blB0cjxXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEPiB3ZWJDb250ZXh0
LCBib29sIHByZXNlcnZlRHJhd2luZ0J1ZmZlcikKIHsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMoKSwgMCwgZmFsc2UgLyogb25zY3JlZW4gKi8pKTsKKyAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3ND
b250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMoKSwgMCkpOwogCiAgICAgT3du
UHRyPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4gcHJpdiA9IGFkb3B0UHRyKG5ldyBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUod2ViQ29udGV4dCwgcHJlc2VydmVEcmF3aW5nQnVmZmVyKSk7CiAg
ICAgY29udGV4dC0+bV9wcml2YXRlID0gcHJpdi5yZWxlYXNlKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCA3NDMz
ZGY2MjZmNGNhYjJhY2M2Y2EwOThhNjI4MGQ0OGQ0OWEyYjE5Li4yMGY4ZjUwNDY5NGY1YmRkMTg0
Mzg4YWQ0YmU5ZjQyY2M1YjEwNmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKQEAgLTQ2Myw3ICs0NjMsOCBAQCBwdWJs
aWM6CiAKICAgICBlbnVtIFJlbmRlclN0eWxlIHsKICAgICAgICAgUmVuZGVyT2Zmc2NyZWVuLAot
ICAgICAgICBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdworICAgICAgICBSZW5kZXJEaXJlY3Rs
eVRvSG9zdFdpbmRvdywKKyAgICAgICAgUmVuZGVyVG9DdXJyZW50R0xDb250ZXh0CiAgICAgfTsK
IAogICAgIGNsYXNzIENvbnRleHRMb3N0Q2FsbGJhY2sgewpAQCAtNDgyLDYgKzQ4Myw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldEVycm9yTWVzc2FnZUNhbGxiYWNrKFBhc3NPd25QdHI8RXJyb3JN
ZXNzYWdlQ2FsbGJhY2s+KTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjcmVhdGUoQXR0cmlidXRlcywgSG9zdFdpbmRvdyosIFJlbmRlclN0eWxlID0gUmVuZGVy
T2Zmc2NyZWVuKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3Jl
YXRlV3JhcHBlckZvckN1cnJlbnRHTENvbnRleHQoKTsKICAgICB+R3JhcGhpY3NDb250ZXh0M0Qo
KTsKIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTUyOSw2ICs1MzEsOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBwcmVwYXJlVGV4dHVyZSgpOwogI2VuZGlmCiAKKyAgICAvLyBFcXVpdmFsZW50IHRvIDo6
Z2xUZXhJbWFnZTJEKCkuIEFsbG93cyBwaXhlbHM9PTAgd2l0aCBubyBhbGxvY2F0aW9uLgorICAg
IHZvaWQgdGV4SW1hZ2UyRERpcmVjdChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZv
aWQqIHBpeGVscyk7CisKICAgICAvLyBIZWxwZXIgdG8gdGV4SW1hZ2UyRCB3aXRoIHBpeGVsPT0w
IGNhc2U6IHBpeGVscyBhcmUgaW5pdGlhbGl6ZWQgdG8gMC4KICAgICAvLyBSZXR1cm4gdHJ1ZSBp
ZiBubyBHTCBlcnJvciBpcyBzeW50aGVzaXplZC4KICAgICAvLyBCeSBkZWZhdWx0LCBhbGlnbm1l
bnQgaXMgNCwgdGhlIE9wZW5HTCBkZWZhdWx0IHNldHRpbmcuCkBAIC04NjUsNyArODcwLDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyB1bnNpZ25lZCBnZXRDaGFubmVsQml0c0J5Rm9ybWF0KEdDM0Rl
bnVtKTsKIAogICBwcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dDNEKEF0dHJpYnV0ZXMgYXR0
cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5k
b3cpOworICAgIEdyYXBoaWNzQ29udGV4dDNEKEF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBSZW5k
ZXJTdHlsZSA9IFJlbmRlck9mZnNjcmVlbik7CiAKICAgICAvLyBFYWNoIHBsYXRmb3JtIG11c3Qg
cHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZC4KICAgICAvLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGlj
c0NvbnRleHQzREJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJsYWNrQmVycnkuY3BwCmluZGV4IGRkNGUz
ZjRjODVhODYzNDUxOWMzZmUyYzAzZmUzYWNjYzA1M2M4YTcuLjljYjI0ZjllNDMwNjA2ODM0MTZm
Nzk4YWI3YzMzMDg4MDVjNGU1ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzQ29u
dGV4dDNEQmxhY2tCZXJyeS5jcHAKQEAgLTQ3LDEwICs0NywxMCBAQCBQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEF0dHJpYnV0ZXMgYXR0cmli
cywgSG9zdAogICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRv
dykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdyYXBoaWNz
Q29udGV4dDNEKGF0dHJpYnMsIGhvc3RXaW5kb3csIGZhbHNlKSk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRyaWJzLCBob3N0V2luZG93LCByZW5kZXJTdHls
ZSkpOwogfQogCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqLCBib29sIHJlbmRlckRpcmVj
dGx5VG9Ib3N0V2luZG93KQorR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogICAgIDogbV9jdXJyZW50V2lkdGgo
MCkKICAgICAsIG1fY3VycmVudEhlaWdodCgwKQogICAgICwgbV9jb250ZXh0KEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpHcmFwaGljczo6Y3JlYXRlV2ViR0xDb250ZXh0KCkpCkBAIC02Niw3ICs2Niw3
IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAgICAgLCBtX2JvdW5kVGV4dHVyZTAoMCkKICAg
ICAsIG1faXNJbWFnaW5hdGlvbkhhcmR3YXJlKDApCiB7Ci0gICAgaWYgKCFyZW5kZXJEaXJlY3Rs
eVRvSG9zdFdpbmRvdykgeworICAgIGlmIChyZW5kZXJTdHlsZSAhPSBSZW5kZXJEaXJlY3RseVRv
SG9zdFdpbmRvdykgewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICAgICAg
bV9jb21wb3NpdGluZ0xheWVyID0gV2ViR0xMYXllcldlYktpdFRocmVhZDo6Y3JlYXRlKCk7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKaW5kZXggNjJkYTFhMTZjOTEx
YjQwNGFjYTAzNzUzNDE2NzNmMjc2ODE5MjVmNi4uNzAzYjNkYzY5ZDI1NjRiZmEzNmVjZmVhYTMz
YjUxZjE2NzczZGQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKQEAgLTYw
LDExICs2MCwxMSBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaQogICAgIGlmICghc3VjY2VzcykK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRl
eHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cmlidXRlcywgaG9zdFdpbmRv
dywgZmFsc2UpKTsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9w
dFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cmlidXRlcywgaG9zdFdpbmRvdywgcmVuZGVy
U3R5bGUpKTsKICAgICByZXR1cm4gY29udGV4dC5yZWxlYXNlKCk7CiB9CiAKLUdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgYm9vbCkKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGlj
c0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0
V2luZG93KiwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlKQogICAgIDogbV9jdXJyZW50
V2lkdGgoMCkKICAgICAsIG1fY3VycmVudEhlaWdodCgwKQogICAgICwgbV9hdHRycyhhdHRyaWJ1
dGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRl
ci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwCmluZGV4IDRiNGIw
ZTM5ZGJhZTUxNjNhMGExNTE5MTcwMWVlODIyY2RhMTFjMDcuLmFiZmJkNDdlNmFlMzIyOTA4OGEz
ODNiMDM0ZTZmOTE3ZTM0YzhiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1
dHRlci5jcHAKQEAgLTQyLDExICs0MiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogewotICAgIFJl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0Nv
bnRleHQzRChhdHRyaWJ1dGVzLCBob3N0V2luZG93LCBmYWxzZSkpOworICAgIFJlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChh
dHRyaWJ1dGVzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkpOwogICAgIHJldHVybiBjb250ZXh0
LnJlbGVhc2UoKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3csIGJvb2wpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAppbmRleCBlZmUxYTEy
ZTJjMjY1ZjBmYWE5ZThkZTQxOTY0OTk5NjUyYWVlYTFhLi43MjFkN2M3YmVhNTZlMTg5OTBhNDEz
ZjgxODVmMmFmZTdmNjU5OTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKQEAgLTM2LDEy
ICszNiwxMiBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaQogICAgIGlmICghaW50ZXJuYWwpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0
ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCByZW5k
ZXJEaXJlY3RseVRvRXZhc0dMT2JqZWN0KSk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2lu
ZG93LCByZW5kZXJTdHlsZSkpOwogICAgIGNvbnRleHQtPm1fcHJpdmF0ZSA9IGludGVybmFsLnJl
bGVhc2UoKTsKICAgICByZXR1cm4gY29udGV4dC5yZWxlYXNlKCk7CiB9CiAKLUdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdp
bmRvdykKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRl
eHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3ND
b250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogICAgIDogbV9jdXJyZW50V2lkdGgo
MCkKICAgICAsIG1fY3VycmVudEhlaWdodCgwKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCmlu
ZGV4IGQwNDJjNjYwY2YzMDJhNTY5ZjBjMGY5ZTQ1ZjZlYTkzNmZiNGIzODUuLjAwZTgzMTM1MGU0
NGJmMDNjYjBiYzhiZDJkOTJkMGIxNzQxMTBhZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0K
QEAgLTk4LDExICs5OCwxMSBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaQogICAgIC8vIFRoaXMg
aW1wbGVtZW50YXRpb24gZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCByZW5kZXJpbmcgZGlyZWN0
bHkgdG8gdGhlIEhvc3RXaW5kb3cuCiAgICAgaWYgKHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVj
dGx5VG9Ib3N0V2luZG93KQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMs
IGhvc3RXaW5kb3csIGZhbHNlKSk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250
ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCBy
ZW5kZXJTdHlsZSkpOwogICAgIHJldHVybiBjb250ZXh0LT5tX2NvbnRleHRPYmogPyBjb250ZXh0
LnJlbGVhc2UoKSA6IDA7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQz
RChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdp
bmRvdywgYm9vbCkKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGlj
c0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogICAgIDogbV9jdXJyZW50
V2lkdGgoMCkKICAgICAsIG1fY3VycmVudEhlaWdodCgwKQogICAgICwgbV9jb250ZXh0T2JqKDAp
CkBAIC0xMjIsNiArMTIyLDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNE
KEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICAsIG1fcHJp
dmF0ZShhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKHRoaXMpKSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oaG9zdFdpbmRvdyk7CisgICAgVU5VU0VEX1BBUkFNKHJlbmRlclN0eWxl
KTsKIAogICAgIFZlY3RvcjxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4gYXR0cmliczsKICAgICBD
R0xQaXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdE9iaiA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMLmNwcAppbmRleCBmZDQ1MDE0MWM3NGRkYTNiNDllODk1Nzg1OWNiYTJiOTBh
ODM3ZjUyLi45OGUxMTQ1YjNkYjI0ZTUxZDdiNzVmZDA2NzA4ZmZhZTI1NmFlYjEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKQEAgLTI1Niw3ICsyNTYsNyBAQCBib29s
IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGVudW0gaW50ZQogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZB
TFVFKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKwogICAgIEdDM0RlbnVtIG9wZW5HTEludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxmb3Jt
YXQ7CiAgICAgaWYgKHR5cGUgPT0gR0xfRkxPQVQpIHsKICAgICAgICAgaWYgKGZvcm1hdCA9PSBH
TF9SR0JBKQpAQCAtMjY1LDcgKzI2NSw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlCiAgICAg
ICAgICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdMX1JHQjMyRl9BUkI7CiAgICAgfQogCi0g
ICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgb3BlbkdMSW50ZXJuYWxGb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIHRleEltYWdl
MkREaXJlY3QodGFyZ2V0LCBsZXZlbCwgb3BlbkdMSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogICAgIHJldHVybiB0cnVlOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAppbmRleCBh
NGQxZWI0Y2Q5M2M0NzYzMzZjMDJmNjEzYmZjNjU5NDRkMjg2Y2I4Li44MzU5N2ZmMWFmODBkMDdl
YTUxZTAyOThiMWNhMzk0NDgwOGYxNGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHQzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTcwLDYgKzcwLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZVdyYXBwZXJGb3JDdXJyZW50R0xDb250ZXh0KCkKK3sKKyAgICBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoQXR0
cmlidXRlcygpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyVG9DdXJyZW50R0xDb250ZXh0
KSk7CisgICAgcmV0dXJuIGNvbnRleHQtPm1fcHJpdmF0ZSA/IGNvbnRleHQucmVsZWFzZSgpIDog
MDsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29u
c3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQogewogICAgIEV4dGVuc2lvbnMz
RCogZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKQEAgLTEzODIsNiArMTM4OCwxMiBAQCBi
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoKSBjb25zdAogICAgIHJldHVy
biBtX2xheWVyQ29tcG9zaXRlZDsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1h
Z2UyRERpcmVjdChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9y
ZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5
cGUsIHBpeGVscyk7Cit9CisKIH0KIAogI2VuZGlmIC8vIFVTRSgzRF9HUkFQSElDUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAppbmRleCA3OWRkY2JiZmQ5YTRiNTVl
YzgyNmU0MWI1OTVlZWY4NGU2NGQ5ZDAzLi41MjgxZWNmYzNlNGVjZmI5N2MwNzMzODk5ZDc0NGZm
NWNhMDlmMjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCkBA
IC0zMSw2ICszMSw3IEBACiAjaWYgVVNFKDNEX0dSQVBISUNTKQogCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0QuaCIKKwogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCiAjaW5j
bHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKQEAgLTIzMCw4ICsyMzEsOCBA
QCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGVudW0gaW50ZQogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZB
TElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisKKyAg
ICB0ZXhJbWFnZTJERGlyZWN0KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NDb250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAppbmRleCA4OTVmNzY2ODgwMzllODFmMmY3MGJmYWQ4
MDA1ZjA3N2JkZTUxZDE4Li45ODU2NTM1OTdjOTE4MGIwM2M5ZjliNGE4YjJiODQ5YzcyZTkwNGZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0NvbnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAtNjMsNyArNjMsNyBAQCBjbGFzcyBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUKICNlbmRpZgogewogcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCosIEhvc3RXaW5kb3cqKTsKKyAgICBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBIb3N0V2luZG93KiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlKTsKICAgICB+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
KCk7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC03Nyw2ICs3Nyw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIGJsaXRNdWx0aXNhbXBsZUZyYW1lYnVmZmVyKCkgY29uc3Q7CiAg
ICAgdm9pZCBibGl0TXVsdGlzYW1wbGVGcmFtZWJ1ZmZlckFuZFJlc3RvcmVDb250ZXh0KCkgY29u
c3Q7CiAgICAgYm9vbCBtYWtlQ3VycmVudElmTmVlZGVkKCkgY29uc3Q7CisgICAgdm9pZCBjcmVh
dGVPZmZzY3JlZW5CdWZmZXJzKCk7CisgICAgdm9pZCBpbml0aWFsaXplQU5HTEUoKTsKICAgICB2
b2lkIGNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMoY29uc3QgSW50U2l6ZSYpOwogCiAgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIG1fY29udGV4dDsKQEAgLTEwNiw3ICsxMDgsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQogfQogI2VuZGlmCiAKLUdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LCBIb3N0V2luZG93KiBob3N0V2luZG93KQorR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHls
ZSByZW5kZXJTdHlsZSkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9ob3N0V2lu
ZG93KGhvc3RXaW5kb3cpCiAgICAgLCBtX3N1cmZhY2UoMCkKQEAgLTEyMyw2ICsxMjUsMTcgQEAg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQsIEgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlm
IChyZW5kZXJTdHlsZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyVG9DdXJyZW50R0xDb250
ZXh0KSB7CisjaWYgSEFWRShRVDUpCisgICAgICAgIG1fcGxhdGZvcm1Db250ZXh0ID0gUU9wZW5H
TENvbnRleHQ6OmN1cnJlbnRDb250ZXh0KCk7CisgICAgICAgIG1fc3VyZmFjZSA9IG1fcGxhdGZv
cm1Db250ZXh0LT5zdXJmYWNlKCk7CisjZWxzZQorICAgICAgICBtX3BsYXRmb3JtQ29udGV4dCA9
IGNvbnN0X2Nhc3Q8UUdMQ29udGV4dCo+KFFHTENvbnRleHQ6OmN1cnJlbnRDb250ZXh0KCkpOwor
ICAgICAgICBtX3N1cmZhY2UgPSBzdGF0aWNfY2FzdDxRR0xXaWRnZXQqPihtX3BsYXRmb3JtQ29u
dGV4dC0+ZGV2aWNlKCkpOworI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgICB9CisKICNpZiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKICAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byBjcmVhdGUg
YSBRT3BlbkdMQ29udGV4dCB3aXRob3V0IGNyZWF0aW5nIGEgUVdpbmRvdyBhdCBhbGwuCiAgICAg
Ly8gV2UgbmVlZCB0byBjcmVhdGUgYSBzdXJmYWNlIGluIG9yZGVyIHRvIGNyZWF0ZSBhIFFPcGVu
R0xDb250ZXh0IGFuZCBtYWtlIGl0IGN1cnJlbnQuCkBAIC0yOTYsNiArMzA5LDU5IEBAIGJvb2wg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlQ3VycmVudElmTmVlZGVkKCkgY29uc3QKICNl
bmRpZgogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlT2Zmc2NyZWVu
QnVmZmVycygpCit7CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoLyogY291bnQgKi8gMSwgJm1fY29u
dGV4dC0+bV9mYm8pOworCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb250ZXh0LT5tX3RleHR1
cmUpOworICAgIGdsQmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1f
Y29udGV4dC0+bV90ZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyZihHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRF
UiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQ
X1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGdsQmlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOworCisgICAgLy8gQ3Jl
YXRlIGEgbXVsdGlzYW1wbGUgRkJPLgorICAgIGlmIChtX2NvbnRleHQtPm1fYXR0cnMuYW50aWFs
aWFzKSB7CisgICAgICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2NvbnRleHQtPm1fbXVsdGlz
YW1wbGVGQk8pOworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIG1fY29udGV4dC0+bV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIG1fY29u
dGV4dC0+bV9ib3VuZEZCTyA9IG1fY29udGV4dC0+bV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAg
Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2NvbnRleHQtPm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZl
cik7CisgICAgICAgIGlmIChtX2NvbnRleHQtPm1fYXR0cnMuc3RlbmNpbCB8fCBtX2NvbnRleHQt
Pm1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fY29u
dGV4dC0+bV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgorICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fY29udGV4dC0+bV9mYm8pOworICAgICAgICBt
X2NvbnRleHQtPm1fYm91bmRGQk8gPSBtX2NvbnRleHQtPm1fZmJvOworI2lmIFVTRShPUEVOR0xf
RVNfMikKKyAgICAgICAgaWYgKG1fY29udGV4dC0+bV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAg
IGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9jb250ZXh0LT5tX2RlcHRoQnVmZmVyKTsKKyAgICAg
ICAgaWYgKG1fY29udGV4dC0+bV9hdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgZ2xHZW5SZW5k
ZXJidWZmZXJzKDEsICZtX2NvbnRleHQtPm1fc3RlbmNpbEJ1ZmZlcik7CisjZW5kaWYKKyAgICAg
ICAgaWYgKG1fY29udGV4dC0+bV9hdHRycy5zdGVuY2lsIHx8IG1fY29udGV4dC0+bV9hdHRycy5k
ZXB0aCkKKyAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9jb250ZXh0LT5tX2Rl
cHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6aW5pdGlhbGl6ZUFOR0xFKCkKK3sKKyAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVS
ZXNvdXJjZXM7CisgICAgU2hJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJjZXMpOwor
CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRF
WF9BVFRSSUJTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7CisgICAgbV9jb250
ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZF
Q1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7CisgICAgbV9j
b250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9S
UywgJkFOR0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKKyAgICBtX2NvbnRleHQtPmdl
dEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5J
VFMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgbV9j
b250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRV
UkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVu
aXRzKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
VEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRz
KTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJB
R01FTlRfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3Jt
VmVjdG9ycyk7CisKKyAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBFUy4KKyAgICBB
TkdMRVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7CisgICAgbV9jb250ZXh0LT5tX2NvbXBp
bGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc1N1cmZhY2VzKGNvbnN0IEludFNpemUmIHNpemUp
CiB7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCkBAIC0zMTQsMTEgKzM4MCwxMSBAQCBQYXNz
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaQogICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lc24ndCBj
dXJyZW50bHkgc3VwcG9ydCByZW5kZXJpbmcgZGlyZWN0bHkgdG8gdGhlIEhvc3RXaW5kb3cuCiAg
ICAgaWYgKHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQogICAgICAg
ICByZXR1cm4gMDsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9w
dFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3csIGZhbHNlKSk7Cisg
ICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBo
aWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkpOwogICAgIHJldHVy
biBjb250ZXh0LT5tX3ByaXZhdGUgPyBjb250ZXh0LnJlbGVhc2UoKSA6IDA7CiB9CiAKLUdyYXBo
aWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCkKK0dyYXBoaWNzQ29udGV4
dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRy
cywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxl
IHJlbmRlclN0eWxlKQogICAgIDogbV9jdXJyZW50V2lkdGgoMCkKICAgICAsIG1fY3VycmVudEhl
aWdodCgwKQogICAgICwgbV9jb21waWxlcihpc0dMRVMyQ29tcGxpYW50KCkgPyBTSF9FU1NMX09V
VFBVVCA6IFNIX0dMU0xfT1VUUFVUKQpAQCAtMzM5LDcgKzQwNSw3IEBAIEdyYXBoaWNzQ29udGV4
dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRy
cywgSG9zdFdpCiAgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxl
RGVwdGhTdGVuY2lsQnVmZmVyKDApCiAgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkK
LSAgICAsIG1fcHJpdmF0ZShhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKHRo
aXMsIGhvc3RXaW5kb3cpKSkKKyAgICAsIG1fcHJpdmF0ZShhZG9wdFB0cihuZXcgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlKHRoaXMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSkpCiB7CiAgICAg
dmFsaWRhdGVBdHRyaWJ1dGVzKCk7CiAKQEAgLTM2MCw1NCArNDI2LDEwIEBAIEdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRycywgSG9zdFdpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBDcmVhdGUgYnVm
ZmVycyBmb3IgdGhlIGNhbnZhcyBGQk8uCi0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoLyogY291bnQg
Ki8gMSwgJm1fZmJvKTsKLQotICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAg
Z2xCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsK
LSAgICBnbFRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5F
QVIpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkxJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNE
OjpDTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3ND
b250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIGdsQmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOworICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJPZmZz
Y3JlZW4pCisgICAgICAgIG1fcHJpdmF0ZS0+Y3JlYXRlT2Zmc2NyZWVuQnVmZmVycygpOwogCi0g
ICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgotICAgIGlmIChtX2F0dHJzLmFudGlhbGlh
cykgewotICAgICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0g
ICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
bV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIG1fYm91bmRGQk8gPSBtX211bHRpc2FtcGxlRkJP
OwotICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZl
cik7Ci0gICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKLSAgICAg
ICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1
ZmZlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgotICAgICAg
ICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJv
KTsKLSAgICAgICAgbV9ib3VuZEZCTyA9IG1fZmJvOwotI2lmIFVTRShPUEVOR0xfRVNfMikKLSAg
ICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMo
MSwgJm1fZGVwdGhCdWZmZXIpOwotICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQotICAgICAg
ICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOwotI2VuZGlmCi0g
ICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKLSAgICAgICAgICAg
IGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIH0KLQot
ICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9uLgotICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdM
RVJlc291cmNlczsKLSAgICBTaEluaXRCdWlsdEluUmVzb3VyY2VzKCZBTkdMRVJlc291cmNlcyk7
Ci0KLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJT
LCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJj
ZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfVkFSWUlOR19WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmFyeWluZ1Zl
Y3RvcnMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1RF
WFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VV
bml0cyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9U
RVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1h
Z2VVbml0cyk7IAotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVS
RV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKLSAg
ICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVD
VE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOwotCi0gICAg
Ly8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVuR0wgRVMuCi0gICAgQU5HTEVSZXNvdXJjZXMuTWF4
RHJhd0J1ZmZlcnMgPSAxOwotICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3Vy
Y2VzKTsKKyAgICBtX3ByaXZhdGUtPmluaXRpYWxpemVBTkdMRSgpOwogCiAjaWYgIVVTRShPUEVO
R0xfRVNfMikKICAgICBnbEVuYWJsZShHTF9QT0lOVF9TUFJJVEUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
LmNwcAppbmRleCA2ODhlMjZmNGU4OWZmZjEzZGU1YjNkNTc5YzgyMGE5MzVlZjkxNzJjLi5mZTc4
ODFiNTkyNzlhNjEzYTg1ZDZkYWM3NzY2YTBmYjg3MmY5ZjU4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
LmNwcApAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgogCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5j
bHVkZSAiVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCIKQEAgLTM5LDkxICszOCw0MiBAQAog
CiAjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VRdC5oIgotI2lmIEhBVkUo
UVQ1KQotI2luY2x1ZGUgPFFPcGVuR0xDb250ZXh0PgotI2Vsc2UKLSNpbmNsdWRlIDxRR0xDb250
ZXh0PgotI2VuZGlmIC8vIFFUX1ZFUlNJT04KLSNlbGlmIE9TKFdJTkRPV1MpCi0jaW5jbHVkZSA8
d2luZG93cy5oPgotI2VsaWYgT1MoTUFDX09TX1gpCi0jaW5jbHVkZSA8QUdML2FnbC5oPgotI2Vs
aWYgZGVmaW5lZChYUF9VTklYKQotI2luY2x1ZGUgPEdML2dseC5oPgogI2VuZGlmCiAKLSNkZWZp
bmUgR0xfQ01EKC4uLikgZG8geyBfX1ZBX0FSR1NfXzsgQVNTRVJUX0FSRyhfX1ZBX0FSR1NfXywg
IWdsR2V0RXJyb3IoKSk7IH0gd2hpbGUgKDApCisjaWYgIVVTRShURVhNQVBfT1BFTkdMX0VTXzIp
CisvLyBGSVhNRTogTW92ZSB0byBFeHRlbnNpb25zM0QuaC4KKyNkZWZpbmUgR0xfVEVYVFVSRV9S
RUNUQU5HTEVfQVJCIDB4ODRGNQorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYg
MHg4MzY3CisjZGVmaW5lIEdMX1VOUEFDS19ST1dfTEVOR1RIIDB4MENGMgorI2RlZmluZSBHTF9V
TlBBQ0tfU0tJUF9QSVhFTFMgMHgwQ0Y0CisjZGVmaW5lIEdMX1VOUEFDS19TS0lQX1JPV1MgMHgw
Q0YzCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IFRleHR1cmVNYXBwZXJH
TERhdGEgewogICAgIHN0cnVjdCBTaGFyZWRHTERhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFy
ZWRHTERhdGE+IHsKLSNpZiBQTEFURk9STShRVCkKLSNpZiBRVF9WRVJTSU9OID49IDB4MDUwMDAw
Ci0gICAgICAgIHR5cGVkZWYgUU9wZW5HTENvbnRleHQqIEdMQ29udGV4dDsKLSAgICAgICAgc3Rh
dGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIFFPcGVuR0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgpOwotICAgICAgICB9Ci0j
ZWxzZQotICAgICAgICB0eXBlZGVmIGNvbnN0IFFHTENvbnRleHQqIEdMQ29udGV4dDsKLSAgICAg
ICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIFFHTENvbnRleHQ6OmN1cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIH0K
LSNlbmRpZgotI2VsaWYgT1MoV0lORE9XUykKLSAgICAgICAgdHlwZWRlZiBIR0xSQyBHTENvbnRl
eHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdMQ29udGV4dCgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiB3Z2xHZXRDdXJyZW50Q29udGV4dCgpOwotICAgICAg
ICB9Ci0jZWxpZiBPUyhNQUNfT1NfWCkKLSAgICAgICAgdHlwZWRlZiBBR0xDb250ZXh0IEdMQ29u
dGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFnbEdldEN1cnJlbnRDb250ZXh0KCk7Ci0gICAg
ICAgIH0KLSNlbGlmIGRlZmluZWQoWFBfVU5JWCkKLSAgICAgICAgdHlwZWRlZiBHTFhDb250ZXh0
IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0
KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsWEdldEN1cnJlbnRDb250ZXh0KCk7
Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9y
IHVua25vd24gb3BlbmdsLgotICAgICAgICAvLyBSZXR1cm5zIGFsd2F5cyBpbmNyZWFzaW5nIG51
bWJlciBhbmQgZGlzYWJsZXMgR0wgY29udGV4dCBkYXRhIHNoYXJpbmcuCi0gICAgICAgIHR5cGVk
ZWYgdW5zaWduZWQgaW50IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRD
dXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RhdGljIEdMQ29udGV4
dCBkdW1teUNvbnRleHRDb3VudGVyID0gMDsKLSAgICAgICAgICAgIHJldHVybiArK2R1bW15Q29u
dGV4dENvdW50ZXI7Ci0gICAgICAgIH0KLQotI2VuZGlmCi0KLSAgICAgICAgdHlwZWRlZiBIYXNo
TWFwPEdMQ29udGV4dCwgU2hhcmVkR0xEYXRhKj4gR0xDb250ZXh0RGF0YU1hcDsKKyAgICAgICAg
dHlwZWRlZiBIYXNoTWFwPFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QsIFNoYXJlZEdMRGF0YSo+
IEdMQ29udGV4dERhdGFNYXA7CiAgICAgICAgIHN0YXRpYyBHTENvbnRleHREYXRhTWFwJiBnbENv
bnRleHREYXRhTWFwKCkKICAgICAgICAgewogICAgICAgICAgICAgc3RhdGljIEdMQ29udGV4dERh
dGFNYXAgbWFwOwogICAgICAgICAgICAgcmV0dXJuIG1hcDsKICAgICAgICAgfQogCi0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEdMRGF0YT4gY3VycmVudFNoYXJlZEdMRGF0YSgpCisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEdMRGF0YT4gY3VycmVudFNoYXJlZEdMRGF0
YShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgR0xD
b250ZXh0IGN1cnJlbnRHTENvbmV4dCA9IGdldEN1cnJlbnRHTENvbnRleHQoKTsKLSAgICAgICAg
ICAgIEdMQ29udGV4dERhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgpLmZp
bmQoY3VycmVudEdMQ29uZXh0KTsKKyAgICAgICAgICAgIEdMQ29udGV4dERhdGFNYXA6Oml0ZXJh
dG9yIGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgpLmZpbmQoY29udGV4dC0+cGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQzRCgpKTsKICAgICAgICAgICAgIGlmIChpdCAhPSBnbENvbnRleHREYXRhTWFwKCku
ZW5kKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CiAKLSAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkR0xEYXRhKGdldEN1cnJlbnRHTENvbnRleHQoKSkp
OworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRHTERhdGEoY29udGV4dCkp
OwogICAgICAgICB9CiAKLQotCiAgICAgICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwogCi0gICAgICAgIFNoYXJlZEdMRGF0YShHTENvbnRl
eHQgZ2xDb250ZXh0KQorICAgICAgICBTaGFyZWRHTERhdGEoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCisgICAgICAgICAgICA6IHRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKGNvbnRleHQp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsQ29udGV4dERhdGFNYXAoKS5hZGQoZ2xDb250ZXh0
LCB0aGlzKTsKKyAgICAgICAgICAgIGdsQ29udGV4dERhdGFNYXAoKS5hZGQoY29udGV4dC0+cGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCgpLCB0aGlzKTsKICAgICAgICAgfQogCiAgICAgICAgIH5T
aGFyZWRHTERhdGEoKQpAQCAtMTQyLDMwICs5MiwzMiBAQCBzdHJ1Y3QgVGV4dHVyZU1hcHBlckdM
RGF0YSB7CiAKICAgICBTaGFyZWRHTERhdGEmIHNoYXJlZEdMRGF0YSgpIGNvbnN0CiAgICAgewot
ICAgICAgICByZXR1cm4gKihtX3NoYXJlZEdMRGF0YS5nZXQoKSk7CisgICAgICAgIHJldHVybiAq
bV9zaGFyZWRHTERhdGE7CiAgICAgfQogCiAgICAgdm9pZCBpbml0aWFsaXplU3RlbmNpbCgpOwog
Ci0gICAgVGV4dHVyZU1hcHBlckdMRGF0YSgpCi0gICAgICAgIDogUGFpbnRGbGFncygwKQorICAg
IFRleHR1cmVNYXBwZXJHTERhdGEoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgICAg
IDogY29udGV4dChjb250ZXh0KQorICAgICAgICAsIFBhaW50RmxhZ3MoMCkKICAgICAgICAgLCBw
cmV2aW91c1Byb2dyYW0oMCkKICAgICAgICAgLCB0YXJnZXRGcmFtZUJ1ZmZlcigwKQogICAgICAg
ICAsIGRpZE1vZGlmeVN0ZW5jaWwoZmFsc2UpCiAgICAgICAgICwgcHJldmlvdXNTY2lzc29yU3Rh
dGUoMCkKICAgICAgICAgLCBwcmV2aW91c0RlcHRoU3RhdGUoMCkKLSAgICAgICAgLCBtX3NoYXJl
ZEdMRGF0YShUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRH
TERhdGEoKSkKKyAgICAgICAgLCBtX3NoYXJlZEdMRGF0YShUZXh0dXJlTWFwcGVyR0xEYXRhOjpT
aGFyZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRHTERhdGEodGhpcy0+Y29udGV4dCkpCiAgICAgeyB9
CiAKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDsKICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBwcm9qZWN0aW9uTWF0cml4OwogICAgIFRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgUGFp
bnRGbGFnczsKLSAgICBHTGludCBwcmV2aW91c1Byb2dyYW07Ci0gICAgR0xpbnQgdGFyZ2V0RnJh
bWVCdWZmZXI7CisgICAgR0MzRGludCBwcmV2aW91c1Byb2dyYW07CisgICAgR0MzRGludCB0YXJn
ZXRGcmFtZUJ1ZmZlcjsKICAgICBib29sIGRpZE1vZGlmeVN0ZW5jaWw7Ci0gICAgR0xpbnQgcHJl
dmlvdXNTY2lzc29yU3RhdGU7Ci0gICAgR0xpbnQgcHJldmlvdXNEZXB0aFN0YXRlOwotICAgIEdM
aW50IHZpZXdwb3J0WzRdOwotICAgIEdMaW50IHByZXZpb3VzU2Npc3Nvcls0XTsKKyAgICBHQzNE
aW50IHByZXZpb3VzU2Npc3NvclN0YXRlOworICAgIEdDM0RpbnQgcHJldmlvdXNEZXB0aFN0YXRl
OworICAgIEdDM0RpbnQgdmlld3BvcnRbNF07CisgICAgR0MzRGludCBwcmV2aW91c1NjaXNzb3Jb
NF07CiAgICAgUmVmUHRyPFNoYXJlZEdMRGF0YT4gbV9zaGFyZWRHTERhdGE7CiAgICAgUmVmUHRy
PEJpdG1hcFRleHR1cmU+IGN1cnJlbnRTdXJmYWNlOwogfTsKQEAgLTE4OSwyNSArMTQxLDI1IEBA
IHZvaWQgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2s6OnBvcCgpCiAgICAgY2xpcFN0YWNrLnJl
bW92ZUxhc3QoKTsKIH0KIAotc3RhdGljIHZvaWQgc2Npc3NvckNsaXAoY29uc3QgSW50UmVjdCYg
cmVjdCkKK3N0YXRpYyB2b2lkIHNjaXNzb3JDbGlwKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgR0xpbnQgdmlld3BvcnRbNF07Ci0gICAgR0xfQ01EKGdsR2V0SW50
ZWdlcnYoR0xfVklFV1BPUlQsIHZpZXdwb3J0KSk7Ci0gICAgR0xfQ01EKGdsU2Npc3NvcihyZWN0
LngoKSwgdmlld3BvcnRbM10gLSByZWN0Lm1heFkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpKSk7CisgICAgR0MzRGludCB2aWV3cG9ydFs0XTsKKyAgICBjb250ZXh0LT5nZXRJbnRlZ2Vy
dihHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQsIHZpZXdwb3J0KTsKKyAgICBjb250ZXh0LT5z
Y2lzc29yKHJlY3QueCgpLCB2aWV3cG9ydFszXSAtIHJlY3QubWF4WSgpLCByZWN0LndpZHRoKCks
IHJlY3QuaGVpZ2h0KCkpOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjph
cHBseSgpCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjphcHBseShHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCkKIHsKLSAgICBzY2lzc29yQ2xpcChjbGlwU3RhdGUuc2Npc3NvckJv
eCk7Ci0gICAgR0xfQ01EKGdsU3RlbmNpbE9wKEdMX0tFRVAsIEdMX0tFRVAsIEdMX0tFRVApKTsK
LSAgICBHTF9DTUQoZ2xTdGVuY2lsRnVuYyhHTF9FUVVBTCwgY2xpcFN0YXRlLnN0ZW5jaWxJbmRl
eCAtIDEsIGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXggLSAxKSk7CisgICAgc2Npc3NvckNsaXAoY29u
dGV4dCwgY2xpcFN0YXRlLnNjaXNzb3JCb3gpOworICAgIGNvbnRleHQtPnN0ZW5jaWxPcChHcmFw
aGljc0NvbnRleHQzRDo6S0VFUCwgR3JhcGhpY3NDb250ZXh0M0Q6OktFRVAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpLRUVQKTsKKyAgICBjb250ZXh0LT5zdGVuY2lsRnVuYyhHcmFwaGljc0NvbnRleHQz
RDo6RVFVQUwsIGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXggLSAxLCBjbGlwU3RhdGUuc3RlbmNpbElu
ZGV4IC0gMSk7CiAgICAgaWYgKGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXggPT0gMSkKLSAgICAgICAg
R0xfQ01EKGdsRGlzYWJsZShHTF9TVEVOQ0lMX1RFU1QpKTsKKyAgICAgICAgY29udGV4dC0+ZGlz
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKTsKICAgICBlbHNlCi0gICAgICAg
IEdMX0NNRChnbEVuYWJsZShHTF9TVEVOQ0lMX1RFU1QpKTsKKyAgICAgICAgY29udGV4dC0+ZW5h
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpOwogfQogCiAKQEAgLTIyMSw4ICsx
NzMsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTERhdGE6OmluaXRpYWxpemVTdGVuY2lsKCkKICAg
ICBpZiAoZGlkTW9kaWZ5U3RlbmNpbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR0xfQ01EKGds
Q2xlYXJTdGVuY2lsKDApKTsKLSAgICBHTF9DTUQoZ2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9C
SVQpKTsKKyAgICBjb250ZXh0LT5jbGVhclN0ZW5jaWwoMCk7CisgICAgY29udGV4dC0+Y2xlYXIo
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCk7CiAgICAgZGlkTW9kaWZ5U3Rl
bmNpbCA9IHRydWU7CiB9CiAKQEAgLTIzNiwxMCArMTg4LDExIEBAIEJpdG1hcFRleHR1cmVHTCog
dG9CaXRtYXBUZXh0dXJlR0woQml0bWFwVGV4dHVyZSogdGV4dHVyZSkKIAogVGV4dHVyZU1hcHBl
ckdMOjpUZXh0dXJlTWFwcGVyR0woKQogICAgIDogVGV4dHVyZU1hcHBlcihPcGVuR0xNb2RlKQot
ICAgICwgbV9kYXRhKG5ldyBUZXh0dXJlTWFwcGVyR0xEYXRhKQogICAgICwgbV9jb250ZXh0KDAp
CiAgICAgLCBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyhmYWxzZSkKIHsKKyAgICBt
X2NvbnRleHQzRCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVXcmFwcGVyRm9yQ3VycmVudEdM
Q29udGV4dCgpOworICAgIG1fZGF0YSA9IG5ldyBUZXh0dXJlTWFwcGVyR0xEYXRhKG1fY29udGV4
dDNELmdldCgpKTsKIH0KIAogVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2smIFRleHR1cmVNYXBw
ZXJHTDo6Y2xpcFN0YWNrKCkKQEAgLTI0OSwxNSArMjAyLDkgQEAgVGV4dHVyZU1hcHBlckdMOjpD
bGlwU3RhY2smIFRleHR1cmVNYXBwZXJHTDo6Y2xpcFN0YWNrKCkKIAogdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyBmbGFncykKIHsKLSAgICAvLyBNYWtlIHN1
cmUgdGhhdCBubyBHTCBlcnJvciBjb2RlIHN0YXlzIGZyb20gcHJldmlvdXMgb3BlcmF0aW9ucy4K
LSAgICBnbEdldEVycm9yKCk7Ci0KLSAgICBpZiAoIWluaXRpYWxpemVPcGVuR0xTaGltcygpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9DVVJSRU5UX1BS
T0dSQU0sICZkYXRhKCkucHJldmlvdXNQcm9ncmFtKSk7Ci0gICAgZGF0YSgpLnByZXZpb3VzU2Np
c3NvclN0YXRlID0gZ2xJc0VuYWJsZWQoR0xfU0NJU1NPUl9URVNUKTsKLSAgICBkYXRhKCkucHJl
dmlvdXNEZXB0aFN0YXRlID0gZ2xJc0VuYWJsZWQoR0xfREVQVEhfVEVTVCk7CisgICAgbV9jb250
ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpDVVJSRU5UX1BST0dSQU0sICZk
YXRhKCkucHJldmlvdXNQcm9ncmFtKTsKKyAgICBkYXRhKCkucHJldmlvdXNTY2lzc29yU3RhdGUg
PSBtX2NvbnRleHQzRC0+aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Qp
OworICAgIGRhdGEoKS5wcmV2aW91c0RlcHRoU3RhdGUgPSBtX2NvbnRleHQzRC0+aXNFbmFibGVk
KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUKTsKICNpZiBQTEFURk9STShRVCkKICAgICBp
ZiAobV9jb250ZXh0KSB7CiAgICAgICAgIFFQYWludGVyKiBwYWludGVyID0gbV9jb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKTsKQEAgLTI2NSwxNSArMjEyLDE1IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpiZWdpblBhaW50aW5nKFBhaW50RmxhZ3MgZmxhZ3MpCiAgICAgICAgIHBhaW50ZXItPmJl
Z2luTmF0aXZlUGFpbnRpbmcoKTsKICAgICB9CiAjZW5kaWYKLSAgICBnbERpc2FibGUoR0xfREVQ
VEhfVEVTVCk7Ci0gICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBtX2NvbnRleHQz
RC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCk7CisgICAgbV9jb250ZXh0
M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKICAgICBkYXRhKCku
ZGlkTW9kaWZ5U3RlbmNpbCA9IGZhbHNlOwotICAgIEdMX0NNRChnbERlcHRoTWFzaygwKSk7Ci0g
ICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIGRhdGEoKS52aWV3cG9ydCkpOwot
ICAgIEdMX0NNRChnbEdldEludGVnZXJ2KEdMX1NDSVNTT1JfQk9YLCBkYXRhKCkucHJldmlvdXNT
Y2lzc29yKSk7Ci0gICAgZ2xHZXRJbnRlZ2VydihHTF9GUkFNRUJVRkZFUl9CSU5ESU5HLCAmZGF0
YSgpLnRhcmdldEZyYW1lQnVmZmVyKTsKKyAgICBtX2NvbnRleHQzRC0+ZGVwdGhNYXNrKDApOwor
ICAgIG1fY29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQs
IGRhdGEoKS52aWV3cG9ydCk7CisgICAgbV9jb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX0JPWCwgZGF0YSgpLnByZXZpb3VzU2Npc3Nvcik7CisgICAgbV9j
b250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5E
SU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKTsKICAgICBtX2NsaXBTdGFjay5pbml0KElu
dFJlY3QoMCwgMCwgZGF0YSgpLnZpZXdwb3J0WzJdLCBkYXRhKCkudmlld3BvcnRbM10pKTsKLSAg
ICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9GUkFNRUJVRkZFUl9CSU5ESU5HLCAmZGF0YSgpLnRh
cmdldEZyYW1lQnVmZmVyKSk7CisgICAgbV9jb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5ESU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVy
KTsKICAgICBkYXRhKCkuUGFpbnRGbGFncyA9IGZsYWdzOwogICAgIGJpbmRTdXJmYWNlKDApOwog
fQpAQCAtMjgxLDIyICsyMjgsMjIgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRp
bmcoUGFpbnRGbGFncyBmbGFncykKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjplbmRQYWludGluZygp
CiB7CiAgICAgaWYgKGRhdGEoKS5kaWRNb2RpZnlTdGVuY2lsKSB7Ci0gICAgICAgIGdsQ2xlYXJT
dGVuY2lsKDEpOwotICAgICAgICBnbENsZWFyKEdMX1NURU5DSUxfQlVGRkVSX0JJVCk7CisgICAg
ICAgIG1fY29udGV4dDNELT5jbGVhclN0ZW5jaWwoMSk7CisgICAgICAgIG1fY29udGV4dDNELT5j
bGVhcihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKTsKICAgICB9CiAKLSAg
ICBnbFVzZVByb2dyYW0oZGF0YSgpLnByZXZpb3VzUHJvZ3JhbSk7CisgICAgbV9jb250ZXh0M0Qt
PnVzZVByb2dyYW0oZGF0YSgpLnByZXZpb3VzUHJvZ3JhbSk7CiAKLSAgICBnbFNjaXNzb3IoZGF0
YSgpLnByZXZpb3VzU2Npc3NvclswXSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclsxXSwgZGF0YSgp
LnByZXZpb3VzU2Npc3NvclsyXSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclszXSk7CisgICAgbV9j
b250ZXh0M0QtPnNjaXNzb3IoZGF0YSgpLnByZXZpb3VzU2Npc3NvclswXSwgZGF0YSgpLnByZXZp
b3VzU2Npc3NvclsxXSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclsyXSwgZGF0YSgpLnByZXZpb3Vz
U2Npc3NvclszXSk7CiAgICAgaWYgKGRhdGEoKS5wcmV2aW91c1NjaXNzb3JTdGF0ZSkKLSAgICAg
ICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmVuYWJs
ZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKICAgICBlbHNlCi0gICAgICAgIGds
RGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgICAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKIAogICAgIGlmIChkYXRhKCkucHJldmlv
dXNEZXB0aFN0YXRlKQotICAgICAgICBnbEVuYWJsZShHTF9ERVBUSF9URVNUKTsKKyAgICAgICAg
bV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCk7CiAgICAg
ZWxzZQotICAgICAgICBnbERpc2FibGUoR0xfREVQVEhfVEVTVCk7CisgICAgICAgIG1fY29udGV4
dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUKTsKIAogI2lmIFBMQVRG
T1JNKFFUKQogICAgIGlmICghbV9jb250ZXh0KQpAQCAtMzA3LDQwICsyNTQsNDAgQEAgdm9pZCBU
ZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50aW5nKCkKICNlbmRpZgogfQogCi12b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtKiBzaGFkZXJQcm9ncmFtLCBHTGVudW0gZHJhd2luZ01vZGUsIGJvb2wgbmVlZHNCbGVuZGlu
ZykKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYgcXVhZFRv
RHJhdywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0qIHNoYWRlclByb2dyYW0sIEdDM0RlbnVtIGRyYXdpbmdNb2Rl
LCBib29sIG5lZWRzQmxlbmRpbmcpCiB7Ci0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmli
QXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xCaW5k
QnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250
ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCk7CiAK
LSAgICBjb25zdCBHTGZsb2F0IHF1YWRbXSA9IHsKKyAgICBjb25zdCBHQzNEZmxvYXQgcXVhZFtd
ID0gewogICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDEo
KS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMSgpLnkoKSwK
ICAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAyKCkueCgp
LCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDIoKS55KCksCiAgICAg
ICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMygpLngoKSwgcXVh
ZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAzKCkueSgpLAogICAgICAgICBx
dWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDQoKS54KCksIHF1YWRUb0Ry
YXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wNCgpLnkoKQogICAgIH07Ci0gICAgR0xf
Q01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwg
MiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCBxdWFkKSk7CisgICAgbV9jb250ZXh0M0QtPnZlcnRl
eEF0dHJpYlBvaW50ZXIoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIocXVhZCkpOwogCiAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnBy
b2plY3Rpb25NYXRyaXgpLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkubXVsdGlwbHkoVHJhbnNm
b3JtYXRpb25NYXRyaXgoCiAgICAgICAgICAgICBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVj
dC53aWR0aCgpLCAwLCAwLCAwLAogICAgICAgICAgICAgMCwgcXVhZFRvRHJhdy5vcmlnaW5hbFRh
cmdldFJlY3QuaGVpZ2h0KCksIDAsIDAsCiAgICAgICAgICAgICAwLCAwLCAxLCAwLAogICAgICAg
ICAgICAgcXVhZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJlY3QueCgpLCBxdWFkVG9EcmF3Lm9yaWdp
bmFsVGFyZ2V0UmVjdC55KCksIDAsIDEpKTsKLSAgICBjb25zdCBHTGZsb2F0IG00W10gPSB7Cisg
ICAgR0MzRGZsb2F0IG00W10gPSB7CiAgICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigp
LCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKICAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRy
aXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAogICAgICAgICBtYXRyaXgubTMx
KCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCiAgICAgICAgIG1h
dHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQogICAg
IH07Ci0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihzaGFkZXJQcm9ncmFtLT5tYXRyaXhM
b2NhdGlvbigpLCAxLCBHTF9GQUxTRSwgbTQpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybU1h
dHJpeDRmdihzaGFkZXJQcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgbTQpOwog
CiAgICAgaWYgKG5lZWRzQmxlbmRpbmcpIHsKLSAgICAgICAgR0xfQ01EKGdsQmxlbmRGdW5jKEdM
X09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSkpOwotICAgICAgICBHTF9DTUQoZ2xFbmFibGUo
R0xfQkxFTkQpKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRl
eHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAg
ICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKICAgICB9
IGVsc2UKLSAgICAgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9CTEVORCkpOworICAgICAgICBtX2Nv
bnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwogCi0gICAgR0xfQ01E
KGdsRHJhd0FycmF5cyhkcmF3aW5nTW9kZSwgMCwgNCkpOwotICAgIEdMX0NNRChnbERpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOworICAgIG1f
Y29udGV4dDNELT5kcmF3QXJyYXlzKGRyYXdpbmdNb2RlLCAwLCA0KTsKKyAgICBtX2NvbnRleHQz
RC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigp
KTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNv
bG9yLCBmbG9hdCB3aWR0aCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4KQpAQCAtMzQ5LDE3ICsyOTYsMTcgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9h
dCB3aWR0aCwgY29uc3QgRmxvYXRSZWMKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFy
ZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5zb2xpZENvbG9yUHJvZ3JhbSgp
OwotICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOworICAgIG1fY29udGV4
dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOwogCiAgICAgZmxvYXQgYWxwaGEgPSBjb2xv
ci5hbHBoYSgpIC8gMjU1LjA7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTRmKHByb2dyYW0tPmNvbG9y
TG9jYXRpb24oKSwKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9j
YXRpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgKGNvbG9yLnJlZCgpIC8gMjU1LjApICog
YWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgIChjb2xvci5ncmVlbigpIC8gMjU1LjApICog
YWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgIChjb2xvci5ibHVlKCkgLyAyNTUuMCkgKiBh
bHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgYWxwaGEpKTsKLSAgICBHTF9DTUQoZ2xMaW5l
V2lkdGgod2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgYWxwaGEpOworICAgIG1fY29u
dGV4dDNELT5saW5lV2lkdGgod2lkdGgpOwogCi0gICAgZHJhd1F1YWQodGFyZ2V0UmVjdCwgbW9k
ZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdldCgpLCBHTF9MSU5FX0xPT1AsIGNvbG9yLmhhc0FscGhh
KCkpOworICAgIGRyYXdRdWFkKHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgcHJvZ3JhbS5n
ZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUCwgY29sb3IuaGFzQWxwaGEoKSk7CiB9
CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3UmVwYWludENvdW50ZXIoaW50IHZhbHVlLCBp
bnQgcG9pbnRTaXplLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCkKQEAgLTQwNiw3ICszNTMsNyBAQCB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVy
ZSwgY29uc3QgRmxvYXRSZWN0JgogICAgIGRyYXdUZXh0dXJlKHRleHR1cmVHTC5pZCgpLCB0ZXh0
dXJlR0wuaXNPcGFxdWUoKSA/IDAgOiBTdXBwb3J0c0JsZW5kaW5nLCB0ZXh0dXJlR0wuc2l6ZSgp
LCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHksIG1hc2ssIGV4cG9zZWRFZGdlcyk7CiB9CiAK
LSNpZiBkZWZpbmVkKEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSkKKyNpZiAhVVNFKFRFWE1BUF9P
UEVOR0xfRVNfMikKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVJlY3RhbmdsZUFS
Qih1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSog
bWFza1RleHR1cmUpCiB7CiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBw
cm9ncmFtOwpAQCAtNDE0LDM2ICszNjEsMzYgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdU
ZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb24KICAg
ICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpSZWN0
T3BhY2l0eUFuZE1hc2spOwogICAgIGVsc2UKICAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFy
ZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpSZWN0U2ltcGxlKTsKLSAgICBHTF9DTUQoZ2xVc2VQ
cm9ncmFtKHByb2dyYW0tPmlkKCkpKTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9n
cmFtLT5pZCgpKTsKIAotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dy
YW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhU
VVJFMCkpOwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FS
QiwgdGV4dHVyZSkpOwotICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtLT5zb3VyY2VUZXh0
dXJlTG9jYXRpb24oKSwgMCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKyAgICBtX2NvbnRleHQzRC0+Ymlu
ZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCB0ZXh0dXJlKTsKKyAgICBtX2NvbnRl
eHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnNvdXJjZVRleHR1cmVMb2NhdGlvbigpLCAwKTsKIAot
ICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtLT5mbGlwTG9jYXRpb24oKSwgISEoZmxhZ3Mg
JiBTaG91bGRGbGlwVGV4dHVyZSkpKTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMmYocHJvZ3JhbS0+
dGV4dHVyZVNpemVMb2NhdGlvbigpLCB0ZXh0dXJlU2l6ZS53aWR0aCgpLCB0ZXh0dXJlU2l6ZS5o
ZWlnaHQoKSkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+ZmxpcExvY2F0
aW9uKCksICEhKGZsYWdzICYgU2hvdWxkRmxpcFRleHR1cmUpKTsKKyAgICBtX2NvbnRleHQzRC0+
dW5pZm9ybTJmKHByb2dyYW0tPnRleHR1cmVTaXplTG9jYXRpb24oKSwgdGV4dHVyZVNpemUud2lk
dGgoKSwgdGV4dHVyZVNpemUuaGVpZ2h0KCkpOwogCiAgICAgaWYgKFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlv
bigpKSkKLSAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlv
bigpLCBvcGFjaXR5KSk7CisgICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+
b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpOwogCiAgICAgaWYgKG1hc2tUZXh0dXJlICYmIG1h
c2tUZXh0dXJlLT5pc1ZhbGlkKCkgJiYgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFs
aWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpKSkgewogICAg
ICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wqIG1hc2tUZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxj
b25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNrVGV4dHVyZSk7Ci0gICAgICAgIEdMX0NNRChnbEFj
dGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpKTsKLSAgICAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgbWFza1RleHR1cmVHTC0+aWQoKSkpOwotICAgICAgICBHTF9DTUQoZ2xV
bmlmb3JtMWkocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpLCAxKSk7Ci0gICAgICAgIEdM
X0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKKyAgICAgICAgbV9jb250ZXh0M0Qt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKKyAgICAgICAgbV9j
b250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtYXNr
VGV4dHVyZUdMLT5pZCgpKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFt
LT5tYXNrVGV4dHVyZUxvY2F0aW9uKCksIDEpOworICAgICAgICBtX2NvbnRleHQzRC0+YWN0aXZl
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwogICAgIH0KIAogICAgIGJvb2wg
bmVlZHNCbGVuZGluZyA9IChmbGFncyAmIFN1cHBvcnRzQmxlbmRpbmcpIHx8IG9wYWNpdHkgPCAw
Ljk5IHx8IG1hc2tUZXh0dXJlOwotICAgIGRyYXdRdWFkKHRhcmdldFJlY3QsIG1vZGVsVmlld01h
dHJpeCwgcHJvZ3JhbS5nZXQoKSwgR0xfVFJJQU5HTEVfRkFOLCBuZWVkc0JsZW5kaW5nKTsKKyAg
ICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdy
YXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIG5lZWRzQmxlbmRpbmcpOwogfQotI2VuZGlm
IC8vIGRlZmluZWQoR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlKSAKKyNlbmRpZiAvLyAhVVNFKFRF
WE1BUF9PUEVOR0xfRVNfMikKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKHVp
bnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJbnRTaXplJiAvKiB0ZXh0dXJlU2l6
ZSAqLywgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJl
KiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKQogewotICAgIGJvb2wgbmVlZHNB
bnRpbGlhaW5nID0gbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcgJiYgIW1vZGVsVmll
d01hdHJpeC5pc0ludGVnZXJUcmFuc2xhdGlvbigpOwotICAgIGlmIChuZWVkc0FudGlsaWFpbmcg
JiYgZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHRleHR1cmUsIGZsYWdzLCB0YXJnZXRSZWN0
LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0dXJlLCBleHBvc2VkRWRnZXMpKQor
ICAgIGJvb2wgbmVlZHNBbnRpYWxpYWluZyA9IG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFz
aW5nICYmICFtb2RlbFZpZXdNYXRyaXguaXNJbnRlZ2VyVHJhbnNsYXRpb24oKTsKKyAgICBpZiAo
bmVlZHNBbnRpYWxpYWluZyAmJiBkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodGV4dHVyZSwg
ZmxhZ3MsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgbWFza1RleHR1cmUs
IGV4cG9zZWRFZGdlcykpCiAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtOwpAQCAtNDUxLDE1ICszOTgsMTUgQEAgdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBj
b25zdCBJbnRTaXplJgogICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6Ok9wYWNpdHlBbmRNYXNrKTsKICAgICBlbHNlCiAgICAgICAgIHByb2dyYW0g
PSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hh
ZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2ltcGxlKTsKLSAgICBHTF9D
TUQoZ2xVc2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpKTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJv
Z3JhbShwcm9ncmFtLT5pZCgpKTsKIAogICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShw
cm9ncmFtLmdldCgpLCB0ZXh0dXJlLCBmbGFncywgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4
LCBvcGFjaXR5LCBtYXNrVGV4dHVyZSk7CiB9CiAKLXN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB2aWV3cG9ydE1hdHJpeCgpCitzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggdmlld3BvcnRN
YXRyaXgoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCkKIHsKLSAgICBHTGludCB2aWV3cG9y
dFs0XTsKLSAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9WSUVXUE9SVCwgdmlld3BvcnQpKTsK
KyAgICBHQzNEaW50IHZpZXdwb3J0WzRdOworICAgIGNvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JULCB2aWV3cG9ydCk7CiAKICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBtYXRyaXg7CiAgICAgbWF0cml4LnRyYW5zbGF0ZTNkKHZpZXdwb3J0WzBdLCB2aWV3
cG9ydFsxXSwgMCk7CkBAIC01NTYsNyArNTAzLDcgQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmRy
YXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywK
ICAgICAvLyBhbnRpYWxpYXNpbmcuIE5vdGUgaGVyZSB0aGF0IHdlIGFyZSBhbHNvIGluY2x1ZGlu
ZyB0aGUgdmlld3BvcnQgbWF0cml4ICh3aGljaAogICAgIC8vIHRyYW5zbGF0ZXMgZnJvbSBub3Jt
YWxpemVkIGRldmljZSBjb29yZGluYXRlcyB0byBzY3JlZW4gY29vcmRpbmF0ZXMpLCBiZWNhdXNl
IHRoZXNlCiAgICAgLy8gdmFsdWVzIGFyZSBjb25zdW1lZCBpbiB0aGUgZnJhZ21lbnQgc2hhZGVy
LCB3aGljaCB3b3JrcyBpbiBzY3JlZW4gY29vcmRpbmF0ZXMuCi0gICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggc2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSB2aWV3cG9ydE1hdHJpeCgpLm11bHRpcGx5KFRy
YW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KSkubXVsdGlwbHkobW9k
ZWxWaWV3TWF0cml4KS50bzJkVHJhbnNmb3JtKCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
c2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSB2aWV3cG9ydE1hdHJpeChtX2NvbnRleHQzRC5nZXQoKSku
bXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpKS5t
dWx0aXBseShtb2RlbFZpZXdNYXRyaXgpLnRvMmRUcmFuc2Zvcm0oKTsKICAgICBpZiAoIXNjcmVl
blNwYWNlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgRmxvYXRRdWFkIHF1YWRJblNjcmVlblNwYWNlID0gc2NyZWVuU3BhY2VUcmFuc2Zvcm0ubWFw
UXVhZChvcmlnaW5hbFRhcmdldFJlY3QpOwpAQCAtNTgwLDggKzUyNyw4IEBAIGJvb2wgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVyZSwg
RmxhZ3MgZmxhZ3MsCiAgICAgcXVhZFRvRWRnZUFycmF5KGluZmxhdGVRdWFkKHF1YWRJblNjcmVl
blNwYWNlLmJvdW5kaW5nQm94KCksICBpbmZsYXRpb25EaXN0YW5jZSksIHRhcmdldFF1YWRFZGdl
cyArIDEyKTsKIAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlh
c2luZ05vTWFzaz4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5hbnRpYWxpYXNpbmdOb01hc2tQcm9ncmFtKCk7Ci0gICAgR0xfQ01EKGds
VXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKSk7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTNmdihwcm9n
cmFtLT5leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbigpLCA4LCB0YXJnZXRR
dWFkRWRnZXMpKTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKTsK
KyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTNmdihwcm9ncmFtLT5leHBhbmRlZFF1YWRFZGdlc0lu
U2NyZWVuU3BhY2VMb2NhdGlvbigpLCA4LCB0YXJnZXRRdWFkRWRnZXMpOwogCiAgICAgZHJhd1Rl
eHR1cmVkUXVhZFdpdGhQcm9ncmFtKHByb2dyYW0uZ2V0KCksIHRleHR1cmUsIGZsYWdzLCBEcmF3
UXVhZChvcmlnaW5hbFRhcmdldFJlY3QsIGV4cGFuZGVkUXVhZEluVGV4dHVyZUNvb3JkaW5hdGVz
KSwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5LCAwIC8qIG1hc2tUZXh0dXJlICovKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTU4OSwyNiArNTM2LDI2IEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpk
cmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3Ms
CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0oVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHByb2dyYW0sIHVpbnQzMl90IHRleHR1cmUsIEZsYWdz
IGZsYWdzLCBjb25zdCBEcmF3UXVhZCYgcXVhZFRvRHJhdywgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVy
ZSogbWFza1RleHR1cmUpCiB7Ci0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXko
cHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdM
X1RFWFRVUkUwKSk7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4
dHVyZSkpOwotICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtLT5zb3VyY2VUZXh0dXJlTG9j
YXRpb24oKSwgMCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShw
cm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKyAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmUpOworICAgIG1fY29udGV4
dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVyZUxvY2F0aW9uKCksIDApOwogCi0g
ICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW0tPmZsaXBMb2NhdGlvbigpLCAhIShmbGFncyAm
IFNob3VsZEZsaXBUZXh0dXJlKSkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3Jh
bS0+ZmxpcExvY2F0aW9uKCksICEhKGZsYWdzICYgU2hvdWxkRmxpcFRleHR1cmUpKTsKIAogICAg
IGlmIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSkpCi0gICAgICAgIEdMX0NNRChnbFVuaWZvcm0xZihw
cm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0eSkpOworICAgICAgICBtX2NvbnRleHQz
RC0+dW5pZm9ybTFmKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5KTsKIAogICAg
IGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpICYmIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0tPm1hc2tUZXh0
dXJlTG9jYXRpb24oKSkpIHsKICAgICAgICAgY29uc3QgQml0bWFwVGV4dHVyZUdMKiBtYXNrVGV4
dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMKj4obWFza1RleHR1cmUp
OwotICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKSk7Ci0gICAgICAg
IEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPmlkKCkp
KTsKLSAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRp
b24oKSwgMSkpOwotICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSk7
CisgICAgICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFMSk7CisgICAgICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgbWFza1RleHR1cmVHTC0+aWQoKSk7CisgICAgICAgIG1fY29udGV4
dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpLCAxKTsKKyAgICAg
ICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUw
KTsKICAgICB9CiAKICAgICBib29sIG5lZWRzQmxlbmRpbmcgPSAoZmxhZ3MgJiBTdXBwb3J0c0Js
ZW5kaW5nKSB8fCBvcGFjaXR5IDwgMC45OSB8fCBtYXNrVGV4dHVyZTsKLSAgICBkcmF3UXVhZChx
dWFkVG9EcmF3LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0sIEdMX1RSSUFOR0xFX0ZBTiwgbmVl
ZHNCbGVuZGluZyk7CisgICAgZHJhd1F1YWQocXVhZFRvRHJhdywgbW9kZWxWaWV3TWF0cml4LCBw
cm9ncmFtLCBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCBuZWVkc0JsZW5kaW5nKTsK
IH0KIAogYm9vbCBCaXRtYXBUZXh0dXJlR0w6OmNhblJldXNlV2l0aChjb25zdCBJbnRTaXplJiBj
b250ZW50c1NpemUsIEZsYWdzKQpAQCAtNjE5LDcgKzU2Niw3IEBAIGJvb2wgQml0bWFwVGV4dHVy
ZUdMOjpjYW5SZXVzZVdpdGgoY29uc3QgSW50U2l6ZSYgY29udGVudHNTaXplLCBGbGFncykKICNp
ZiBPUyhEQVJXSU4pCiAjZGVmaW5lIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBF
IEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFVgogI2Vsc2UKLSNkZWZpbmUgREVGQVVMVF9URVhU
VVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUgR0xfVU5TSUdORURfQllURQorI2RlZmluZSBERUZBVUxU
X1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURQogI2VuZGlmCiAKIHN0YXRpYyBib29sIGRyaXZlclN1cHBvcnRzU3ViSW1hZ2UoKQpAQCAt
NjM0LDMwICs1ODEsMzEgQEAgc3RhdGljIGJvb2wgZHJpdmVyU3VwcG9ydHNTdWJJbWFnZSgpCiAK
IHZvaWQgQml0bWFwVGV4dHVyZUdMOjpkaWRSZXNldCgpCiB7CisgICAgR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKICAg
ICBpZiAoIW1faWQpCi0gICAgICAgIEdMX0NNRChnbEdlblRleHR1cmVzKDEsICZtX2lkKSk7Ci0K
KyAgICAgICAgbV9pZCA9IGNvbnRleHQzRC0+Y3JlYXRlVGV4dHVyZSgpOwogICAgIG1fc2hvdWxk
Q2xlYXIgPSB0cnVlOwogICAgIGlmIChtX3RleHR1cmVTaXplID09IGNvbnRlbnRTaXplKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1fdGV4dHVyZVNpemUgPSBjb250ZW50U2l6ZSgpOwotICAg
IEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKTsKLSAgICBHTF9DTUQo
Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xf
TElORUFSKSk7Ci0gICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUikpOwotICAgIEdMX0NNRChnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpKTsK
LSAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JB
UF9ULCBHTF9DTEFNUF9UT19FREdFKSk7Ci0gICAgR0xfQ01EKGdsVGV4SW1hZ2UyRChHTF9URVhU
VVJFXzJELCAwLCBHTF9SR0JBLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUu
aGVpZ2h0KCksIDAsIEdMX1JHQkEsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBF
LCAwKSk7CisgICAgY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgbV9pZCk7CisgICAgY29udGV4dDNELT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVS
LCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICBjb250ZXh0M0QtPnRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIGNvbnRleHQz
RC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURH
RSk7CisgICAgY29udGV4dDNELT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4
dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBjb250ZXh0M0QtPnRleEltYWdlMkREaXJlY3QoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBt
X3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgMCk7
CiB9CiAKIAogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQq
IGRhdGEsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFBvaW50JiBzb3VyY2VP
ZmZzZXQsIGludCBieXRlc1BlckxpbmUpCiB7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgbV9pZCkpOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBt
X3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgY29udGV4dDNELT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9pZCk7CiAKICAgICBjb25z
dCB1bnNpZ25lZCBieXRlc1BlclBpeGVsID0gNDsKICAgICBpZiAoYnl0ZXNQZXJMaW5lID09IHRh
cmdldFJlY3Qud2lkdGgoKSAqIGJ5dGVzUGVyUGl4ZWwgJiYgc291cmNlT2Zmc2V0ID09IEludFBv
aW50Ojp6ZXJvKCkpIHsKLSAgICAgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgo
KSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgR0xfUkdCQSwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RS
QU5TRkVSX1RZUEUsIChjb25zdCBjaGFyKilkYXRhKSk7CisgICAgICAgIGNvbnRleHQzRC0+dGV4
U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54
KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0
KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNG
RVJfVFlQRSwgKGNvbnN0IGNoYXIqKWRhdGEpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC02NzUsMTkgKzYyMywxOSBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMo
Y29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdAogICAgICAgICAgICAg
ZHN0ICs9IHRhcmdldEJ5dGVzUGVyTGluZTsKICAgICAgICAgfQogCi0gICAgICAgIEdMX0NNRChn
bFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJl
Y3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIEdMX1JHQkEs
IERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCB0ZW1wb3JhcnlEYXRhLmRhdGEo
KSkpOworICAgICAgICBjb250ZXh0M0QtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVj
dC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
REVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIHRlbXBvcmFyeURhdGEuZGF0YSgp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lmICFkZWZpbmVkKFRFWE1BUF9PUEVOR0xf
RVNfMikKICAgICAvLyBVc2UgdGhlIE9wZW5HTCBzdWItaW1hZ2UgZXh0ZW5zaW9uLCBub3cgdGhh
dCB3ZSBrbm93IGl0J3MgYXZhaWxhYmxlLgotICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdMX1VO
UEFDS19ST1dfTEVOR1RILCBieXRlc1BlckxpbmUgLyBieXRlc1BlclBpeGVsKSk7Ci0gICAgR0xf
Q01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgc291cmNlT2Zmc2V0LnkoKSkp
OwotICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJWEVMUywgc291cmNl
T2Zmc2V0LngoKSkpOwotICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwg
MCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRh
cmdldFJlY3QuaGVpZ2h0KCksIEdMX1JHQkEsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZF
Ul9UWVBFLCAoY29uc3QgY2hhciopZGF0YSkpOwotICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdM
X1VOUEFDS19ST1dfTEVOR1RILCAwKSk7Ci0gICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5Q
QUNLX1NLSVBfUk9XUywgMCkpOwotICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19T
S0lQX1BJWEVMUywgMCkpOworICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JP
V19MRU5HVEgsIGJ5dGVzUGVyTGluZSAvIGJ5dGVzUGVyUGl4ZWwpOworICAgIGNvbnRleHQzRC0+
cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgc291cmNlT2Zmc2V0LnkoKSk7CisgICAg
Y29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsIHNvdXJjZU9mZnNl
dC54KCkpOworICAgIGNvbnRleHQzRC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0
LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBE
RUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgKGNvbnN0IGNoYXIqKWRhdGEpOwor
ICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIDApOworICAg
IGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgMCk7CisgICAgY29u
dGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsIDApOwogI2VuZGlmCiB9
CiAKQEAgLTcxMiwxOSArNjYwLDE5IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3RmlsdGVy
ZWQoY29uc3QgQml0bWFwVGV4dHVyZSYgc291cmNlVGV4dHVyZSwgY29uc3QgQml0CiAKICAgICBw
cm9ncmFtLT5wcmVwYXJlKGZpbHRlciwgcGFzcywgc291cmNlVGV4dHVyZS5jb250ZW50U2l6ZSgp
LCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihjb250ZW50VGV4dHVyZSkuaWQo
KSk7CiAKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0
ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dy
YW0tPnRleENvb3JkQXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RF
WFRVUkUwKSk7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgc3RhdGlj
X2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oc291cmNlVGV4dHVyZSkuaWQoKSkpOwotICAg
IGdsVW5pZm9ybTFpKHByb2dyYW0tPnRleHR1cmVVbmlmb3JtKCksIDApOwotICAgIGNvbnN0IEdM
ZmxvYXQgdGFyZ2V0VmVydGljZXNbXSA9IHstMSwgLTEsIDEsIC0xLCAxLCAxLCAtMSwgMX07Ci0g
ICAgY29uc3QgR0xmbG9hdCBzb3VyY2VWZXJ0aWNlc1tdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAs
IDF9OwotICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4QXR0
cmliKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdGFyZ2V0VmVydGljZXMpKTsKLSAgICBH
TF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnRleENvb3JkQXR0cmliKCksIDIs
IEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgc291cmNlVmVydGljZXMpKTsKLSAgICBHTF9DTUQoZ2xE
aXNhYmxlKEdMX0JMRU5EKSk7Ci0gICAgR0xfQ01EKGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9G
QU4sIDAsIDQpKTsKLSAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3Jh
bS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0
M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmliKCkpOwor
ICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
MCk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihzb3VyY2VUZXh0dXJl
KS5pZCgpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnRleHR1cmVVbmlm
b3JtKCksIDApOworICAgIGNvbnN0IEdDM0RmbG9hdCB0YXJnZXRWZXJ0aWNlc1tdID0gey0xLCAt
MSwgMSwgLTEsIDEsIDEsIC0xLCAxfTsKKyAgICBjb25zdCBHQzNEZmxvYXQgc291cmNlVmVydGlj
ZXNbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKKyAgICBtX2NvbnRleHQzRC0+dmVydGV4
QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cih0YXJnZXRWZXJ0aWNlcykpOworICAgIG1f
Y29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnRleENvb3JkQXR0cmliKCks
IDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIoc291cmNl
VmVydGljZXMpKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
QkxFTkQpOworICAgIG1fY29udGV4dDNELT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpU
UklBTkdMRV9GQU4sIDAsIDQpOworICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5kaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSk7CiB9CiAKIFBhc3NS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gQml0bWFwVGV4dHVyZUdMOjphcHBseUZpbHRlcnMoY29uc3Qg
Qml0bWFwVGV4dHVyZSYgY29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZp
bHRlcnMpCkBAIC03NjUsMTcgKzcxMywxOCBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6aW5pdGlh
bGl6ZVN0ZW5jaWwoKQogewogICAgIGlmIChtX3JibykKICAgICAgICAgcmV0dXJuOwotICAgIEdM
X0NNRChnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fcmJvKSk7Ci0gICAgR0xfQ01EKGdsQmluZFJl
bmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fcmJvKSk7CisgICAgR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAg
ICBtX3JibyA9IGNvbnRleHQzRC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAgY29udGV4dDNE
LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fcmJv
KTsKICNpZmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSAgICBHTF9DTUQoZ2xSZW5kZXJidWZmZXJT
dG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgR0xfU1RFTkNJTF9JTkRFWDgsIG1fdGV4dHVyZVNpemUu
d2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSkpOworICAgIGNvbnRleHQzRC0+cmVuZGVy
YnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6U1RFTkNJTF9JTkRFWDgsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJl
U2l6ZS5oZWlnaHQoKSk7CiAjZWxzZQotICAgIEdMX0NNRChnbFJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
R0xfUkVOREVSQlVGRkVSLCBHTF9ERVBUSF9TVEVOQ0lMLCBtX3RleHR1cmVTaXplLndpZHRoKCks
IG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKTsKKyAgICBjb250ZXh0M0QtPnJlbmRlcmJ1ZmZlclN0
b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX1NURU5DSUwsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWln
aHQoKSk7CiAjZW5kaWYKLSAgICBHTF9DTUQoZ2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJV
RkZFUiwgMCkpOwotICAgIEdMX0NNRChnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9yYm8pKTsK
LSAgICBHTF9DTUQoZ2xDbGVhclN0ZW5jaWwoMCkpOwotICAgIEdMX0NNRChnbENsZWFyKEdMX1NU
RU5DSUxfQlVGRkVSX0JJVCkpOworICAgIGNvbnRleHQzRC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKKyAgICBjb250ZXh0M0QtPmZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUiwgbV9yYm8pOworICAgIGNvbnRleHQzRC0+Y2xlYXJTdGVuY2lsKDApOworICAgIGNvbnRl
eHQzRC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCk7CiB9CiAK
IHZvaWQgQml0bWFwVGV4dHVyZUdMOjpjbGVhcklmTmVlZGVkKCkKQEAgLTc4MywxMCArNzMyLDEx
IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpjbGVhcklmTmVlZGVkKCkKICAgICBpZiAoIW1fc2hv
dWxkQ2xlYXIpCiAgICAgICAgIHJldHVybjsKIAorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CiAgICAgbV9jbGlw
U3RhY2suaW5pdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fdGV4dHVyZVNpemUpKTsKLSAg
ICBtX2NsaXBTdGFjay5hcHBseSgpOwotICAgIEdMX0NNRChnbENsZWFyQ29sb3IoMCwgMCwgMCwg
MCkpOwotICAgIEdMX0NNRChnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpKTsKKyAgICBtX2Ns
aXBTdGFjay5hcHBseShjb250ZXh0M0QpOworICAgIGNvbnRleHQzRC0+Y2xlYXJDb2xvcigwLCAw
LCAwLCAwKTsKKyAgICBjb250ZXh0M0QtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9C
VUZGRVJfQklUKTsKICAgICBtX3Nob3VsZENsZWFyID0gZmFsc2U7CiB9CiAKQEAgLTc5NSwzMyAr
NzQ1LDM2IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpjcmVhdGVGYm9JZk5lZWRlZCgpCiAgICAg
aWYgKG1fZmJvKQogICAgICAgICByZXR1cm47CiAKLSAgICBHTF9DTUQoZ2xHZW5GcmFtZWJ1ZmZl
cnMoMSwgJm1fZmJvKSk7Ci0gICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVG
RkVSLCBtX2ZibykpOwotICAgIEdMX0NNRChnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1F
QlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgaWQoKSwgMCkpOwor
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBo
aWNzQ29udGV4dDNEKCk7CisgICAgbV9mYm8gPSBjb250ZXh0M0QtPmNyZWF0ZUZyYW1lYnVmZmVy
KCk7CisgICAgY29udGV4dDNELT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBtX2Zibyk7CisgICAgY29udGV4dDNELT5mcmFtZWJ1ZmZlclRleHR1cmUyRChH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9B
VFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGlkKCksIDApOwogICAg
IG1fc2hvdWxkQ2xlYXIgPSB0cnVlOwogfQogCiB2b2lkIEJpdG1hcFRleHR1cmVHTDo6YmluZCgp
CiB7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCkpOworICAgIEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29u
dGV4dDNEKCk7CisgICAgY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgMCk7CiAgICAgY3JlYXRlRmJvSWZOZWVkZWQoKTsKLSAgICBHTF9DTUQoZ2xC
aW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKSk7Ci0gICAgR0xfQ01EKGdsVmll
d3BvcnQoMCwgMCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgp
KSk7CisgICAgY29udGV4dDNELT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBtX2Zibyk7CisgICAgY29udGV4dDNELT52aWV3cG9ydCgwLCAwLCBtX3RleHR1
cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpOwogICAgIGNsZWFySWZOZWVk
ZWQoKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmRhdGEoKS5wcm9qZWN0aW9uTWF0cml4ID0gY3Jl
YXRlUHJvamVjdGlvbk1hdHJpeChtX3RleHR1cmVTaXplLCB0cnVlIC8qIG1pcnJvcmVkICovKTsK
LSAgICBtX2NsaXBTdGFjay5hcHBseSgpOworICAgIG1fY2xpcFN0YWNrLmFwcGx5KGNvbnRleHQz
RCk7CiB9CiAKIEJpdG1hcFRleHR1cmVHTDo6fkJpdG1hcFRleHR1cmVHTCgpCiB7CisgICAgR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250
ZXh0M0QoKTsKICAgICBpZiAobV9pZCkKLSAgICAgICAgR0xfQ01EKGdsRGVsZXRlVGV4dHVyZXMo
MSwgJm1faWQpKTsKKyAgICAgICAgY29udGV4dDNELT5kZWxldGVUZXh0dXJlKG1faWQpOwogCiAg
ICAgaWYgKG1fZmJvKQotICAgICAgICBHTF9DTUQoZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1f
ZmJvKSk7CisgICAgICAgIGNvbnRleHQzRC0+ZGVsZXRlRnJhbWVidWZmZXIobV9mYm8pOwogCiAg
ICAgaWYgKG1fcmJvKQotICAgICAgICBHTF9DTUQoZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZt
X3JibykpOworICAgICAgICBjb250ZXh0M0QtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX3Jibyk7CiB9
CiAKIGJvb2wgQml0bWFwVGV4dHVyZUdMOjppc1ZhbGlkKCkgY29uc3QKQEAgLTg0MSwxMSArNzk0
LDExIEBAIFRleHR1cmVNYXBwZXJHTDo6flRleHR1cmVNYXBwZXJHTCgpCiAKIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpiaW5kRGVmYXVsdFN1cmZhY2UoKQogewotICAgIEdMX0NNRChnbEJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKSk7CisgICAg
bV9jb250ZXh0M0QtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIGRhdGEoKS50YXJnZXRGcmFtZUJ1ZmZlcik7CiAgICAgSW50U2l6ZSB2aWV3cG9ydFNpemUo
ZGF0YSgpLnZpZXdwb3J0WzJdLCBkYXRhKCkudmlld3BvcnRbM10pOwogICAgIGRhdGEoKS5wcm9q
ZWN0aW9uTWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeCh2aWV3cG9ydFNpemUsIGRhdGEo
KS5QYWludEZsYWdzICYgUGFpbnRpbmdNaXJyb3JlZCk7Ci0gICAgR0xfQ01EKGdsVmlld3BvcnQo
ZGF0YSgpLnZpZXdwb3J0WzBdLCBkYXRhKCkudmlld3BvcnRbMV0sIHZpZXdwb3J0U2l6ZS53aWR0
aCgpLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpKTsKLSAgICBtX2NsaXBTdGFjay5hcHBseSgpOwor
ICAgIG1fY29udGV4dDNELT52aWV3cG9ydChkYXRhKCkudmlld3BvcnRbMF0sIGRhdGEoKS52aWV3
cG9ydFsxXSwgdmlld3BvcnRTaXplLndpZHRoKCksIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSk7Cisg
ICAgbV9jbGlwU3RhY2suYXBwbHkobV9jb250ZXh0M0QuZ2V0KCkpOwogICAgIGRhdGEoKS5jdXJy
ZW50U3VyZmFjZS5jbGVhcigpOwogfQogCkBAIC04NzUsNyArODI4LDcgQEAgYm9vbCBUZXh0dXJl
TWFwcGVyR0w6OmJlZ2luU2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1v
ZGVsVmlld01hdHIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY2xpcFN0YWNrKCkuY3Vy
cmVudCgpLnNjaXNzb3JCb3guaW50ZXJzZWN0KHJlY3QpOwotICAgIGNsaXBTdGFjaygpLmFwcGx5
KCk7CisgICAgY2xpcFN0YWNrKCkuYXBwbHkobV9jb250ZXh0M0QuZ2V0KCkpOwogICAgIHJldHVy
biB0cnVlOwogfQogCkBAIC04ODksMTAgKzg0MiwxMCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6
YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNv
bgogCiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0
YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclBy
b2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNpbXBsZSk7CiAKLSAgICBHTF9DTUQo
Z2xVc2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpKTsKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIGNvbnN0IEdMZmxvYXQg
dW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKLSAgICBHTF9DTUQoZ2xWZXJ0
ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBHTF9GTE9BVCwgR0xf
RkFMU0UsIDAsIHVuaXRSZWN0KSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3Jh
bS0+aWQoKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dy
YW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBjb25zdCBHQzNEZmxvYXQgdW5pdFJlY3RbXSA9IHsw
LCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKKyAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9p
bnRlcihwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FU
LCBmYWxzZSwgMCwgR0MzRGludHB0cih1bml0UmVjdCkpOwogCiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRy
aXgpCiAgICAgICAgICAgICAubXVsdGlwbHkobW9kZWxWaWV3TWF0cml4KQpAQCAtOTAxLDE0ICs4
NTQsMTQgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb24KICAgICAgICAgICAgICAgICAwLCAwLCAx
LCAwLAogICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgMCwg
MSkpOwogCi0gICAgY29uc3QgR0xmbG9hdCBtNFtdID0geworICAgIGNvbnN0IEdDM0RmbG9hdCBt
NFtdID0gewogICAgICAgICBtYXRyaXgubTExKCksIG1hdHJpeC5tMTIoKSwgbWF0cml4Lm0xMygp
LCBtYXRyaXgubTE0KCksCiAgICAgICAgIG1hdHJpeC5tMjEoKSwgbWF0cml4Lm0yMigpLCBtYXRy
aXgubTIzKCksIG1hdHJpeC5tMjQoKSwKICAgICAgICAgbWF0cml4Lm0zMSgpLCBtYXRyaXgubTMy
KCksIG1hdHJpeC5tMzMoKSwgbWF0cml4Lm0zNCgpLAogICAgICAgICBtYXRyaXgubTQxKCksIG1h
dHJpeC5tNDIoKSwgbWF0cml4Lm00MygpLCBtYXRyaXgubTQ0KCkKICAgICB9OwogCi0gICAgY29u
c3QgR0xmbG9hdCBtNGFsbFtdID0geworICAgIGNvbnN0IEdDM0RmbG9hdCBtNGFsbFtdID0gewog
ICAgICAgICAyLCAwLCAwLCAwLAogICAgICAgICAwLCAyLCAwLCAwLAogICAgICAgICAwLCAwLCAx
LCAwLApAQCAtOTE3LDQzICs4NzAsNDIgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xp
cChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb24KIAogICAg
IGludCYgc3RlbmNpbEluZGV4ID0gY2xpcFN0YWNrKCkuY3VycmVudCgpLnN0ZW5jaWxJbmRleDsK
IAotICAgIEdMX0NNRChnbEVuYWJsZShHTF9TVEVOQ0lMX1RFU1QpKTsKKyAgICBtX2NvbnRleHQz
RC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpOwogCiAgICAgLy8gTWFr
ZSBzdXJlIHdlIGRvbid0IGRvIGFueSBhY3R1YWwgZHJhd2luZy4KLSAgICBHTF9DTUQoZ2xTdGVu
Y2lsRnVuYyhHTF9ORVZFUiwgc3RlbmNpbEluZGV4LCBzdGVuY2lsSW5kZXgpKTsKKyAgICBtX2Nv
bnRleHQzRC0+c3RlbmNpbEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok5FVkVSLCBzdGVuY2lsSW5k
ZXgsIHN0ZW5jaWxJbmRleCk7CiAKICAgICAvLyBPcGVyYXRlIG9ubHkgb24gdGhlIHN0ZW5jaWxJ
bmRleCBhbmQgYWJvdmUuCi0gICAgR0xfQ01EKGdsU3RlbmNpbE1hc2soMHhmZiAmIH4oc3RlbmNp
bEluZGV4IC0gMSkpKTsKKyAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE1hc2soMHhmZiAmIH4oc3Rl
bmNpbEluZGV4IC0gMSkpOwogCiAgICAgLy8gRmlyc3QgY2xlYXIgdGhlIGVudGlyZSBidWZmZXIg
YXQgdGhlIGN1cnJlbnQgaW5kZXguCi0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9n
cmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBHTF9GQUxTRSwgbTRhbGwpKTsKLSAgICBHTF9DTUQo
Z2xTdGVuY2lsT3AoR0xfWkVSTywgR0xfWkVSTywgR0xfWkVSTykpOwotICAgIEdMX0NNRChnbERy
YXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZv
cm1NYXRyaXg0ZnYocHJvZ3JhbS0+bWF0cml4TG9jYXRpb24oKSwgMSwgZmFsc2UsIGNvbnN0X2Nh
c3Q8R0MzRGZsb2F0Kj4obTRhbGwpKTsKKyAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE9wKEdyYXBo
aWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250
ZXh0M0Q6OlpFUk8pOworICAgIG1fY29udGV4dDNELT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4
dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQpOwogCiAgICAgLy8gTm93IGFwcGx5IHRoZSBjdXJyZW50
IGluZGV4IHRvIHRoZSBuZXcgcXVhZC4KLSAgICBHTF9DTUQoZ2xTdGVuY2lsT3AoR0xfUkVQTEFD
RSwgR0xfUkVQTEFDRSwgR0xfUkVQTEFDRSkpOwotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0
ZnYocHJvZ3JhbS0+bWF0cml4TG9jYXRpb24oKSwgMSwgR0xfRkFMU0UsIG00KSk7Ci0gICAgR0xf
Q01EKGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpKTsKKyAgICBtX2NvbnRleHQz
RC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpSRVBMQUNFLCBHcmFwaGljc0NvbnRleHQz
RDo6UkVQTEFDRSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFUExBQ0UpOworICAgIG1fY29udGV4dDNE
LT51bmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIGZhbHNlLCBj
b25zdF9jYXN0PEdDM0RmbG9hdCo+KG00KSk7CisgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMo
R3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7CiAKICAgICAvLyBDbGVhciB0
aGUgc3RhdGUuCi0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0t
PnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsU3RlbmNpbE1hc2soMCkpOworICAgIG1f
Y29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmli
KCkpOworICAgIG1fY29udGV4dDNELT5zdGVuY2lsTWFzaygwKTsKIAogICAgIC8vIEluY3JlYXNl
IHN0ZW5jaWxJbmRleCBhbmQgYXBwbHkgc3RlbmNpbCB0ZXN0aW5nLgogICAgIHN0ZW5jaWxJbmRl
eCAqPSAyOwotICAgIGNsaXBTdGFjaygpLmFwcGx5KCk7CisgICAgY2xpcFN0YWNrKCkuYXBwbHko
bV9jb250ZXh0M0QuZ2V0KCkpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZW5kQ2xpcCgp
CiB7CiAgICAgY2xpcFN0YWNrKCkucG9wKCk7Ci0gICAgY2xpcFN0YWNrKCkuYXBwbHkoKTsKKyAg
ICBjbGlwU3RhY2soKS5hcHBseShtX2NvbnRleHQzRC5nZXQoKSk7CiB9CiAKIFBhc3NSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJlKCkKIHsKLSAgICBC
aXRtYXBUZXh0dXJlR0wqIHRleHR1cmUgPSBuZXcgQml0bWFwVGV4dHVyZUdMKCk7Ci0gICAgdGV4
dHVyZS0+c2V0VGV4dHVyZU1hcHBlcih0aGlzKTsKKyAgICBCaXRtYXBUZXh0dXJlR0wqIHRleHR1
cmUgPSBuZXcgQml0bWFwVGV4dHVyZUdMKHRoaXMpOwogICAgIHJldHVybiBhZG9wdFJlZih0ZXh0
dXJlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCmluZGV4IDA3NmU2NWY3Mzc3NjI2MWYwYTNiOTNi
Yjg1NzNhNTA1ZGU5YzAxNzAuLjhhNzJkNjdhZjllZWQyY2Q2YjkwZWU4MWE4NWM4MmE5ODA4ZWQ5
ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKQEAgLTIzLDggKzIzLDggQEAKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJPcGVu
R0xTaGltcy5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgogCkBAIC0zOCw3ICszOCw2IEBAIGNsYXNzIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOwogY2xhc3MgVGV4dHVyZU1hcHBlckdMIDogcHVibGljIFRleHR1cmVNYXBw
ZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXJHTD4gY3Jl
YXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJHTCk7IH0KLSAgICBUZXh0
dXJlTWFwcGVyR0woKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyR0woKTsKIAogICAgIGVu
dW0gRmxhZyB7CkBAIC01NCw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZHJh
d1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSog
bWFza1RleHR1cmUsIHVuc2lnbmVkIGV4cG9zZWRFZGdlcykgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCB2b2lkIGRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXpl
JiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRt
YXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzID0gQWxsRWRnZXMp
OwogCi0jaWYgZGVmaW5lZChHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUpCisjaWYgIVVTRShURVhN
QVBfT1BFTkdMX0VTXzIpCiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJC
KHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9k
ZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4
dHVyZSk7CiAjZW5kaWYKIApAQCAtNjYsNiArNjUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJ
bnRTaXplIG1heFRleHR1cmVTaXplKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gSW50U2l6ZSgy
MDAwLCAyMDAwKTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVh
dGVUZXh0dXJlKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQqIGdyYXBo
aWNzQ29udGV4dCgpIE9WRVJSSURFIHsgcmV0dXJuIG1fY29udGV4dDsgfQorICAgIGlubGluZSBH
cmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRleHQzRC5nZXQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0KSBPVkVSUklERSB7IG1fY29udGV4dCA9IGNvbnRleHQ7IH0K
IAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTc1LDcgKzc1LDYgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0RW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nKGJvb2wgZW5hYmxlZCkgeyBt
X2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyA9IGVuYWJsZWQ7IH0KIAogcHJpdmF0ZToK
LQogICAgIHN0cnVjdCBDbGlwU3RhdGUgewogICAgICAgICBJbnRSZWN0IHNjaXNzb3JCb3g7CiAg
ICAgICAgIGludCBzdGVuY2lsSW5kZXg7CkBAIC04OSw3ICs4OCw3IEBAIHByaXZhdGU6CiAgICAg
cHVibGljOgogICAgICAgICB2b2lkIHB1c2goKTsKICAgICAgICAgdm9pZCBwb3AoKTsKLSAgICAg
ICAgdm9pZCBhcHBseSgpOworICAgICAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dDNEKik7
CiAgICAgICAgIGlubGluZSBDbGlwU3RhdGUmIGN1cnJlbnQoKSB7IHJldHVybiBjbGlwU3RhdGU7
IH0KICAgICAgICAgdm9pZCBpbml0KGNvbnN0IEludFJlY3QmKTsKIApAQCAtMTA5LDE2ICsxMDgs
MTkgQEAgcHJpdmF0ZToKICAgICAgICAgRmxvYXRRdWFkIHRhcmdldFJlY3RNYXBwZWRUb1VuaXRT
cXVhcmU7CiAgICAgfTsKIAorICAgIFRleHR1cmVNYXBwZXJHTCgpOworCiAgICAgYm9vbCBkcmF3
VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MsIGNvbnN0IEZs
b2F0UmVjdCYgb3JpZ2luYWxUYXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNr
VGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKTsKICAgICB2b2lkIGRyYXdUZXh0dXJlZFF1
YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIHVpbnQzMl90IHRleHR1
cmUsIEZsYWdzLCBjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
b2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tU
ZXh0dXJlKTsKLSAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0qLCBHTGVudW0gZHJhd2luZ01vZGUsIGJvb2wgbmVlZHNCbGVuZGluZyk7CisgICAgdm9pZCBk
cmF3UXVhZChjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2Rl
bFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiwgR0MzRGVudW0gZHJhd2lu
Z01vZGUsIGJvb2wgbmVlZHNCbGVuZGluZyk7CiAKICAgICBib29sIGJlZ2luU2Npc3NvckNsaXAo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lk
IGJpbmREZWZhdWx0U3VyZmFjZSgpOwogICAgIENsaXBTdGFjayYgY2xpcFN0YWNrKCk7CiAgICAg
aW5saW5lIFRleHR1cmVNYXBwZXJHTERhdGEmIGRhdGEoKSB7IHJldHVybiAqbV9kYXRhOyB9Ci0g
ICAgVGV4dHVyZU1hcHBlckdMRGF0YSogbV9kYXRhOwogICAgIEdyYXBoaWNzQ29udGV4dCogbV9j
b250ZXh0OworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0M0Q7CisgICAg
VGV4dHVyZU1hcHBlckdMRGF0YSogbV9kYXRhOwogICAgIENsaXBTdGFjayBtX2NsaXBTdGFjazsK
ICAgICBib29sIG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nOwogCkBAIC0xMzUsNyAr
MTM3LDcgQEAgcHVibGljOgogICAgIHZvaWQgaW5pdGlhbGl6ZVN0ZW5jaWwoKTsKICAgICB+Qml0
bWFwVGV4dHVyZUdMKCk7CiAgICAgdmlydHVhbCB1aW50MzJfdCBpZCgpIGNvbnN0IHsgcmV0dXJu
IG1faWQ7IH0KLSAgICB1aW50MzJfdCB0ZXh0dXJlVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gR0xf
VEVYVFVSRV8yRDsgfQorICAgIHVpbnQzMl90IHRleHR1cmVUYXJnZXQoKSBjb25zdCB7IHJldHVy
biBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDsgfQogICAgIEludFNpemUgdGV4dHVyZVNp
emUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVTaXplOyB9CiAgICAgdm9pZCBzZXRUZXh0dXJl
TWFwcGVyKFRleHR1cmVNYXBwZXJHTCogdGV4bWFwKSB7IG1fdGV4dHVyZU1hcHBlciA9IHRleG1h
cDsgfQogICAgIHZvaWQgdXBkYXRlQ29udGVudHMoSW1hZ2UqLCBjb25zdCBJbnRSZWN0JiwgY29u
c3QgSW50UG9pbnQmKTsKQEAgLTE0NywyMCArMTQ5LDIyIEBAIHB1YmxpYzoKICNlbmRpZgogCiBw
cml2YXRlOgotICAgIEdMdWludCBtX2lkOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9pZDsKICAg
ICBJbnRTaXplIG1fdGV4dHVyZVNpemU7CiAgICAgSW50UmVjdCBtX2RpcnR5UmVjdDsKLSAgICBH
THVpbnQgbV9mYm87Ci0gICAgR0x1aW50IG1fcmJvOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9m
Ym87CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3JibzsKICAgICBib29sIG1fc2hvdWxkQ2xlYXI7
Ci0gICAgVGV4dHVyZU1hcHBlckdMKiBtX3RleHR1cmVNYXBwZXI7CiAgICAgVGV4dHVyZU1hcHBl
ckdMOjpDbGlwU3RhY2sgbV9jbGlwU3RhY2s7Ci0gICAgQml0bWFwVGV4dHVyZUdMKCkKKyAgICBU
ZXh0dXJlTWFwcGVyR0wqIG1fdGV4dHVyZU1hcHBlcjsKKworICAgIEJpdG1hcFRleHR1cmVHTCgp
OworICAgIEJpdG1hcFRleHR1cmVHTChUZXh0dXJlTWFwcGVyR0wqIHRleHR1cmVNYXBwZXIpCiAg
ICAgICAgIDogbV9pZCgwKQogICAgICAgICAsIG1fZmJvKDApCiAgICAgICAgICwgbV9yYm8oMCkK
ICAgICAgICAgLCBtX3Nob3VsZENsZWFyKHRydWUpCi0gICAgICAgICwgbV90ZXh0dXJlTWFwcGVy
KDApCisgICAgICAgICwgbV90ZXh0dXJlTWFwcGVyKHRleHR1cmVNYXBwZXIpCiAgICAgewogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKaW5kZXggMGZi
ZGJlOTVjYWYxNjQ3MGRkMDYzMmYwNGMxNDRiODIwYjZlOGJiMy4uZmE4YWMwNTMyM2U1ZGYyOGYz
MTkzZmU2ZWFkZmQyNjU1YzY4NzU1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuY3BwCkBAIC0zMCwyNSArMzAsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0jaWZuZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgotI2RlZmluZSBPRVMyX1BSRUNJU0lPTl9ERUZJ
TklUSU9OUyBcCi0gICAgIiNkZWZpbmUgbG93cFxuI2RlZmluZSBoaWdocFxuIgotI2RlZmluZSBP
RVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTgotI2Vsc2UKLSNkZWZpbmUgT0VT
Ml9QUkVDSVNJT05fREVGSU5JVElPTlMKLSNkZWZpbmUgT0VTMl9GUkFHTUVOVF9TSEFERVJfREVG
QVVMVF9QUkVDSVNJT04gXAotICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgXG4iCi0jZW5k
aWYKLQotI2RlZmluZSBTVFJJTkdJRllfVkFMKHNyYy4uLikgI3NyYwotI2RlZmluZSBWRVJURVhf
U0hBREVSKHNyYy4uLikgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlNcCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTVFJJTkdJRllfVkFMKHNyYykKLSNkZWZpbmUgRlJBR01FTlRfU0hB
REVSKHNyYy4uLikgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlNcCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFVTFRfUFJFQ0lTSU9OXAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJJTkdJRllfVkFMKHNyYykKKyNkZWZp
bmUgU1RSSU5HSUZZKHNyYy4uLikgI3NyYwogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRT
aGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9Ci0gICAgRlJBR01FTlRfU0hBREVSKAorICAgIFNU
UklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgIHVuaWZv
cm0gc2FtcGxlcjJEIHNfc291cmNlOwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX21hc2s7
CiAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CkBAIC02NCw3ICs1MCw4IEBA
IHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrID0K
ICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0T3Bh
Y2l0eUFuZE1hc2sgPQotICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCisgICAg
ICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRFJl
Y3Qgc19zb3VyY2U7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX21hc2s7CiAgICAg
ICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CkBAIC04MCw3ICs2Nyw3IEBAIHN0YXRp
YyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5QW5kTWFzayA9CiAg
ICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRN
YXNrID0KLSAgICBWRVJURVhfU0hBREVSKAorICAgIFNUUklOR0lGWSgKICAgICAgICAgdW5pZm9y
bSBtYXQ0IHVfbWF0cml4OwogICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9mbGlwOwogICAg
ICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKQEAgLTk1LDcgKzgyLDggQEAgc3RhdGljIGNv
bnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrID0KICAgICApOwogCiBz
dGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUgPQotICAgIEZSQUdN
RU5UX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NvdXJjZTsKICAgICAgICAgdW5pZm9y
bSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291
cmNlVGV4Q29vcmQ7CkBAIC0xMDcsNyArOTUsOCBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21l
bnRTaGFkZXJTb3VyY2VTaW1wbGUgPQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFn
bWVudFNoYWRlclNvdXJjZUFudGlhbGlhc2luZ05vTWFzayA9Ci0gICAgRlJBR01FTlRfU0hBREVS
KAorICAgIFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAg
ICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwogICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZl
YzIgdl9zb3VyY2VUZXhDb29yZDsKICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0
eTsKQEAgLTE0NSw3ICsxMzQsOCBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJT
b3VyY2VBbnRpYWxpYXNpbmdOb01hc2sgPQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBm
cmFnbWVudFNoYWRlclNvdXJjZVJlY3RTaW1wbGUgPQotICAgIEZSQUdNRU5UX1NIQURFUigKKyAg
ICBTVFJJTkdJRlkoCisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1
bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc19zb3VyY2U7CiAgICAgICAgIHVuaWZvcm0gbG93cCB2ZWMy
IHVfdGV4dHVyZVNpemU7CiAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CkBA
IC0xNTgsNyArMTQ4LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNl
UmVjdFNpbXBsZSA9CiAgICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNv
dXJjZVNpbXBsZSA9Ci0gICAgVkVSVEVYX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCiAgICAgICAg
IHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfZmxp
cDsKICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CkBAIC0xNzEsNyArMTYxLDcgQEAg
c3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSA9CiAgICAgKTsKIAog
c3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNvbGlkQ29sb3IgPQotICAgIFZF
UlRFWF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAogICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRy
aXg7CiAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwogICAgICAgICB2b2lkIG1haW4o
dm9pZCkKQEAgLTE4Miw3ICsxNzIsOCBAQCBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVy
U291cmNlU29saWRDb2xvciA9CiAKIAogc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVy
U291cmNlU29saWRDb2xvciA9Ci0gICAgVkVSVEVYX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCisg
ICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1bmlmb3JtIHZlYzQgdV9j
b2xvcjsKICAgICAgICAgdm9pZCBtYWluKHZvaWQpCiAgICAgICAgIHsKQEAgLTIxMiwyMiArMjAz
LDIyIEBAIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9nCiAKICAgICBzd2l0Y2ggKHNoYWRlclR5cGUp
IHsKICAgICBjYXNlIFNpbXBsZToKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU2ltcGxlOjpjcmVhdGUoKTsKKyAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpjcmVhdGUobV9jb250ZXh0KTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBSZWN0U2ltcGxlOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1SZWN0U2ltcGxlOjpjcmVhdGUoKTsKKyAgICAgICAgcHJvZ3JhbSA9IFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQW50aWFsaWFzaW5nTm9NYXNrOgotICAgICAgICBwcm9ncmFt
ID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OmNyZWF0ZSgp
OworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNp
bmdOb01hc2s6OmNyZWF0ZShtX2NvbnRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE9w
YWNpdHlBbmRNYXNrOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpjcmVhdGUobV9jb250ZXh0KTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBSZWN0T3BhY2l0eUFuZE1hc2s6Ci0gICAgICAgIHByb2dyYW0g
PSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6Y3JlYXRlKCk7
CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5
QW5kTWFzazo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU29s
aWRDb2xvcjoKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29s
aWRDb2xvcjo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNvbGlkQ29sb3I6OmNyZWF0ZShtX2NvbnRleHQpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEludmFsaWQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjM2LDgg
KzIyNyw5IEBAIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9nCiAgICAgcmV0dXJuIHByb2dyYW07CiB9
CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bShjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hh
ZGVyU291cmNlKQotICAgIDogbV9pZCgwKQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25z
dCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291
cmNlKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX2lkKDApCiAgICAgLCBtX3Zl
cnRleEF0dHJpYigwKQogICAgICwgbV92ZXJ0ZXhTaGFkZXIoMCkKICAgICAsIG1fZnJhZ21lbnRT
aGFkZXIoMCkKQEAgLTI1Niw0NiArMjQ4LDQ2IEBAIHZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW06OmluaXRpYWxpemVQcm9ncmFtKCkKIHsKICAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFk
ZXJTb3VyY2VQcm9ncmFtID0gdmVydGV4U2hhZGVyU291cmNlKCk7CiAgICAgY29uc3QgY2hhciog
ZnJhZ21lbnRTaGFkZXJTb3VyY2VQcm9ncmFtID0gZnJhZ21lbnRTaGFkZXJTb3VyY2UoKTsKLSAg
ICBHTHVpbnQgdmVydGV4U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7
Ci0gICAgR0x1aW50IGZyYWdtZW50U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRf
U0hBREVSKTsKLSAgICBnbFNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFk
ZXJTb3VyY2VQcm9ncmFtLCAwKTsKLSAgICBnbFNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwg
MSwgJmZyYWdtZW50U2hhZGVyU291cmNlUHJvZ3JhbSwgMCk7Ci0gICAgR0x1aW50IHByb2dyYW1J
RCA9IGdsQ3JlYXRlUHJvZ3JhbSgpOwotICAgIGdsQ29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIp
OwotICAgIGdsQ29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CisgICAgUGxhdGZvcm0zRE9i
amVjdCB2ZXJ0ZXhTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRl
eHQzRDo6VkVSVEVYX1NIQURFUik7CisgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNoYWRl
ciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9T
SEFERVIpOworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4
U2hhZGVyU291cmNlUHJvZ3JhbSk7CisgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UoZnJhZ21l
bnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyU291cmNlUHJvZ3JhbSk7CisgICAgUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtSUQgPSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKKyAgICBtX2NvbnRl
eHQtPmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmNvbXBpbGVT
aGFkZXIoZnJhZ21lbnRTaGFkZXIpOwogCi0gICAgZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2
ZXJ0ZXhTaGFkZXIpOwotICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRTaGFk
ZXIpOwotICAgIGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlEKTsKKyAgICBtX2NvbnRleHQtPmF0dGFj
aFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5hdHRhY2hT
aGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5saW5rUHJv
Z3JhbShwcm9ncmFtSUQpOwogCi0gICAgbV92ZXJ0ZXhBdHRyaWIgPSBnbEdldEF0dHJpYkxvY2F0
aW9uKHByb2dyYW1JRCwgImFfdmVydGV4Iik7CisgICAgbV92ZXJ0ZXhBdHRyaWIgPSBtX2NvbnRl
eHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdmVydGV4Iik7CiAKICAgICBtX2lk
ID0gcHJvZ3JhbUlEOwogICAgIG1fdmVydGV4U2hhZGVyID0gdmVydGV4U2hhZGVyOwogICAgIG1f
ZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNoYWRlcjsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKEdMaW50ICZ2YXJpYWJsZSwgY29uc3Qg
Y2hhciogbmFtZSkKK3ZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldFVuaWZvcm1M
b2NhdGlvbihHQzNEaW50ICZ2YXJpYWJsZSwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICB2YXJp
YWJsZSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1faWQsIG5hbWUpOworICAgIHZhcmlhYmxlID0g
bV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9pZCwgbmFtZSk7CiAgICAgQVNTRVJUKHZh
cmlhYmxlID49IDApOwogfQogCiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKCkKIHsKLSAgICBHTHVpbnQgcHJvZ3JhbUlEID0gbV9pZDsKKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCA9IG1faWQ7CiAgICAgaWYgKCFwcm9ncmFtSUQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGdsRGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV92ZXJ0
ZXhTaGFkZXIpOwotICAgIGdsRGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKLSAgICBnbERl
dGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsRGVsZXRlU2hh
ZGVyKG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwor
ICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV92ZXJ0ZXhTaGFkZXIpOwor
ICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRl
eHQtPmRldGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29u
dGV4dC0+ZGVsZXRlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGVs
ZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNp
bXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKQotICAgIDogVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRl
clNvdXJjZVNpbXBsZSkKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAg
ICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJj
ZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUpCiB7CiAgICAgaW5pdGlhbGl6ZVBy
b2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9mbGlwTG9jYXRpb24sICJ1X2ZsaXAi
KTsKQEAgLTMwNCwxNiArMjk2LDE2IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxl
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpCiAgICAgZ2V0VW5pZm9ybUxvY2F0
aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7CiB9CiAKLVRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENv
bG9yKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJj
ZVNvbGlkQ29sb3IsIGZyYWdtZW50U2hhZGVyU291cmNlU29saWRDb2xvcikKK1RleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xp
ZENvbG9yKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDogVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlU29saWRDb2xvciwgZnJhZ21l
bnRTaGFkZXJTb3VyY2VTb2xpZENvbG9yKQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAg
ICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwogICAg
IGdldFVuaWZvcm1Mb2NhdGlvbihtX2NvbG9yTG9jYXRpb24sICJ1X2NvbG9yIik7CiB9CiAKLVRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1SZWN0U2ltcGxlKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRl
eFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0U2ltcGxlKQorVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVJlY3RTaW1wbGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZy
YWdtZW50U2hhZGVyU291cmNlUmVjdFNpbXBsZSkKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgp
OwogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsK
QEAgLTMyMyw4ICszMTUsOCBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgpCiAgICAgZ2V0VW5pZm9ybUxv
Y2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7CiB9CiAKLVRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
T3BhY2l0eUFuZE1hc2soKQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odmVydGV4
U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0eUFu
ZE1hc2spCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hh
ZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0eUFuZE1h
c2spCiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24o
bV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7CkBAIC0zMzQsOCArMzI2LDggQEAgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1PcGFjaXR5QW5kTWEKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRp
b24sICJ1X29wYWNpdHkiKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3Bh
Y2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNr
KCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZU9w
YWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5QW5kTWFzaykKK1Rl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayhHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKKyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRl
clNvdXJjZU9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5QW5k
TWFzaykKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVuaWZvcm1Mb2NhdGlv
bihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKQEAgLTM0NSw4ICszMzcsOCBAQCBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1SZWN0T3BhYwogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlMb2Nh
dGlvbiwgInVfb3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlh
bGlhc2luZ05vTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01h
c2soKQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNl
U2ltcGxlLCBmcmFnbWVudFNoYWRlclNvdXJjZUFudGlhbGlhc2luZ05vTWFzaykKK1RleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAg
ICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJj
ZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNpbmdOb01hc2spCiB7CiAgICAg
aW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2Nh
dGlvbiwgInVfbWF0cml4Iik7CkBAIC0zNTYsOSArMzQ4LDkgQEAgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50
aWFsaWEKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9mbGlwTG9jYXRpb24sICJ1X2ZsaXAiKTsK
IH0KIAotVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyKCkKK1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0
KQogewotICAgIEFTU0VSVChpbml0aWFsaXplT3BlbkdMU2hpbXMoKSk7CiB9CiAKIFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKQpAQCAtMzcz
LDE4ICszNjUsMTkgQEAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6On5UZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcigpCiAKIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6flN0YW5kYXJkRmlsdGVy
UHJvZ3JhbSgpCiB7Ci0gICAgZ2xEZXRhY2hTaGFkZXIobV9pZCwgbV92ZXJ0ZXhTaGFkZXIpOwot
ICAgIGdsRGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKLSAgICBnbERldGFjaFNoYWRlciht
X2lkLCBtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hh
ZGVyKTsKLSAgICBnbERlbGV0ZVByb2dyYW0obV9pZCk7CisgICAgbV9jb250ZXh0LT5kZXRhY2hT
aGFkZXIobV9pZCwgbV92ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVy
KG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihtX2lkLCBtX2Zy
YWdtZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hh
ZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV9pZCk7CiB9CiAKLVN0YW5kYXJk
RmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3Bl
cmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQotICAgIDogbV9pZCgwKQorU3RhbmRhcmRG
aWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNz
KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX2lkKDApCiB7CiAgICAgY29uc3Qg
Y2hhciogdmVydGV4U2hhZGVyU291cmNlID0KLSAgICAgICAgICAgIFZFUlRFWF9TSEFERVIoCisg
ICAgICAgICAgICBTVFJJTkdJRlkoCiAgICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92
ZXJ0ZXg7CiAgICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV90ZXhDb29yZDsKICAgICAg
ICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKQEAgLTM5Niw4ICszODks
NyBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJP
cGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICAgICAgKTsKIAogI2RlZmluZSBT
VEFOREFSRF9GSUxURVIoeC4uLikgXAotICAgICAgICBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9O
U1wKLSAgICAgICAgT0VTMl9GUkFHTUVOVF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT05cCisgICAg
ICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiJcCiAgICAgICAgICJ2YXJ5aW5nIGhpZ2hw
IHZlYzIgdl90ZXhDb29yZDtcbiJcCiAgICAgICAgICJ1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYW1v
dW50O1xuIlwKICAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbiJcCkBAIC00
OTAsNyArNDgyLDggQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dy
YW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6Ci0gICAgICAgIGZyYWdt
ZW50U2hhZGVyU291cmNlID0gRlJBR01FTlRfU0hBREVSKAorICAgICAgICBmcmFnbWVudFNoYWRl
clNvdXJjZSA9IFNUUklOR0lGWSgKKyAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0
OwogICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7CiAgICAgICAgICAg
ICB1bmlmb3JtIGxvd3AgdmVjMiB1X2JsdXJSYWRpdXM7CiAgICAgICAgICAgICB1bmlmb3JtIHNh
bXBsZXIyRCB1X3RleHR1cmU7CkBAIC01MjMsNyArNTE2LDggQEAgU3RhbmRhcmRGaWx0ZXJQcm9n
cmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBl
IHR5cGUKICAgICAgICAgc3dpdGNoIChwYXNzKSB7CiAgICAgICAgIGNhc2UgMDogewogICAgICAg
ICAgICAgLy8gRmlyc3QgcGFzczogaG9yaXpvbnRhbCBhbHBoYSBibHVyLgotICAgICAgICAgICAg
ZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBGUkFHTUVOVF9TSEFERVIoCisgICAgICAgICAgICBmcmFn
bWVudFNoYWRlclNvdXJjZSA9IFNUUklOR0lGWSgKKyAgICAgICAgICAgICAgICBwcmVjaXNpb24g
bWVkaXVtcCBmbG9hdDsKICAgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhD
b29yZDsKICAgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9zaGFkb3dCbHVyUmFk
aXVzOwogICAgICAgICAgICAgICAgIHVuaWZvcm0gbG93cCB2ZWMyIHVfc2hhZG93T2Zmc2V0OwpA
QCAtNTU2LDcgKzU1MCw4IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQ
cm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgICAgICB9
CiAgICAgICAgIGNhc2UgMTogewogICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHZlcnRpY2Fs
IGFscGhhIGJsdXIgYW5kIGNvbXBvc2l0ZSB3aXRoIG9yaWdpbi4KLSAgICAgICAgICAgIGZyYWdt
ZW50U2hhZGVyU291cmNlID0gRlJBR01FTlRfU0hBREVSKAorICAgICAgICAgICAgZnJhZ21lbnRT
aGFkZXJTb3VyY2UgPSBTVFJJTkdJRlkoCisgICAgICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1
bXAgZmxvYXQ7CiAgICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7
CiAgICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfc2hhZG93Qmx1clJhZGl1czsK
ICAgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjNCB1X3NoYWRvd0NvbG9yOwpAQCAtNjAy
LDI2ICs1OTcsMjUgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dy
YW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKIAogICAgIGlmICghZnJhZ21l
bnRTaGFkZXJTb3VyY2UpCiAgICAgICAgIHJldHVybjsKLSAgICBHTHVpbnQgdmVydGV4U2hhZGVy
ID0gZ2xDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7Ci0gICAgR0x1aW50IGZyYWdtZW50
U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKLSAgICBnbFNoYWRl
clNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsIDApOwotICAgIGds
U2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCAxLCAmZnJhZ21lbnRTaGFkZXJTb3VyY2UsIDAp
OwotICAgIEdMdWludCBwcm9ncmFtSUQgPSBnbENyZWF0ZVByb2dyYW0oKTsKLSAgICBnbENvbXBp
bGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBnbENvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFk
ZXIpOworICAgIFBsYXRmb3JtM0RPYmplY3QgdmVydGV4U2hhZGVyID0gbV9jb250ZXh0LT5jcmVh
dGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpOworICAgIFBsYXRmb3Jt
M0RPYmplY3QgZnJhZ21lbnRTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKTsKKyAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJj
ZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNoYWRlclNvdXJjZSk7CisgICAgbV9jb250ZXh0LT5zaGFk
ZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyU291cmNlKTsKKyAgICBQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW1JRCA9IG1fY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOworICAg
IG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+
Y29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgIEdM
Y2hhciBsb2dbMTAwXTsKLSAgICBHTGludCBsZW47Ci0gICAgZ2xHZXRTaGFkZXJJbmZvTG9nKGZy
YWdtZW50U2hhZGVyLCAxMDAsICZsZW4sIGxvZyk7CisgICAgU3RyaW5nIGxvZzsKKyAgICBtX2Nv
bnRleHQtPmdldFNoYWRlckluZm9Mb2coZnJhZ21lbnRTaGFkZXIpOwogICAgIFdURkxvZygmTG9n
Q29tcG9zaXRpbmcsICIlc1xuIiwgbG9nKTsKICNlbmRpZgotICAgIGdsQXR0YWNoU2hhZGVyKHBy
b2dyYW1JRCwgdmVydGV4U2hhZGVyKTsKLSAgICBnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZy
YWdtZW50U2hhZGVyKTsKLSAgICBnbExpbmtQcm9ncmFtKHByb2dyYW1JRCk7CisgICAgbV9jb250
ZXh0LT5hdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4
dC0+YXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29udGV4
dC0+bGlua1Byb2dyYW0ocHJvZ3JhbUlEKTsKIAotICAgIG1fdmVydGV4QXR0cmliID0gZ2xHZXRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3ZlcnRleCIpOwotICAgIG1fdGV4Q29vcmRBdHRy
aWIgPSBnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdGV4Q29vcmQiKTsKLSAgICBt
X3RleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQs
ICJ1X3RleHR1cmUiKTsKKyAgICBtX3ZlcnRleEF0dHJpYiA9IG1fY29udGV4dC0+Z2V0QXR0cmli
TG9jYXRpb24ocHJvZ3JhbUlELCAiYV92ZXJ0ZXgiKTsKKyAgICBtX3RleENvb3JkQXR0cmliID0g
bV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3RleENvb3JkIik7Cisg
ICAgbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRp
b24ocHJvZ3JhbUlELCAidV90ZXh0dXJlIik7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
U0VQSUE6CkBAIC02MzEsMjEgKzYyNSwyMSBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5k
YXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpDT05UUkFTVDoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAg
ICAgbV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dy
YW1JRCwgInVfYW1vdW50Iik7CisgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQgPSBt
X2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2Ftb3VudCIpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKLSAgICAgICAgbV91
bmlmb3JtTG9jYXRpb25zLmJsdXIucmFkaXVzID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3Jh
bUlELCAidV9ibHVyUmFkaXVzIik7Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLmdh
dXNzaWFuS2VybmVsID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9nYXVzc2lh
bktlcm5lbCIpOworICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5yYWRpdXMgPSBtX2Nv
bnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2JsdXJSYWRpdXMiKTsKKyAg
ICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmJsdXIuZ2F1c3NpYW5LZXJuZWwgPSBtX2NvbnRleHQt
PmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKLSAgICAg
ICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzID0gZ2xHZXRVbmlmb3JtTG9j
YXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dCbHVyUmFkaXVzIik7Ci0gICAgICAgIG1fdW5pZm9y
bUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7CisgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9u
cy5zaGFkb3cuYmx1clJhZGl1cyA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dy
YW1JRCwgInVfc2hhZG93Qmx1clJhZGl1cyIpOworICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMu
c2hhZG93LmdhdXNzaWFuS2VybmVsID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJv
Z3JhbUlELCAidV9nYXVzc2lhbktlcm5lbCIpOwogICAgICAgICBpZiAoIXBhc3MpCi0gICAgICAg
ICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93Lm9mZnNldCA9IGdsR2V0VW5pZm9ybUxvY2F0
aW9uKHByb2dyYW1JRCwgInVfc2hhZG93T2Zmc2V0Iik7CisgICAgICAgICAgICBtX3VuaWZvcm1M
b2NhdGlvbnMuc2hhZG93Lm9mZnNldCA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW1JRCwgInVfc2hhZG93T2Zmc2V0Iik7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
Ly8gV2Ugb25seSBuZWVkIHRoZSBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBpbiB0aGUg
c2Vjb25kIHBhc3MsIHRoZSBmaXJzdCBwYXNzIGlzIG9ubHkgYSBob3Jpem9udGFsIGFscGhhIGJs
dXIuCi0gICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbG9yID0gZ2xHZXRV
bmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dDb2xvciIpOwotICAgICAgICAgICAg
bV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb250ZW50VGV4dHVyZSA9IGdsR2V0VW5pZm9ybUxv
Y2F0aW9uKHByb2dyYW1JRCwgInVfY29udGVudFRleHR1cmUiKTsKKyAgICAgICAgICAgIG1fdW5p
Zm9ybUxvY2F0aW9ucy5zaGFkb3cuY29sb3IgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlv
bihwcm9ncmFtSUQsICJ1X3NoYWRvd0NvbG9yIik7CisgICAgICAgICAgICBtX3VuaWZvcm1Mb2Nh
dGlvbnMuc2hhZG93LmNvbnRlbnRUZXh0dXJlID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRp
b24ocHJvZ3JhbUlELCAidV9jb250ZW50VGV4dHVyZSIpOwogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6CkBAIC02NTYsOSArNjUwLDkgQEAgU3RhbmRhcmRGaWx0ZXJQcm9n
cmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBl
IHR5cGUKICAgICBtX2ZyYWdtZW50U2hhZGVyID0gZnJhZ21lbnRTaGFkZXI7CiB9CiAKLVBhc3NS
ZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBTdGFuZGFyZEZpbHRlclByb2dyYW06OmNyZWF0
ZShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKK1Bh
c3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBTdGFuZGFyZEZpbHRlclByb2dyYW06OmNy
ZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRp
b25UeXBlIHR5cGUsIHVuc2lnbmVkIHBhc3MpCiB7Ci0gICAgUmVmUHRyPFN0YW5kYXJkRmlsdGVy
UHJvZ3JhbT4gcHJvZ3JhbSA9IGFkb3B0UmVmKG5ldyBTdGFuZGFyZEZpbHRlclByb2dyYW0odHlw
ZSwgcGFzcykpOworICAgIFJlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IHByb2dyYW0gPSBh
ZG9wdFJlZihuZXcgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKGNvbnRleHQsIHR5cGUsIHBhc3MpKTsK
ICAgICBpZiAoIXByb2dyYW0tPm1faWQpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC02OTQsMjEg
KzY4OCwyMSBAQCBzdGF0aWMgZmxvYXQqIGdhdXNzaWFuS2VybmVsKCkKICAgICByZXR1cm4ga2Vy
bmVsOwogfQogCi12b2lkIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6cHJlcGFyZShjb25zdCBGaWx0
ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwgdW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgR0x1aW50IGNvbnRlbnRUZXh0dXJlKQordm9pZCBTdGFuZGFyZEZpbHRlclByb2dyYW06OnBy
ZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHBhc3MsIGNv
bnN0IEludFNpemUmIHNpemUsIEdDM0R1aW50IGNvbnRlbnRUZXh0dXJlKQogewotICAgIGdsVXNl
UHJvZ3JhbShtX2lkKTsKKyAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0obV9pZCk7CiAgICAgc3dp
dGNoIChvcGVyYXRpb24uZ2V0T3BlcmF0aW9uVHlwZSgpKSB7CiAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkdSQVlTQ0FMRToKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CiAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpIVUVfUk9UQVRFOgotICAgICAgICBnbFVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuYW1v
dW50LCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJj4o
b3BlcmF0aW9uKS5hbW91bnQoKSk7CisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1fdW5p
Zm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QlJJR0hUTkVTUzoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CiAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIGdsVW5pZm9ybTFmKG1fdW5p
Zm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJh
bnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKKyAgICAgICAgbV9j
b250ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCwgc3RhdGljX2Nhc3Q8
Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbiku
YW1vdW50KCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxV
UjogewogICAgICAgICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyID0gc3RhdGljX2Nh
c3Q8Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbik7CkBAIC03MjAsOCArNzE0
LDggQEAgdm9pZCBTdGFuZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVyT3Bl
cmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHAKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
cmFkaXVzLnNldFdpZHRoKGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ci5zdGREZXZpYXRpb24oKSwg
c2l6ZS53aWR0aCgpKSAvIHNpemUud2lkdGgoKSk7CiAKLSAgICAgICAgZ2xVbmlmb3JtMmYobV91
bmlmb3JtTG9jYXRpb25zLmJsdXIucmFkaXVzLCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdo
dCgpKTsKLSAgICAgICAgZ2xVbmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLmdhdXNz
aWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7
CisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLnJh
ZGl1cywgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSk7CisgICAgICAgIG1fY29udGV4
dC0+dW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktlcm5lbCwgR0FV
U1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7CkBAIC03
MjksMjAgKzcyMywyMCBAQCB2b2lkIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6cHJlcGFyZShjb25z
dCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwgdW5zaWduZWQgcAogICAgICAgICBzd2l0Y2gg
KHBhc3MpIHsKICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgLy8gRmlyc3QgcGFzczogdmVy
dGljYWwgYWxwaGEgYmx1ci4KLSAgICAgICAgICAgIGdsVW5pZm9ybTJmKG1fdW5pZm9ybUxvY2F0
aW9ucy5zaGFkb3cub2Zmc2V0LCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQo
c2l6ZS53aWR0aCgpKSwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUu
aGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGdsVW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5z
aGFkb3cuYmx1clJhZGl1cywgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS53aWR0
aCgpKSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm0xZnYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRv
dy5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2Vy
bmVsKCkpOworICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobV91bmlmb3JtTG9jYXRp
b25zLnNoYWRvdy5vZmZzZXQsIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigpLngoKSkgLyBmbG9hdChz
aXplLndpZHRoKCkpLCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS55KCkpIC8gZmxvYXQoc2l6ZS5o
ZWlnaHQoKSkpOworICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9j
YXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChz
aXplLndpZHRoKCkpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihtX3VuaWZv
cm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9X
SURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSAxOgogICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHdlIG5lZWQgdGhlIHNoYWRvdyBjb2xv
ciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3IgY29tcG9zaXRpbmcuCi0gICAgICAgICAgICBn
bFVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMsIHNoYWRvdy5z
dGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGdsVW5p
Zm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lB
Tl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7Ci0gICAgICAgICAgICBnbEFj
dGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpOwotICAgICAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCBjb250ZW50VGV4dHVyZSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm0xaShtX3Vu
aWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbnRlbnRUZXh0dXJlLCAxKTsKKyAgICAgICAgICAgIG1f
Y29udGV4dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1cywg
c2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAg
ICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3Np
YW5LZXJuZWwsIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsK
KyAgICAgICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRTEpOworICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgY29udGVudFRleHR1cmUpOworICAgICAgICAgICAgbV9jb250
ZXh0LT51bmlmb3JtMWkobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb250ZW50VGV4dHVyZSwg
MSk7CiAgICAgICAgICAgICBmbG9hdCByLCBnLCBiLCBhOwogICAgICAgICAgICAgc2hhZG93LmNv
bG9yKCkuZ2V0UkdCQShyLCBnLCBiLCBhKTsKLSAgICAgICAgICAgIGdsVW5pZm9ybTRmKG1fdW5p
Zm9ybUxvY2F0aW9ucy5zaGFkb3cuY29sb3IsIHIsIGcsIGIsIGEpOworICAgICAgICAgICAgbV9j
b250ZXh0LT51bmlmb3JtNGYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb2xvciwgciwgZywg
YiwgYSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAg
LTc1OSw3ICs3NTMsNyBAQCBQYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlckZvckZpbHRlcgogICAgIGludCBrZXkgPSBp
bnQodHlwZSkgfCAocGFzcyA8PCAxNik7CiAgICAgRmlsdGVyTWFwOjppdGVyYXRvciBpdGVyYXRv
ciA9IG1fZmlsdGVyTWFwLmZpbmQoa2V5KTsKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9maWx0ZXJN
YXAuZW5kKCkpIHsKLSAgICAgICAgcHJvZ3JhbSA9IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6Y3Jl
YXRlKHR5cGUsIHBhc3MpOworICAgICAgICBwcm9ncmFtID0gU3RhbmRhcmRGaWx0ZXJQcm9ncmFt
OjpjcmVhdGUobV9jb250ZXh0LCB0eXBlLCBwYXNzKTsKICAgICAgICAgaWYgKCFwcm9ncmFtKQog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmgKaW5kZXggNzg1NDk4ZTdmOGEzNjI3ZWFiMTA2ODZiYTM2YmZmYjNlMTA5MTQ1Ni4uYmU0
NWM1ZGFmZWZjNjdhZWEyMWZmOGQ1YjNlY2U3NGJjNjQwNTFjNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKQEAgLTI0LDkgKzI0LDkgQEAKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKIAogI2luY2x1ZGUgIkZs
b2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiSW50
U2l6ZS5oIgotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgpAQCAtNDQsMzkgKzQ0LDQwIEBAIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSA6IHB1YmxpYyBSZWZD
b3VudGVkPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiB7CiBwdWJsaWM6Ci0gICAgR0x1aW50
IGlkKCkgeyByZXR1cm4gbV9pZDsgfQotICAgIEdMdWludCB2ZXJ0ZXhBdHRyaWIoKSB7IHJldHVy
biBtX3ZlcnRleEF0dHJpYjsgfQorICAgIFBsYXRmb3JtM0RPYmplY3QgaWQoKSB7IHJldHVybiBt
X2lkOyB9CisgICAgR0MzRHVpbnQgdmVydGV4QXR0cmliKCkgeyByZXR1cm4gbV92ZXJ0ZXhBdHRy
aWI7IH0KIAotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRl
eFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpOworICAgIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgY2hhciog
dmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSk7CiAg
ICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBwcmVwYXJlKGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqKSB7IH0KLSAg
ICBHTGludCBtYXRyaXhMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4TG9jYXRpb247
IH0KLSAgICBHTGludCBmbGlwTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZsaXBMb2NhdGlv
bjsgfQotICAgIEdMaW50IHRleHR1cmVTaXplTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Rl
eHR1cmVTaXplTG9jYXRpb247IH0KLSAgICBHTGludCBzb3VyY2VUZXh0dXJlTG9jYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX3NvdXJjZVRleHR1cmVMb2NhdGlvbjsgfQotICAgIEdMaW50IG1hc2tU
ZXh0dXJlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hc2tUZXh0dXJlTG9jYXRpb247IH0K
LSAgICBHTGludCBvcGFjaXR5TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHlMb2Nh
dGlvbjsgfQorICAgIEdDM0RpbnQgbWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21h
dHJpeExvY2F0aW9uOyB9CisgICAgR0MzRGludCBmbGlwTG9jYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2ZsaXBMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgdGV4dHVyZVNpemVMb2NhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fdGV4dHVyZVNpemVMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgc291cmNl
VGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VUZXh0dXJlTG9jYXRpb247
IH0KKyAgICBHQzNEaW50IG1hc2tUZXh0dXJlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21h
c2tUZXh0dXJlTG9jYXRpb247IH0KKyAgICBHQzNEaW50IG9wYWNpdHlMb2NhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fb3BhY2l0eUxvY2F0aW9uOyB9CiAKLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlk
VW5pZm9ybUxvY2F0aW9uKEdMaW50IGxvY2F0aW9uKSB7IHJldHVybiBsb2NhdGlvbiA+PSAwOyB9
CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihHQzNEaW50IGxvY2F0aW9u
KSB7IHJldHVybiBsb2NhdGlvbiA+PSAwOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGdldFVu
aWZvcm1Mb2NhdGlvbihHTGludCYgdmFyLCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB2b2lkIGdl
dFVuaWZvcm1Mb2NhdGlvbihHQzNEaW50JiB2YXIsIGNvbnN0IGNoYXIqIG5hbWUpOwogICAgIHZv
aWQgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpIHsg
fQogICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmVydGV4U2hhZGVyU291cmNlLmRhdGEoKTsgfQogICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hh
ZGVyU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9mcmFnbWVudFNoYWRlclNvdXJjZS5kYXRhKCk7
IH0KIAotICAgIEdMdWludCBtX2lkOwotICAgIEdMdWludCBtX3ZlcnRleEF0dHJpYjsKLSAgICBH
THVpbnQgbV92ZXJ0ZXhTaGFkZXI7Ci0gICAgR0x1aW50IG1fZnJhZ21lbnRTaGFkZXI7Ci0gICAg
R0xpbnQgbV9tYXRyaXhMb2NhdGlvbjsKLSAgICBHTGludCBtX2ZsaXBMb2NhdGlvbjsKLSAgICBH
TGludCBtX3RleHR1cmVTaXplTG9jYXRpb247Ci0gICAgR0xpbnQgbV9zb3VyY2VUZXh0dXJlTG9j
YXRpb247Ci0gICAgR0xpbnQgbV9vcGFjaXR5TG9jYXRpb247Ci0gICAgR0xpbnQgbV9tYXNrVGV4
dHVyZUxvY2F0aW9uOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgUGxh
dGZvcm0zRE9iamVjdCBtX2lkOworICAgIEdDM0R1aW50IG1fdmVydGV4QXR0cmliOworICAgIFBs
YXRmb3JtM0RPYmplY3QgbV92ZXJ0ZXhTaGFkZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2Zy
YWdtZW50U2hhZGVyOworICAgIEdDM0RpbnQgbV9tYXRyaXhMb2NhdGlvbjsKKyAgICBHQzNEaW50
IG1fZmxpcExvY2F0aW9uOworICAgIEdDM0RpbnQgbV90ZXh0dXJlU2l6ZUxvY2F0aW9uOworICAg
IEdDM0RpbnQgbV9zb3VyY2VUZXh0dXJlTG9jYXRpb247CisgICAgR0MzRGludCBtX29wYWNpdHlM
b2NhdGlvbjsKKyAgICBHQzNEaW50IG1fbWFza1RleHR1cmVMb2NhdGlvbjsKIAogcHJpdmF0ZToK
ICAgICBDU3RyaW5nIG1fdmVydGV4U2hhZGVyU291cmNlOwpAQCAtODcsMzMgKzg4LDM2IEBAIHBy
aXZhdGU6CiBjbGFzcyBTdGFuZGFyZEZpbHRlclByb2dyYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxT
dGFuZGFyZEZpbHRlclByb2dyYW0+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TdGFuZGFyZEZp
bHRlclByb2dyYW0oKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShjb25zdCBGaWx0ZXJPcGVy
YXRpb24mLCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRTaXplJiwgR0x1aW50IGNvbnRlbnRUZXh0
dXJlKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IGNyZWF0
ZShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIHBhc3MpOwotICAgIEdM
dWludCB2ZXJ0ZXhBdHRyaWIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQotICAg
IEdMdWludCB0ZXhDb29yZEF0dHJpYigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4Q29vcmRBdHRyaWI7
IH0KLSAgICBHTHVpbnQgdGV4dHVyZVVuaWZvcm0oKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVV
bmlmb3JtTG9jYXRpb247IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShjb25zdCBGaWx0ZXJP
cGVyYXRpb24mLCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRTaXplJiwgR0MzRHVpbnQgY29udGVu
dFRleHR1cmUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4g
Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBl
LCB1bnNpZ25lZCBwYXNzKTsKKyAgICBHQzNEdWludCB2ZXJ0ZXhBdHRyaWIoKSBjb25zdCB7IHJl
dHVybiBtX3ZlcnRleEF0dHJpYjsgfQorICAgIEdDM0R1aW50IHRleENvb3JkQXR0cmliKCkgY29u
c3QgeyByZXR1cm4gbV90ZXhDb29yZEF0dHJpYjsgfQorICAgIEdDM0R1aW50IHRleHR1cmVVbmlm
b3JtKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOyB9Citwcm90ZWN0
ZWQ6CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKIHByaXZhdGU6Ci0gICAgU3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgdW5zaWdu
ZWQgcGFzcyk7Ci0gICAgR0x1aW50IG1faWQ7Ci0gICAgR0x1aW50IG1fdmVydGV4U2hhZGVyOwot
ICAgIEdMdWludCBtX2ZyYWdtZW50U2hhZGVyOwotICAgIEdMdWludCBtX3ZlcnRleEF0dHJpYjsK
LSAgICBHTHVpbnQgbV90ZXhDb29yZEF0dHJpYjsKLSAgICBHTHVpbnQgbV90ZXh0dXJlVW5pZm9y
bUxvY2F0aW9uOworICAgIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbSgpOworICAgIFN0YW5kYXJkRmls
dGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCosIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9u
VHlwZSwgdW5zaWduZWQgcGFzcyk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2lkOworICAgIFBs
YXRmb3JtM0RPYmplY3QgbV92ZXJ0ZXhTaGFkZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2Zy
YWdtZW50U2hhZGVyOworICAgIEdDM0R1aW50IG1fdmVydGV4QXR0cmliOworICAgIEdDM0R1aW50
IG1fdGV4Q29vcmRBdHRyaWI7CisgICAgR0MzRHVpbnQgbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9u
OwogICAgIHVuaW9uIHsKLSAgICAgICAgR0x1aW50IGFtb3VudDsKKyAgICAgICAgR0MzRHVpbnQg
YW1vdW50OwogCiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBHTHVpbnQgcmFkaXVzOwot
ICAgICAgICAgICAgR0x1aW50IGdhdXNzaWFuS2VybmVsOworICAgICAgICAgICAgR0MzRHVpbnQg
cmFkaXVzOworICAgICAgICAgICAgR0MzRHVpbnQgZ2F1c3NpYW5LZXJuZWw7CiAgICAgICAgIH0g
Ymx1cjsKIAogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0x1aW50IGJsdXJSYWRpdXM7
Ci0gICAgICAgICAgICBHTHVpbnQgY29sb3I7Ci0gICAgICAgICAgICBHTHVpbnQgb2Zmc2V0Owot
ICAgICAgICAgICAgR0x1aW50IGNvbnRlbnRUZXh0dXJlOwotICAgICAgICAgICAgR0x1aW50IGdh
dXNzaWFuS2VybmVsOworICAgICAgICAgICAgR0MzRHVpbnQgYmx1clJhZGl1czsKKyAgICAgICAg
ICAgIEdDM0R1aW50IGNvbG9yOworICAgICAgICAgICAgR0MzRHVpbnQgb2Zmc2V0OworICAgICAg
ICAgICAgR0MzRHVpbnQgY29udGVudFRleHR1cmU7CisgICAgICAgICAgICBHQzNEdWludCBnYXVz
c2lhbktlcm5lbDsKICAgICAgICAgfSBzaGFkb3c7CiAgICAgfSBtX3VuaWZvcm1Mb2NhdGlvbnM7
CiB9OwpAQCAtMTIxLDc3ICsxMjUsODkgQEAgcHJpdmF0ZToKIAogY2xhc3MgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1TaW1wbGUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0g
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU2ltcGxlPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU2ltcGxlPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU2ltcGxlKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU2ltcGxlKGNvbnRleHQpKTsKICAgICB9CiAKIHByb3RlY3RlZDoKKyAgICBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZShHcmFwaGljc0NvbnRleHQzRCopOworcHJp
dmF0ZToKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpOwogfTsKIAogY2xh
c3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlIDogcHVibGljIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlPiBjcmVhdGUoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoY29u
dGV4dCkpOwogICAgIH0KIAorcHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtUmVjdFNpbXBsZShHcmFwaGljc0NvbnRleHQzRCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKTsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gY3JlYXRlKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1h
c2soY29udGV4dCkpOwogICAgIH0KIAorcHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soR3JhcGhpY3NDb250ZXh0M0QqKTsKIHByaXZhdGU6CiAg
ICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpOwogfTsKIAogY2xh
c3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2sgOiBwdWJsaWMg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrPiBjcmVhdGUo
KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9w
YWNpdHlBbmRNYXNrPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVj
dE9wYWNpdHlBbmRNYXNrKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKGNvbnRleHQpKTsKICAgICB9CiAK
K3Byb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5k
TWFzayhHcmFwaGljc0NvbnRleHQzRCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaygpOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1Tb2xpZENvbG9yIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNvbGlkQ29sb3I+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcigpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoY29udGV4dCkpOwogICAgIH0K
IAotICAgIEdMaW50IGNvbG9yTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbG9yTG9jYXRp
b247IH0KKyAgICBHQzNEaW50IGNvbG9yTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbG9y
TG9jYXRpb247IH0KIAorcHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
U29saWRDb2xvcihHcmFwaGljc0NvbnRleHQzRCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoKTsKLSAgICBHTGludCBtX2NvbG9yTG9jYXRpb247
CisgICAgR0MzRGludCBtX2NvbG9yTG9jYXRpb247CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s+IGNy
ZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2so
KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1BbnRpYWxpYXNpbmdOb01hc2soY29udGV4dCkpOwogICAgIH0KIAotICAgIEdMaW50IGV4cGFu
ZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29vcmRpbmF0ZXNMb2NhdGlvbigpIHsgcmV0dXJuIG1f
ZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247IH0KLSAgICBH
TGludCBleHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbigpIHsgcmV0dXJuIG1f
ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb247IH0KKyAgICBHQzNEaW50IGV4
cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29vcmRpbmF0ZXNMb2NhdGlvbigpIHsgcmV0dXJu
IG1fZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247IH0KKyAg
ICBHQzNEaW50IGV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uKCkgeyByZXR1
cm4gbV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbjsgfQogCitwcm90ZWN0
ZWQ6CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2soR3Jh
cGhpY3NDb250ZXh0M0QqKTsKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1BbnRpYWxpYXNpbmdOb01hc2soKTsKIAotICAgIEdMaW50IG1fZXhwYW5kZWRRdWFkVmVydGlj
ZXNJblRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247Ci0gICAgR0xpbnQgbV9leHBhbmRlZFF1YWRF
ZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbjsKKyAgICBHQzNEaW50IG1fZXhwYW5kZWRRdWFkVmVy
dGljZXNJblRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247CisgICAgR0MzRGludCBtX2V4cGFuZGVk
UXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIgewpAQCAtMjA2LDcgKzIyMiw4IEBAIHB1YmxpYzoKICAgICAgICAgU29s
aWRDb2xvcgogICAgIH07CiAKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpOworICAg
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkgeyB9OworICAgIFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyKEdyYXBoaWNzQ29udGV4dDNEKik7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIoKTsKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTIyMSwxMiAr
MjM4LDEyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFNoYWRlclR5
cGUsIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4sIERlZmF1bHRIYXNoPGludD46
Okhhc2gsIEhhc2hUcmFpdHM8aW50PiA+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOwog
ICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwIG1fdGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1NYXA7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKIAogI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8U3RhbmRhcmRG
aWx0ZXJQcm9ncmFtPiA+IEZpbHRlck1hcDsKICAgICBGaWx0ZXJNYXAgbV9maWx0ZXJNYXA7CiAj
ZW5kaWYKLQogfTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157911</attachid>
            <date>2012-08-12 14:57:01 -0700</date>
            <delta_ts>2012-08-15 12:56:30 -0700</delta_ts>
            <desc>patch</desc>
            <filename>20120812_FINAL_END.diff</filename>
            <type>text/plain</type>
            <size>117431</size>
            <attacher name="Roland Takacs">rtakacs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5YzNmMTEwLi5jM2FhOWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjU1
IEBACisyMDEyLTA4LTEyICBIZWxkZXIgQ29ycmVpYSAgPGhlbGRlci5jb3JyZWlhQG5va2lhLmNv
bT4KKworICAgICAgICBbVGV4bWFwXSBNb3ZlIFRleHR1cmVNYXBwZXJHTCB0byB1c2UgR3JhcGhp
Y3NDb250ZXh0M0QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc4NjcyCisKKyAgICAgICAgVGV4dHVyZU1hcHBlckdMIChUTUdMKSBpbmNsdWRlcyBkaXJl
Y3QgR0wgY2FsbHMgYW5kCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEIChHQzNEKSBvZmZlcnMg
bWFueSBjb252ZW5pZW5jZXMgb3ZlciB0aGUKKyAgICAgICAgZm9ybWVyIGFwcHJvYWNoOiB1c2lu
ZyBleGlzdGluZyBDU1Mgc2hhZGVyIGNvZGUsIEFOR0xFIGZvcgorICAgICAgICBzaGFkZXIgY29t
cGlsYXRpb24sIHJldXNpbmcgV2ViQ29yZTo6VGV4dHVyZSwgaGF2aW5nIHNoYWRlcnMgYW5kCisg
ICAgICAgIHRleHR1cmVzIHRoYXQgY2FuIGRlbGV0ZSB0aGVtc2VsdmVzLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggY2hhbmdlcyB0aGUgYmFja2VuZCBvZiBUTUdMIHRvIEdDM0QuIEl0IHdhcyBpbml0
aWFsbHkKKyAgICAgICAgdGhvdWdodCB0byBpbnRyb2R1Y2UgYSBuZXcgYmFja2VuZCAoc2F5LCBU
ZXh0dXJlTWFwcGVyR0MzRCksIGJ1dAorICAgICAgICBpbiB0aGUgZW5kIGl0IHdhcyBhZ3JlZWQg
dG8gY29uc29saWRhdGUgaXQgaW5zaWRlIFRNR0wgaW5zdGVhZCwKKyAgICAgICAgYXMgYW4gYWRk
aXRpb25hbCBUZXh0dXJlTWFwcGVyIHN1YmNsYXNzIHdvdWxkIGdldCBzdGFsZSB2ZXJ5CisgICAg
ICAgIHF1aWNrbHkuCisKKyAgICAgICAgQSBHQzNEIG9iamVjdCBpcyBjcmVhdGVkIGJ5IFRNR0wg
d2l0aCB0aGUgbmV3bHkgaW50cm9kdWNlZAorICAgICAgICBidWlsZGVyIGNyZWF0ZVdyYXBwZXJG
b3JDdXJyZW50R0xDb250ZXh0KCksIHdoaWNoIGluIHR1cm4gdXNlcworICAgICAgICB0aGUgbmV3
IFJlbmRlclRvQ3VycmVudEdMQ29udGV4dCBmbGFnIHVuZGVybmVhdGguCisKKyAgICAgICAgVE1H
TCdzIGRlcGVuZGVuY3kgb24gT3BlbkdMU2hpbXMuaCB3YXMgY29tcGxldGVseSByZW1vdmVkLgor
ICAgICAgICBIb3dldmVyLCBHQzNEIGRvZXMgbm90IG1hcCBldmVyeSBzaW5nbGUgR0wgY29uc3Rh
bnQuIFRodXMsIGl0J3MKKyAgICAgICAgaW1wb3J0YW50IHRvIGRvY3VtZW50IHRoZSBmb2xsb3dp
bmc6CisgICAgICAgICAgICAtIEdMX0ZBTFNFIHdhcyBtYXBwZWQgdG8gZmFsc2UuCisgICAgICAg
ICAgICAtIEdMX1VOUEFDS19ST1dfTEVOR1RILCBHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsCisgICAg
ICAgICAgICBHTF9VTlBBQ0tfU0tJUF9ST1dTLCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIGFu
ZAorICAgICAgICAgICAgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWIHdlcmUgbG9jYWxseSBk
ZWZpbmVkIGluIFRNR0wuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCByZWZhY3RvcmluZy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3ND
b250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgIChHcmFwaGlj
c0NvbnRleHQzRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFw
aGljc0NvbnRleHQzREJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3Jh
cGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3Jh
cGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Okdy
YXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhp
Y3NDb250ZXh0M0RFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3ND
b250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRl
eHQzRE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNE
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdl
MkQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlV3JhcHBlckZvckN1cnJlbnRHTENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRERpcmVjdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
RVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3Bw
OgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlT2Zmc2NyZWVu
QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6aW5pdGlhbGl6ZUFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFNo
YXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFy
ZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpTaGFyZWRHTERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6c2hhcmVkR0xEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OlRleHR1cmVNYXBwZXJHTERhdGEpOgorICAgICAgICAo
VGV4dHVyZU1hcHBlckdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpzY2lzc29yQ2xpcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjazo6YXBwbHkpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6aW5pdGlhbGl6ZVN0ZW5jaWwpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0wpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZW5kUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OmRyYXdCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6dmlld3BvcnRNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpk
cmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMOjpkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwVGV4dHVyZUdMOjpkaWRSZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0
dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TDo6ZHJhd0ZpbHRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6aW5p
dGlhbGl6ZVN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpjbGVh
cklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6Y3JlYXRlRmJv
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpiaW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6fkJpdG1hcFRleHR1cmVHTCk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJpbmREZWZhdWx0U3VyZmFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luU2Npc3NvckNsaXApOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXApOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMOjplbmRDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJHTDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHTC5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdM
OjpncmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyR0wpOgorICAgICAg
ICAoQ2xpcFN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6dGV4dHVy
ZVRhcmdldCk6CisgICAgICAgIChCaXRtYXBUZXh0dXJlR0wpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwVGV4dHVyZUdMOjpCaXRtYXBUZXh0dXJlR0wpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpn
ZXRTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aW5pdGlhbGl6ZVByb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OlRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtUmVjdFNpbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRN
YXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9w
YWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFz
ayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlh
c2luZ05vTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2sp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJv
Z3JhbTo6flN0YW5kYXJkRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFy
ZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdGFuZGFyZEZpbHRlclByb2dyYW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdGFu
ZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlckZvckZpbHRlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmg6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aWQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OnZlcnRleEF0dHJpYik6CisgICAgICAg
IChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbTo6bWF0cml4TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmZsaXBMb2NhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6dGV4dHVyZVNpemVMb2NhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6c291cmNlVGV4dHVy
ZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
OjptYXNrVGV4dHVyZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOjpvcGFjaXR5TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAo
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVy
UHJvZ3JhbTo6dmVydGV4QXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVy
UHJvZ3JhbTo6dGV4Q29vcmRBdHRyaWIpOgorICAgICAgICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0
ZXJQcm9ncmFtOjp0ZXh0dXJlVW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6Y3JlYXRlKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU2ltcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3JlYXRlKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdFNpbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpjcmVhdGUpOgorICAgICAgICAoVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6Y3JlYXRlKToKKyAgICAgICAg
KFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6
Y29sb3JMb2NhdGlvbik6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlk
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRp
YWxpYXNpbmdOb01hc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6ZXhwYW5kZWRRdWFkVmVydGljZXNJblRl
eHR1cmVDb29yZGluYXRlc0xvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpleHBhbmRlZFF1YWRFZGdlc0luU2Ny
ZWVuU3BhY2VMb2NhdGlvbik6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFu
dGlhbGlhc2luZ05vTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIpOgorICAgICAgICAoVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIpOgorCisyMDEyLTA4LTEyICBIZWxkZXIgQ29ycmVpYSAgPGhlbGRl
ci5jb3JyZWlhQG5va2lhLmNvbT4KKworICAgICAgICBbVGV4bWFwXSBNb3ZlIFRleHR1cmVNYXBw
ZXJHTCB0byB1c2UgR3JhcGhpY3NDb250ZXh0M0QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NjcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IG9mIGEgc2V2ZXJhbCBwYXRjaC1yZWZh
Y3RvcmluZy4KKworICAgICAgICBJbnRyb2R1Y2UgYWRkaXRpb25hbCBsb2dpYyBpbiBHcmFwaGlj
c0NvbnRleHQzRFF0IHRvIHN1cHBvcnQgYQorICAgICAgICBuZXcgUmVuZGVyVG9DdXJyZW50R0xD
b250ZXh0IFJlbmRlclN0eWxlLiBUaGlzIGlzIG5lY2Vzc2FyeSB0bworICAgICAgICB1c2UgR0Mz
RCBmb3Igb3RoZXIgdGhpbmdzIHRoYW4gV2ViR0wsIGxpa2UgVGV4dHVyZU1hcHBlci4KKworICAg
ICAgICBUaGUgR0MzRCBjb25zdHJ1Y3RvciBub3cgYWNjZXB0cyBhIFJlbmRlclN0eWxlIGluc3Rl
YWQgb2YgdGhlCisgICAgICAgIGJvb2xlYW4gcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cgYW5k
IHRodXMgbWltaWNzIGNyZWF0ZSgpJ3MKKyAgICAgICAgc2lnbmF0dXJlLiBUaGlzIGhhcyBiZWVu
IGNoYW5nZWQgZm9yIGFsbCBwb3J0cyBpbiB0aGlzIHBhdGNoLgorCisgICAgICAgIEEgbmV3IEdD
M0Q6OmNyZWF0ZVdyYXBwZXJGb3JDdXJyZW50R0xDb250ZXh0KCkgYnVpbGRlciB3YXMKKyAgICAg
ICAgaW50cm9kdWNlZCB0byBiZXR0ZXIgYWJzdHJhY3QgdGhlIGdvYWwgb2YgdXNpbmcgR0MzRCB3
aXRoIHRoZQorICAgICAgICBjdXJyZW50IGNvbnRleHQuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LCByZWZhY3RvcmluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3Jh
cGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNv
bnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6
CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJsYWNrQmVycnkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlV3JhcHBlckZvckN1cnJlbnRHTENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4
SW1hZ2UyRERpcmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMRVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6Y3JlYXRlT2Zmc2NyZWVuQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aW5pdGlhbGl6ZUFOR0xFKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQz
RCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJy
ZW50KToKKworMjAxMi0wOC0xMiAgSGVsZGVyIENvcnJlaWEgIDxoZWxkZXIuY29ycmVpYUBub2tp
YS5jb20+CisKKyAgICAgICAgW1RleG1hcF0gTW92ZSBUZXh0dXJlTWFwcGVyR0wgdG8gdXNlIEdy
YXBoaWNzQ29udGV4dDNECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03ODY3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEludHJvZHVjaW5nIGEgbmV3IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJERGly
ZWN0KCkgdG8gYWxsb3cKKyAgICAgICAgaW5pdGlhbGl6YXRpb24gb2YgdGV4dHVyZXMgd2l0aG91
dCBhbGxvY2F0aW9uLiBUaGUgZXhpc3RpbmcKKyAgICAgICAgdGV4dEltYWdlMkQoKSByZWZ1c2Vz
IGEgbnVsbCBwaXhlbCBidWZmZXIsIGFuZAorICAgICAgICB0ZXhJbWFnZTJEUmVzb3VyY2VTYWZl
KCkgYWxsb3dzIGl0IGJ1dCBwZXJmb3JtcyBtZW1vcnkKKyAgICAgICAgYWxsb2NhdGlvbiBhbmQg
emVyb2VzIHRoZSBiaXRzLiBUaGlzIHdhcyBub3QgZmFzdCBlbm91Z2ggZm9yCisgICAgICAgIEJp
dG1hcFRleHR1cmVHTCBmcmVxdWVudCBzZXR0aW5nIHVwLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cyAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaDoKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRERpcmVjdCk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0xFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dGV4SW1hZ2UyRCk6CisKIDIwMTItMDgtMTIgIFByYXZpbiBEICA8cHJhdmluZC4yazRA
Z21haWwuY29tPgogCiAgICAgICAgIHRhYmxlIGNlbGwuY2VsbEluZGV4IHNob3VsZCByZXR1cm4g
LTEgaWYgdGhlcmUgaXMgbm8gcGFyZW50IHRhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9HcmFwaGljc0NvbnRl
eHQzRENocm9taXVtLmNwcAppbmRleCAxMjdmY2ZhLi5mOGU0NmQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0dyYXBoaWNzQ29udGV4dDNEQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQv
R3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKQEAgLTQzLDcgKzQzLDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBib29sKQorR3JhcGhpY3ND
b250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
LCBIb3N0V2luZG93KiwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlKQogewogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0dyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9zdXBwb3J0L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKaW5kZXggZjZiNzMwZC4uMGQ1
NzFiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9y
dC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcApAQCAtNzcs
NyArNzcsNyBAQCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6On5HcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUoKQogCiBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KFBhc3NPd25QdHI8
V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRD4gd2ViQ29udGV4dCwgYm9vbCBwcmVzZXJ2ZURy
YXdpbmdCdWZmZXIpCiB7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0g
YWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzKCksIDAsIGZhbHNlIC8qIG9uc2NyZWVuICovKSk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzKCksIDApKTsKIAogICAgIE93blB0cjxHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU+IHByaXYgPSBhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
KHdlYkNvbnRleHQsIHByZXNlcnZlRHJhd2luZ0J1ZmZlcikpOwogICAgIGNvbnRleHQtPm1fcHJp
dmF0ZSA9IHByaXYucmVsZWFzZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggZTEzNzNmMC4uOTU3OTE2ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQzRC5oCkBAIC0yNTAsNiArMjUwLDcgQEAgcHVibGljOgogICAgICAgICBBTFBIQSA9IDB4MTkw
NiwKICAgICAgICAgUkdCID0gMHgxOTA3LAogICAgICAgICBSR0JBID0gMHgxOTA4LAorICAgICAg
ICBCR1JBID0gMHg4MEUxLAogICAgICAgICBMVU1JTkFOQ0UgPSAweDE5MDksCiAgICAgICAgIExV
TUlOQU5DRV9BTFBIQSA9IDB4MTkwQSwKICAgICAgICAgVU5TSUdORURfU0hPUlRfNF80XzRfNCA9
IDB4ODAzMywKQEAgLTQ1OCw3ICs0NTksOCBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFJlbmRlclN0
eWxlIHsKICAgICAgICAgUmVuZGVyT2Zmc2NyZWVuLAotICAgICAgICBSZW5kZXJEaXJlY3RseVRv
SG9zdFdpbmRvdworICAgICAgICBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdywKKyAgICAgICAg
UmVuZGVyVG9DdXJyZW50R0xDb250ZXh0CiAgICAgfTsKIAogICAgIGNsYXNzIENvbnRleHRMb3N0
Q2FsbGJhY2sgewpAQCAtNDc3LDYgKzQ3OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEVycm9y
TWVzc2FnZUNhbGxiYWNrKFBhc3NPd25QdHI8RXJyb3JNZXNzYWdlQ2FsbGJhY2s+KTsKIAogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGUoQXR0cmlidXRlcywg
SG9zdFdpbmRvdyosIFJlbmRlclN0eWxlID0gUmVuZGVyT2Zmc2NyZWVuKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlV3JhcHBlckZvckN1cnJlbnRHTENv
bnRleHQoKTsKICAgICB+R3JhcGhpY3NDb250ZXh0M0QoKTsKIAogI2lmIFBMQVRGT1JNKE1BQykK
QEAgLTUyNCw2ICs1MjcsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOwog
I2VuZGlmCiAKKyAgICAvLyBFcXVpdmFsZW50IHRvIDo6Z2xUZXhJbWFnZTJEKCkuIEFsbG93cyBw
aXhlbHM9PTAgd2l0aCBubyBhbGxvY2F0aW9uLgorICAgIHZvaWQgdGV4SW1hZ2UyRERpcmVjdChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7CisKICAgICAvLyBI
ZWxwZXIgdG8gdGV4SW1hZ2UyRCB3aXRoIHBpeGVsPT0wIGNhc2U6IHBpeGVscyBhcmUgaW5pdGlh
bGl6ZWQgdG8gMC4KICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBubyBHTCBlcnJvciBpcyBzeW50aGVz
aXplZC4KICAgICAvLyBCeSBkZWZhdWx0LCBhbGlnbm1lbnQgaXMgNCwgdGhlIE9wZW5HTCBkZWZh
dWx0IHNldHRpbmcuCkBAIC04NjMsNyArODY5LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB1bnNp
Z25lZCBnZXRDaGFubmVsQml0c0J5Rm9ybWF0KEdDM0RlbnVtKTsKIAogICBwcml2YXRlOgotICAg
IEdyYXBoaWNzQ29udGV4dDNEKEF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3csIGJvb2wgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAgIEdyYXBoaWNzQ29udGV4
dDNEKEF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBSZW5kZXJTdHlsZSA9IFJlbmRlck9mZnNjcmVl
bik7CiAKICAgICAvLyBFYWNoIHBsYXRmb3JtIG11c3QgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlv
biBvZiB0aGlzIG1ldGhvZC4KICAgICAvLwpAQCAtOTc0LDYgKzk4MCw3IEBAIHB1YmxpYzoKICAg
ICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOwogCiAgICAgQXR0cmlidXRl
cyBtX2F0dHJzOworICAgIFJlbmRlclN0eWxlIG1fcmVuZGVyU3R5bGU7CiAgICAgVmVjdG9yPFZl
Y3RvcjxmbG9hdD4gPiBtX3ZlcnRleEFycmF5OwogCiAgICAgR0MzRHVpbnQgbV90ZXh0dXJlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9H
cmFwaGljc0NvbnRleHQzREJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJsYWNrQmVycnkuY3BwCmluZGV4
IDIzNGU2OGYuLjQ0ZjRmOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4
dDNEQmxhY2tCZXJyeS5jcHAKQEAgLTQ3LDEwICs0NywxMCBAQCBQYXNzUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEF0dHJpYnV0ZXMgYXR0cmlicywg
SG9zdAogICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29u
dGV4dDNEKGF0dHJpYnMsIGhvc3RXaW5kb3csIGZhbHNlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRyaWJzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkp
OwogfQogCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqLCBib29sIHJlbmRlckRpcmVjdGx5
VG9Ib3N0V2luZG93KQorR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogICAgIDogbV9jdXJyZW50V2lkdGgoMCkK
ICAgICAsIG1fY3VycmVudEhlaWdodCgwKQogICAgICwgbV9jb250ZXh0KEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpHcmFwaGljczo6Y3JlYXRlV2ViR0xDb250ZXh0KCkpCkBAIC02Nyw3ICs2Nyw3IEBA
IEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAgICAgLCBtX2JvdW5kVGV4dHVyZTAoMCkKICAgICAs
IG1faXNJbWFnaW5hdGlvbkhhcmR3YXJlKDApCiB7Ci0gICAgaWYgKCFyZW5kZXJEaXJlY3RseVRv
SG9zdFdpbmRvdykgeworICAgIGlmIChyZW5kZXJTdHlsZSAhPSBSZW5kZXJEaXJlY3RseVRvSG9z
dFdpbmRvdykgewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICAgICAgbV9j
b21wb3NpdGluZ0xheWVyID0gV2ViR0xMYXllcldlYktpdFRocmVhZDo6Y3JlYXRlKCk7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKaW5kZXggOTgyMmQ0ZS4uNjRhMmZh
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0M0RDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKQEAgLTYxLDExICs2MSwxMSBA
QCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRl
KEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJl
ZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cmlidXRlcywgaG9zdFdpbmRvdywgZmFsc2UpKTsK
KyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3Jh
cGhpY3NDb250ZXh0M0QoYXR0cmlidXRlcywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUpKTsKICAg
ICByZXR1cm4gY29udGV4dC5yZWxlYXNlKCk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFw
aGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBI
b3N0V2luZG93KiwgYm9vbCkKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlKQogICAgIDogbV9jdXJyZW50V2lkdGgoMCkKICAg
ICAsIG1fY3VycmVudEhlaWdodCgwKQogICAgICwgbV9hdHRycyhhdHRyaWJ1dGVzKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0Nv
bnRleHQzRENsdXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1
dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwCmluZGV4IDRiNGIwZTMuLmFiZmJkNDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3Jh
cGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHAKQEAgLTQyLDExICs0
MiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6
OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogewotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRyaWJ1dGVzLCBo
b3N0V2luZG93LCBmYWxzZSkpOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4
dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRyaWJ1dGVzLCBob3N0V2luZG93
LCByZW5kZXJTdHlsZSkpOwogICAgIHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsKIH0KIAotR3Jh
cGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wpCitHcmFwaGlj
c0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6
OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3ND
b250ZXh0M0RFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dy
YXBoaWNzQ29udGV4dDNERWZsLmNwcAppbmRleCBlZmUxYTEyLi43MjFkN2M3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RF
ZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGlj
c0NvbnRleHQzREVmbC5jcHAKQEAgLTM2LDEyICszNiwxMiBAQCBQYXNzUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpB
dHRyaQogICAgIGlmICghaW50ZXJuYWwpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4
dDNEKGF0dHJzLCBob3N0V2luZG93LCByZW5kZXJEaXJlY3RseVRvRXZhc0dMT2JqZWN0KSk7Cisg
ICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBo
aWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkpOwogICAgIGNvbnRl
eHQtPm1fcHJpdmF0ZSA9IGludGVybmFsLnJlbGVhc2UoKTsKICAgICByZXR1cm4gY29udGV4dC5y
ZWxlYXNlKCk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywg
Ym9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFw
aGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdp
bmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0
eWxlKQogICAgIDogbV9jdXJyZW50V2lkdGgoMCkKICAgICAsIG1fY3VycmVudEhlaWdodCgwKQog
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBo
aWNzQ29udGV4dDNETWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCmluZGV4IGQwNDJjNjYuLjAwZTgzMTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQz
RE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhp
Y3NDb250ZXh0M0RNYWMubW0KQEAgLTk4LDExICs5OCwxMSBAQCBQYXNzUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpB
dHRyaQogICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lc24ndCBjdXJyZW50bHkgc3VwcG9y
dCByZW5kZXJpbmcgZGlyZWN0bHkgdG8gdGhlIEhvc3RXaW5kb3cuCiAgICAgaWYgKHJlbmRlclN0
eWxlID09IFJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQogICAgICAgICByZXR1cm4gMDsKLSAg
ICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhp
Y3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3csIGZhbHNlKSk7CisgICAgUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0
dHJzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkpOwogICAgIHJldHVybiBjb250ZXh0LT5tX2Nv
bnRleHRPYmogPyBjb250ZXh0LnJlbGVhc2UoKSA6IDA7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNE
OjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywg
SG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCkKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGlj
c0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRv
dyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxl
KQogICAgIDogbV9jdXJyZW50V2lkdGgoMCkKICAgICAsIG1fY3VycmVudEhlaWdodCgwKQogICAg
ICwgbV9jb250ZXh0T2JqKDApCkBAIC0xMjIsNiArMTIyLDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6
OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBI
b3N0V2kKICAgICAsIG1fcHJpdmF0ZShhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKHRoaXMpKSkKIHsKICAgICBVTlVTRURfUEFSQU0oaG9zdFdpbmRvdyk7CisgICAgVU5VU0VE
X1BBUkFNKHJlbmRlclN0eWxlKTsKIAogICAgIFZlY3RvcjxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0
ZT4gYXR0cmliczsKICAgICBDR0xQaXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdE9iaiA9IDA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAppbmRleCBmZDQ1MDE0Li45OGUxMTQ1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKQEAgLTI1Niw3ICsyNTYs
NyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZQogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJ
TlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKwogICAgIEdDM0RlbnVtIG9wZW5HTEludGVybmFsRm9ybWF0ID0gaW50
ZXJuYWxmb3JtYXQ7CiAgICAgaWYgKHR5cGUgPT0gR0xfRkxPQVQpIHsKICAgICAgICAgaWYgKGZv
cm1hdCA9PSBHTF9SR0JBKQpAQCAtMjY1LDcgKzI2NSw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlCiAgICAgICAgICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdMX1JHQjMyRl9BUkI7CiAg
ICAgfQogCi0gICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgb3BlbkdMSW50ZXJuYWxG
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAg
IHRleEltYWdlMkREaXJlY3QodGFyZ2V0LCBsZXZlbCwgb3BlbkdMSW50ZXJuYWxGb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogICAgIHJldHVybiB0
cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNw
cAppbmRleCAyMjU2MjgyLi40YWRiYTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHQzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTcwLDYgKzcwLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZVdyYXBwZXJGb3JDdXJyZW50R0xDb250ZXh0KCkKK3sKKyAgICBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoQXR0
cmlidXRlcygpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyVG9DdXJyZW50R0xDb250ZXh0
KSk7CisgICAgcmV0dXJuIGNvbnRleHQtPm1fcHJpdmF0ZSA/IGNvbnRleHQucmVsZWFzZSgpIDog
MDsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29u
c3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQogewogICAgIEV4dGVuc2lvbnMz
RCogZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKQEAgLTEzODIsNiArMTM4OCwxMiBAQCBi
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoKSBjb25zdAogICAgIHJldHVy
biBtX2xheWVyQ29tcG9zaXRlZDsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1h
Z2UyRERpcmVjdChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9y
ZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5
cGUsIHBpeGVscyk7Cit9CisKIH0KIAogI2VuZGlmIC8vIFVTRSgzRF9HUkFQSElDUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAppbmRleCA5ZGJiNDgzLi40ZDE1MzBj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCkBAIC0zMSw2ICsz
MSw3IEBACiAjaWYgVVNFKDNEX0dSQVBISUNTKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKKwogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKQEAgLTIwMSw4ICsyMDIsOCBAQCBib29sIEdy
YXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZQogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVF
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisKKyAgICB0ZXhJbWFn
ZTJERGlyZWN0KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBi
b3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250
ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0NvbnRleHQzRFF0LmNwcAppbmRleCBjYjgyNGY2Li40ZDY5ZDcxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQz
RFF0LmNwcApAQCAtNjEsNyArNjEsNyBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUK
ICNlbmRpZgogewogcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGlj
c0NvbnRleHQzRCosIEhvc3RXaW5kb3cqKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUo
R3JhcGhpY3NDb250ZXh0M0QqLCBIb3N0V2luZG93KiwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRl
clN0eWxlKTsKICAgICB+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCk7CiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC03NSw2ICs3NSw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IGJsaXRNdWx0aXNhbXBsZUZyYW1lYnVmZmVyKCkgY29uc3Q7CiAgICAgdm9pZCBibGl0TXVsdGlz
YW1wbGVGcmFtZWJ1ZmZlckFuZFJlc3RvcmVDb250ZXh0KCkgY29uc3Q7CiAgICAgYm9vbCBtYWtl
Q3VycmVudElmTmVlZGVkKCkgY29uc3Q7CisgICAgdm9pZCBjcmVhdGVPZmZzY3JlZW5CdWZmZXJz
KCk7CisgICAgdm9pZCBpbml0aWFsaXplQU5HTEUoKTsKICAgICB2b2lkIGNyZWF0ZUdyYXBoaWNz
U3VyZmFjZXMoY29uc3QgSW50U2l6ZSYpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29u
dGV4dDsKQEAgLTEwNCw3ICsxMDYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNl
U2hhZGVyQ29tcGlsZXIoKQogfQogI2VuZGlmCiAKLUdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBIb3N0
V2luZG93KiBob3N0V2luZG93KQorR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKICAg
ICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9ob3N0V2luZG93KGhvc3RXaW5kb3cpCiAg
ICAgLCBtX3N1cmZhY2UoMCkKQEAgLTEyMSw2ICsxMjMsMTIgQEAgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIEgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmIChyZW5kZXJTdHlsZSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6UmVuZGVyVG9DdXJyZW50R0xDb250ZXh0KSB7CisgICAgICAgIG1f
cGxhdGZvcm1Db250ZXh0ID0gUU9wZW5HTENvbnRleHQ6OmN1cnJlbnRDb250ZXh0KCk7CisgICAg
ICAgIG1fc3VyZmFjZSA9IG1fcGxhdGZvcm1Db250ZXh0LT5zdXJmYWNlKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKICAgICAvLyBGSVhNRTog
RmluZCBhIHdheSB0byBjcmVhdGUgYSBRT3BlbkdMQ29udGV4dCB3aXRob3V0IGNyZWF0aW5nIGEg
UVdpbmRvdyBhdCBhbGwuCiAgICAgLy8gV2UgbmVlZCB0byBjcmVhdGUgYSBzdXJmYWNlIGluIG9y
ZGVyIHRvIGNyZWF0ZSBhIFFPcGVuR0xDb250ZXh0IGFuZCBtYWtlIGl0IGN1cnJlbnQuCkBAIC0x
NDYsMTIgKzE1NCw2NyBAQCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSAogI2VuZGlmCiB9CiAKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVPZmZzY3JlZW5CdWZmZXJzKCkKK3sK
KyAgICBnbEdlbkZyYW1lYnVmZmVycygvKiBjb3VudCAqLyAxLCAmbV9jb250ZXh0LT5tX2Zibyk7
CisKKyAgICBnbEdlblRleHR1cmVzKDEsICZtX2NvbnRleHQtPm1fdGV4dHVyZSk7CisgICAgZ2xC
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb250ZXh0LT5tX3Rl
eHR1cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkxJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6TElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3ND
b250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyaShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBH
cmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgZ2xCaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CisKKyAgICAvLyBDcmVhdGUgYSBtdWx0aXNh
bXBsZSBGQk8uCisgICAgaWYgKG1fY29udGV4dC0+bV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAg
ICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fY29udGV4dC0+bV9tdWx0aXNhbXBsZUZCTyk7Cisg
ICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
bV9jb250ZXh0LT5tX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgbV9jb250ZXh0LT5tX2JvdW5k
RkJPID0gbV9jb250ZXh0LT5tX211bHRpc2FtcGxlRkJPOworICAgICAgICBnbEdlblJlbmRlcmJ1
ZmZlcnMoMSwgJm1fY29udGV4dC0+bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAg
aWYgKG1fY29udGV4dC0+bV9hdHRycy5zdGVuY2lsIHx8IG1fY29udGV4dC0+bV9hdHRycy5kZXB0
aCkKKyAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9jb250ZXh0LT5tX211bHRp
c2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBCaW5k
IGNhbnZhcyBGQk8uCisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgbV9jb250ZXh0LT5tX2Zibyk7CisgICAgICAgIG1fY29udGV4dC0+bV9i
b3VuZEZCTyA9IG1fY29udGV4dC0+bV9mYm87CisjaWYgVVNFKE9QRU5HTF9FU18yKQorICAgICAg
ICBpZiAobV9jb250ZXh0LT5tX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgZ2xHZW5SZW5kZXJi
dWZmZXJzKDEsICZtX2NvbnRleHQtPm1fZGVwdGhCdWZmZXIpOworICAgICAgICBpZiAobV9jb250
ZXh0LT5tX2F0dHJzLnN0ZW5jaWwpCisgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwg
Jm1fY29udGV4dC0+bV9zdGVuY2lsQnVmZmVyKTsKKyNlbmRpZgorICAgICAgICBpZiAobV9jb250
ZXh0LT5tX2F0dHJzLnN0ZW5jaWwgfHwgbV9jb250ZXh0LT5tX2F0dHJzLmRlcHRoKQorICAgICAg
ICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2NvbnRleHQtPm1fZGVwdGhTdGVuY2lsQnVm
ZmVyKTsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppbml0aWFs
aXplQU5HTEUoKQoreworICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlczsKKyAg
ICBTaEluaXRCdWlsdEluUmVzb3VyY2VzKCZBTkdMRVJlc291cmNlcyk7CisKKyAgICBtX2NvbnRl
eHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZB
TkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJzKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xF
UmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAgICBtX2NvbnRleHQtPmdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkFSWUlOR19WRUNUT1JTLCAmQU5HTEVSZXNv
dXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVz
b3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBtX2NvbnRleHQtPmdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklU
UywgJkFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIG1f
Y29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdF
X1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMpOworICAgIG1fY29u
dGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JN
X1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKKwor
ICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgorICAgIEFOR0xFUmVzb3VyY2Vz
Lk1heERyYXdCdWZmZXJzID0gMTsKKyAgICBtX2NvbnRleHQtPm1fY29tcGlsZXIuc2V0UmVzb3Vy
Y2VzKEFOR0xFUmVzb3VyY2VzKTsKK30KKwogR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp+R3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlKCkKIHsKLSAgICBkZWxldGUgbV9zdXJmYWNlOwotICAgIG1f
c3VyZmFjZSA9IDA7Ci0gICAgLy8gUGxhdGZvcm0gY29udGV4dCBpcyBhc3N1bWVkIHRvIGJlIG93
bmVkIGJ5IHN1cmZhY2UuCi0gICAgbV9wbGF0Zm9ybUNvbnRleHQgPSAwOworICAgIGlmIChtX2hv
c3RXaW5kb3cpIHsKKyAgICAgICAgZGVsZXRlIG1fc3VyZmFjZTsKKyAgICAgICAgbV9zdXJmYWNl
ID0gMDsKKyAgICAgICAgLy8gUGxhdGZvcm0gY29udGV4dCBpcyBhc3N1bWVkIHRvIGJlIG93bmVk
IGJ5IHN1cmZhY2UuCisgICAgICAgIG1fcGxhdGZvcm1Db250ZXh0ID0gMDsKKyAgICB9CiB9CiAK
IHN0YXRpYyBpbmxpbmUgcXVpbnQzMiBzd2FwQmdyVG9SZ2IocXVpbnQzMiBwaXhlbCkKQEAgLTI5
MCwxNSArMzUzLDE2IEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29u
dGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpCiAgICAgLy8gVGhpcyBpbXBs
ZW1lbnRhdGlvbiBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IHJlbmRlcmluZyBkaXJlY3RseSB0
byB0aGUgSG9zdFdpbmRvdy4KICAgICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3cpCiAgICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRycywgaG9z
dFdpbmRvdywgZmFsc2UpKTsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQg
PSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3csIHJlbmRl
clN0eWxlKSk7CiAgICAgcmV0dXJuIGNvbnRleHQtPm1fcHJpdmF0ZSA/IGNvbnRleHQucmVsZWFz
ZSgpIDogMDsKIH0KIAotR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBi
b29sKQorR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0Nv
bnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiAgICAgOiBtX2N1cnJlbnRXaWR0aCgw
KQogICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCiAgICAgLCBtX2NvbXBpbGVyKGlzR0xFUzJDb21w
bGlhbnQoKSA/IFNIX0VTU0xfT1VUUFVUIDogU0hfR0xTTF9PVVRQVVQpCiAgICAgLCBtX2F0dHJz
KGF0dHJzKQorICAgICwgbV9yZW5kZXJTdHlsZShyZW5kZXJTdHlsZSkKICAgICAsIG1fdGV4dHVy
ZSgwKQogICAgICwgbV9jb21wb3NpdG9yVGV4dHVyZSgwKQogICAgICwgbV9mYm8oMCkKQEAgLTMx
NSw3ICszNzksNyBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQogICAgICwgbV9tdWx0aXNhbXBs
ZUZCTygwKQogICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQogICAgICwg
bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCi0gICAgLCBtX3ByaXZhdGUoYWRvcHRQdHIobmV3
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSh0aGlzLCBob3N0V2luZG93KSkpCisgICAgLCBtX3By
aXZhdGUoYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSh0aGlzLCBob3N0V2lu
ZG93LCByZW5kZXJTdHlsZSkpKQogewogICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwogCkBAIC0z
MzYsNTQgKzQwMCwxMCBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgLy8gQ3JlYXRlIGJ1ZmZlcnMgZm9yIHRoZSBjYW52YXMgRkJPLgotICAg
IGdsR2VuRnJhbWVidWZmZXJzKC8qIGNvdW50ICovIDEsICZtX2Zibyk7CisgICAgaWYgKHJlbmRl
clN0eWxlID09IFJlbmRlck9mZnNjcmVlbikKKyAgICAgICAgbV9wcml2YXRlLT5jcmVhdGVPZmZz
Y3JlZW5CdWZmZXJzKCk7CiAKLSAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAg
IGdsQmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZSk7
Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElO
RUFSKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpMSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQz
RDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNz
Q29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwKTsKLQotICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZC
Ty4KLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZl
cnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICBt
X2JvdW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKLSAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJz
KDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBpZiAobV9hdHRycy5zdGVu
Y2lsIHx8IG1fYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwg
Jm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IC8vIEJpbmQgY2FudmFzIEZCTy4KLSAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIG1fYm91bmRGQk8gPSBtX2Zi
bzsKLSNpZiBVU0UoT1BFTkdMX0VTXzIpCi0gICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQotICAg
ICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKLSAgICAgICAg
aWYgKG1fYXR0cnMuc3RlbmNpbCkKLSAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAm
bV9zdGVuY2lsQnVmZmVyKTsKLSNlbmRpZgotICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8
IG1fYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVw
dGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9Ci0KLSAgICAvLyBBTkdMRSBpbml0aWFsaXphdGlvbi4K
LSAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXM7Ci0gICAgU2hJbml0QnVpbHRJ
blJlc291cmNlcygmQU5HTEVSZXNvdXJjZXMpOwotCi0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0
dHJpYnMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VO
SUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsK
LSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUywg
JkFOR0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFw
aGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNv
dXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIGdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVz
b3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOyAKLSAgICBnZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNl
cy5NYXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhGcmFn
bWVudFVuaWZvcm1WZWN0b3JzKTsKLQotICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdM
IEVTLgotICAgIEFOR0xFUmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0gMTsKLSAgICBtX2NvbXBp
bGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CisgICAgbV9wcml2YXRlLT5pbml0aWFs
aXplQU5HTEUoKTsKIAogI2lmICFVU0UoT1BFTkdMX0VTXzIpCiAgICAgZ2xFbmFibGUoR0xfUE9J
TlRfU1BSSVRFKTsKQEAgLTQzNyw3ICs0NTcsNyBAQCBQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0Nv
bnRleHQzRDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
Om1ha2VDb250ZXh0Q3VycmVudCgpCiB7Ci0gICAgaWYgKCFtX3ByaXZhdGUpCisgICAgaWYgKCFt
X3ByaXZhdGUgfHwgbV9yZW5kZXJTdHlsZSA9PSBSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gbV9wcml2YXRlLT5tYWtlQ3VycmVudElm
TmVlZGVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IGM2YjFlMjguLjBiMDAzZWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0zOCwxMyArMzgsNiBAQAogCiAjaWYgUExBVEZP
Uk0oUVQpCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VRdC5oIgotI2luY2x1ZGUgPFFPcGVuR0xDb250
ZXh0PgotI2VsaWYgT1MoV0lORE9XUykKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZWxpZiBPUyhN
QUNfT1NfWCkKLSNpbmNsdWRlIDxBR0wvYWdsLmg+Ci0jZWxpZiBkZWZpbmVkKFhQX1VOSVgpCi0j
aW5jbHVkZSA8R0wvZ2x4Lmg+CiAjZW5kaWYKIAogI2lmIFVTRShDQUlSTykKQEAgLTUzLDcwICs0
Niw0MyBAQAogI2luY2x1ZGUgPGNhaXJvLmg+CiAjZW5kaWYKIAotI2RlZmluZSBHTF9DTUQoLi4u
KSBkbyB7IF9fVkFfQVJHU19fOyBBU1NFUlRfQVJHKF9fVkFfQVJHU19fLCAhZ2xHZXRFcnJvcigp
KTsgfSB3aGlsZSAoMCkKKyNpZiAhVVNFKFRFWE1BUF9PUEVOR0xfRVNfMikKKy8vIEZJWE1FOiBN
b3ZlIHRvIEV4dGVuc2lvbnMzRC5oLgorI2RlZmluZSBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIg
MHg4NEY1CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViAweDgzNjcKKyNkZWZp
bmUgR0xfVU5QQUNLX1JPV19MRU5HVEggMHgwQ0YyCisjZGVmaW5lIEdMX1VOUEFDS19TS0lQX1BJ
WEVMUyAweDBDRjQKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUk9XUyAweDBDRjMKKyNlbmRpZgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAgICAg
c3RydWN0IFNoYXJlZEdMRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZEdMRGF0YT4gewot
I2lmIFBMQVRGT1JNKFFUKQotICAgICAgICB0eXBlZGVmIFFPcGVuR0xDb250ZXh0KiBHTENvbnRl
eHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdMQ29udGV4dCgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBRT3BlbkdMQ29udGV4dDo6Y3VycmVudENvbnRleHQo
KTsKLSAgICAgICAgfQotI2VsaWYgT1MoV0lORE9XUykKLSAgICAgICAgdHlwZWRlZiBIR0xSQyBH
TENvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdMQ29udGV4dCgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB3Z2xHZXRDdXJyZW50Q29udGV4dCgpOwot
ICAgICAgICB9Ci0jZWxpZiBPUyhNQUNfT1NfWCkKLSAgICAgICAgdHlwZWRlZiBBR0xDb250ZXh0
IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0
KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFnbEdldEN1cnJlbnRDb250ZXh0KCk7
Ci0gICAgICAgIH0KLSNlbGlmIGRlZmluZWQoWFBfVU5JWCkKLSAgICAgICAgdHlwZWRlZiBHTFhD
b250ZXh0IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xD
b250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsWEdldEN1cnJlbnRDb250
ZXh0KCk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIC8vIERlZmF1bHQgaW1wbGVtZW50YXRp
b24gZm9yIHVua25vd24gb3BlbmdsLgotICAgICAgICAvLyBSZXR1cm5zIGFsd2F5cyBpbmNyZWFz
aW5nIG51bWJlciBhbmQgZGlzYWJsZXMgR0wgY29udGV4dCBkYXRhIHNoYXJpbmcuCi0gICAgICAg
IHR5cGVkZWYgdW5zaWduZWQgaW50IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4
dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RhdGljIEdM
Q29udGV4dCBkdW1teUNvbnRleHRDb3VudGVyID0gMDsKLSAgICAgICAgICAgIHJldHVybiArK2R1
bW15Q29udGV4dENvdW50ZXI7Ci0gICAgICAgIH0KLQotI2VuZGlmCiAKLSAgICAgICAgdHlwZWRl
ZiBIYXNoTWFwPEdMQ29udGV4dCwgU2hhcmVkR0xEYXRhKj4gR0xDb250ZXh0RGF0YU1hcDsKKyAg
ICAgICAgdHlwZWRlZiBIYXNoTWFwPFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QsIFNoYXJlZEdM
RGF0YSo+IEdMQ29udGV4dERhdGFNYXA7CiAgICAgICAgIHN0YXRpYyBHTENvbnRleHREYXRhTWFw
JiBnbENvbnRleHREYXRhTWFwKCkKICAgICAgICAgewogICAgICAgICAgICAgc3RhdGljIEdMQ29u
dGV4dERhdGFNYXAgbWFwOwogICAgICAgICAgICAgcmV0dXJuIG1hcDsKICAgICAgICAgfQogCi0g
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEdMRGF0YT4gY3VycmVudFNoYXJlZEdMRGF0
YSgpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEdMRGF0YT4gY3VycmVudFNoYXJl
ZEdMRGF0YShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICAgICAgewotICAgICAgICAg
ICAgR0xDb250ZXh0IGN1cnJlbnRHTENvbmV4dCA9IGdldEN1cnJlbnRHTENvbnRleHQoKTsKLSAg
ICAgICAgICAgIEdMQ29udGV4dERhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gZ2xDb250ZXh0RGF0YU1h
cCgpLmZpbmQoY3VycmVudEdMQ29uZXh0KTsKKyAgICAgICAgICAgIEdMQ29udGV4dERhdGFNYXA6
Oml0ZXJhdG9yIGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgpLmZpbmQoY29udGV4dC0+cGxhdGZvcm1H
cmFwaGljc0NvbnRleHQzRCgpKTsKICAgICAgICAgICAgIGlmIChpdCAhPSBnbENvbnRleHREYXRh
TWFwKCkuZW5kKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CiAKLSAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkR0xEYXRhKGdldEN1cnJlbnRHTENvbnRl
eHQoKSkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRHTERhdGEoY29u
dGV4dCkpOwogICAgICAgICB9CiAKIAogCiAgICAgICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyIHRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwogCi0gICAgICAgIFNoYXJlZEdMRGF0YShH
TENvbnRleHQgZ2xDb250ZXh0KQorICAgICAgICBTaGFyZWRHTERhdGEoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQpCisgICAgICAgICAgICA6IHRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKGNv
bnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsQ29udGV4dERhdGFNYXAoKS5hZGQoZ2xD
b250ZXh0LCB0aGlzKTsKKyAgICAgICAgICAgIGdsQ29udGV4dERhdGFNYXAoKS5hZGQoY29udGV4
dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpLCB0aGlzKTsKICAgICAgICAgfQogCiAgICAg
ICAgIH5TaGFyZWRHTERhdGEoKQpAQCAtMTM1LDMwICsxMDEsMzIgQEAgc3RydWN0IFRleHR1cmVN
YXBwZXJHTERhdGEgewogCiAgICAgU2hhcmVkR0xEYXRhJiBzaGFyZWRHTERhdGEoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuICoobV9zaGFyZWRHTERhdGEuZ2V0KCkpOworICAgICAgICBy
ZXR1cm4gKm1fc2hhcmVkR0xEYXRhOwogICAgIH0KIAogICAgIHZvaWQgaW5pdGlhbGl6ZVN0ZW5j
aWwoKTsKIAotICAgIFRleHR1cmVNYXBwZXJHTERhdGEoKQotICAgICAgICA6IFBhaW50RmxhZ3Mo
MCkKKyAgICBUZXh0dXJlTWFwcGVyR0xEYXRhKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQor
ICAgICAgICA6IGNvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBQYWludEZsYWdzKDApCiAgICAg
ICAgICwgcHJldmlvdXNQcm9ncmFtKDApCiAgICAgICAgICwgdGFyZ2V0RnJhbWVCdWZmZXIoMCkK
ICAgICAgICAgLCBkaWRNb2RpZnlTdGVuY2lsKGZhbHNlKQogICAgICAgICAsIHByZXZpb3VzU2Np
c3NvclN0YXRlKDApCiAgICAgICAgICwgcHJldmlvdXNEZXB0aFN0YXRlKDApCi0gICAgICAgICwg
bV9zaGFyZWRHTERhdGEoVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpjdXJyZW50
U2hhcmVkR0xEYXRhKCkpCisgICAgICAgICwgbV9zaGFyZWRHTERhdGEoVGV4dHVyZU1hcHBlckdM
RGF0YTo6U2hhcmVkR0xEYXRhOjpjdXJyZW50U2hhcmVkR0xEYXRhKHRoaXMtPmNvbnRleHQpKQog
ICAgIHsgfQogCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQ7CiAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggcHJvamVjdGlvbk1hdHJpeDsKICAgICBUZXh0dXJlTWFwcGVyOjpQYWludEZs
YWdzIFBhaW50RmxhZ3M7Ci0gICAgR0xpbnQgcHJldmlvdXNQcm9ncmFtOwotICAgIEdMaW50IHRh
cmdldEZyYW1lQnVmZmVyOworICAgIEdDM0RpbnQgcHJldmlvdXNQcm9ncmFtOworICAgIEdDM0Rp
bnQgdGFyZ2V0RnJhbWVCdWZmZXI7CiAgICAgYm9vbCBkaWRNb2RpZnlTdGVuY2lsOwotICAgIEdM
aW50IHByZXZpb3VzU2Npc3NvclN0YXRlOwotICAgIEdMaW50IHByZXZpb3VzRGVwdGhTdGF0ZTsK
LSAgICBHTGludCB2aWV3cG9ydFs0XTsKLSAgICBHTGludCBwcmV2aW91c1NjaXNzb3JbNF07Cisg
ICAgR0MzRGludCBwcmV2aW91c1NjaXNzb3JTdGF0ZTsKKyAgICBHQzNEaW50IHByZXZpb3VzRGVw
dGhTdGF0ZTsKKyAgICBHQzNEaW50IHZpZXdwb3J0WzRdOworICAgIEdDM0RpbnQgcHJldmlvdXNT
Y2lzc29yWzRdOwogICAgIFJlZlB0cjxTaGFyZWRHTERhdGE+IG1fc2hhcmVkR0xEYXRhOwogICAg
IFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBjdXJyZW50U3VyZmFjZTsKIH07CkBAIC0xODIsMjUgKzE1
MCwyNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjpwb3AoKQogICAgIGNsaXBT
dGFjay5yZW1vdmVMYXN0KCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNjaXNzb3JDbGlwKGNvbnN0IElu
dFJlY3QmIHJlY3QpCitzdGF0aWMgdm9pZCBzY2lzc29yQ2xpcChHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAocmVjdC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEdMaW50IHZpZXdwb3J0WzRdOwotICAgIEdMX0NNRChn
bEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCB2aWV3cG9ydCkpOwotICAgIEdMX0NNRChnbFNjaXNz
b3IocmVjdC54KCksIHZpZXdwb3J0WzNdIC0gcmVjdC5tYXhZKCksIHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSkpOworICAgIEdDM0RpbnQgdmlld3BvcnRbNF07CisgICAgY29udGV4dC0+Z2V0
SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JULCB2aWV3cG9ydCk7CisgICAgY29u
dGV4dC0+c2Npc3NvcihyZWN0LngoKSwgdmlld3BvcnRbM10gLSByZWN0Lm1heFkoKSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OkNsaXBT
dGFjazo6YXBwbHkoKQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjazo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7Ci0gICAgc2Npc3NvckNsaXAoY2xpcFN0YXRlLnNj
aXNzb3JCb3gpOwotICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9LRUVQLCBHTF9LRUVQLCBHTF9L
RUVQKSk7Ci0gICAgR0xfQ01EKGdsU3RlbmNpbEZ1bmMoR0xfRVFVQUwsIGNsaXBTdGF0ZS5zdGVu
Y2lsSW5kZXggLSAxLCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSkpOworICAgIHNjaXNzb3JD
bGlwKGNvbnRleHQsIGNsaXBTdGF0ZS5zY2lzc29yQm94KTsKKyAgICBjb250ZXh0LT5zdGVuY2ls
T3AoR3JhcGhpY3NDb250ZXh0M0Q6OktFRVAsIEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQLCBHcmFw
aGljc0NvbnRleHQzRDo6S0VFUCk7CisgICAgY29udGV4dC0+c3RlbmNpbEZ1bmMoR3JhcGhpY3ND
b250ZXh0M0Q6OkVRVUFMLCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSwgY2xpcFN0YXRlLnN0
ZW5jaWxJbmRleCAtIDEpOwogICAgIGlmIChjbGlwU3RhdGUuc3RlbmNpbEluZGV4ID09IDEpCi0g
ICAgICAgIEdMX0NNRChnbERpc2FibGUoR0xfU1RFTkNJTF9URVNUKSk7CisgICAgICAgIGNvbnRl
eHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCk7CiAgICAgZWxzZQot
ICAgICAgICBHTF9DTUQoZ2xFbmFibGUoR0xfU1RFTkNJTF9URVNUKSk7CisgICAgICAgIGNvbnRl
eHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKTsKIH0KIAogCkBAIC0y
MTQsOCArMTgyLDggQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0xEYXRhOjppbml0aWFsaXplU3RlbmNp
bCgpCiAgICAgaWYgKGRpZE1vZGlmeVN0ZW5jaWwpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdM
X0NNRChnbENsZWFyU3RlbmNpbCgwKSk7Ci0gICAgR0xfQ01EKGdsQ2xlYXIoR0xfU1RFTkNJTF9C
VUZGRVJfQklUKSk7CisgICAgY29udGV4dC0+Y2xlYXJTdGVuY2lsKDApOworICAgIGNvbnRleHQt
PmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOwogICAgIGRpZE1v
ZGlmeVN0ZW5jaWwgPSB0cnVlOwogfQogCkBAIC0yMjksMTAgKzE5NywxMSBAQCBCaXRtYXBUZXh0
dXJlR0wqIHRvQml0bWFwVGV4dHVyZUdMKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpCiAKIFRleHR1
cmVNYXBwZXJHTDo6VGV4dHVyZU1hcHBlckdMKCkKICAgICA6IFRleHR1cmVNYXBwZXIoT3BlbkdM
TW9kZSkKLSAgICAsIG1fZGF0YShuZXcgVGV4dHVyZU1hcHBlckdMRGF0YSkKICAgICAsIG1fY29u
dGV4dCgwKQogICAgICwgbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcoZmFsc2UpCiB7
CisgICAgbV9jb250ZXh0M0QgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlV3JhcHBlckZvckN1
cnJlbnRHTENvbnRleHQoKTsKKyAgICBtX2RhdGEgPSBuZXcgVGV4dHVyZU1hcHBlckdMRGF0YSht
X2NvbnRleHQzRC5nZXQoKSk7CiB9CiAKIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrJiBUZXh0
dXJlTWFwcGVyR0w6OmNsaXBTdGFjaygpCkBAIC0yNDIsMTUgKzIxMSw5IEBAIFRleHR1cmVNYXBw
ZXJHTDo6Q2xpcFN0YWNrJiBUZXh0dXJlTWFwcGVyR0w6OmNsaXBTdGFjaygpCiAKIHZvaWQgVGV4
dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKFBhaW50RmxhZ3MgZmxhZ3MpCiB7Ci0gICAgLy8g
TWFrZSBzdXJlIHRoYXQgbm8gR0wgZXJyb3IgY29kZSBzdGF5cyBmcm9tIHByZXZpb3VzIG9wZXJh
dGlvbnMuCi0gICAgZ2xHZXRFcnJvcigpOwotCi0gICAgaWYgKCFpbml0aWFsaXplT3BlbkdMU2hp
bXMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfQ1VS
UkVOVF9QUk9HUkFNLCAmZGF0YSgpLnByZXZpb3VzUHJvZ3JhbSkpOwotICAgIGRhdGEoKS5wcmV2
aW91c1NjaXNzb3JTdGF0ZSA9IGdsSXNFbmFibGVkKEdMX1NDSVNTT1JfVEVTVCk7Ci0gICAgZGF0
YSgpLnByZXZpb3VzRGVwdGhTdGF0ZSA9IGdsSXNFbmFibGVkKEdMX0RFUFRIX1RFU1QpOworICAg
IG1fY29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9QUk9H
UkFNLCAmZGF0YSgpLnByZXZpb3VzUHJvZ3JhbSk7CisgICAgZGF0YSgpLnByZXZpb3VzU2Npc3Nv
clN0YXRlID0gbV9jb250ZXh0M0QtPmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUKTsKKyAgICBkYXRhKCkucHJldmlvdXNEZXB0aFN0YXRlID0gbV9jb250ZXh0M0QtPmlz
RW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCk7CiAjaWYgUExBVEZPUk0oUVQp
CiAgICAgaWYgKG1fY29udGV4dCkgewogICAgICAgICBRUGFpbnRlciogcGFpbnRlciA9IG1fY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CkBAIC0yNTgsMTUgKzIyMSwxNSBAQCB2b2lkIFRleHR1
cmVNYXBwZXJHTDo6YmVnaW5QYWludGluZyhQYWludEZsYWdzIGZsYWdzKQogICAgICAgICBwYWlu
dGVyLT5iZWdpbk5hdGl2ZVBhaW50aW5nKCk7CiAgICAgfQogI2VuZGlmCi0gICAgZ2xEaXNhYmxl
KEdMX0RFUFRIX1RFU1QpOwotICAgIGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgbV9j
b250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1QpOworICAgIG1f
Y29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAg
ZGF0YSgpLmRpZE1vZGlmeVN0ZW5jaWwgPSBmYWxzZTsKLSAgICBHTF9DTUQoZ2xEZXB0aE1hc2so
MCkpOwotICAgIEdMX0NNRChnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCBkYXRhKCkudmlld3Bv
cnQpKTsKLSAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9TQ0lTU09SX0JPWCwgZGF0YSgpLnBy
ZXZpb3VzU2Npc3NvcikpOwotICAgIGdsR2V0SW50ZWdlcnYoR0xfRlJBTUVCVUZGRVJfQklORElO
RywgJmRhdGEoKS50YXJnZXRGcmFtZUJ1ZmZlcik7CisgICAgbV9jb250ZXh0M0QtPmRlcHRoTWFz
aygwKTsKKyAgICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlZJ
RVdQT1JULCBkYXRhKCkudmlld3BvcnQpOworICAgIG1fY29udGV4dDNELT5nZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1gsIGRhdGEoKS5wcmV2aW91c1NjaXNzb3IpOwor
ICAgIG1fY29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVJfQklORElORywgJmRhdGEoKS50YXJnZXRGcmFtZUJ1ZmZlcik7CiAgICAgbV9jbGlwU3RhY2su
aW5pdChJbnRSZWN0KDAsIDAsIGRhdGEoKS52aWV3cG9ydFsyXSwgZGF0YSgpLnZpZXdwb3J0WzNd
KSk7Ci0gICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfRlJBTUVCVUZGRVJfQklORElORywgJmRh
dGEoKS50YXJnZXRGcmFtZUJ1ZmZlcikpOworICAgIG1fY29udGV4dDNELT5nZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQklORElORywgJmRhdGEoKS50YXJnZXRGcmFt
ZUJ1ZmZlcik7CiAgICAgZGF0YSgpLlBhaW50RmxhZ3MgPSBmbGFnczsKICAgICBiaW5kU3VyZmFj
ZSgwKTsKIH0KQEAgLTI3NCwyMiArMjM3LDIyIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdp
blBhaW50aW5nKFBhaW50RmxhZ3MgZmxhZ3MpCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZW5kUGFp
bnRpbmcoKQogewogICAgIGlmIChkYXRhKCkuZGlkTW9kaWZ5U3RlbmNpbCkgewotICAgICAgICBn
bENsZWFyU3RlbmNpbCgxKTsKLSAgICAgICAgZ2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQp
OworICAgICAgICBtX2NvbnRleHQzRC0+Y2xlYXJTdGVuY2lsKDEpOworICAgICAgICBtX2NvbnRl
eHQzRC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCk7CiAgICAg
fQogCi0gICAgZ2xVc2VQcm9ncmFtKGRhdGEoKS5wcmV2aW91c1Byb2dyYW0pOworICAgIG1fY29u
dGV4dDNELT51c2VQcm9ncmFtKGRhdGEoKS5wcmV2aW91c1Byb2dyYW0pOwogCi0gICAgZ2xTY2lz
c29yKGRhdGEoKS5wcmV2aW91c1NjaXNzb3JbMF0sIGRhdGEoKS5wcmV2aW91c1NjaXNzb3JbMV0s
IGRhdGEoKS5wcmV2aW91c1NjaXNzb3JbMl0sIGRhdGEoKS5wcmV2aW91c1NjaXNzb3JbM10pOwor
ICAgIG1fY29udGV4dDNELT5zY2lzc29yKGRhdGEoKS5wcmV2aW91c1NjaXNzb3JbMF0sIGRhdGEo
KS5wcmV2aW91c1NjaXNzb3JbMV0sIGRhdGEoKS5wcmV2aW91c1NjaXNzb3JbMl0sIGRhdGEoKS5w
cmV2aW91c1NjaXNzb3JbM10pOwogICAgIGlmIChkYXRhKCkucHJldmlvdXNTY2lzc29yU3RhdGUp
Ci0gICAgICAgIGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgICAgIG1fY29udGV4dDNE
LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgZWxzZQotICAg
ICAgICBnbERpc2FibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmRp
c2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAKICAgICBpZiAoZGF0YSgp
LnByZXZpb3VzRGVwdGhTdGF0ZSkKLSAgICAgICAgZ2xFbmFibGUoR0xfREVQVEhfVEVTVCk7Cisg
ICAgICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1Qp
OwogICAgIGVsc2UKLSAgICAgICAgZ2xEaXNhYmxlKEdMX0RFUFRIX1RFU1QpOworICAgICAgICBt
X2NvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCk7CiAKICNp
ZiBQTEFURk9STShRVCkKICAgICBpZiAoIW1fY29udGV4dCkKQEAgLTMwMCw0MCArMjYzLDQwIEBA
IHZvaWQgVGV4dHVyZU1hcHBlckdMOjplbmRQYWludGluZygpCiAjZW5kaWYKIH0KIAotdm9pZCBU
ZXh0dXJlTWFwcGVyR0w6OmRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiBxdWFkVG9EcmF3LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbSogc2hhZGVyUHJvZ3JhbSwgR0xlbnVtIGRyYXdpbmdNb2RlLCBib29sIG5lZWRz
QmxlbmRpbmcpCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQm
IHF1YWRUb0RyYXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgs
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBzaGFkZXJQcm9ncmFtLCBHQzNEZW51bSBkcmF3
aW5nTW9kZSwgYm9vbCBuZWVkc0JsZW5kaW5nKQogewotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01E
KGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIDApKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAg
IG1fY29udGV4dDNELT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIs
IDApOwogCi0gICAgY29uc3QgR0xmbG9hdCBxdWFkW10gPSB7CisgICAgY29uc3QgR0MzRGZsb2F0
IHF1YWRbXSA9IHsKICAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1
YXJlLnAxKCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDEo
KS55KCksCiAgICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5w
MigpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAyKCkueSgp
LAogICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDMoKS54
KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMygpLnkoKSwKICAg
ICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnA0KCkueCgpLCBx
dWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDQoKS55KCkKICAgICB9Owot
ICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0
cmliKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgcXVhZCkpOworICAgIG1fY29udGV4dDNE
LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBH
cmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHF1YWQpKTsKIAog
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRh
dGEoKS5wcm9qZWN0aW9uTWF0cml4KS5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgpLm11bHRpcGx5
KFRyYW5zZm9ybWF0aW9uTWF0cml4KAogICAgICAgICAgICAgcXVhZFRvRHJhdy5vcmlnaW5hbFRh
cmdldFJlY3Qud2lkdGgoKSwgMCwgMCwgMCwKICAgICAgICAgICAgIDAsIHF1YWRUb0RyYXcub3Jp
Z2luYWxUYXJnZXRSZWN0LmhlaWdodCgpLCAwLCAwLAogICAgICAgICAgICAgMCwgMCwgMSwgMCwK
ICAgICAgICAgICAgIHF1YWRUb0RyYXcub3JpZ2luYWxUYXJnZXRSZWN0LngoKSwgcXVhZFRvRHJh
dy5vcmlnaW5hbFRhcmdldFJlY3QueSgpLCAwLCAxKSk7Ci0gICAgY29uc3QgR0xmbG9hdCBtNFtd
ID0geworICAgIEdDM0RmbG9hdCBtNFtdID0gewogICAgICAgICBtYXRyaXgubTExKCksIG1hdHJp
eC5tMTIoKSwgbWF0cml4Lm0xMygpLCBtYXRyaXgubTE0KCksCiAgICAgICAgIG1hdHJpeC5tMjEo
KSwgbWF0cml4Lm0yMigpLCBtYXRyaXgubTIzKCksIG1hdHJpeC5tMjQoKSwKICAgICAgICAgbWF0
cml4Lm0zMSgpLCBtYXRyaXgubTMyKCksIG1hdHJpeC5tMzMoKSwgbWF0cml4Lm0zNCgpLAogICAg
ICAgICBtYXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwgbWF0cml4Lm00MygpLCBtYXRyaXgubTQ0
KCkKICAgICB9OwotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVyUHJvZ3JhbS0+
bWF0cml4TG9jYXRpb24oKSwgMSwgR0xfRkFMU0UsIG00KSk7CisgICAgbV9jb250ZXh0M0QtPnVu
aWZvcm1NYXRyaXg0ZnYoc2hhZGVyUHJvZ3JhbS0+bWF0cml4TG9jYXRpb24oKSwgMSwgZmFsc2Us
IG00KTsKIAogICAgIGlmIChuZWVkc0JsZW5kaW5nKSB7Ci0gICAgICAgIEdMX0NNRChnbEJsZW5k
RnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKTsKLSAgICAgICAgR0xfQ01EKGds
RW5hYmxlKEdMX0JMRU5EKSk7CisgICAgICAgIG1fY29udGV4dDNELT5ibGVuZEZ1bmMoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEp
OworICAgICAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7
CiAgICAgfSBlbHNlCi0gICAgICAgIEdMX0NNRChnbERpc2FibGUoR0xfQkxFTkQpKTsKKyAgICAg
ICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKIAotICAg
IEdMX0NNRChnbERyYXdBcnJheXMoZHJhd2luZ01vZGUsIDAsIDQpKTsKLSAgICBHTF9DTUQoZ2xE
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsK
KyAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhkcmF3aW5nTW9kZSwgMCwgNCk7CisgICAgbV9j
b250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhB
dHRyaWIoKSk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IENv
bG9yJiBjb2xvciwgZmxvYXQgd2lkdGgsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCkKQEAgLTM0MiwxNyArMzA1
LDE3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IENvbG9yJiBjb2xv
ciwgZmxvYXQgd2lkdGgsIGNvbnN0IEZsb2F0UmVjCiAgICAgICAgIHJldHVybjsKIAogICAgIFJl
ZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I+IHByb2dyYW0gPSBkYXRh
KCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuc29saWRDb2xvclBy
b2dyYW0oKTsKLSAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpKTsKKyAgICBt
X2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKTsKIAogICAgIGZsb2F0IGFscGhh
ID0gY29sb3IuYWxwaGEoKSAvIDI1NS4wOwotICAgIEdMX0NNRChnbFVuaWZvcm00Zihwcm9ncmFt
LT5jb2xvckxvY2F0aW9uKCksCisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm00Zihwcm9ncmFtLT5j
b2xvckxvY2F0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAgIChjb2xvci5yZWQoKSAvIDI1
NS4wKSAqIGFscGhhLAogICAgICAgICAgICAgICAgICAgICAgICAoY29sb3IuZ3JlZW4oKSAvIDI1
NS4wKSAqIGFscGhhLAogICAgICAgICAgICAgICAgICAgICAgICAoY29sb3IuYmx1ZSgpIC8gMjU1
LjApICogYWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAgIGFscGhhKSk7Ci0gICAgR0xfQ01E
KGdsTGluZVdpZHRoKHdpZHRoKSk7CisgICAgICAgICAgICAgICAgICAgICAgIGFscGhhKTsKKyAg
ICBtX2NvbnRleHQzRC0+bGluZVdpZHRoKHdpZHRoKTsKIAotICAgIGRyYXdRdWFkKHRhcmdldFJl
Y3QsIG1vZGVsVmlld01hdHJpeCwgcHJvZ3JhbS5nZXQoKSwgR0xfTElORV9MT09QLCBjb2xvci5o
YXNBbHBoYSgpKTsKKyAgICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHBy
b2dyYW0uZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1AsIGNvbG9yLmhhc0FscGhh
KCkpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1JlcGFpbnRDb3VudGVyKGludCB2
YWx1ZSwgaW50IHBvaW50U2l6ZSwgY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgpCkBAIC0zOTksNyArMzYyLDcg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUm
IHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYKICAgICBkcmF3VGV4dHVyZSh0ZXh0dXJlR0wuaWQo
KSwgdGV4dHVyZUdMLmlzT3BhcXVlKCkgPyAwIDogU3VwcG9ydHNCbGVuZGluZywgdGV4dHVyZUdM
LnNpemUoKSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5LCBtYXNrLCBleHBvc2VkRWRnZXMp
OwogfQogCi0jaWYgZGVmaW5lZChHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUpCisjaWYgIVVTRShU
RVhNQVBfT1BFTkdMX0VTXzIpCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVSZWN0
YW5nbGVBUkIodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIHRl
eHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRl
eHR1cmUqIG1hc2tUZXh0dXJlKQogewogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbT4gcHJvZ3JhbTsKQEAgLTQwNywzNiArMzcwLDM2IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdM
OjpkcmF3VGV4dHVyZVJlY3RhbmdsZUFSQih1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywg
Y29uCiAgICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6UmVjdE9wYWNpdHlBbmRNYXNrKTsKICAgICBlbHNlCiAgICAgICAgIHByb2dyYW0gPSBkYXRh
KCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJv
Z3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdFNpbXBsZSk7Ci0gICAgR0xfQ01E
KGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dy
YW0ocHJvZ3JhbS0+aWQoKSk7CiAKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUo
R0xfVEVYVFVSRTApKTsKLSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RB
TkdMRV9BUkIsIHRleHR1cmUpKTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+c291
cmNlVGV4dHVyZUxvY2F0aW9uKCksIDApKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4
QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5h
Y3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CisgICAgbV9jb250ZXh0
M0QtPmJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgdGV4dHVyZSk7CisgICAg
bV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5zb3VyY2VUZXh0dXJlTG9jYXRpb24oKSwg
MCk7CiAKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbS0+ZmxpcExvY2F0aW9uKCksICEh
KGZsYWdzICYgU2hvdWxkRmxpcFRleHR1cmUpKSk7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTJmKHBy
b2dyYW0tPnRleHR1cmVTaXplTG9jYXRpb24oKSwgdGV4dHVyZVNpemUud2lkdGgoKSwgdGV4dHVy
ZVNpemUuaGVpZ2h0KCkpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPmZs
aXBMb2NhdGlvbigpLCAhIShmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSk7CisgICAgbV9jb250
ZXh0M0QtPnVuaWZvcm0yZihwcm9ncmFtLT50ZXh0dXJlU2l6ZUxvY2F0aW9uKCksIHRleHR1cmVT
aXplLndpZHRoKCksIHRleHR1cmVTaXplLmhlaWdodCgpKTsKIAogICAgIGlmIChUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLT5vcGFjaXR5
TG9jYXRpb24oKSkpCi0gICAgICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5
TG9jYXRpb24oKSwgb3BhY2l0eSkpOworICAgICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHBy
b2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5KTsKIAogICAgIGlmIChtYXNrVGV4dHVy
ZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpICYmIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
Ojppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSkp
IHsKICAgICAgICAgY29uc3QgQml0bWFwVGV4dHVyZUdMKiBtYXNrVGV4dHVyZUdMID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMKj4obWFza1RleHR1cmUpOwotICAgICAgICBHTF9D
TUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKSk7Ci0gICAgICAgIEdMX0NNRChnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPmlkKCkpKTsKLSAgICAgICAgR0xf
Q01EKGdsVW5pZm9ybTFpKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSwgMSkpOwotICAg
ICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSk7CisgICAgICAgIG1fY29u
dGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSk7CisgICAg
ICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgbWFza1RleHR1cmVHTC0+aWQoKSk7CisgICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWko
cHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpLCAxKTsKKyAgICAgICAgbV9jb250ZXh0M0Qt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKICAgICB9CiAKICAg
ICBib29sIG5lZWRzQmxlbmRpbmcgPSAoZmxhZ3MgJiBTdXBwb3J0c0JsZW5kaW5nKSB8fCBvcGFj
aXR5IDwgMC45OSB8fCBtYXNrVGV4dHVyZTsKLSAgICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2Rl
bFZpZXdNYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdMX1RSSUFOR0xFX0ZBTiwgbmVlZHNCbGVuZGlu
Zyk7CisgICAgZHJhd1F1YWQodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdl
dCgpLCBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCBuZWVkc0JsZW5kaW5nKTsKIH0K
LSNlbmRpZiAvLyBkZWZpbmVkKEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSkgCisjZW5kaWYgLy8g
IVVTRShURVhNQVBfT1BFTkdMX0VTXzIpCiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4
dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYgLyogdGV4
dHVyZVNpemUgKi8sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFw
VGV4dHVyZSogbWFza1RleHR1cmUsIHVuc2lnbmVkIGV4cG9zZWRFZGdlcykKIHsKLSAgICBib29s
IG5lZWRzQW50aWxpYWluZyA9IG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nICYmICFt
b2RlbFZpZXdNYXRyaXguaXNJbnRlZ2VyVHJhbnNsYXRpb24oKTsKLSAgICBpZiAobmVlZHNBbnRp
bGlhaW5nICYmIGRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh0ZXh0dXJlLCBmbGFncywgdGFy
Z2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5LCBtYXNrVGV4dHVyZSwgZXhwb3NlZEVk
Z2VzKSkKKyAgICBib29sIG5lZWRzQW50aWFsaWFzaW5nID0gbV9lbmFibGVFZGdlRGlzdGFuY2VB
bnRpYWxpYXNpbmcgJiYgIW1vZGVsVmlld01hdHJpeC5pc0ludGVnZXJUcmFuc2xhdGlvbigpOwor
ICAgIGlmIChuZWVkc0FudGlhbGlhc2luZyAmJiBkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmco
dGV4dHVyZSwgZmxhZ3MsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgbWFz
a1RleHR1cmUsIGV4cG9zZWRFZGdlcykpCiAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtOwpAQCAtNDQ0LDE1ICs0MDcsMTUgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIEZsYWdz
IGZsYWdzLCBjb25zdCBJbnRTaXplJgogICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdM
RGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHlBbmRNYXNrKTsKICAgICBlbHNlCiAgICAgICAg
IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2ltcGxlKTsK
LSAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpKTsKKyAgICBtX2NvbnRleHQz
RC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKTsKIAogICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRo
UHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0dXJlLCBmbGFncywgdGFyZ2V0UmVjdCwgbW9kZWxW
aWV3TWF0cml4LCBvcGFjaXR5LCBtYXNrVGV4dHVyZSk7CiB9CiAKLXN0YXRpYyBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCB2aWV3cG9ydE1hdHJpeCgpCitzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXgg
dmlld3BvcnRNYXRyaXgoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCkKIHsKLSAgICBHTGlu
dCB2aWV3cG9ydFs0XTsKLSAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9WSUVXUE9SVCwgdmll
d3BvcnQpKTsKKyAgICBHQzNEaW50IHZpZXdwb3J0WzRdOworICAgIGNvbnRleHQzRC0+Z2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JULCB2aWV3cG9ydCk7CiAKICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CiAgICAgbWF0cml4LnRyYW5zbGF0ZTNkKHZpZXdwb3J0
WzBdLCB2aWV3cG9ydFsxXSwgMCk7CkBAIC01NDksNyArNTEyLDcgQEAgYm9vbCBUZXh0dXJlTWFw
cGVyR0w6OmRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFn
cyBmbGFncywKICAgICAvLyBhbnRpYWxpYXNpbmcuIE5vdGUgaGVyZSB0aGF0IHdlIGFyZSBhbHNv
IGluY2x1ZGluZyB0aGUgdmlld3BvcnQgbWF0cml4ICh3aGljaAogICAgIC8vIHRyYW5zbGF0ZXMg
ZnJvbSBub3JtYWxpemVkIGRldmljZSBjb29yZGluYXRlcyB0byBzY3JlZW4gY29vcmRpbmF0ZXMp
LCBiZWNhdXNlIHRoZXNlCiAgICAgLy8gdmFsdWVzIGFyZSBjb25zdW1lZCBpbiB0aGUgZnJhZ21l
bnQgc2hhZGVyLCB3aGljaCB3b3JrcyBpbiBzY3JlZW4gY29vcmRpbmF0ZXMuCi0gICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggc2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSB2aWV3cG9ydE1hdHJpeCgpLm11
bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KSkubXVs
dGlwbHkobW9kZWxWaWV3TWF0cml4KS50bzJkVHJhbnNmb3JtKCk7CisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggc2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSB2aWV3cG9ydE1hdHJpeChtX2NvbnRleHQz
RC5nZXQoKSkubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25N
YXRyaXgpKS5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgpLnRvMmRUcmFuc2Zvcm0oKTsKICAgICBp
ZiAoIXNjcmVlblNwYWNlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgRmxvYXRRdWFkIHF1YWRJblNjcmVlblNwYWNlID0gc2NyZWVuU3BhY2VUcmFu
c2Zvcm0ubWFwUXVhZChvcmlnaW5hbFRhcmdldFJlY3QpOwpAQCAtNTczLDggKzUzNiw4IEBAIGJv
b2wgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3Qg
dGV4dHVyZSwgRmxhZ3MgZmxhZ3MsCiAgICAgcXVhZFRvRWRnZUFycmF5KGluZmxhdGVRdWFkKHF1
YWRJblNjcmVlblNwYWNlLmJvdW5kaW5nQm94KCksICBpbmZsYXRpb25EaXN0YW5jZSksIHRhcmdl
dFF1YWRFZGdlcyArIDEyKTsKIAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bUFudGlhbGlhc2luZ05vTWFzaz4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5hbnRpYWxpYXNpbmdOb01hc2tQcm9ncmFtKCk7Ci0gICAg
R0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKSk7Ci0gICAgR0xfQ01EKGdsVW5pZm9y
bTNmdihwcm9ncmFtLT5leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbigpLCA4
LCB0YXJnZXRRdWFkRWRnZXMpKTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFt
LT5pZCgpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTNmdihwcm9ncmFtLT5leHBhbmRlZFF1
YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbigpLCA4LCB0YXJnZXRRdWFkRWRnZXMpOwogCiAg
ICAgZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKHByb2dyYW0uZ2V0KCksIHRleHR1cmUsIGZs
YWdzLCBEcmF3UXVhZChvcmlnaW5hbFRhcmdldFJlY3QsIGV4cGFuZGVkUXVhZEluVGV4dHVyZUNv
b3JkaW5hdGVzKSwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5LCAwIC8qIG1hc2tUZXh0dXJlICov
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU4MiwyNiArNTQ1LDI2IEBAIGJvb2wgVGV4dHVyZU1h
cHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVyZSwgRmxh
Z3MgZmxhZ3MsCiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZWRRdWFkV2l0aFBy
b2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHByb2dyYW0sIHVpbnQzMl90IHRleHR1
cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBEcmF3UXVhZCYgcXVhZFRvRHJhdywgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0
bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCiB7Ci0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0
cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xBY3RpdmVU
ZXh0dXJlKEdMX1RFWFRVUkUwKSk7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgdGV4dHVyZSkpOwotICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtLT5zb3VyY2VU
ZXh0dXJlTG9jYXRpb24oKSwgMCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmFjdGl2
ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKyAgICBtX2NvbnRleHQzRC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmUpOworICAg
IG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVyZUxvY2F0aW9uKCks
IDApOwogCi0gICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW0tPmZsaXBMb2NhdGlvbigpLCAh
IShmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSkpOworICAgIG1fY29udGV4dDNELT51bmlmb3Jt
MWYocHJvZ3JhbS0+ZmxpcExvY2F0aW9uKCksICEhKGZsYWdzICYgU2hvdWxkRmxpcFRleHR1cmUp
KTsKIAogICAgIGlmIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1M
b2NhdGlvbihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSkpCi0gICAgICAgIEdMX0NNRChnbFVu
aWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0eSkpOworICAgICAgICBt
X2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5
KTsKIAogICAgIGlmIChtYXNrVGV4dHVyZSAmJiBtYXNrVGV4dHVyZS0+aXNWYWxpZCgpICYmIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0t
Pm1hc2tUZXh0dXJlTG9jYXRpb24oKSkpIHsKICAgICAgICAgY29uc3QgQml0bWFwVGV4dHVyZUdM
KiBtYXNrVGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMKj4obWFz
a1RleHR1cmUpOwotICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKSk7
Ci0gICAgICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1hc2tUZXh0dXJl
R0wtPmlkKCkpKTsKLSAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW0tPm1hc2tUZXh0
dXJlTG9jYXRpb24oKSwgMSkpOwotICAgICAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RF
WFRVUkUwKSk7CisgICAgICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFMSk7CisgICAgICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbWFza1RleHR1cmVHTC0+aWQoKSk7CisgICAgICAg
IG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpLCAx
KTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkUwKTsKICAgICB9CiAKICAgICBib29sIG5lZWRzQmxlbmRpbmcgPSAoZmxhZ3MgJiBT
dXBwb3J0c0JsZW5kaW5nKSB8fCBvcGFjaXR5IDwgMC45OSB8fCBtYXNrVGV4dHVyZTsKLSAgICBk
cmF3UXVhZChxdWFkVG9EcmF3LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0sIEdMX1RSSUFOR0xF
X0ZBTiwgbmVlZHNCbGVuZGluZyk7CisgICAgZHJhd1F1YWQocXVhZFRvRHJhdywgbW9kZWxWaWV3
TWF0cml4LCBwcm9ncmFtLCBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCBuZWVkc0Js
ZW5kaW5nKTsKIH0KIAogYm9vbCBCaXRtYXBUZXh0dXJlR0w6OmNhblJldXNlV2l0aChjb25zdCBJ
bnRTaXplJiBjb250ZW50c1NpemUsIEZsYWdzKQpAQCAtNjEyLDcgKzU3NSw3IEBAIGJvb2wgQml0
bWFwVGV4dHVyZUdMOjpjYW5SZXVzZVdpdGgoY29uc3QgSW50U2l6ZSYgY29udGVudHNTaXplLCBG
bGFncykKICNpZiBPUyhEQVJXSU4pCiAjZGVmaW5lIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFO
U0ZFUl9UWVBFIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFVgogI2Vsc2UKLSNkZWZpbmUgREVG
QVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUgR0xfVU5TSUdORURfQllURQorI2RlZmlu
ZSBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURQogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIHN3aXp6bGVCR1JBVG9SR0JBKHVp
bnQzMl90KiBkYXRhLCBjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgc3RyaWRlID0gMCkKQEAgLTY0
NywzOCArNjEwLDQyIEBAIHN0YXRpYyBib29sIGRyaXZlclN1cHBvcnRzU3ViSW1hZ2UoKQogCiB2
b2lkIEJpdG1hcFRleHR1cmVHTDo6ZGlkUmVzZXQoKQogeworICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CisKICAg
ICBpZiAoIW1faWQpCi0gICAgICAgIEdMX0NNRChnbEdlblRleHR1cmVzKDEsICZtX2lkKSk7Cisg
ICAgICAgIG1faWQgPSBjb250ZXh0M0QtPmNyZWF0ZVRleHR1cmUoKTsKIAogICAgIG1fc2hvdWxk
Q2xlYXIgPSB0cnVlOwogICAgIGlmIChtX3RleHR1cmVTaXplID09IGNvbnRlbnRTaXplKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEdMdWludCBmb3JtYXQgPSBkcml2ZXJTdXBwb3J0c0JHUkFT
d2l6emxpbmcoKSA/IEdMX0JHUkEgOiBHTF9SR0JBOworICAgIFBsYXRmb3JtM0RPYmplY3QgZm9y
bWF0ID0gZHJpdmVyU3VwcG9ydHNCR1JBU3dpenpsaW5nKCkgPyBHcmFwaGljc0NvbnRleHQzRDo6
QkdSQSA6IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwogCiAgICAgbV90ZXh0dXJlU2l6ZSA9IGNv
bnRlbnRTaXplKCk7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9p
ZCkpOwotICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpKTsKLSAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKSk7Ci0gICAgR0xf
Q01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xf
Q0xBTVBfVE9fRURHRSkpOwotICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpKTsKLSAgICBHTF9DTUQoZ2xU
ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIG1fdGV4dHVyZVNpemUud2lkdGgo
KSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgZm9ybWF0LCBERUZBVUxUX1RFWFRVUkVfUElY
RUxfVFJBTlNGRVJfVFlQRSwgMCkpOworICAgIGNvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1faWQpOworICAgIGNvbnRleHQzRC0+dGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgY29udGV4
dDNELT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFS
KTsKKyAgICBjb250ZXh0M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0
M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGNvbnRleHQzRC0+dGV4UGFyYW1ldGVyaShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9U
LCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgY29udGV4dDNELT50ZXhJ
bWFnZTJERGlyZWN0KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBmb3JtYXQsIG1f
dGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgZm9ybWF0LCBE
RUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgMCk7CiB9CiAKIAogdm9pZCBCaXRt
YXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0IEludFJl
Y3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZzZXQsIGludCBieXRlc1Bl
ckxpbmUpCiB7Ci0gICAgR0x1aW50IGdsRm9ybWF0ID0gR0xfUkdCQTsKLSAgICBHTF9DTUQoZ2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKworICAg
IFBsYXRmb3JtM0RPYmplY3QgZ2xGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKKyAg
ICBjb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBt
X2lkKTsKIAogICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OwogICAgIGlmIChk
cml2ZXJTdXBwb3J0c0JHUkFTd2l6emxpbmcoKSkKLSAgICAgICAgZ2xGb3JtYXQgPSBHTF9CR1JB
OworICAgICAgICBnbEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpCR1JBOwogICAgIGVsc2UK
ICAgICAgICAgc3dpenpsZUJHUkFUb1JHQkEocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGNv
bnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKSwgSW50UmVjdChzb3VyY2VPZmZzZXQsIHRhcmdldFJlY3Qu
c2l6ZSgpKSwgYnl0ZXNQZXJMaW5lIC8gYnl0ZXNQZXJQaXhlbCk7CiAKICAgICBpZiAoYnl0ZXNQ
ZXJMaW5lID09IHRhcmdldFJlY3Qud2lkdGgoKSAvIDQgJiYgc291cmNlT2Zmc2V0ID09IEludFBv
aW50Ojp6ZXJvKCkpIHsKLSAgICAgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgo
KSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9U
UkFOU0ZFUl9UWVBFLCAoY29uc3QgY2hhciopZGF0YSkpOworICAgICAgICBjb250ZXh0M0QtPnRl
eFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3Qu
eCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdo
dCgpLCBnbEZvcm1hdCwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIChjb25z
dCBjaGFyKilkYXRhKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjk2LDE5ICs2NjMs
MTkgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRh
dGEsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QKICAgICAgICAgICAgIGRzdCArPSB0YXJnZXRC
eXRlc1BlckxpbmU7CiAgICAgICAgIH0KIAotICAgICAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJE
KEdMX1RFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0
UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgREVGQVVMVF9URVhU
VVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIHRlbXBvcmFyeURhdGEuZGF0YSgpKSk7CisgICAgICAg
IGNvbnRleHQzRC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
MCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRh
cmdldFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNG
RVJfVFlQRSwgdGVtcG9yYXJ5RGF0YS5kYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAjaWYgIWRlZmluZWQoVEVYTUFQX09QRU5HTF9FU18yKQogICAgIC8vIFVzZSB0aGUgT3BlbkdM
IHN1Yi1pbWFnZSBleHRlbnNpb24sIG5vdyB0aGF0IHdlIGtub3cgaXQncyBhdmFpbGFibGUuCi0g
ICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIGJ5dGVzUGVyTGlu
ZSAvIGJ5dGVzUGVyUGl4ZWwpKTsKLSAgICBHTF9DTUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tf
U0tJUF9ST1dTLCBzb3VyY2VPZmZzZXQueSgpKSk7Ci0gICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWko
R0xfVU5QQUNLX1NLSVBfUElYRUxTLCBzb3VyY2VPZmZzZXQueCgpKSk7Ci0gICAgR0xfQ01EKGds
VGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVj
dC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQs
IERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29uc3QgY2hhciopZGF0YSkp
OwotICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCAwKSk7Ci0g
ICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgMCkpOwotICAgIEdM
X0NNRChnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJWEVMUywgMCkpOworICAgIGNvbnRl
eHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIGJ5dGVzUGVyTGluZSAvIGJ5
dGVzUGVyUGl4ZWwpOworICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBf
Uk9XUywgc291cmNlT2Zmc2V0LnkoKSk7CisgICAgY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9V
TlBBQ0tfU0tJUF9QSVhFTFMsIHNvdXJjZU9mZnNldC54KCkpOworICAgIGNvbnRleHQzRC0+dGV4
U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54
KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0
KCksIGdsRm9ybWF0LCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgKGNvbnN0
IGNoYXIqKWRhdGEpOworICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19M
RU5HVEgsIDApOworICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9X
UywgMCk7CisgICAgY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMs
IDApOwogI2VuZGlmCiB9CiAKQEAgLTc0NCwxOSArNzExLDE5IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpkcmF3RmlsdGVyZWQoY29uc3QgQml0bWFwVGV4dHVyZSYgc291cmNlVGV4dHVyZSwgY29u
c3QgQml0CiAKICAgICBwcm9ncmFtLT5wcmVwYXJlKGZpbHRlciwgcGFzcywgc291cmNlVGV4dHVy
ZS5jb250ZW50U2l6ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihjb250
ZW50VGV4dHVyZSkuaWQoKSk7CiAKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xBY3Rp
dmVUZXh0dXJlKEdMX1RFWFRVUkUwKSk7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oc291cmNlVGV4dHVy
ZSkuaWQoKSkpOwotICAgIGdsVW5pZm9ybTFpKHByb2dyYW0tPnRleHR1cmVVbmlmb3JtKCksIDAp
OwotICAgIGNvbnN0IEdMZmxvYXQgdGFyZ2V0VmVydGljZXNbXSA9IHstMSwgLTEsIDEsIC0xLCAx
LCAxLCAtMSwgMX07Ci0gICAgY29uc3QgR0xmbG9hdCBzb3VyY2VWZXJ0aWNlc1tdID0gezAsIDAs
IDEsIDAsIDEsIDEsIDAsIDF9OwotICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJv
Z3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdGFyZ2V0VmVy
dGljZXMpKTsKLSAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnRleENv
b3JkQXR0cmliKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgc291cmNlVmVydGljZXMpKTsK
LSAgICBHTF9DTUQoZ2xEaXNhYmxlKEdMX0JMRU5EKSk7Ci0gICAgR0xfQ01EKGdsRHJhd0FycmF5
cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpKTsKLSAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xEaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSkpOworICAgIG1fY29u
dGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7
CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENv
b3JkQXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFMCk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wm
Pihzb3VyY2VUZXh0dXJlKS5pZCgpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dy
YW0tPnRleHR1cmVVbmlmb3JtKCksIDApOworICAgIGNvbnN0IEdDM0RmbG9hdCB0YXJnZXRWZXJ0
aWNlc1tdID0gey0xLCAtMSwgMSwgLTEsIDEsIDEsIC0xLCAxfTsKKyAgICBjb25zdCBHQzNEZmxv
YXQgc291cmNlVmVydGljZXNbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKKyAgICBtX2Nv
bnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwg
R3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cih0YXJnZXRWZXJ0
aWNlcykpOworICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnRl
eENvb3JkQXR0cmliKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdD
M0RpbnRwdHIoc291cmNlVmVydGljZXMpKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgIG1fY29udGV4dDNELT5kcmF3QXJyYXlzKEdyYXBo
aWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQpOworICAgIG1fY29udGV4dDNELT5kaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29u
dGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIo
KSk7CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQml0bWFwVGV4dHVyZUdMOjphcHBs
eUZpbHRlcnMoY29uc3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIGZpbHRlcnMpCkBAIC03OTcsMjggKzc2NCwzMiBAQCB2b2lkIEJpdG1hcFRl
eHR1cmVHTDo6aW5pdGlhbGl6ZVN0ZW5jaWwoKQogewogICAgIGlmIChtX3JibykKICAgICAgICAg
cmV0dXJuOwotICAgIEdMX0NNRChnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fcmJvKSk7Ci0gICAg
R0xfQ01EKGdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fcmJvKSk7CisKKyAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGlj
c0NvbnRleHQzRCgpOworICAgIG1fcmJvID0gY29udGV4dDNELT5jcmVhdGVSZW5kZXJidWZmZXIo
KTsKKyAgICBjb250ZXh0M0QtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUiwgbV9yYm8pOwogI2lmZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgotICAgIEdMX0NN
RChnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9TVEVOQ0lMX0lOREVY
OCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKSk7CisgICAg
Y29udGV4dDNELT5yZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVYOCwgbV90ZXh0dXJlU2l6ZS53
aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsKICNlbHNlCi0gICAgR0xfQ01EKGdsUmVu
ZGVyYnVmZmVyU3RvcmFnZShHTF9SRU5ERVJCVUZGRVIsIEdMX0RFUFRIX1NURU5DSUwsIG1fdGV4
dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSkpOworICAgIGNvbnRleHQz
RC0+cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBt
X3RleHR1cmVTaXplLmhlaWdodCgpKTsKICNlbmRpZgotICAgIEdMX0NNRChnbEJpbmRSZW5kZXJi
dWZmZXIoR0xfUkVOREVSQlVGRkVSLCAwKSk7Ci0gICAgR0xfQ01EKGdsRnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfUkVOREVS
QlVGRkVSLCBtX3JibykpOwotICAgIEdMX0NNRChnbENsZWFyU3RlbmNpbCgwKSk7Ci0gICAgR0xf
Q01EKGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJfQklUKSk7CisgICAgY29udGV4dDNELT5iaW5k
UmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOworICAgIGNv
bnRleHQzRC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX3Jibyk7CisgICAgY29udGV4dDNELT5jbGVhclN0ZW5j
aWwoMCk7CisgICAgY29udGV4dDNELT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9C
VUZGRVJfQklUKTsKIH0KIAogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmNsZWFySWZOZWVkZWQoKQog
eworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXItPmdy
YXBoaWNzQ29udGV4dDNEKCk7CisKICAgICBpZiAoIW1fc2hvdWxkQ2xlYXIpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIG1fY2xpcFN0YWNrLmluaXQoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBt
X3RleHR1cmVTaXplKSk7Ci0gICAgbV9jbGlwU3RhY2suYXBwbHkoKTsKLSAgICBHTF9DTUQoZ2xD
bGVhckNvbG9yKDAsIDAsIDAsIDApKTsKLSAgICBHTF9DTUQoZ2xDbGVhcihHTF9DT0xPUl9CVUZG
RVJfQklUKSk7CisgICAgbV9jbGlwU3RhY2suYXBwbHkoY29udGV4dDNEKTsKKyAgICBjb250ZXh0
M0QtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgY29udGV4dDNELT5jbGVhcihHcmFwaGlj
c0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCk7CiAgICAgbV9zaG91bGRDbGVhciA9IGZhbHNl
OwogfQogCkBAIC04MjcsMzMgKzc5OCwzNyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6Y3JlYXRl
RmJvSWZOZWVkZWQoKQogICAgIGlmIChtX2ZibykKICAgICAgICAgcmV0dXJuOwogCi0gICAgR0xf
Q01EKGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2ZibykpOwotICAgIEdMX0NNRChnbEJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pKTsKLSAgICBHTF9DTUQoZ2xGcmFtZWJ1ZmZl
clRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRV
UkVfMkQsIGlkKCksIDApKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90
ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOworICAgIG1fZmJvID0gY29udGV4dDNE
LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIGNvbnRleHQzRC0+YmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIGNvbnRleHQzRC0+ZnJh
bWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBpZCgpLCAwKTsKICAgICBtX3Nob3VsZENsZWFyID0gdHJ1ZTsKIH0KIAogdm9pZCBCaXRt
YXBUZXh0dXJlR0w6OmJpbmQoKQogewotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIDApKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0dXJl
TWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOworICAgIGNvbnRleHQzRC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwogICAgIGNyZWF0ZUZib0lmTmVlZGVk
KCk7Ci0gICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibykp
OwotICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90
ZXh0dXJlU2l6ZS5oZWlnaHQoKSkpOworICAgIGNvbnRleHQzRC0+YmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIGNvbnRleHQzRC0+dmll
d3BvcnQoMCwgMCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgp
KTsKICAgICBjbGVhcklmTmVlZGVkKCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5kYXRhKCkucHJv
amVjdGlvbk1hdHJpeCA9IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgobV90ZXh0dXJlU2l6ZSwgdHJ1
ZSAvKiBtaXJyb3JlZCAqLyk7Ci0gICAgbV9jbGlwU3RhY2suYXBwbHkoKTsKKyAgICBtX2NsaXBT
dGFjay5hcHBseShjb250ZXh0M0QpOwogfQogCiBCaXRtYXBUZXh0dXJlR0w6On5CaXRtYXBUZXh0
dXJlR0woKQogeworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVN
YXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CisKICAgICBpZiAobV9pZCkKLSAgICAgICAgR0xf
Q01EKGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1faWQpKTsKKyAgICAgICAgY29udGV4dDNELT5kZWxl
dGVUZXh0dXJlKG1faWQpOwogCiAgICAgaWYgKG1fZmJvKQotICAgICAgICBHTF9DTUQoZ2xEZWxl
dGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKSk7CisgICAgICAgIGNvbnRleHQzRC0+ZGVsZXRlRnJh
bWVidWZmZXIobV9mYm8pOwogCiAgICAgaWYgKG1fcmJvKQotICAgICAgICBHTF9DTUQoZ2xEZWxl
dGVSZW5kZXJidWZmZXJzKDEsICZtX3JibykpOworICAgICAgICBjb250ZXh0M0QtPmRlbGV0ZVJl
bmRlcmJ1ZmZlcihtX3Jibyk7CiB9CiAKIGJvb2wgQml0bWFwVGV4dHVyZUdMOjppc1ZhbGlkKCkg
Y29uc3QKQEAgLTg3MywxMSArODQ4LDExIEBAIFRleHR1cmVNYXBwZXJHTDo6flRleHR1cmVNYXBw
ZXJHTCgpCiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiaW5kRGVmYXVsdFN1cmZhY2UoKQogewot
ICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZGF0YSgpLnRhcmdl
dEZyYW1lQnVmZmVyKSk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIGRhdGEoKS50YXJnZXRGcmFtZUJ1ZmZlcik7CiAgICAg
SW50U2l6ZSB2aWV3cG9ydFNpemUoZGF0YSgpLnZpZXdwb3J0WzJdLCBkYXRhKCkudmlld3BvcnRb
M10pOwogICAgIGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJp
eCh2aWV3cG9ydFNpemUsIGRhdGEoKS5QYWludEZsYWdzICYgUGFpbnRpbmdNaXJyb3JlZCk7Ci0g
ICAgR0xfQ01EKGdsVmlld3BvcnQoZGF0YSgpLnZpZXdwb3J0WzBdLCBkYXRhKCkudmlld3BvcnRb
MV0sIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpKTsKLSAgICBt
X2NsaXBTdGFjay5hcHBseSgpOworICAgIG1fY29udGV4dDNELT52aWV3cG9ydChkYXRhKCkudmll
d3BvcnRbMF0sIGRhdGEoKS52aWV3cG9ydFsxXSwgdmlld3BvcnRTaXplLndpZHRoKCksIHZpZXdw
b3J0U2l6ZS5oZWlnaHQoKSk7CisgICAgbV9jbGlwU3RhY2suYXBwbHkobV9jb250ZXh0M0QuZ2V0
KCkpOwogICAgIGRhdGEoKS5jdXJyZW50U3VyZmFjZS5jbGVhcigpOwogfQogCkBAIC05MDcsNyAr
ODgyLDcgQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luU2Npc3NvckNsaXAoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHIKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgY2xpcFN0YWNrKCkuY3VycmVudCgpLnNjaXNzb3JCb3guaW50ZXJzZWN0KHJlY3QpOwot
ICAgIGNsaXBTdGFjaygpLmFwcGx5KCk7CisgICAgY2xpcFN0YWNrKCkuYXBwbHkobV9jb250ZXh0
M0QuZ2V0KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05MjEsMTAgKzg5NiwxMCBAQCB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogCiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNp
bXBsZSk7CiAKLSAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpKTsKLSAgICBH
TF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkp
OwotICAgIGNvbnN0IEdMZmxvYXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAx
fTsKLSAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0dHJp
YigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHVuaXRSZWN0KSk7CisgICAgbV9jb250ZXh0
M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZl
cnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBjb25zdCBHQzNE
ZmxvYXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKKyAgICBtX2NvbnRl
eHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cih1bml0UmVjdCkpOwog
CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgo
ZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpCiAgICAgICAgICAgICAubXVsdGlwbHkobW9kZWxWaWV3
TWF0cml4KQpAQCAtOTMzLDE0ICs5MDgsMTQgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2lu
Q2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb24KICAg
ICAgICAgICAgICAgICAwLCAwLCAxLCAwLAogICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueCgp
LCB0YXJnZXRSZWN0LnkoKSwgMCwgMSkpOwogCi0gICAgY29uc3QgR0xmbG9hdCBtNFtdID0gewor
ICAgIGNvbnN0IEdDM0RmbG9hdCBtNFtdID0gewogICAgICAgICBtYXRyaXgubTExKCksIG1hdHJp
eC5tMTIoKSwgbWF0cml4Lm0xMygpLCBtYXRyaXgubTE0KCksCiAgICAgICAgIG1hdHJpeC5tMjEo
KSwgbWF0cml4Lm0yMigpLCBtYXRyaXgubTIzKCksIG1hdHJpeC5tMjQoKSwKICAgICAgICAgbWF0
cml4Lm0zMSgpLCBtYXRyaXgubTMyKCksIG1hdHJpeC5tMzMoKSwgbWF0cml4Lm0zNCgpLAogICAg
ICAgICBtYXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwgbWF0cml4Lm00MygpLCBtYXRyaXgubTQ0
KCkKICAgICB9OwogCi0gICAgY29uc3QgR0xmbG9hdCBtNGFsbFtdID0geworICAgIGNvbnN0IEdD
M0RmbG9hdCBtNGFsbFtdID0gewogICAgICAgICAyLCAwLCAwLCAwLAogICAgICAgICAwLCAyLCAw
LCAwLAogICAgICAgICAwLCAwLCAxLCAwLApAQCAtOTQ5LDQzICs5MjQsNDIgQEAgdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxW
aWV3TWF0cml4LCBjb24KIAogICAgIGludCYgc3RlbmNpbEluZGV4ID0gY2xpcFN0YWNrKCkuY3Vy
cmVudCgpLnN0ZW5jaWxJbmRleDsKIAotICAgIEdMX0NNRChnbEVuYWJsZShHTF9TVEVOQ0lMX1RF
U1QpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X1RFU1QpOwogCiAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGRvIGFueSBhY3R1YWwgZHJhd2lu
Zy4KLSAgICBHTF9DTUQoZ2xTdGVuY2lsRnVuYyhHTF9ORVZFUiwgc3RlbmNpbEluZGV4LCBzdGVu
Y2lsSW5kZXgpKTsKKyAgICBtX2NvbnRleHQzRC0+c3RlbmNpbEZ1bmMoR3JhcGhpY3NDb250ZXh0
M0Q6Ok5FVkVSLCBzdGVuY2lsSW5kZXgsIHN0ZW5jaWxJbmRleCk7CiAKICAgICAvLyBPcGVyYXRl
IG9ubHkgb24gdGhlIHN0ZW5jaWxJbmRleCBhbmQgYWJvdmUuCi0gICAgR0xfQ01EKGdsU3RlbmNp
bE1hc2soMHhmZiAmIH4oc3RlbmNpbEluZGV4IC0gMSkpKTsKKyAgICBtX2NvbnRleHQzRC0+c3Rl
bmNpbE1hc2soMHhmZiAmIH4oc3RlbmNpbEluZGV4IC0gMSkpOwogCiAgICAgLy8gRmlyc3QgY2xl
YXIgdGhlIGVudGlyZSBidWZmZXIgYXQgdGhlIGN1cnJlbnQgaW5kZXguCi0gICAgR0xfQ01EKGds
VW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBHTF9GQUxTRSwg
bTRhbGwpKTsKLSAgICBHTF9DTUQoZ2xTdGVuY2lsT3AoR0xfWkVSTywgR0xfWkVSTywgR0xfWkVS
TykpOwotICAgIEdMX0NNRChnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSk7Cisg
ICAgbV9jb250ZXh0M0QtPnVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+bWF0cml4TG9jYXRpb24o
KSwgMSwgZmFsc2UsIGNvbnN0X2Nhc3Q8R0MzRGZsb2F0Kj4obTRhbGwpKTsKKyAgICBtX2NvbnRl
eHQzRC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQz
RDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOworICAgIG1fY29udGV4dDNELT5kcmF3
QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQpOwogCiAgICAgLy8g
Tm93IGFwcGx5IHRoZSBjdXJyZW50IGluZGV4IHRvIHRoZSBuZXcgcXVhZC4KLSAgICBHTF9DTUQo
Z2xTdGVuY2lsT3AoR0xfUkVQTEFDRSwgR0xfUkVQTEFDRSwgR0xfUkVQTEFDRSkpOwotICAgIEdM
X0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+bWF0cml4TG9jYXRpb24oKSwgMSwgR0xf
RkFMU0UsIG00KSk7Ci0gICAgR0xfQ01EKGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAs
IDQpKTsKKyAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpSRVBM
QUNFLCBHcmFwaGljc0NvbnRleHQzRDo6UkVQTEFDRSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFUExB
Q0UpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExv
Y2F0aW9uKCksIDEsIGZhbHNlLCBjb25zdF9jYXN0PEdDM0RmbG9hdCo+KG00KSk7CisgICAgbV9j
b250ZXh0M0QtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwg
NCk7CiAKICAgICAvLyBDbGVhciB0aGUgc3RhdGUuCi0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsU3Rl
bmNpbE1hc2soMCkpOworICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXko
cHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5zdGVuY2lsTWFzaygw
KTsKIAogICAgIC8vIEluY3JlYXNlIHN0ZW5jaWxJbmRleCBhbmQgYXBwbHkgc3RlbmNpbCB0ZXN0
aW5nLgogICAgIHN0ZW5jaWxJbmRleCAqPSAyOwotICAgIGNsaXBTdGFjaygpLmFwcGx5KCk7Cisg
ICAgY2xpcFN0YWNrKCkuYXBwbHkobV9jb250ZXh0M0QuZ2V0KCkpOwogfQogCiB2b2lkIFRleHR1
cmVNYXBwZXJHTDo6ZW5kQ2xpcCgpCiB7CiAgICAgY2xpcFN0YWNrKCkucG9wKCk7Ci0gICAgY2xp
cFN0YWNrKCkuYXBwbHkoKTsKKyAgICBjbGlwU3RhY2soKS5hcHBseShtX2NvbnRleHQzRC5nZXQo
KSk7CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlckdMOjpjcmVh
dGVUZXh0dXJlKCkKIHsKLSAgICBCaXRtYXBUZXh0dXJlR0wqIHRleHR1cmUgPSBuZXcgQml0bWFw
VGV4dHVyZUdMKCk7Ci0gICAgdGV4dHVyZS0+c2V0VGV4dHVyZU1hcHBlcih0aGlzKTsKKyAgICBC
aXRtYXBUZXh0dXJlR0wqIHRleHR1cmUgPSBuZXcgQml0bWFwVGV4dHVyZUdMKHRoaXMpOwogICAg
IHJldHVybiBhZG9wdFJlZih0ZXh0dXJlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCmluZGV4IDA3
NmU2NWYuLjhhNzJkNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKQEAgLTIzLDggKzIzLDggQEAKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKLSNp
bmNsdWRlICJPcGVuR0xTaGltcy5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNpbmNs
dWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCkBAIC0zOCw3ICszOCw2IEBAIGNsYXNzIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOwogY2xhc3MgVGV4dHVyZU1hcHBlckdMIDogcHVibGlj
IFRleHR1cmVNYXBwZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVN
YXBwZXJHTD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJHTCk7
IH0KLSAgICBUZXh0dXJlTWFwcGVyR0woKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyR0wo
KTsKIAogICAgIGVudW0gRmxhZyB7CkBAIC01NCw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0
bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIHVuc2lnbmVkIGV4cG9zZWRFZGdlcykgT1ZFUlJJREU7
CiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBj
b25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5
LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2Vz
ID0gQWxsRWRnZXMpOwogCi0jaWYgZGVmaW5lZChHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUpCisj
aWYgIVVTRShURVhNQVBfT1BFTkdMX0VTXzIpCiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJl
UmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXplJiB0ZXh0
dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0
dXJlKiBtYXNrVGV4dHVyZSk7CiAjZW5kaWYKIApAQCAtNjYsNiArNjUsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBJbnRTaXplIG1heFRleHR1cmVTaXplKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gSW50U2l6ZSgyMDAwLCAyMDAwKTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBU
ZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBHcmFwaGljc0Nv
bnRleHQqIGdyYXBoaWNzQ29udGV4dCgpIE9WRVJSSURFIHsgcmV0dXJuIG1fY29udGV4dDsgfQor
ICAgIGlubGluZSBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRleHQzRC5nZXQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFwaGlj
c0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KSBPVkVSUklERSB7IG1fY29udGV4dCA9
IGNvbnRleHQ7IH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTc1LDcgKzc1LDYgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0RW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nKGJvb2wg
ZW5hYmxlZCkgeyBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyA9IGVuYWJsZWQ7IH0K
IAogcHJpdmF0ZToKLQogICAgIHN0cnVjdCBDbGlwU3RhdGUgewogICAgICAgICBJbnRSZWN0IHNj
aXNzb3JCb3g7CiAgICAgICAgIGludCBzdGVuY2lsSW5kZXg7CkBAIC04OSw3ICs4OCw3IEBAIHBy
aXZhdGU6CiAgICAgcHVibGljOgogICAgICAgICB2b2lkIHB1c2goKTsKICAgICAgICAgdm9pZCBw
b3AoKTsKLSAgICAgICAgdm9pZCBhcHBseSgpOworICAgICAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dDNEKik7CiAgICAgICAgIGlubGluZSBDbGlwU3RhdGUmIGN1cnJlbnQoKSB7IHJldHVy
biBjbGlwU3RhdGU7IH0KICAgICAgICAgdm9pZCBpbml0KGNvbnN0IEludFJlY3QmKTsKIApAQCAt
MTA5LDE2ICsxMDgsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgRmxvYXRRdWFkIHRhcmdldFJlY3RN
YXBwZWRUb1VuaXRTcXVhcmU7CiAgICAgfTsKIAorICAgIFRleHR1cmVNYXBwZXJHTCgpOworCiAg
ICAgYm9vbCBkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVyZSwgRmxh
Z3MsIGNvbnN0IEZsb2F0UmVjdCYgb3JpZ2luYWxUYXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBU
ZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKTsKICAgICB2b2lkIGRy
YXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIHVp
bnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRl
eHR1cmUqIG1hc2tUZXh0dXJlKTsKLSAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0qLCBHTGVudW0gZHJhd2luZ01vZGUsIGJvb2wgbmVlZHNCbGVuZGluZyk7
CisgICAgdm9pZCBkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiwgR0Mz
RGVudW0gZHJhd2luZ01vZGUsIGJvb2wgbmVlZHNCbGVuZGluZyk7CiAKICAgICBib29sIGJlZ2lu
U2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3Qm
KTsKICAgICB2b2lkIGJpbmREZWZhdWx0U3VyZmFjZSgpOwogICAgIENsaXBTdGFjayYgY2xpcFN0
YWNrKCk7CiAgICAgaW5saW5lIFRleHR1cmVNYXBwZXJHTERhdGEmIGRhdGEoKSB7IHJldHVybiAq
bV9kYXRhOyB9Ci0gICAgVGV4dHVyZU1hcHBlckdMRGF0YSogbV9kYXRhOwogICAgIEdyYXBoaWNz
Q29udGV4dCogbV9jb250ZXh0OworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250
ZXh0M0Q7CisgICAgVGV4dHVyZU1hcHBlckdMRGF0YSogbV9kYXRhOwogICAgIENsaXBTdGFjayBt
X2NsaXBTdGFjazsKICAgICBib29sIG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nOwog
CkBAIC0xMzUsNyArMTM3LDcgQEAgcHVibGljOgogICAgIHZvaWQgaW5pdGlhbGl6ZVN0ZW5jaWwo
KTsKICAgICB+Qml0bWFwVGV4dHVyZUdMKCk7CiAgICAgdmlydHVhbCB1aW50MzJfdCBpZCgpIGNv
bnN0IHsgcmV0dXJuIG1faWQ7IH0KLSAgICB1aW50MzJfdCB0ZXh0dXJlVGFyZ2V0KCkgY29uc3Qg
eyByZXR1cm4gR0xfVEVYVFVSRV8yRDsgfQorICAgIHVpbnQzMl90IHRleHR1cmVUYXJnZXQoKSBj
b25zdCB7IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDsgfQogICAgIEludFNp
emUgdGV4dHVyZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVTaXplOyB9CiAgICAgdm9p
ZCBzZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXJHTCogdGV4bWFwKSB7IG1fdGV4dHVyZU1h
cHBlciA9IHRleG1hcDsgfQogICAgIHZvaWQgdXBkYXRlQ29udGVudHMoSW1hZ2UqLCBjb25zdCBJ
bnRSZWN0JiwgY29uc3QgSW50UG9pbnQmKTsKQEAgLTE0NywyMCArMTQ5LDIyIEBAIHB1YmxpYzoK
ICNlbmRpZgogCiBwcml2YXRlOgotICAgIEdMdWludCBtX2lkOworICAgIFBsYXRmb3JtM0RPYmpl
Y3QgbV9pZDsKICAgICBJbnRTaXplIG1fdGV4dHVyZVNpemU7CiAgICAgSW50UmVjdCBtX2RpcnR5
UmVjdDsKLSAgICBHTHVpbnQgbV9mYm87Ci0gICAgR0x1aW50IG1fcmJvOworICAgIFBsYXRmb3Jt
M0RPYmplY3QgbV9mYm87CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3JibzsKICAgICBib29sIG1f
c2hvdWxkQ2xlYXI7Ci0gICAgVGV4dHVyZU1hcHBlckdMKiBtX3RleHR1cmVNYXBwZXI7CiAgICAg
VGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2sgbV9jbGlwU3RhY2s7Ci0gICAgQml0bWFwVGV4dHVy
ZUdMKCkKKyAgICBUZXh0dXJlTWFwcGVyR0wqIG1fdGV4dHVyZU1hcHBlcjsKKworICAgIEJpdG1h
cFRleHR1cmVHTCgpOworICAgIEJpdG1hcFRleHR1cmVHTChUZXh0dXJlTWFwcGVyR0wqIHRleHR1
cmVNYXBwZXIpCiAgICAgICAgIDogbV9pZCgwKQogICAgICAgICAsIG1fZmJvKDApCiAgICAgICAg
ICwgbV9yYm8oMCkKICAgICAgICAgLCBtX3Nob3VsZENsZWFyKHRydWUpCi0gICAgICAgICwgbV90
ZXh0dXJlTWFwcGVyKDApCisgICAgICAgICwgbV90ZXh0dXJlTWFwcGVyKHRleHR1cmVNYXBwZXIp
CiAgICAgewogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5j
cHAKaW5kZXggMGZiZGJlOS4uZmE4YWMwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIuY3BwCkBAIC0zMCwyNSArMzAsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi0jaWZuZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgotI2RlZmluZSBPRVMyX1BSRUNJU0lPTl9E
RUZJTklUSU9OUyBcCi0gICAgIiNkZWZpbmUgbG93cFxuI2RlZmluZSBoaWdocFxuIgotI2RlZmlu
ZSBPRVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTgotI2Vsc2UKLSNkZWZpbmUg
T0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlMKLSNkZWZpbmUgT0VTMl9GUkFHTUVOVF9TSEFERVJf
REVGQVVMVF9QUkVDSVNJT04gXAotICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgXG4iCi0j
ZW5kaWYKLQotI2RlZmluZSBTVFJJTkdJRllfVkFMKHNyYy4uLikgI3NyYwotI2RlZmluZSBWRVJU
RVhfU0hBREVSKHNyYy4uLikgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlNcCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTVFJJTkdJRllfVkFMKHNyYykKLSNkZWZpbmUgRlJBR01FTlRf
U0hBREVSKHNyYy4uLikgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlNcCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFVTFRfUFJFQ0lTSU9O
XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJJTkdJRllfVkFMKHNyYykKKyNk
ZWZpbmUgU1RSSU5HSUZZKHNyYy4uLikgI3NyYwogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21l
bnRTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9Ci0gICAgRlJBR01FTlRfU0hBREVSKAorICAg
IFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgIHVu
aWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX21h
c2s7CiAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CkBAIC02NCw3ICs1MCw4
IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNr
ID0KICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0
T3BhY2l0eUFuZE1hc2sgPQotICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCisg
ICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIy
RFJlY3Qgc19zb3VyY2U7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX21hc2s7CiAg
ICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CkBAIC04MCw3ICs2Nyw3IEBAIHN0
YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5QW5kTWFzayA9
CiAgICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlB
bmRNYXNrID0KLSAgICBWRVJURVhfU0hBREVSKAorICAgIFNUUklOR0lGWSgKICAgICAgICAgdW5p
Zm9ybSBtYXQ0IHVfbWF0cml4OwogICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9mbGlwOwog
ICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKQEAgLTk1LDcgKzgyLDggQEAgc3RhdGlj
IGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrID0KICAgICApOwog
CiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUgPQotICAgIEZS
QUdNRU5UX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1w
IGZsb2F0OwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NvdXJjZTsKICAgICAgICAgdW5p
Zm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZf
c291cmNlVGV4Q29vcmQ7CkBAIC0xMDcsNyArOTUsOCBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJh
Z21lbnRTaGFkZXJTb3VyY2VTaW1wbGUgPQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBm
cmFnbWVudFNoYWRlclNvdXJjZUFudGlhbGlhc2luZ05vTWFzayA9Ci0gICAgRlJBR01FTlRfU0hB
REVSKAorICAgIFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAg
ICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwogICAgICAgICB2YXJ5aW5nIGhpZ2hw
IHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3Bh
Y2l0eTsKQEAgLTE0NSw3ICsxMzQsOCBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFk
ZXJTb3VyY2VBbnRpYWxpYXNpbmdOb01hc2sgPQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFy
KiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RTaW1wbGUgPQotICAgIEZSQUdNRU5UX1NIQURFUigK
KyAgICBTVFJJTkdJRlkoCisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAg
ICB1bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc19zb3VyY2U7CiAgICAgICAgIHVuaWZvcm0gbG93cCB2
ZWMyIHVfdGV4dHVyZVNpemU7CiAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7
CkBAIC0xNTgsNyArMTQ4LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291
cmNlUmVjdFNpbXBsZSA9CiAgICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRl
clNvdXJjZVNpbXBsZSA9Ci0gICAgVkVSVEVYX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCiAgICAg
ICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVf
ZmxpcDsKICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CkBAIC0xNzEsNyArMTYxLDcg
QEAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSA9CiAgICAgKTsK
IAogc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNvbGlkQ29sb3IgPQotICAg
IFZFUlRFWF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAogICAgICAgICB1bmlmb3JtIG1hdDQgdV9t
YXRyaXg7CiAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwogICAgICAgICB2b2lkIG1h
aW4odm9pZCkKQEAgLTE4Miw3ICsxNzIsOCBAQCBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hh
ZGVyU291cmNlU29saWRDb2xvciA9CiAKIAogc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hh
ZGVyU291cmNlU29saWRDb2xvciA9Ci0gICAgVkVSVEVYX1NIQURFUigKKyAgICBTVFJJTkdJRlko
CisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1bmlmb3JtIHZlYzQg
dV9jb2xvcjsKICAgICAgICAgdm9pZCBtYWluKHZvaWQpCiAgICAgICAgIHsKQEAgLTIxMiwyMiAr
MjAzLDIyIEBAIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9nCiAKICAgICBzd2l0Y2ggKHNoYWRlclR5
cGUpIHsKICAgICBjYXNlIFNpbXBsZToKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU2ltcGxlOjpjcmVhdGUoKTsKKyAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpjcmVhdGUobV9jb250ZXh0KTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBSZWN0U2ltcGxlOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpjcmVhdGUoKTsKKyAgICAgICAgcHJvZ3JhbSA9IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3JlYXRlKG1fY29udGV4dCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQW50aWFsaWFzaW5nTm9NYXNrOgotICAgICAgICBwcm9n
cmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OmNyZWF0
ZSgpOworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxp
YXNpbmdOb01hc2s6OmNyZWF0ZShtX2NvbnRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IE9wYWNpdHlBbmRNYXNrOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpjcmVhdGUobV9jb250ZXh0KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBSZWN0T3BhY2l0eUFuZE1hc2s6Ci0gICAgICAgIHByb2dy
YW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6Y3JlYXRl
KCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFj
aXR5QW5kTWFzazo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
U29saWRDb2xvcjoKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
U29saWRDb2xvcjo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OmNyZWF0ZShtX2NvbnRleHQpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEludmFsaWQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjM2
LDggKzIyNyw5IEBAIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9nCiAgICAgcmV0dXJuIHByb2dyYW07
CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbShjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50
U2hhZGVyU291cmNlKQotICAgIDogbV9pZCgwKQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBj
b25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVy
U291cmNlKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX2lkKDApCiAgICAgLCBt
X3ZlcnRleEF0dHJpYigwKQogICAgICwgbV92ZXJ0ZXhTaGFkZXIoMCkKICAgICAsIG1fZnJhZ21l
bnRTaGFkZXIoMCkKQEAgLTI1Niw0NiArMjQ4LDQ2IEBAIHZvaWQgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW06OmluaXRpYWxpemVQcm9ncmFtKCkKIHsKICAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhT
aGFkZXJTb3VyY2VQcm9ncmFtID0gdmVydGV4U2hhZGVyU291cmNlKCk7CiAgICAgY29uc3QgY2hh
ciogZnJhZ21lbnRTaGFkZXJTb3VyY2VQcm9ncmFtID0gZnJhZ21lbnRTaGFkZXJTb3VyY2UoKTsK
LSAgICBHTHVpbnQgdmVydGV4U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURF
Uik7Ci0gICAgR0x1aW50IGZyYWdtZW50U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01F
TlRfU0hBREVSKTsKLSAgICBnbFNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhT
aGFkZXJTb3VyY2VQcm9ncmFtLCAwKTsKLSAgICBnbFNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRl
ciwgMSwgJmZyYWdtZW50U2hhZGVyU291cmNlUHJvZ3JhbSwgMCk7Ci0gICAgR0x1aW50IHByb2dy
YW1JRCA9IGdsQ3JlYXRlUHJvZ3JhbSgpOwotICAgIGdsQ29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFk
ZXIpOwotICAgIGdsQ29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CisgICAgUGxhdGZvcm0z
RE9iamVjdCB2ZXJ0ZXhTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0Nv
bnRleHQzRDo6VkVSVEVYX1NIQURFUik7CisgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNo
YWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVO
VF9TSEFERVIpOworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVy
dGV4U2hhZGVyU291cmNlUHJvZ3JhbSk7CisgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UoZnJh
Z21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyU291cmNlUHJvZ3JhbSk7CisgICAgUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtSUQgPSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKKyAgICBtX2Nv
bnRleHQtPmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmNvbXBp
bGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOwogCi0gICAgZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlE
LCB2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRT
aGFkZXIpOwotICAgIGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlEKTsKKyAgICBtX2NvbnRleHQtPmF0
dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5hdHRh
Y2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5saW5r
UHJvZ3JhbShwcm9ncmFtSUQpOwogCi0gICAgbV92ZXJ0ZXhBdHRyaWIgPSBnbEdldEF0dHJpYkxv
Y2F0aW9uKHByb2dyYW1JRCwgImFfdmVydGV4Iik7CisgICAgbV92ZXJ0ZXhBdHRyaWIgPSBtX2Nv
bnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdmVydGV4Iik7CiAKICAgICBt
X2lkID0gcHJvZ3JhbUlEOwogICAgIG1fdmVydGV4U2hhZGVyID0gdmVydGV4U2hhZGVyOwogICAg
IG1fZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNoYWRlcjsKIH0KIAotdm9pZCBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKEdMaW50ICZ2YXJpYWJsZSwgY29u
c3QgY2hhciogbmFtZSkKK3ZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldFVuaWZv
cm1Mb2NhdGlvbihHQzNEaW50ICZ2YXJpYWJsZSwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICB2
YXJpYWJsZSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1faWQsIG5hbWUpOworICAgIHZhcmlhYmxl
ID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9pZCwgbmFtZSk7CiAgICAgQVNTRVJU
KHZhcmlhYmxlID49IDApOwogfQogCiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCkKIHsKLSAgICBHTHVpbnQgcHJvZ3JhbUlEID0gbV9pZDsK
KyAgICBQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCA9IG1faWQ7CiAgICAgaWYgKCFwcm9ncmFt
SUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGdsRGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV92
ZXJ0ZXhTaGFkZXIpOwotICAgIGdsRGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKLSAgICBn
bERldGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsRGVsZXRl
U2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQp
OworICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV92ZXJ0ZXhTaGFkZXIp
OworICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2Nv
bnRleHQtPmRldGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fZnJhZ21lbnRTaGFkZXIpOworICAgIG1f
Y29udGV4dC0+ZGVsZXRlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29udGV4dC0+
ZGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKQotICAgIDogVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNo
YWRlclNvdXJjZVNpbXBsZSkKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkK
KyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNv
dXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUpCiB7CiAgICAgaW5pdGlhbGl6
ZVByb2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9mbGlwTG9jYXRpb24sICJ1X2Zs
aXAiKTsKQEAgLTMwNCwxNiArMjk2LDE2IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2lt
cGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpCiAgICAgZ2V0VW5pZm9ybUxv
Y2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7CiB9CiAKLVRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xp
ZENvbG9yKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNv
dXJjZVNvbGlkQ29sb3IsIGZyYWdtZW50U2hhZGVyU291cmNlU29saWRDb2xvcikKK1RleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1T
b2xpZENvbG9yKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDogVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlU29saWRDb2xvciwgZnJh
Z21lbnRTaGFkZXJTb3VyY2VTb2xpZENvbG9yKQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7
CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwog
ICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX2NvbG9yTG9jYXRpb24sICJ1X2NvbG9yIik7CiB9CiAK
LVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1SZWN0U2ltcGxlKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZl
cnRleFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0U2ltcGxlKQor
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVJlY3RTaW1wbGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUs
IGZyYWdtZW50U2hhZGVyU291cmNlUmVjdFNpbXBsZSkKIHsKICAgICBpbml0aWFsaXplUHJvZ3Jh
bSgpOwogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgi
KTsKQEAgLTMyMyw4ICszMTUsOCBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1w
bGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgpCiAgICAgZ2V0VW5pZm9y
bUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7CiB9CiAKLVRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtT3BhY2l0eUFuZE1hc2soKQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odmVy
dGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0
eUFuZE1hc2spCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0KQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4
U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0eUFu
ZE1hc2spCiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRp
b24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7CkBAIC0zMzQsOCArMzI2LDggQEAgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1PcGFjaXR5QW5kTWEKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9j
YXRpb24sICJ1X29wYWNpdHkiKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0
T3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRN
YXNrKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJj
ZU9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5QW5kTWFzaykK
K1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayhHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCkKKyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNo
YWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5
QW5kTWFzaykKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVuaWZvcm1Mb2Nh
dGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKQEAgLTM0NSw4ICszMzcsOCBAQCBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1SZWN0T3BhYwogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlM
b2NhdGlvbiwgInVfb3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFu
dGlhbGlhc2luZ05vTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdO
b01hc2soKQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291
cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRlclNvdXJjZUFudGlhbGlhc2luZ05vTWFzaykKK1RleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkK
KyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNv
dXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNpbmdOb01hc2spCiB7CiAg
ICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhM
b2NhdGlvbiwgInVfbWF0cml4Iik7CkBAIC0zNTYsOSArMzQ4LDkgQEAgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
QW50aWFsaWEKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9mbGlwTG9jYXRpb24sICJ1X2ZsaXAi
KTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyKCkKK1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICA6IG1fY29udGV4dChjb250
ZXh0KQogewotICAgIEFTU0VSVChpbml0aWFsaXplT3BlbkdMU2hpbXMoKSk7CiB9CiAKIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKQpAQCAt
MzczLDE4ICszNjUsMTkgQEAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6On5UZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcigpCiAKIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6flN0YW5kYXJkRmls
dGVyUHJvZ3JhbSgpCiB7Ci0gICAgZ2xEZXRhY2hTaGFkZXIobV9pZCwgbV92ZXJ0ZXhTaGFkZXIp
OwotICAgIGdsRGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKLSAgICBnbERldGFjaFNoYWRl
cihtX2lkLCBtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRlcihtX2ZyYWdtZW50
U2hhZGVyKTsKLSAgICBnbERlbGV0ZVByb2dyYW0obV9pZCk7CisgICAgbV9jb250ZXh0LT5kZXRh
Y2hTaGFkZXIobV9pZCwgbV92ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGVsZXRlU2hh
ZGVyKG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihtX2lkLCBt
X2ZyYWdtZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihtX2ZyYWdtZW50
U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV9pZCk7CiB9CiAKLVN0YW5k
YXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6
T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQotICAgIDogbV9pZCgwKQorU3RhbmRh
cmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBw
YXNzKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX2lkKDApCiB7CiAgICAgY29u
c3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlID0KLSAgICAgICAgICAgIFZFUlRFWF9TSEFERVIo
CisgICAgICAgICAgICBTVFJJTkdJRlkoCiAgICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQg
YV92ZXJ0ZXg7CiAgICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV90ZXhDb29yZDsKICAg
ICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKQEAgLTM5Niw4ICsz
ODksNyBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0
ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICAgICAgKTsKIAogI2RlZmlu
ZSBTVEFOREFSRF9GSUxURVIoeC4uLikgXAotICAgICAgICBPRVMyX1BSRUNJU0lPTl9ERUZJTklU
SU9OU1wKLSAgICAgICAgT0VTMl9GUkFHTUVOVF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT05cCisg
ICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiJcCiAgICAgICAgICJ2YXJ5aW5nIGhp
Z2hwIHZlYzIgdl90ZXhDb29yZDtcbiJcCiAgICAgICAgICJ1bmlmb3JtIGhpZ2hwIGZsb2F0IHVf
YW1vdW50O1xuIlwKICAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbiJcCkBA
IC00OTAsNyArNDgyLDggQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclBy
b2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6Ci0gICAgICAgIGZy
YWdtZW50U2hhZGVyU291cmNlID0gRlJBR01FTlRfU0hBREVSKAorICAgICAgICBmcmFnbWVudFNo
YWRlclNvdXJjZSA9IFNUUklOR0lGWSgKKyAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OwogICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7CiAgICAgICAg
ICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1X2JsdXJSYWRpdXM7CiAgICAgICAgICAgICB1bmlmb3Jt
IHNhbXBsZXIyRCB1X3RleHR1cmU7CkBAIC01MjMsNyArNTE2LDggQEAgU3RhbmRhcmRGaWx0ZXJQ
cm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25U
eXBlIHR5cGUKICAgICAgICAgc3dpdGNoIChwYXNzKSB7CiAgICAgICAgIGNhc2UgMDogewogICAg
ICAgICAgICAgLy8gRmlyc3QgcGFzczogaG9yaXpvbnRhbCBhbHBoYSBibHVyLgotICAgICAgICAg
ICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBGUkFHTUVOVF9TSEFERVIoCisgICAgICAgICAgICBm
cmFnbWVudFNoYWRlclNvdXJjZSA9IFNUUklOR0lGWSgKKyAgICAgICAgICAgICAgICBwcmVjaXNp
b24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90
ZXhDb29yZDsKICAgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9zaGFkb3dCbHVy
UmFkaXVzOwogICAgICAgICAgICAgICAgIHVuaWZvcm0gbG93cCB2ZWMyIHVfc2hhZG93T2Zmc2V0
OwpAQCAtNTU2LDcgKzU1MCw4IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0
ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgICAg
ICB9CiAgICAgICAgIGNhc2UgMTogewogICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHZlcnRp
Y2FsIGFscGhhIGJsdXIgYW5kIGNvbXBvc2l0ZSB3aXRoIG9yaWdpbi4KLSAgICAgICAgICAgIGZy
YWdtZW50U2hhZGVyU291cmNlID0gRlJBR01FTlRfU0hBREVSKAorICAgICAgICAgICAgZnJhZ21l
bnRTaGFkZXJTb3VyY2UgPSBTVFJJTkdJRlkoCisgICAgICAgICAgICAgICAgcHJlY2lzaW9uIG1l
ZGl1bXAgZmxvYXQ7CiAgICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29v
cmQ7CiAgICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfc2hhZG93Qmx1clJhZGl1
czsKICAgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjNCB1X3NoYWRvd0NvbG9yOwpAQCAt
NjAyLDI2ICs1OTcsMjUgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclBy
b2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKIAogICAgIGlmICghZnJh
Z21lbnRTaGFkZXJTb3VyY2UpCiAgICAgICAgIHJldHVybjsKLSAgICBHTHVpbnQgdmVydGV4U2hh
ZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7Ci0gICAgR0x1aW50IGZyYWdt
ZW50U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKLSAgICBnbFNo
YWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsIDApOwotICAg
IGdsU2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCAxLCAmZnJhZ21lbnRTaGFkZXJTb3VyY2Us
IDApOwotICAgIEdMdWludCBwcm9ncmFtSUQgPSBnbENyZWF0ZVByb2dyYW0oKTsKLSAgICBnbENv
bXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBnbENvbXBpbGVTaGFkZXIoZnJhZ21lbnRT
aGFkZXIpOworICAgIFBsYXRmb3JtM0RPYmplY3QgdmVydGV4U2hhZGVyID0gbV9jb250ZXh0LT5j
cmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpOworICAgIFBsYXRm
b3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKTsKKyAgICBtX2NvbnRleHQtPnNoYWRlclNv
dXJjZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNoYWRlclNvdXJjZSk7CisgICAgbV9jb250ZXh0LT5z
aGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyU291cmNlKTsKKyAgICBQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCA9IG1fY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOwor
ICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4
dC0+Y29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CiAjaWYgIUxPR19ESVNBQkxFRAotICAg
IEdMY2hhciBsb2dbMTAwXTsKLSAgICBHTGludCBsZW47Ci0gICAgZ2xHZXRTaGFkZXJJbmZvTG9n
KGZyYWdtZW50U2hhZGVyLCAxMDAsICZsZW4sIGxvZyk7CisgICAgU3RyaW5nIGxvZzsKKyAgICBt
X2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2coZnJhZ21lbnRTaGFkZXIpOwogICAgIFdURkxvZygm
TG9nQ29tcG9zaXRpbmcsICIlc1xuIiwgbG9nKTsKICNlbmRpZgotICAgIGdsQXR0YWNoU2hhZGVy
KHByb2dyYW1JRCwgdmVydGV4U2hhZGVyKTsKLSAgICBnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQs
IGZyYWdtZW50U2hhZGVyKTsKLSAgICBnbExpbmtQcm9ncmFtKHByb2dyYW1JRCk7CisgICAgbV9j
b250ZXh0LT5hdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29u
dGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29u
dGV4dC0+bGlua1Byb2dyYW0ocHJvZ3JhbUlEKTsKIAotICAgIG1fdmVydGV4QXR0cmliID0gZ2xH
ZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3ZlcnRleCIpOwotICAgIG1fdGV4Q29vcmRB
dHRyaWIgPSBnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdGV4Q29vcmQiKTsKLSAg
ICBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFt
SUQsICJ1X3RleHR1cmUiKTsKKyAgICBtX3ZlcnRleEF0dHJpYiA9IG1fY29udGV4dC0+Z2V0QXR0
cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiYV92ZXJ0ZXgiKTsKKyAgICBtX3RleENvb3JkQXR0cmli
ID0gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3RleENvb3JkIik7
CisgICAgbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9j
YXRpb24ocHJvZ3JhbUlELCAidV90ZXh0dXJlIik7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6U0VQSUE6CkBAIC02MzEsMjEgKzYyNSwyMSBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0
YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQog
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgogICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpDT05UUkFTVDoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAg
ICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW1JRCwgInVfYW1vdW50Iik7CisgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQg
PSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2Ftb3VudCIpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKLSAgICAgICAg
bV91bmlmb3JtTG9jYXRpb25zLmJsdXIucmFkaXVzID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJv
Z3JhbUlELCAidV9ibHVyUmFkaXVzIik7Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVy
LmdhdXNzaWFuS2VybmVsID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9nYXVz
c2lhbktlcm5lbCIpOworICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5yYWRpdXMgPSBt
X2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2JsdXJSYWRpdXMiKTsK
KyAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmJsdXIuZ2F1c3NpYW5LZXJuZWwgPSBtX2NvbnRl
eHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKLSAg
ICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzID0gZ2xHZXRVbmlmb3Jt
TG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dCbHVyUmFkaXVzIik7Ci0gICAgICAgIG1fdW5p
Zm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwgPSBnbEdldFVuaWZvcm1Mb2NhdGlv
bihwcm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7CisgICAgICAgIG1fdW5pZm9ybUxvY2F0
aW9ucy5zaGFkb3cuYmx1clJhZGl1cyA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW1JRCwgInVfc2hhZG93Qmx1clJhZGl1cyIpOworICAgICAgICBtX3VuaWZvcm1Mb2NhdGlv
bnMuc2hhZG93LmdhdXNzaWFuS2VybmVsID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24o
cHJvZ3JhbUlELCAidV9nYXVzc2lhbktlcm5lbCIpOwogICAgICAgICBpZiAoIXBhc3MpCi0gICAg
ICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93Lm9mZnNldCA9IGdsR2V0VW5pZm9ybUxv
Y2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93T2Zmc2V0Iik7CisgICAgICAgICAgICBtX3VuaWZv
cm1Mb2NhdGlvbnMuc2hhZG93Lm9mZnNldCA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9u
KHByb2dyYW1JRCwgInVfc2hhZG93T2Zmc2V0Iik7CiAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgLy8gV2Ugb25seSBuZWVkIHRoZSBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBpbiB0
aGUgc2Vjb25kIHBhc3MsIHRoZSBmaXJzdCBwYXNzIGlzIG9ubHkgYSBob3Jpem9udGFsIGFscGhh
IGJsdXIuCi0gICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbG9yID0gZ2xH
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dDb2xvciIpOwotICAgICAgICAg
ICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb250ZW50VGV4dHVyZSA9IGdsR2V0VW5pZm9y
bUxvY2F0aW9uKHByb2dyYW1JRCwgInVfY29udGVudFRleHR1cmUiKTsKKyAgICAgICAgICAgIG1f
dW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29sb3IgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2Nh
dGlvbihwcm9ncmFtSUQsICJ1X3NoYWRvd0NvbG9yIik7CisgICAgICAgICAgICBtX3VuaWZvcm1M
b2NhdGlvbnMuc2hhZG93LmNvbnRlbnRUZXh0dXJlID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9j
YXRpb24ocHJvZ3JhbUlELCAidV9jb250ZW50VGV4dHVyZSIpOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC02NTYsOSArNjUwLDkgQEAgU3RhbmRhcmRGaWx0ZXJQ
cm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25U
eXBlIHR5cGUKICAgICBtX2ZyYWdtZW50U2hhZGVyID0gZnJhZ21lbnRTaGFkZXI7CiB9CiAKLVBh
c3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBTdGFuZGFyZEZpbHRlclByb2dyYW06OmNy
ZWF0ZShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykK
K1Bhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBTdGFuZGFyZEZpbHRlclByb2dyYW06
OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRmlsdGVyT3BlcmF0aW9uOjpPcGVy
YXRpb25UeXBlIHR5cGUsIHVuc2lnbmVkIHBhc3MpCiB7Ci0gICAgUmVmUHRyPFN0YW5kYXJkRmls
dGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGFkb3B0UmVmKG5ldyBTdGFuZGFyZEZpbHRlclByb2dyYW0o
dHlwZSwgcGFzcykpOworICAgIFJlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IHByb2dyYW0g
PSBhZG9wdFJlZihuZXcgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKGNvbnRleHQsIHR5cGUsIHBhc3Mp
KTsKICAgICBpZiAoIXByb2dyYW0tPm1faWQpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC02OTQs
MjEgKzY4OCwyMSBAQCBzdGF0aWMgZmxvYXQqIGdhdXNzaWFuS2VybmVsKCkKICAgICByZXR1cm4g
a2VybmVsOwogfQogCi12b2lkIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6cHJlcGFyZShjb25zdCBG
aWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwgdW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgR0x1aW50IGNvbnRlbnRUZXh0dXJlKQordm9pZCBTdGFuZGFyZEZpbHRlclByb2dyYW06
OnByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHBhc3Ms
IGNvbnN0IEludFNpemUmIHNpemUsIEdDM0R1aW50IGNvbnRlbnRUZXh0dXJlKQogewotICAgIGds
VXNlUHJvZ3JhbShtX2lkKTsKKyAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0obV9pZCk7CiAgICAg
c3dpdGNoIChvcGVyYXRpb24uZ2V0T3BlcmF0aW9uVHlwZSgpKSB7CiAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkdSQVlTQ0FMRToKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CiAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpIVUVfUk9UQVRFOgotICAgICAgICBnbFVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMu
YW1vdW50LCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
Jj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7CisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1f
dW5pZm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRy
aXhGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6QlJJR0hUTkVTUzoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CiAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIGdsVW5pZm9ybTFmKG1f
dW5pZm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50
VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKKyAgICAgICAg
bV9jb250ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCwgc3RhdGljX2Nh
c3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlv
bikuYW1vdW50KCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
QkxVUjogewogICAgICAgICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbik7CkBAIC03MjAsOCAr
NzE0LDggQEAgdm9pZCBTdGFuZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVy
T3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHAKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgcmFkaXVzLnNldFdpZHRoKGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ci5zdGREZXZpYXRpb24o
KSwgc2l6ZS53aWR0aCgpKSAvIHNpemUud2lkdGgoKSk7CiAKLSAgICAgICAgZ2xVbmlmb3JtMmYo
bV91bmlmb3JtTG9jYXRpb25zLmJsdXIucmFkaXVzLCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhl
aWdodCgpKTsKLSAgICAgICAgZ2xVbmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLmdh
dXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwo
KSk7CisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVy
LnJhZGl1cywgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSk7CisgICAgICAgIG1fY29u
dGV4dC0+dW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktlcm5lbCwg
R0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7CkBA
IC03MjksMjAgKzcyMywyMCBAQCB2b2lkIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6cHJlcGFyZShj
b25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwgdW5zaWduZWQgcAogICAgICAgICBzd2l0
Y2ggKHBhc3MpIHsKICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgLy8gRmlyc3QgcGFzczog
dmVydGljYWwgYWxwaGEgYmx1ci4KLSAgICAgICAgICAgIGdsVW5pZm9ybTJmKG1fdW5pZm9ybUxv
Y2F0aW9ucy5zaGFkb3cub2Zmc2V0LCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxv
YXQoc2l6ZS53aWR0aCgpKSwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNp
emUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGdsVW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9u
cy5zaGFkb3cuYmx1clJhZGl1cywgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS53
aWR0aCgpKSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm0xZnYobV91bmlmb3JtTG9jYXRpb25zLnNo
YWRvdy5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFu
S2VybmVsKCkpOworICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobV91bmlmb3JtTG9j
YXRpb25zLnNoYWRvdy5vZmZzZXQsIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigpLngoKSkgLyBmbG9h
dChzaXplLndpZHRoKCkpLCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS55KCkpIC8gZmxvYXQoc2l6
ZS5oZWlnaHQoKSkpOworICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobV91bmlmb3Jt
TG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9h
dChzaXplLndpZHRoKCkpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihtX3Vu
aWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFM
Rl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSAxOgogICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHdlIG5lZWQgdGhlIHNoYWRvdyBj
b2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3IgY29tcG9zaXRpbmcuCi0gICAgICAgICAg
ICBnbFVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMsIHNoYWRv
dy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGds
VW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsLCBHQVVT
U0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7Ci0gICAgICAgICAgICBn
bEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpOwotICAgICAgICAgICAgZ2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBjb250ZW50VGV4dHVyZSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm0xaSht
X3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbnRlbnRUZXh0dXJlLCAxKTsKKyAgICAgICAgICAg
IG1fY29udGV4dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1
cywgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOworICAgICAg
ICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1
c3NpYW5LZXJuZWwsIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgp
KTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRTEpOworICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgY29udGVudFRleHR1cmUpOworICAgICAgICAgICAgbV9j
b250ZXh0LT51bmlmb3JtMWkobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb250ZW50VGV4dHVy
ZSwgMSk7CiAgICAgICAgICAgICBmbG9hdCByLCBnLCBiLCBhOwogICAgICAgICAgICAgc2hhZG93
LmNvbG9yKCkuZ2V0UkdCQShyLCBnLCBiLCBhKTsKLSAgICAgICAgICAgIGdsVW5pZm9ybTRmKG1f
dW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29sb3IsIHIsIGcsIGIsIGEpOworICAgICAgICAgICAg
bV9jb250ZXh0LT51bmlmb3JtNGYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb2xvciwgciwg
ZywgYiwgYSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
QEAgLTc1OSw3ICs3NTMsNyBAQCBQYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlckZvckZpbHRlcgogICAgIGludCBrZXkg
PSBpbnQodHlwZSkgfCAocGFzcyA8PCAxNik7CiAgICAgRmlsdGVyTWFwOjppdGVyYXRvciBpdGVy
YXRvciA9IG1fZmlsdGVyTWFwLmZpbmQoa2V5KTsKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9maWx0
ZXJNYXAuZW5kKCkpIHsKLSAgICAgICAgcHJvZ3JhbSA9IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6
Y3JlYXRlKHR5cGUsIHBhc3MpOworICAgICAgICBwcm9ncmFtID0gU3RhbmRhcmRGaWx0ZXJQcm9n
cmFtOjpjcmVhdGUobV9jb250ZXh0LCB0eXBlLCBwYXNzKTsKICAgICAgICAgaWYgKCFwcm9ncmFt
KQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyLmgKaW5kZXggNzg1NDk4ZS4uYmU0NWM1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyLmgKQEAgLTI0LDkgKzI0LDkgQEAKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKIAogI2luY2x1ZGUgIkZsb2F0UXVh
ZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5o
IgotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgpAQCAtNDQsMzkgKzQ0LDQwIEBAIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSA6IHB1YmxpYyBSZWZDb3VudGVk
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiB7CiBwdWJsaWM6Ci0gICAgR0x1aW50IGlkKCkg
eyByZXR1cm4gbV9pZDsgfQotICAgIEdMdWludCB2ZXJ0ZXhBdHRyaWIoKSB7IHJldHVybiBtX3Zl
cnRleEF0dHJpYjsgfQorICAgIFBsYXRmb3JtM0RPYmplY3QgaWQoKSB7IHJldHVybiBtX2lkOyB9
CisgICAgR0MzRHVpbnQgdmVydGV4QXR0cmliKCkgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWI7IH0K
IAotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNoYWRl
clNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpOworICAgIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgY2hhciogdmVydGV4
U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSk7CiAgICAgdmly
dHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKTsKIAogICAgIHZpcnR1YWwgdm9pZCBw
cmVwYXJlKGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqKSB7IH0KLSAgICBHTGlu
dCBtYXRyaXhMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4TG9jYXRpb247IH0KLSAg
ICBHTGludCBmbGlwTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZsaXBMb2NhdGlvbjsgfQot
ICAgIEdMaW50IHRleHR1cmVTaXplTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVT
aXplTG9jYXRpb247IH0KLSAgICBHTGludCBzb3VyY2VUZXh0dXJlTG9jYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3NvdXJjZVRleHR1cmVMb2NhdGlvbjsgfQotICAgIEdMaW50IG1hc2tUZXh0dXJl
TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hc2tUZXh0dXJlTG9jYXRpb247IH0KLSAgICBH
TGludCBvcGFjaXR5TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHlMb2NhdGlvbjsg
fQorICAgIEdDM0RpbnQgbWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hdHJpeExv
Y2F0aW9uOyB9CisgICAgR0MzRGludCBmbGlwTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Zs
aXBMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgdGV4dHVyZVNpemVMb2NhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dHVyZVNpemVMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgc291cmNlVGV4dHVy
ZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VUZXh0dXJlTG9jYXRpb247IH0KKyAg
ICBHQzNEaW50IG1hc2tUZXh0dXJlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hc2tUZXh0
dXJlTG9jYXRpb247IH0KKyAgICBHQzNEaW50IG9wYWNpdHlMb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fb3BhY2l0eUxvY2F0aW9uOyB9CiAKLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVW5pZm9y
bUxvY2F0aW9uKEdMaW50IGxvY2F0aW9uKSB7IHJldHVybiBsb2NhdGlvbiA+PSAwOyB9CisgICAg
c3RhdGljIGJvb2wgaXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihHQzNEaW50IGxvY2F0aW9uKSB7IHJl
dHVybiBsb2NhdGlvbiA+PSAwOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGdldFVuaWZvcm1M
b2NhdGlvbihHTGludCYgdmFyLCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB2b2lkIGdldFVuaWZv
cm1Mb2NhdGlvbihHQzNEaW50JiB2YXIsIGNvbnN0IGNoYXIqIG5hbWUpOwogICAgIHZvaWQgaW5p
dGlhbGl6ZVByb2dyYW0oKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpIHsgfQogICAg
IGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4
U2hhZGVyU291cmNlLmRhdGEoKTsgfQogICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291
cmNlKCkgY29uc3QgeyByZXR1cm4gbV9mcmFnbWVudFNoYWRlclNvdXJjZS5kYXRhKCk7IH0KIAot
ICAgIEdMdWludCBtX2lkOwotICAgIEdMdWludCBtX3ZlcnRleEF0dHJpYjsKLSAgICBHTHVpbnQg
bV92ZXJ0ZXhTaGFkZXI7Ci0gICAgR0x1aW50IG1fZnJhZ21lbnRTaGFkZXI7Ci0gICAgR0xpbnQg
bV9tYXRyaXhMb2NhdGlvbjsKLSAgICBHTGludCBtX2ZsaXBMb2NhdGlvbjsKLSAgICBHTGludCBt
X3RleHR1cmVTaXplTG9jYXRpb247Ci0gICAgR0xpbnQgbV9zb3VyY2VUZXh0dXJlTG9jYXRpb247
Ci0gICAgR0xpbnQgbV9vcGFjaXR5TG9jYXRpb247Ci0gICAgR0xpbnQgbV9tYXNrVGV4dHVyZUxv
Y2F0aW9uOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgUGxhdGZvcm0z
RE9iamVjdCBtX2lkOworICAgIEdDM0R1aW50IG1fdmVydGV4QXR0cmliOworICAgIFBsYXRmb3Jt
M0RPYmplY3QgbV92ZXJ0ZXhTaGFkZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZyYWdtZW50
U2hhZGVyOworICAgIEdDM0RpbnQgbV9tYXRyaXhMb2NhdGlvbjsKKyAgICBHQzNEaW50IG1fZmxp
cExvY2F0aW9uOworICAgIEdDM0RpbnQgbV90ZXh0dXJlU2l6ZUxvY2F0aW9uOworICAgIEdDM0Rp
bnQgbV9zb3VyY2VUZXh0dXJlTG9jYXRpb247CisgICAgR0MzRGludCBtX29wYWNpdHlMb2NhdGlv
bjsKKyAgICBHQzNEaW50IG1fbWFza1RleHR1cmVMb2NhdGlvbjsKIAogcHJpdmF0ZToKICAgICBD
U3RyaW5nIG1fdmVydGV4U2hhZGVyU291cmNlOwpAQCAtODcsMzMgKzg4LDM2IEBAIHByaXZhdGU6
CiBjbGFzcyBTdGFuZGFyZEZpbHRlclByb2dyYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxTdGFuZGFy
ZEZpbHRlclByb2dyYW0+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TdGFuZGFyZEZpbHRlclBy
b2dyYW0oKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShjb25zdCBGaWx0ZXJPcGVyYXRpb24m
LCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRTaXplJiwgR0x1aW50IGNvbnRlbnRUZXh0dXJlKTsK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IGNyZWF0ZShGaWx0
ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIHBhc3MpOwotICAgIEdMdWludCB2
ZXJ0ZXhBdHRyaWIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQotICAgIEdMdWlu
dCB0ZXhDb29yZEF0dHJpYigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4Q29vcmRBdHRyaWI7IH0KLSAg
ICBHTHVpbnQgdGV4dHVyZVVuaWZvcm0oKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVVbmlmb3Jt
TG9jYXRpb247IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShjb25zdCBGaWx0ZXJPcGVyYXRp
b24mLCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRTaXplJiwgR0MzRHVpbnQgY29udGVudFRleHR1
cmUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gY3JlYXRl
KEdyYXBoaWNzQ29udGV4dDNEKiwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCB1bnNp
Z25lZCBwYXNzKTsKKyAgICBHQzNEdWludCB2ZXJ0ZXhBdHRyaWIoKSBjb25zdCB7IHJldHVybiBt
X3ZlcnRleEF0dHJpYjsgfQorICAgIEdDM0R1aW50IHRleENvb3JkQXR0cmliKCkgY29uc3QgeyBy
ZXR1cm4gbV90ZXhDb29yZEF0dHJpYjsgfQorICAgIEdDM0R1aW50IHRleHR1cmVVbmlmb3JtKCkg
Y29uc3QgeyByZXR1cm4gbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOyB9Citwcm90ZWN0ZWQ6Cisg
ICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKIHByaXZhdGU6Ci0gICAgU3RhbmRhcmRG
aWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgcGFz
cyk7Ci0gICAgR0x1aW50IG1faWQ7Ci0gICAgR0x1aW50IG1fdmVydGV4U2hhZGVyOwotICAgIEdM
dWludCBtX2ZyYWdtZW50U2hhZGVyOwotICAgIEdMdWludCBtX3ZlcnRleEF0dHJpYjsKLSAgICBH
THVpbnQgbV90ZXhDb29yZEF0dHJpYjsKLSAgICBHTHVpbnQgbV90ZXh0dXJlVW5pZm9ybUxvY2F0
aW9uOworICAgIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbSgpOworICAgIFN0YW5kYXJkRmlsdGVyUHJv
Z3JhbShHcmFwaGljc0NvbnRleHQzRCosIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwg
dW5zaWduZWQgcGFzcyk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2lkOworICAgIFBsYXRmb3Jt
M0RPYmplY3QgbV92ZXJ0ZXhTaGFkZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZyYWdtZW50
U2hhZGVyOworICAgIEdDM0R1aW50IG1fdmVydGV4QXR0cmliOworICAgIEdDM0R1aW50IG1fdGV4
Q29vcmRBdHRyaWI7CisgICAgR0MzRHVpbnQgbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOwogICAg
IHVuaW9uIHsKLSAgICAgICAgR0x1aW50IGFtb3VudDsKKyAgICAgICAgR0MzRHVpbnQgYW1vdW50
OwogCiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBHTHVpbnQgcmFkaXVzOwotICAgICAg
ICAgICAgR0x1aW50IGdhdXNzaWFuS2VybmVsOworICAgICAgICAgICAgR0MzRHVpbnQgcmFkaXVz
OworICAgICAgICAgICAgR0MzRHVpbnQgZ2F1c3NpYW5LZXJuZWw7CiAgICAgICAgIH0gYmx1cjsK
IAogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0x1aW50IGJsdXJSYWRpdXM7Ci0gICAg
ICAgICAgICBHTHVpbnQgY29sb3I7Ci0gICAgICAgICAgICBHTHVpbnQgb2Zmc2V0OwotICAgICAg
ICAgICAgR0x1aW50IGNvbnRlbnRUZXh0dXJlOwotICAgICAgICAgICAgR0x1aW50IGdhdXNzaWFu
S2VybmVsOworICAgICAgICAgICAgR0MzRHVpbnQgYmx1clJhZGl1czsKKyAgICAgICAgICAgIEdD
M0R1aW50IGNvbG9yOworICAgICAgICAgICAgR0MzRHVpbnQgb2Zmc2V0OworICAgICAgICAgICAg
R0MzRHVpbnQgY29udGVudFRleHR1cmU7CisgICAgICAgICAgICBHQzNEdWludCBnYXVzc2lhbktl
cm5lbDsKICAgICAgICAgfSBzaGFkb3c7CiAgICAgfSBtX3VuaWZvcm1Mb2NhdGlvbnM7CiB9OwpA
QCAtMTIxLDc3ICsxMjUsODkgQEAgcHJpdmF0ZToKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1TaW1wbGUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2lt
cGxlPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU2ltcGxlPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2lt
cGxlKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU2ltcGxlKGNvbnRleHQpKTsKICAgICB9CiAKIHByb3RlY3RlZDoKKyAgICBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZShHcmFwaGljc0NvbnRleHQzRCopOworcHJpdmF0ZToK
ICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpOwogfTsKIAogY2xhc3MgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlIDogcHVibGljIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlPiBjcmVhdGUoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoY29udGV4dCkp
OwogICAgIH0KIAorcHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVj
dFNpbXBsZShHcmFwaGljc0NvbnRleHQzRCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKTsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtT3BhY2l0eUFuZE1hc2s+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gY3JlYXRlKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCkpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soY29u
dGV4dCkpOwogICAgIH0KIAorcHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtT3BhY2l0eUFuZE1hc2soR3JhcGhpY3NDb250ZXh0M0QqKTsKIHByaXZhdGU6CiAgICAgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpOwogfTsKIAogY2xhc3MgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2sgOiBwdWJsaWMgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrPiBjcmVhdGUoKQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlB
bmRNYXNrPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNp
dHlBbmRNYXNrKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKGNvbnRleHQpKTsKICAgICB9CiAKK3Byb3Rl
Y3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayhH
cmFwaGljc0NvbnRleHQzRCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVJlY3RPcGFjaXR5QW5kTWFzaygpOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1Tb2xpZENvbG9yIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVNvbGlkQ29sb3I+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1Tb2xpZENvbG9yPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU29saWRDb2xvcigpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoY29udGV4dCkpOwogICAgIH0KIAotICAg
IEdMaW50IGNvbG9yTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbG9yTG9jYXRpb247IH0K
KyAgICBHQzNEaW50IGNvbG9yTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbG9yTG9jYXRp
b247IH0KIAorcHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRD
b2xvcihHcmFwaGljc0NvbnRleHQzRCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNvbGlkQ29sb3IoKTsKLSAgICBHTGludCBtX2NvbG9yTG9jYXRpb247CisgICAg
R0MzRGludCBtX2NvbG9yTG9jYXRpb247CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s+IGNyZWF0ZShH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2soKSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRp
YWxpYXNpbmdOb01hc2soY29udGV4dCkpOwogICAgIH0KIAotICAgIEdMaW50IGV4cGFuZGVkUXVh
ZFZlcnRpY2VzSW5UZXh0dXJlQ29vcmRpbmF0ZXNMb2NhdGlvbigpIHsgcmV0dXJuIG1fZXhwYW5k
ZWRRdWFkVmVydGljZXNJblRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247IH0KLSAgICBHTGludCBl
eHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbigpIHsgcmV0dXJuIG1fZXhwYW5k
ZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb247IH0KKyAgICBHQzNEaW50IGV4cGFuZGVk
UXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29vcmRpbmF0ZXNMb2NhdGlvbigpIHsgcmV0dXJuIG1fZXhw
YW5kZWRRdWFkVmVydGljZXNJblRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247IH0KKyAgICBHQzNE
aW50IGV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uKCkgeyByZXR1cm4gbV9l
eHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbjsgfQogCitwcm90ZWN0ZWQ6Cisg
ICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2soR3JhcGhpY3ND
b250ZXh0M0QqKTsKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRp
YWxpYXNpbmdOb01hc2soKTsKIAotICAgIEdMaW50IG1fZXhwYW5kZWRRdWFkVmVydGljZXNJblRl
eHR1cmVDb3JkaW5hdGVzTG9jYXRpb247Ci0gICAgR0xpbnQgbV9leHBhbmRlZFF1YWRFZGdlc0lu
U2NyZWVuU3BhY2VMb2NhdGlvbjsKKyAgICBHQzNEaW50IG1fZXhwYW5kZWRRdWFkVmVydGljZXNJ
blRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247CisgICAgR0MzRGludCBtX2V4cGFuZGVkUXVhZEVk
Z2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIgewpAQCAtMjA2LDcgKzIyMiw4IEBAIHB1YmxpYzoKICAgICAgICAgU29saWRDb2xv
cgogICAgIH07CiAKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpOworICAgIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkgeyB9OworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyKEdyYXBoaWNzQ29udGV4dDNEKik7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIoKTsKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTIyMSwxMiArMjM4LDEy
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFNoYWRlclR5cGUsIFJl
ZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4sIERlZmF1bHRIYXNoPGludD46Okhhc2gs
IEhhc2hUcmFpdHM8aW50PiA+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOwogICAgIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwIG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1N
YXA7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKIAogI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQ
cm9ncmFtPiA+IEZpbHRlck1hcDsKICAgICBGaWx0ZXJNYXAgbV9maWx0ZXJNYXA7CiAjZW5kaWYK
LQogfTsKIAogfQo=
</data>
<flag name="review"
          id="167911"
          type_id="1"
          status="-"
          setter="noam"
    />
    <flag name="commit-queue"
          id="167912"
          type_id="3"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158621</attachid>
            <date>2012-08-15 12:56:30 -0700</date>
            <delta_ts>2012-08-22 03:55:39 -0700</delta_ts>
            <desc>patch</desc>
            <filename>2012_08_15.diff</filename>
            <type>text/plain</type>
            <size>117846</size>
            <attacher name="Roland Takacs">rtakacs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2OTkyZDhiLi40ZDhkOTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjY2
IEBACisyMDEyLTA4LTEyICBIZWxkZXIgQ29ycmVpYSAgPGhlbGRlci5jb3JyZWlhQG5va2lhLmNv
bT4KKworICAgICAgICBbVGV4bWFwXSBNb3ZlIFRleHR1cmVNYXBwZXJHTCB0byB1c2UgR3JhcGhp
Y3NDb250ZXh0M0QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc4NjcyCisKKyAgICAgICAgSXQgaXMgYmFzZWQgb24gYSBwcmV2aW91cyBwYXRjaCBieSBI
ZWxkZXIgQ29ycmVpYS4KKworICAgICAgICBUZXh0dXJlTWFwcGVyR0wgKFRNR0wpIGluY2x1ZGVz
IGRpcmVjdCBHTCBjYWxscyBhbmQKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QgKEdDM0QpIG9m
ZmVycyBtYW55IGNvbnZlbmllbmNlcyBvdmVyIHRoZQorICAgICAgICBmb3JtZXIgYXBwcm9hY2g6
IHVzaW5nIGV4aXN0aW5nIENTUyBzaGFkZXIgY29kZSwgQU5HTEUgZm9yCisgICAgICAgIHNoYWRl
ciBjb21waWxhdGlvbiwgcmV1c2luZyBXZWJDb3JlOjpUZXh0dXJlLCBoYXZpbmcgc2hhZGVycyBh
bmQKKyAgICAgICAgdGV4dHVyZXMgdGhhdCBjYW4gZGVsZXRlIHRoZW1zZWx2ZXMuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBiYWNrZW5kIG9mIFRNR0wgdG8gR0MzRC4gSXQgd2Fz
IGluaXRpYWxseQorICAgICAgICB0aG91Z2h0IHRvIGludHJvZHVjZSBhIG5ldyBiYWNrZW5kIChz
YXksIFRleHR1cmVNYXBwZXJHQzNEKSwgYnV0CisgICAgICAgIGluIHRoZSBlbmQgaXQgd2FzIGFn
cmVlZCB0byBjb25zb2xpZGF0ZSBpdCBpbnNpZGUgVE1HTCBpbnN0ZWFkLAorICAgICAgICBhcyBh
biBhZGRpdGlvbmFsIFRleHR1cmVNYXBwZXIgc3ViY2xhc3Mgd291bGQgZ2V0IHN0YWxlIHZlcnkK
KyAgICAgICAgcXVpY2tseS4KKworICAgICAgICBBIEdDM0Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkg
VE1HTCB3aXRoIHRoZSBuZXdseSBpbnRyb2R1Y2VkCisgICAgICAgIGJ1aWxkZXIgY3JlYXRlRm9y
Q3VycmVudEdMQ29udGV4dCgpLCB3aGljaCBpbiB0dXJuIHVzZXMKKyAgICAgICAgdGhlIG5ldyBS
ZW5kZXJUb0N1cnJlbnRHTENvbnRleHQgZmxhZyB1bmRlcm5lYXRoLgorCisgICAgICAgIFRNR0wn
cyBkZXBlbmRlbmN5IG9uIE9wZW5HTFNoaW1zLmggd2FzIGNvbXBsZXRlbHkgcmVtb3ZlZC4KKyAg
ICAgICAgSG93ZXZlciwgR0MzRCBkb2VzIG5vdCBtYXAgZXZlcnkgc2luZ2xlIEdMIGNvbnN0YW50
LiBUaHVzLCBpdCdzCisgICAgICAgIGltcG9ydGFudCB0byBkb2N1bWVudCB0aGUgZm9sbG93aW5n
OgorICAgICAgICAgICAgLSBHTF9GQUxTRSB3YXMgbWFwcGVkIHRvIGZhbHNlLgorICAgICAgICAg
ICAgLSBHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgR0xfVU5QQUNLX1NLSVBfUElYRUxTLAorICAgICAg
ICAgICAgR0xfVU5QQUNLX1NLSVBfUk9XUywgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBhbmQK
KyAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViB3ZXJlIGxvY2FsbHkgZGVm
aW5lZCBpbiBUTUdMLgorCisgICAgICAgIFRoZSBwYXRjaCB3YXMgb3JpZ2luYWxseSBkZXZlbG9w
ZWQgYnkgSGVsZGVyIENvcnJlaWEgYW5kIGZpbmlzaGVkCisgICAgICAgIGJ5IFJvbGFuZCBUYWth
Y3MgKHJ0YWthY3NAaW5mLnUtc3plZ2VkLmh1KS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHJl
ZmFjdG9yaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9HcmFwaGlj
c0NvbnRleHQzRENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3Vw
cG9ydC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAg
ICAgICAgKEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4dDNEQmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3Jh
cGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpjcmVhdGVGb3JDdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkREaXJl
Y3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTEVTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJ
bWFnZTJEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQz
RFF0LmNwcDoKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZU9m
ZnNjcmVlbkJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmluaXRpYWxpemVBTkdMRSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6On5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAg
ICAgIChTaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0
YTo6U2hhcmVkR0xEYXRhOjpjdXJyZW50U2hhcmVkR0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6U2hhcmVkR0xEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OnNoYXJlZEdMRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpUZXh0dXJlTWFwcGVyR0xEYXRhKToKKyAg
ICAgICAgKFRleHR1cmVNYXBwZXJHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6c2Npc3NvckNs
aXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2s6OmFwcGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OmluaXRpYWxpemVTdGVu
Y2lsKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6VGV4dHVyZU1hcHBlckdM
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YmVnaW5QYWludGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50aW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVJlY3RhbmdsZUFSQik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OnZpZXdwb3J0TWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6ZGlkUmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OmRyYXdGaWx0ZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJl
R0w6OmluaXRpYWxpemVTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVH
TDo6Y2xlYXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmNy
ZWF0ZUZib0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6Ymlu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6On5CaXRtYXBUZXh0dXJlR0wp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiaW5kRGVmYXVsdFN1cmZhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpblNjaXNzb3JDbGlwKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZW5kQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJHTDo6Z3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoVGV4dHVyZU1hcHBlckdMKToK
KyAgICAgICAgKENsaXBTdGFjayk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6
OnRleHR1cmVUYXJnZXQpOgorICAgICAgICAoQml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6Qml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6Z2V0U2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmluaXRpYWxpemVQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpnZXRVbmlmb3JtTG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06On5U
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9y
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVJlY3RTaW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFj
aXR5QW5kTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVJlY3RPcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0
eUFuZE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1B
bnRpYWxpYXNpbmdOb01hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5n
Tm9NYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZp
bHRlclByb2dyYW06On5TdGFuZGFyZEZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpwcmVwYXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJGb3JGaWx0ZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp2ZXJ0ZXhBdHRyaWIpOgor
ICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Om1hdHJpeExvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpmbGlwTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OnRleHR1cmVTaXplTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OnNvdXJj
ZVRleHR1cmVMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbTo6bWFza1RleHR1cmVMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbTo6b3BhY2l0eUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKToKKyAg
ICAgICAgKFN0YW5kYXJkRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFy
ZEZpbHRlclByb2dyYW06OnZlcnRleEF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFy
ZEZpbHRlclByb2dyYW06OnRleENvb3JkQXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5k
YXJkRmlsdGVyUHJvZ3JhbTo6dGV4dHVyZVVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OmNyZWF0ZSk6CisgICAgICAgIChUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmNyZWF0ZSk6CisgICAgICAgIChUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRlKToKKyAgICAgICAgKFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OmNyZWF0ZSk6Cisg
ICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlk
Q29sb3I6OmNvbG9yTG9jYXRpb24pOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1Tb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtQW50aWFsaWFzaW5nTm9NYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OmV4cGFuZGVkUXVhZFZlcnRp
Y2VzSW5UZXh0dXJlQ29vcmRpbmF0ZXNMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6ZXhwYW5kZWRRdWFkRWRn
ZXNJblNjcmVlblNwYWNlTG9jYXRpb24pOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1BbnRpYWxpYXNpbmdOb01hc2spOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKToKKyAgICAgICAgKFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKToKKworMjAxMi0wOC0xMiAgSGVsZGVyIENvcnJlaWEg
IDxoZWxkZXIuY29ycmVpYUBub2tpYS5jb20+CisKKyAgICAgICAgW1RleG1hcF0gTW92ZSBUZXh0
dXJlTWFwcGVyR0wgdG8gdXNlIEdyYXBoaWNzQ29udGV4dDNECisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODY3MgorCisgICAgICAgIEl0IGlzIGJhc2Vk
IG9uIGEgcHJldmlvdXMgcGF0Y2ggYnkgSGVsZGVyIENvcnJlaWEuCisKKyAgICAgICAgVGhpcyBp
cyBwYXJ0IG9mIGEgc2V2ZXJhbCBwYXRjaC1yZWZhY3RvcmluZy4KKworICAgICAgICBJbnRyb2R1
Y2UgYWRkaXRpb25hbCBsb2dpYyBpbiBHcmFwaGljc0NvbnRleHQzRFF0IHRvIHN1cHBvcnQgYQor
ICAgICAgICBuZXcgUmVuZGVyVG9DdXJyZW50R0xDb250ZXh0IFJlbmRlclN0eWxlLiBUaGlzIGlz
IG5lY2Vzc2FyeSB0bworICAgICAgICB1c2UgR0MzRCBmb3Igb3RoZXIgdGhpbmdzIHRoYW4gV2Vi
R0wsIGxpa2UgVGV4dHVyZU1hcHBlci4KKworICAgICAgICBUaGUgR0MzRCBjb25zdHJ1Y3RvciBu
b3cgYWNjZXB0cyBhIFJlbmRlclN0eWxlIGluc3RlYWQgb2YgdGhlCisgICAgICAgIGJvb2xlYW4g
cmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cgYW5kIHRodXMgbWltaWNzIGNyZWF0ZSgpJ3MKKyAg
ICAgICAgc2lnbmF0dXJlLiBUaGlzIGhhcyBiZWVuIGNoYW5nZWQgZm9yIGFsbCBwb3J0cyBpbiB0
aGlzIHBhdGNoLgorCisgICAgICAgIEEgbmV3IEdDM0Q6OmNyZWF0ZUZvckN1cnJlbnRHTENvbnRl
eHQoKSBidWlsZGVyIHdhcworICAgICAgICBpbnRyb2R1Y2VkIHRvIGJldHRlciBhYnN0cmFjdCB0
aGUgZ29hbCBvZiB1c2luZyBHQzNEIHdpdGggdGhlCisgICAgICAgIGN1cnJlbnQgY29udGV4dC4K
KworICAgICAgICBUaGUgcGF0Y2ggd2FzIG9yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5IEhlbGRlciBD
b3JyZWlhIGFuZCBmaW5pc2hlZAorICAgICAgICBieSBSb2xhbmQgVGFrYWNzIChydGFrYWNzQGlu
Zi51LXN6ZWdlZC5odSkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCByZWZhY3RvcmluZy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3ND
b250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgIChHcmFwaGlj
c0NvbnRleHQzRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFw
aGljc0NvbnRleHQzREJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3Jh
cGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3Jh
cGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Okdy
YXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhp
Y3NDb250ZXh0M0RFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3ND
b250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRl
eHQzRE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNE
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdl
MkQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlRm9yQ3VycmVudEdMQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJERGlyZWN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAg
ICAgIChHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVPZmZzY3JlZW5CdWZmZXJz
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjppbml0aWFsaXplQU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQpOgorCisyMDEyLTA4LTEyICBIZWxk
ZXIgQ29ycmVpYSAgPGhlbGRlci5jb3JyZWlhQG5va2lhLmNvbT4KKworICAgICAgICBbVGV4bWFw
XSBNb3ZlIFRleHR1cmVNYXBwZXJHTCB0byB1c2UgR3JhcGhpY3NDb250ZXh0M0QKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NjcyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNpbmcgYSBuZXcg
R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkREaXJlY3QoKSB0byBhbGxvdworICAgICAgICBp
bml0aWFsaXphdGlvbiBvZiB0ZXh0dXJlcyB3aXRob3V0IGFsbG9jYXRpb24uIFRoZSBleGlzdGlu
ZworICAgICAgICB0ZXh0SW1hZ2UyRCgpIHJlZnVzZXMgYSBudWxsIHBpeGVsIGJ1ZmZlciwgYW5k
CisgICAgICAgIHRleEltYWdlMkRSZXNvdXJjZVNhZmUoKSBhbGxvd3MgaXQgYnV0IHBlcmZvcm1z
IG1lbW9yeQorICAgICAgICBhbGxvY2F0aW9uIGFuZCB6ZXJvZXMgdGhlIGJpdHMuIFRoaXMgd2Fz
IG5vdCBmYXN0IGVub3VnaCBmb3IKKyAgICAgICAgQml0bWFwVGV4dHVyZUdMIGZyZXF1ZW50IHNl
dHRpbmcgdXAuCisKKyAgICAgICAgVGhlIHBhdGNoIHdhcyBvcmlnaW5hbGx5IGRldmVsb3BlZCBi
eSBIZWxkZXIgQ29ycmVpYSBhbmQgZmluaXNoZWQKKyAgICAgICAgYnkgUm9sYW5kIFRha2FjcyAo
cnRha2Fjc0BpbmYudS1zemVnZWQuaHUpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEp
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAg
ICAgICAgKEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRERpcmVjdCk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0xFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4
SW1hZ2UyRCk6CisKIDIwMTItMDgtMTUgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgVXNlIGxpdGVyYWwgaW5pdGlhbGl6YXRpb24gZm9yIENTUydzIHBz
ZXVkbyB0eXBlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
c3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKaW5k
ZXggMTI3ZmNmYS4uZjhlNDZkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vc3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0dyYXBoaWNzQ29udGV4dDNEQ2hy
b21pdW0uY3BwCkBAIC00Myw3ICs0Myw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR3Jh
cGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzLCBIb3N0V2luZG93KiwgYm9vbCkKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0Nv
bnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcywgSG9zdFdpbmRvdyosIEdyYXBo
aWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9HcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuY3BwCmluZGV4IGY2YjczMGQuLjBkNTcxYjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0
L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCkKIAogUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFw
aGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChQYXNzT3duUHRyPFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0Q+IHdlYkNvbnRleHQsIGJvb2wgcHJlc2VydmVEcmF3aW5nQnVmZmVyKQogewotICAg
IFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGlj
c0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcygpLCAwLCBmYWxzZSAvKiBv
bnNjcmVlbiAqLykpOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFk
b3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cygpLCAwKSk7CiAKICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBwcml2ID0g
YWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSh3ZWJDb250ZXh0LCBwcmVzZXJ2
ZURyYXdpbmdCdWZmZXIpKTsKICAgICBjb250ZXh0LT5tX3ByaXZhdGUgPSBwcml2LnJlbGVhc2Uo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5oCmluZGV4IGY1ZTZmMWYuLmIyZTZhNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtMjUwLDYgKzI1
MCw3IEBAIHB1YmxpYzoKICAgICAgICAgQUxQSEEgPSAweDE5MDYsCiAgICAgICAgIFJHQiA9IDB4
MTkwNywKICAgICAgICAgUkdCQSA9IDB4MTkwOCwKKyAgICAgICAgQkdSQSA9IDB4ODBFMSwKICAg
ICAgICAgTFVNSU5BTkNFID0gMHgxOTA5LAogICAgICAgICBMVU1JTkFOQ0VfQUxQSEEgPSAweDE5
MEEsCiAgICAgICAgIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQgPSAweDgwMzMsCkBAIC00NTgsNyAr
NDU5LDggQEAgcHVibGljOgogCiAgICAgZW51bSBSZW5kZXJTdHlsZSB7CiAgICAgICAgIFJlbmRl
ck9mZnNjcmVlbiwKLSAgICAgICAgUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cKKyAgICAgICAg
UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3csCisgICAgICAgIFJlbmRlclRvQ3VycmVudEdMQ29u
dGV4dAogICAgIH07CiAKICAgICBjbGFzcyBDb250ZXh0TG9zdENhbGxiYWNrIHsKQEAgLTQ3Nyw2
ICs0NzksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRFcnJvck1lc3NhZ2VDYWxsYmFjayhQYXNz
T3duUHRyPEVycm9yTWVzc2FnZUNhbGxiYWNrPik7CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gY3JlYXRlKEF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBSZW5kZXJT
dHlsZSA9IFJlbmRlck9mZnNjcmVlbik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNyZWF0ZUZvckN1cnJlbnRHTENvbnRleHQoKTsKICAgICB+R3JhcGhpY3NDb250
ZXh0M0QoKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTUyNCw2ICs1MjcsOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOwogI2VuZGlmCiAKKyAgICAvLyBFcXVpdmFsZW50
IHRvIDo6Z2xUZXhJbWFnZTJEKCkuIEFsbG93cyBwaXhlbHM9PTAgd2l0aCBubyBhbGxvY2F0aW9u
LgorICAgIHZvaWQgdGV4SW1hZ2UyRERpcmVjdChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNv
bnN0IHZvaWQqIHBpeGVscyk7CisKICAgICAvLyBIZWxwZXIgdG8gdGV4SW1hZ2UyRCB3aXRoIHBp
eGVsPT0wIGNhc2U6IHBpeGVscyBhcmUgaW5pdGlhbGl6ZWQgdG8gMC4KICAgICAvLyBSZXR1cm4g
dHJ1ZSBpZiBubyBHTCBlcnJvciBpcyBzeW50aGVzaXplZC4KICAgICAvLyBCeSBkZWZhdWx0LCBh
bGlnbm1lbnQgaXMgNCwgdGhlIE9wZW5HTCBkZWZhdWx0IHNldHRpbmcuCkBAIC04NjcsNyArODcz
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB1bnNpZ25lZCBnZXRDaGFubmVsQml0c0J5Rm9ybWF0
KEdDM0RlbnVtKTsKIAogICBwcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dDNEKEF0dHJpYnV0
ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wgcmVuZGVyRGlyZWN0bHlUb0hv
c3RXaW5kb3cpOworICAgIEdyYXBoaWNzQ29udGV4dDNEKEF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cq
LCBSZW5kZXJTdHlsZSA9IFJlbmRlck9mZnNjcmVlbik7CiAKICAgICAvLyBFYWNoIHBsYXRmb3Jt
IG11c3QgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZC4KICAgICAvLwpA
QCAtOTgyLDYgKzk4OCw3IEBAIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uOwogCiAgICAgQXR0cmlidXRlcyBtX2F0dHJzOworICAgIFJlbmRlclN0eWxl
IG1fcmVuZGVyU3R5bGU7CiAgICAgVmVjdG9yPFZlY3RvcjxmbG9hdD4gPiBtX3ZlcnRleEFycmF5
OwogCiAgICAgR0MzRHVpbnQgbV90ZXh0dXJlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJsYWNrQmVycnku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGlj
c0NvbnRleHQzREJsYWNrQmVycnkuY3BwCmluZGV4IGYxMDgxZWYuLmQzMDAyY2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3ND
b250ZXh0M0RCbGFja0JlcnJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4dDNEQmxhY2tCZXJyeS5jcHAKQEAgLTQ3LDEw
ICs0NywxMCBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlKEF0dHJpYnV0ZXMgYXR0cmlicywgSG9zdAogICAgIGlmIChyZW5kZXJTdHlsZSA9
PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJpYnMsIGhvc3RXaW5kb3cs
IGZhbHNlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRy
aWJzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkpOwogfQogCi1HcmFwaGljc0NvbnRleHQzRDo6
R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhv
c3RXaW5kb3cqLCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQorR3JhcGhpY3NDb250
ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0
dHJzLCBIb3N0V2luZG93KiwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0
eWxlKQogICAgIDogbV9jdXJyZW50V2lkdGgoMCkKICAgICAsIG1fY3VycmVudEhlaWdodCgwKQog
ICAgICwgbV9jb250ZXh0KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6Y3JlYXRlV2Vi
R0xDb250ZXh0KCkpCkBAIC02Nyw3ICs2Nyw3IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGlj
c0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAg
ICAgLCBtX2JvdW5kVGV4dHVyZTAoMCkKICAgICAsIG1faXNJbWFnaW5hdGlvbkhhcmR3YXJlKDAp
CiB7Ci0gICAgaWYgKCFyZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykgeworICAgIGlmIChyZW5k
ZXJTdHlsZSAhPSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykgewogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKICAgICAgICAgbV9jb21wb3NpdGluZ0xheWVyID0gV2ViR0xMYXll
cldlYktpdFRocmVhZDo6Y3JlYXRlKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RD
YWlyby5jcHAKaW5kZXggOTgyMmQ0ZS4uNjRhMmZhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
M0RDYWlyby5jcHAKQEAgLTYxLDExICs2MSwxMSBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaQog
ICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0
cmlidXRlcywgaG9zdFdpbmRvdywgZmFsc2UpKTsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cmlidXRlcywg
aG9zdFdpbmRvdywgcmVuZGVyU3R5bGUpKTsKICAgICByZXR1cm4gY29udGV4dC5yZWxlYXNlKCk7
CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRl
eHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgYm9vbCkKK0dyYXBoaWNz
Q29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxl
KQogICAgIDogbV9jdXJyZW50V2lkdGgoMCkKICAgICAsIG1fY3VycmVudEhlaWdodCgwKQogICAg
ICwgbV9hdHRycyhhdHRyaWJ1dGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0
ZXIuY3BwCmluZGV4IDRiNGIwZTMuLmFiZmJkNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29u
dGV4dDNEQ2x1dHRlci5jcHAKQEAgLTQyLDExICs0MiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVh
dGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyog
aG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQog
ewotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBH
cmFwaGljc0NvbnRleHQzRChhdHRyaWJ1dGVzLCBob3N0V2luZG93LCBmYWxzZSkpOworICAgIFJl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0Nv
bnRleHQzRChhdHRyaWJ1dGVzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkpOwogICAgIHJldHVy
biBjb250ZXh0LnJlbGVhc2UoKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29u
dGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5k
b3cqIGhvc3RXaW5kb3csIGJvb2wpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0
M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyog
aG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQog
ewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAppbmRl
eCBlZmUxYTEyLi43MjFkN2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKQEAgLTM2LDEy
ICszNiwxMiBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaQogICAgIGlmICghaW50ZXJuYWwpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0
ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCByZW5k
ZXJEaXJlY3RseVRvRXZhc0dMT2JqZWN0KSk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2lu
ZG93LCByZW5kZXJTdHlsZSkpOwogICAgIGNvbnRleHQtPm1fcHJpdmF0ZSA9IGludGVybmFsLnJl
bGVhc2UoKTsKICAgICByZXR1cm4gY29udGV4dC5yZWxlYXNlKCk7CiB9CiAKLUdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdp
bmRvdykKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRl
eHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3ND
b250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogICAgIDogbV9jdXJyZW50V2lkdGgo
MCkKICAgICAsIG1fY3VycmVudEhlaWdodCgwKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCmlu
ZGV4IGQwNDJjNjYuLjAwZTgzMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0KQEAgLTk4LDEx
ICs5OCwxMSBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaQogICAgIC8vIFRoaXMgaW1wbGVtZW50
YXRpb24gZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCByZW5kZXJpbmcgZGlyZWN0bHkgdG8gdGhl
IEhvc3RXaW5kb3cuCiAgICAgaWYgKHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVjdGx5VG9Ib3N0
V2luZG93KQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5k
b3csIGZhbHNlKSk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRv
cHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCByZW5kZXJTdHls
ZSkpOwogICAgIHJldHVybiBjb250ZXh0LT5tX2NvbnRleHRPYmogPyBjb250ZXh0LnJlbGVhc2Uo
KSA6IDA7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGlj
c0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9v
bCkKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogICAgIDogbV9jdXJyZW50V2lkdGgoMCkK
ICAgICAsIG1fY3VycmVudEhlaWdodCgwKQogICAgICwgbV9jb250ZXh0T2JqKDApCkBAIC0xMjIs
NiArMTIyLDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICAsIG1fcHJpdmF0ZShhZG9w
dFB0cihuZXcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKHRoaXMpKSkKIHsKICAgICBVTlVTRURf
UEFSQU0oaG9zdFdpbmRvdyk7CisgICAgVU5VU0VEX1BBUkFNKHJlbmRlclN0eWxlKTsKIAogICAg
IFZlY3RvcjxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4gYXR0cmliczsKICAgICBDR0xQaXhlbEZv
cm1hdE9iaiBwaXhlbEZvcm1hdE9iaiA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMLmNwcAppbmRleCBmZDQ1MDE0Li45OGUxMTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHQzRE9wZW5HTC5jcHAKQEAgLTI1Niw3ICsyNTYsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNE
Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZQogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKwogICAgIEdDM0Rl
bnVtIG9wZW5HTEludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7CiAgICAgaWYgKHR5cGUg
PT0gR0xfRkxPQVQpIHsKICAgICAgICAgaWYgKGZvcm1hdCA9PSBHTF9SR0JBKQpAQCAtMjY1LDcg
KzI2NSw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlCiAgICAgICAgICAgICBvcGVuR0xJbnRl
cm5hbEZvcm1hdCA9IEdMX1JHQjMyRl9BUkI7CiAgICAgfQogCi0gICAgOjpnbFRleEltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgb3BlbkdMSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRl
ciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIHRleEltYWdlMkREaXJlY3QodGFyZ2V0LCBs
ZXZlbCwgb3BlbkdMSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0
LCB0eXBlLCBwaXhlbHMpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAppbmRleCBlMGMyZDZlLi43NzJjYTgxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTcw
LDYgKzcwLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZvckN1cnJlbnRHTENvbnRleHQo
KQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5l
dyBHcmFwaGljc0NvbnRleHQzRChBdHRyaWJ1dGVzKCksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpS
ZW5kZXJUb0N1cnJlbnRHTENvbnRleHQpKTsKKyAgICByZXR1cm4gY29udGV4dC0+bV9wcml2YXRl
ID8gY29udGV4dC5yZWxlYXNlKCkgOiAwOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2
YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNp
b24pCiB7CiAgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwpA
QCAtMTM3NCw2ICsxMzgwLDEyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9z
aXRlZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGVkOwogfQogCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJERGlyZWN0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKK30KKwogfQogCiAjZW5kaWYgLy8g
VVNFKDNEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3Bw
CmluZGV4IDlkYmI0ODMuLjRkMTUzMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xFUy5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBVU0UoM0RfR1JBUEhJQ1MpCiAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3Bl
bkdMRVMuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgpAQCAt
MjAxLDggKzIwMiw4IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlCiAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKElOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwg
cGl4ZWxzKTsKKworICAgIHRleEltYWdlMkREaXJlY3QodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogICAg
IHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCmluZGV4IGNiODI0ZjYuLjRk
NjlkNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzQ29udGV4dDNEUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCkBAIC02MSw3ICs2MSw3IEBAIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZQogI2VuZGlmCiB7CiBwdWJsaWM6Ci0gICAgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgSG9zdFdpbmRvdyopOworICAgIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCosIEhvc3RXaW5kb3cqLCBH
cmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUpOwogICAgIH5HcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUoKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTc1LDYgKzc1
LDggQEAgcHVibGljOgogICAgIHZvaWQgYmxpdE11bHRpc2FtcGxlRnJhbWVidWZmZXIoKSBjb25z
dDsKICAgICB2b2lkIGJsaXRNdWx0aXNhbXBsZUZyYW1lYnVmZmVyQW5kUmVzdG9yZUNvbnRleHQo
KSBjb25zdDsKICAgICBib29sIG1ha2VDdXJyZW50SWZOZWVkZWQoKSBjb25zdDsKKyAgICB2b2lk
IGNyZWF0ZU9mZnNjcmVlbkJ1ZmZlcnMoKTsKKyAgICB2b2lkIGluaXRpYWxpemVBTkdMRSgpOwog
ICAgIHZvaWQgY3JlYXRlR3JhcGhpY3NTdXJmYWNlcyhjb25zdCBJbnRTaXplJik7CiAKICAgICBH
cmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwpAQCAtMTA0LDcgKzEwNiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCiB9CiAjZW5kaWYKIAotR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCitHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRl
clN0eWxlIHJlbmRlclN0eWxlKQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2hv
c3RXaW5kb3coaG9zdFdpbmRvdykKICAgICAsIG1fc3VyZmFjZSgwKQpAQCAtMTIxLDYgKzEyMywx
MiBAQCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSAogICAgICAgICByZXR1cm47CiAgICAgfQogCisg
ICAgaWYgKHJlbmRlclN0eWxlID09IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJUb0N1cnJlbnRH
TENvbnRleHQpIHsKKyAgICAgICAgbV9wbGF0Zm9ybUNvbnRleHQgPSBRT3BlbkdMQ29udGV4dDo6
Y3VycmVudENvbnRleHQoKTsKKyAgICAgICAgbV9zdXJmYWNlID0gbV9wbGF0Zm9ybUNvbnRleHQt
PnN1cmZhY2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogI2lmIFVTRShHUkFQSElDU19T
VVJGQUNFKQogICAgIC8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIGNyZWF0ZSBhIFFPcGVuR0xDb250
ZXh0IHdpdGhvdXQgY3JlYXRpbmcgYSBRV2luZG93IGF0IGFsbC4KICAgICAvLyBXZSBuZWVkIHRv
IGNyZWF0ZSBhIHN1cmZhY2UgaW4gb3JkZXIgdG8gY3JlYXRlIGEgUU9wZW5HTENvbnRleHQgYW5k
IG1ha2UgaXQgY3VycmVudC4KQEAgLTE0NiwxMiArMTU0LDY3IEBAIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBICiAjZW5kaWYKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0
ZU9mZnNjcmVlbkJ1ZmZlcnMoKQoreworICAgIGdsR2VuRnJhbWVidWZmZXJzKC8qIGNvdW50ICov
IDEsICZtX2NvbnRleHQtPm1fZmJvKTsKKworICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fY29udGV4
dC0+bV90ZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBtX2NvbnRleHQtPm1fdGV4dHVyZSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdf
RklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmYo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIGdsVGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgZ2xU
ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsK
KyAgICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKKwor
ICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KKyAgICBpZiAobV9jb250ZXh0LT5tX2F0
dHJzLmFudGlhbGlhcykgeworICAgICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9jb250ZXh0
LT5tX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2NvbnRleHQtPm1fbXVsdGlzYW1wbGVGQk8pOworICAg
ICAgICBtX2NvbnRleHQtPm1fYm91bmRGQk8gPSBtX2NvbnRleHQtPm1fbXVsdGlzYW1wbGVGQk87
CisgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9jb250ZXh0LT5tX211bHRpc2FtcGxl
Q29sb3JCdWZmZXIpOworICAgICAgICBpZiAobV9jb250ZXh0LT5tX2F0dHJzLnN0ZW5jaWwgfHwg
bV9jb250ZXh0LT5tX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJz
KDEsICZtX2NvbnRleHQtPm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIEJpbmQgY2FudmFzIEZCTy4KKyAgICAgICAgZ2xCaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2NvbnRleHQtPm1fZmJvKTsK
KyAgICAgICAgbV9jb250ZXh0LT5tX2JvdW5kRkJPID0gbV9jb250ZXh0LT5tX2ZibzsKKyNpZiBV
U0UoT1BFTkdMX0VTXzIpCisgICAgICAgIGlmIChtX2NvbnRleHQtPm1fYXR0cnMuZGVwdGgpCisg
ICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fY29udGV4dC0+bV9kZXB0aEJ1ZmZl
cik7CisgICAgICAgIGlmIChtX2NvbnRleHQtPm1fYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgICAg
IGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9jb250ZXh0LT5tX3N0ZW5jaWxCdWZmZXIpOworI2Vu
ZGlmCisgICAgICAgIGlmIChtX2NvbnRleHQtPm1fYXR0cnMuc3RlbmNpbCB8fCBtX2NvbnRleHQt
Pm1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fY29u
dGV4dC0+bV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmluaXRpYWxpemVBTkdMRSgpCit7CisgICAgU2hCdWlsdEluUmVzb3Vy
Y2VzIEFOR0xFUmVzb3VyY2VzOworICAgIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMoJkFOR0xFUmVz
b3VyY2VzKTsKKworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9WRVJURVhfQVRUUklCUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOwor
ICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhf
VU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMp
OworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZ
SU5HX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyk7CisgICAgbV9j
b250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJF
X0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMp
OworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01C
SU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cyk7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhUZXh0dXJl
SW1hZ2VVbml0cyk7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heEZyYWdt
ZW50VW5pZm9ybVZlY3RvcnMpOworCisgICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVuR0wg
RVMuCisgICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOworICAgIG1fY29udGV4
dC0+bV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworfQorCiBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6On5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUoKQogewotICAgIGRl
bGV0ZSBtX3N1cmZhY2U7Ci0gICAgbV9zdXJmYWNlID0gMDsKLSAgICAvLyBQbGF0Zm9ybSBjb250
ZXh0IGlzIGFzc3VtZWQgdG8gYmUgb3duZWQgYnkgc3VyZmFjZS4KLSAgICBtX3BsYXRmb3JtQ29u
dGV4dCA9IDA7CisgICAgaWYgKG1faG9zdFdpbmRvdykgeworICAgICAgICBkZWxldGUgbV9zdXJm
YWNlOworICAgICAgICBtX3N1cmZhY2UgPSAwOworICAgICAgICAvLyBQbGF0Zm9ybSBjb250ZXh0
IGlzIGFzc3VtZWQgdG8gYmUgb3duZWQgYnkgc3VyZmFjZS4KKyAgICAgICAgbV9wbGF0Zm9ybUNv
bnRleHQgPSAwOworICAgIH0KIH0KIAogc3RhdGljIGlubGluZSBxdWludDMyIHN3YXBCZ3JUb1Jn
YihxdWludDMyIHBpeGVsKQpAQCAtMjkwLDE1ICszNTMsMTYgQEAgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmkKICAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBv
cnQgcmVuZGVyaW5nIGRpcmVjdGx5IHRvIHRoZSBIb3N0V2luZG93LgogICAgIGlmIChyZW5kZXJT
dHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBo
aWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCBmYWxzZSkpOworICAgIFJlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChh
dHRycywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUpKTsKICAgICByZXR1cm4gY29udGV4dC0+bV9w
cml2YXRlID8gY29udGV4dC5yZWxlYXNlKCkgOiAwOwogfQogCi1HcmFwaGljc0NvbnRleHQzRDo6
R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhv
c3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3ND
b250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkK
ICAgICA6IG1fY3VycmVudFdpZHRoKDApCiAgICAgLCBtX2N1cnJlbnRIZWlnaHQoMCkKICAgICAs
IG1fY29tcGlsZXIoaXNHTEVTMkNvbXBsaWFudCgpID8gU0hfRVNTTF9PVVRQVVQgOiBTSF9HTFNM
X09VVFBVVCkKICAgICAsIG1fYXR0cnMoYXR0cnMpCisgICAgLCBtX3JlbmRlclN0eWxlKHJlbmRl
clN0eWxlKQogICAgICwgbV90ZXh0dXJlKDApCiAgICAgLCBtX2NvbXBvc2l0b3JUZXh0dXJlKDAp
CiAgICAgLCBtX2ZibygwKQpAQCAtMzE1LDcgKzM3OSw3IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpH
cmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9z
dFdpCiAgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxlRGVwdGhT
dGVuY2lsQnVmZmVyKDApCiAgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKLSAgICAs
IG1fcHJpdmF0ZShhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKHRoaXMsIGhv
c3RXaW5kb3cpKSkKKyAgICAsIG1fcHJpdmF0ZShhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlKHRoaXMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSkpCiB7CiAgICAgdmFsaWRh
dGVBdHRyaWJ1dGVzKCk7CiAKQEAgLTMzNiw1NCArNDAwLDEwIEBAIEdyYXBoaWNzQ29udGV4dDNE
OjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywg
SG9zdFdpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBDcmVhdGUgYnVmZmVycyBm
b3IgdGhlIGNhbnZhcyBGQk8uCi0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoLyogY291bnQgKi8gMSwg
Jm1fZmJvKTsKKyAgICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVyT2Zmc2NyZWVuKQorICAgICAg
ICBtX3ByaXZhdGUtPmNyZWF0ZU9mZnNjcmVlbkJ1ZmZlcnMoKTsKIAotICAgIGdsR2VuVGV4dHVy
ZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIs
IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJ
TFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9X
UkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFt
ZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIGds
QmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwotCi0gICAgLy8g
Q3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgewot
ICAgICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAg
IGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0
aXNhbXBsZUZCTyk7Ci0gICAgICAgIG1fYm91bmRGQk8gPSBtX211bHRpc2FtcGxlRkJPOwotICAg
ICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0g
ICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKLSAgICAgICAgICAg
IGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgotICAgICAgICBnbEJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAg
ICAgICAgbV9ib3VuZEZCTyA9IG1fZmJvOwotI2lmIFVTRShPUEVOR0xfRVNfMikKLSAgICAgICAg
aWYgKG1fYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1f
ZGVwdGhCdWZmZXIpOwotICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQotICAgICAgICAgICAg
Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOwotI2VuZGlmCi0gICAgICAg
IGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKLSAgICAgICAgICAgIGdsR2Vu
UmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIH0KLQotICAgIC8v
IEFOR0xFIGluaXRpYWxpemF0aW9uLgotICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291
cmNlczsKLSAgICBTaEluaXRCdWlsdEluUmVzb3VyY2VzKCZBTkdMRVJlc291cmNlcyk7Ci0KLSAg
ICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJTLCAmQU5H
TEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4
VmVydGV4VW5pZm9ybVZlY3RvcnMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfVkFSWUlOR19WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMp
OwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVf
SU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7
Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9URVhUVVJF
X0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0
cyk7IAotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9JTUFH
RV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBnZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUywg
JkFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOwotCi0gICAgLy8gQWx3
YXlzIHNldCB0byAxIGZvciBPcGVuR0wgRVMuCi0gICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1
ZmZlcnMgPSAxOwotICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsK
KyAgICBtX3ByaXZhdGUtPmluaXRpYWxpemVBTkdMRSgpOwogCiAjaWYgIVVTRShPUEVOR0xfRVNf
MikKICAgICBnbEVuYWJsZShHTF9QT0lOVF9TUFJJVEUpOwpAQCAtNDM3LDcgKzQ1Nyw3IEBAIFBs
YXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIAog
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKLSAgICBpZiAo
IW1fcHJpdmF0ZSkKKyAgICBpZiAoIW1fcHJpdmF0ZSB8fCBtX3JlbmRlclN0eWxlID09IFJlbmRl
clRvQ3VycmVudEdMQ29udGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBt
X3ByaXZhdGUtPm1ha2VDdXJyZW50SWZOZWVkZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAK
aW5kZXggYzZiMWUyOC4uYjNmYWM2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTM4LDEz
ICszOCw2IEBACiAKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRlICJOYXRpdmVJbWFnZVF0Lmgi
Ci0jaW5jbHVkZSA8UU9wZW5HTENvbnRleHQ+Ci0jZWxpZiBPUyhXSU5ET1dTKQotI2luY2x1ZGUg
PHdpbmRvd3MuaD4KLSNlbGlmIE9TKE1BQ19PU19YKQotI2luY2x1ZGUgPEFHTC9hZ2wuaD4KLSNl
bGlmIGRlZmluZWQoWFBfVU5JWCkKLSNpbmNsdWRlIDxHTC9nbHguaD4KICNlbmRpZgogCiAjaWYg
VVNFKENBSVJPKQpAQCAtNTMsNzAgKzQ2LDQzIEBACiAjaW5jbHVkZSA8Y2Fpcm8uaD4KICNlbmRp
ZgogCi0jZGVmaW5lIEdMX0NNRCguLi4pIGRvIHsgX19WQV9BUkdTX187IEFTU0VSVF9BUkcoX19W
QV9BUkdTX18sICFnbEdldEVycm9yKCkpOyB9IHdoaWxlICgwKQorI2lmICFVU0UoVEVYTUFQX09Q
RU5HTF9FU18yKQorLy8gRklYTUU6IE1vdmUgdG8gRXh0ZW5zaW9uczNELmguCisjZGVmaW5lIEdM
X1RFWFRVUkVfUkVDVEFOR0xFX0FSQiAweDg0RjUKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UXzhf
OF84XzhfUkVWIDB4ODM2NworI2RlZmluZSBHTF9VTlBBQ0tfUk9XX0xFTkdUSCAweDBDRjIKKyNk
ZWZpbmUgR0xfVU5QQUNLX1NLSVBfUElYRUxTIDB4MENGNAorI2RlZmluZSBHTF9VTlBBQ0tfU0tJ
UF9ST1dTIDB4MENGMworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0cnVjdCBUZXh0
dXJlTWFwcGVyR0xEYXRhIHsKICAgICBzdHJ1Y3QgU2hhcmVkR0xEYXRhIDogcHVibGljIFJlZkNv
dW50ZWQ8U2hhcmVkR0xEYXRhPiB7Ci0jaWYgUExBVEZPUk0oUVQpCi0gICAgICAgIHR5cGVkZWYg
UU9wZW5HTENvbnRleHQqIEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRD
dXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFFPcGVuR0xD
b250ZXh0OjpjdXJyZW50Q29udGV4dCgpOwotICAgICAgICB9Ci0jZWxpZiBPUyhXSU5ET1dTKQot
ICAgICAgICB0eXBlZGVmIEhHTFJDIEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4
dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHdn
bEdldEN1cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIH0KLSNlbGlmIE9TKE1BQ19PU19YKQotICAg
ICAgICB0eXBlZGVmIEFHTENvbnRleHQgR0xDb250ZXh0OwotICAgICAgICBzdGF0aWMgR0xDb250
ZXh0IGdldEN1cnJlbnRHTENvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
YWdsR2V0Q3VycmVudENvbnRleHQoKTsKLSAgICAgICAgfQotI2VsaWYgZGVmaW5lZChYUF9VTklY
KQotICAgICAgICB0eXBlZGVmIEdMWENvbnRleHQgR0xDb250ZXh0OwotICAgICAgICBzdGF0aWMg
R0xDb250ZXh0IGdldEN1cnJlbnRHTENvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2xYR2V0Q3VycmVudENvbnRleHQoKTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAg
Ly8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgdW5rbm93biBvcGVuZ2wuCi0gICAgICAgIC8v
IFJldHVybnMgYWx3YXlzIGluY3JlYXNpbmcgbnVtYmVyIGFuZCBkaXNhYmxlcyBHTCBjb250ZXh0
IGRhdGEgc2hhcmluZy4KLSAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgR0xDb250ZXh0Owot
ICAgICAgICBzdGF0aWMgR0xDb250ZXh0IGdldEN1cnJlbnRHTENvbnRleHQoKQotICAgICAgICB7
Ci0gICAgICAgICAgICBzdGF0aWMgR0xDb250ZXh0IGR1bW15Q29udGV4dENvdW50ZXIgPSAwOwot
ICAgICAgICAgICAgcmV0dXJuICsrZHVtbXlDb250ZXh0Q291bnRlcjsKLSAgICAgICAgfQotCi0j
ZW5kaWYKIAotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8R0xDb250ZXh0LCBTaGFyZWRHTERhdGEq
PiBHTENvbnRleHREYXRhTWFwOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UGxhdGZvcm1HcmFw
aGljc0NvbnRleHQzRCwgU2hhcmVkR0xEYXRhKj4gR0xDb250ZXh0RGF0YU1hcDsKICAgICAgICAg
c3RhdGljIEdMQ29udGV4dERhdGFNYXAmIGdsQ29udGV4dERhdGFNYXAoKQogICAgICAgICB7CiAg
ICAgICAgICAgICBzdGF0aWMgR0xDb250ZXh0RGF0YU1hcCBtYXA7CiAgICAgICAgICAgICByZXR1
cm4gbWFwOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkR0xE
YXRhPiBjdXJyZW50U2hhcmVkR0xEYXRhKCkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hh
cmVkR0xEYXRhPiBjdXJyZW50U2hhcmVkR0xEYXRhKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
KQogICAgICAgICB7Ci0gICAgICAgICAgICBHTENvbnRleHQgY3VycmVudEdMQ29uZXh0ID0gZ2V0
Q3VycmVudEdMQ29udGV4dCgpOwotICAgICAgICAgICAgR0xDb250ZXh0RGF0YU1hcDo6aXRlcmF0
b3IgaXQgPSBnbENvbnRleHREYXRhTWFwKCkuZmluZChjdXJyZW50R0xDb25leHQpOworICAgICAg
ICAgICAgR0xDb250ZXh0RGF0YU1hcDo6aXRlcmF0b3IgaXQgPSBnbENvbnRleHREYXRhTWFwKCku
ZmluZChjb250ZXh0LT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpOwogICAgICAgICAgICAg
aWYgKGl0ICE9IGdsQ29udGV4dERhdGFNYXAoKS5lbmQoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gaXQtPnNlY29uZDsKIAotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRH
TERhdGEoZ2V0Q3VycmVudEdMQ29udGV4dCgpKSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNoYXJlZEdMRGF0YShjb250ZXh0KSk7CiAgICAgICAgIH0KIAogCiAKICAgICAgICAg
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgdGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI7CiAK
LSAgICAgICAgU2hhcmVkR0xEYXRhKEdMQ29udGV4dCBnbENvbnRleHQpCisgICAgICAgIFNoYXJl
ZEdMRGF0YShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICAgICAgICAgIDogdGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2xD
b250ZXh0RGF0YU1hcCgpLmFkZChnbENvbnRleHQsIHRoaXMpOworICAgICAgICAgICAgZ2xDb250
ZXh0RGF0YU1hcCgpLmFkZChjb250ZXh0LT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCksIHRo
aXMpOwogICAgICAgICB9CiAKICAgICAgICAgflNoYXJlZEdMRGF0YSgpCkBAIC0xMzUsMzAgKzEw
MSwzMiBAQCBzdHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAKICAgICBTaGFyZWRHTERhdGEm
IHNoYXJlZEdMRGF0YSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gKihtX3NoYXJlZEdM
RGF0YS5nZXQoKSk7CisgICAgICAgIHJldHVybiAqbV9zaGFyZWRHTERhdGE7CiAgICAgfQogCiAg
ICAgdm9pZCBpbml0aWFsaXplU3RlbmNpbCgpOwogCi0gICAgVGV4dHVyZU1hcHBlckdMRGF0YSgp
Ci0gICAgICAgIDogUGFpbnRGbGFncygwKQorICAgIFRleHR1cmVNYXBwZXJHTERhdGEoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgICAgIDogY29udGV4dChjb250ZXh0KQorICAgICAg
ICAsIFBhaW50RmxhZ3MoMCkKICAgICAgICAgLCBwcmV2aW91c1Byb2dyYW0oMCkKICAgICAgICAg
LCB0YXJnZXRGcmFtZUJ1ZmZlcigwKQogICAgICAgICAsIGRpZE1vZGlmeVN0ZW5jaWwoZmFsc2Up
CiAgICAgICAgICwgcHJldmlvdXNTY2lzc29yU3RhdGUoMCkKICAgICAgICAgLCBwcmV2aW91c0Rl
cHRoU3RhdGUoMCkKLSAgICAgICAgLCBtX3NoYXJlZEdMRGF0YShUZXh0dXJlTWFwcGVyR0xEYXRh
OjpTaGFyZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRHTERhdGEoKSkKKyAgICAgICAgLCBtX3NoYXJl
ZEdMRGF0YShUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRH
TERhdGEodGhpcy0+Y29udGV4dCkpCiAgICAgeyB9CiAKKyAgICBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dDsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4OwogICAg
IFRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgUGFpbnRGbGFnczsKLSAgICBHTGludCBwcmV2aW91
c1Byb2dyYW07Ci0gICAgR0xpbnQgdGFyZ2V0RnJhbWVCdWZmZXI7CisgICAgR0MzRGludCBwcmV2
aW91c1Byb2dyYW07CisgICAgR0MzRGludCB0YXJnZXRGcmFtZUJ1ZmZlcjsKICAgICBib29sIGRp
ZE1vZGlmeVN0ZW5jaWw7Ci0gICAgR0xpbnQgcHJldmlvdXNTY2lzc29yU3RhdGU7Ci0gICAgR0xp
bnQgcHJldmlvdXNEZXB0aFN0YXRlOwotICAgIEdMaW50IHZpZXdwb3J0WzRdOwotICAgIEdMaW50
IHByZXZpb3VzU2Npc3Nvcls0XTsKKyAgICBHQzNEaW50IHByZXZpb3VzU2Npc3NvclN0YXRlOwor
ICAgIEdDM0RpbnQgcHJldmlvdXNEZXB0aFN0YXRlOworICAgIEdDM0RpbnQgdmlld3BvcnRbNF07
CisgICAgR0MzRGludCBwcmV2aW91c1NjaXNzb3JbNF07CiAgICAgUmVmUHRyPFNoYXJlZEdMRGF0
YT4gbV9zaGFyZWRHTERhdGE7CiAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IGN1cnJlbnRTdXJm
YWNlOwogfTsKQEAgLTE4MiwyNSArMTUwLDI1IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpDbGlw
U3RhY2s6OnBvcCgpCiAgICAgY2xpcFN0YWNrLnJlbW92ZUxhc3QoKTsKIH0KIAotc3RhdGljIHZv
aWQgc2Npc3NvckNsaXAoY29uc3QgSW50UmVjdCYgcmVjdCkKK3N0YXRpYyB2b2lkIHNjaXNzb3JD
bGlwKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewog
ICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR0xpbnQgdmll
d3BvcnRbNF07Ci0gICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIHZpZXdwb3J0
KSk7Ci0gICAgR0xfQ01EKGdsU2Npc3NvcihyZWN0LngoKSwgdmlld3BvcnRbM10gLSByZWN0Lm1h
eFkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7CisgICAgR0MzRGludCB2aWV3cG9y
dFs0XTsKKyAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6VklFV1BP
UlQsIHZpZXdwb3J0KTsKKyAgICBjb250ZXh0LT5zY2lzc29yKHJlY3QueCgpLCB2aWV3cG9ydFsz
XSAtIHJlY3QubWF4WSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogfQogCi12b2lk
IFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjphcHBseSgpCit2b2lkIFRleHR1cmVNYXBwZXJH
TDo6Q2xpcFN0YWNrOjphcHBseShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIHsKLSAgICBz
Y2lzc29yQ2xpcChjbGlwU3RhdGUuc2Npc3NvckJveCk7Ci0gICAgR0xfQ01EKGdsU3RlbmNpbE9w
KEdMX0tFRVAsIEdMX0tFRVAsIEdMX0tFRVApKTsKLSAgICBHTF9DTUQoZ2xTdGVuY2lsRnVuYyhH
TF9FUVVBTCwgY2xpcFN0YXRlLnN0ZW5jaWxJbmRleCAtIDEsIGNsaXBTdGF0ZS5zdGVuY2lsSW5k
ZXggLSAxKSk7CisgICAgc2Npc3NvckNsaXAoY29udGV4dCwgY2xpcFN0YXRlLnNjaXNzb3JCb3gp
OworICAgIGNvbnRleHQtPnN0ZW5jaWxPcChHcmFwaGljc0NvbnRleHQzRDo6S0VFUCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OktFRVAsIEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQKTsKKyAgICBjb250ZXh0
LT5zdGVuY2lsRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6RVFVQUwsIGNsaXBTdGF0ZS5zdGVuY2ls
SW5kZXggLSAxLCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSk7CiAgICAgaWYgKGNsaXBTdGF0
ZS5zdGVuY2lsSW5kZXggPT0gMSkKLSAgICAgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9TVEVOQ0lM
X1RFU1QpKTsKKyAgICAgICAgY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9URVNUKTsKICAgICBlbHNlCi0gICAgICAgIEdMX0NNRChnbEVuYWJsZShHTF9TVEVOQ0lM
X1RFU1QpKTsKKyAgICAgICAgY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX1RFU1QpOwogfQogCiAKQEAgLTIxNCw4ICsxODIsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJH
TERhdGE6OmluaXRpYWxpemVTdGVuY2lsKCkKICAgICBpZiAoZGlkTW9kaWZ5U3RlbmNpbCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgR0xfQ01EKGdsQ2xlYXJTdGVuY2lsKDApKTsKLSAgICBHTF9D
TUQoZ2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKTsKKyAgICBjb250ZXh0LT5jbGVhclN0
ZW5jaWwoMCk7CisgICAgY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxf
QlVGRkVSX0JJVCk7CiAgICAgZGlkTW9kaWZ5U3RlbmNpbCA9IHRydWU7CiB9CiAKQEAgLTIyOSwx
MCArMTk3LDExIEBAIEJpdG1hcFRleHR1cmVHTCogdG9CaXRtYXBUZXh0dXJlR0woQml0bWFwVGV4
dHVyZSogdGV4dHVyZSkKIAogVGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0woKQogICAg
IDogVGV4dHVyZU1hcHBlcihPcGVuR0xNb2RlKQotICAgICwgbV9kYXRhKG5ldyBUZXh0dXJlTWFw
cGVyR0xEYXRhKQogICAgICwgbV9jb250ZXh0KDApCiAgICAgLCBtX2VuYWJsZUVkZ2VEaXN0YW5j
ZUFudGlhbGlhc2luZyhmYWxzZSkKIHsKKyAgICBtX2NvbnRleHQzRCA9IEdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGVGb3JDdXJyZW50R0xDb250ZXh0KCk7CisgICAgbV9kYXRhID0gbmV3IFRleHR1
cmVNYXBwZXJHTERhdGEobV9jb250ZXh0M0QuZ2V0KCkpOwogfQogCiBUZXh0dXJlTWFwcGVyR0w6
OkNsaXBTdGFjayYgVGV4dHVyZU1hcHBlckdMOjpjbGlwU3RhY2soKQpAQCAtMjQyLDE1ICsyMTEs
OSBAQCBUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjayYgVGV4dHVyZU1hcHBlckdMOjpjbGlwU3Rh
Y2soKQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5QYWludGluZyhQYWludEZsYWdzIGZs
YWdzKQogewotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG5vIEdMIGVycm9yIGNvZGUgc3RheXMgZnJv
bSBwcmV2aW91cyBvcGVyYXRpb25zLgotICAgIGdsR2V0RXJyb3IoKTsKLQotICAgIGlmICghaW5p
dGlhbGl6ZU9wZW5HTFNoaW1zKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdMX0NNRChnbEdl
dEludGVnZXJ2KEdMX0NVUlJFTlRfUFJPR1JBTSwgJmRhdGEoKS5wcmV2aW91c1Byb2dyYW0pKTsK
LSAgICBkYXRhKCkucHJldmlvdXNTY2lzc29yU3RhdGUgPSBnbElzRW5hYmxlZChHTF9TQ0lTU09S
X1RFU1QpOwotICAgIGRhdGEoKS5wcmV2aW91c0RlcHRoU3RhdGUgPSBnbElzRW5hYmxlZChHTF9E
RVBUSF9URVNUKTsKKyAgICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0
M0Q6OkNVUlJFTlRfUFJPR1JBTSwgJmRhdGEoKS5wcmV2aW91c1Byb2dyYW0pOworICAgIGRhdGEo
KS5wcmV2aW91c1NjaXNzb3JTdGF0ZSA9IG1fY29udGV4dDNELT5pc0VuYWJsZWQoR3JhcGhpY3ND
b250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgZGF0YSgpLnByZXZpb3VzRGVwdGhTdGF0ZSA9
IG1fY29udGV4dDNELT5pc0VuYWJsZWQoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1QpOwog
I2lmIFBMQVRGT1JNKFFUKQogICAgIGlmIChtX2NvbnRleHQpIHsKICAgICAgICAgUVBhaW50ZXIq
IHBhaW50ZXIgPSBtX2NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwpAQCAtMjU4LDE1ICsyMjEs
MTUgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyBmbGFn
cykKICAgICAgICAgcGFpbnRlci0+YmVnaW5OYXRpdmVQYWludGluZygpOwogICAgIH0KICNlbmRp
ZgotICAgIGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKTsKLSAgICBnbEVuYWJsZShHTF9TQ0lTU09S
X1RFU1QpOworICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9URVNUKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lT
U09SX1RFU1QpOwogICAgIGRhdGEoKS5kaWRNb2RpZnlTdGVuY2lsID0gZmFsc2U7Ci0gICAgR0xf
Q01EKGdsRGVwdGhNYXNrKDApKTsKLSAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9WSUVXUE9S
VCwgZGF0YSgpLnZpZXdwb3J0KSk7Ci0gICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfU0NJU1NP
Ul9CT1gsIGRhdGEoKS5wcmV2aW91c1NjaXNzb3IpKTsKLSAgICBnbEdldEludGVnZXJ2KEdMX0ZS
QU1FQlVGRkVSX0JJTkRJTkcsICZkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpOworICAgIG1fY29u
dGV4dDNELT5kZXB0aE1hc2soMCk7CisgICAgbV9jb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dDNEOjpWSUVXUE9SVCwgZGF0YSgpLnZpZXdwb3J0KTsKKyAgICBtX2NvbnRleHQz
RC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YLCBkYXRhKCkucHJl
dmlvdXNTY2lzc29yKTsKKyAgICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSX0JJTkRJTkcsICZkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpOwog
ICAgIG1fY2xpcFN0YWNrLmluaXQoSW50UmVjdCgwLCAwLCBkYXRhKCkudmlld3BvcnRbMl0sIGRh
dGEoKS52aWV3cG9ydFszXSkpOwotICAgIEdMX0NNRChnbEdldEludGVnZXJ2KEdMX0ZSQU1FQlVG
RkVSX0JJTkRJTkcsICZkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpKTsKKyAgICBtX2NvbnRleHQz
RC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0JJTkRJTkcsICZk
YXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpOwogICAgIGRhdGEoKS5QYWludEZsYWdzID0gZmxhZ3M7
CiAgICAgYmluZFN1cmZhY2UoMCk7CiB9CkBAIC0yNzQsMjIgKzIzNywyMiBAQCB2b2lkIFRleHR1
cmVNYXBwZXJHTDo6YmVnaW5QYWludGluZyhQYWludEZsYWdzIGZsYWdzKQogdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OmVuZFBhaW50aW5nKCkKIHsKICAgICBpZiAoZGF0YSgpLmRpZE1vZGlmeVN0ZW5j
aWwpIHsKLSAgICAgICAgZ2xDbGVhclN0ZW5jaWwoMSk7Ci0gICAgICAgIGdsQ2xlYXIoR0xfU1RF
TkNJTF9CVUZGRVJfQklUKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmNsZWFyU3RlbmNpbCgxKTsK
KyAgICAgICAgbV9jb250ZXh0M0QtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JV
RkZFUl9CSVQpOwogICAgIH0KIAotICAgIGdsVXNlUHJvZ3JhbShkYXRhKCkucHJldmlvdXNQcm9n
cmFtKTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShkYXRhKCkucHJldmlvdXNQcm9ncmFt
KTsKIAotICAgIGdsU2Npc3NvcihkYXRhKCkucHJldmlvdXNTY2lzc29yWzBdLCBkYXRhKCkucHJl
dmlvdXNTY2lzc29yWzFdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzJdLCBkYXRhKCkucHJldmlv
dXNTY2lzc29yWzNdKTsKKyAgICBtX2NvbnRleHQzRC0+c2Npc3NvcihkYXRhKCkucHJldmlvdXNT
Y2lzc29yWzBdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzFdLCBkYXRhKCkucHJldmlvdXNTY2lz
c29yWzJdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzNdKTsKICAgICBpZiAoZGF0YSgpLnByZXZp
b3VzU2Npc3NvclN0YXRlKQotICAgICAgICBnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAg
ICAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Qp
OwogICAgIGVsc2UKLSAgICAgICAgZ2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgICAg
IG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwog
CiAgICAgaWYgKGRhdGEoKS5wcmV2aW91c0RlcHRoU3RhdGUpCi0gICAgICAgIGdsRW5hYmxlKEdM
X0RFUFRIX1RFU1QpOworICAgICAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9URVNUKTsKICAgICBlbHNlCi0gICAgICAgIGdsRGlzYWJsZShHTF9ERVBUSF9U
RVNUKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX1RFU1QpOwogCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgaWYgKCFtX2NvbnRleHQpCkBAIC0z
MDAsNDAgKzI2Myw0MCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZW5kUGFpbnRpbmcoKQogI2Vu
ZGlmCiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYg
cXVhZFRvRHJhdywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHNoYWRlclByb2dyYW0sIEdMZW51bSBkcmF3aW5n
TW9kZSwgYm9vbCBuZWVkc0JsZW5kaW5nKQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdRdWFk
KGNvbnN0IERyYXdRdWFkJiBxdWFkVG9EcmF3LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSogc2hhZGVyUHJvZ3Jh
bSwgR0MzRGVudW0gZHJhd2luZ01vZGUsIGJvb2wgbmVlZHNCbGVuZGluZykKIHsKLSAgICBHTF9D
TUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIo
KSkpOwotICAgIEdMX0NNRChnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAwKSk7CisgICAg
bV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRl
eEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6QVJSQVlfQlVGRkVSLCAwKTsKIAotICAgIGNvbnN0IEdMZmxvYXQgcXVhZFtdID0geworICAg
IGNvbnN0IEdDM0RmbG9hdCBxdWFkW10gPSB7CiAgICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVj
dE1hcHBlZFRvVW5pdFNxdWFyZS5wMSgpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVk
VG9Vbml0U3F1YXJlLnAxKCkueSgpLAogICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBw
ZWRUb1VuaXRTcXVhcmUucDIoKS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5p
dFNxdWFyZS5wMigpLnkoKSwKICAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9V
bml0U3F1YXJlLnAzKCkueCgpLCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVh
cmUucDMoKS55KCksCiAgICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNx
dWFyZS5wNCgpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnA0
KCkueSgpCiAgICAgfTsKLSAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlclBy
b2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHF1YWQpKTsK
KyAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXJQcm9ncmFtLT52ZXJ0
ZXhBdHRyaWIoKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGlu
dHB0cihxdWFkKSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBUcmFuc2Zv
cm1hdGlvbk1hdHJpeChkYXRhKCkucHJvamVjdGlvbk1hdHJpeCkubXVsdGlwbHkobW9kZWxWaWV3
TWF0cml4KS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgKICAgICAgICAgICAgIHF1YWRU
b0RyYXcub3JpZ2luYWxUYXJnZXRSZWN0LndpZHRoKCksIDAsIDAsIDAsCiAgICAgICAgICAgICAw
LCBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC5oZWlnaHQoKSwgMCwgMCwKICAgICAgICAg
ICAgIDAsIDAsIDEsIDAsCiAgICAgICAgICAgICBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVj
dC54KCksIHF1YWRUb0RyYXcub3JpZ2luYWxUYXJnZXRSZWN0LnkoKSwgMCwgMSkpOwotICAgIGNv
bnN0IEdMZmxvYXQgbTRbXSA9IHsKKyAgICBHQzNEZmxvYXQgbTRbXSA9IHsKICAgICAgICAgbWF0
cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAogICAg
ICAgICBtYXRyaXgubTIxKCksIG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0
KCksCiAgICAgICAgIG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1h
dHJpeC5tMzQoKSwKICAgICAgICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5t
NDMoKSwgbWF0cml4Lm00NCgpCiAgICAgfTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2
KHNoYWRlclByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIEdMX0ZBTFNFLCBtNCkpOworICAg
IG1fY29udGV4dDNELT51bmlmb3JtTWF0cml4NGZ2KHNoYWRlclByb2dyYW0tPm1hdHJpeExvY2F0
aW9uKCksIDEsIGZhbHNlLCBtNCk7CiAKICAgICBpZiAobmVlZHNCbGVuZGluZykgewotICAgICAg
ICBHTF9DTUQoZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKSk7Ci0g
ICAgICAgIEdMX0NNRChnbEVuYWJsZShHTF9CTEVORCkpOworICAgICAgICBtX2NvbnRleHQzRC0+
YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVf
TUlOVVNfU1JDX0FMUEhBKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkQpOwogICAgIH0gZWxzZQotICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdM
X0JMRU5EKSk7CisgICAgICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpCTEVORCk7CiAKLSAgICBHTF9DTUQoZ2xEcmF3QXJyYXlzKGRyYXdpbmdNb2RlLCAwLCA0KSk7
Ci0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZl
cnRleEF0dHJpYigpKSk7CisgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoZHJhd2luZ01vZGUs
IDAsIDQpOworICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVy
UHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJh
d0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdpZHRoLCBjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgp
CkBAIC0zNDIsMTcgKzMwNSwxNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihj
b25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdpZHRoLCBjb25zdCBGbG9hdFJlYwogICAgICAgICBy
ZXR1cm47CiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9y
PiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLnNvbGlkQ29sb3JQcm9ncmFtKCk7Ci0gICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFt
LT5pZCgpKSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CiAK
ICAgICBmbG9hdCBhbHBoYSA9IGNvbG9yLmFscGhhKCkgLyAyNTUuMDsKLSAgICBHTF9DTUQoZ2xV
bmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLAorICAgIG1fY29udGV4dDNELT51bmlm
b3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLAogICAgICAgICAgICAgICAgICAgICAgICAo
Y29sb3IucmVkKCkgLyAyNTUuMCkgKiBhbHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgKGNv
bG9yLmdyZWVuKCkgLyAyNTUuMCkgKiBhbHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgKGNv
bG9yLmJsdWUoKSAvIDI1NS4wKSAqIGFscGhhLAotICAgICAgICAgICAgICAgICAgICAgICBhbHBo
YSkpOwotICAgIEdMX0NNRChnbExpbmVXaWR0aCh3aWR0aCkpOworICAgICAgICAgICAgICAgICAg
ICAgICBhbHBoYSk7CisgICAgbV9jb250ZXh0M0QtPmxpbmVXaWR0aCh3aWR0aCk7CiAKLSAgICBk
cmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdMX0xJ
TkVfTE9PUCwgY29sb3IuaGFzQWxwaGEoKSk7CisgICAgZHJhd1F1YWQodGFyZ2V0UmVjdCwgbW9k
ZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6TElORV9MT09Q
LCBjb2xvci5oYXNBbHBoYSgpKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdSZXBh
aW50Q291bnRlcihpbnQgdmFsdWUsIGludCBwb2ludFNpemUsIGNvbnN0IEZsb2F0UG9pbnQmIHRh
cmdldFBvaW50LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4KQpA
QCAtMzk5LDcgKzM2Miw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25z
dCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmCiAgICAgZHJhd1RleHR1
cmUodGV4dHVyZUdMLmlkKCksIHRleHR1cmVHTC5pc09wYXF1ZSgpID8gMCA6IFN1cHBvcnRzQmxl
bmRpbmcsIHRleHR1cmVHTC5zaXplKCksIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSwgbWFz
aywgZXhwb3NlZEVkZ2VzKTsKIH0KIAotI2lmIGRlZmluZWQoR0xfQVJCX3RleHR1cmVfcmVjdGFu
Z2xlKQorI2lmICFVU0UoVEVYTUFQX09QRU5HTF9FU18yKQogdm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBj
b25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5
LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKIHsKICAgICBSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW07CkBAIC00MDcsMzYgKzM3MCwzNiBAQCB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVSZWN0YW5nbGVBUkIodWludDMyX3QgdGV4dHVy
ZSwgRmxhZ3MgZmxhZ3MsIGNvbgogICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0
YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OlJlY3RPcGFjaXR5QW5kTWFzayk7CiAgICAgZWxzZQogICAgICAg
ICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3RTaW1w
bGUpOwotICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOworICAgIG1fY29u
dGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOwogCi0gICAgR0xfQ01EKGdsRW5hYmxl
VmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQo
Z2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSk7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCB0ZXh0dXJlKSk7Ci0gICAgR0xfQ01EKGdsVW5pZm9y
bTFpKHByb2dyYW0tPnNvdXJjZVRleHR1cmVMb2NhdGlvbigpLCAwKSk7CisgICAgbV9jb250ZXh0
M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAg
ICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAp
OworICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIs
IHRleHR1cmUpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4
dHVyZUxvY2F0aW9uKCksIDApOwogCi0gICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW0tPmZs
aXBMb2NhdGlvbigpLCAhIShmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSkpOwotICAgIEdMX0NN
RChnbFVuaWZvcm0yZihwcm9ncmFtLT50ZXh0dXJlU2l6ZUxvY2F0aW9uKCksIHRleHR1cmVTaXpl
LndpZHRoKCksIHRleHR1cmVTaXplLmhlaWdodCgpKSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZv
cm0xZihwcm9ncmFtLT5mbGlwTG9jYXRpb24oKSwgISEoZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVy
ZSkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtMmYocHJvZ3JhbS0+dGV4dHVyZVNpemVMb2Nh
dGlvbigpLCB0ZXh0dXJlU2l6ZS53aWR0aCgpLCB0ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CiAKICAg
ICBpZiAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24o
cHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCkpKQotICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWYo
cHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpKTsKKyAgICAgICAgbV9jb250ZXh0
M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0eSk7CiAKICAg
ICBpZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSAmJiBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLT5tYXNrVGV4
dHVyZUxvY2F0aW9uKCkpKSB7CiAgICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1Rl
eHR1cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJl
KTsKLSAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSkpOwotICAgICAg
ICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgp
KSk7Ci0gICAgICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0
aW9uKCksIDEpKTsKLSAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkp
OworICAgICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRTEpOworICAgICAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPmlkKCkpOworICAgICAgICBtX2NvbnRl
eHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSwgMSk7CisgICAg
ICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
MCk7CiAgICAgfQogCiAgICAgYm9vbCBuZWVkc0JsZW5kaW5nID0gKGZsYWdzICYgU3VwcG9ydHNC
bGVuZGluZykgfHwgb3BhY2l0eSA8IDAuOTkgfHwgbWFza1RleHR1cmU7Ci0gICAgZHJhd1F1YWQo
dGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdldCgpLCBHTF9UUklBTkdMRV9G
QU4sIG5lZWRzQmxlbmRpbmcpOworICAgIGRyYXdRdWFkKHRhcmdldFJlY3QsIG1vZGVsVmlld01h
dHJpeCwgcHJvZ3JhbS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgbmVl
ZHNCbGVuZGluZyk7CiB9Ci0jZW5kaWYgLy8gZGVmaW5lZChHTF9BUkJfdGV4dHVyZV9yZWN0YW5n
bGUpIAorI2VuZGlmIC8vICFVU0UoVEVYTUFQX09QRU5HTF9FU18yKQogCiB2b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0
IEludFNpemUmIC8qIHRleHR1cmVTaXplICovLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3Qs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNp
dHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlLCB1bnNpZ25lZCBleHBvc2VkRWRn
ZXMpCiB7Ci0gICAgYm9vbCBuZWVkc0FudGlsaWFpbmcgPSBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFu
dGlhbGlhc2luZyAmJiAhbW9kZWxWaWV3TWF0cml4LmlzSW50ZWdlclRyYW5zbGF0aW9uKCk7Ci0g
ICAgaWYgKG5lZWRzQW50aWxpYWluZyAmJiBkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodGV4
dHVyZSwgZmxhZ3MsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgbWFza1Rl
eHR1cmUsIGV4cG9zZWRFZGdlcykpCisgICAgYm9vbCBuZWVkc0FudGlhbGlhc2luZyA9IG1fZW5h
YmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nICYmICFtb2RlbFZpZXdNYXRyaXguaXNJbnRlZ2Vy
VHJhbnNsYXRpb24oKTsKKyAgICBpZiAobmVlZHNBbnRpYWxpYXNpbmcgJiYgZHJhd1RleHR1cmVX
aXRoQW50aWFsaWFzaW5nKHRleHR1cmUsIGZsYWdzLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRy
aXgsIG9wYWNpdHksIG1hc2tUZXh0dXJlLCBleHBvc2VkRWRnZXMpKQogICAgICAgIHJldHVybjsK
IAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbTsKQEAgLTQ0
NCwxNSArNDA3LDE1IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50MzJf
dCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYKICAgICAgICAgcHJvZ3JhbSA9
IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFk
ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5QW5kTWFzayk7CiAg
ICAgZWxzZQogICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OlNpbXBsZSk7Ci0gICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKSk7
CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CiAKICAgICBkcmF3
VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVyZSwgZmxhZ3MsIHRh
cmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgbWFza1RleHR1cmUpOwogfQogCi1z
dGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggdmlld3BvcnRNYXRyaXgoKQorc3RhdGljIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHZpZXdwb3J0TWF0cml4KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
M0QpCiB7Ci0gICAgR0xpbnQgdmlld3BvcnRbNF07Ci0gICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYo
R0xfVklFV1BPUlQsIHZpZXdwb3J0KSk7CisgICAgR0MzRGludCB2aWV3cG9ydFs0XTsKKyAgICBj
b250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpWSUVXUE9SVCwgdmlld3Bv
cnQpOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwogICAgIG1hdHJpeC50cmFu
c2xhdGUzZCh2aWV3cG9ydFswXSwgdmlld3BvcnRbMV0sIDApOwpAQCAtNTQ5LDcgKzUxMiw3IEBA
IGJvb2wgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMy
X3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsCiAgICAgLy8gYW50aWFsaWFzaW5nLiBOb3RlIGhlcmUg
dGhhdCB3ZSBhcmUgYWxzbyBpbmNsdWRpbmcgdGhlIHZpZXdwb3J0IG1hdHJpeCAod2hpY2gKICAg
ICAvLyB0cmFuc2xhdGVzIGZyb20gbm9ybWFsaXplZCBkZXZpY2UgY29vcmRpbmF0ZXMgdG8gc2Ny
ZWVuIGNvb3JkaW5hdGVzKSwgYmVjYXVzZSB0aGVzZQogICAgIC8vIHZhbHVlcyBhcmUgY29uc3Vt
ZWQgaW4gdGhlIGZyYWdtZW50IHNoYWRlciwgd2hpY2ggd29ya3MgaW4gc2NyZWVuIGNvb3JkaW5h
dGVzLgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcmVlblNwYWNlVHJhbnNmb3JtID0gdmll
d3BvcnRNYXRyaXgoKS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCkucHJvamVj
dGlvbk1hdHJpeCkpLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkudG8yZFRyYW5zZm9ybSgpOwor
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcmVlblNwYWNlVHJhbnNmb3JtID0gdmlld3BvcnRN
YXRyaXgobV9jb250ZXh0M0QuZ2V0KCkpLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KGRh
dGEoKS5wcm9qZWN0aW9uTWF0cml4KSkubXVsdGlwbHkobW9kZWxWaWV3TWF0cml4KS50bzJkVHJh
bnNmb3JtKCk7CiAgICAgaWYgKCFzY3JlZW5TcGFjZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEZsb2F0UXVhZCBxdWFkSW5TY3JlZW5TcGFjZSA9
IHNjcmVlblNwYWNlVHJhbnNmb3JtLm1hcFF1YWQob3JpZ2luYWxUYXJnZXRSZWN0KTsKQEAgLTU3
Myw4ICs1MzYsOCBAQCBib29sIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50aWFs
aWFzaW5nKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLAogICAgIHF1YWRUb0VkZ2VBcnJh
eShpbmZsYXRlUXVhZChxdWFkSW5TY3JlZW5TcGFjZS5ib3VuZGluZ0JveCgpLCAgaW5mbGF0aW9u
RGlzdGFuY2UpLCB0YXJnZXRRdWFkRWRnZXMgKyAxMik7CiAKICAgICBSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s+IHByb2dyYW0gPSBkYXRhKCkuc2hh
cmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuYW50aWFsaWFzaW5nTm9NYXNr
UHJvZ3JhbSgpOwotICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOwotICAg
IEdMX0NNRChnbFVuaWZvcm0zZnYocHJvZ3JhbS0+ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNw
YWNlTG9jYXRpb24oKSwgOCwgdGFyZ2V0UXVhZEVkZ2VzKSk7CisgICAgbV9jb250ZXh0M0QtPnVz
ZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0zZnYocHJv
Z3JhbS0+ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSwgOCwgdGFyZ2V0
UXVhZEVkZ2VzKTsKIAogICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdl
dCgpLCB0ZXh0dXJlLCBmbGFncywgRHJhd1F1YWQob3JpZ2luYWxUYXJnZXRSZWN0LCBleHBhbmRl
ZFF1YWRJblRleHR1cmVDb29yZGluYXRlcyksIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgMCAv
KiBtYXNrVGV4dHVyZSAqLyk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC01ODIsMjYgKzU0NSwyNiBA
QCBib29sIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQz
Ml90IHRleHR1cmUsIEZsYWdzIGZsYWdzLAogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1Rl
eHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFt
LCB1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgRHJhd1F1YWQmIHF1YWRUb0Ry
YXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9w
YWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKQogewotICAgIEdMX0NNRChn
bEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAg
R0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpOwotICAgIEdMX0NNRChnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmUpKTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMWko
cHJvZ3JhbS0+c291cmNlVGV4dHVyZUxvY2F0aW9uKCksIDApKTsKKyAgICBtX2NvbnRleHQzRC0+
ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1f
Y29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7Cisg
ICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCB0ZXh0dXJlKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnNvdXJjZVRl
eHR1cmVMb2NhdGlvbigpLCAwKTsKIAotICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtLT5m
bGlwTG9jYXRpb24oKSwgISEoZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVyZSkpKTsKKyAgICBtX2Nv
bnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPmZsaXBMb2NhdGlvbigpLCAhIShmbGFncyAmIFNo
b3VsZEZsaXBUZXh0dXJlKSk7CiAKICAgICBpZiAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCkpKQotICAg
ICAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNp
dHkpKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9j
YXRpb24oKSwgb3BhY2l0eSk7CiAKICAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUt
PmlzVmFsaWQoKSAmJiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1M
b2NhdGlvbihwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCkpKSB7CiAgICAgICAgIGNvbnN0
IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1h
cFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKLSAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVy
ZShHTF9URVhUVVJFMSkpOwotICAgICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKSk7Ci0gICAgICAgIEdMX0NNRChnbFVuaWZvcm0xaShw
cm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCksIDEpKTsKLSAgICAgICAgR0xfQ01EKGdsQWN0
aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpOworICAgICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpOworICAgICAgICBtX2NvbnRleHQzRC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wt
PmlkKCkpOworICAgICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPm1hc2tUZXh0
dXJlTG9jYXRpb24oKSwgMSk7CisgICAgICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgfQogCiAgICAgYm9vbCBuZWVkc0JsZW5k
aW5nID0gKGZsYWdzICYgU3VwcG9ydHNCbGVuZGluZykgfHwgb3BhY2l0eSA8IDAuOTkgfHwgbWFz
a1RleHR1cmU7Ci0gICAgZHJhd1F1YWQocXVhZFRvRHJhdywgbW9kZWxWaWV3TWF0cml4LCBwcm9n
cmFtLCBHTF9UUklBTkdMRV9GQU4sIG5lZWRzQmxlbmRpbmcpOworICAgIGRyYXdRdWFkKHF1YWRU
b0RyYXcsIG1vZGVsVmlld01hdHJpeCwgcHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFO
R0xFX0ZBTiwgbmVlZHNCbGVuZGluZyk7CiB9CiAKIGJvb2wgQml0bWFwVGV4dHVyZUdMOjpjYW5S
ZXVzZVdpdGgoY29uc3QgSW50U2l6ZSYgY29udGVudHNTaXplLCBGbGFncykKQEAgLTYxMiw3ICs1
NzUsNyBAQCBib29sIEJpdG1hcFRleHR1cmVHTDo6Y2FuUmV1c2VXaXRoKGNvbnN0IEludFNpemUm
IGNvbnRlbnRzU2l6ZSwgRmxhZ3MpCiAjaWYgT1MoREFSV0lOKQogI2RlZmluZSBERUZBVUxUX1RF
WFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYKICNl
bHNlCi0jZGVmaW5lIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFIEdMX1VOU0lH
TkVEX0JZVEUKKyNkZWZpbmUgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKICNlbmRpZgogCiBzdGF0aWMgdm9pZCBzd2l6
emxlQkdSQVRvUkdCQSh1aW50MzJfdCogZGF0YSwgY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHN0
cmlkZSA9IDApCkBAIC02NDcsMzggKzYxMCw0MiBAQCBzdGF0aWMgYm9vbCBkcml2ZXJTdXBwb3J0
c1N1YkltYWdlKCkKIAogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmRpZFJlc2V0KCkKIHsKKyAgICBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0Nv
bnRleHQzRCgpOworCiAgICAgaWYgKCFtX2lkKQotICAgICAgICBHTF9DTUQoZ2xHZW5UZXh0dXJl
cygxLCAmbV9pZCkpOworICAgICAgICBtX2lkID0gY29udGV4dDNELT5jcmVhdGVUZXh0dXJlKCk7
CiAKICAgICBtX3Nob3VsZENsZWFyID0gdHJ1ZTsKICAgICBpZiAobV90ZXh0dXJlU2l6ZSA9PSBj
b250ZW50U2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBHTHVpbnQgZm9ybWF0ID0gZHJp
dmVyU3VwcG9ydHNCR1JBU3dpenpsaW5nKCkgPyBHTF9CR1JBIDogR0xfUkdCQTsKKyAgICBQbGF0
Zm9ybTNET2JqZWN0IGZvcm1hdCA9IGRyaXZlclN1cHBvcnRzQkdSQVN3aXp6bGluZygpID8gR3Jh
cGhpY3NDb250ZXh0M0Q6OkJHUkEgOiBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKIAogICAgIG1f
dGV4dHVyZVNpemUgPSBjb250ZW50U2l6ZSgpOwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1faWQpKTsKLSAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKSk7Ci0gICAgR0xfQ01EKGds
VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJ
TkVBUikpOwotICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVY
VFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpKTsKLSAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0
ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKSk7
Ci0gICAgR0xfQ01EKGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCBtX3Rl
eHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIGZvcm1hdCwgREVG
QVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIDApKTsKKyAgICBjb250ZXh0M0QtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2lkKTsKKyAgICBjb250
ZXh0M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5F
QVIpOworICAgIGNvbnRleHQzRC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkxJTkVBUik7CisgICAgY29udGV4dDNELT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Ms
IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBjb250ZXh0M0QtPnRleFBh
cmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAg
IGNvbnRleHQzRC0+dGV4SW1hZ2UyRERpcmVjdChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgMCwgZm9ybWF0LCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0
KCksIDAsIGZvcm1hdCwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIDApOwog
fQogCiAKIHZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBk
YXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRQb2ludCYgc291cmNlT2Zm
c2V0LCBpbnQgYnl0ZXNQZXJMaW5lKQogewotICAgIEdMdWludCBnbEZvcm1hdCA9IEdMX1JHQkE7
Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpOworICAgIEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29u
dGV4dDNEKCk7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGdsRm9ybWF0ID0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkE7CisgICAgY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgbV9pZCk7CiAKICAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclBpeGVs
ID0gNDsKICAgICBpZiAoZHJpdmVyU3VwcG9ydHNCR1JBU3dpenpsaW5nKCkpCi0gICAgICAgIGds
Rm9ybWF0ID0gR0xfQkdSQTsKKyAgICAgICAgZ2xGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6
QkdSQTsKICAgICBlbHNlCiAgICAgICAgIHN3aXp6bGVCR1JBVG9SR0JBKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDMyX3QqPihjb25zdF9jYXN0PHZvaWQqPihkYXRhKSksIEludFJlY3Qoc291cmNlT2Zm
c2V0LCB0YXJnZXRSZWN0LnNpemUoKSksIGJ5dGVzUGVyTGluZSAvIGJ5dGVzUGVyUGl4ZWwpOwog
CiAgICAgaWYgKGJ5dGVzUGVyTGluZSA9PSB0YXJnZXRSZWN0LndpZHRoKCkgLyA0ICYmIHNvdXJj
ZU9mZnNldCA9PSBJbnRQb2ludDo6emVybygpKSB7Ci0gICAgICAgIEdMX0NNRChnbFRleFN1Yklt
YWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0
YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBERUZBVUxU
X1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgKGNvbnN0IGNoYXIqKWRhdGEpKTsKKyAgICAg
ICAgY29udGV4dDNELT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwg
dGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFO
U0ZFUl9UWVBFLCAoY29uc3QgY2hhciopZGF0YSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTY5NiwxOSArNjYzLDE5IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50
cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0CiAgICAgICAgICAg
ICBkc3QgKz0gdGFyZ2V0Qnl0ZXNQZXJMaW5lOwogICAgICAgICB9CiAKLSAgICAgICAgR0xfQ01E
KGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0
UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3Jt
YXQsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCB0ZW1wb3JhcnlEYXRhLmRh
dGEoKSkpOworICAgICAgICBjb250ZXh0M0QtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0
UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgREVGQVVMVF9URVhU
VVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIHRlbXBvcmFyeURhdGEuZGF0YSgpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogI2lmICFkZWZpbmVkKFRFWE1BUF9PUEVOR0xfRVNfMikKICAgICAv
LyBVc2UgdGhlIE9wZW5HTCBzdWItaW1hZ2UgZXh0ZW5zaW9uLCBub3cgdGhhdCB3ZSBrbm93IGl0
J3MgYXZhaWxhYmxlLgotICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVO
R1RILCBieXRlc1BlckxpbmUgLyBieXRlc1BlclBpeGVsKSk7Ci0gICAgR0xfQ01EKGdsUGl4ZWxT
dG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgc291cmNlT2Zmc2V0LnkoKSkpOwotICAgIEdMX0NN
RChnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJWEVMUywgc291cmNlT2Zmc2V0LngoKSkp
OwotICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVj
dC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVp
Z2h0KCksIGdsRm9ybWF0LCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgKGNv
bnN0IGNoYXIqKWRhdGEpKTsKLSAgICBHTF9DTUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9X
X0xFTkdUSCwgMCkpOwotICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JP
V1MsIDApKTsKLSAgICBHTF9DTUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMs
IDApKTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCBi
eXRlc1BlckxpbmUgLyBieXRlc1BlclBpeGVsKTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVp
KEdMX1VOUEFDS19TS0lQX1JPV1MsIHNvdXJjZU9mZnNldC55KCkpOworICAgIGNvbnRleHQzRC0+
cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUElYRUxTLCBzb3VyY2VPZmZzZXQueCgpKTsKKyAg
ICBjb250ZXh0M0QtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0
YXJnZXRSZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5T
RkVSX1RZUEUsIChjb25zdCBjaGFyKilkYXRhKTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVp
KEdMX1VOUEFDS19ST1dfTEVOR1RILCAwKTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdM
X1VOUEFDS19TS0lQX1JPV1MsIDApOworICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5Q
QUNLX1NLSVBfUElYRUxTLCAwKTsKICNlbmRpZgogfQogCkBAIC03NDQsMTkgKzcxMSwxOSBAQCB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0ZpbHRlcmVkKGNvbnN0IEJpdG1hcFRleHR1cmUmIHNv
dXJjZVRleHR1cmUsIGNvbnN0IEJpdAogCiAgICAgcHJvZ3JhbS0+cHJlcGFyZShmaWx0ZXIsIHBh
c3MsIHNvdXJjZVRleHR1cmUuY29udGVudFNpemUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFw
VGV4dHVyZUdMJj4oY29udGVudFRleHR1cmUpLmlkKCkpOwogCi0gICAgR0xfQ01EKGdsRW5hYmxl
VmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQo
Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigpKSk7Ci0g
ICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpOwotICAgIEdMX0NNRChnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVH
TCY+KHNvdXJjZVRleHR1cmUpLmlkKCkpKTsKLSAgICBnbFVuaWZvcm0xaShwcm9ncmFtLT50ZXh0
dXJlVW5pZm9ybSgpLCAwKTsKLSAgICBjb25zdCBHTGZsb2F0IHRhcmdldFZlcnRpY2VzW10gPSB7
LTEsIC0xLCAxLCAtMSwgMSwgMSwgLTEsIDF9OwotICAgIGNvbnN0IEdMZmxvYXQgc291cmNlVmVy
dGljZXNbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKLSAgICBHTF9DTUQoZ2xWZXJ0ZXhB
dHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBHTF9GTE9BVCwgR0xfRkFM
U0UsIDAsIHRhcmdldFZlcnRpY2VzKSk7Ci0gICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRl
cihwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHNv
dXJjZVZlcnRpY2VzKSk7Ci0gICAgR0xfQ01EKGdsRGlzYWJsZShHTF9CTEVORCkpOwotICAgIEdM
X0NNRChnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSk7Ci0gICAgR0xfQ01EKGds
RGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAg
R0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmli
KCkpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+
dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eShwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOworICAgIG1fY29udGV4dDNELT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Qml0bWFwVGV4dHVyZUdMJj4oc291cmNlVGV4dHVyZSkuaWQoKSk7CisgICAgbV9jb250ZXh0M0Qt
PnVuaWZvcm0xaShwcm9ncmFtLT50ZXh0dXJlVW5pZm9ybSgpLCAwKTsKKyAgICBjb25zdCBHQzNE
ZmxvYXQgdGFyZ2V0VmVydGljZXNbXSA9IHstMSwgLTEsIDEsIC0xLCAxLCAxLCAtMSwgMX07Cisg
ICAgY29uc3QgR0MzRGZsb2F0IHNvdXJjZVZlcnRpY2VzW10gPSB7MCwgMCwgMSwgMCwgMSwgMSwg
MCwgMX07CisgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVy
dGV4QXR0cmliKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0Rp
bnRwdHIodGFyZ2V0VmVydGljZXMpKTsKKyAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9p
bnRlcihwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHNvdXJjZVZlcnRpY2VzKSk7CisgICAgbV9jb250ZXh0
M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICBtX2NvbnRleHQzRC0+
ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKKyAgICBt
X2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJp
YigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0t
PnRleENvb3JkQXR0cmliKCkpOwogfQogCiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IEJpdG1h
cFRleHR1cmVHTDo6YXBwbHlGaWx0ZXJzKGNvbnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0
dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQpAQCAtNzk3LDI4ICs3NjQsMzIg
QEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmluaXRpYWxpemVTdGVuY2lsKCkKIHsKICAgICBpZiAo
bV9yYm8pCiAgICAgICAgIHJldHVybjsKLSAgICBHTF9DTUQoZ2xHZW5SZW5kZXJidWZmZXJzKDEs
ICZtX3JibykpOwotICAgIEdMX0NNRChnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVS
LCBtX3JibykpOworCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVy
ZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBtX3JibyA9IGNvbnRleHQzRC0+Y3Jl
YXRlUmVuZGVyYnVmZmVyKCk7CisgICAgY29udGV4dDNELT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fcmJvKTsKICNpZmRlZiBURVhNQVBfT1BFTkdM
X0VTXzIKLSAgICBHTF9DTUQoZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwg
R0xfU1RFTkNJTF9JTkRFWDgsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5o
ZWlnaHQoKSkpOworICAgIGNvbnRleHQzRC0+cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDgs
IG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CiAjZWxzZQot
ICAgIEdMX0NNRChnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9ERVBU
SF9TVEVOQ0lMLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkp
KTsKKyAgICBjb250ZXh0M0QtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUwsIG1fdGV4dHVy
ZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CiAjZW5kaWYKLSAgICBHTF9D
TUQoZ2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCkpOwotICAgIEdMX0NNRChn
bEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFD
SE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9yYm8pKTsKLSAgICBHTF9DTUQoZ2xDbGVhclN0ZW5j
aWwoMCkpOwotICAgIEdMX0NNRChnbENsZWFyKEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpOworICAg
IGNvbnRleHQzRC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSLCAwKTsKKyAgICBjb250ZXh0M0QtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNI
TUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9yYm8pOworICAgIGNvbnRl
eHQzRC0+Y2xlYXJTdGVuY2lsKDApOworICAgIGNvbnRleHQzRC0+Y2xlYXIoR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCk7CiB9CiAKIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpj
bGVhcklmTmVlZGVkKCkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90
ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOworCiAgICAgaWYgKCFtX3Nob3VsZENs
ZWFyKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2NsaXBTdGFjay5pbml0KEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgbV90ZXh0dXJlU2l6ZSkpOwotICAgIG1fY2xpcFN0YWNrLmFwcGx5KCk7
Ci0gICAgR0xfQ01EKGdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKSk7Ci0gICAgR0xfQ01EKGdsQ2xl
YXIoR0xfQ09MT1JfQlVGRkVSX0JJVCkpOworICAgIG1fY2xpcFN0YWNrLmFwcGx5KGNvbnRleHQz
RCk7CisgICAgY29udGV4dDNELT5jbGVhckNvbG9yKDAsIDAsIDAsIDApOworICAgIGNvbnRleHQz
RC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOwogICAgIG1fc2hv
dWxkQ2xlYXIgPSBmYWxzZTsKIH0KIApAQCAtODI3LDMzICs3OTgsMzcgQEAgdm9pZCBCaXRtYXBU
ZXh0dXJlR0w6OmNyZWF0ZUZib0lmTmVlZGVkKCkKICAgICBpZiAobV9mYm8pCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEdMX0NNRChnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pKTsKLSAgICBH
TF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKSk7Ci0gICAgR0xf
Q01EKGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFD
SE1FTlQwLCBHTF9URVhUVVJFXzJELCBpZCgpLCAwKSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBt
X2ZibyA9IGNvbnRleHQzRC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBjb250ZXh0M0QtPmJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAg
ICBjb250ZXh0M0QtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgaWQoKSwgMCk7CiAgICAgbV9zaG91bGRDbGVhciA9IHRydWU7
CiB9CiAKIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpiaW5kKCkKIHsKLSAgICBHTF9DTUQoZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCAwKSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBjb250ZXh0
M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKICAgICBj
cmVhdGVGYm9JZk5lZWRlZCgpOwotICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFN
RUJVRkZFUiwgbV9mYm8pKTsKLSAgICBHTF9DTUQoZ2xWaWV3cG9ydCgwLCAwLCBtX3RleHR1cmVT
aXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKTsKKyAgICBjb250ZXh0M0QtPmJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAg
ICBjb250ZXh0M0QtPnZpZXdwb3J0KDAsIDAsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0
dXJlU2l6ZS5oZWlnaHQoKSk7CiAgICAgY2xlYXJJZk5lZWRlZCgpOwogICAgIG1fdGV4dHVyZU1h
cHBlci0+ZGF0YSgpLnByb2plY3Rpb25NYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KG1f
dGV4dHVyZVNpemUsIHRydWUgLyogbWlycm9yZWQgKi8pOwotICAgIG1fY2xpcFN0YWNrLmFwcGx5
KCk7CisgICAgbV9jbGlwU3RhY2suYXBwbHkoY29udGV4dDNEKTsKIH0KIAogQml0bWFwVGV4dHVy
ZUdMOjp+Qml0bWFwVGV4dHVyZUdMKCkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOworCiAgICAgaWYgKG1f
aWQpCi0gICAgICAgIEdMX0NNRChnbERlbGV0ZVRleHR1cmVzKDEsICZtX2lkKSk7CisgICAgICAg
IGNvbnRleHQzRC0+ZGVsZXRlVGV4dHVyZShtX2lkKTsKIAogICAgIGlmIChtX2ZibykKLSAgICAg
ICAgR0xfQ01EKGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2ZibykpOworICAgICAgICBjb250
ZXh0M0QtPmRlbGV0ZUZyYW1lYnVmZmVyKG1fZmJvKTsKIAogICAgIGlmIChtX3JibykKLSAgICAg
ICAgR0xfQ01EKGdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9yYm8pKTsKKyAgICAgICAgY29u
dGV4dDNELT5kZWxldGVSZW5kZXJidWZmZXIobV9yYm8pOwogfQogCiBib29sIEJpdG1hcFRleHR1
cmVHTDo6aXNWYWxpZCgpIGNvbnN0CkBAIC04NzMsMTEgKzg0OCwxMSBAQCBUZXh0dXJlTWFwcGVy
R0w6On5UZXh0dXJlTWFwcGVyR0woKQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmluZERlZmF1
bHRTdXJmYWNlKCkKIHsKLSAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIGRhdGEoKS50YXJnZXRGcmFtZUJ1ZmZlcikpOworICAgIG1fY29udGV4dDNELT5iaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBkYXRhKCkudGFyZ2V0RnJh
bWVCdWZmZXIpOwogICAgIEludFNpemUgdmlld3BvcnRTaXplKGRhdGEoKS52aWV3cG9ydFsyXSwg
ZGF0YSgpLnZpZXdwb3J0WzNdKTsKICAgICBkYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNyZWF0
ZVByb2plY3Rpb25NYXRyaXgodmlld3BvcnRTaXplLCBkYXRhKCkuUGFpbnRGbGFncyAmIFBhaW50
aW5nTWlycm9yZWQpOwotICAgIEdMX0NNRChnbFZpZXdwb3J0KGRhdGEoKS52aWV3cG9ydFswXSwg
ZGF0YSgpLnZpZXdwb3J0WzFdLCB2aWV3cG9ydFNpemUud2lkdGgoKSwgdmlld3BvcnRTaXplLmhl
aWdodCgpKSk7Ci0gICAgbV9jbGlwU3RhY2suYXBwbHkoKTsKKyAgICBtX2NvbnRleHQzRC0+dmll
d3BvcnQoZGF0YSgpLnZpZXdwb3J0WzBdLCBkYXRhKCkudmlld3BvcnRbMV0sIHZpZXdwb3J0U2l6
ZS53aWR0aCgpLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpOworICAgIG1fY2xpcFN0YWNrLmFwcGx5
KG1fY29udGV4dDNELmdldCgpKTsKICAgICBkYXRhKCkuY3VycmVudFN1cmZhY2UuY2xlYXIoKTsK
IH0KIApAQCAtOTA3LDcgKzg4Miw3IEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpiZWdpblNjaXNz
b3JDbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGNsaXBTdGFjaygpLmN1cnJlbnQoKS5zY2lzc29yQm94Lmlu
dGVyc2VjdChyZWN0KTsKLSAgICBjbGlwU3RhY2soKS5hcHBseSgpOworICAgIGNsaXBTdGFjaygp
LmFwcGx5KG1fY29udGV4dDNELmdldCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTIx
LDEwICs4OTYsMTAgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb24KIAogICAgIFJlZlB0cjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyOjpTaW1wbGUpOwogCi0gICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFt
LT5pZCgpKSk7Ci0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+
dmVydGV4QXR0cmliKCkpKTsKLSAgICBjb25zdCBHTGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwg
MSwgMCwgMSwgMSwgMCwgMX07Ci0gICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9n
cmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB1bml0UmVjdCkp
OworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOworICAgIG1fY29u
dGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7
CisgICAgY29uc3QgR0MzRGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwg
MX07CisgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4
QXR0cmliKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRw
dHIodW5pdFJlY3QpKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5z
Zm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KQogICAgICAgICAgICAgLm11
bHRpcGx5KG1vZGVsVmlld01hdHJpeCkKQEAgLTkzMywxNCArOTA4LDE0IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmll
d01hdHJpeCwgY29uCiAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKICAgICAgICAgICAgICAg
ICB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIDAsIDEpKTsKIAotICAgIGNvbnN0IEdM
ZmxvYXQgbTRbXSA9IHsKKyAgICBjb25zdCBHQzNEZmxvYXQgbTRbXSA9IHsKICAgICAgICAgbWF0
cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAogICAg
ICAgICBtYXRyaXgubTIxKCksIG1hdHJpeC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0
KCksCiAgICAgICAgIG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1h
dHJpeC5tMzQoKSwKICAgICAgICAgbWF0cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5t
NDMoKSwgbWF0cml4Lm00NCgpCiAgICAgfTsKIAotICAgIGNvbnN0IEdMZmxvYXQgbTRhbGxbXSA9
IHsKKyAgICBjb25zdCBHQzNEZmxvYXQgbTRhbGxbXSA9IHsKICAgICAgICAgMiwgMCwgMCwgMCwK
ICAgICAgICAgMCwgMiwgMCwgMCwKICAgICAgICAgMCwgMCwgMSwgMCwKQEAgLTk0OSw0MyArOTI0
LDQyIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAKICAgICBpbnQmIHN0ZW5jaWxJbmRleCA9
IGNsaXBTdGFjaygpLmN1cnJlbnQoKS5zdGVuY2lsSW5kZXg7CiAKLSAgICBHTF9DTUQoZ2xFbmFi
bGUoR0xfU1RFTkNJTF9URVNUKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6U1RFTkNJTF9URVNUKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBkbyBh
bnkgYWN0dWFsIGRyYXdpbmcuCi0gICAgR0xfQ01EKGdsU3RlbmNpbEZ1bmMoR0xfTkVWRVIsIHN0
ZW5jaWxJbmRleCwgc3RlbmNpbEluZGV4KSk7CisgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxGdW5j
KEdyYXBoaWNzQ29udGV4dDNEOjpORVZFUiwgc3RlbmNpbEluZGV4LCBzdGVuY2lsSW5kZXgpOwog
CiAgICAgLy8gT3BlcmF0ZSBvbmx5IG9uIHRoZSBzdGVuY2lsSW5kZXggYW5kIGFib3ZlLgotICAg
IEdMX0NNRChnbFN0ZW5jaWxNYXNrKDB4ZmYgJiB+KHN0ZW5jaWxJbmRleCAtIDEpKSk7CisgICAg
bV9jb250ZXh0M0QtPnN0ZW5jaWxNYXNrKDB4ZmYgJiB+KHN0ZW5jaWxJbmRleCAtIDEpKTsKIAog
ICAgIC8vIEZpcnN0IGNsZWFyIHRoZSBlbnRpcmUgYnVmZmVyIGF0IHRoZSBjdXJyZW50IGluZGV4
LgotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+bWF0cml4TG9jYXRpb24o
KSwgMSwgR0xfRkFMU0UsIG00YWxsKSk7Ci0gICAgR0xfQ01EKGdsU3RlbmNpbE9wKEdMX1pFUk8s
IEdMX1pFUk8sIEdMX1pFUk8pKTsKLSAgICBHTF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xF
X0ZBTiwgMCwgNCkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtTWF0cml4NGZ2KHByb2dyYW0t
Pm1hdHJpeExvY2F0aW9uKCksIDEsIGZhbHNlLCBjb25zdF9jYXN0PEdDM0RmbG9hdCo+KG00YWxs
KSk7CisgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxPcChHcmFwaGljc0NvbnRleHQzRDo6WkVSTywg
R3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKKyAgICBt
X2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAw
LCA0KTsKIAogICAgIC8vIE5vdyBhcHBseSB0aGUgY3VycmVudCBpbmRleCB0byB0aGUgbmV3IHF1
YWQuCi0gICAgR0xfQ01EKGdsU3RlbmNpbE9wKEdMX1JFUExBQ0UsIEdMX1JFUExBQ0UsIEdMX1JF
UExBQ0UpKTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExv
Y2F0aW9uKCksIDEsIEdMX0ZBTFNFLCBtNCkpOwotICAgIEdMX0NNRChnbERyYXdBcnJheXMoR0xf
VFJJQU5HTEVfRkFOLCAwLCA0KSk7CisgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxPcChHcmFwaGlj
c0NvbnRleHQzRDo6UkVQTEFDRSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFUExBQ0UsIEdyYXBoaWNz
Q29udGV4dDNEOjpSRVBMQUNFKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihw
cm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgY29uc3RfY2FzdDxHQzNEZmxvYXQq
PihtNCkpOworICAgIG1fY29udGV4dDNELT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpU
UklBTkdMRV9GQU4sIDAsIDQpOwogCiAgICAgLy8gQ2xlYXIgdGhlIHN0YXRlLgotICAgIEdMX0NN
RChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwot
ICAgIEdMX0NNRChnbFN0ZW5jaWxNYXNrKDApKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQz
RC0+c3RlbmNpbE1hc2soMCk7CiAKICAgICAvLyBJbmNyZWFzZSBzdGVuY2lsSW5kZXggYW5kIGFw
cGx5IHN0ZW5jaWwgdGVzdGluZy4KICAgICBzdGVuY2lsSW5kZXggKj0gMjsKLSAgICBjbGlwU3Rh
Y2soKS5hcHBseSgpOworICAgIGNsaXBTdGFjaygpLmFwcGx5KG1fY29udGV4dDNELmdldCgpKTsK
IH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZENsaXAoKQogewogICAgIGNsaXBTdGFjaygp
LnBvcCgpOwotICAgIGNsaXBTdGFjaygpLmFwcGx5KCk7CisgICAgY2xpcFN0YWNrKCkuYXBwbHko
bV9jb250ZXh0M0QuZ2V0KCkpOwogfQogCiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1
cmVNYXBwZXJHTDo6Y3JlYXRlVGV4dHVyZSgpCiB7Ci0gICAgQml0bWFwVGV4dHVyZUdMKiB0ZXh0
dXJlID0gbmV3IEJpdG1hcFRleHR1cmVHTCgpOwotICAgIHRleHR1cmUtPnNldFRleHR1cmVNYXBw
ZXIodGhpcyk7CisgICAgQml0bWFwVGV4dHVyZUdMKiB0ZXh0dXJlID0gbmV3IEJpdG1hcFRleHR1
cmVHTCh0aGlzKTsKICAgICByZXR1cm4gYWRvcHRSZWYodGV4dHVyZSk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0wuaAppbmRleCAwNzZlNjVmLi44YTcyZDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCkBAIC0y
Myw4ICsyMyw4IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVk
ZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRl
ICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKICNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIApAQCAtMzgsNyAr
MzgsNiBAQCBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTsKIGNsYXNzIFRleHR1cmVN
YXBwZXJHTCA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c093blB0cjxUZXh0dXJlTWFwcGVyR0w+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBU
ZXh0dXJlTWFwcGVyR0wpOyB9Ci0gICAgVGV4dHVyZU1hcHBlckdMKCk7CiAgICAgdmlydHVhbCB+
VGV4dHVyZU1hcHBlckdMKCk7CiAKICAgICBlbnVtIEZsYWcgewpAQCAtNTQsNyArNTMsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9w
YWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlLCB1bnNpZ25lZCBleHBvc2Vk
RWRnZXMpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZSh1aW50MzJfdCB0
ZXh0dXJlLCBGbGFncywgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJp
eCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIHVuc2ln
bmVkIGV4cG9zZWRFZGdlcyA9IEFsbEVkZ2VzKTsKIAotI2lmIGRlZmluZWQoR0xfQVJCX3RleHR1
cmVfcmVjdGFuZ2xlKQorI2lmICFVU0UoVEVYTUFQX09QRU5HTF9FU18yKQogICAgIHZpcnR1YWwg
dm9pZCBkcmF3VGV4dHVyZVJlY3RhbmdsZUFSQih1aW50MzJfdCB0ZXh0dXJlLCBGbGFncywgY29u
c3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwg
Y29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpOwogI2VuZGlmCiAKQEAgLTY2LDYgKzY1
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW50U2l6ZSBtYXhUZXh0dXJlU2l6ZSgpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIEludFNpemUoMjAwMCwgMjAwMCk7IH0KICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpIE9WRVJSSURFOwogICAgIHZp
cnR1YWwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKSBPVkVSUklERSB7IHJldHVy
biBtX2NvbnRleHQ7IH0KKyAgICBpbmxpbmUgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29u
dGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0M0QuZ2V0KCk7IH0KICAgICB2aXJ0dWFs
IHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkgT1ZFUlJJ
REUgeyBtX2NvbnRleHQgPSBjb250ZXh0OyB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCkBA
IC03NSw3ICs3NSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEVuYWJsZUVkZ2VEaXN0YW5jZUFu
dGlhbGlhc2luZyhib29sIGVuYWJsZWQpIHsgbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNp
bmcgPSBlbmFibGVkOyB9CiAKIHByaXZhdGU6Ci0KICAgICBzdHJ1Y3QgQ2xpcFN0YXRlIHsKICAg
ICAgICAgSW50UmVjdCBzY2lzc29yQm94OwogICAgICAgICBpbnQgc3RlbmNpbEluZGV4OwpAQCAt
ODksNyArODgsNyBAQCBwcml2YXRlOgogICAgIHB1YmxpYzoKICAgICAgICAgdm9pZCBwdXNoKCk7
CiAgICAgICAgIHZvaWQgcG9wKCk7Ci0gICAgICAgIHZvaWQgYXBwbHkoKTsKKyAgICAgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQzRCopOwogICAgICAgICBpbmxpbmUgQ2xpcFN0YXRlJiBj
dXJyZW50KCkgeyByZXR1cm4gY2xpcFN0YXRlOyB9CiAgICAgICAgIHZvaWQgaW5pdChjb25zdCBJ
bnRSZWN0Jik7CiAKQEAgLTEwOSwxNiArMTA4LDE5IEBAIHByaXZhdGU6CiAgICAgICAgIEZsb2F0
UXVhZCB0YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlOwogICAgIH07CiAKKyAgICBUZXh0dXJl
TWFwcGVyR0woKTsKKwogICAgIGJvb2wgZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQz
Ml90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBGbG9hdFJlY3QmIG9yaWdpbmFsVGFyZ2V0UmVjdCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0
eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIHVuc2lnbmVkIGV4cG9zZWRFZGdl
cyk7CiAgICAgdm9pZCBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0oVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0qLCB1aW50MzJfdCB0ZXh0dXJlLCBGbGFncywgY29uc3QgRHJhd1F1YWQmLCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5
LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7Ci0gICAgdm9pZCBkcmF3UXVhZChj
b25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRy
aXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiwgR0xlbnVtIGRyYXdpbmdNb2RlLCBib29s
IG5lZWRzQmxlbmRpbmcpOworICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbSosIEdDM0RlbnVtIGRyYXdpbmdNb2RlLCBib29sIG5lZWRzQmxlbmRpbmcpOwog
CiAgICAgYm9vbCBiZWdpblNjaXNzb3JDbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jiwg
Y29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBiaW5kRGVmYXVsdFN1cmZhY2UoKTsKICAgICBD
bGlwU3RhY2smIGNsaXBTdGFjaygpOwogICAgIGlubGluZSBUZXh0dXJlTWFwcGVyR0xEYXRhJiBk
YXRhKCkgeyByZXR1cm4gKm1fZGF0YTsgfQotICAgIFRleHR1cmVNYXBwZXJHTERhdGEqIG1fZGF0
YTsKICAgICBHcmFwaGljc0NvbnRleHQqIG1fY29udGV4dDsKKyAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IG1fY29udGV4dDNEOworICAgIFRleHR1cmVNYXBwZXJHTERhdGEqIG1fZGF0YTsK
ICAgICBDbGlwU3RhY2sgbV9jbGlwU3RhY2s7CiAgICAgYm9vbCBtX2VuYWJsZUVkZ2VEaXN0YW5j
ZUFudGlhbGlhc2luZzsKIApAQCAtMTM1LDcgKzEzNyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGlu
aXRpYWxpemVTdGVuY2lsKCk7CiAgICAgfkJpdG1hcFRleHR1cmVHTCgpOwogICAgIHZpcnR1YWwg
dWludDMyX3QgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0gICAgdWludDMyX3QgdGV4dHVy
ZVRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIEdMX1RFWFRVUkVfMkQ7IH0KKyAgICB1aW50MzJfdCB0
ZXh0dXJlVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQ7IH0KICAgICBJbnRTaXplIHRleHR1cmVTaXplKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJl
U2l6ZTsgfQogICAgIHZvaWQgc2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyR0wqIHRleG1h
cCkgeyBtX3RleHR1cmVNYXBwZXIgPSB0ZXhtYXA7IH0KICAgICB2b2lkIHVwZGF0ZUNvbnRlbnRz
KEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50Jik7CkBAIC0xNDcsMjAgKzE0
OSwyMiBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBHTHVpbnQgbV9pZDsKKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IG1faWQ7CiAgICAgSW50U2l6ZSBtX3RleHR1cmVTaXplOwogICAg
IEludFJlY3QgbV9kaXJ0eVJlY3Q7Ci0gICAgR0x1aW50IG1fZmJvOwotICAgIEdMdWludCBtX3Ji
bzsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZmJvOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9y
Ym87CiAgICAgYm9vbCBtX3Nob3VsZENsZWFyOwotICAgIFRleHR1cmVNYXBwZXJHTCogbV90ZXh0
dXJlTWFwcGVyOwogICAgIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrIG1fY2xpcFN0YWNrOwot
ICAgIEJpdG1hcFRleHR1cmVHTCgpCisgICAgVGV4dHVyZU1hcHBlckdMKiBtX3RleHR1cmVNYXBw
ZXI7CisKKyAgICBCaXRtYXBUZXh0dXJlR0woKTsKKyAgICBCaXRtYXBUZXh0dXJlR0woVGV4dHVy
ZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVyKQogICAgICAgICA6IG1faWQoMCkKICAgICAgICAgLCBt
X2ZibygwKQogICAgICAgICAsIG1fcmJvKDApCiAgICAgICAgICwgbV9zaG91bGRDbGVhcih0cnVl
KQotICAgICAgICAsIG1fdGV4dHVyZU1hcHBlcigwKQorICAgICAgICAsIG1fdGV4dHVyZU1hcHBl
cih0ZXh0dXJlTWFwcGVyKQogICAgIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuY3BwCmluZGV4IDBmYmRiZTkuLmZhOGFjMDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcApAQCAtMzAsMjUgKzMwLDExIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmbmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSNkZWZpbmUg
T0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlMgXAotICAgICIjZGVmaW5lIGxvd3BcbiNkZWZpbmUg
aGlnaHBcbiIKLSNkZWZpbmUgT0VTMl9GUkFHTUVOVF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT04K
LSNlbHNlCi0jZGVmaW5lIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TCi0jZGVmaW5lIE9FUzJf
RlJBR01FTlRfU0hBREVSX0RFRkFVTFRfUFJFQ0lTSU9OIFwKLSAgICAicHJlY2lzaW9uIG1lZGl1
bXAgZmxvYXQ7IFxuIgotI2VuZGlmCi0KLSNkZWZpbmUgU1RSSU5HSUZZX1ZBTChzcmMuLi4pICNz
cmMKLSNkZWZpbmUgVkVSVEVYX1NIQURFUihzcmMuLi4pIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJ
T05TXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSSU5HSUZZX1ZBTChzcmMpCi0j
ZGVmaW5lIEZSQUdNRU5UX1NIQURFUihzcmMuLi4pIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05T
XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPRVMyX0ZSQUdNRU5UX1NIQURFUl9E
RUZBVUxUX1BSRUNJU0lPTlwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSSU5H
SUZZX1ZBTChzcmMpCisjZGVmaW5lIFNUUklOR0lGWShzcmMuLi4pICNzcmMKIAogc3RhdGljIGNv
bnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sgPQotICAgIEZSQUdN
RU5UX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NvdXJjZTsKICAgICAgICAgdW5pZm9y
bSBzYW1wbGVyMkQgc19tYXNrOwogICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5
OwpAQCAtNjQsNyArNTAsOCBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3Vy
Y2VPcGFjaXR5QW5kTWFzayA9CiAgICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50
U2hhZGVyU291cmNlUmVjdE9wYWNpdHlBbmRNYXNrID0KLSAgICBGUkFHTUVOVF9TSEFERVIoCisg
ICAgU1RSSU5HSUZZKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAg
dW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfc291cmNlOwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIy
RFJlY3Qgc19tYXNrOwogICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwpAQCAt
ODAsNyArNjcsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0
T3BhY2l0eUFuZE1hc2sgPQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFk
ZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9Ci0gICAgVkVSVEVYX1NIQURFUigKKyAgICBTVFJJTkdJ
RlkoCiAgICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKICAgICAgICAgdW5pZm9ybSBsb3dw
IGZsb2F0IHVfZmxpcDsKICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CkBAIC05NSw3
ICs4Miw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5k
TWFzayA9CiAgICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNl
U2ltcGxlID0KLSAgICBGUkFHTUVOVF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAorICAgICAgICBw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zb3Vy
Y2U7CiAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CiAgICAgICAgIHZhcnlp
bmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOwpAQCAtMTA3LDcgKzk1LDggQEAgc3RhdGlj
IGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlU2ltcGxlID0KICAgICApOwogCiBzdGF0
aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNpbmdOb01hc2sgPQot
ICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCisgICAgICAgIHByZWNpc2lvbiBt
ZWRpdW1wIGZsb2F0OwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NvdXJjZTsKICAgICAg
ICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CiAgICAgICAgIHVuaWZvcm0g
bG93cCBmbG9hdCB1X29wYWNpdHk7CkBAIC0xNDUsNyArMTM0LDggQEAgc3RhdGljIGNvbnN0IGNo
YXIqIGZyYWdtZW50U2hhZGVyU291cmNlQW50aWFsaWFzaW5nTm9NYXNrID0KICAgICApOwogCiBz
dGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0U2ltcGxlID0KLSAgICBG
UkFHTUVOVF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVt
cCBmbG9hdDsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfc291cmNlOwogICAgICAg
ICB1bmlmb3JtIGxvd3AgdmVjMiB1X3RleHR1cmVTaXplOwogICAgICAgICB1bmlmb3JtIGxvd3Ag
ZmxvYXQgdV9vcGFjaXR5OwpAQCAtMTU4LDcgKzE0OCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBm
cmFnbWVudFNoYWRlclNvdXJjZVJlY3RTaW1wbGUgPQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBj
aGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUgPQotICAgIFZFUlRFWF9TSEFERVIoCisgICAg
U1RSSU5HSUZZKAogICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXg7CiAgICAgICAgIHVuaWZv
cm0gbG93cCBmbG9hdCB1X2ZsaXA7CiAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwpA
QCAtMTcxLDcgKzE2MSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VT
aW1wbGUgPQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VT
b2xpZENvbG9yID0KLSAgICBWRVJURVhfU0hBREVSKAorICAgIFNUUklOR0lGWSgKICAgICAgICAg
dW5pZm9ybSBtYXQ0IHVfbWF0cml4OwogICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsK
ICAgICAgICAgdm9pZCBtYWluKHZvaWQpCkBAIC0xODIsNyArMTcyLDggQEAgc3RhdGljIGNvbnN0
IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNvbGlkQ29sb3IgPQogCiAKIHN0YXRpYyBjb25zdCBj
aGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVNvbGlkQ29sb3IgPQotICAgIFZFUlRFWF9TSEFERVIo
CisgICAgU1RSSU5HSUZZKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAg
ICAgdW5pZm9ybSB2ZWM0IHVfY29sb3I7CiAgICAgICAgIHZvaWQgbWFpbih2b2lkKQogICAgICAg
ICB7CkBAIC0yMTIsMjIgKzIwMywyMiBAQCBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZwogCiAgICAg
c3dpdGNoIChzaGFkZXJUeXBlKSB7CiAgICAgY2FzZSBTaW1wbGU6Ci0gICAgICAgIHByb2dyYW0g
PSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6Y3JlYXRlKCk7CisgICAgICAgIHBy
b2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6Y3JlYXRlKG1fY29udGV4
dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUmVjdFNpbXBsZToKLSAgICAgICAgcHJvZ3Jh
bSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3JlYXRlKCk7CisgICAg
ICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmNyZWF0
ZShtX2NvbnRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFudGlhbGlhc2luZ05vTWFz
azoKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFz
aW5nTm9NYXNrOjpjcmVhdGUoKTsKKyAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpjcmVhdGUobV9jb250ZXh0KTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBPcGFjaXR5QW5kTWFzazoKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OmNyZWF0ZSgpOworICAgICAgICBw
cm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRl
KG1fY29udGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUmVjdE9wYWNpdHlBbmRNYXNr
OgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0
eUFuZE1hc2s6OmNyZWF0ZSgpOworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OmNyZWF0ZShtX2NvbnRleHQpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFNvbGlkQ29sb3I6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OmNyZWF0ZSgpOworICAgICAgICBwcm9ncmFtID0g
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpjcmVhdGUobV9jb250ZXh0KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnZhbGlkOgogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTIzNiw4ICsyMjcsOSBAQCBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZwogICAg
IHJldHVybiBwcm9ncmFtOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25z
dCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSkKLSAgICA6IG1faWQoMCkKK1RleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFy
KiBmcmFnbWVudFNoYWRlclNvdXJjZSkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwg
bV9pZCgwKQogICAgICwgbV92ZXJ0ZXhBdHRyaWIoMCkKICAgICAsIG1fdmVydGV4U2hhZGVyKDAp
CiAgICAgLCBtX2ZyYWdtZW50U2hhZGVyKDApCkBAIC0yNTYsNDYgKzI0OCw0NiBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppbml0aWFsaXplUHJvZ3JhbSgpCiB7CiAgICAgY29u
c3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlUHJvZ3JhbSA9IHZlcnRleFNoYWRlclNvdXJjZSgp
OwogICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlUHJvZ3JhbSA9IGZyYWdtZW50
U2hhZGVyU291cmNlKCk7Ci0gICAgR0x1aW50IHZlcnRleFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVy
KEdMX1ZFUlRFWF9TSEFERVIpOwotICAgIEdMdWludCBmcmFnbWVudFNoYWRlciA9IGdsQ3JlYXRl
U2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURFUik7Ci0gICAgZ2xTaGFkZXJTb3VyY2UodmVydGV4U2hh
ZGVyLCAxLCAmdmVydGV4U2hhZGVyU291cmNlUHJvZ3JhbSwgMCk7Ci0gICAgZ2xTaGFkZXJTb3Vy
Y2UoZnJhZ21lbnRTaGFkZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJjZVByb2dyYW0sIDApOwot
ICAgIEdMdWludCBwcm9ncmFtSUQgPSBnbENyZWF0ZVByb2dyYW0oKTsKLSAgICBnbENvbXBpbGVT
aGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBnbENvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIp
OworICAgIFBsYXRmb3JtM0RPYmplY3QgdmVydGV4U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVT
aGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpOworICAgIFBsYXRmb3JtM0RP
YmplY3QgZnJhZ21lbnRTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBR01FTlRfU0hBREVSKTsKKyAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZSh2
ZXJ0ZXhTaGFkZXIsIHZlcnRleFNoYWRlclNvdXJjZVByb2dyYW0pOworICAgIG1fY29udGV4dC0+
c2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlclNvdXJjZVByb2dyYW0p
OworICAgIFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbUlEID0gbV9jb250ZXh0LT5jcmVhdGVQcm9n
cmFtKCk7CisgICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAg
bV9jb250ZXh0LT5jb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKIAotICAgIGdsQXR0YWNo
U2hhZGVyKHByb2dyYW1JRCwgdmVydGV4U2hhZGVyKTsKLSAgICBnbEF0dGFjaFNoYWRlcihwcm9n
cmFtSUQsIGZyYWdtZW50U2hhZGVyKTsKLSAgICBnbExpbmtQcm9ncmFtKHByb2dyYW1JRCk7Cisg
ICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFkZXIpOworICAg
IG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRTaGFkZXIpOworICAg
IG1fY29udGV4dC0+bGlua1Byb2dyYW0ocHJvZ3JhbUlEKTsKIAotICAgIG1fdmVydGV4QXR0cmli
ID0gZ2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3ZlcnRleCIpOworICAgIG1fdmVy
dGV4QXR0cmliID0gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3Zl
cnRleCIpOwogCiAgICAgbV9pZCA9IHByb2dyYW1JRDsKICAgICBtX3ZlcnRleFNoYWRlciA9IHZl
cnRleFNoYWRlcjsKICAgICBtX2ZyYWdtZW50U2hhZGVyID0gZnJhZ21lbnRTaGFkZXI7CiB9CiAK
LXZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbihHTGlu
dCAmdmFyaWFibGUsIGNvbnN0IGNoYXIqIG5hbWUpCit2b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjpnZXRVbmlmb3JtTG9jYXRpb24oR0MzRGludCAmdmFyaWFibGUsIGNvbnN0IGNoYXIq
IG5hbWUpCiB7Ci0gICAgdmFyaWFibGUgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX2lkLCBuYW1l
KTsKKyAgICB2YXJpYWJsZSA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1faWQsIG5h
bWUpOwogICAgIEFTU0VSVCh2YXJpYWJsZSA+PSAwKTsKIH0KIAogVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpCiB7Ci0gICAgR0x1aW50IHBy
b2dyYW1JRCA9IG1faWQ7CisgICAgUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtSUQgPSBtX2lkOwog
ICAgIGlmICghcHJvZ3JhbUlEKQogICAgICAgICByZXR1cm47CiAKLSAgICBnbERldGFjaFNoYWRl
cihwcm9ncmFtSUQsIG1fdmVydGV4U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRlcihtX3ZlcnRl
eFNoYWRlcik7Ci0gICAgZ2xEZXRhY2hTaGFkZXIocHJvZ3JhbUlELCBtX2ZyYWdtZW50U2hhZGVy
KTsKLSAgICBnbERlbGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBnbERlbGV0ZVBy
b2dyYW0ocHJvZ3JhbUlEKTsKKyAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihwcm9ncmFtSUQs
IG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihtX3ZlcnRleFNo
YWRlcik7CisgICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIocHJvZ3JhbUlELCBtX2ZyYWdtZW50
U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVyKTsK
KyAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbUlEKTsKIH0KIAotVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1TaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxl
KCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZVNp
bXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUpCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQpCisgICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0
LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291cmNlU2ltcGxlKQog
ewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fZmxp
cExvY2F0aW9uLCAidV9mbGlwIik7CkBAIC0zMDQsMTYgKzI5NiwxNiBAQCBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKQog
ICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwog
fQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OlRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU29saWRDb2xvcigpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSh2ZXJ0ZXhTaGFkZXJTb3VyY2VTb2xpZENvbG9yLCBmcmFnbWVudFNoYWRlclNvdXJjZVNvbGlk
Q29sb3IpCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OlRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAg
ICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJj
ZVNvbGlkQ29sb3IsIGZyYWdtZW50U2hhZGVyU291cmNlU29saWRDb2xvcikKIHsKICAgICBpbml0
aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9u
LCAidV9tYXRyaXgiKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9jb2xvckxvY2F0aW9uLCAi
dV9jb2xvciIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgpCi0gICAgOiBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291
cmNlUmVjdFNpbXBsZSkKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hh
ZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RTaW1wbGUpCiB7CiAgICAg
aW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2Nh
dGlvbiwgInVfbWF0cml4Iik7CkBAIC0zMjMsOCArMzE1LDggQEAgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1SZWN0U2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUo
KQogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIp
OwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCkKLSAgICA6IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudFNo
YWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrKQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFj
aXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayhHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
KGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRl
clNvdXJjZU9wYWNpdHlBbmRNYXNrKQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAg
Z2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwpAQCAtMzM0
LDggKzMyNiw4IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hCiAgICAgZ2V0VW5pZm9ybUxvY2F0
aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7CiB9CiAKLVRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVJlY3RPcGFjaXR5QW5kTWFzaygpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2
ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0
T3BhY2l0eUFuZE1hc2spCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5k
TWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShj
b250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRTaGFkZXJT
b3VyY2VSZWN0T3BhY2l0eUFuZE1hc2spCiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAg
ICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7CkBAIC0z
NDUsOCArMzM3LDggQEAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1h
c2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWMKICAgICBnZXRVbmlmb3JtTG9j
YXRpb24obV9vcGFjaXR5TG9jYXRpb24sICJ1X29wYWNpdHkiKTsKIH0KIAotVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtQW50aWFsaWFzaW5nTm9NYXNrKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
KHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNp
bmdOb01hc2spCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2soR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQpCisgICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0
LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291cmNlQW50aWFsaWFz
aW5nTm9NYXNrKQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAgZ2V0VW5pZm9ybUxv
Y2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwpAQCAtMzU2LDkgKzM0OCw5IEBA
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhCiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fZmxpcExv
Y2F0aW9uLCAidV9mbGlwIik7CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpCitUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKIHsKLSAgICBBU1NFUlQoaW5pdGlhbGl6ZU9wZW5HTFNoaW1z
KCkpOwogfQogCiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6flRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyKCkKQEAgLTM3MywxOCArMzY1LDE5IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjp+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKQogCiBTdGFuZGFyZEZpbHRlclByb2dy
YW06On5TdGFuZGFyZEZpbHRlclByb2dyYW0oKQogewotICAgIGdsRGV0YWNoU2hhZGVyKG1faWQs
IG1fdmVydGV4U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7Ci0g
ICAgZ2xEZXRhY2hTaGFkZXIobV9pZCwgbV9mcmFnbWVudFNoYWRlcik7Ci0gICAgZ2xEZWxldGVT
aGFkZXIobV9mcmFnbWVudFNoYWRlcik7Ci0gICAgZ2xEZWxldGVQcm9ncmFtKG1faWQpOworICAg
IG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG1faWQsIG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2Nv
bnRleHQtPmRlbGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5kZXRh
Y2hTaGFkZXIobV9pZCwgbV9mcmFnbWVudFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5kZWxldGVT
aGFkZXIobV9mcmFnbWVudFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1f
aWQpOwogfQogCi1TdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShG
aWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKLSAgICA6
IG1faWQoMCkKK1N0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUg
dHlwZSwgdW5zaWduZWQgcGFzcykKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9p
ZCgwKQogewogICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSA9Ci0gICAgICAgICAg
ICBWRVJURVhfU0hBREVSKAorICAgICAgICAgICAgU1RSSU5HSUZZKAogICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwogICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0
IGFfdGV4Q29vcmQ7CiAgICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29v
cmQ7CkBAIC0zOTYsOCArMzg5LDcgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZp
bHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAg
ICAgICk7CiAKICNkZWZpbmUgU1RBTkRBUkRfRklMVEVSKHguLi4pIFwKLSAgICAgICAgT0VTMl9Q
UkVDSVNJT05fREVGSU5JVElPTlNcCi0gICAgICAgIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFV
TFRfUFJFQ0lTSU9OXAorICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iXAogICAg
ICAgICAidmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7XG4iXAogICAgICAgICAidW5pZm9y
bSBoaWdocCBmbG9hdCB1X2Ftb3VudDtcbiJcCiAgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1
X3RleHR1cmU7XG4iXApAQCAtNDkwLDcgKzQ4Miw4IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBl
CiAgICAgICAgICk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpC
TFVSOgotICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IEZSQUdNRU5UX1NIQURFUigKKyAg
ICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVFJJTkdJRlkoCisgICAgICAgICAgICBwcmVj
aXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3Rl
eENvb3JkOwogICAgICAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzIgdV9ibHVyUmFkaXVzOwogICAg
ICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlOwpAQCAtNTIzLDcgKzUxNiw4IEBA
IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJh
dGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgIHN3aXRjaCAocGFzcykgewogICAgICAg
ICBjYXNlIDA6IHsKICAgICAgICAgICAgIC8vIEZpcnN0IHBhc3M6IGhvcml6b250YWwgYWxwaGEg
Ymx1ci4KLSAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gRlJBR01FTlRfU0hBREVS
KAorICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTVFJJTkdJRlkoCisgICAgICAg
ICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgICAgICAgICAgdmFyeWlu
ZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7CiAgICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZs
b2F0IHVfc2hhZG93Qmx1clJhZGl1czsKICAgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVj
MiB1X3NoYWRvd09mZnNldDsKQEAgLTU1Niw3ICs1NTAsOCBAQCBTdGFuZGFyZEZpbHRlclByb2dy
YW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUg
dHlwZQogICAgICAgICAgICAgfQogICAgICAgICBjYXNlIDE6IHsKICAgICAgICAgICAgIC8vIFNl
Y29uZCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBibHVyIGFuZCBjb21wb3NpdGUgd2l0aCBvcmlnaW4u
Ci0gICAgICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSA9IEZSQUdNRU5UX1NIQURFUigKKyAg
ICAgICAgICAgIGZyYWdtZW50U2hhZGVyU291cmNlID0gU1RSSU5HSUZZKAorICAgICAgICAgICAg
ICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICAgICAgICAgIHZhcnlpbmcgaGln
aHAgdmVjMiB2X3RleENvb3JkOwogICAgICAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1
X3NoYWRvd0JsdXJSYWRpdXM7CiAgICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzQgdV9z
aGFkb3dDb2xvcjsKQEAgLTYwMiwyNiArNTk3LDI1IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBl
CiAKICAgICBpZiAoIWZyYWdtZW50U2hhZGVyU291cmNlKQogICAgICAgICByZXR1cm47Ci0gICAg
R0x1aW50IHZlcnRleFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOwot
ICAgIEdMdWludCBmcmFnbWVudFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NI
QURFUik7Ci0gICAgZ2xTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAmdmVydGV4U2hhZGVy
U291cmNlLCAwKTsKLSAgICBnbFNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdt
ZW50U2hhZGVyU291cmNlLCAwKTsKLSAgICBHTHVpbnQgcHJvZ3JhbUlEID0gZ2xDcmVhdGVQcm9n
cmFtKCk7Ci0gICAgZ2xDb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7Ci0gICAgZ2xDb21waWxl
U2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRl
ciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hB
REVSKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYWdtZW50U2hhZGVyID0gbV9jb250ZXh0LT5j
cmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUik7CisgICAgbV9j
b250ZXh0LT5zaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCB2ZXJ0ZXhTaGFkZXJTb3VyY2UpOwor
ICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRl
clNvdXJjZSk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtSUQgPSBtX2NvbnRleHQtPmNy
ZWF0ZVByb2dyYW0oKTsKKyAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVy
KTsKKyAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOwogI2lmICFM
T0dfRElTQUJMRUQKLSAgICBHTGNoYXIgbG9nWzEwMF07Ci0gICAgR0xpbnQgbGVuOwotICAgIGds
R2V0U2hhZGVySW5mb0xvZyhmcmFnbWVudFNoYWRlciwgMTAwLCAmbGVuLCBsb2cpOworICAgIFN0
cmluZyBsb2c7CisgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKGZyYWdtZW50U2hhZGVy
KTsKICAgICBXVEZMb2coJkxvZ0NvbXBvc2l0aW5nLCAiJXNcbiIsIGxvZyk7CiAjZW5kaWYKLSAg
ICBnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRlcik7Ci0gICAgZ2xBdHRhY2hT
aGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcik7Ci0gICAgZ2xMaW5rUHJvZ3JhbShwcm9n
cmFtSUQpOworICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVydGV4U2hh
ZGVyKTsKKyAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hh
ZGVyKTsKKyAgICBtX2NvbnRleHQtPmxpbmtQcm9ncmFtKHByb2dyYW1JRCk7CiAKLSAgICBtX3Zl
cnRleEF0dHJpYiA9IGdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiYV92ZXJ0ZXgiKTsK
LSAgICBtX3RleENvb3JkQXR0cmliID0gZ2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJh
X3RleENvb3JkIik7Ci0gICAgbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uID0gZ2xHZXRVbmlmb3Jt
TG9jYXRpb24ocHJvZ3JhbUlELCAidV90ZXh0dXJlIik7CisgICAgbV92ZXJ0ZXhBdHRyaWIgPSBt
X2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdmVydGV4Iik7CisgICAg
bV90ZXhDb29yZEF0dHJpYiA9IG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlE
LCAiYV90ZXhDb29yZCIpOworICAgIG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4
dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfdGV4dHVyZSIpOwogICAgIHN3aXRj
aCAodHlwZSkgewogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6CiAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgpAQCAtNjMxLDIxICs2MjUsMjEgQEAgU3RhbmRhcmRG
aWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVy
YXRpb25UeXBlIHR5cGUKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246Ok9QQUNJVFk6Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQgPSBnbEdldFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2Ftb3VudCIpOworICAgICAgICBtX3VuaWZvcm1M
b2NhdGlvbnMuYW1vdW50ID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlE
LCAidV9hbW91bnQiKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkJMVVI6Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLnJhZGl1cyA9IGdsR2V0VW5p
Zm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfYmx1clJhZGl1cyIpOwotICAgICAgICBtX3VuaWZv
cm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktlcm5lbCA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW1JRCwgInVfZ2F1c3NpYW5LZXJuZWwiKTsKKyAgICAgICAgbV91bmlmb3JtTG9jYXRpb25z
LmJsdXIucmFkaXVzID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAi
dV9ibHVyUmFkaXVzIik7CisgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLmdhdXNzaWFu
S2VybmVsID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9nYXVz
c2lhbktlcm5lbCIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
RFJPUF9TSEFET1c6Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1
cyA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93Qmx1clJhZGl1cyIp
OwotICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsID0gZ2xH
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9nYXVzc2lhbktlcm5lbCIpOworICAgICAg
ICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMgPSBtX2NvbnRleHQtPmdldFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3NoYWRvd0JsdXJSYWRpdXMiKTsKKyAgICAgICAg
bV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCA9IG1fY29udGV4dC0+Z2V0
VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfZ2F1c3NpYW5LZXJuZWwiKTsKICAgICAgICAg
aWYgKCFwYXNzKQotICAgICAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5vZmZzZXQg
PSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3NoYWRvd09mZnNldCIpOworICAg
ICAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5vZmZzZXQgPSBtX2NvbnRleHQtPmdl
dFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3NoYWRvd09mZnNldCIpOwogICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0aGUgY29sb3IgYW5kIHRoZSBjb250
ZW50IHRleHR1cmUgaW4gdGhlIHNlY29uZCBwYXNzLCB0aGUgZmlyc3QgcGFzcyBpcyBvbmx5IGEg
aG9yaXpvbnRhbCBhbHBoYSBibHVyLgotICAgICAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNo
YWRvdy5jb2xvciA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93Q29s
b3IiKTsKLSAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29udGVudFRleHR1
cmUgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2NvbnRlbnRUZXh0dXJlIik7
CisgICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbG9yID0gbV9jb250ZXh0
LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dDb2xvciIpOworICAgICAg
ICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb250ZW50VGV4dHVyZSA9IG1fY29udGV4
dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfY29udGVudFRleHR1cmUiKTsKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtNjU2LDkgKzY1MCw5IEBA
IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJh
dGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgbV9mcmFnbWVudFNoYWRlciA9IGZyYWdtZW50
U2hhZGVyOwogfQogCi1QYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gU3RhbmRhcmRG
aWx0ZXJQcm9ncmFtOjpjcmVhdGUoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUs
IHVuc2lnbmVkIHBhc3MpCitQYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gU3RhbmRh
cmRGaWx0ZXJQcm9ncmFtOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEZpbHRl
ck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQogewotICAgIFJl
ZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IHByb2dyYW0gPSBhZG9wdFJlZihuZXcgU3RhbmRh
cmRGaWx0ZXJQcm9ncmFtKHR5cGUsIHBhc3MpKTsKKyAgICBSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQ
cm9ncmFtPiBwcm9ncmFtID0gYWRvcHRSZWYobmV3IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbShjb250
ZXh0LCB0eXBlLCBwYXNzKSk7CiAgICAgaWYgKCFwcm9ncmFtLT5tX2lkKQogICAgICAgICByZXR1
cm4gMDsKIApAQCAtNjk0LDIxICs2ODgsMjEgQEAgc3RhdGljIGZsb2F0KiBnYXVzc2lhbktlcm5l
bCgpCiAgICAgcmV0dXJuIGtlcm5lbDsKIH0KIAotdm9pZCBTdGFuZGFyZEZpbHRlclByb2dyYW06
OnByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHBhc3Ms
IGNvbnN0IEludFNpemUmIHNpemUsIEdMdWludCBjb250ZW50VGV4dHVyZSkKK3ZvaWQgU3RhbmRh
cmRGaWx0ZXJQcm9ncmFtOjpwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0aW9u
LCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEdWludCBjb250ZW50VGV4
dHVyZSkKIHsKLSAgICBnbFVzZVByb2dyYW0obV9pZCk7CisgICAgbV9jb250ZXh0LT51c2VQcm9n
cmFtKG1faWQpOwogICAgIHN3aXRjaCAob3BlcmF0aW9uLmdldE9wZXJhdGlvblR5cGUoKSkgewog
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6CiAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OlNFUElBOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKLSAgICAgICAgZ2xVbmlmb3JtMWYobV91
bmlmb3JtTG9jYXRpb25zLmFtb3VudCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJp
eEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOworICAgICAgICBtX2NvbnRl
eHQtPnVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuYW1vdW50LCBzdGF0aWNfY2FzdDxjb25z
dCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CiAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkNPTlRSQVNUOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgotICAgICAg
ICBnbFVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuYW1vdW50LCBzdGF0aWNfY2FzdDxjb25z
dCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91
bnQoKSk7CisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5h
bW91bnQsIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKICAgICAgICAgY29uc3QgQmx1ckZpbHRlck9wZXJhdGlv
biYgYmx1ciA9IHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRp
b24pOwpAQCAtNzIwLDggKzcxNCw4IEBAIHZvaWQgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpwcmVw
YXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0aW9uLCB1bnNpZ25lZCBwCiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIHJhZGl1cy5zZXRXaWR0aChmbG9hdFZhbHVlRm9yTGVuZ3RoKGJs
dXIuc3RkRGV2aWF0aW9uKCksIHNpemUud2lkdGgoKSkgLyBzaXplLndpZHRoKCkpOwogCi0gICAg
ICAgIGdsVW5pZm9ybTJmKG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLnJhZGl1cywgcmFkaXVzLndp
ZHRoKCksIHJhZGl1cy5oZWlnaHQoKSk7Ci0gICAgICAgIGdsVW5pZm9ybTFmdihtX3VuaWZvcm1M
b2NhdGlvbnMuYmx1ci5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgs
IGdhdXNzaWFuS2VybmVsKCkpOworICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX3VuaWZv
cm1Mb2NhdGlvbnMuYmx1ci5yYWRpdXMsIHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkp
OworICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobV91bmlmb3JtTG9jYXRpb25zLmJsdXIu
Z2F1c3NpYW5LZXJuZWwsIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5l
bCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpE
Uk9QX1NIQURPVzogewpAQCAtNzI5LDIwICs3MjMsMjAgQEAgdm9pZCBTdGFuZGFyZEZpbHRlclBy
b2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVk
IHAKICAgICAgICAgc3dpdGNoIChwYXNzKSB7CiAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAg
IC8vIEZpcnN0IHBhc3M6IHZlcnRpY2FsIGFscGhhIGJsdXIuCi0gICAgICAgICAgICBnbFVuaWZv
cm0yZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93Lm9mZnNldCwgZmxvYXQoc2hhZG93LmxvY2F0
aW9uKCkueCgpKSAvIGZsb2F0KHNpemUud2lkdGgoKSksIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigp
LnkoKSkgLyBmbG9hdChzaXplLmhlaWdodCgpKSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm0xZiht
X3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMsIHNoYWRvdy5zdGREZXZpYXRpb24o
KSAvIGZsb2F0KHNpemUud2lkdGgoKSkpOwotICAgICAgICAgICAgZ2xVbmlmb3JtMWZ2KG1fdW5p
Zm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwsIEdBVVNTSUFOX0tFUk5FTF9IQUxG
X1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9y
bTJmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cub2Zmc2V0LCBmbG9hdChzaGFkb3cubG9jYXRp
b24oKS54KCkpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCku
eSgpKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dW5p
Zm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1cywgc2hhZG93LnN0ZERl
dmlhdGlvbigpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSk7CisgICAgICAgICAgICBtX2NvbnRleHQt
PnVuaWZvcm0xZnYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCwgR0FV
U1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgIC8vIFNlY29uZCBwYXNzOiB3ZSBu
ZWVkIHRoZSBzaGFkb3cgY29sb3IgYW5kIHRoZSBjb250ZW50IHRleHR1cmUgZm9yIGNvbXBvc2l0
aW5nLgotICAgICAgICAgICAgZ2xVbmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5i
bHVyUmFkaXVzLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLmhlaWdodCgpKSk7
Ci0gICAgICAgICAgICBnbFVuaWZvcm0xZnYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5nYXVz
c2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkp
OwotICAgICAgICAgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKTsKLSAgICAgICAgICAg
IGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgY29udGVudFRleHR1cmUpOwotICAgICAgICAg
ICAgZ2xVbmlmb3JtMWkobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb250ZW50VGV4dHVyZSwg
MSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMu
c2hhZG93LmJsdXJSYWRpdXMsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVp
Z2h0KCkpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihtX3VuaWZvcm1Mb2Nh
dGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwg
Z2F1c3NpYW5LZXJuZWwoKSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbnRlbnRUZXh0dXJlKTsK
KyAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFk
b3cuY29udGVudFRleHR1cmUsIDEpOwogICAgICAgICAgICAgZmxvYXQgciwgZywgYiwgYTsKICAg
ICAgICAgICAgIHNoYWRvdy5jb2xvcigpLmdldFJHQkEociwgZywgYiwgYSk7Ci0gICAgICAgICAg
ICBnbFVuaWZvcm00ZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbG9yLCByLCBnLCBiLCBh
KTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKG1fdW5pZm9ybUxvY2F0aW9ucy5z
aGFkb3cuY29sb3IsIHIsIGcsIGIsIGEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CkBAIC03NTksNyArNzUzLDcgQEAgUGFzc1JlZlB0cjxTdGFuZGFyZEZp
bHRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJGb3JGaWx0
ZXIKICAgICBpbnQga2V5ID0gaW50KHR5cGUpIHwgKHBhc3MgPDwgMTYpOwogICAgIEZpbHRlck1h
cDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2ZpbHRlck1hcC5maW5kKGtleSk7CiAgICAgaWYgKGl0
ZXJhdG9yID09IG1fZmlsdGVyTWFwLmVuZCgpKSB7Ci0gICAgICAgIHByb2dyYW0gPSBTdGFuZGFy
ZEZpbHRlclByb2dyYW06OmNyZWF0ZSh0eXBlLCBwYXNzKTsKKyAgICAgICAgcHJvZ3JhbSA9IFN0
YW5kYXJkRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKG1fY29udGV4dCwgdHlwZSwgcGFzcyk7CiAgICAg
ICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgICAgIHJldHVybiAwOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCmluZGV4IDc4NTQ5OGUuLmJlNDVjNWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCkBAIC0yNCw5ICsyNCw5IEBACiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAKICNp
bmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2lu
Y2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKICNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTQ0LDM5ICs0NCw0MCBAQCBjbGFzcyBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gOiBw
dWJsaWMgUmVmQ291bnRlZDxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gewogcHVibGljOgot
ICAgIEdMdWludCBpZCgpIHsgcmV0dXJuIG1faWQ7IH0KLSAgICBHTHVpbnQgdmVydGV4QXR0cmli
KCkgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWI7IH0KKyAgICBQbGF0Zm9ybTNET2JqZWN0IGlkKCkg
eyByZXR1cm4gbV9pZDsgfQorICAgIEdDM0R1aW50IHZlcnRleEF0dHJpYigpIHsgcmV0dXJuIG1f
dmVydGV4QXR0cmliOyB9CiAKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb25zdCBj
aGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNl
KTsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCosIGNv
bnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJT
b3VyY2UpOwogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJl
KikgeyB9Ci0gICAgR0xpbnQgbWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hdHJp
eExvY2F0aW9uOyB9Ci0gICAgR0xpbnQgZmxpcExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9m
bGlwTG9jYXRpb247IH0KLSAgICBHTGludCB0ZXh0dXJlU2l6ZUxvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV90ZXh0dXJlU2l6ZUxvY2F0aW9uOyB9Ci0gICAgR0xpbnQgc291cmNlVGV4dHVyZUxv
Y2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VUZXh0dXJlTG9jYXRpb247IH0KLSAgICBH
TGludCBtYXNrVGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGV4dHVyZUxv
Y2F0aW9uOyB9Ci0gICAgR0xpbnQgb3BhY2l0eUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9v
cGFjaXR5TG9jYXRpb247IH0KKyAgICBHQzNEaW50IG1hdHJpeExvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXRyaXhMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgZmxpcExvY2F0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9mbGlwTG9jYXRpb247IH0KKyAgICBHQzNEaW50IHRleHR1cmVTaXplTG9j
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVTaXplTG9jYXRpb247IH0KKyAgICBHQzNE
aW50IHNvdXJjZVRleHR1cmVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlVGV4dHVy
ZUxvY2F0aW9uOyB9CisgICAgR0MzRGludCBtYXNrVGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXNrVGV4dHVyZUxvY2F0aW9uOyB9CisgICAgR0MzRGludCBvcGFjaXR5TG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHlMb2NhdGlvbjsgfQogCi0gICAgc3RhdGljIGJv
b2wgaXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihHTGludCBsb2NhdGlvbikgeyByZXR1cm4gbG9jYXRp
b24gPj0gMDsgfQorICAgIHN0YXRpYyBib29sIGlzVmFsaWRVbmlmb3JtTG9jYXRpb24oR0MzRGlu
dCBsb2NhdGlvbikgeyByZXR1cm4gbG9jYXRpb24gPj0gMDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAg
dm9pZCBnZXRVbmlmb3JtTG9jYXRpb24oR0xpbnQmIHZhciwgY29uc3QgY2hhciogbmFtZSk7Cisg
ICAgdm9pZCBnZXRVbmlmb3JtTG9jYXRpb24oR0MzRGludCYgdmFyLCBjb25zdCBjaGFyKiBuYW1l
KTsKICAgICB2b2lkIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAgdmlydHVhbCB2b2lkIGluaXRp
YWxpemUoKSB7IH0KICAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKSBjb25zdCB7
IHJldHVybiBtX3ZlcnRleFNoYWRlclNvdXJjZS5kYXRhKCk7IH0KICAgICBjb25zdCBjaGFyKiBm
cmFnbWVudFNoYWRlclNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UuZGF0YSgpOyB9CiAKLSAgICBHTHVpbnQgbV9pZDsKLSAgICBHTHVpbnQgbV92ZXJ0ZXhBdHRy
aWI7Ci0gICAgR0x1aW50IG1fdmVydGV4U2hhZGVyOwotICAgIEdMdWludCBtX2ZyYWdtZW50U2hh
ZGVyOwotICAgIEdMaW50IG1fbWF0cml4TG9jYXRpb247Ci0gICAgR0xpbnQgbV9mbGlwTG9jYXRp
b247Ci0gICAgR0xpbnQgbV90ZXh0dXJlU2l6ZUxvY2F0aW9uOwotICAgIEdMaW50IG1fc291cmNl
VGV4dHVyZUxvY2F0aW9uOwotICAgIEdMaW50IG1fb3BhY2l0eUxvY2F0aW9uOwotICAgIEdMaW50
IG1fbWFza1RleHR1cmVMb2NhdGlvbjsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0
OworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9pZDsKKyAgICBHQzNEdWludCBtX3ZlcnRleEF0dHJp
YjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVydGV4U2hhZGVyOworICAgIFBsYXRmb3JtM0RP
YmplY3QgbV9mcmFnbWVudFNoYWRlcjsKKyAgICBHQzNEaW50IG1fbWF0cml4TG9jYXRpb247Cisg
ICAgR0MzRGludCBtX2ZsaXBMb2NhdGlvbjsKKyAgICBHQzNEaW50IG1fdGV4dHVyZVNpemVMb2Nh
dGlvbjsKKyAgICBHQzNEaW50IG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOworICAgIEdDM0RpbnQg
bV9vcGFjaXR5TG9jYXRpb247CisgICAgR0MzRGludCBtX21hc2tUZXh0dXJlTG9jYXRpb247CiAK
IHByaXZhdGU6CiAgICAgQ1N0cmluZyBtX3ZlcnRleFNoYWRlclNvdXJjZTsKQEAgLTg3LDMzICs4
OCwzNiBAQCBwcml2YXRlOgogY2xhc3MgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtIDogcHVibGljIFJl
ZkNvdW50ZWQ8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKCk7Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmUoY29uc3Qg
RmlsdGVyT3BlcmF0aW9uJiwgdW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6ZSYsIEdMdWludCBj
b250ZW50VGV4dHVyZSk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9n
cmFtPiBjcmVhdGUoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBwYXNz
KTsKLSAgICBHTHVpbnQgdmVydGV4QXR0cmliKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhBdHRy
aWI7IH0KLSAgICBHTHVpbnQgdGV4Q29vcmRBdHRyaWIoKSBjb25zdCB7IHJldHVybiBtX3RleENv
b3JkQXR0cmliOyB9Ci0gICAgR0x1aW50IHRleHR1cmVVbmlmb3JtKCkgY29uc3QgeyByZXR1cm4g
bV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOyB9CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmUoY29u
c3QgRmlsdGVyT3BlcmF0aW9uJiwgdW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6ZSYsIEdDM0R1
aW50IGNvbnRlbnRUZXh0dXJlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRl
clByb2dyYW0+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCosIEZpbHRlck9wZXJhdGlvbjo6T3Bl
cmF0aW9uVHlwZSwgdW5zaWduZWQgcGFzcyk7CisgICAgR0MzRHVpbnQgdmVydGV4QXR0cmliKCkg
Y29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWI7IH0KKyAgICBHQzNEdWludCB0ZXhDb29yZEF0
dHJpYigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4Q29vcmRBdHRyaWI7IH0KKyAgICBHQzNEdWludCB0
ZXh0dXJlVW5pZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbjsg
fQorcHJvdGVjdGVkOgorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CiBwcml2YXRl
OgotICAgIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5
cGUsIHVuc2lnbmVkIHBhc3MpOwotICAgIEdMdWludCBtX2lkOwotICAgIEdMdWludCBtX3ZlcnRl
eFNoYWRlcjsKLSAgICBHTHVpbnQgbV9mcmFnbWVudFNoYWRlcjsKLSAgICBHTHVpbnQgbV92ZXJ0
ZXhBdHRyaWI7Ci0gICAgR0x1aW50IG1fdGV4Q29vcmRBdHRyaWI7Ci0gICAgR0x1aW50IG1fdGV4
dHVyZVVuaWZvcm1Mb2NhdGlvbjsKKyAgICBTdGFuZGFyZEZpbHRlclByb2dyYW0oKTsKKyAgICBT
dGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqLCBGaWx0ZXJPcGVyYXRpb246
Ok9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIHBhc3MpOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9p
ZDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVydGV4U2hhZGVyOworICAgIFBsYXRmb3JtM0RP
YmplY3QgbV9mcmFnbWVudFNoYWRlcjsKKyAgICBHQzNEdWludCBtX3ZlcnRleEF0dHJpYjsKKyAg
ICBHQzNEdWludCBtX3RleENvb3JkQXR0cmliOworICAgIEdDM0R1aW50IG1fdGV4dHVyZVVuaWZv
cm1Mb2NhdGlvbjsKICAgICB1bmlvbiB7Ci0gICAgICAgIEdMdWludCBhbW91bnQ7CisgICAgICAg
IEdDM0R1aW50IGFtb3VudDsKIAogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0x1aW50
IHJhZGl1czsKLSAgICAgICAgICAgIEdMdWludCBnYXVzc2lhbktlcm5lbDsKKyAgICAgICAgICAg
IEdDM0R1aW50IHJhZGl1czsKKyAgICAgICAgICAgIEdDM0R1aW50IGdhdXNzaWFuS2VybmVsOwog
ICAgICAgICB9IGJsdXI7CiAKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIEdMdWludCBi
bHVyUmFkaXVzOwotICAgICAgICAgICAgR0x1aW50IGNvbG9yOwotICAgICAgICAgICAgR0x1aW50
IG9mZnNldDsKLSAgICAgICAgICAgIEdMdWludCBjb250ZW50VGV4dHVyZTsKLSAgICAgICAgICAg
IEdMdWludCBnYXVzc2lhbktlcm5lbDsKKyAgICAgICAgICAgIEdDM0R1aW50IGJsdXJSYWRpdXM7
CisgICAgICAgICAgICBHQzNEdWludCBjb2xvcjsKKyAgICAgICAgICAgIEdDM0R1aW50IG9mZnNl
dDsKKyAgICAgICAgICAgIEdDM0R1aW50IGNvbnRlbnRUZXh0dXJlOworICAgICAgICAgICAgR0Mz
RHVpbnQgZ2F1c3NpYW5LZXJuZWw7CiAgICAgICAgIH0gc2hhZG93OwogICAgIH0gbV91bmlmb3Jt
TG9jYXRpb25zOwogfTsKQEAgLTEyMSw3NyArMTI1LDg5IEBAIHByaXZhdGU6CiAKIGNsYXNzIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVNpbXBsZT4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZT4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVNpbXBsZSgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZShjb250ZXh0KSk7CiAgICAgfQogCiBwcm90ZWN0
ZWQ6CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoR3JhcGhpY3NDb250ZXh0
M0QqKTsKK3ByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKTsK
IH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSA6IHB1Ymxp
YyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlPiBjcmVhdGUoKQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZT4g
Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0
U2ltcGxlKGNvbnRleHQpKTsKICAgICB9CiAKK3Byb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoR3JhcGhpY3NDb250ZXh0M0QqKTsKIHByaXZhdGU6CiAg
ICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKCk7CiB9OwogCiBjbGFzcyBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrIDogcHVibGljIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrPiBjcmVhdGUoKQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s+IGNy
ZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9w
YWNpdHlBbmRNYXNrKGNvbnRleHQpKTsKICAgICB9CiAKK3Byb3RlY3RlZDoKKyAgICBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKEdyYXBoaWNzQ29udGV4dDNEKik7CiBw
cml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKTsK
IH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNr
IDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFz
az4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVJlY3RPcGFjaXR5QW5kTWFzaz4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaygpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayhjb250ZXh0KSk7
CiAgICAgfQogCitwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0
T3BhY2l0eUFuZE1hc2soR3JhcGhpY3NDb250ZXh0M0QqKTsKIHByaXZhdGU6CiAgICAgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soKTsKIH07CiAKIGNsYXNzIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4gY3JlYXRlKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKGNvbnRleHQp
KTsKICAgICB9CiAKLSAgICBHTGludCBjb2xvckxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xvckxvY2F0aW9uOyB9CisgICAgR0MzRGludCBjb2xvckxvY2F0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xvckxvY2F0aW9uOyB9CiAKK3Byb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNvbGlkQ29sb3IoR3JhcGhpY3NDb250ZXh0M0QqKTsKIHByaXZhdGU6CiAgICAg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKCk7Ci0gICAgR0xpbnQgbV9jb2xv
ckxvY2F0aW9uOworICAgIEdDM0RpbnQgbV9jb2xvckxvY2F0aW9uOwogfTsKIAogY2xhc3MgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2sgOiBwdWJsaWMgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrPiBjcmVhdGUoKQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5n
Tm9NYXNrPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFz
aW5nTm9NYXNrKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKGNvbnRleHQpKTsKICAgICB9CiAKLSAgICBH
TGludCBleHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvb3JkaW5hdGVzTG9jYXRpb24oKSB7
IHJldHVybiBtX2V4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29yZGluYXRlc0xvY2F0aW9u
OyB9Ci0gICAgR0xpbnQgZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSB7
IHJldHVybiBtX2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uOyB9CisgICAg
R0MzRGludCBleHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvb3JkaW5hdGVzTG9jYXRpb24o
KSB7IHJldHVybiBtX2V4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29yZGluYXRlc0xvY2F0
aW9uOyB9CisgICAgR0MzRGludCBleHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlv
bigpIHsgcmV0dXJuIG1fZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb247IH0K
IAorcHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5n
Tm9NYXNrKEdyYXBoaWNzQ29udGV4dDNEKik7CiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKCk7CiAKLSAgICBHTGludCBtX2V4cGFuZGVk
UXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29yZGluYXRlc0xvY2F0aW9uOwotICAgIEdMaW50IG1fZXhw
YW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb247CisgICAgR0MzRGludCBtX2V4cGFu
ZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29yZGluYXRlc0xvY2F0aW9uOworICAgIEdDM0RpbnQg
bV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbjsKIH07CiAKIGNsYXNzIFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHsKQEAgLTIwNiw3ICsyMjIsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIFNvbGlkQ29sb3IKICAgICB9OwogCi0gICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIoKTsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpIHsgfTsKKyAgICBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcihHcmFwaGljc0NvbnRleHQzRCopOwogICAgIHZpcnR1YWwgflRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCk7CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCkBA
IC0yMjEsMTIgKzIzOCwxMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1h
cDxTaGFkZXJUeXBlLCBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+LCBEZWZhdWx0
SGFzaDxpbnQ+OjpIYXNoLCBIYXNoVHJhaXRzPGludD4gPiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbU1hcDsKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcCBtX3RleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtTWFwOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CiAK
ICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRy
PFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gPiBGaWx0ZXJNYXA7CiAgICAgRmlsdGVyTWFwIG1fZmls
dGVyTWFwOwogI2VuZGlmCi0KIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159896</attachid>
            <date>2012-08-22 03:55:12 -0700</date>
            <delta_ts>2012-08-24 14:06:18 -0700</delta_ts>
            <desc>patch</desc>
            <filename>updated.diff</filename>
            <type>text/plain</type>
            <size>117823</size>
            <attacher name="Roland Takacs">rtakacs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0MWM1Yzk0Li5mMjNjMjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjY2
IEBACisyMDEyLTA4LTIyICBIZWxkZXIgQ29ycmVpYSAgPGhlbGRlci5jb3JyZWlhQG5va2lhLmNv
bT4sIFJvbGFuZCBUYWthY3MgIDxydGFrYWNzQGluZi51LXN6ZWdlZC5odT4KKworICAgICAgICBb
VGV4bWFwXSBNb3ZlIFRleHR1cmVNYXBwZXJHTCB0byB1c2UgR3JhcGhpY3NDb250ZXh0M0QKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NjcyCisKKyAg
ICAgICAgSXQgaXMgYmFzZWQgb24gYSBwcmV2aW91cyBwYXRjaCBieSBIZWxkZXIgQ29ycmVpYS4K
KworICAgICAgICBUZXh0dXJlTWFwcGVyR0wgKFRNR0wpIGluY2x1ZGVzIGRpcmVjdCBHTCBjYWxs
cyBhbmQKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QgKEdDM0QpIG9mZmVycyBtYW55IGNvbnZl
bmllbmNlcyBvdmVyIHRoZQorICAgICAgICBmb3JtZXIgYXBwcm9hY2g6IHVzaW5nIGV4aXN0aW5n
IENTUyBzaGFkZXIgY29kZSwgQU5HTEUgZm9yCisgICAgICAgIHNoYWRlciBjb21waWxhdGlvbiwg
cmV1c2luZyBXZWJDb3JlOjpUZXh0dXJlLCBoYXZpbmcgc2hhZGVycyBhbmQKKyAgICAgICAgdGV4
dHVyZXMgdGhhdCBjYW4gZGVsZXRlIHRoZW1zZWx2ZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBj
aGFuZ2VzIHRoZSBiYWNrZW5kIG9mIFRNR0wgdG8gR0MzRC4gSXQgd2FzIGluaXRpYWxseQorICAg
ICAgICB0aG91Z2h0IHRvIGludHJvZHVjZSBhIG5ldyBiYWNrZW5kIChzYXksIFRleHR1cmVNYXBw
ZXJHQzNEKSwgYnV0CisgICAgICAgIGluIHRoZSBlbmQgaXQgd2FzIGFncmVlZCB0byBjb25zb2xp
ZGF0ZSBpdCBpbnNpZGUgVE1HTCBpbnN0ZWFkLAorICAgICAgICBhcyBhbiBhZGRpdGlvbmFsIFRl
eHR1cmVNYXBwZXIgc3ViY2xhc3Mgd291bGQgZ2V0IHN0YWxlIHZlcnkKKyAgICAgICAgcXVpY2ts
eS4KKworICAgICAgICBBIEdDM0Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgVE1HTCB3aXRoIHRoZSBu
ZXdseSBpbnRyb2R1Y2VkCisgICAgICAgIGJ1aWxkZXIgY3JlYXRlRm9yQ3VycmVudEdMQ29udGV4
dCgpLCB3aGljaCBpbiB0dXJuIHVzZXMKKyAgICAgICAgdGhlIG5ldyBSZW5kZXJUb0N1cnJlbnRH
TENvbnRleHQgZmxhZyB1bmRlcm5lYXRoLgorCisgICAgICAgIFRNR0wncyBkZXBlbmRlbmN5IG9u
IE9wZW5HTFNoaW1zLmggd2FzIGNvbXBsZXRlbHkgcmVtb3ZlZC4KKyAgICAgICAgSG93ZXZlciwg
R0MzRCBkb2VzIG5vdCBtYXAgZXZlcnkgc2luZ2xlIEdMIGNvbnN0YW50LiBUaHVzLCBpdCdzCisg
ICAgICAgIGltcG9ydGFudCB0byBkb2N1bWVudCB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAg
LSBHTF9GQUxTRSB3YXMgbWFwcGVkIHRvIGZhbHNlLgorICAgICAgICAgICAgLSBHTF9VTlBBQ0tf
Uk9XX0xFTkdUSCwgR0xfVU5QQUNLX1NLSVBfUElYRUxTLAorICAgICAgICAgICAgR0xfVU5QQUNL
X1NLSVBfUk9XUywgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBhbmQKKyAgICAgICAgICAgIEdM
X1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViB3ZXJlIGxvY2FsbHkgZGVmaW5lZCBpbiBUTUdMLgor
CisgICAgICAgIFRoZSBwYXRjaCB3YXMgb3JpZ2luYWxseSBkZXZlbG9wZWQgYnkgSGVsZGVyIENv
cnJlaWEgYW5kIGZpbmlzaGVkCisgICAgICAgIGJ5IFJvbGFuZCBUYWthY3MuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLCByZWZhY3RvcmluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRm
b3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250
ZXh0RnJvbVdlYkNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmg6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJsYWNrQmVycnkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRm9yQ3VycmVudEdMQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojp0ZXhJbWFnZTJERGlyZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRFByaXZh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpjcmVhdGVPZmZzY3JlZW5CdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppbml0aWFsaXplQU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29u
dGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4
dEN1cnJlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0wuY3BwOgorICAgICAgICAoU2hhcmVkR0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6Y3VycmVudFNoYXJlZEdMRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OlNoYXJl
ZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpzaGFyZWRH
TERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6VGV4dHVyZU1h
cHBlckdMRGF0YSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyR0xEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OnNjaXNzb3JDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6
Q2xpcFN0YWNrOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRh
Ojppbml0aWFsaXplU3RlbmNpbCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6
OlRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJl
Z2luUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjplbmRQYWlu
dGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdRdWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcik6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVS
ZWN0YW5nbGVBUkIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjp2aWV3cG9ydE1hdHJpeCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3Jh
bSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmRpZFJlc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwVGV4dHVyZUdMOjppbml0aWFsaXplU3RlbmNpbCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBUZXh0dXJlR0w6OmNsZWFySWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwVGV4dHVyZUdMOjpjcmVhdGVGYm9JZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlR0w6OmJpbmQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjp+
Qml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Ymlu
ZERlZmF1bHRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YmVn
aW5TY2lzc29yQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2lu
Q2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmVuZENsaXApOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmg6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFRl
eHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChDbGlwU3RhY2spOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwVGV4dHVyZUdMOjp0ZXh0dXJlVGFyZ2V0KToKKyAgICAgICAgKEJpdG1hcFRleHR1cmVH
TCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OkJpdG1hcFRleHR1cmVHTCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppbml0aWFs
aXplUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU2ltcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbUFudGlhbGlhc2luZ05vTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp+U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6cHJlcGFyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyRm9yRmls
dGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6
dmVydGV4QXR0cmliKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjptYXRyaXhMb2NhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6ZmxpcExv
Y2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp0
ZXh0dXJlU2l6ZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpzb3VyY2VUZXh0dXJlTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW06Om1hc2tUZXh0dXJlTG9jYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Om9wYWNpdHlMb2NhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZv
cm1Mb2NhdGlvbik6CisgICAgICAgIChTdGFuZGFyZEZpbHRlclByb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp2ZXJ0ZXhBdHRyaWIpOgorICAgICAgICAo
V2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp0ZXhDb29yZEF0dHJpYik6CisgICAgICAg
IChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dyYW06OnRleHR1cmVVbmlmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpjcmVhdGUpOgor
ICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpjcmVhdGUpOgorICAg
ICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OmNyZWF0ZSk6
CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRN
YXNrOjpjcmVhdGUpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3Bh
Y2l0eUFuZE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1Tb2xpZENvbG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1Tb2xpZENvbG9yOjpjb2xvckxvY2F0aW9uKToKKyAgICAgICAgKFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpl
eHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvb3JkaW5hdGVzTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6
OmV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uKToKKyAgICAgICAgKFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cik6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisKKzIwMTItMDgtMjIg
IEhlbGRlciBDb3JyZWlhICA8aGVsZGVyLmNvcnJlaWFAbm9raWEuY29tPiwgUm9sYW5kIFRha2Fj
cyAgPHJ0YWthY3NAaW5mLnUtc3plZ2VkLmh1PgorCisgICAgICAgIFtUZXhtYXBdIE1vdmUgVGV4
dHVyZU1hcHBlckdMIHRvIHVzZSBHcmFwaGljc0NvbnRleHQzRAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2NzIKKworICAgICAgICBJdCBpcyBiYXNl
ZCBvbiBhIHByZXZpb3VzIHBhdGNoIGJ5IEhlbGRlciBDb3JyZWlhLgorCisgICAgICAgIFRoaXMg
aXMgcGFydCBvZiBhIHNldmVyYWwgcGF0Y2gtcmVmYWN0b3JpbmcuCisKKyAgICAgICAgSW50cm9k
dWNlIGFkZGl0aW9uYWwgbG9naWMgaW4gR3JhcGhpY3NDb250ZXh0M0RRdCB0byBzdXBwb3J0IGEK
KyAgICAgICAgbmV3IFJlbmRlclRvQ3VycmVudEdMQ29udGV4dCBSZW5kZXJTdHlsZS4gVGhpcyBp
cyBuZWNlc3NhcnkgdG8KKyAgICAgICAgdXNlIEdDM0QgZm9yIG90aGVyIHRoaW5ncyB0aGFuIFdl
YkdMLCBsaWtlIFRleHR1cmVNYXBwZXIuCisKKyAgICAgICAgVGhlIEdDM0QgY29uc3RydWN0b3Ig
bm93IGFjY2VwdHMgYSBSZW5kZXJTdHlsZSBpbnN0ZWFkIG9mIHRoZQorICAgICAgICBib29sZWFu
IHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93IGFuZCB0aHVzIG1pbWljcyBjcmVhdGUoKSdzCisg
ICAgICAgIHNpZ25hdHVyZS4gVGhpcyBoYXMgYmVlbiBjaGFuZ2VkIGZvciBhbGwgcG9ydHMgaW4g
dGhpcyBwYXRjaC4KKworICAgICAgICBBIG5ldyBHQzNEOjpjcmVhdGVGb3JDdXJyZW50R0xDb250
ZXh0KCkgYnVpbGRlciB3YXMKKyAgICAgICAgaW50cm9kdWNlZCB0byBiZXR0ZXIgYWJzdHJhY3Qg
dGhlIGdvYWwgb2YgdXNpbmcgR0MzRCB3aXRoIHRoZQorICAgICAgICBjdXJyZW50IGNvbnRleHQu
CisKKyAgICAgICAgVGhlIHBhdGNoIHdhcyBvcmlnaW5hbGx5IGRldmVsb3BlZCBieSBIZWxkZXIg
Q29ycmVpYSBhbmQgZmluaXNoZWQKKyAgICAgICAgYnkgUm9sYW5kIFRha2Fjcy4KKworICAgICAg
ICBObyBuZXcgdGVzdHMsIHJlZmFjdG9yaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0vc3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxh
dGZvcm0vY2hyb21pdW0vc3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0Nv
bnRleHRGcm9tV2ViQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaDoKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4dDNEQmxhY2tCZXJyeS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGb3JDdXJyZW50R0xDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnRleEltYWdlMkREaXJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmNyZWF0ZU9mZnNjcmVlbkJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmluaXRpYWxpemVBTkdM
RSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6On5HcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3ND
b250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250
ZXh0Q3VycmVudCk6CisKKzIwMTItMDgtMjIgIEhlbGRlciBDb3JyZWlhICA8aGVsZGVyLmNvcnJl
aWFAbm9raWEuY29tPiwgUm9sYW5kIFRha2FjcyAgPHJ0YWthY3NAaW5mLnUtc3plZ2VkLmh1Pgor
CisgICAgICAgIFtUZXhtYXBdIE1vdmUgVGV4dHVyZU1hcHBlckdMIHRvIHVzZSBHcmFwaGljc0Nv
bnRleHQzRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Nzg2NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bnRyb2R1Y2luZyBhIG5ldyBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRERpcmVjdCgpIHRv
IGFsbG93CisgICAgICAgIGluaXRpYWxpemF0aW9uIG9mIHRleHR1cmVzIHdpdGhvdXQgYWxsb2Nh
dGlvbi4gVGhlIGV4aXN0aW5nCisgICAgICAgIHRleHRJbWFnZTJEKCkgcmVmdXNlcyBhIG51bGwg
cGl4ZWwgYnVmZmVyLCBhbmQKKyAgICAgICAgdGV4SW1hZ2UyRFJlc291cmNlU2FmZSgpIGFsbG93
cyBpdCBidXQgcGVyZm9ybXMgbWVtb3J5CisgICAgICAgIGFsbG9jYXRpb24gYW5kIHplcm9lcyB0
aGUgYml0cy4gVGhpcyB3YXMgbm90IGZhc3QgZW5vdWdoIGZvcgorICAgICAgICBCaXRtYXBUZXh0
dXJlR0wgZnJlcXVlbnQgc2V0dGluZyB1cC4KKworICAgICAgICBUaGUgcGF0Y2ggd2FzIG9yaWdp
bmFsbHkgZGV2ZWxvcGVkIGJ5IEhlbGRlciBDb3JyZWlhIGFuZCBmaW5pc2hlZAorICAgICAgICBi
eSBSb2xhbmQgVGFrYWNzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgcmVmYWN0b3JpbmcuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAg
ICAoR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJERGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTEVTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFn
ZTJEKToKKwogMjAxMi0wOC0yMiAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tp
YS5jb20+CiAKICAgICAgICAgW1F0XSBSRUdSRVNTSU9OKHIxMjU0MjgpOiBmYXN0L3Byb2ZpbGVy
L25lc3RlZC1zdGFydC1hbmQtc3RvcC1wcm9maWxlci5odG1sIGZhaWxzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0dyYXBoaWNzQ29udGV4dDNE
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9H
cmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAppbmRleCAxMjdmY2ZhLi5mOGU0NmQ4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0dyYXBoaWNz
Q29udGV4dDNEQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKQEAgLTQzLDcgKzQzLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3ND
b250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBib29s
KQorR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxl
KQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9z
dXBwb3J0L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKaW5kZXgg
ZjZiNzMwZC4uMGQ1NzFiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vc3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
LmNwcApAQCAtNzcsNyArNzcsNyBAQCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6On5HcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUoKQogCiBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0
KFBhc3NPd25QdHI8V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRD4gd2ViQ29udGV4dCwgYm9v
bCBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIpCiB7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzKCksIDAsIGZhbHNlIC8qIG9uc2NyZWVuICovKSk7CisgICAgUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4
dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKCksIDApKTsKIAogICAgIE93blB0cjxH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU+IHByaXYgPSBhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlKHdlYkNvbnRleHQsIHByZXNlcnZlRHJhd2luZ0J1ZmZlcikpOwogICAgIGNv
bnRleHQtPm1fcHJpdmF0ZSA9IHByaXYucmVsZWFzZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggZjVlNmYxZi4u
YjJlNmE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oCkBAIC0yNTAsNiArMjUwLDcgQEAgcHVibGljOgogICAgICAgICBB
TFBIQSA9IDB4MTkwNiwKICAgICAgICAgUkdCID0gMHgxOTA3LAogICAgICAgICBSR0JBID0gMHgx
OTA4LAorICAgICAgICBCR1JBID0gMHg4MEUxLAogICAgICAgICBMVU1JTkFOQ0UgPSAweDE5MDks
CiAgICAgICAgIExVTUlOQU5DRV9BTFBIQSA9IDB4MTkwQSwKICAgICAgICAgVU5TSUdORURfU0hP
UlRfNF80XzRfNCA9IDB4ODAzMywKQEAgLTQ1OCw3ICs0NTksOCBAQCBwdWJsaWM6CiAKICAgICBl
bnVtIFJlbmRlclN0eWxlIHsKICAgICAgICAgUmVuZGVyT2Zmc2NyZWVuLAotICAgICAgICBSZW5k
ZXJEaXJlY3RseVRvSG9zdFdpbmRvdworICAgICAgICBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRv
dywKKyAgICAgICAgUmVuZGVyVG9DdXJyZW50R0xDb250ZXh0CiAgICAgfTsKIAogICAgIGNsYXNz
IENvbnRleHRMb3N0Q2FsbGJhY2sgewpAQCAtNDc3LDYgKzQ3OSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldEVycm9yTWVzc2FnZUNhbGxiYWNrKFBhc3NPd25QdHI8RXJyb3JNZXNzYWdlQ2FsbGJh
Y2s+KTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGUo
QXR0cmlidXRlcywgSG9zdFdpbmRvdyosIFJlbmRlclN0eWxlID0gUmVuZGVyT2Zmc2NyZWVuKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlRm9yQ3VycmVu
dEdMQ29udGV4dCgpOwogICAgIH5HcmFwaGljc0NvbnRleHQzRCgpOwogCiAjaWYgUExBVEZPUk0o
TUFDKQpAQCAtNTI0LDYgKzUyNyw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHByZXBhcmVUZXh0dXJl
KCk7CiAjZW5kaWYKIAorICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxs
b3dzIHBpeGVscz09MCB3aXRoIG5vIGFsbG9jYXRpb24uCisgICAgdm9pZCB0ZXhJbWFnZTJERGly
ZWN0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKKwogICAg
IC8vIEhlbHBlciB0byB0ZXhJbWFnZTJEIHdpdGggcGl4ZWw9PTAgY2FzZTogcGl4ZWxzIGFyZSBp
bml0aWFsaXplZCB0byAwLgogICAgIC8vIFJldHVybiB0cnVlIGlmIG5vIEdMIGVycm9yIGlzIHN5
bnRoZXNpemVkLgogICAgIC8vIEJ5IGRlZmF1bHQsIGFsaWdubWVudCBpcyA0LCB0aGUgT3BlbkdM
IGRlZmF1bHQgc2V0dGluZy4KQEAgLTg2Nyw3ICs4NzMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IHVuc2lnbmVkIGdldENoYW5uZWxCaXRzQnlGb3JtYXQoR0MzRGVudW0pOwogCiAgIHByaXZhdGU6
Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QoQXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdywgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgR3JhcGhpY3ND
b250ZXh0M0QoQXR0cmlidXRlcywgSG9zdFdpbmRvdyosIFJlbmRlclN0eWxlID0gUmVuZGVyT2Zm
c2NyZWVuKTsKIAogICAgIC8vIEVhY2ggcGxhdGZvcm0gbXVzdCBwcm92aWRlIGFuIGltcGxlbWVu
dGF0aW9uIG9mIHRoaXMgbWV0aG9kLgogICAgIC8vCkBAIC05ODIsNiArOTg4LDcgQEAgcHVibGlj
OgogICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb247CiAKICAgICBBdHRy
aWJ1dGVzIG1fYXR0cnM7CisgICAgUmVuZGVyU3R5bGUgbV9yZW5kZXJTdHlsZTsKICAgICBWZWN0
b3I8VmVjdG9yPGZsb2F0PiA+IG1fdmVydGV4QXJyYXk7CiAKICAgICBHQzNEdWludCBtX3RleHR1
cmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0dyYXBoaWNzQ29udGV4dDNEQmxhY2tCZXJyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4dDNEQmxhY2tCZXJyeS5jcHAK
aW5kZXggZjEwODFlZi4uZDMwMDJjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJsYWNrQmVycnkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3ND
b250ZXh0M0RCbGFja0JlcnJ5LmNwcApAQCAtNDcsMTAgKzQ3LDEwIEBAIFBhc3NSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoQXR0cmlidXRlcyBhdHRy
aWJzLCBIb3N0CiAgICAgaWYgKHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVjdGx5VG9Ib3N0V2lu
ZG93KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgR3JhcGhp
Y3NDb250ZXh0M0QoYXR0cmlicywgaG9zdFdpbmRvdywgZmFsc2UpKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJpYnMsIGhvc3RXaW5kb3csIHJlbmRlclN0
eWxlKSk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGlj
c0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyosIGJvb2wgcmVuZGVyRGly
ZWN0bHlUb0hvc3RXaW5kb3cpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0Qo
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqLCBHcmFwaGlj
c0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiAgICAgOiBtX2N1cnJlbnRXaWR0
aCgwKQogICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCiAgICAgLCBtX2NvbnRleHQoQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkdyYXBoaWNzOjpjcmVhdGVXZWJHTENvbnRleHQoKSkKQEAgLTY3LDcgKzY3
LDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICAsIG1fYm91bmRUZXh0dXJlMCgwKQog
ICAgICwgbV9pc0ltYWdpbmF0aW9uSGFyZHdhcmUoMCkKIHsKLSAgICBpZiAoIXJlbmRlckRpcmVj
dGx5VG9Ib3N0V2luZG93KSB7CisgICAgaWYgKHJlbmRlclN0eWxlICE9IFJlbmRlckRpcmVjdGx5
VG9Ib3N0V2luZG93KSB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgICAg
ICBtX2NvbXBvc2l0aW5nTGF5ZXIgPSBXZWJHTExheWVyV2ViS2l0VGhyZWFkOjpjcmVhdGUoKTsK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAppbmRleCA5ODIyZDRlLi42
NGEyZmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcApAQCAtNjEsMTEgKzYx
LDExIEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpCiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAg
ICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFk
b3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRyaWJ1dGVzLCBob3N0V2luZG93LCBmYWxz
ZSkpOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5l
dyBHcmFwaGljc0NvbnRleHQzRChhdHRyaWJ1dGVzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkp
OwogICAgIHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0M0Q6
OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0
ZXMsIEhvc3RXaW5kb3cqLCBib29sKQorR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4
dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cq
LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUpCiAgICAgOiBtX2N1cnJlbnRXaWR0aCgw
KQogICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCiAgICAgLCBtX2F0dHJzKGF0dHJpYnV0ZXMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBo
aWNzQ29udGV4dDNEQ2x1dHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHAKaW5kZXggNGI0YjBlMy4uYWJm
YmQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRl
ci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcApAQCAtNDIs
MTEgKzQyLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0
cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRl
eHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiB7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJpYnV0
ZXMsIGhvc3RXaW5kb3csIGZhbHNlKSk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
b250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJpYnV0ZXMsIGhvc3RX
aW5kb3csIHJlbmRlclN0eWxlKSk7CiAgICAgcmV0dXJuIGNvbnRleHQucmVsZWFzZSgpOwogfQog
Ci1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCkKK0dy
YXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0
cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRl
eHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFw
aGljc0NvbnRleHQzREVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9l
ZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCmluZGV4IGVmZTFhMTIuLjcyMWQ3YzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRl
eHQzREVmbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dy
YXBoaWNzQ29udGV4dDNERWZsLmNwcApAQCAtMzYsMTIgKzM2LDEyIEBAIFBhc3NSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0
M0Q6OkF0dHJpCiAgICAgaWYgKCFpbnRlcm5hbCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3ND
b250ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3csIHJlbmRlckRpcmVjdGx5VG9FdmFzR0xPYmplY3Qp
KTsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcg
R3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSk7CiAgICAg
Y29udGV4dC0+bV9wcml2YXRlID0gaW50ZXJuYWwucmVsZWFzZSgpOwogICAgIHJldHVybiBjb250
ZXh0LnJlbGVhc2UoKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNE
KEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2lu
ZG93LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQorR3JhcGhpY3NDb250ZXh0M0Q6
OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBI
b3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVu
ZGVyU3R5bGUpCiAgICAgOiBtX2N1cnJlbnRXaWR0aCgwKQogICAgICwgbV9jdXJyZW50SGVpZ2h0
KDApCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
R3JhcGhpY3NDb250ZXh0M0RNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0KaW5kZXggZDA0MmM2Ni4uMDBlODMxMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29u
dGV4dDNETWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9H
cmFwaGljc0NvbnRleHQzRE1hYy5tbQpAQCAtOTgsMTEgKzk4LDExIEBAIFBhc3NSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0
M0Q6OkF0dHJpCiAgICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IGN1cnJlbnRseSBz
dXBwb3J0IHJlbmRlcmluZyBkaXJlY3RseSB0byB0aGUgSG9zdFdpbmRvdy4KICAgICBpZiAocmVu
ZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCiAgICAgICAgIHJldHVybiAw
OwotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBH
cmFwaGljc0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRvdywgZmFsc2UpKTsKKyAgICBSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0
M0QoYXR0cnMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSk7CiAgICAgcmV0dXJuIGNvbnRleHQt
Pm1fY29udGV4dE9iaiA/IGNvbnRleHQucmVsZWFzZSgpIDogMDsKIH0KIAotR3JhcGhpY3NDb250
ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0
dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sKQorR3JhcGhpY3NDb250ZXh0M0Q6Okdy
YXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0
V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVy
U3R5bGUpCiAgICAgOiBtX2N1cnJlbnRXaWR0aCgwKQogICAgICwgbV9jdXJyZW50SGVpZ2h0KDAp
CiAgICAgLCBtX2NvbnRleHRPYmooMCkKQEAgLTEyMiw2ICsxMjIsNyBAQCBHcmFwaGljc0NvbnRl
eHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0
cnMsIEhvc3RXaQogICAgICwgbV9wcml2YXRlKGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGUodGhpcykpKQogewogICAgIFVOVVNFRF9QQVJBTShob3N0V2luZG93KTsKKyAgICBV
TlVTRURfUEFSQU0ocmVuZGVyU3R5bGUpOwogCiAgICAgVmVjdG9yPENHTFBpeGVsRm9ybWF0QXR0
cmlidXRlPiBhdHRyaWJzOwogICAgIENHTFBpeGVsRm9ybWF0T2JqIHBpeGVsRm9ybWF0T2JqID0g
MDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCmluZGV4IGZkNDUwMTQuLjk4
ZTExNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcApAQCAtMjU2LDcg
KzI1Niw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlCiAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKElOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworCiAgICAgR0MzRGVudW0gb3BlbkdMSW50ZXJuYWxGb3JtYXQg
PSBpbnRlcm5hbGZvcm1hdDsKICAgICBpZiAodHlwZSA9PSBHTF9GTE9BVCkgewogICAgICAgICBp
ZiAoZm9ybWF0ID09IEdMX1JHQkEpCkBAIC0yNjUsNyArMjY1LDcgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGUKICAgICAgICAgICAgIG9wZW5HTEludGVybmFsRm9ybWF0ID0gR0xfUkdCMzJGX0FS
QjsKICAgICB9CiAKLSAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBvcGVuR0xJbnRl
cm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7
CisgICAgdGV4SW1hZ2UyRERpcmVjdCh0YXJnZXQsIGxldmVsLCBvcGVuR0xJbnRlcm5hbEZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwCmluZGV4IGUwYzJkNmUuLjc3MmNhODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApAQCAtNzAsNiArNzAsMTIgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlRm9yQ3VycmVudEdMQ29udGV4dCgpCit7CisgICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKEF0dHJp
YnV0ZXMoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclRvQ3VycmVudEdMQ29udGV4dCkp
OworICAgIHJldHVybiBjb250ZXh0LT5tX3ByaXZhdGUgPyBjb250ZXh0LnJlbGVhc2UoKSA6IDA7
Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0
IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikKIHsKICAgICBFeHRlbnNpb25zM0Qq
IGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7CkBAIC0xMzc0LDYgKzEzODAsMTIgQEAgYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKCkgY29uc3QKICAgICByZXR1cm4g
bV9sYXllckNvbXBvc2l0ZWQ7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdl
MkREaXJlY3QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
ciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBl
LCBwaXhlbHMpOworfQorCiB9CiAKICNlbmRpZiAvLyBVU0UoM0RfR1JBUEhJQ1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKaW5kZXggOWRiYjQ4My4uNGQxNTMwYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcApAQCAtMzEsNiArMzEs
NyBAQAogI2lmIFVTRSgzRF9HUkFQSElDUykKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCisKICNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCkBAIC0yMDEsOCArMjAyLDggQEAgYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGUKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworCisgICAgdGV4SW1hZ2Uy
RERpcmVjdCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dDNEUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3ND
b250ZXh0M0RRdC5jcHAKaW5kZXggODg1MmNjZC4uOThhZGVjNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RR
dC5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlCiAj
ZW5kaWYKIHsKIHB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3ND
b250ZXh0M0QqLCBIb3N0V2luZG93Kik7CisgICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdy
YXBoaWNzQ29udGV4dDNEKiwgSG9zdFdpbmRvdyosIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJT
dHlsZSk7CiAgICAgfkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpOwogCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtNzYsNiArNzYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBi
bGl0TXVsdGlzYW1wbGVGcmFtZWJ1ZmZlcigpIGNvbnN0OwogICAgIHZvaWQgYmxpdE11bHRpc2Ft
cGxlRnJhbWVidWZmZXJBbmRSZXN0b3JlQ29udGV4dCgpIGNvbnN0OwogICAgIGJvb2wgbWFrZUN1
cnJlbnRJZk5lZWRlZCgpIGNvbnN0OworICAgIHZvaWQgY3JlYXRlT2Zmc2NyZWVuQnVmZmVycygp
OworICAgIHZvaWQgaW5pdGlhbGl6ZUFOR0xFKCk7CiAgICAgdm9pZCBjcmVhdGVHcmFwaGljc1N1
cmZhY2VzKGNvbnN0IEludFNpemUmKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRl
eHQ7CkBAIC0xMDQsNyArMTA2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNo
YWRlckNvbXBpbGVyKCkKIH0KICNlbmRpZgogCi1HcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Okdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSG9zdFdp
bmRvdyogaG9zdFdpbmRvdykKK0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBIb3N0V2luZG93KiBob3N0
V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCiAgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1faG9zdFdpbmRvdyhob3N0V2luZG93KQogICAg
ICwgbV9zdXJmYWNlKDApCkBAIC0xMjEsNiArMTIzLDEyIEBAIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBICiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAocmVuZGVyU3R5bGUgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJlbmRlclRvQ3VycmVudEdMQ29udGV4dCkgeworICAgICAgICBtX3Bs
YXRmb3JtQ29udGV4dCA9IFFPcGVuR0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgpOworICAgICAg
ICBtX3N1cmZhY2UgPSBtX3BsYXRmb3JtQ29udGV4dC0+c3VyZmFjZSgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiAgICAgLy8gRklYTUU6IEZp
bmQgYSB3YXkgdG8gY3JlYXRlIGEgUU9wZW5HTENvbnRleHQgd2l0aG91dCBjcmVhdGluZyBhIFFX
aW5kb3cgYXQgYWxsLgogICAgIC8vIFdlIG5lZWQgdG8gY3JlYXRlIGEgc3VyZmFjZSBpbiBvcmRl
ciB0byBjcmVhdGUgYSBRT3BlbkdMQ29udGV4dCBhbmQgbWFrZSBpdCBjdXJyZW50LgpAQCAtMTQ1
LDEyICsxNTMsNjcgQEAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQz
RFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEgKICNlbmRpZgogfQogCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlT2Zmc2NyZWVuQnVmZmVycygpCit7Cisg
ICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoLyogY291bnQgKi8gMSwgJm1fY29udGV4dC0+bV9mYm8pOwor
CisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb250ZXh0LT5tX3RleHR1cmUpOworICAgIGdsQmlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29udGV4dC0+bV90ZXh0
dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpMSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkxJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGdsQmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOworCisgICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1w
bGUgRkJPLgorICAgIGlmIChtX2NvbnRleHQtPm1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAg
IGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2NvbnRleHQtPm1fbXVsdGlzYW1wbGVGQk8pOworICAg
ICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1f
Y29udGV4dC0+bV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIG1fY29udGV4dC0+bV9ib3VuZEZC
TyA9IG1fY29udGV4dC0+bV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgZ2xHZW5SZW5kZXJidWZm
ZXJzKDEsICZtX2NvbnRleHQtPm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlm
IChtX2NvbnRleHQtPm1fYXR0cnMuc3RlbmNpbCB8fCBtX2NvbnRleHQtPm1fYXR0cnMuZGVwdGgp
CisgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fY29udGV4dC0+bV9tdWx0aXNh
bXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQmluZCBj
YW52YXMgRkJPLgorICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIG1fY29udGV4dC0+bV9mYm8pOworICAgICAgICBtX2NvbnRleHQtPm1fYm91
bmRGQk8gPSBtX2NvbnRleHQtPm1fZmJvOworI2lmIFVTRShPUEVOR0xfRVNfMikKKyAgICAgICAg
aWYgKG1fY29udGV4dC0+bV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVm
ZmVycygxLCAmbV9jb250ZXh0LT5tX2RlcHRoQnVmZmVyKTsKKyAgICAgICAgaWYgKG1fY29udGV4
dC0+bV9hdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZt
X2NvbnRleHQtPm1fc3RlbmNpbEJ1ZmZlcik7CisjZW5kaWYKKyAgICAgICAgaWYgKG1fY29udGV4
dC0+bV9hdHRycy5zdGVuY2lsIHx8IG1fY29udGV4dC0+bV9hdHRycy5kZXB0aCkKKyAgICAgICAg
ICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9jb250ZXh0LT5tX2RlcHRoU3RlbmNpbEJ1ZmZl
cik7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aW5pdGlhbGl6
ZUFOR0xFKCkKK3sKKyAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXM7CisgICAg
U2hJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJjZXMpOworCisgICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJTLCAmQU5H
TEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2Vy
dihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJl
c291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7CisgICAgbV9jb250ZXh0LT5nZXRJbnRl
Z2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFOR0xFUmVzb3Vy
Y2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291
cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgbV9jb250ZXh0LT5nZXRJbnRl
Z2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMs
ICZBTkdMRVJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBtX2Nv
bnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9JTUFHRV9V
TklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBtX2NvbnRl
eHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01FTlRfVU5JRk9STV9W
RUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk7CisKKyAg
ICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBFUy4KKyAgICBBTkdMRVJlc291cmNlcy5N
YXhEcmF3QnVmZmVycyA9IDE7CisgICAgbV9jb250ZXh0LT5tX2NvbXBpbGVyLnNldFJlc291cmNl
cyhBTkdMRVJlc291cmNlcyk7Cit9CisKIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6fkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZSgpCiB7Ci0gICAgZGVsZXRlIG1fc3VyZmFjZTsKLSAgICBtX3N1
cmZhY2UgPSAwOwotICAgIC8vIFBsYXRmb3JtIGNvbnRleHQgaXMgYXNzdW1lZCB0byBiZSBvd25l
ZCBieSBzdXJmYWNlLgotICAgIG1fcGxhdGZvcm1Db250ZXh0ID0gMDsKKyAgICBpZiAobV9ob3N0
V2luZG93KSB7CisgICAgICAgIGRlbGV0ZSBtX3N1cmZhY2U7CisgICAgICAgIG1fc3VyZmFjZSA9
IDA7CisgICAgICAgIC8vIFBsYXRmb3JtIGNvbnRleHQgaXMgYXNzdW1lZCB0byBiZSBvd25lZCBi
eSBzdXJmYWNlLgorICAgICAgICBtX3BsYXRmb3JtQ29udGV4dCA9IDA7CisgICAgfQogfQogCiBz
dGF0aWMgaW5saW5lIHF1aW50MzIgc3dhcEJnclRvUmdiKHF1aW50MzIgcGl4ZWwpCkBAIC0yOTEs
MTUgKzM1NCwxNiBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaQogICAgIC8vIFRoaXMgaW1wbGVt
ZW50YXRpb24gZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCByZW5kZXJpbmcgZGlyZWN0bHkgdG8g
dGhlIEhvc3RXaW5kb3cuCiAgICAgaWYgKHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVjdGx5VG9I
b3N0V2luZG93KQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RX
aW5kb3csIGZhbHNlKSk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0g
YWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCByZW5kZXJT
dHlsZSkpOwogICAgIHJldHVybiBjb250ZXh0LT5tX3ByaXZhdGUgPyBjb250ZXh0LnJlbGVhc2Uo
KSA6IDA7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGlj
c0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9v
bCkKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogICAgIDogbV9jdXJyZW50V2lkdGgoMCkK
ICAgICAsIG1fY3VycmVudEhlaWdodCgwKQogICAgICwgbV9jb21waWxlcihpc0dMRVMyQ29tcGxp
YW50KCkgPyBTSF9FU1NMX09VVFBVVCA6IFNIX0dMU0xfT1VUUFVUKQogICAgICwgbV9hdHRycyhh
dHRycykKKyAgICAsIG1fcmVuZGVyU3R5bGUocmVuZGVyU3R5bGUpCiAgICAgLCBtX3RleHR1cmUo
MCkKICAgICAsIG1fY29tcG9zaXRvclRleHR1cmUoMCkKICAgICAsIG1fZmJvKDApCkBAIC0zMTYs
NyArMzgwLDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICAsIG1fbXVsdGlzYW1wbGVG
Qk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKICAgICAsIG1f
bXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQotICAgICwgbV9wcml2YXRlKGFkb3B0UHRyKG5ldyBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGUodGhpcywgaG9zdFdpbmRvdykpKQorICAgICwgbV9wcml2
YXRlKGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUodGhpcywgaG9zdFdpbmRv
dywgcmVuZGVyU3R5bGUpKSkKIHsKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIApAQCAtMzM3
LDU0ICs0MDEsMTAgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIC8vIENyZWF0ZSBidWZmZXJzIGZvciB0aGUgY2FudmFzIEZCTy4KLSAgICBn
bEdlbkZyYW1lYnVmZmVycygvKiBjb3VudCAqLyAxLCAmbV9mYm8pOworICAgIGlmIChyZW5kZXJT
dHlsZSA9PSBSZW5kZXJPZmZzY3JlZW4pCisgICAgICAgIG1fcHJpdmF0ZS0+Y3JlYXRlT2Zmc2Ny
ZWVuQnVmZmVycygpOwogCi0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICBn
bEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmUpOwot
ICAgIGdsVGV4UGFyYW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVB
Uik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6
TElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6
OkNMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0Nv
bnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgMCk7Ci0KLSAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8u
Ci0gICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7Ci0gICAgICAgIGdsR2VuRnJhbWVidWZmZXJz
KDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgbV9i
b3VuZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygx
LCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNp
bCB8fCBtX2F0dHJzLmRlcHRoKQotICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZt
X211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9IGVsc2UgewotICAgICAgICAv
LyBCaW5kIGNhbnZhcyBGQk8uCi0gICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICBtX2JvdW5kRkJPID0gbV9mYm87
Ci0jaWYgVVNFKE9QRU5HTF9FU18yKQotICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKLSAgICAg
ICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAgIGlm
IChtX2F0dHJzLnN0ZW5jaWwpCi0gICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1f
c3RlbmNpbEJ1ZmZlcik7Ci0jZW5kaWYKLSAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBt
X2F0dHJzLmRlcHRoKQotICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRo
U3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQotCi0gICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24uCi0g
ICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzOwotICAgIFNoSW5pdEJ1aWx0SW5S
ZXNvdXJjZXMoJkFOR0xFUmVzb3VyY2VzKTsKLQotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhBdHRy
aWJzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklG
T1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7Ci0g
ICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlMsICZB
TkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3Vy
Y2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291
cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsgCi0gICAgZ2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMu
TWF4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21l
bnRVbmlmb3JtVmVjdG9ycyk7Ci0KLSAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBF
Uy4KLSAgICBBTkdMRVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7Ci0gICAgbV9jb21waWxl
ci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworICAgIG1fcHJpdmF0ZS0+aW5pdGlhbGl6
ZUFOR0xFKCk7CiAKICNpZiAhVVNFKE9QRU5HTF9FU18yKQogICAgIGdsRW5hYmxlKEdMX1BPSU5U
X1NQUklURSk7CkBAIC00MzgsNyArNDU4LDcgQEAgUGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250
ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpt
YWtlQ29udGV4dEN1cnJlbnQoKQogewotICAgIGlmICghbV9wcml2YXRlKQorICAgIGlmICghbV9w
cml2YXRlIHx8IG1fcmVuZGVyU3R5bGUgPT0gUmVuZGVyVG9DdXJyZW50R0xDb250ZXh0KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bWFrZUN1cnJlbnRJZk5l
ZWRlZCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCBhMjJlNzIwLi44YjE4ZDQyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMzgsMTMgKzM4LDYgQEAKIAogI2lmIFBMQVRGT1JN
KFFUKQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlUXQuaCIKLSNpbmNsdWRlIDxRT3BlbkdMQ29udGV4
dD4KLSNlbGlmIE9TKFdJTkRPV1MpCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2VsaWYgT1MoTUFD
X09TX1gpCi0jaW5jbHVkZSA8QUdML2FnbC5oPgotI2VsaWYgZGVmaW5lZChYUF9VTklYKQotI2lu
Y2x1ZGUgPEdML2dseC5oPgogI2VuZGlmCiAKICNpZiBVU0UoQ0FJUk8pCkBAIC01Myw3MCArNDYs
NDMgQEAKICNpbmNsdWRlIDxjYWlyby5oPgogI2VuZGlmCiAKLSNkZWZpbmUgR0xfQ01EKC4uLikg
ZG8geyBfX1ZBX0FSR1NfXzsgQVNTRVJUX0FSRyhfX1ZBX0FSR1NfXywgIWdsR2V0RXJyb3IoKSk7
IH0gd2hpbGUgKDApCisjaWYgIVVTRShURVhNQVBfT1BFTkdMX0VTXzIpCisvLyBGSVhNRTogTW92
ZSB0byBFeHRlbnNpb25zM0QuaC4KKyNkZWZpbmUgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCIDB4
ODRGNQorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYgMHg4MzY3CisjZGVmaW5l
IEdMX1VOUEFDS19ST1dfTEVOR1RIIDB4MENGMgorI2RlZmluZSBHTF9VTlBBQ0tfU0tJUF9QSVhF
TFMgMHgwQ0Y0CisjZGVmaW5lIEdMX1VOUEFDS19TS0lQX1JPV1MgMHgwQ0YzCisjZW5kaWYKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEgewogICAgIHN0
cnVjdCBTaGFyZWRHTERhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWRHTERhdGE+IHsKLSNp
ZiBQTEFURk9STShRVCkKLSAgICAgICAgdHlwZWRlZiBRT3BlbkdMQ29udGV4dCogR0xDb250ZXh0
OwotICAgICAgICBzdGF0aWMgR0xDb250ZXh0IGdldEN1cnJlbnRHTENvbnRleHQoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gUU9wZW5HTENvbnRleHQ6OmN1cnJlbnRDb250ZXh0KCk7
Ci0gICAgICAgIH0KLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgICAgIHR5cGVkZWYgSEdMUkMgR0xD
b250ZXh0OwotICAgICAgICBzdGF0aWMgR0xDb250ZXh0IGdldEN1cnJlbnRHTENvbnRleHQoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gd2dsR2V0Q3VycmVudENvbnRleHQoKTsKLSAg
ICAgICAgfQotI2VsaWYgT1MoTUFDX09TX1gpCi0gICAgICAgIHR5cGVkZWYgQUdMQ29udGV4dCBH
TENvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdMQ29udGV4dCgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZ2xHZXRDdXJyZW50Q29udGV4dCgpOwot
ICAgICAgICB9Ci0jZWxpZiBkZWZpbmVkKFhQX1VOSVgpCi0gICAgICAgIHR5cGVkZWYgR0xYQ29u
dGV4dCBHTENvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdMQ29u
dGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbFhHZXRDdXJyZW50Q29udGV4
dCgpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICAvLyBEZWZhdWx0IGltcGxlbWVudGF0aW9u
IGZvciB1bmtub3duIG9wZW5nbC4KLSAgICAgICAgLy8gUmV0dXJucyBhbHdheXMgaW5jcmVhc2lu
ZyBudW1iZXIgYW5kIGRpc2FibGVzIEdMIGNvbnRleHQgZGF0YSBzaGFyaW5nLgotICAgICAgICB0
eXBlZGVmIHVuc2lnbmVkIGludCBHTENvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQg
Z2V0Q3VycmVudEdMQ29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YXRpYyBHTENv
bnRleHQgZHVtbXlDb250ZXh0Q291bnRlciA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gKytkdW1t
eUNvbnRleHRDb3VudGVyOwotICAgICAgICB9Ci0KLSNlbmRpZgogCi0gICAgICAgIHR5cGVkZWYg
SGFzaE1hcDxHTENvbnRleHQsIFNoYXJlZEdMRGF0YSo+IEdMQ29udGV4dERhdGFNYXA7CisgICAg
ICAgIHR5cGVkZWYgSGFzaE1hcDxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNELCBTaGFyZWRHTERh
dGEqPiBHTENvbnRleHREYXRhTWFwOwogICAgICAgICBzdGF0aWMgR0xDb250ZXh0RGF0YU1hcCYg
Z2xDb250ZXh0RGF0YU1hcCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0YXRpYyBHTENvbnRl
eHREYXRhTWFwIG1hcDsKICAgICAgICAgICAgIHJldHVybiBtYXA7CiAgICAgICAgIH0KIAotICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRHTERhdGE+IGN1cnJlbnRTaGFyZWRHTERhdGEo
KQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRHTERhdGE+IGN1cnJlbnRTaGFyZWRH
TERhdGEoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IEdMQ29udGV4dCBjdXJyZW50R0xDb25leHQgPSBnZXRDdXJyZW50R0xDb250ZXh0KCk7Ci0gICAg
ICAgICAgICBHTENvbnRleHREYXRhTWFwOjppdGVyYXRvciBpdCA9IGdsQ29udGV4dERhdGFNYXAo
KS5maW5kKGN1cnJlbnRHTENvbmV4dCk7CisgICAgICAgICAgICBHTENvbnRleHREYXRhTWFwOjpp
dGVyYXRvciBpdCA9IGdsQ29udGV4dERhdGFNYXAoKS5maW5kKGNvbnRleHQtPnBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0QoKSk7CiAgICAgICAgICAgICBpZiAoaXQgIT0gZ2xDb250ZXh0RGF0YU1h
cCgpLmVuZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOwogCi0gICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZEdMRGF0YShnZXRDdXJyZW50R0xDb250ZXh0
KCkpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkR0xEYXRhKGNvbnRl
eHQpKTsKICAgICAgICAgfQogCiAKIAogICAgICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ciB0ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjsKIAotICAgICAgICBTaGFyZWRHTERhdGEoR0xD
b250ZXh0IGdsQ29udGV4dCkKKyAgICAgICAgU2hhcmVkR0xEYXRhKEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0KQorICAgICAgICAgICAgOiB0ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcihjb250
ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbENvbnRleHREYXRhTWFwKCkuYWRkKGdsQ29u
dGV4dCwgdGhpcyk7CisgICAgICAgICAgICBnbENvbnRleHREYXRhTWFwKCkuYWRkKGNvbnRleHQt
PnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSwgdGhpcyk7CiAgICAgICAgIH0KIAogICAgICAg
ICB+U2hhcmVkR0xEYXRhKCkKQEAgLTEzNSwzMCArMTAxLDMyIEBAIHN0cnVjdCBUZXh0dXJlTWFw
cGVyR0xEYXRhIHsKIAogICAgIFNoYXJlZEdMRGF0YSYgc2hhcmVkR0xEYXRhKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiAqKG1fc2hhcmVkR0xEYXRhLmdldCgpKTsKKyAgICAgICAgcmV0
dXJuICptX3NoYXJlZEdMRGF0YTsKICAgICB9CiAKICAgICB2b2lkIGluaXRpYWxpemVTdGVuY2ls
KCk7CiAKLSAgICBUZXh0dXJlTWFwcGVyR0xEYXRhKCkKLSAgICAgICAgOiBQYWludEZsYWdzKDAp
CisgICAgVGV4dHVyZU1hcHBlckdMRGF0YShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAg
ICAgICAgOiBjb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgUGFpbnRGbGFncygwKQogICAgICAg
ICAsIHByZXZpb3VzUHJvZ3JhbSgwKQogICAgICAgICAsIHRhcmdldEZyYW1lQnVmZmVyKDApCiAg
ICAgICAgICwgZGlkTW9kaWZ5U3RlbmNpbChmYWxzZSkKICAgICAgICAgLCBwcmV2aW91c1NjaXNz
b3JTdGF0ZSgwKQogICAgICAgICAsIHByZXZpb3VzRGVwdGhTdGF0ZSgwKQotICAgICAgICAsIG1f
c2hhcmVkR0xEYXRhKFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6Y3VycmVudFNo
YXJlZEdMRGF0YSgpKQorICAgICAgICAsIG1fc2hhcmVkR0xEYXRhKFRleHR1cmVNYXBwZXJHTERh
dGE6OlNoYXJlZEdMRGF0YTo6Y3VycmVudFNoYXJlZEdMRGF0YSh0aGlzLT5jb250ZXh0KSkKICAg
ICB7IH0KIAorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0OwogICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHByb2plY3Rpb25NYXRyaXg7CiAgICAgVGV4dHVyZU1hcHBlcjo6UGFpbnRGbGFn
cyBQYWludEZsYWdzOwotICAgIEdMaW50IHByZXZpb3VzUHJvZ3JhbTsKLSAgICBHTGludCB0YXJn
ZXRGcmFtZUJ1ZmZlcjsKKyAgICBHQzNEaW50IHByZXZpb3VzUHJvZ3JhbTsKKyAgICBHQzNEaW50
IHRhcmdldEZyYW1lQnVmZmVyOwogICAgIGJvb2wgZGlkTW9kaWZ5U3RlbmNpbDsKLSAgICBHTGlu
dCBwcmV2aW91c1NjaXNzb3JTdGF0ZTsKLSAgICBHTGludCBwcmV2aW91c0RlcHRoU3RhdGU7Ci0g
ICAgR0xpbnQgdmlld3BvcnRbNF07Ci0gICAgR0xpbnQgcHJldmlvdXNTY2lzc29yWzRdOworICAg
IEdDM0RpbnQgcHJldmlvdXNTY2lzc29yU3RhdGU7CisgICAgR0MzRGludCBwcmV2aW91c0RlcHRo
U3RhdGU7CisgICAgR0MzRGludCB2aWV3cG9ydFs0XTsKKyAgICBHQzNEaW50IHByZXZpb3VzU2Np
c3Nvcls0XTsKICAgICBSZWZQdHI8U2hhcmVkR0xEYXRhPiBtX3NoYXJlZEdMRGF0YTsKICAgICBS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3VycmVudFN1cmZhY2U7CiB9OwpAQCAtMTgyLDI1ICsxNTAs
MjUgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjazo6cG9wKCkKICAgICBjbGlwU3Rh
Y2sucmVtb3ZlTGFzdCgpOwogfQogCi1zdGF0aWMgdm9pZCBzY2lzc29yQ2xpcChjb25zdCBJbnRS
ZWN0JiByZWN0KQorc3RhdGljIHZvaWQgc2Npc3NvckNsaXAoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBHTGludCB2aWV3cG9ydFs0XTsKLSAgICBHTF9DTUQoZ2xH
ZXRJbnRlZ2VydihHTF9WSUVXUE9SVCwgdmlld3BvcnQpKTsKLSAgICBHTF9DTUQoZ2xTY2lzc29y
KHJlY3QueCgpLCB2aWV3cG9ydFszXSAtIHJlY3QubWF4WSgpLCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCkpKTsKKyAgICBHQzNEaW50IHZpZXdwb3J0WzRdOworICAgIGNvbnRleHQtPmdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpWSUVXUE9SVCwgdmlld3BvcnQpOworICAgIGNvbnRl
eHQtPnNjaXNzb3IocmVjdC54KCksIHZpZXdwb3J0WzNdIC0gcmVjdC5tYXhZKCksIHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3Rh
Y2s6OmFwcGx5KCkKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2s6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0KQogewotICAgIHNjaXNzb3JDbGlwKGNsaXBTdGF0ZS5zY2lz
c29yQm94KTsKLSAgICBHTF9DTUQoZ2xTdGVuY2lsT3AoR0xfS0VFUCwgR0xfS0VFUCwgR0xfS0VF
UCkpOwotICAgIEdMX0NNRChnbFN0ZW5jaWxGdW5jKEdMX0VRVUFMLCBjbGlwU3RhdGUuc3RlbmNp
bEluZGV4IC0gMSwgY2xpcFN0YXRlLnN0ZW5jaWxJbmRleCAtIDEpKTsKKyAgICBzY2lzc29yQ2xp
cChjb250ZXh0LCBjbGlwU3RhdGUuc2Npc3NvckJveCk7CisgICAgY29udGV4dC0+c3RlbmNpbE9w
KEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQLCBHcmFwaGljc0NvbnRleHQzRDo6S0VFUCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OktFRVApOworICAgIGNvbnRleHQtPnN0ZW5jaWxGdW5jKEdyYXBoaWNzQ29u
dGV4dDNEOjpFUVVBTCwgY2xpcFN0YXRlLnN0ZW5jaWxJbmRleCAtIDEsIGNsaXBTdGF0ZS5zdGVu
Y2lsSW5kZXggLSAxKTsKICAgICBpZiAoY2xpcFN0YXRlLnN0ZW5jaWxJbmRleCA9PSAxKQotICAg
ICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdMX1NURU5DSUxfVEVTVCkpOworICAgICAgICBjb250ZXh0
LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpOwogICAgIGVsc2UKLSAg
ICAgICAgR0xfQ01EKGdsRW5hYmxlKEdMX1NURU5DSUxfVEVTVCkpOworICAgICAgICBjb250ZXh0
LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCk7CiB9CiAKIApAQCAtMjE0
LDggKzE4Miw4IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMRGF0YTo6aW5pdGlhbGl6ZVN0ZW5jaWwo
KQogICAgIGlmIChkaWRNb2RpZnlTdGVuY2lsKQogICAgICAgICByZXR1cm47CiAKLSAgICBHTF9D
TUQoZ2xDbGVhclN0ZW5jaWwoMCkpOwotICAgIEdMX0NNRChnbENsZWFyKEdMX1NURU5DSUxfQlVG
RkVSX0JJVCkpOworICAgIGNvbnRleHQtPmNsZWFyU3RlbmNpbCgwKTsKKyAgICBjb250ZXh0LT5j
bGVhcihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKTsKICAgICBkaWRNb2Rp
ZnlTdGVuY2lsID0gdHJ1ZTsKIH0KIApAQCAtMjI5LDEwICsxOTcsMTEgQEAgQml0bWFwVGV4dHVy
ZUdMKiB0b0JpdG1hcFRleHR1cmVHTChCaXRtYXBUZXh0dXJlKiB0ZXh0dXJlKQogCiBUZXh0dXJl
TWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCgpCiAgICAgOiBUZXh0dXJlTWFwcGVyKE9wZW5HTE1v
ZGUpCi0gICAgLCBtX2RhdGEobmV3IFRleHR1cmVNYXBwZXJHTERhdGEpCiAgICAgLCBtX2NvbnRl
eHQoMCkKICAgICAsIG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nKGZhbHNlKQogewor
ICAgIG1fY29udGV4dDNEID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZvckN1cnJlbnRHTENv
bnRleHQoKTsKKyAgICBtX2RhdGEgPSBuZXcgVGV4dHVyZU1hcHBlckdMRGF0YShtX2NvbnRleHQz
RC5nZXQoKSk7CiB9CiAKIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrJiBUZXh0dXJlTWFwcGVy
R0w6OmNsaXBTdGFjaygpCkBAIC0yNDIsMTUgKzIxMSw5IEBAIFRleHR1cmVNYXBwZXJHTDo6Q2xp
cFN0YWNrJiBUZXh0dXJlTWFwcGVyR0w6OmNsaXBTdGFjaygpCiAKIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpiZWdpblBhaW50aW5nKFBhaW50RmxhZ3MgZmxhZ3MpCiB7Ci0gICAgLy8gTWFrZSBzdXJl
IHRoYXQgbm8gR0wgZXJyb3IgY29kZSBzdGF5cyBmcm9tIHByZXZpb3VzIG9wZXJhdGlvbnMuCi0g
ICAgZ2xHZXRFcnJvcigpOwotCi0gICAgaWYgKCFpbml0aWFsaXplT3BlbkdMU2hpbXMoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfQ1VSUkVOVF9QUk9H
UkFNLCAmZGF0YSgpLnByZXZpb3VzUHJvZ3JhbSkpOwotICAgIGRhdGEoKS5wcmV2aW91c1NjaXNz
b3JTdGF0ZSA9IGdsSXNFbmFibGVkKEdMX1NDSVNTT1JfVEVTVCk7Ci0gICAgZGF0YSgpLnByZXZp
b3VzRGVwdGhTdGF0ZSA9IGdsSXNFbmFibGVkKEdMX0RFUFRIX1RFU1QpOworICAgIG1fY29udGV4
dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9QUk9HUkFNLCAmZGF0
YSgpLnByZXZpb3VzUHJvZ3JhbSk7CisgICAgZGF0YSgpLnByZXZpb3VzU2Npc3NvclN0YXRlID0g
bV9jb250ZXh0M0QtPmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsK
KyAgICBkYXRhKCkucHJldmlvdXNEZXB0aFN0YXRlID0gbV9jb250ZXh0M0QtPmlzRW5hYmxlZChH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCk7CiAjaWYgUExBVEZPUk0oUVQpCiAgICAgaWYg
KG1fY29udGV4dCkgewogICAgICAgICBRUGFpbnRlciogcGFpbnRlciA9IG1fY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCk7CkBAIC0yNTgsMTQgKzIyMSwxNCBAQCB2b2lkIFRleHR1cmVNYXBwZXJH
TDo6YmVnaW5QYWludGluZyhQYWludEZsYWdzIGZsYWdzKQogICAgICAgICBwYWludGVyLT5iZWdp
bk5hdGl2ZVBhaW50aW5nKCk7CiAgICAgfQogI2VuZGlmCi0gICAgZ2xEaXNhYmxlKEdMX0RFUFRI
X1RFU1QpOwotICAgIGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgbV9jb250ZXh0M0Qt
PmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1QpOworICAgIG1fY29udGV4dDNE
LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgZGF0YSgpLmRp
ZE1vZGlmeVN0ZW5jaWwgPSBmYWxzZTsKLSAgICBHTF9DTUQoZ2xEZXB0aE1hc2soMCkpOwotICAg
IEdMX0NNRChnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCBkYXRhKCkudmlld3BvcnQpKTsKLSAg
ICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9TQ0lTU09SX0JPWCwgZGF0YSgpLnByZXZpb3VzU2Np
c3NvcikpOworICAgIG1fY29udGV4dDNELT5kZXB0aE1hc2soMCk7CisgICAgbV9jb250ZXh0M0Qt
PmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpWSUVXUE9SVCwgZGF0YSgpLnZpZXdwb3J0
KTsKKyAgICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfQk9YLCBkYXRhKCkucHJldmlvdXNTY2lzc29yKTsKICAgICBtX2NsaXBTdGFjay5pbml0KElu
dFJlY3QoMCwgMCwgZGF0YSgpLnZpZXdwb3J0WzJdLCBkYXRhKCkudmlld3BvcnRbM10pKTsKLSAg
ICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9GUkFNRUJVRkZFUl9CSU5ESU5HLCAmZGF0YSgpLnRh
cmdldEZyYW1lQnVmZmVyKSk7CisgICAgbV9jb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5ESU5HLCAmZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVy
KTsKICAgICBkYXRhKCkuUGFpbnRGbGFncyA9IGZsYWdzOwogICAgIGJpbmRTdXJmYWNlKDApOwog
fQpAQCAtMjczLDIyICsyMzYsMjIgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRp
bmcoUGFpbnRGbGFncyBmbGFncykKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjplbmRQYWludGluZygp
CiB7CiAgICAgaWYgKGRhdGEoKS5kaWRNb2RpZnlTdGVuY2lsKSB7Ci0gICAgICAgIGdsQ2xlYXJT
dGVuY2lsKDEpOwotICAgICAgICBnbENsZWFyKEdMX1NURU5DSUxfQlVGRkVSX0JJVCk7CisgICAg
ICAgIG1fY29udGV4dDNELT5jbGVhclN0ZW5jaWwoMSk7CisgICAgICAgIG1fY29udGV4dDNELT5j
bGVhcihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKTsKICAgICB9CiAKLSAg
ICBnbFVzZVByb2dyYW0oZGF0YSgpLnByZXZpb3VzUHJvZ3JhbSk7CisgICAgbV9jb250ZXh0M0Qt
PnVzZVByb2dyYW0oZGF0YSgpLnByZXZpb3VzUHJvZ3JhbSk7CiAKLSAgICBnbFNjaXNzb3IoZGF0
YSgpLnByZXZpb3VzU2Npc3NvclswXSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclsxXSwgZGF0YSgp
LnByZXZpb3VzU2Npc3NvclsyXSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclszXSk7CisgICAgbV9j
b250ZXh0M0QtPnNjaXNzb3IoZGF0YSgpLnByZXZpb3VzU2Npc3NvclswXSwgZGF0YSgpLnByZXZp
b3VzU2Npc3NvclsxXSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclsyXSwgZGF0YSgpLnByZXZpb3Vz
U2Npc3NvclszXSk7CiAgICAgaWYgKGRhdGEoKS5wcmV2aW91c1NjaXNzb3JTdGF0ZSkKLSAgICAg
ICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmVuYWJs
ZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKICAgICBlbHNlCi0gICAgICAgIGds
RGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgICAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKIAogICAgIGlmIChkYXRhKCkucHJldmlv
dXNEZXB0aFN0YXRlKQotICAgICAgICBnbEVuYWJsZShHTF9ERVBUSF9URVNUKTsKKyAgICAgICAg
bV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCk7CiAgICAg
ZWxzZQotICAgICAgICBnbERpc2FibGUoR0xfREVQVEhfVEVTVCk7CisgICAgICAgIG1fY29udGV4
dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUKTsKIAogI2lmIFBMQVRG
T1JNKFFUKQogICAgIGlmICghbV9jb250ZXh0KQpAQCAtMjk5LDQwICsyNjIsNDAgQEAgdm9pZCBU
ZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50aW5nKCkKICNlbmRpZgogfQogCi12b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtKiBzaGFkZXJQcm9ncmFtLCBHTGVudW0gZHJhd2luZ01vZGUsIGJvb2wgbmVlZHNCbGVuZGlu
ZykKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYgcXVhZFRv
RHJhdywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0qIHNoYWRlclByb2dyYW0sIEdDM0RlbnVtIGRyYXdpbmdNb2Rl
LCBib29sIG5lZWRzQmxlbmRpbmcpCiB7Ci0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmli
QXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xCaW5k
QnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250
ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCk7CiAK
LSAgICBjb25zdCBHTGZsb2F0IHF1YWRbXSA9IHsKKyAgICBjb25zdCBHQzNEZmxvYXQgcXVhZFtd
ID0gewogICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDEo
KS54KCksIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMSgpLnkoKSwK
ICAgICAgICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAyKCkueCgp
LCBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDIoKS55KCksCiAgICAg
ICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMygpLngoKSwgcXVh
ZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAzKCkueSgpLAogICAgICAgICBx
dWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDQoKS54KCksIHF1YWRUb0Ry
YXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wNCgpLnkoKQogICAgIH07Ci0gICAgR0xf
Q01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwg
MiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCBxdWFkKSk7CisgICAgbV9jb250ZXh0M0QtPnZlcnRl
eEF0dHJpYlBvaW50ZXIoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIocXVhZCkpOwogCiAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnBy
b2plY3Rpb25NYXRyaXgpLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkubXVsdGlwbHkoVHJhbnNm
b3JtYXRpb25NYXRyaXgoCiAgICAgICAgICAgICBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVj
dC53aWR0aCgpLCAwLCAwLCAwLAogICAgICAgICAgICAgMCwgcXVhZFRvRHJhdy5vcmlnaW5hbFRh
cmdldFJlY3QuaGVpZ2h0KCksIDAsIDAsCiAgICAgICAgICAgICAwLCAwLCAxLCAwLAogICAgICAg
ICAgICAgcXVhZFRvRHJhdy5vcmlnaW5hbFRhcmdldFJlY3QueCgpLCBxdWFkVG9EcmF3Lm9yaWdp
bmFsVGFyZ2V0UmVjdC55KCksIDAsIDEpKTsKLSAgICBjb25zdCBHTGZsb2F0IG00W10gPSB7Cisg
ICAgR0MzRGZsb2F0IG00W10gPSB7CiAgICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigp
LCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKICAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRy
aXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAogICAgICAgICBtYXRyaXgubTMx
KCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCiAgICAgICAgIG1h
dHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQogICAg
IH07Ci0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihzaGFkZXJQcm9ncmFtLT5tYXRyaXhM
b2NhdGlvbigpLCAxLCBHTF9GQUxTRSwgbTQpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybU1h
dHJpeDRmdihzaGFkZXJQcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgbTQpOwog
CiAgICAgaWYgKG5lZWRzQmxlbmRpbmcpIHsKLSAgICAgICAgR0xfQ01EKGdsQmxlbmRGdW5jKEdM
X09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSkpOwotICAgICAgICBHTF9DTUQoZ2xFbmFibGUo
R0xfQkxFTkQpKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRl
eHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAg
ICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKICAgICB9
IGVsc2UKLSAgICAgICAgR0xfQ01EKGdsRGlzYWJsZShHTF9CTEVORCkpOworICAgICAgICBtX2Nv
bnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwogCi0gICAgR0xfQ01E
KGdsRHJhd0FycmF5cyhkcmF3aW5nTW9kZSwgMCwgNCkpOwotICAgIEdMX0NNRChnbERpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOworICAgIG1f
Y29udGV4dDNELT5kcmF3QXJyYXlzKGRyYXdpbmdNb2RlLCAwLCA0KTsKKyAgICBtX2NvbnRleHQz
RC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigp
KTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNv
bG9yLCBmbG9hdCB3aWR0aCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4KQpAQCAtMzQxLDE3ICszMDQsMTcgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9h
dCB3aWR0aCwgY29uc3QgRmxvYXRSZWMKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcj4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFy
ZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5zb2xpZENvbG9yUHJvZ3JhbSgp
OwotICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOworICAgIG1fY29udGV4
dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOwogCiAgICAgZmxvYXQgYWxwaGEgPSBjb2xv
ci5hbHBoYSgpIC8gMjU1LjA7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTRmKHByb2dyYW0tPmNvbG9y
TG9jYXRpb24oKSwKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9j
YXRpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgKGNvbG9yLnJlZCgpIC8gMjU1LjApICog
YWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgIChjb2xvci5ncmVlbigpIC8gMjU1LjApICog
YWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgIChjb2xvci5ibHVlKCkgLyAyNTUuMCkgKiBh
bHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgYWxwaGEpKTsKLSAgICBHTF9DTUQoZ2xMaW5l
V2lkdGgod2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgYWxwaGEpOworICAgIG1fY29u
dGV4dDNELT5saW5lV2lkdGgod2lkdGgpOwogCi0gICAgZHJhd1F1YWQodGFyZ2V0UmVjdCwgbW9k
ZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdldCgpLCBHTF9MSU5FX0xPT1AsIGNvbG9yLmhhc0FscGhh
KCkpOworICAgIGRyYXdRdWFkKHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgcHJvZ3JhbS5n
ZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUCwgY29sb3IuaGFzQWxwaGEoKSk7CiB9
CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3UmVwYWludENvdW50ZXIoaW50IHZhbHVlLCBp
bnQgcG9pbnRTaXplLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCkKQEAgLTM5OCw3ICszNjEsNyBAQCB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVy
ZSwgY29uc3QgRmxvYXRSZWN0JgogICAgIGRyYXdUZXh0dXJlKHRleHR1cmVHTC5pZCgpLCB0ZXh0
dXJlR0wuaXNPcGFxdWUoKSA/IDAgOiBTdXBwb3J0c0JsZW5kaW5nLCB0ZXh0dXJlR0wuc2l6ZSgp
LCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHksIG1hc2ssIGV4cG9zZWRFZGdlcyk7CiB9CiAK
LSNpZiBkZWZpbmVkKEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSkKKyNpZiAhVVNFKFRFWE1BUF9P
UEVOR0xfRVNfMikKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVJlY3RhbmdsZUFS
Qih1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSog
bWFza1RleHR1cmUpCiB7CiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBw
cm9ncmFtOwpAQCAtNDA2LDM2ICszNjksMzYgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdU
ZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb24KICAg
ICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpSZWN0
T3BhY2l0eUFuZE1hc2spOwogICAgIGVsc2UKICAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFy
ZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpSZWN0U2ltcGxlKTsKLSAgICBHTF9DTUQoZ2xVc2VQ
cm9ncmFtKHByb2dyYW0tPmlkKCkpKTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9n
cmFtLT5pZCgpKTsKIAotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dy
YW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhU
VVJFMCkpOwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FS
QiwgdGV4dHVyZSkpOwotICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtLT5zb3VyY2VUZXh0
dXJlTG9jYXRpb24oKSwgMCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKyAgICBtX2NvbnRleHQzRC0+Ymlu
ZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCB0ZXh0dXJlKTsKKyAgICBtX2NvbnRl
eHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnNvdXJjZVRleHR1cmVMb2NhdGlvbigpLCAwKTsKIAot
ICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtLT5mbGlwTG9jYXRpb24oKSwgISEoZmxhZ3Mg
JiBTaG91bGRGbGlwVGV4dHVyZSkpKTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMmYocHJvZ3JhbS0+
dGV4dHVyZVNpemVMb2NhdGlvbigpLCB0ZXh0dXJlU2l6ZS53aWR0aCgpLCB0ZXh0dXJlU2l6ZS5o
ZWlnaHQoKSkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+ZmxpcExvY2F0
aW9uKCksICEhKGZsYWdzICYgU2hvdWxkRmxpcFRleHR1cmUpKTsKKyAgICBtX2NvbnRleHQzRC0+
dW5pZm9ybTJmKHByb2dyYW0tPnRleHR1cmVTaXplTG9jYXRpb24oKSwgdGV4dHVyZVNpemUud2lk
dGgoKSwgdGV4dHVyZVNpemUuaGVpZ2h0KCkpOwogCiAgICAgaWYgKFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlv
bigpKSkKLSAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW0tPm9wYWNpdHlMb2NhdGlv
bigpLCBvcGFjaXR5KSk7CisgICAgICAgIG1fY29udGV4dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+
b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpOwogCiAgICAgaWYgKG1hc2tUZXh0dXJlICYmIG1h
c2tUZXh0dXJlLT5pc1ZhbGlkKCkgJiYgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFs
aWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpKSkgewogICAg
ICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wqIG1hc2tUZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxj
b25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNrVGV4dHVyZSk7Ci0gICAgICAgIEdMX0NNRChnbEFj
dGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpKTsKLSAgICAgICAgR0xfQ01EKGdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgbWFza1RleHR1cmVHTC0+aWQoKSkpOwotICAgICAgICBHTF9DTUQoZ2xV
bmlmb3JtMWkocHJvZ3JhbS0+bWFza1RleHR1cmVMb2NhdGlvbigpLCAxKSk7Ci0gICAgICAgIEdM
X0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKKyAgICAgICAgbV9jb250ZXh0M0Qt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKKyAgICAgICAgbV9j
b250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtYXNr
VGV4dHVyZUdMLT5pZCgpKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFt
LT5tYXNrVGV4dHVyZUxvY2F0aW9uKCksIDEpOworICAgICAgICBtX2NvbnRleHQzRC0+YWN0aXZl
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwogICAgIH0KIAogICAgIGJvb2wg
bmVlZHNCbGVuZGluZyA9IChmbGFncyAmIFN1cHBvcnRzQmxlbmRpbmcpIHx8IG9wYWNpdHkgPCAw
Ljk5IHx8IG1hc2tUZXh0dXJlOwotICAgIGRyYXdRdWFkKHRhcmdldFJlY3QsIG1vZGVsVmlld01h
dHJpeCwgcHJvZ3JhbS5nZXQoKSwgR0xfVFJJQU5HTEVfRkFOLCBuZWVkc0JsZW5kaW5nKTsKKyAg
ICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdy
YXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIG5lZWRzQmxlbmRpbmcpOwogfQotI2VuZGlm
IC8vIGRlZmluZWQoR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlKSAKKyNlbmRpZiAvLyAhVVNFKFRF
WE1BUF9PUEVOR0xfRVNfMikKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKHVp
bnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJbnRTaXplJiAvKiB0ZXh0dXJlU2l6
ZSAqLywgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJl
KiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKQogewotICAgIGJvb2wgbmVlZHNB
bnRpbGlhaW5nID0gbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcgJiYgIW1vZGVsVmll
d01hdHJpeC5pc0ludGVnZXJUcmFuc2xhdGlvbigpOwotICAgIGlmIChuZWVkc0FudGlsaWFpbmcg
JiYgZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHRleHR1cmUsIGZsYWdzLCB0YXJnZXRSZWN0
LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0dXJlLCBleHBvc2VkRWRnZXMpKQor
ICAgIGJvb2wgbmVlZHNBbnRpYWxpYXNpbmcgPSBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlh
c2luZyAmJiAhbW9kZWxWaWV3TWF0cml4LmlzSW50ZWdlclRyYW5zbGF0aW9uKCk7CisgICAgaWYg
KG5lZWRzQW50aWFsaWFzaW5nICYmIGRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh0ZXh0dXJl
LCBmbGFncywgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBvcGFjaXR5LCBtYXNrVGV4dHVy
ZSwgZXhwb3NlZEVkZ2VzKSkKICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0+IHByb2dyYW07CkBAIC00NDMsMTUgKzQwNiwxNSBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3Ms
IGNvbnN0IEludFNpemUmCiAgICAgICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCku
dGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6T3BhY2l0eUFuZE1hc2spOwogICAgIGVsc2UKICAgICAgICAgcHJvZ3Jh
bSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRT
aGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaW1wbGUpOwotICAgIEdM
X0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOworICAgIG1fY29udGV4dDNELT51c2VQ
cm9ncmFtKHByb2dyYW0tPmlkKCkpOwogCiAgICAgZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFt
KHByb2dyYW0uZ2V0KCksIHRleHR1cmUsIGZsYWdzLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRy
aXgsIG9wYWNpdHksIG1hc2tUZXh0dXJlKTsKIH0KIAotc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHZpZXdwb3J0TWF0cml4KCkKK3N0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2aWV3cG9y
dE1hdHJpeChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEKQogewotICAgIEdMaW50IHZpZXdw
b3J0WzRdOwotICAgIEdMX0NNRChnbEdldEludGVnZXJ2KEdMX1ZJRVdQT1JULCB2aWV3cG9ydCkp
OworICAgIEdDM0RpbnQgdmlld3BvcnRbNF07CisgICAgY29udGV4dDNELT5nZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQsIHZpZXdwb3J0KTsKIAogICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IG1hdHJpeDsKICAgICBtYXRyaXgudHJhbnNsYXRlM2Qodmlld3BvcnRbMF0sIHZp
ZXdwb3J0WzFdLCAwKTsKQEAgLTU0OCw3ICs1MTEsNyBAQCBib29sIFRleHR1cmVNYXBwZXJHTDo6
ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdz
LAogICAgIC8vIGFudGlhbGlhc2luZy4gTm90ZSBoZXJlIHRoYXQgd2UgYXJlIGFsc28gaW5jbHVk
aW5nIHRoZSB2aWV3cG9ydCBtYXRyaXggKHdoaWNoCiAgICAgLy8gdHJhbnNsYXRlcyBmcm9tIG5v
cm1hbGl6ZWQgZGV2aWNlIGNvb3JkaW5hdGVzIHRvIHNjcmVlbiBjb29yZGluYXRlcyksIGJlY2F1
c2UgdGhlc2UKICAgICAvLyB2YWx1ZXMgYXJlIGNvbnN1bWVkIGluIHRoZSBmcmFnbWVudCBzaGFk
ZXIsIHdoaWNoIHdvcmtzIGluIHNjcmVlbiBjb29yZGluYXRlcy4KLSAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBzY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHZpZXdwb3J0TWF0cml4KCkubXVsdGlwbHko
VHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpKS5tdWx0aXBseSht
b2RlbFZpZXdNYXRyaXgpLnRvMmRUcmFuc2Zvcm0oKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBzY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHZpZXdwb3J0TWF0cml4KG1fY29udGV4dDNELmdldCgp
KS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCkucHJvamVjdGlvbk1hdHJpeCkp
Lm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkudG8yZFRyYW5zZm9ybSgpOwogICAgIGlmICghc2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBGbG9hdFF1YWQgcXVhZEluU2NyZWVuU3BhY2UgPSBzY3JlZW5TcGFjZVRyYW5zZm9ybS5t
YXBRdWFkKG9yaWdpbmFsVGFyZ2V0UmVjdCk7CkBAIC01NzIsOCArNTM1LDggQEAgYm9vbCBUZXh0
dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJl
LCBGbGFncyBmbGFncywKICAgICBxdWFkVG9FZGdlQXJyYXkoaW5mbGF0ZVF1YWQocXVhZEluU2Ny
ZWVuU3BhY2UuYm91bmRpbmdCb3goKSwgIGluZmxhdGlvbkRpc3RhbmNlKSwgdGFyZ2V0UXVhZEVk
Z2VzICsgMTIpOwogCiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFs
aWFzaW5nTm9NYXNrPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyLmFudGlhbGlhc2luZ05vTWFza1Byb2dyYW0oKTsKLSAgICBHTF9DTUQo
Z2xVc2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpKTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtM2Z2KHBy
b2dyYW0tPmV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uKCksIDgsIHRhcmdl
dFF1YWRFZGdlcykpOworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkp
OworICAgIG1fY29udGV4dDNELT51bmlmb3JtM2Z2KHByb2dyYW0tPmV4cGFuZGVkUXVhZEVkZ2Vz
SW5TY3JlZW5TcGFjZUxvY2F0aW9uKCksIDgsIHRhcmdldFF1YWRFZGdlcyk7CiAKICAgICBkcmF3
VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVyZSwgZmxhZ3MsIERy
YXdRdWFkKG9yaWdpbmFsVGFyZ2V0UmVjdCwgZXhwYW5kZWRRdWFkSW5UZXh0dXJlQ29vcmRpbmF0
ZXMpLCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIDAgLyogbWFza1RleHR1cmUgKi8pOwogICAg
IHJldHVybiB0cnVlOwpAQCAtNTgxLDI2ICs1NDQsMjYgQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6
OmRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFn
cywKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSogcHJvZ3JhbSwgdWludDMyX3QgdGV4dHVyZSwgRmxh
Z3MgZmxhZ3MsIGNvbnN0IERyYXdRdWFkJiBxdWFkVG9EcmF3LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0
dXJlKiBtYXNrVGV4dHVyZSkKIHsKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUo
R0xfVEVYVFVSRTApKTsKLSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0
ZXh0dXJlKSk7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW0tPnNvdXJjZVRleHR1cmVM
b2NhdGlvbigpLCAwKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOworICAgIG1fY29udGV4dDNELT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZSk7CisgICAgbV9jb250
ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5zb3VyY2VUZXh0dXJlTG9jYXRpb24oKSwgMCk7CiAK
LSAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbS0+ZmxpcExvY2F0aW9uKCksICEhKGZsYWdz
ICYgU2hvdWxkRmxpcFRleHR1cmUpKSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9n
cmFtLT5mbGlwTG9jYXRpb24oKSwgISEoZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVyZSkpOwogCiAg
ICAgaWYgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppc1ZhbGlkVW5pZm9ybUxvY2F0aW9u
KHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpKSkKLSAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFm
KHByb2dyYW0tPm9wYWNpdHlMb2NhdGlvbigpLCBvcGFjaXR5KSk7CisgICAgICAgIG1fY29udGV4
dDNELT51bmlmb3JtMWYocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpOwogCiAg
ICAgaWYgKG1hc2tUZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkgJiYgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+bWFza1Rl
eHR1cmVMb2NhdGlvbigpKSkgewogICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wqIG1hc2tU
ZXh0dXJlR0wgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wqPihtYXNrVGV4dHVy
ZSk7Ci0gICAgICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpKTsKLSAgICAg
ICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbWFza1RleHR1cmVHTC0+aWQo
KSkpOwotICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+bWFza1RleHR1cmVMb2Nh
dGlvbigpLCAxKSk7Ci0gICAgICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTAp
KTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkUxKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKTsKKyAgICAgICAgbV9jb250
ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCksIDEpOworICAg
ICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RTApOwogICAgIH0KIAogICAgIGJvb2wgbmVlZHNCbGVuZGluZyA9IChmbGFncyAmIFN1cHBvcnRz
QmxlbmRpbmcpIHx8IG9wYWNpdHkgPCAwLjk5IHx8IG1hc2tUZXh0dXJlOwotICAgIGRyYXdRdWFk
KHF1YWRUb0RyYXcsIG1vZGVsVmlld01hdHJpeCwgcHJvZ3JhbSwgR0xfVFJJQU5HTEVfRkFOLCBu
ZWVkc0JsZW5kaW5nKTsKKyAgICBkcmF3UXVhZChxdWFkVG9EcmF3LCBtb2RlbFZpZXdNYXRyaXgs
IHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIG5lZWRzQmxlbmRpbmcp
OwogfQogCiBib29sIEJpdG1hcFRleHR1cmVHTDo6Y2FuUmV1c2VXaXRoKGNvbnN0IEludFNpemUm
IGNvbnRlbnRzU2l6ZSwgRmxhZ3MpCkBAIC02MTEsNyArNTc0LDcgQEAgYm9vbCBCaXRtYXBUZXh0
dXJlR0w6OmNhblJldXNlV2l0aChjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUsIEZsYWdzKQog
I2lmIE9TKERBUldJTikKICNkZWZpbmUgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZ
UEUgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWCiAjZWxzZQotI2RlZmluZSBERUZBVUxUX1RF
WFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSBHTF9VTlNJR05FRF9CWVRFCisjZGVmaW5lIERFRkFV
TFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFCiAjZW5kaWYKIAogc3RhdGljIHZvaWQgc3dpenpsZUJHUkFUb1JHQkEodWludDMyX3Qq
IGRhdGEsIGNvbnN0IEludFJlY3QmIHJlY3QsIGludCBzdHJpZGUgPSAwKQpAQCAtNjQ2LDM4ICs2
MDksNDIgQEAgc3RhdGljIGJvb2wgZHJpdmVyU3VwcG9ydHNTdWJJbWFnZSgpCiAKIHZvaWQgQml0
bWFwVGV4dHVyZUdMOjpkaWRSZXNldCgpCiB7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKwogICAgIGlmICgh
bV9pZCkKLSAgICAgICAgR0xfQ01EKGdsR2VuVGV4dHVyZXMoMSwgJm1faWQpKTsKKyAgICAgICAg
bV9pZCA9IGNvbnRleHQzRC0+Y3JlYXRlVGV4dHVyZSgpOwogCiAgICAgbV9zaG91bGRDbGVhciA9
IHRydWU7CiAgICAgaWYgKG1fdGV4dHVyZVNpemUgPT0gY29udGVudFNpemUoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgR0x1aW50IGZvcm1hdCA9IGRyaXZlclN1cHBvcnRzQkdSQVN3aXp6bGlu
ZygpID8gR0xfQkdSQSA6IEdMX1JHQkE7CisgICAgUGxhdGZvcm0zRE9iamVjdCBmb3JtYXQgPSBk
cml2ZXJTdXBwb3J0c0JHUkFTd2l6emxpbmcoKSA/IEdyYXBoaWNzQ29udGV4dDNEOjpCR1JBIDog
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CiAKICAgICBtX3RleHR1cmVTaXplID0gY29udGVudFNp
emUoKTsKLSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKSk7Ci0g
ICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9G
SUxURVIsIEdMX0xJTkVBUikpOwotICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpKTsKLSAgICBHTF9DTUQoZ2xU
ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9U
T19FREdFKSk7Ci0gICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSkpOwotICAgIEdMX0NNRChnbFRleEltYWdl
MkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3Rl
eHR1cmVTaXplLmhlaWdodCgpLCAwLCBmb3JtYXQsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFO
U0ZFUl9UWVBFLCAwKSk7CisgICAgY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgbV9pZCk7CisgICAgY29udGV4dDNELT50ZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9N
SU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICBjb250ZXh0M0QtPnRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAg
IGNvbnRleHQzRC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xB
TVBfVE9fRURHRSk7CisgICAgY29udGV4dDNELT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBo
aWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBjb250ZXh0M0QtPnRleEltYWdlMkRE
aXJlY3QoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGZvcm1hdCwgbV90ZXh0dXJl
U2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpLCAwLCBmb3JtYXQsIERFRkFVTFRf
VEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAwKTsKIH0KIAogCiB2b2lkIEJpdG1hcFRleHR1
cmVHTDo6dXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFy
Z2V0UmVjdCwgY29uc3QgSW50UG9pbnQmIHNvdXJjZU9mZnNldCwgaW50IGJ5dGVzUGVyTGluZSkK
IHsKLSAgICBHTHVpbnQgZ2xGb3JtYXQgPSBHTF9SR0JBOwotICAgIEdMX0NNRChnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOworCisgICAgUGxhdGZv
cm0zRE9iamVjdCBnbEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOworICAgIGNvbnRl
eHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1faWQpOwog
CiAgICAgY29uc3QgdW5zaWduZWQgYnl0ZXNQZXJQaXhlbCA9IDQ7CiAgICAgaWYgKGRyaXZlclN1
cHBvcnRzQkdSQVN3aXp6bGluZygpKQotICAgICAgICBnbEZvcm1hdCA9IEdMX0JHUkE7CisgICAg
ICAgIGdsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJHUkE7CiAgICAgZWxzZQogICAgICAg
ICBzd2l6emxlQkdSQVRvUkdCQShyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oY29uc3RfY2Fz
dDx2b2lkKj4oZGF0YSkpLCBJbnRSZWN0KHNvdXJjZU9mZnNldCwgdGFyZ2V0UmVjdC5zaXplKCkp
LCBieXRlc1BlckxpbmUgLyBieXRlc1BlclBpeGVsKTsKIAogICAgIGlmIChieXRlc1BlckxpbmUg
PT0gdGFyZ2V0UmVjdC53aWR0aCgpIC8gNCAmJiBzb3VyY2VPZmZzZXQgPT0gSW50UG9pbnQ6Onpl
cm8oKSkgewotICAgICAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAs
IHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJn
ZXRSZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVS
X1RZUEUsIChjb25zdCBjaGFyKilkYXRhKSk7CisgICAgICAgIGNvbnRleHQzRC0+dGV4U3ViSW1h
Z2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRh
cmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIGds
Rm9ybWF0LCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgKGNvbnN0IGNoYXIq
KWRhdGEpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02OTUsMTkgKzY2MiwxOSBAQCB2
b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCogZGF0YSwgY29u
c3QgSW50UmVjdCYgdGFyZ2V0UmVjdAogICAgICAgICAgICAgZHN0ICs9IHRhcmdldEJ5dGVzUGVy
TGluZTsKICAgICAgICAgfQogCi0gICAgICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVY
VFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0Lndp
ZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBERUZBVUxUX1RFWFRVUkVfUElY
RUxfVFJBTlNGRVJfVFlQRSwgdGVtcG9yYXJ5RGF0YS5kYXRhKCkpKTsKKyAgICAgICAgY29udGV4
dDNELT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB0YXJn
ZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVj
dC5oZWlnaHQoKSwgZ2xGb3JtYXQsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBF
LCB0ZW1wb3JhcnlEYXRhLmRhdGEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiAh
ZGVmaW5lZChURVhNQVBfT1BFTkdMX0VTXzIpCiAgICAgLy8gVXNlIHRoZSBPcGVuR0wgc3ViLWlt
YWdlIGV4dGVuc2lvbiwgbm93IHRoYXQgd2Uga25vdyBpdCdzIGF2YWlsYWJsZS4KLSAgICBHTF9D
TUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgYnl0ZXNQZXJMaW5lIC8gYnl0
ZXNQZXJQaXhlbCkpOwotICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JP
V1MsIHNvdXJjZU9mZnNldC55KCkpKTsKLSAgICBHTF9DTUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBB
Q0tfU0tJUF9QSVhFTFMsIHNvdXJjZU9mZnNldC54KCkpKTsKLSAgICBHTF9DTUQoZ2xUZXhTdWJJ
bWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwg
dGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgREVGQVVM
VF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIChjb25zdCBjaGFyKilkYXRhKSk7Ci0gICAg
R0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIDApKTsKLSAgICBHTF9D
TUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCAwKSk7Ci0gICAgR0xfQ01EKGds
UGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUElYRUxTLCAwKSk7CisgICAgY29udGV4dDNELT5w
aXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgYnl0ZXNQZXJMaW5lIC8gYnl0ZXNQZXJQ
aXhlbCk7CisgICAgY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCBz
b3VyY2VPZmZzZXQueSgpKTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19T
S0lQX1BJWEVMUywgc291cmNlT2Zmc2V0LngoKSk7CisgICAgY29udGV4dDNELT50ZXhTdWJJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFy
Z2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xG
b3JtYXQsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29uc3QgY2hhciop
ZGF0YSk7CisgICAgY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwg
MCk7CisgICAgY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9ST1dTLCAwKTsK
KyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJWEVMUywgMCk7CiAj
ZW5kaWYKIH0KIApAQCAtNzQzLDE5ICs3MTAsMTkgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRy
YXdGaWx0ZXJlZChjb25zdCBCaXRtYXBUZXh0dXJlJiBzb3VyY2VUZXh0dXJlLCBjb25zdCBCaXQK
IAogICAgIHByb2dyYW0tPnByZXBhcmUoZmlsdGVyLCBwYXNzLCBzb3VyY2VUZXh0dXJlLmNvbnRl
bnRTaXplKCksIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KGNvbnRlbnRUZXh0
dXJlKS5pZCgpKTsKIAotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dy
YW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJy
YXkocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbEFjdGl2ZVRleHR1
cmUoR0xfVEVYVFVSRTApKTsKLSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJE
LCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihzb3VyY2VUZXh0dXJlKS5pZCgp
KSk7Ci0gICAgZ2xVbmlmb3JtMWkocHJvZ3JhbS0+dGV4dHVyZVVuaWZvcm0oKSwgMCk7Ci0gICAg
Y29uc3QgR0xmbG9hdCB0YXJnZXRWZXJ0aWNlc1tdID0gey0xLCAtMSwgMSwgLTEsIDEsIDEsIC0x
LCAxfTsKLSAgICBjb25zdCBHTGZsb2F0IHNvdXJjZVZlcnRpY2VzW10gPSB7MCwgMCwgMSwgMCwg
MSwgMSwgMCwgMX07Ci0gICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52
ZXJ0ZXhBdHRyaWIoKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB0YXJnZXRWZXJ0aWNlcykp
OwotICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dGV4Q29vcmRBdHRy
aWIoKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCBzb3VyY2VWZXJ0aWNlcykpOwotICAgIEdM
X0NNRChnbERpc2FibGUoR0xfQkxFTkQpKTsKLSAgICBHTF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RS
SUFOR0xFX0ZBTiwgMCwgNCkpOwotICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigpKSk7CisgICAgbV9jb250ZXh0M0Qt
PmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBt
X2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRBdHRy
aWIoKSk7CisgICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkUwKTsKKyAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHNvdXJj
ZVRleHR1cmUpLmlkKCkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+dGV4
dHVyZVVuaWZvcm0oKSwgMCk7CisgICAgY29uc3QgR0MzRGZsb2F0IHRhcmdldFZlcnRpY2VzW10g
PSB7LTEsIC0xLCAxLCAtMSwgMSwgMSwgLTEsIDF9OworICAgIGNvbnN0IEdDM0RmbG9hdCBzb3Vy
Y2VWZXJ0aWNlc1tdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9OworICAgIG1fY29udGV4dDNE
LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHRhcmdldFZlcnRpY2VzKSk7
CisgICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dGV4Q29vcmRB
dHRyaWIoKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0
cihzb3VyY2VWZXJ0aWNlcykpOworICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORCk7CisgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250
ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0
ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0Qt
PmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigpKTsKIH0K
IAogUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBCaXRtYXBUZXh0dXJlR0w6OmFwcGx5RmlsdGVy
cyhjb25zdCBCaXRtYXBUZXh0dXJlJiBjb250ZW50VGV4dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycykKQEAgLTc5NiwxNyArNzYzLDE5IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdM
Ojppbml0aWFsaXplU3RlbmNpbCgpCiB7CiAgICAgaWYgKG1fcmJvKQogICAgICAgICByZXR1cm47
Ci0gICAgR0xfQ01EKGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9yYm8pKTsKLSAgICBHTF9DTUQo
Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9yYm8pKTsKKworICAgIEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4
dDNEKCk7CisgICAgbV9yYm8gPSBjb250ZXh0M0QtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworICAg
IGNvbnRleHQzRC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSLCBtX3Jibyk7CiAjaWZkZWYgVEVYTUFQX09QRU5HTF9FU18yCi0gICAgR0xfQ01EKGdsUmVu
ZGVyYnVmZmVyU3RvcmFnZShHTF9SRU5ERVJCVUZGRVIsIEdMX1NURU5DSUxfSU5ERVg4LCBtX3Rl
eHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKTsKKyAgICBjb250ZXh0
M0QtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4LCBtX3RleHR1cmVTaXplLndpZHRoKCks
IG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpOwogI2Vsc2UKLSAgICBHTF9DTUQoZ2xSZW5kZXJidWZm
ZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgR0xfREVQVEhfU1RFTkNJTCwgbV90ZXh0dXJlU2l6
ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKSk7CisgICAgY29udGV4dDNELT5yZW5k
ZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9TVEVOQ0lMLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVy
ZVNpemUuaGVpZ2h0KCkpOwogI2VuZGlmCi0gICAgR0xfQ01EKGdsQmluZFJlbmRlcmJ1ZmZlcihH
TF9SRU5ERVJCVUZGRVIsIDApKTsKLSAgICBHTF9DTUQoZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
cihHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIs
IG1fcmJvKSk7Ci0gICAgR0xfQ01EKGdsQ2xlYXJTdGVuY2lsKDApKTsKLSAgICBHTF9DTUQoZ2xD
bGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKTsKKyAgICBjb250ZXh0M0QtPmJpbmRSZW5kZXJi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7CisgICAgY29udGV4dDNE
LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIs
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVIsIG1fcmJvKTsKKyAgICBjb250ZXh0M0QtPmNsZWFyU3RlbmNpbCgwKTsK
KyAgICBjb250ZXh0M0QtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9C
SVQpOwogfQogCiB2b2lkIEJpdG1hcFRleHR1cmVHTDo6Y2xlYXJJZk5lZWRlZCgpCkBAIC04MTQs
MTAgKzc4MywxMiBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6Y2xlYXJJZk5lZWRlZCgpCiAgICAg
aWYgKCFtX3Nob3VsZENsZWFyKQogICAgICAgICByZXR1cm47CiAKKyAgICBHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOwor
CiAgICAgbV9jbGlwU3RhY2suaW5pdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fdGV4dHVy
ZVNpemUpKTsKLSAgICBtX2NsaXBTdGFjay5hcHBseSgpOwotICAgIEdMX0NNRChnbENsZWFyQ29s
b3IoMCwgMCwgMCwgMCkpOwotICAgIEdMX0NNRChnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQp
KTsKKyAgICBtX2NsaXBTdGFjay5hcHBseShjb250ZXh0M0QpOworICAgIGNvbnRleHQzRC0+Y2xl
YXJDb2xvcigwLCAwLCAwLCAwKTsKKyAgICBjb250ZXh0M0QtPmNsZWFyKEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsKICAgICBtX3Nob3VsZENsZWFyID0gZmFsc2U7CiB9CiAK
QEAgLTgyNiwzMyArNzk3LDM3IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpjcmVhdGVGYm9JZk5l
ZWRlZCgpCiAgICAgaWYgKG1fZmJvKQogICAgICAgICByZXR1cm47CiAKLSAgICBHTF9DTUQoZ2xH
ZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKSk7Ci0gICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCBtX2ZibykpOwotICAgIEdMX0NNRChnbEZyYW1lYnVmZmVyVGV4dHVy
ZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwg
aWQoKSwgMCkpOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVN
YXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgbV9mYm8gPSBjb250ZXh0M0QtPmNyZWF0
ZUZyYW1lYnVmZmVyKCk7CisgICAgY29udGV4dDNELT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgY29udGV4dDNELT5mcmFtZWJ1ZmZl
clRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGlk
KCksIDApOwogICAgIG1fc2hvdWxkQ2xlYXIgPSB0cnVlOwogfQogCiB2b2lkIEJpdG1hcFRleHR1
cmVHTDo6YmluZCgpCiB7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
MCkpOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXIt
PmdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CiAgICAgY3JlYXRlRmJvSWZOZWVkZWQoKTsKLSAg
ICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKSk7Ci0gICAg
R0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVT
aXplLmhlaWdodCgpKSk7CisgICAgY29udGV4dDNELT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgY29udGV4dDNELT52aWV3cG9ydCgw
LCAwLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpOwogICAg
IGNsZWFySWZOZWVkZWQoKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmRhdGEoKS5wcm9qZWN0aW9u
TWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeChtX3RleHR1cmVTaXplLCB0cnVlIC8qIG1p
cnJvcmVkICovKTsKLSAgICBtX2NsaXBTdGFjay5hcHBseSgpOworICAgIG1fY2xpcFN0YWNrLmFw
cGx5KGNvbnRleHQzRCk7CiB9CiAKIEJpdG1hcFRleHR1cmVHTDo6fkJpdG1hcFRleHR1cmVHTCgp
CiB7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+
Z3JhcGhpY3NDb250ZXh0M0QoKTsKKwogICAgIGlmIChtX2lkKQotICAgICAgICBHTF9DTUQoZ2xE
ZWxldGVUZXh0dXJlcygxLCAmbV9pZCkpOworICAgICAgICBjb250ZXh0M0QtPmRlbGV0ZVRleHR1
cmUobV9pZCk7CiAKICAgICBpZiAobV9mYm8pCi0gICAgICAgIEdMX0NNRChnbERlbGV0ZUZyYW1l
YnVmZmVycygxLCAmbV9mYm8pKTsKKyAgICAgICAgY29udGV4dDNELT5kZWxldGVGcmFtZWJ1ZmZl
cihtX2Zibyk7CiAKICAgICBpZiAobV9yYm8pCi0gICAgICAgIEdMX0NNRChnbERlbGV0ZVJlbmRl
cmJ1ZmZlcnMoMSwgJm1fcmJvKSk7CisgICAgICAgIGNvbnRleHQzRC0+ZGVsZXRlUmVuZGVyYnVm
ZmVyKG1fcmJvKTsKIH0KIAogYm9vbCBCaXRtYXBUZXh0dXJlR0w6OmlzVmFsaWQoKSBjb25zdApA
QCAtODcyLDExICs4NDcsMTEgQEAgVGV4dHVyZU1hcHBlckdMOjp+VGV4dHVyZU1hcHBlckdMKCkK
IAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJpbmREZWZhdWx0U3VyZmFjZSgpCiB7Ci0gICAgR0xf
Q01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBkYXRhKCkudGFyZ2V0RnJhbWVC
dWZmZXIpKTsKKyAgICBtX2NvbnRleHQzRC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgZGF0YSgpLnRhcmdldEZyYW1lQnVmZmVyKTsKICAgICBJbnRTaXpl
IHZpZXdwb3J0U2l6ZShkYXRhKCkudmlld3BvcnRbMl0sIGRhdGEoKS52aWV3cG9ydFszXSk7CiAg
ICAgZGF0YSgpLnByb2plY3Rpb25NYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KHZpZXdw
b3J0U2l6ZSwgZGF0YSgpLlBhaW50RmxhZ3MgJiBQYWludGluZ01pcnJvcmVkKTsKLSAgICBHTF9D
TUQoZ2xWaWV3cG9ydChkYXRhKCkudmlld3BvcnRbMF0sIGRhdGEoKS52aWV3cG9ydFsxXSwgdmll
d3BvcnRTaXplLndpZHRoKCksIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSkpOwotICAgIG1fY2xpcFN0
YWNrLmFwcGx5KCk7CisgICAgbV9jb250ZXh0M0QtPnZpZXdwb3J0KGRhdGEoKS52aWV3cG9ydFsw
XSwgZGF0YSgpLnZpZXdwb3J0WzFdLCB2aWV3cG9ydFNpemUud2lkdGgoKSwgdmlld3BvcnRTaXpl
LmhlaWdodCgpKTsKKyAgICBtX2NsaXBTdGFjay5hcHBseShtX2NvbnRleHQzRC5nZXQoKSk7CiAg
ICAgZGF0YSgpLmN1cnJlbnRTdXJmYWNlLmNsZWFyKCk7CiB9CiAKQEAgLTkwNiw3ICs4ODEsNyBA
QCBib29sIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5TY2lzc29yQ2xpcChjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBj
bGlwU3RhY2soKS5jdXJyZW50KCkuc2Npc3NvckJveC5pbnRlcnNlY3QocmVjdCk7Ci0gICAgY2xp
cFN0YWNrKCkuYXBwbHkoKTsKKyAgICBjbGlwU3RhY2soKS5hcHBseShtX2NvbnRleHQzRC5nZXQo
KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTkyMCwxMCArODk1LDEwIEBAIHZvaWQgVGV4
dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVs
Vmlld01hdHJpeCwgY29uCiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+
IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2ltcGxlKTsK
IAotICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOwotICAgIEdMX0NNRChn
bEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAg
Y29uc3QgR0xmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9OwotICAg
IEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIs
IEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5pdFJlY3QpKTsKKyAgICBtX2NvbnRleHQzRC0+dXNl
UHJvZ3JhbShwcm9ncmFtLT5pZCgpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0
cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIGNvbnN0IEdDM0RmbG9hdCB1
bml0UmVjdFtdID0gezAsIDAsIDEsIDAsIDEsIDEsIDAsIDF9OworICAgIG1fY29udGV4dDNELT52
ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHVuaXRSZWN0KSk7CiAKICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCku
cHJvamVjdGlvbk1hdHJpeCkKICAgICAgICAgICAgIC5tdWx0aXBseShtb2RlbFZpZXdNYXRyaXgp
CkBAIC05MzIsMTQgKzkwNywxNCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogICAgICAgICAg
ICAgICAgIDAsIDAsIDEsIDAsCiAgICAgICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCksIHRhcmdl
dFJlY3QueSgpLCAwLCAxKSk7CiAKLSAgICBjb25zdCBHTGZsb2F0IG00W10gPSB7CisgICAgY29u
c3QgR0MzRGZsb2F0IG00W10gPSB7CiAgICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4Lm0xMigp
LCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKICAgICAgICAgbWF0cml4Lm0yMSgpLCBtYXRy
aXgubTIyKCksIG1hdHJpeC5tMjMoKSwgbWF0cml4Lm0yNCgpLAogICAgICAgICBtYXRyaXgubTMx
KCksIG1hdHJpeC5tMzIoKSwgbWF0cml4Lm0zMygpLCBtYXRyaXgubTM0KCksCiAgICAgICAgIG1h
dHJpeC5tNDEoKSwgbWF0cml4Lm00MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQogICAg
IH07CiAKLSAgICBjb25zdCBHTGZsb2F0IG00YWxsW10gPSB7CisgICAgY29uc3QgR0MzRGZsb2F0
IG00YWxsW10gPSB7CiAgICAgICAgIDIsIDAsIDAsIDAsCiAgICAgICAgIDAsIDIsIDAsIDAsCiAg
ICAgICAgIDAsIDAsIDEsIDAsCkBAIC05NDgsNDMgKzkyMyw0MiBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRy
aXgsIGNvbgogCiAgICAgaW50JiBzdGVuY2lsSW5kZXggPSBjbGlwU3RhY2soKS5jdXJyZW50KCku
c3RlbmNpbEluZGV4OwogCi0gICAgR0xfQ01EKGdsRW5hYmxlKEdMX1NURU5DSUxfVEVTVCkpOwor
ICAgIG1fY29udGV4dDNELT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCk7
CiAKICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgZG8gYW55IGFjdHVhbCBkcmF3aW5nLgotICAg
IEdMX0NNRChnbFN0ZW5jaWxGdW5jKEdMX05FVkVSLCBzdGVuY2lsSW5kZXgsIHN0ZW5jaWxJbmRl
eCkpOworICAgIG1fY29udGV4dDNELT5zdGVuY2lsRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6TkVW
RVIsIHN0ZW5jaWxJbmRleCwgc3RlbmNpbEluZGV4KTsKIAogICAgIC8vIE9wZXJhdGUgb25seSBv
biB0aGUgc3RlbmNpbEluZGV4IGFuZCBhYm92ZS4KLSAgICBHTF9DTUQoZ2xTdGVuY2lsTWFzaygw
eGZmICYgfihzdGVuY2lsSW5kZXggLSAxKSkpOworICAgIG1fY29udGV4dDNELT5zdGVuY2lsTWFz
aygweGZmICYgfihzdGVuY2lsSW5kZXggLSAxKSk7CiAKICAgICAvLyBGaXJzdCBjbGVhciB0aGUg
ZW50aXJlIGJ1ZmZlciBhdCB0aGUgY3VycmVudCBpbmRleC4KLSAgICBHTF9DTUQoZ2xVbmlmb3Jt
TWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIEdMX0ZBTFNFLCBtNGFsbCkp
OwotICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9aRVJPLCBHTF9aRVJPLCBHTF9aRVJPKSk7Ci0g
ICAgR0xfQ01EKGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpKTsKKyAgICBtX2Nv
bnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBm
YWxzZSwgY29uc3RfY2FzdDxHQzNEZmxvYXQqPihtNGFsbCkpOworICAgIG1fY29udGV4dDNELT5z
dGVuY2lsT3AoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJP
LCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTyk7CisgICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMo
R3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7CiAKICAgICAvLyBOb3cgYXBw
bHkgdGhlIGN1cnJlbnQgaW5kZXggdG8gdGhlIG5ldyBxdWFkLgotICAgIEdMX0NNRChnbFN0ZW5j
aWxPcChHTF9SRVBMQUNFLCBHTF9SRVBMQUNFLCBHTF9SRVBMQUNFKSk7Ci0gICAgR0xfQ01EKGds
VW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBHTF9GQUxTRSwg
bTQpKTsKLSAgICBHTF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpOwor
ICAgIG1fY29udGV4dDNELT5zdGVuY2lsT3AoR3JhcGhpY3NDb250ZXh0M0Q6OlJFUExBQ0UsIEdy
YXBoaWNzQ29udGV4dDNEOjpSRVBMQUNFLCBHcmFwaGljc0NvbnRleHQzRDo6UkVQTEFDRSk7Cisg
ICAgbV9jb250ZXh0M0QtPnVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+bWF0cml4TG9jYXRpb24o
KSwgMSwgZmFsc2UsIGNvbnN0X2Nhc3Q8R0MzRGZsb2F0Kj4obTQpKTsKKyAgICBtX2NvbnRleHQz
RC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKIAog
ICAgIC8vIENsZWFyIHRoZSBzdGF0ZS4KLSAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xTdGVuY2lsTWFz
aygwKSk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFt
LT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxNYXNrKDApOwogCiAg
ICAgLy8gSW5jcmVhc2Ugc3RlbmNpbEluZGV4IGFuZCBhcHBseSBzdGVuY2lsIHRlc3RpbmcuCiAg
ICAgc3RlbmNpbEluZGV4ICo9IDI7Ci0gICAgY2xpcFN0YWNrKCkuYXBwbHkoKTsKKyAgICBjbGlw
U3RhY2soKS5hcHBseShtX2NvbnRleHQzRC5nZXQoKSk7CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjplbmRDbGlwKCkKIHsKICAgICBjbGlwU3RhY2soKS5wb3AoKTsKLSAgICBjbGlwU3RhY2so
KS5hcHBseSgpOworICAgIGNsaXBTdGFjaygpLmFwcGx5KG1fY29udGV4dDNELmdldCgpKTsKIH0K
IAogUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRleHR1
cmUoKQogewotICAgIEJpdG1hcFRleHR1cmVHTCogdGV4dHVyZSA9IG5ldyBCaXRtYXBUZXh0dXJl
R0woKTsKLSAgICB0ZXh0dXJlLT5zZXRUZXh0dXJlTWFwcGVyKHRoaXMpOworICAgIEJpdG1hcFRl
eHR1cmVHTCogdGV4dHVyZSA9IG5ldyBCaXRtYXBUZXh0dXJlR0wodGhpcyk7CiAgICAgcmV0dXJu
IGFkb3B0UmVmKHRleHR1cmUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKaW5kZXggMDc2ZTY1Zi4u
OGE3MmQ2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaApAQCAtMjMsOCArMjMsOCBAQAogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUg
Ik9wZW5HTFNoaW1zLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgIlRy
YW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKQEAgLTM4LDcgKzM4LDYgQEAgY2xhc3MgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW07CiBjbGFzcyBUZXh0dXJlTWFwcGVyR0wgOiBwdWJsaWMgVGV4dHVy
ZU1hcHBlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlckdM
PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlckdMKTsgfQotICAg
IFRleHR1cmVNYXBwZXJHTCgpOwogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJHTCgpOwogCiAg
ICAgZW51bSBGbGFnIHsKQEAgLTU0LDcgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0
dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKSBPVkVSUklERTsKICAgICB2
aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MsIGNvbnN0IElu
dFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0
IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlLCB1bnNpZ25lZCBleHBvc2VkRWRnZXMgPSBBbGxF
ZGdlcyk7CiAKLSNpZiBkZWZpbmVkKEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSkKKyNpZiAhVVNF
KFRFWE1BUF9PUEVOR0xfRVNfMikKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmVSZWN0YW5n
bGVBUkIodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXpl
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1h
c2tUZXh0dXJlKTsKICNlbmRpZgogCkBAIC02Niw2ICs2NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIEludFNpemUgbWF4VGV4dHVyZVNpemUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBJbnRT
aXplKDIwMDAsIDIwMDApOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+
IGNyZWF0ZVRleHR1cmUoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0KCkgT1ZFUlJJREUgeyByZXR1cm4gbV9jb250ZXh0OyB9CisgICAgaW5s
aW5lIEdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGV4dDNELmdldCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldEdyYXBoaWNzQ29udGV4
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpIE9WRVJSSURFIHsgbV9jb250ZXh0ID0gY29udGV4
dDsgfQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQpAQCAtNzUsNyArNzUsNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRFbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcoYm9vbCBlbmFibGVk
KSB7IG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nID0gZW5hYmxlZDsgfQogCiBwcml2
YXRlOgotCiAgICAgc3RydWN0IENsaXBTdGF0ZSB7CiAgICAgICAgIEludFJlY3Qgc2Npc3NvckJv
eDsKICAgICAgICAgaW50IHN0ZW5jaWxJbmRleDsKQEAgLTg5LDcgKzg4LDcgQEAgcHJpdmF0ZToK
ICAgICBwdWJsaWM6CiAgICAgICAgIHZvaWQgcHVzaCgpOwogICAgICAgICB2b2lkIHBvcCgpOwot
ICAgICAgICB2b2lkIGFwcGx5KCk7CisgICAgICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
M0QqKTsKICAgICAgICAgaW5saW5lIENsaXBTdGF0ZSYgY3VycmVudCgpIHsgcmV0dXJuIGNsaXBT
dGF0ZTsgfQogICAgICAgICB2b2lkIGluaXQoY29uc3QgSW50UmVjdCYpOwogCkBAIC0xMDksMTYg
KzEwOCwxOSBAQCBwcml2YXRlOgogICAgICAgICBGbG9hdFF1YWQgdGFyZ2V0UmVjdE1hcHBlZFRv
VW5pdFNxdWFyZTsKICAgICB9OwogCisgICAgVGV4dHVyZU1hcHBlckdMKCk7CisKICAgICBib29s
IGRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncywgY29u
c3QgRmxvYXRSZWN0JiBvcmlnaW5hbFRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUq
IG1hc2tUZXh0dXJlLCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpOwogICAgIHZvaWQgZHJhd1RleHR1
cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiwgdWludDMyX3Qg
dGV4dHVyZSwgRmxhZ3MsIGNvbnN0IERyYXdRdWFkJiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSog
bWFza1RleHR1cmUpOwotICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbSosIEdMZW51bSBkcmF3aW5nTW9kZSwgYm9vbCBuZWVkc0JsZW5kaW5nKTsKKyAgICB2
b2lkIGRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qLCBHQzNEZW51bSBk
cmF3aW5nTW9kZSwgYm9vbCBuZWVkc0JsZW5kaW5nKTsKIAogICAgIGJvb2wgYmVnaW5TY2lzc29y
Q2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpOwogICAg
IHZvaWQgYmluZERlZmF1bHRTdXJmYWNlKCk7CiAgICAgQ2xpcFN0YWNrJiBjbGlwU3RhY2soKTsK
ICAgICBpbmxpbmUgVGV4dHVyZU1hcHBlckdMRGF0YSYgZGF0YSgpIHsgcmV0dXJuICptX2RhdGE7
IH0KLSAgICBUZXh0dXJlTWFwcGVyR0xEYXRhKiBtX2RhdGE7CiAgICAgR3JhcGhpY3NDb250ZXh0
KiBtX2NvbnRleHQ7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQzRDsK
KyAgICBUZXh0dXJlTWFwcGVyR0xEYXRhKiBtX2RhdGE7CiAgICAgQ2xpcFN0YWNrIG1fY2xpcFN0
YWNrOwogICAgIGJvb2wgbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmc7CiAKQEAgLTEz
NSw3ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbml0aWFsaXplU3RlbmNpbCgpOwogICAg
IH5CaXRtYXBUZXh0dXJlR0woKTsKICAgICB2aXJ0dWFsIHVpbnQzMl90IGlkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZDsgfQotICAgIHVpbnQzMl90IHRleHR1cmVUYXJnZXQoKSBjb25zdCB7IHJldHVy
biBHTF9URVhUVVJFXzJEOyB9CisgICAgdWludDMyX3QgdGV4dHVyZVRhcmdldCgpIGNvbnN0IHsg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOyB9CiAgICAgSW50U2l6ZSB0ZXh0
dXJlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVNpemU7IH0KICAgICB2b2lkIHNldFRl
eHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlckdMKiB0ZXhtYXApIHsgbV90ZXh0dXJlTWFwcGVyID0g
dGV4bWFwOyB9CiAgICAgdm9pZCB1cGRhdGVDb250ZW50cyhJbWFnZSosIGNvbnN0IEludFJlY3Qm
LCBjb25zdCBJbnRQb2ludCYpOwpAQCAtMTQ3LDIwICsxNDksMjIgQEAgcHVibGljOgogI2VuZGlm
CiAKIHByaXZhdGU6Ci0gICAgR0x1aW50IG1faWQ7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2lk
OwogICAgIEludFNpemUgbV90ZXh0dXJlU2l6ZTsKICAgICBJbnRSZWN0IG1fZGlydHlSZWN0Owot
ICAgIEdMdWludCBtX2ZibzsKLSAgICBHTHVpbnQgbV9yYm87CisgICAgUGxhdGZvcm0zRE9iamVj
dCBtX2ZibzsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fcmJvOwogICAgIGJvb2wgbV9zaG91bGRD
bGVhcjsKLSAgICBUZXh0dXJlTWFwcGVyR0wqIG1fdGV4dHVyZU1hcHBlcjsKICAgICBUZXh0dXJl
TWFwcGVyR0w6OkNsaXBTdGFjayBtX2NsaXBTdGFjazsKLSAgICBCaXRtYXBUZXh0dXJlR0woKQor
ICAgIFRleHR1cmVNYXBwZXJHTCogbV90ZXh0dXJlTWFwcGVyOworCisgICAgQml0bWFwVGV4dHVy
ZUdMKCk7CisgICAgQml0bWFwVGV4dHVyZUdMKFRleHR1cmVNYXBwZXJHTCogdGV4dHVyZU1hcHBl
cikKICAgICAgICAgOiBtX2lkKDApCiAgICAgICAgICwgbV9mYm8oMCkKICAgICAgICAgLCBtX3Ji
bygwKQogICAgICAgICAsIG1fc2hvdWxkQ2xlYXIodHJ1ZSkKLSAgICAgICAgLCBtX3RleHR1cmVN
YXBwZXIoMCkKKyAgICAgICAgLCBtX3RleHR1cmVNYXBwZXIodGV4dHVyZU1hcHBlcikKICAgICB7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAppbmRl
eCAwZmJkYmU5Li5mYThhYzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlci5jcHAKQEAgLTMwLDI1ICszMCwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNp
Zm5kZWYgVEVYTUFQX09QRU5HTF9FU18yCi0jZGVmaW5lIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJ
T05TIFwKLSAgICAiI2RlZmluZSBsb3dwXG4jZGVmaW5lIGhpZ2hwXG4iCi0jZGVmaW5lIE9FUzJf
RlJBR01FTlRfU0hBREVSX0RFRkFVTFRfUFJFQ0lTSU9OCi0jZWxzZQotI2RlZmluZSBPRVMyX1BS
RUNJU0lPTl9ERUZJTklUSU9OUwotI2RlZmluZSBPRVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxU
X1BSRUNJU0lPTiBcCi0gICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyBcbiIKLSNlbmRpZgot
Ci0jZGVmaW5lIFNUUklOR0lGWV9WQUwoc3JjLi4uKSAjc3JjCi0jZGVmaW5lIFZFUlRFWF9TSEFE
RVIoc3JjLi4uKSBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9OU1wKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNUUklOR0lGWV9WQUwoc3JjKQotI2RlZmluZSBGUkFHTUVOVF9TSEFERVIo
c3JjLi4uKSBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9OU1wKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgT0VTMl9GUkFHTUVOVF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT05cCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUklOR0lGWV9WQUwoc3JjKQorI2RlZmluZSBT
VFJJTkdJRlkoc3JjLi4uKSAjc3JjCiAKIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRl
clNvdXJjZU9wYWNpdHlBbmRNYXNrID0KLSAgICBGUkFHTUVOVF9TSEFERVIoCisgICAgU1RSSU5H
SUZZKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgdW5pZm9ybSBz
YW1wbGVyMkQgc19zb3VyY2U7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfbWFzazsKICAg
ICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKQEAgLTY0LDcgKzUwLDggQEAgc3Rh
dGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sgPQogICAg
ICk7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5
QW5kTWFzayA9Ci0gICAgRlJBR01FTlRfU0hBREVSKAorICAgIFNUUklOR0lGWSgKKyAgICAgICAg
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBz
X3NvdXJjZTsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfbWFzazsKICAgICAgICAg
dW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKQEAgLTgwLDcgKzY3LDcgQEAgc3RhdGljIGNv
bnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdE9wYWNpdHlBbmRNYXNrID0KICAgICAp
OwogCiBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sg
PQotICAgIFZFUlRFWF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAogICAgICAgICB1bmlmb3JtIG1h
dDQgdV9tYXRyaXg7CiAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X2ZsaXA7CiAgICAgICAg
IGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwpAQCAtOTUsNyArODIsOCBAQCBzdGF0aWMgY29uc3Qg
Y2hhciogdmVydGV4U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2sgPQogICAgICk7CiAKIHN0YXRp
YyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVNpbXBsZSA9Ci0gICAgRlJBR01FTlRf
U0hBREVSKAorICAgIFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7
CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwogICAgICAgICB1bmlmb3JtIGxv
d3AgZmxvYXQgdV9vcGFjaXR5OwogICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VU
ZXhDb29yZDsKQEAgLTEwNyw3ICs5NSw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNo
YWRlclNvdXJjZVNpbXBsZSA9CiAgICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50
U2hhZGVyU291cmNlQW50aWFsaWFzaW5nTm9NYXNrID0KLSAgICBGUkFHTUVOVF9TSEFERVIoCisg
ICAgU1RSSU5HSUZZKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAg
dW5pZm9ybSBzYW1wbGVyMkQgc19zb3VyY2U7CiAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2
X3NvdXJjZVRleENvb3JkOwogICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwpA
QCAtMTQ1LDcgKzEzNCw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJj
ZUFudGlhbGlhc2luZ05vTWFzayA9CiAgICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdt
ZW50U2hhZGVyU291cmNlUmVjdFNpbXBsZSA9Ci0gICAgRlJBR01FTlRfU0hBREVSKAorICAgIFNU
UklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgIHVuaWZv
cm0gc2FtcGxlcjJEUmVjdCBzX3NvdXJjZTsKICAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzIgdV90
ZXh0dXJlU2l6ZTsKICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKQEAgLTE1
OCw3ICsxNDgsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0
U2ltcGxlID0KICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNl
U2ltcGxlID0KLSAgICBWRVJURVhfU0hBREVSKAorICAgIFNUUklOR0lGWSgKICAgICAgICAgdW5p
Zm9ybSBtYXQ0IHVfbWF0cml4OwogICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9mbGlwOwog
ICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKQEAgLTE3MSw3ICsxNjEsNyBAQCBzdGF0
aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlU2ltcGxlID0KICAgICApOwogCiBzdGF0
aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlU29saWRDb2xvciA9Ci0gICAgVkVSVEVY
X1NIQURFUigKKyAgICBTVFJJTkdJRlkoCiAgICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsK
ICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CiAgICAgICAgIHZvaWQgbWFpbih2b2lk
KQpAQCAtMTgyLDcgKzE3Miw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2VTb2xpZENvbG9yID0KIAogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3Vy
Y2VTb2xpZENvbG9yID0KLSAgICBWRVJURVhfU0hBREVSKAorICAgIFNUUklOR0lGWSgKKyAgICAg
ICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgIHVuaWZvcm0gdmVjNCB1X2NvbG9y
OwogICAgICAgICB2b2lkIG1haW4odm9pZCkKICAgICAgICAgewpAQCAtMjEyLDIyICsyMDMsMjIg
QEAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OmdldFNoYWRlclByb2cKIAogICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkgewog
ICAgIGNhc2UgU2ltcGxlOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1TaW1wbGU6OmNyZWF0ZSgpOworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1TaW1wbGU6OmNyZWF0ZShtX2NvbnRleHQpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIFJlY3RTaW1wbGU6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVJlY3RTaW1wbGU6OmNyZWF0ZSgpOworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpjcmVhdGUobV9jb250ZXh0KTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBBbnRpYWxpYXNpbmdOb01hc2s6Ci0gICAgICAgIHByb2dyYW0gPSBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6Y3JlYXRlKCk7Cisg
ICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05v
TWFzazo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgT3BhY2l0
eUFuZE1hc2s6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9w
YWNpdHlBbmRNYXNrOjpjcmVhdGUoKTsKKyAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OmNyZWF0ZShtX2NvbnRleHQpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFJlY3RPcGFjaXR5QW5kTWFzazoKLSAgICAgICAgcHJvZ3JhbSA9IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpjcmVhdGUoKTsKKyAg
ICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRN
YXNrOjpjcmVhdGUobV9jb250ZXh0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTb2xpZENv
bG9yOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENv
bG9yOjpjcmVhdGUoKTsKKyAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU29saWRDb2xvcjo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSW52YWxpZDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMzYsOCArMjI3
LDkgQEAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6OmdldFNoYWRlclByb2cKICAgICByZXR1cm4gcHJvZ3JhbTsKIH0KIAot
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNv
bnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJT
b3VyY2UpCi0gICAgOiBtX2lkKDApCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IGNo
YXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2Up
CisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1faWQoMCkKICAgICAsIG1fdmVydGV4
QXR0cmliKDApCiAgICAgLCBtX3ZlcnRleFNoYWRlcigwKQogICAgICwgbV9mcmFnbWVudFNoYWRl
cigwKQpAQCAtMjU2LDQ2ICsyNDgsNDYgQEAgdm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bTo6aW5pdGlhbGl6ZVByb2dyYW0oKQogewogICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNv
dXJjZVByb2dyYW0gPSB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKTsKICAgICBjb25zdCBjaGFyKiBmcmFn
bWVudFNoYWRlclNvdXJjZVByb2dyYW0gPSBmcmFnbWVudFNoYWRlclNvdXJjZSgpOwotICAgIEdM
dWludCB2ZXJ0ZXhTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9WRVJURVhfU0hBREVSKTsKLSAg
ICBHTHVpbnQgZnJhZ21lbnRTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9GUkFHTUVOVF9TSEFE
RVIpOwotICAgIGdsU2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgMSwgJnZlcnRleFNoYWRlclNv
dXJjZVByb2dyYW0sIDApOwotICAgIGdsU2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCAxLCAm
ZnJhZ21lbnRTaGFkZXJTb3VyY2VQcm9ncmFtLCAwKTsKLSAgICBHTHVpbnQgcHJvZ3JhbUlEID0g
Z2xDcmVhdGVQcm9ncmFtKCk7Ci0gICAgZ2xDb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7Ci0g
ICAgZ2xDb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0
IHZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNE
OjpWRVJURVhfU0hBREVSKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYWdtZW50U2hhZGVyID0g
bV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURF
Uik7CisgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCB2ZXJ0ZXhTaGFk
ZXJTb3VyY2VQcm9ncmFtKTsKKyAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShmcmFnbWVudFNo
YWRlciwgZnJhZ21lbnRTaGFkZXJTb3VyY2VQcm9ncmFtKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW1JRCA9IG1fY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOworICAgIG1fY29udGV4dC0+
Y29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRl
cihmcmFnbWVudFNoYWRlcik7CiAKLSAgICBnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZlcnRl
eFNoYWRlcik7Ci0gICAgZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcik7
Ci0gICAgZ2xMaW5rUHJvZ3JhbShwcm9ncmFtSUQpOworICAgIG1fY29udGV4dC0+YXR0YWNoU2hh
ZGVyKHByb2dyYW1JRCwgdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRl
cihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmxpbmtQcm9ncmFt
KHByb2dyYW1JRCk7CiAKLSAgICBtX3ZlcnRleEF0dHJpYiA9IGdsR2V0QXR0cmliTG9jYXRpb24o
cHJvZ3JhbUlELCAiYV92ZXJ0ZXgiKTsKKyAgICBtX3ZlcnRleEF0dHJpYiA9IG1fY29udGV4dC0+
Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiYV92ZXJ0ZXgiKTsKIAogICAgIG1faWQgPSBw
cm9ncmFtSUQ7CiAgICAgbV92ZXJ0ZXhTaGFkZXIgPSB2ZXJ0ZXhTaGFkZXI7CiAgICAgbV9mcmFn
bWVudFNoYWRlciA9IGZyYWdtZW50U2hhZGVyOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpnZXRVbmlmb3JtTG9jYXRpb24oR0xpbnQgJnZhcmlhYmxlLCBjb25zdCBjaGFy
KiBuYW1lKQordm9pZCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0
aW9uKEdDM0RpbnQgJnZhcmlhYmxlLCBjb25zdCBjaGFyKiBuYW1lKQogewotICAgIHZhcmlhYmxl
ID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9pZCwgbmFtZSk7CisgICAgdmFyaWFibGUgPSBtX2Nv
bnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX2lkLCBuYW1lKTsKICAgICBBU1NFUlQodmFyaWFi
bGUgPj0gMCk7CiB9CiAKIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0oKQogewotICAgIEdMdWludCBwcm9ncmFtSUQgPSBtX2lkOworICAgIFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbUlEID0gbV9pZDsKICAgICBpZiAoIXByb2dyYW1JRCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgZ2xEZXRhY2hTaGFkZXIocHJvZ3JhbUlELCBtX3ZlcnRleFNo
YWRlcik7Ci0gICAgZ2xEZWxldGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIpOwotICAgIGdsRGV0YWNo
U2hhZGVyKHByb2dyYW1JRCwgbV9mcmFnbWVudFNoYWRlcik7Ci0gICAgZ2xEZWxldGVTaGFkZXIo
bV9mcmFnbWVudFNoYWRlcik7Ci0gICAgZ2xEZWxldGVQcm9ncmFtKHByb2dyYW1JRCk7CisgICAg
bV9jb250ZXh0LT5kZXRhY2hTaGFkZXIocHJvZ3JhbUlELCBtX3ZlcnRleFNoYWRlcik7CisgICAg
bV9jb250ZXh0LT5kZWxldGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+
ZGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV9mcmFnbWVudFNoYWRlcik7CisgICAgbV9jb250ZXh0
LT5kZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5kZWxldGVQ
cm9ncmFtKHByb2dyYW1JRCk7CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxl
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpCi0gICAgOiBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291
cmNlU2ltcGxlKQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OlRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU2ltcGxlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDog
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlU2lt
cGxlLCBmcmFnbWVudFNoYWRlclNvdXJjZVNpbXBsZSkKIHsKICAgICBpbml0aWFsaXplUHJvZ3Jh
bSgpOwogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX2ZsaXBMb2NhdGlvbiwgInVfZmxpcCIpOwpA
QCAtMzA0LDE2ICsyOTYsMTYgQEAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCkKICAgICBnZXRVbmlmb3JtTG9jYXRpb24o
bV9vcGFjaXR5TG9jYXRpb24sICJ1X29wYWNpdHkiKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1Tb2xpZENvbG9yOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3Io
KQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlU29s
aWRDb2xvciwgZnJhZ21lbnRTaGFkZXJTb3VyY2VTb2xpZENvbG9yKQorVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1Tb2xpZENvbG9yOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29s
b3IoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTb2xpZENvbG9yLCBmcmFnbWVudFNo
YWRlclNvdXJjZVNvbGlkQ29sb3IpCiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICBn
ZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7CiAgICAgZ2V0
VW5pZm9ybUxvY2F0aW9uKG1fY29sb3JMb2NhdGlvbiwgInVfY29sb3IiKTsKIH0KIAotVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVJlY3RTaW1wbGUoKQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odmVydGV4U2hh
ZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RTaW1wbGUpCitUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
UmVjdFNpbXBsZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICA6IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21l
bnRTaGFkZXJTb3VyY2VSZWN0U2ltcGxlKQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAg
ICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwpAQCAt
MzIzLDggKzMxNSw4IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKCkKICAgICBnZXRVbmlmb3JtTG9jYXRp
b24obV9vcGFjaXR5TG9jYXRpb24sICJ1X29wYWNpdHkiKTsKIH0KIAotVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFj
aXR5QW5kTWFzaygpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFk
ZXJTb3VyY2VPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFz
aykKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQp
CisgICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJT
b3VyY2VPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzaykK
IHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21h
dHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKQEAgLTMzNCw4ICszMjYsOCBAQCBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bU9wYWNpdHlBbmRNYQogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlMb2NhdGlvbiwg
InVfb3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5
QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soKQot
ICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlT3BhY2l0
eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdE9wYWNpdHlBbmRNYXNrKQorVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQor
ICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291
cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdE9wYWNpdHlBbmRNYXNr
KQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1f
bWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwpAQCAtMzQ1LDggKzMzNyw4IEBAIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVJlY3RPcGFjCiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9u
LCAidV9vcGFjaXR5Iik7CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFz
aW5nTm9NYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaygp
Ci0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1w
bGUsIGZyYWdtZW50U2hhZGVyU291cmNlQW50aWFsaWFzaW5nTm9NYXNrKQorVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtQW50aWFsaWFzaW5nTm9NYXNrKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDog
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlU2lt
cGxlLCBmcmFnbWVudFNoYWRlclNvdXJjZUFudGlhbGlhc2luZ05vTWFzaykKIHsKICAgICBpbml0
aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9u
LCAidV9tYXRyaXgiKTsKQEAgLTM1Niw5ICszNDgsOSBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbUFudGlhbGlhc2luZ05vTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxp
YQogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX2ZsaXBMb2NhdGlvbiwgInVfZmxpcCIpOwogfQog
Ci1UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIo
KQorVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiB7
Ci0gICAgQVNTRVJUKGluaXRpYWxpemVPcGVuR0xTaGltcygpKTsKIH0KIAogVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6On5UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpCkBAIC0zNzMsMTgg
KzM2NSwxOSBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6flRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyKCkKIAogU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp+U3RhbmRhcmRGaWx0ZXJQcm9n
cmFtKCkKIHsKLSAgICBnbERldGFjaFNoYWRlcihtX2lkLCBtX3ZlcnRleFNoYWRlcik7Ci0gICAg
Z2xEZWxldGVTaGFkZXIobV92ZXJ0ZXhTaGFkZXIpOwotICAgIGdsRGV0YWNoU2hhZGVyKG1faWQs
IG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsRGVsZXRlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIp
OwotICAgIGdsRGVsZXRlUHJvZ3JhbShtX2lkKTsKKyAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRl
cihtX2lkLCBtX3ZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIobV92
ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG1faWQsIG1fZnJhZ21l
bnRTaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIp
OworICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX2lkKTsKIH0KIAotU3RhbmRhcmRGaWx0
ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRp
b25UeXBlIHR5cGUsIHVuc2lnbmVkIHBhc3MpCi0gICAgOiBtX2lkKDApCitTdGFuZGFyZEZpbHRl
clByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUsIHVuc2lnbmVkIHBhc3MpCisg
ICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1faWQoMCkKIHsKICAgICBjb25zdCBjaGFy
KiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPQotICAgICAgICAgICAgVkVSVEVYX1NIQURFUigKKyAgICAg
ICAgICAgIFNUUklOR0lGWSgKICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRl
eDsKICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3RleENvb3JkOwogICAgICAgICAg
ICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOwpAQCAtMzk2LDggKzM4OSw3IEBA
IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJh
dGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgICAgICApOwogCiAjZGVmaW5lIFNUQU5E
QVJEX0ZJTFRFUih4Li4uKSBcCi0gICAgICAgIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TXAot
ICAgICAgICBPRVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTlwKKyAgICAgICAg
InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuIlwKICAgICAgICAgInZhcnlpbmcgaGlnaHAgdmVj
MiB2X3RleENvb3JkO1xuIlwKICAgICAgICAgInVuaWZvcm0gaGlnaHAgZmxvYXQgdV9hbW91bnQ7
XG4iXAogICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgdV90ZXh0dXJlO1xuIlwKQEAgLTQ5MCw3
ICs0ODIsOCBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShG
aWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICApOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKLSAgICAgICAgZnJhZ21lbnRT
aGFkZXJTb3VyY2UgPSBGUkFHTUVOVF9TSEFERVIoCisgICAgICAgIGZyYWdtZW50U2hhZGVyU291
cmNlID0gU1RSSU5HSUZZKAorICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAg
ICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKICAgICAgICAgICAgIHVu
aWZvcm0gbG93cCB2ZWMyIHVfYmx1clJhZGl1czsKICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxl
cjJEIHVfdGV4dHVyZTsKQEAgLTUyMyw3ICs1MTYsOCBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06
OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlw
ZQogICAgICAgICBzd2l0Y2ggKHBhc3MpIHsKICAgICAgICAgY2FzZSAwOiB7CiAgICAgICAgICAg
ICAvLyBGaXJzdCBwYXNzOiBob3Jpem9udGFsIGFscGhhIGJsdXIuCi0gICAgICAgICAgICBmcmFn
bWVudFNoYWRlclNvdXJjZSA9IEZSQUdNRU5UX1NIQURFUigKKyAgICAgICAgICAgIGZyYWdtZW50
U2hhZGVyU291cmNlID0gU1RSSU5HSUZZKAorICAgICAgICAgICAgICAgIHByZWNpc2lvbiBtZWRp
dW1wIGZsb2F0OwogICAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3Jk
OwogICAgICAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X3NoYWRvd0JsdXJSYWRpdXM7
CiAgICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzIgdV9zaGFkb3dPZmZzZXQ7CkBAIC01
NTYsNyArNTUwLDggQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dy
YW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgICAgIH0KICAg
ICAgICAgY2FzZSAxOiB7CiAgICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogdmVydGljYWwgYWxw
aGEgYmx1ciBhbmQgY29tcG9zaXRlIHdpdGggb3JpZ2luLgotICAgICAgICAgICAgZnJhZ21lbnRT
aGFkZXJTb3VyY2UgPSBGUkFHTUVOVF9TSEFERVIoCisgICAgICAgICAgICBmcmFnbWVudFNoYWRl
clNvdXJjZSA9IFNUUklOR0lGWSgKKyAgICAgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBm
bG9hdDsKICAgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKICAg
ICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9zaGFkb3dCbHVyUmFkaXVzOwogICAg
ICAgICAgICAgICAgIHVuaWZvcm0gbG93cCB2ZWM0IHVfc2hhZG93Q29sb3I7CkBAIC02MDIsMjYg
KzU5NywyNSBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShG
aWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogCiAgICAgaWYgKCFmcmFnbWVudFNo
YWRlclNvdXJjZSkKICAgICAgICAgcmV0dXJuOwotICAgIEdMdWludCB2ZXJ0ZXhTaGFkZXIgPSBn
bENyZWF0ZVNoYWRlcihHTF9WRVJURVhfU0hBREVSKTsKLSAgICBHTHVpbnQgZnJhZ21lbnRTaGFk
ZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIpOwotICAgIGdsU2hhZGVyU291
cmNlKHZlcnRleFNoYWRlciwgMSwgJnZlcnRleFNoYWRlclNvdXJjZSwgMCk7Ci0gICAgZ2xTaGFk
ZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJjZSwgMCk7Ci0g
ICAgR0x1aW50IHByb2dyYW1JRCA9IGdsQ3JlYXRlUHJvZ3JhbSgpOwotICAgIGdsQ29tcGlsZVNo
YWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsQ29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7
CisgICAgUGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNo
YWRlcihHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7CisgICAgUGxhdGZvcm0zRE9i
amVjdCBmcmFnbWVudFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpOworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKHZl
cnRleFNoYWRlciwgdmVydGV4U2hhZGVyU291cmNlKTsKKyAgICBtX2NvbnRleHQtPnNoYWRlclNv
dXJjZShmcmFnbWVudFNoYWRlciwgZnJhZ21lbnRTaGFkZXJTb3VyY2UpOworICAgIFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbUlEID0gbV9jb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7CisgICAgbV9j
b250ZXh0LT5jb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5jb21w
aWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgR0xjaGFy
IGxvZ1sxMDBdOwotICAgIEdMaW50IGxlbjsKLSAgICBnbEdldFNoYWRlckluZm9Mb2coZnJhZ21l
bnRTaGFkZXIsIDEwMCwgJmxlbiwgbG9nKTsKKyAgICBTdHJpbmcgbG9nOworICAgIG1fY29udGV4
dC0+Z2V0U2hhZGVySW5mb0xvZyhmcmFnbWVudFNoYWRlcik7CiAgICAgV1RGTG9nKCZMb2dDb21w
b3NpdGluZywgIiVzXG4iLCBsb2cpOwogI2VuZGlmCi0gICAgZ2xBdHRhY2hTaGFkZXIocHJvZ3Jh
bUlELCB2ZXJ0ZXhTaGFkZXIpOwotICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21l
bnRTaGFkZXIpOwotICAgIGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlEKTsKKyAgICBtX2NvbnRleHQt
PmF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5h
dHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5s
aW5rUHJvZ3JhbShwcm9ncmFtSUQpOwogCi0gICAgbV92ZXJ0ZXhBdHRyaWIgPSBnbEdldEF0dHJp
YkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdmVydGV4Iik7Ci0gICAgbV90ZXhDb29yZEF0dHJpYiA9
IGdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiYV90ZXhDb29yZCIpOwotICAgIG1fdGV4
dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVf
dGV4dHVyZSIpOworICAgIG1fdmVydGV4QXR0cmliID0gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2Nh
dGlvbihwcm9ncmFtSUQsICJhX3ZlcnRleCIpOworICAgIG1fdGV4Q29vcmRBdHRyaWIgPSBtX2Nv
bnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdGV4Q29vcmQiKTsKKyAgICBt
X3RleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtSUQsICJ1X3RleHR1cmUiKTsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJ
QToKQEAgLTYzMSwyMSArNjI1LDIxIEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRG
aWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkNPTlRSQVNUOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgotICAgICAgICBt
X3VuaWZvcm1Mb2NhdGlvbnMuYW1vdW50ID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlE
LCAidV9hbW91bnQiKTsKKyAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCA9IG1fY29u
dGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfYW1vdW50Iik7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgotICAgICAgICBtX3VuaWZv
cm1Mb2NhdGlvbnMuYmx1ci5yYWRpdXMgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQs
ICJ1X2JsdXJSYWRpdXMiKTsKLSAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmJsdXIuZ2F1c3Np
YW5LZXJuZWwgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFuS2Vy
bmVsIik7CisgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLnJhZGl1cyA9IG1fY29udGV4
dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfYmx1clJhZGl1cyIpOworICAgICAg
ICBtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktlcm5lbCA9IG1fY29udGV4dC0+Z2V0
VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfZ2F1c3NpYW5LZXJuZWwiKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgotICAgICAgICBt
X3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMgPSBnbEdldFVuaWZvcm1Mb2NhdGlv
bihwcm9ncmFtSUQsICJ1X3NoYWRvd0JsdXJSYWRpdXMiKTsKLSAgICAgICAgbV91bmlmb3JtTG9j
YXRpb25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dy
YW1JRCwgInVfZ2F1c3NpYW5LZXJuZWwiKTsKKyAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNo
YWRvdy5ibHVyUmFkaXVzID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlE
LCAidV9zaGFkb3dCbHVyUmFkaXVzIik7CisgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFk
b3cuZ2F1c3NpYW5LZXJuZWwgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFt
SUQsICJ1X2dhdXNzaWFuS2VybmVsIik7CiAgICAgICAgIGlmICghcGFzcykKLSAgICAgICAgICAg
IG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cub2Zmc2V0ID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24o
cHJvZ3JhbUlELCAidV9zaGFkb3dPZmZzZXQiKTsKKyAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0
aW9ucy5zaGFkb3cub2Zmc2V0ID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3Jh
bUlELCAidV9zaGFkb3dPZmZzZXQiKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBX
ZSBvbmx5IG5lZWQgdGhlIGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0dXJlIGluIHRoZSBzZWNv
bmQgcGFzcywgdGhlIGZpcnN0IHBhc3MgaXMgb25seSBhIGhvcml6b250YWwgYWxwaGEgYmx1ci4K
LSAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29sb3IgPSBnbEdldFVuaWZv
cm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X3NoYWRvd0NvbG9yIik7Ci0gICAgICAgICAgICBtX3Vu
aWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbnRlbnRUZXh0dXJlID0gZ2xHZXRVbmlmb3JtTG9jYXRp
b24ocHJvZ3JhbUlELCAidV9jb250ZW50VGV4dHVyZSIpOworICAgICAgICAgICAgbV91bmlmb3Jt
TG9jYXRpb25zLnNoYWRvdy5jb2xvciA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW1JRCwgInVfc2hhZG93Q29sb3IiKTsKKyAgICAgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9u
cy5zaGFkb3cuY29udGVudFRleHR1cmUgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtSUQsICJ1X2NvbnRlbnRUZXh0dXJlIik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKQEAgLTY1Niw5ICs2NTAsOSBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06
OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlw
ZQogICAgIG1fZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNoYWRlcjsKIH0KIAotUGFzc1JlZlB0
cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKEZp
bHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQorUGFzc1Jl
ZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6Y3JlYXRl
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5
cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKIHsKLSAgICBSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9n
cmFtPiBwcm9ncmFtID0gYWRvcHRSZWYobmV3IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbSh0eXBlLCBw
YXNzKSk7CisgICAgUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGFkb3B0
UmVmKG5ldyBTdGFuZGFyZEZpbHRlclByb2dyYW0oY29udGV4dCwgdHlwZSwgcGFzcykpOwogICAg
IGlmICghcHJvZ3JhbS0+bV9pZCkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTY5NCwyMSArNjg4
LDIxIEBAIHN0YXRpYyBmbG9hdCogZ2F1c3NpYW5LZXJuZWwoKQogICAgIHJldHVybiBrZXJuZWw7
CiB9CiAKLXZvaWQgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpwcmVwYXJlKGNvbnN0IEZpbHRlck9w
ZXJhdGlvbiYgb3BlcmF0aW9uLCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRTaXplJiBzaXplLCBH
THVpbnQgY29udGVudFRleHR1cmUpCit2b2lkIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6cHJlcGFy
ZShjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwgdW5zaWduZWQgcGFzcywgY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgR0MzRHVpbnQgY29udGVudFRleHR1cmUpCiB7Ci0gICAgZ2xVc2VQcm9n
cmFtKG1faWQpOworICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShtX2lkKTsKICAgICBzd2l0Y2gg
KG9wZXJhdGlvbi5nZXRPcGVyYXRpb25UeXBlKCkpIHsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6R1JBWVNDQUxFOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhV
RV9ST1RBVEU6Ci0gICAgICAgIGdsVW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQs
IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihvcGVy
YXRpb24pLmFtb3VudCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobV91bmlmb3Jt
TG9jYXRpb25zLmFtb3VudCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpC
UklHSFRORVNTOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgZ2xVbmlmb3JtMWYobV91bmlmb3Jt
TG9jYXRpb25zLmFtb3VudCwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2Zl
ckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOworICAgICAgICBtX2NvbnRl
eHQtPnVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuYW1vdW50LCBzdGF0aWNfY2FzdDxjb25z
dCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91
bnQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7
CiAgICAgICAgIGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJsdXIgPSBzdGF0aWNfY2FzdDxj
b25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKTsKQEAgLTcyMCw4ICs3MTQsOCBA
QCB2b2lkIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6cHJlcGFyZShjb25zdCBGaWx0ZXJPcGVyYXRp
b24mIG9wZXJhdGlvbiwgdW5zaWduZWQgcAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByYWRp
dXMuc2V0V2lkdGgoZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyLnN0ZERldmlhdGlvbigpLCBzaXpl
LndpZHRoKCkpIC8gc2l6ZS53aWR0aCgpKTsKIAotICAgICAgICBnbFVuaWZvcm0yZihtX3VuaWZv
cm1Mb2NhdGlvbnMuYmx1ci5yYWRpdXMsIHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkp
OwotICAgICAgICBnbFVuaWZvcm0xZnYobV91bmlmb3JtTG9jYXRpb25zLmJsdXIuZ2F1c3NpYW5L
ZXJuZWwsIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsKKyAg
ICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobV91bmlmb3JtTG9jYXRpb25zLmJsdXIucmFkaXVz
LCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT51
bmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLmdhdXNzaWFuS2VybmVsLCBHQVVTU0lB
Tl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKQEAgLTcyOSwy
MCArNzIzLDIwIEBAIHZvaWQgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpwcmVwYXJlKGNvbnN0IEZp
bHRlck9wZXJhdGlvbiYgb3BlcmF0aW9uLCB1bnNpZ25lZCBwCiAgICAgICAgIHN3aXRjaCAocGFz
cykgewogICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiB2ZXJ0aWNh
bCBhbHBoYSBibHVyLgotICAgICAgICAgICAgZ2xVbmlmb3JtMmYobV91bmlmb3JtTG9jYXRpb25z
LnNoYWRvdy5vZmZzZXQsIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigpLngoKSkgLyBmbG9hdChzaXpl
LndpZHRoKCkpLCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS55KCkpIC8gZmxvYXQoc2l6ZS5oZWln
aHQoKSkpOwotICAgICAgICAgICAgZ2xVbmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRv
dy5ibHVyUmFkaXVzLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLndpZHRoKCkp
KTsKLSAgICAgICAgICAgIGdsVW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93Lmdh
dXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwo
KSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX3VuaWZvcm1Mb2NhdGlvbnMu
c2hhZG93Lm9mZnNldCwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueCgpKSAvIGZsb2F0KHNpemUu
d2lkdGgoKSksIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigpLnkoKSkgLyBmbG9hdChzaXplLmhlaWdo
dCgpKSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlv
bnMuc2hhZG93LmJsdXJSYWRpdXMsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUu
d2lkdGgoKSkpOworICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KG1fdW5pZm9ybUxv
Y2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwsIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRI
LCBnYXVzc2lhbktlcm5lbCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDE6
CiAgICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogd2UgbmVlZCB0aGUgc2hhZG93IGNvbG9yIGFu
ZCB0aGUgY29udGVudCB0ZXh0dXJlIGZvciBjb21wb3NpdGluZy4KLSAgICAgICAgICAgIGdsVW5p
Zm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1cywgc2hhZG93LnN0ZERl
dmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICAgICAgZ2xVbmlmb3Jt
MWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwsIEdBVVNTSUFOX0tF
Uk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsKLSAgICAgICAgICAgIGdsQWN0aXZl
VGV4dHVyZShHTF9URVhUVVJFMSk7Ci0gICAgICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIGNvbnRlbnRUZXh0dXJlKTsKLSAgICAgICAgICAgIGdsVW5pZm9ybTFpKG1fdW5pZm9y
bUxvY2F0aW9ucy5zaGFkb3cuY29udGVudFRleHR1cmUsIDEpOworICAgICAgICAgICAgbV9jb250
ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzLCBzaGFk
b3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLmhlaWdodCgpKSk7CisgICAgICAgICAgICBt
X2NvbnRleHQtPnVuaWZvcm0xZnYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5nYXVzc2lhbktl
cm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOworICAg
ICAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFMSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBjb250ZW50VGV4dHVyZSk7CisgICAgICAgICAgICBtX2NvbnRleHQt
PnVuaWZvcm0xaShtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbnRlbnRUZXh0dXJlLCAxKTsK
ICAgICAgICAgICAgIGZsb2F0IHIsIGcsIGIsIGE7CiAgICAgICAgICAgICBzaGFkb3cuY29sb3Io
KS5nZXRSR0JBKHIsIGcsIGIsIGEpOwotICAgICAgICAgICAgZ2xVbmlmb3JtNGYobV91bmlmb3Jt
TG9jYXRpb25zLnNoYWRvdy5jb2xvciwgciwgZywgYiwgYSk7CisgICAgICAgICAgICBtX2NvbnRl
eHQtPnVuaWZvcm00ZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbG9yLCByLCBnLCBiLCBh
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtNzU5
LDcgKzc1Myw3IEBAIFBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyRm9yRmlsdGVyCiAgICAgaW50IGtleSA9IGludCh0
eXBlKSB8IChwYXNzIDw8IDE2KTsKICAgICBGaWx0ZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0g
bV9maWx0ZXJNYXAuZmluZChrZXkpOwogICAgIGlmIChpdGVyYXRvciA9PSBtX2ZpbHRlck1hcC5l
bmQoKSkgewotICAgICAgICBwcm9ncmFtID0gU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpjcmVhdGUo
dHlwZSwgcGFzcyk7CisgICAgICAgIHByb2dyYW0gPSBTdGFuZGFyZEZpbHRlclByb2dyYW06OmNy
ZWF0ZShtX2NvbnRleHQsIHR5cGUsIHBhc3MpOwogICAgICAgICBpZiAoIXByb2dyYW0pCiAgICAg
ICAgICAgICByZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIu
aAppbmRleCA3ODU0OThlLi5iZTQ1YzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuaApAQCAtMjQsOSArMjQsOSBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQogCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5j
bHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlckdMLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIK
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBA
IC00NCwzOSArNDQsNDAgQEAgY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI7CiAKIGNs
YXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0+IHsKIHB1YmxpYzoKLSAgICBHTHVpbnQgaWQoKSB7IHJldHVy
biBtX2lkOyB9Ci0gICAgR0x1aW50IHZlcnRleEF0dHJpYigpIHsgcmV0dXJuIG1fdmVydGV4QXR0
cmliOyB9CisgICAgUGxhdGZvcm0zRE9iamVjdCBpZCgpIHsgcmV0dXJuIG1faWQ7IH0KKyAgICBH
QzNEdWludCB2ZXJ0ZXhBdHRyaWIoKSB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQogCi0gICAg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNl
LCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSk7CisgICAgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJT
b3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKTsKICAgICB2aXJ0dWFsIH5U
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSgpOwogCiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmUo
ZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSopIHsgfQotICAgIEdMaW50IG1hdHJp
eExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhMb2NhdGlvbjsgfQotICAgIEdMaW50
IGZsaXBMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmxpcExvY2F0aW9uOyB9Ci0gICAgR0xp
bnQgdGV4dHVyZVNpemVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVNpemVMb2Nh
dGlvbjsgfQotICAgIEdMaW50IHNvdXJjZVRleHR1cmVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOyB9Ci0gICAgR0xpbnQgbWFza1RleHR1cmVMb2NhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fbWFza1RleHR1cmVMb2NhdGlvbjsgfQotICAgIEdMaW50IG9w
YWNpdHlMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eUxvY2F0aW9uOyB9CisgICAg
R0MzRGludCBtYXRyaXhMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4TG9jYXRpb247
IH0KKyAgICBHQzNEaW50IGZsaXBMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmxpcExvY2F0
aW9uOyB9CisgICAgR0MzRGludCB0ZXh0dXJlU2l6ZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV90ZXh0dXJlU2l6ZUxvY2F0aW9uOyB9CisgICAgR0MzRGludCBzb3VyY2VUZXh0dXJlTG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVRleHR1cmVMb2NhdGlvbjsgfQorICAgIEdDM0Rp
bnQgbWFza1RleHR1cmVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFza1RleHR1cmVMb2Nh
dGlvbjsgfQorICAgIEdDM0RpbnQgb3BhY2l0eUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9v
cGFjaXR5TG9jYXRpb247IH0KIAotICAgIHN0YXRpYyBib29sIGlzVmFsaWRVbmlmb3JtTG9jYXRp
b24oR0xpbnQgbG9jYXRpb24pIHsgcmV0dXJuIGxvY2F0aW9uID49IDA7IH0KKyAgICBzdGF0aWMg
Ym9vbCBpc1ZhbGlkVW5pZm9ybUxvY2F0aW9uKEdDM0RpbnQgbG9jYXRpb24pIHsgcmV0dXJuIGxv
Y2F0aW9uID49IDA7IH0KIAogcHJvdGVjdGVkOgotICAgIHZvaWQgZ2V0VW5pZm9ybUxvY2F0aW9u
KEdMaW50JiB2YXIsIGNvbnN0IGNoYXIqIG5hbWUpOworICAgIHZvaWQgZ2V0VW5pZm9ybUxvY2F0
aW9uKEdDM0RpbnQmIHZhciwgY29uc3QgY2hhciogbmFtZSk7CiAgICAgdm9pZCBpbml0aWFsaXpl
UHJvZ3JhbSgpOwogICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKCkgeyB9CiAgICAgY29uc3Qg
Y2hhciogdmVydGV4U2hhZGVyU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhTaGFkZXJT
b3VyY2UuZGF0YSgpOyB9CiAgICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UoKSBj
b25zdCB7IHJldHVybiBtX2ZyYWdtZW50U2hhZGVyU291cmNlLmRhdGEoKTsgfQogCi0gICAgR0x1
aW50IG1faWQ7Ci0gICAgR0x1aW50IG1fdmVydGV4QXR0cmliOwotICAgIEdMdWludCBtX3ZlcnRl
eFNoYWRlcjsKLSAgICBHTHVpbnQgbV9mcmFnbWVudFNoYWRlcjsKLSAgICBHTGludCBtX21hdHJp
eExvY2F0aW9uOwotICAgIEdMaW50IG1fZmxpcExvY2F0aW9uOwotICAgIEdMaW50IG1fdGV4dHVy
ZVNpemVMb2NhdGlvbjsKLSAgICBHTGludCBtX3NvdXJjZVRleHR1cmVMb2NhdGlvbjsKLSAgICBH
TGludCBtX29wYWNpdHlMb2NhdGlvbjsKLSAgICBHTGludCBtX21hc2tUZXh0dXJlTG9jYXRpb247
CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0
IG1faWQ7CisgICAgR0MzRHVpbnQgbV92ZXJ0ZXhBdHRyaWI7CisgICAgUGxhdGZvcm0zRE9iamVj
dCBtX3ZlcnRleFNoYWRlcjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZnJhZ21lbnRTaGFkZXI7
CisgICAgR0MzRGludCBtX21hdHJpeExvY2F0aW9uOworICAgIEdDM0RpbnQgbV9mbGlwTG9jYXRp
b247CisgICAgR0MzRGludCBtX3RleHR1cmVTaXplTG9jYXRpb247CisgICAgR0MzRGludCBtX3Nv
dXJjZVRleHR1cmVMb2NhdGlvbjsKKyAgICBHQzNEaW50IG1fb3BhY2l0eUxvY2F0aW9uOworICAg
IEdDM0RpbnQgbV9tYXNrVGV4dHVyZUxvY2F0aW9uOwogCiBwcml2YXRlOgogICAgIENTdHJpbmcg
bV92ZXJ0ZXhTaGFkZXJTb3VyY2U7CkBAIC04NywzMyArODgsMzYgQEAgcHJpdmF0ZToKIGNsYXNz
IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0YW5kYXJkRmlsdGVy
UHJvZ3JhbT4gewogcHVibGljOgogICAgIHZpcnR1YWwgflN0YW5kYXJkRmlsdGVyUHJvZ3JhbSgp
OwotICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYsIHVuc2ln
bmVkIHBhc3MsIGNvbnN0IEludFNpemUmLCBHTHVpbnQgY29udGVudFRleHR1cmUpOwotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gY3JlYXRlKEZpbHRlck9wZXJh
dGlvbjo6T3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgcGFzcyk7Ci0gICAgR0x1aW50IHZlcnRleEF0
dHJpYigpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4QXR0cmliOyB9Ci0gICAgR0x1aW50IHRleENv
b3JkQXR0cmliKCkgY29uc3QgeyByZXR1cm4gbV90ZXhDb29yZEF0dHJpYjsgfQotICAgIEdMdWlu
dCB0ZXh0dXJlVW5pZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlv
bjsgfQorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYsIHVu
c2lnbmVkIHBhc3MsIGNvbnN0IEludFNpemUmLCBHQzNEdWludCBjb250ZW50VGV4dHVyZSk7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBjcmVhdGUoR3JhcGhp
Y3NDb250ZXh0M0QqLCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIHBh
c3MpOworICAgIEdDM0R1aW50IHZlcnRleEF0dHJpYigpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4
QXR0cmliOyB9CisgICAgR0MzRHVpbnQgdGV4Q29vcmRBdHRyaWIoKSBjb25zdCB7IHJldHVybiBt
X3RleENvb3JkQXR0cmliOyB9CisgICAgR0MzRHVpbnQgdGV4dHVyZVVuaWZvcm0oKSBjb25zdCB7
IHJldHVybiBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb247IH0KK3Byb3RlY3RlZDoKKyAgICBHcmFw
aGljc0NvbnRleHQzRCogbV9jb250ZXh0OwogcHJpdmF0ZToKLSAgICBTdGFuZGFyZEZpbHRlclBy
b2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBwYXNzKTsKLSAg
ICBHTHVpbnQgbV9pZDsKLSAgICBHTHVpbnQgbV92ZXJ0ZXhTaGFkZXI7Ci0gICAgR0x1aW50IG1f
ZnJhZ21lbnRTaGFkZXI7Ci0gICAgR0x1aW50IG1fdmVydGV4QXR0cmliOwotICAgIEdMdWludCBt
X3RleENvb3JkQXR0cmliOwotICAgIEdMdWludCBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb247Cisg
ICAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKCk7CisgICAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEdy
YXBoaWNzQ29udGV4dDNEKiwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCB1bnNpZ25l
ZCBwYXNzKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1faWQ7CisgICAgUGxhdGZvcm0zRE9iamVj
dCBtX3ZlcnRleFNoYWRlcjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZnJhZ21lbnRTaGFkZXI7
CisgICAgR0MzRHVpbnQgbV92ZXJ0ZXhBdHRyaWI7CisgICAgR0MzRHVpbnQgbV90ZXhDb29yZEF0
dHJpYjsKKyAgICBHQzNEdWludCBtX3RleHR1cmVVbmlmb3JtTG9jYXRpb247CiAgICAgdW5pb24g
ewotICAgICAgICBHTHVpbnQgYW1vdW50OworICAgICAgICBHQzNEdWludCBhbW91bnQ7CiAKICAg
ICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIEdMdWludCByYWRpdXM7Ci0gICAgICAgICAgICBH
THVpbnQgZ2F1c3NpYW5LZXJuZWw7CisgICAgICAgICAgICBHQzNEdWludCByYWRpdXM7CisgICAg
ICAgICAgICBHQzNEdWludCBnYXVzc2lhbktlcm5lbDsKICAgICAgICAgfSBibHVyOwogCiAgICAg
ICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBHTHVpbnQgYmx1clJhZGl1czsKLSAgICAgICAgICAg
IEdMdWludCBjb2xvcjsKLSAgICAgICAgICAgIEdMdWludCBvZmZzZXQ7Ci0gICAgICAgICAgICBH
THVpbnQgY29udGVudFRleHR1cmU7Ci0gICAgICAgICAgICBHTHVpbnQgZ2F1c3NpYW5LZXJuZWw7
CisgICAgICAgICAgICBHQzNEdWludCBibHVyUmFkaXVzOworICAgICAgICAgICAgR0MzRHVpbnQg
Y29sb3I7CisgICAgICAgICAgICBHQzNEdWludCBvZmZzZXQ7CisgICAgICAgICAgICBHQzNEdWlu
dCBjb250ZW50VGV4dHVyZTsKKyAgICAgICAgICAgIEdDM0R1aW50IGdhdXNzaWFuS2VybmVsOwog
ICAgICAgICB9IHNoYWRvdzsKICAgICB9IG1fdW5pZm9ybUxvY2F0aW9uczsKIH07CkBAIC0xMjEs
NzcgKzEyNSw4OSBAQCBwcml2YXRlOgogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVNpbXBsZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU+IGNy
ZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1T
aW1wbGU+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1T
aW1wbGUoY29udGV4dCkpOwogICAgIH0KIAogcHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU2ltcGxlKEdyYXBoaWNzQ29udGV4dDNEKik7Citwcml2YXRlOgogICAgIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCk7CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdFNpbXBsZT4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZShjb250ZXh0KSk7CiAgICAg
fQogCitwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxl
KEdyYXBoaWNzQ29udGV4dDNEKik7CiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtUmVjdFNpbXBsZSgpOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1PcGFjaXR5QW5kTWFzayA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1P
cGFjaXR5QW5kTWFzaz4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayhjb250ZXh0KSk7
CiAgICAgfQogCitwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFj
aXR5QW5kTWFzayhHcmFwaGljc0NvbnRleHQzRCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCk7CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayA6IHB1YmxpYyBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s+IGNyZWF0ZSgpCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s+
IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1h
c2soKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soY29udGV4dCkpOwogICAgIH0KIAorcHJvdGVjdGVkOgor
ICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKEdyYXBoaWNz
Q29udGV4dDNEKik7CiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVj
dE9wYWNpdHlBbmRNYXNrKCk7CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVNvbGlkQ29sb3IgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRD
b2xvcj4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNvbGlkQ29sb3I+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1Tb2xpZENvbG9yKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcihjb250ZXh0KSk7CiAgICAgfQogCi0gICAgR0xpbnQg
Y29sb3JMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JMb2NhdGlvbjsgfQorICAgIEdD
M0RpbnQgY29sb3JMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JMb2NhdGlvbjsgfQog
Citwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yKEdy
YXBoaWNzQ29udGV4dDNEKik7CiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU29saWRDb2xvcigpOwotICAgIEdMaW50IG1fY29sb3JMb2NhdGlvbjsKKyAgICBHQzNEaW50
IG1fY29sb3JMb2NhdGlvbjsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
QW50aWFsaWFzaW5nTm9NYXNrIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bUFudGlhbGlhc2luZ05vTWFzaz4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaz4gY3JlYXRlKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzaygpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2lu
Z05vTWFzayhjb250ZXh0KSk7CiAgICAgfQogCi0gICAgR0xpbnQgZXhwYW5kZWRRdWFkVmVydGlj
ZXNJblRleHR1cmVDb29yZGluYXRlc0xvY2F0aW9uKCkgeyByZXR1cm4gbV9leHBhbmRlZFF1YWRW
ZXJ0aWNlc0luVGV4dHVyZUNvcmRpbmF0ZXNMb2NhdGlvbjsgfQotICAgIEdMaW50IGV4cGFuZGVk
UXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uKCkgeyByZXR1cm4gbV9leHBhbmRlZFF1YWRF
ZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgZXhwYW5kZWRRdWFkVmVy
dGljZXNJblRleHR1cmVDb29yZGluYXRlc0xvY2F0aW9uKCkgeyByZXR1cm4gbV9leHBhbmRlZFF1
YWRWZXJ0aWNlc0luVGV4dHVyZUNvcmRpbmF0ZXNMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgZXhw
YW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSB7IHJldHVybiBtX2V4cGFuZGVk
UXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uOyB9CiAKK3Byb3RlY3RlZDoKKyAgICBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayhHcmFwaGljc0NvbnRleHQz
RCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2lu
Z05vTWFzaygpOwogCi0gICAgR0xpbnQgbV9leHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNv
cmRpbmF0ZXNMb2NhdGlvbjsKLSAgICBHTGludCBtX2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5T
cGFjZUxvY2F0aW9uOworICAgIEdDM0RpbnQgbV9leHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVy
ZUNvcmRpbmF0ZXNMb2NhdGlvbjsKKyAgICBHQzNEaW50IG1fZXhwYW5kZWRRdWFkRWRnZXNJblNj
cmVlblNwYWNlTG9jYXRpb247CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ciB7CkBAIC0yMDYsNyArMjIyLDggQEAgcHVibGljOgogICAgICAgICBTb2xpZENvbG9yCiAgICAg
fTsKIAotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCk7CisgICAgVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIoKSB7IH07CisgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoR3Jh
cGhpY3NDb250ZXh0M0QqKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cigpOwogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQpAQCAtMjIxLDEyICsyMzgsMTIgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8U2hhZGVyVHlwZSwgUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiwgRGVmYXVsdEhhc2g8aW50Pjo6SGFzaCwgSGFzaFRy
YWl0czxpbnQ+ID4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7CiAgICAgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1NYXAgbV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDsKKyAg
ICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwogCiAjaWYgRU5BQkxFKENTU19GSUxURVJT
KQogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+
ID4gRmlsdGVyTWFwOwogICAgIEZpbHRlck1hcCBtX2ZpbHRlck1hcDsKICNlbmRpZgotCiB9Owog
CiB9Cg==
</data>
<flag name="review"
          id="170312"
          type_id="1"
          status="+"
          setter="noam"
    />
    <flag name="commit-queue"
          id="170313"
          type_id="3"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160499</attachid>
            <date>2012-08-24 14:06:18 -0700</date>
            <delta_ts>2012-08-24 15:29:54 -0700</delta_ts>
            <desc>patch [RenderToCurrentGLContext]</desc>
            <filename>RenderToCurrentGLContext_upload.diff</filename>
            <type>text/plain</type>
            <size>21164</size>
            <attacher name="Roland Takacs">rtakacs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmODBjNTQ2Li40YzgzZGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTItMDgtMjIgIEhlbGRlciBDb3JyZWlhICA8aGVsZGVyLmNvcnJlaWFAbm9raWEuY29t
PiwgUm9sYW5kIFRha2FjcyAgPHJ0YWthY3NAaW5mLnUtc3plZ2VkLmh1PgorCisgICAgICAgIFtU
ZXhtYXBdIE1vdmUgVGV4dHVyZU1hcHBlckdMIHRvIHVzZSBHcmFwaGljc0NvbnRleHQzRAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2NzIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHBhcnQg
b2YgYSBzZXZlcmFsIHBhdGNoLXJlZmFjdG9yaW5nLgorCisgICAgICAgIEludHJvZHVjZSBhZGRp
dGlvbmFsIGxvZ2ljIGluIEdyYXBoaWNzQ29udGV4dDNEUXQgdG8gc3VwcG9ydCBhCisgICAgICAg
IG5ldyBSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQgUmVuZGVyU3R5bGUuIFRoaXMgaXMgbmVjZXNz
YXJ5IHRvCisgICAgICAgIHVzZSBHQzNEIGZvciBvdGhlciB0aGluZ3MgdGhhbiBXZWJHTCwgbGlr
ZSBUZXh0dXJlTWFwcGVyLgorCisgICAgICAgIFRoZSBHQzNEIGNvbnN0cnVjdG9yIG5vdyBhY2Nl
cHRzIGEgUmVuZGVyU3R5bGUgaW5zdGVhZCBvZiB0aGUKKyAgICAgICAgYm9vbGVhbiByZW5kZXJE
aXJlY3RseVRvSG9zdFdpbmRvdyBhbmQgdGh1cyBtaW1pY3MgY3JlYXRlKCkncworICAgICAgICBz
aWduYXR1cmUuIFRoaXMgaGFzIGJlZW4gY2hhbmdlZCBmb3IgYWxsIHBvcnRzIGluIHRoaXMgcGF0
Y2guCisKKyAgICAgICAgQSBuZXcgR0MzRDo6Y3JlYXRlRm9yQ3VycmVudEdMQ29udGV4dCgpIGJ1
aWxkZXIgd2FzCisgICAgICAgIGludHJvZHVjZWQgdG8gYmV0dGVyIGFic3RyYWN0IHRoZSBnb2Fs
IG9mIHVzaW5nIEdDM0Qgd2l0aCB0aGUKKyAgICAgICAgY3VycmVudCBjb250ZXh0LgorCisgICAg
ICAgIFRoZSBwYXRjaCB3YXMgb3JpZ2luYWxseSBkZXZlbG9wZWQgYnkgSGVsZGVyIENvcnJlaWEg
YW5kIGZpbmlzaGVkCisgICAgICAgIGJ5IFJvbGFuZCBUYWthY3MuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLCByZWZhY3RvcmluZy4KKwogMjAxMi0wOC0yNCAgQ2hyaXMgRXZhbnMgIDxjZXZhbnNA
Z29vZ2xlLmNvbT4KIAogICAgICAgICBVcGRhdGUgY29tbWVudCByZWdhcmRpbmcgcm9vdCBub2Rl
IGhhbmRsaW5nIGluIFhQYXRoIGZvciBkZXRhY2hlZCB0cmVlcy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0dyYXBo
aWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCmluZGV4IDEyN2ZjZmEuLmY4ZTQ2ZDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250
ZXh0M0RDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
c3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcApAQCAtNDMsNyArNDMsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRl
eHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcywgSG9zdFdpbmRvdyosIGJvb2wpCitH
cmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUpCiB7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBv
cnQvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAppbmRleCBmNmI3
MzBkLi4wZDU3MWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9zdXBwb3J0L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3Bw
CkBAIC03Nyw3ICs3Nyw3IEBAIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6fkdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZSgpCiAKIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoUGFz
c093blB0cjxXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEPiB3ZWJDb250ZXh0LCBib29sIHBy
ZXNlcnZlRHJhd2luZ0J1ZmZlcikKIHsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMoKSwgMCwgZmFsc2UgLyogb25zY3JlZW4gKi8pKTsKKyAgICBSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0Qo
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMoKSwgMCkpOwogCiAgICAgT3duUHRyPEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZT4gcHJpdiA9IGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGUod2ViQ29udGV4dCwgcHJlc2VydmVEcmF3aW5nQnVmZmVyKSk7CiAgICAgY29udGV4
dC0+bV9wcml2YXRlID0gcHJpdi5yZWxlYXNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCBmNWU2ZjFmLi4xMDg3
NmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmgKQEAgLTQ1OCw3ICs0NTgsOCBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFJl
bmRlclN0eWxlIHsKICAgICAgICAgUmVuZGVyT2Zmc2NyZWVuLAotICAgICAgICBSZW5kZXJEaXJl
Y3RseVRvSG9zdFdpbmRvdworICAgICAgICBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdywKKyAg
ICAgICAgUmVuZGVyVG9DdXJyZW50R0xDb250ZXh0CiAgICAgfTsKIAogICAgIGNsYXNzIENvbnRl
eHRMb3N0Q2FsbGJhY2sgewpAQCAtNDc3LDYgKzQ3OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dEVycm9yTWVzc2FnZUNhbGxiYWNrKFBhc3NPd25QdHI8RXJyb3JNZXNzYWdlQ2FsbGJhY2s+KTsK
IAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGUoQXR0cmli
dXRlcywgSG9zdFdpbmRvdyosIFJlbmRlclN0eWxlID0gUmVuZGVyT2Zmc2NyZWVuKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlRm9yQ3VycmVudEdMQ29u
dGV4dCgpOwogICAgIH5HcmFwaGljc0NvbnRleHQzRCgpOwogCiAjaWYgUExBVEZPUk0oTUFDKQpA
QCAtODY3LDcgKzg2OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2hhbm5l
bEJpdHNCeUZvcm1hdChHQzNEZW51bSk7CiAKICAgcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRl
eHQzRChBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sIHJlbmRl
ckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICBHcmFwaGljc0NvbnRleHQzRChBdHRyaWJ1dGVz
LCBIb3N0V2luZG93KiwgUmVuZGVyU3R5bGUgPSBSZW5kZXJPZmZzY3JlZW4pOwogCiAgICAgLy8g
RWFjaCBwbGF0Zm9ybSBtdXN0IHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRo
b2QuCiAgICAgLy8KQEAgLTk4Miw2ICs5ODQsNyBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNz
IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjsKIAogICAgIEF0dHJpYnV0ZXMgbV9hdHRyczsKKyAg
ICBSZW5kZXJTdHlsZSBtX3JlbmRlclN0eWxlOwogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+ID4g
bV92ZXJ0ZXhBcnJheTsKIAogICAgIEdDM0R1aW50IG1fdGV4dHVyZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0
M0RCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcAppbmRleCBmMTA4MWVmLi5kMzAw
MmNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0dyYXBoaWNzQ29udGV4dDNEQmxhY2tCZXJyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9HcmFwaGljc0NvbnRleHQzREJsYWNrQmVycnku
Y3BwCkBAIC00NywxMCArNDcsMTAgQEAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShBdHRyaWJ1dGVzIGF0dHJpYnMsIEhvc3QKICAgICBpZiAo
cmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRyaWJz
LCBob3N0V2luZG93LCBmYWxzZSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgR3JhcGhpY3ND
b250ZXh0M0QoYXR0cmlicywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUpKTsKIH0KIAotR3JhcGhp
Y3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJzLCBIb3N0V2luZG93KiwgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykK
K0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyosIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJT
dHlsZSByZW5kZXJTdHlsZSkKICAgICA6IG1fY3VycmVudFdpZHRoKDApCiAgICAgLCBtX2N1cnJl
bnRIZWlnaHQoMCkKICAgICAsIG1fY29udGV4dChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhp
Y3M6OmNyZWF0ZVdlYkdMQ29udGV4dCgpKQpAQCAtNjcsNyArNjcsNyBAQCBHcmFwaGljc0NvbnRl
eHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0
cnMsIEhvc3RXaQogICAgICwgbV9ib3VuZFRleHR1cmUwKDApCiAgICAgLCBtX2lzSW1hZ2luYXRp
b25IYXJkd2FyZSgwKQogewotICAgIGlmICghcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpIHsK
KyAgICBpZiAocmVuZGVyU3R5bGUgIT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpIHsKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgICAgIG1fY29tcG9zaXRpbmdMYXll
ciA9IFdlYkdMTGF5ZXJXZWJLaXRUaHJlYWQ6OmNyZWF0ZSgpOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQz
RENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dDNEQ2Fpcm8uY3BwCmluZGV4IDk4MjJkNGUuLjY0YTJmYWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNE
Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCkBAIC02MSwxMSArNjEsMTEgQEAgUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShHcmFwaGljc0NvbnRl
eHQzRDo6QXR0cmkKICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNz
Q29udGV4dDNEKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3csIGZhbHNlKSk7CisgICAgUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNE
KGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSk7CiAgICAgcmV0dXJuIGNvbnRl
eHQucmVsZWFzZSgpOwogfQogCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0Qo
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyosIGJv
b2wpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0
M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyosIEdyYXBoaWNzQ29udGV4dDNE
OjpSZW5kZXJTdHlsZSkKICAgICA6IG1fY3VycmVudFdpZHRoKDApCiAgICAgLCBtX2N1cnJlbnRI
ZWlnaHQoMCkKICAgICAsIG1fYXR0cnMoYXR0cmlidXRlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3ND
b250ZXh0M0RDbHV0dGVyLmNwcAppbmRleCA0YjRiMGUzLi5hYmZiZDQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNE
Q2x1dHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRl
ci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwCkBAIC00MiwxMSArNDIsMTEgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMs
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSBy
ZW5kZXJTdHlsZSkKIHsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBh
ZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cmlidXRlcywgaG9zdFdpbmRvdywgZmFs
c2UpKTsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihu
ZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cmlidXRlcywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUp
KTsKICAgICByZXR1cm4gY29udGV4dC5yZWxlYXNlKCk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNE
OjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1
dGVzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sKQorR3JhcGhpY3NDb250ZXh0M0Q6Okdy
YXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMs
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSBy
ZW5kZXJTdHlsZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQz
REVmbC5jcHAKaW5kZXggZWZlMWExMi4uNzIxZDdjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwu
Y3BwCkBAIC0zNiwxMiArMzYsMTIgQEAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmkKICAgICBpZiAo
IWludGVybmFsKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRycywgaG9z
dFdpbmRvdywgcmVuZGVyRGlyZWN0bHlUb0V2YXNHTE9iamVjdCkpOworICAgIFJlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChh
dHRycywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUpKTsKICAgICBjb250ZXh0LT5tX3ByaXZhdGUg
PSBpbnRlcm5hbC5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIGNvbnRleHQucmVsZWFzZSgpOwogfQog
Ci1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wgcmVuZGVyRGly
ZWN0bHlUb0hvc3RXaW5kb3cpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0Qo
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKICAgICA6IG1f
Y3VycmVudFdpZHRoKDApCiAgICAgLCBtX2N1cnJlbnRIZWlnaHQoMCkKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1h
Yy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRl
eHQzRE1hYy5tbQppbmRleCBkNTcwZjQ4Li42OGY0ZjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFj
Lm1tCkBAIC05MiwxMSArOTIsMTEgQEAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmkKICAgICAvLyBU
aGlzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgcmVuZGVyaW5nIGRp
cmVjdGx5IHRvIHRoZSBIb3N0V2luZG93LgogICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJE
aXJlY3RseVRvSG9zdFdpbmRvdykKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0
dHJzLCBob3N0V2luZG93LCBmYWxzZSkpOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRv
dywgcmVuZGVyU3R5bGUpKTsKICAgICByZXR1cm4gY29udGV4dC0+bV9jb250ZXh0T2JqID8gY29u
dGV4dC5yZWxlYXNlKCkgOiAwOwogfQogCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250
ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3csIGJvb2wpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cs
IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKICAgICA6IG1fY3Vy
cmVudFdpZHRoKDApCiAgICAgLCBtX2N1cnJlbnRIZWlnaHQoMCkKICAgICAsIG1fY29udGV4dE9i
aigwKQpAQCAtMTE2LDYgKzExNiw3IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRl
eHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpCiAgICAgLCBt
X3ByaXZhdGUoYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSh0aGlzKSkpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cpOworICAgIFVOVVNFRF9QQVJBTShyZW5kZXJT
dHlsZSk7CiAKICAgICBWZWN0b3I8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+IGF0dHJpYnM7CiAg
ICAgQ0dMUGl4ZWxGb3JtYXRPYmogcGl4ZWxGb3JtYXRPYmogPSAwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggZTBjMmQ2ZS4uOTIzZGQ4MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCkBAIC03
MCw2ICs3MCwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1Bhc3NSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGb3JDdXJyZW50R0xDb250ZXh0
KCkKK3sKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihu
ZXcgR3JhcGhpY3NDb250ZXh0M0QoQXR0cmlidXRlcygpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6
UmVuZGVyVG9DdXJyZW50R0xDb250ZXh0KSk7CisgICAgcmV0dXJuIGNvbnRleHQtPm1fcHJpdmF0
ZSA/IGNvbnRleHQucmVsZWFzZSgpIDogMDsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5z
aW9uKQogewogICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
Q29udGV4dDNEUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NDb250ZXh0M0RRdC5jcHAKaW5kZXggODg1MmNjZC4uOThhZGVjNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250
ZXh0M0RRdC5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlCiAjZW5kaWYKIHsKIHB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3Jh
cGhpY3NDb250ZXh0M0QqLCBIb3N0V2luZG93Kik7CisgICAgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgSG9zdFdpbmRvdyosIEdyYXBoaWNzQ29udGV4dDNEOjpS
ZW5kZXJTdHlsZSk7CiAgICAgfkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpOwogCiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtNzYsNiArNzYsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBibGl0TXVsdGlzYW1wbGVGcmFtZWJ1ZmZlcigpIGNvbnN0OwogICAgIHZvaWQgYmxpdE11
bHRpc2FtcGxlRnJhbWVidWZmZXJBbmRSZXN0b3JlQ29udGV4dCgpIGNvbnN0OwogICAgIGJvb2wg
bWFrZUN1cnJlbnRJZk5lZWRlZCgpIGNvbnN0OworICAgIHZvaWQgY3JlYXRlT2Zmc2NyZWVuQnVm
ZmVycygpOworICAgIHZvaWQgaW5pdGlhbGl6ZUFOR0xFKCk7CiAgICAgdm9pZCBjcmVhdGVHcmFw
aGljc1N1cmZhY2VzKGNvbnN0IEludFNpemUmKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBt
X2NvbnRleHQ7CkBAIC0xMDQsNyArMTA2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVs
ZWFzZVNoYWRlckNvbXBpbGVyKCkKIH0KICNlbmRpZgogCi1HcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwg
SG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBIb3N0V2luZG93
KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUp
CiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1faG9zdFdpbmRvdyhob3N0V2luZG93
KQogICAgICwgbV9zdXJmYWNlKDApCkBAIC0xMjEsNiArMTIzLDEyIEBAIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBICiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAocmVuZGVyU3R5bGUg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclRvQ3VycmVudEdMQ29udGV4dCkgeworICAgICAg
ICBtX3BsYXRmb3JtQ29udGV4dCA9IFFPcGVuR0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgpOwor
ICAgICAgICBtX3N1cmZhY2UgPSBtX3BsYXRmb3JtQ29udGV4dC0+c3VyZmFjZSgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiAgICAgLy8gRklY
TUU6IEZpbmQgYSB3YXkgdG8gY3JlYXRlIGEgUU9wZW5HTENvbnRleHQgd2l0aG91dCBjcmVhdGlu
ZyBhIFFXaW5kb3cgYXQgYWxsLgogICAgIC8vIFdlIG5lZWQgdG8gY3JlYXRlIGEgc3VyZmFjZSBp
biBvcmRlciB0byBjcmVhdGUgYSBRT3BlbkdMQ29udGV4dCBhbmQgbWFrZSBpdCBjdXJyZW50LgpA
QCAtMTQ1LDEyICsxNTMsNjcgQEAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEgKICNlbmRpZgogfQog
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlT2Zmc2NyZWVuQnVmZmVycygp
Cit7CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoLyogY291bnQgKi8gMSwgJm1fY29udGV4dC0+bV9m
Ym8pOworCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb250ZXh0LT5tX3RleHR1cmUpOworICAg
IGdsQmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29udGV4dC0+
bV90ZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpMSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBo
aWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBf
VCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGdsQmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOworCisgICAgLy8gQ3JlYXRlIGEgbXVs
dGlzYW1wbGUgRkJPLgorICAgIGlmIChtX2NvbnRleHQtPm1fYXR0cnMuYW50aWFsaWFzKSB7Cisg
ICAgICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2NvbnRleHQtPm1fbXVsdGlzYW1wbGVGQk8p
OworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIG1fY29udGV4dC0+bV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIG1fY29udGV4dC0+bV9i
b3VuZEZCTyA9IG1fY29udGV4dC0+bV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgZ2xHZW5SZW5k
ZXJidWZmZXJzKDEsICZtX2NvbnRleHQtPm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAg
ICAgIGlmIChtX2NvbnRleHQtPm1fYXR0cnMuc3RlbmNpbCB8fCBtX2NvbnRleHQtPm1fYXR0cnMu
ZGVwdGgpCisgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fY29udGV4dC0+bV9t
dWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
QmluZCBjYW52YXMgRkJPLgorICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIG1fY29udGV4dC0+bV9mYm8pOworICAgICAgICBtX2NvbnRleHQt
Pm1fYm91bmRGQk8gPSBtX2NvbnRleHQtPm1fZmJvOworI2lmIFVTRShPUEVOR0xfRVNfMikKKyAg
ICAgICAgaWYgKG1fY29udGV4dC0+bV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIGdsR2VuUmVu
ZGVyYnVmZmVycygxLCAmbV9jb250ZXh0LT5tX2RlcHRoQnVmZmVyKTsKKyAgICAgICAgaWYgKG1f
Y29udGV4dC0+bV9hdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJz
KDEsICZtX2NvbnRleHQtPm1fc3RlbmNpbEJ1ZmZlcik7CisjZW5kaWYKKyAgICAgICAgaWYgKG1f
Y29udGV4dC0+bV9hdHRycy5zdGVuY2lsIHx8IG1fY29udGV4dC0+bV9hdHRycy5kZXB0aCkKKyAg
ICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9jb250ZXh0LT5tX2RlcHRoU3RlbmNp
bEJ1ZmZlcik7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aW5p
dGlhbGl6ZUFOR0xFKCkKK3sKKyAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXM7
CisgICAgU2hJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJjZXMpOworCisgICAgbV9j
b250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJT
LCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7CisgICAgbV9jb250ZXh0LT5nZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMsICZB
TkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7CisgICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFOR0xF
UmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2
KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdM
RVJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAg
ICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBt
X2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01FTlRfVU5J
Rk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk7
CisKKyAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBFUy4KKyAgICBBTkdMRVJlc291
cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7CisgICAgbV9jb250ZXh0LT5tX2NvbXBpbGVyLnNldFJl
c291cmNlcyhBTkdMRVJlc291cmNlcyk7Cit9CisKIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
fkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpCiB7Ci0gICAgZGVsZXRlIG1fc3VyZmFjZTsKLSAg
ICBtX3N1cmZhY2UgPSAwOwotICAgIC8vIFBsYXRmb3JtIGNvbnRleHQgaXMgYXNzdW1lZCB0byBi
ZSBvd25lZCBieSBzdXJmYWNlLgotICAgIG1fcGxhdGZvcm1Db250ZXh0ID0gMDsKKyAgICBpZiAo
bV9ob3N0V2luZG93KSB7CisgICAgICAgIGRlbGV0ZSBtX3N1cmZhY2U7CisgICAgICAgIG1fc3Vy
ZmFjZSA9IDA7CisgICAgICAgIC8vIFBsYXRmb3JtIGNvbnRleHQgaXMgYXNzdW1lZCB0byBiZSBv
d25lZCBieSBzdXJmYWNlLgorICAgICAgICBtX3BsYXRmb3JtQ29udGV4dCA9IDA7CisgICAgfQog
fQogCiBzdGF0aWMgaW5saW5lIHF1aW50MzIgc3dhcEJnclRvUmdiKHF1aW50MzIgcGl4ZWwpCkBA
IC0yOTEsMTUgKzM1NCwxNiBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaQogICAgIC8vIFRoaXMg
aW1wbGVtZW50YXRpb24gZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCByZW5kZXJpbmcgZGlyZWN0
bHkgdG8gdGhlIEhvc3RXaW5kb3cuCiAgICAgaWYgKHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVj
dGx5VG9Ib3N0V2luZG93KQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMs
IGhvc3RXaW5kb3csIGZhbHNlKSk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250
ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCBy
ZW5kZXJTdHlsZSkpOwogICAgIHJldHVybiBjb250ZXh0LT5tX3ByaXZhdGUgPyBjb250ZXh0LnJl
bGVhc2UoKSA6IDA7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dywgYm9vbCkKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogICAgIDogbV9jdXJyZW50V2lk
dGgoMCkKICAgICAsIG1fY3VycmVudEhlaWdodCgwKQogICAgICwgbV9jb21waWxlcihpc0dMRVMy
Q29tcGxpYW50KCkgPyBTSF9FU1NMX09VVFBVVCA6IFNIX0dMU0xfT1VUUFVUKQogICAgICwgbV9h
dHRycyhhdHRycykKKyAgICAsIG1fcmVuZGVyU3R5bGUocmVuZGVyU3R5bGUpCiAgICAgLCBtX3Rl
eHR1cmUoMCkKICAgICAsIG1fY29tcG9zaXRvclRleHR1cmUoMCkKICAgICAsIG1fZmJvKDApCkBA
IC0zMTYsNyArMzgwLDcgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICAsIG1fbXVsdGlz
YW1wbGVGQk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKICAg
ICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQotICAgICwgbV9wcml2YXRlKGFkb3B0UHRy
KG5ldyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUodGhpcywgaG9zdFdpbmRvdykpKQorICAgICwg
bV9wcml2YXRlKGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUodGhpcywgaG9z
dFdpbmRvdywgcmVuZGVyU3R5bGUpKSkKIHsKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIApA
QCAtMzM3LDU0ICs0MDEsMTAgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNE
KEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2kKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIC8vIENyZWF0ZSBidWZmZXJzIGZvciB0aGUgY2FudmFzIEZCTy4K
LSAgICBnbEdlbkZyYW1lYnVmZmVycygvKiBjb3VudCAqLyAxLCAmbV9mYm8pOworICAgIGlmIChy
ZW5kZXJTdHlsZSA9PSBSZW5kZXJPZmZzY3JlZW4pCisgICAgICAgIG1fcHJpdmF0ZS0+Y3JlYXRl
T2Zmc2NyZWVuQnVmZmVycygpOwogCi0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsK
LSAgICBnbEJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1
cmUpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkxJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRl
eHQzRDo6TElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250
ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFw
aGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7Ci0KLSAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBs
ZSBGQk8uCi0gICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7Ci0gICAgICAgIGdsR2VuRnJhbWVi
dWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAg
ICAgbV9ib3VuZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAgIGdsR2VuUmVuZGVyYnVm
ZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgaWYgKG1fYXR0cnMu
c3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQotICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJz
KDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICAvLyBCaW5kIGNhbnZhcyBGQk8uCi0gICAgICAgIGdsQmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICBtX2JvdW5kRkJPID0g
bV9mYm87Ci0jaWYgVVNFKE9QRU5HTF9FU18yKQotICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkK
LSAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7Ci0gICAg
ICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCi0gICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnMo
MSwgJm1fc3RlbmNpbEJ1ZmZlcik7Ci0jZW5kaWYKLSAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNp
bCB8fCBtX2F0dHJzLmRlcHRoKQotICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZt
X2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQotCi0gICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRp
b24uCi0gICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzOwotICAgIFNoSW5pdEJ1
aWx0SW5SZXNvdXJjZXMoJkFOR0xFUmVzb3VyY2VzKTsKLQotICAgIGdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0
ZXhBdHRyaWJzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRF
WF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9y
cyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RP
UlMsICZBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyk7Ci0gICAgZ2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xF
UmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBnZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdM
RVJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsgCi0gICAgZ2V0SW50ZWdl
cnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNv
dXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4
RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk7Ci0KLSAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9w
ZW5HTCBFUy4KLSAgICBBTkdMRVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7Ci0gICAgbV9j
b21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworICAgIG1fcHJpdmF0ZS0+aW5p
dGlhbGl6ZUFOR0xFKCk7CiAKICNpZiAhVVNFKE9QRU5HTF9FU18yKQogICAgIGdsRW5hYmxlKEdM
X1BPSU5UX1NQUklURSk7CkBAIC00MzgsNyArNDU4LDcgQEAgUGxhdGZvcm1MYXllciogR3JhcGhp
Y3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogCiBib29sIEdyYXBoaWNzQ29udGV4
dDNEOjptYWtlQ29udGV4dEN1cnJlbnQoKQogewotICAgIGlmICghbV9wcml2YXRlKQorICAgIGlm
ICghbV9wcml2YXRlIHx8IG1fcmVuZGVyU3R5bGUgPT0gUmVuZGVyVG9DdXJyZW50R0xDb250ZXh0
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bWFrZUN1cnJl
bnRJZk5lZWRlZCgpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160508</attachid>
            <date>2012-08-24 15:08:39 -0700</date>
            <delta_ts>2012-08-24 15:22:58 -0700</delta_ts>
            <desc>patch [TexImage2DDirect]</desc>
            <filename>texImage2D.patch</filename>
            <type>text/plain</type>
            <size>4980</size>
            <attacher name="Roland Takacs">rtakacs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmODBjNTQ2Li5iNWEwMTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIg
QEAKKzIwMTItMDgtMjUgIEhlbGRlciBDb3JyZWlhICA8aGVsZGVyLmNvcnJlaWFAbm9raWEuY29t
PgorCisgICAgICAgIFtUZXhtYXBdIE1vdmUgVGV4dHVyZU1hcHBlckdMIHRvIHVzZSBHcmFwaGlj
c0NvbnRleHQzRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzg2NzIKKworICAgICAgICBSZXZpZXdlZCBieSBObydhbSBSb3NlbnRoYWwuCisKKyAgICAg
ICAgSW50cm9kdWNpbmcgYSBuZXcgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkREaXJlY3Qo
KSB0byBhbGxvdworICAgICAgICBpbml0aWFsaXphdGlvbiBvZiB0ZXh0dXJlcyB3aXRob3V0IGFs
bG9jYXRpb24uIFRoZSBleGlzdGluZworICAgICAgICB0ZXh0SW1hZ2UyRCgpIHJlZnVzZXMgYSBu
dWxsIHBpeGVsIGJ1ZmZlciwgYW5kCisgICAgICAgIHRleEltYWdlMkRSZXNvdXJjZVNhZmUoKSBh
bGxvd3MgaXQgYnV0IHBlcmZvcm1zIG1lbW9yeQorICAgICAgICBhbGxvY2F0aW9uIGFuZCB6ZXJv
ZXMgdGhlIGJpdHMuIFRoaXMgd2FzIG5vdCBmYXN0IGVub3VnaCBmb3IKKyAgICAgICAgQml0bWFw
VGV4dHVyZUdMIGZyZXF1ZW50IHNldHRpbmcgdXAuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBy
ZWZhY3RvcmluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmg6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkREaXJlY3QpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMRVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnRleEltYWdlMkQpOgorCiAyMDEyLTA4LTI0ICBDaHJpcyBFdmFucyAgPGNldmFuc0Bn
b29nbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBjb21tZW50IHJlZ2FyZGluZyByb290IG5vZGUg
aGFuZGxpbmcgaW4gWFBhdGggZm9yIGRldGFjaGVkIHRyZWVzLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggZjVlNmYx
Zi4uNTM1MTdlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC01MjQsNiArNTI0LDkgQEAgcHVibGljOgogICAgIHZv
aWQgcHJlcGFyZVRleHR1cmUoKTsKICNlbmRpZgogCisgICAgLy8gRXF1aXZhbGVudCB0byA6Omds
VGV4SW1hZ2UyRCgpLiBBbGxvd3MgcGl4ZWxzPT0wIHdpdGggbm8gYWxsb2NhdGlvbi4KKyAgICB2
b2lkIHRleEltYWdlMkREaXJlY3QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lk
KiBwaXhlbHMpOworCiAgICAgLy8gSGVscGVyIHRvIHRleEltYWdlMkQgd2l0aCBwaXhlbD09MCBj
YXNlOiBwaXhlbHMgYXJlIGluaXRpYWxpemVkIHRvIDAuCiAgICAgLy8gUmV0dXJuIHRydWUgaWYg
bm8gR0wgZXJyb3IgaXMgc3ludGhlc2l6ZWQuCiAgICAgLy8gQnkgZGVmYXVsdCwgYWxpZ25tZW50
IGlzIDQsIHRoZSBPcGVuR0wgZGVmYXVsdCBzZXR0aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHQzRE9wZW5HTC5jcHAKaW5kZXggZmQ0NTAxNC4uOThlMTE0NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0wuY3BwCkBAIC0yNTYsNyArMjU2LDcgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGUKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKICAg
ICBHQzNEZW51bSBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IGludGVybmFsZm9ybWF0OwogICAgIGlm
ICh0eXBlID09IEdMX0ZMT0FUKSB7CiAgICAgICAgIGlmIChmb3JtYXQgPT0gR0xfUkdCQSkKQEAg
LTI2NSw3ICsyNjUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZQogICAgICAgICAgICAgb3Bl
bkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9SR0IzMkZfQVJCOwogICAgIH0KIAotICAgIDo6Z2xUZXhJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIG9wZW5HTEludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICB0ZXhJbWFnZTJERGlyZWN0KHRh
cmdldCwgbGV2ZWwsIG9wZW5HTEludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggZTBjMmQ2ZS4uMTJi
YmRlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3Bw
CkBAIC0xMzc0LDYgKzEzNzQsMTIgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21w
b3NpdGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9sYXllckNvbXBvc2l0ZWQ7CiB9CiAKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkREaXJlY3QoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworfQorCiB9CiAKICNlbmRpZiAv
LyBVU0UoM0RfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5j
cHAKaW5kZXggOWRiYjQ4My4uNGQxNTMwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTEVTLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2lmIFVTRSgzRF9HUkFQSElDUykKIAog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisKICNpbmNsdWRlICJFeHRlbnNpb25zM0RP
cGVuR0xFUy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCkBA
IC0yMDEsOCArMjAyLDggQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBl
LCBwaXhlbHMpOworCisgICAgdGV4SW1hZ2UyRERpcmVjdCh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160511</attachid>
            <date>2012-08-24 15:22:58 -0700</date>
            <delta_ts>2012-08-24 18:14:19 -0700</delta_ts>
            <desc>patch [TexImage2DDirect]</desc>
            <filename>texImage2D.patch</filename>
            <type>text/plain</type>
            <size>4950</size>
            <attacher name="Roland Takacs">rtakacs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ZTdkMThlLi5hMTgxM2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTItMDgtMjUgIEhlbGRlciBDb3JyZWlhICA8aGVsZGVyLmNvcnJlaWFAbm9raWEuY29t
PgorCisgICAgICAgIFtUZXhtYXBdIE1vdmUgVGV4dHVyZU1hcHBlckdMIHRvIHVzZSBHcmFwaGlj
c0NvbnRleHQzRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzg2NzIKKworICAgICAgICBSZXZpZXdlZCBieSBObydhbSBSb3NlbnRoYWwuCisKKyAgICAg
ICAgSW50cm9kdWNpbmcgYSBuZXcgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkREaXJlY3Qo
KSB0byBhbGxvdworICAgICAgICBpbml0aWFsaXphdGlvbiBvZiB0ZXh0dXJlcyB3aXRob3V0IGFs
bG9jYXRpb24uIFRoZSBleGlzdGluZworICAgICAgICB0ZXh0SW1hZ2UyRCgpIHJlZnVzZXMgYSBu
dWxsIHBpeGVsIGJ1ZmZlciwgYW5kCisgICAgICAgIHRleEltYWdlMkRSZXNvdXJjZVNhZmUoKSBh
bGxvd3MgaXQgYnV0IHBlcmZvcm1zIG1lbW9yeQorICAgICAgICBhbGxvY2F0aW9uIGFuZCB6ZXJv
ZXMgdGhlIGJpdHMuIFRoaXMgd2FzIG5vdCBmYXN0IGVub3VnaCBmb3IKKyAgICAgICAgQml0bWFw
VGV4dHVyZUdMIGZyZXF1ZW50IHNldHRpbmcgdXAuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBy
ZWZhY3RvcmluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmg6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkREaXJlY3QpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMRVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnRleEltYWdlMkQpOgorCiAyMDEyLTA4LTI0ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5y
ZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCBy
MTI2NjIwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmgKaW5kZXggZjVlNmYxZi4uNTM1MTdlYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC01MjQs
NiArNTI0LDkgQEAgcHVibGljOgogICAgIHZvaWQgcHJlcGFyZVRleHR1cmUoKTsKICNlbmRpZgog
CisgICAgLy8gRXF1aXZhbGVudCB0byA6OmdsVGV4SW1hZ2UyRCgpLiBBbGxvd3MgcGl4ZWxzPT0w
IHdpdGggbm8gYWxsb2NhdGlvbi4KKyAgICB2b2lkIHRleEltYWdlMkREaXJlY3QoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOworCiAgICAgLy8gSGVscGVyIHRv
IHRleEltYWdlMkQgd2l0aCBwaXhlbD09MCBjYXNlOiBwaXhlbHMgYXJlIGluaXRpYWxpemVkIHRv
IDAuCiAgICAgLy8gUmV0dXJuIHRydWUgaWYgbm8gR0wgZXJyb3IgaXMgc3ludGhlc2l6ZWQuCiAg
ICAgLy8gQnkgZGVmYXVsdCwgYWxpZ25tZW50IGlzIDQsIHRoZSBPcGVuR0wgZGVmYXVsdCBzZXR0
aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKaW5kZXggZmQ0NTAxNC4u
OThlMTE0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCkBAIC0yNTYs
NyArMjU2LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisKICAgICBHQzNEZW51bSBvcGVuR0xJbnRlcm5hbEZvcm1h
dCA9IGludGVybmFsZm9ybWF0OwogICAgIGlmICh0eXBlID09IEdMX0ZMT0FUKSB7CiAgICAgICAg
IGlmIChmb3JtYXQgPT0gR0xfUkdCQSkKQEAgLTI2NSw3ICsyNjUsNyBAQCBib29sIEdyYXBoaWNz
Q29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGVudW0gaW50ZQogICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9SR0IzMkZf
QVJCOwogICAgIH0KIAotICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIG9wZW5HTElu
dGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxz
KTsKKyAgICB0ZXhJbWFnZTJERGlyZWN0KHRhcmdldCwgbGV2ZWwsIG9wZW5HTEludGVybmFsRm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENv
bW1vbi5jcHAKaW5kZXggZTBjMmQ2ZS4uMTJiYmRlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCkBAIC0xMzc0LDYgKzEzNzQsMTIgQEAgYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9s
YXllckNvbXBvc2l0ZWQ7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkRE
aXJlY3QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBw
aXhlbHMpOworfQorCiB9CiAKICNlbmRpZiAvLyBVU0UoM0RfR1JBUEhJQ1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKaW5kZXggOWRiYjQ4My4uNGQxNTMwYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMRVMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcApAQCAtMzEsNiArMzEsNyBA
QAogI2lmIFVTRSgzRF9HUkFQSElDUykKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CisKICNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKICNpbmNsdWRlICJJbnRTaXplLmgiCkBAIC0yMDEsOCArMjAyLDggQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGUKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworCisgICAgdGV4SW1hZ2UyRERp
cmVjdCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVy
LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
</data>
<flag name="commit-queue"
          id="171095"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160535</attachid>
            <date>2012-08-24 18:14:19 -0700</date>
            <delta_ts>2012-08-24 19:25:44 -0700</delta_ts>
            <desc>patch [TexImage2DDirect]</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>4949</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ZTdkMThlLi5hMTgxM2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTItMDgtMjUgIEhlbGRlciBDb3JyZWlhICA8aGVsZGVyLmNvcnJlaWFAbm9raWEuY29t
PgorCisgICAgICAgIFtUZXhtYXBdIE1vdmUgVGV4dHVyZU1hcHBlckdMIHRvIHVzZSBHcmFwaGlj
c0NvbnRleHQzRAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzg2NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOb2FtIFJvc2VudGhhbC4KKworICAgICAg
ICBJbnRyb2R1Y2luZyBhIG5ldyBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRERpcmVjdCgp
IHRvIGFsbG93CisgICAgICAgIGluaXRpYWxpemF0aW9uIG9mIHRleHR1cmVzIHdpdGhvdXQgYWxs
b2NhdGlvbi4gVGhlIGV4aXN0aW5nCisgICAgICAgIHRleHRJbWFnZTJEKCkgcmVmdXNlcyBhIG51
bGwgcGl4ZWwgYnVmZmVyLCBhbmQKKyAgICAgICAgdGV4SW1hZ2UyRFJlc291cmNlU2FmZSgpIGFs
bG93cyBpdCBidXQgcGVyZm9ybXMgbWVtb3J5CisgICAgICAgIGFsbG9jYXRpb24gYW5kIHplcm9l
cyB0aGUgYml0cy4gVGhpcyB3YXMgbm90IGZhc3QgZW5vdWdoIGZvcgorICAgICAgICBCaXRtYXBU
ZXh0dXJlR0wgZnJlcXVlbnQgc2V0dGluZyB1cC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHJl
ZmFjdG9yaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaDoKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRERpcmVjdCk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0xFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dGV4SW1hZ2UyRCk6CisKIDIwMTItMDgtMjQgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJl
dmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIx
MjY2MjAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaAppbmRleCBmNWU2ZjFmLi41MzUxN2ViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKQEAgLTUyNCw2
ICs1MjQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOwogI2VuZGlmCiAK
KyAgICAvLyBFcXVpdmFsZW50IHRvIDo6Z2xUZXhJbWFnZTJEKCkuIEFsbG93cyBwaXhlbHM9PTAg
d2l0aCBubyBhbGxvY2F0aW9uLgorICAgIHZvaWQgdGV4SW1hZ2UyRERpcmVjdChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7CisKICAgICAvLyBIZWxwZXIgdG8g
dGV4SW1hZ2UyRCB3aXRoIHBpeGVsPT0wIGNhc2U6IHBpeGVscyBhcmUgaW5pdGlhbGl6ZWQgdG8g
MC4KICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBubyBHTCBlcnJvciBpcyBzeW50aGVzaXplZC4KICAg
ICAvLyBCeSBkZWZhdWx0LCBhbGlnbm1lbnQgaXMgNCwgdGhlIE9wZW5HTCBkZWZhdWx0IHNldHRp
bmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAppbmRleCBmZDQ1MDE0Li45
OGUxMTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKQEAgLTI1Niw3
ICsyNTYsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZQogICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKwogICAgIEdDM0RlbnVtIG9wZW5HTEludGVybmFsRm9ybWF0
ID0gaW50ZXJuYWxmb3JtYXQ7CiAgICAgaWYgKHR5cGUgPT0gR0xfRkxPQVQpIHsKICAgICAgICAg
aWYgKGZvcm1hdCA9PSBHTF9SR0JBKQpAQCAtMjY1LDcgKzI2NSw3IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlCiAgICAgICAgICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdMX1JHQjMyRl9B
UkI7CiAgICAgfQogCi0gICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgb3BlbkdMSW50
ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMp
OworICAgIHRleEltYWdlMkREaXJlY3QodGFyZ2V0LCBsZXZlbCwgb3BlbkdMSW50ZXJuYWxGb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29t
bW9uLmNwcAppbmRleCBlMGMyZDZlLi4xMmJiZGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTEzNzQsNiArMTM3NCwxMiBAQCBib29sIEdy
YXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoKSBjb25zdAogICAgIHJldHVybiBtX2xh
eWVyQ29tcG9zaXRlZDsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRERp
cmVjdChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBp
eGVscyk7Cit9CisKIH0KIAogI2VuZGlmIC8vIFVTRSgzRF9HUkFQSElDUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAppbmRleCA5ZGJiNDgzLi40ZDE1MzBjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0xFUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCkBAIC0zMSw2ICszMSw3IEBA
CiAjaWYgVVNFKDNEX0dSQVBISUNTKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
KwogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5o
IgogI2luY2x1ZGUgIkludFNpemUuaCIKQEAgLTIwMSw4ICsyMDIsOCBAQCBib29sIEdyYXBoaWNz
Q29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGVudW0gaW50ZQogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisKKyAgICB0ZXhJbWFnZTJERGly
ZWN0KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160559</attachid>
            <date>2012-08-25 03:24:54 -0700</date>
            <delta_ts>2012-08-25 12:10:48 -0700</delta_ts>
            <desc>patch [TextureMapperGL]</desc>
            <filename>final.diff</filename>
            <type>text/plain</type>
            <size>83108</size>
            <attacher name="Roland Takacs">rtakacs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlMmVmYjA3Li41Yzc5MjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEg
QEAKKzIwMTItMDgtMjUgIFJvbGFuZCBUYWthY3MgIDxydGFrYWNzQGluZi51LXN6ZWdlZC5odT4s
IEhlbGRlciBDb3JyZWlhICA8aGVsZGVyLmNvcnJlaWFAbm9raWEuY29tPgorCisgICAgICAgIFtU
ZXhtYXBdIE1vdmUgVGV4dHVyZU1hcHBlckdMIHRvIHVzZSBHcmFwaGljc0NvbnRleHQzRAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2NzIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOb2FtIFJvc2VudGhhbC4KKworICAgICAgICBJdCBpcyBiYXNlZCBv
biBhIHByZXZpb3VzIHBhdGNoIGJ5IEhlbGRlciBDb3JyZWlhLgorCisgICAgICAgIFRleHR1cmVN
YXBwZXJHTCAoVE1HTCkgaW5jbHVkZXMgZGlyZWN0IEdMIGNhbGxzIGFuZAorICAgICAgICBHcmFw
aGljc0NvbnRleHQzRCAoR0MzRCkgb2ZmZXJzIG1hbnkgY29udmVuaWVuY2VzIG92ZXIgdGhlCisg
ICAgICAgIGZvcm1lciBhcHByb2FjaDogdXNpbmcgZXhpc3RpbmcgQ1NTIHNoYWRlciBjb2RlLCBB
TkdMRSBmb3IKKyAgICAgICAgc2hhZGVyIGNvbXBpbGF0aW9uLCByZXVzaW5nIFdlYkNvcmU6OlRl
eHR1cmUsIGhhdmluZyBzaGFkZXJzIGFuZAorICAgICAgICB0ZXh0dXJlcyB0aGF0IGNhbiBkZWxl
dGUgdGhlbXNlbHZlcy4KKworICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMgdGhlIGJhY2tlbmQg
b2YgVE1HTCB0byBHQzNELiBJdCB3YXMgaW5pdGlhbGx5CisgICAgICAgIHRob3VnaHQgdG8gaW50
cm9kdWNlIGEgbmV3IGJhY2tlbmQgKHNheSwgVGV4dHVyZU1hcHBlckdDM0QpLCBidXQKKyAgICAg
ICAgaW4gdGhlIGVuZCBpdCB3YXMgYWdyZWVkIHRvIGNvbnNvbGlkYXRlIGl0IGluc2lkZSBUTUdM
IGluc3RlYWQsCisgICAgICAgIGFzIGFuIGFkZGl0aW9uYWwgVGV4dHVyZU1hcHBlciBzdWJjbGFz
cyB3b3VsZCBnZXQgc3RhbGUgdmVyeQorICAgICAgICBxdWlja2x5LgorCisgICAgICAgIEEgR0Mz
RCBvYmplY3QgaXMgY3JlYXRlZCBieSBUTUdMIHdpdGggdGhlIG5ld2x5IGludHJvZHVjZWQKKyAg
ICAgICAgYnVpbGRlciBjcmVhdGVGb3JDdXJyZW50R0xDb250ZXh0KCksIHdoaWNoIGluIHR1cm4g
dXNlcworICAgICAgICB0aGUgbmV3IFJlbmRlclRvQ3VycmVudEdMQ29udGV4dCBmbGFnIHVuZGVy
bmVhdGguCisKKyAgICAgICAgVE1HTCdzIGRlcGVuZGVuY3kgb24gT3BlbkdMU2hpbXMuaCB3YXMg
Y29tcGxldGVseSByZW1vdmVkLgorICAgICAgICBIb3dldmVyLCBHQzNEIGRvZXMgbm90IG1hcCBl
dmVyeSBzaW5nbGUgR0wgY29uc3RhbnQuIFRodXMsIGl0J3MKKyAgICAgICAgaW1wb3J0YW50IHRv
IGRvY3VtZW50IHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAtIEdMX0ZBTFNFIHdhcyBtYXBw
ZWQgdG8gZmFsc2UuCisgICAgICAgICAgICAtIEdMX1VOUEFDS19ST1dfTEVOR1RILCBHTF9VTlBB
Q0tfU0tJUF9QSVhFTFMsCisgICAgICAgICAgICBHTF9VTlBBQ0tfU0tJUF9ST1dTLCBHTF9URVhU
VVJFX1JFQ1RBTkdMRV9BUkIsIGFuZAorICAgICAgICAgICAgR0xfVU5TSUdORURfSU5UXzhfOF84
XzhfUkVWIHdlcmUgbG9jYWxseSBkZWZpbmVkIGluIFRNR0wuCisKKyAgICAgICAgVGhlIHBhdGNo
IHdhcyBvcmlnaW5hbGx5IGRldmVsb3BlZCBieSBIZWxkZXIgQ29ycmVpYSBhbmQgZmluaXNoZWQK
KyAgICAgICAgYnkgUm9sYW5kIFRha2Fjcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHJlZmFj
dG9yaW5nLgorCiAyMDEyLTA4LTI1ICBNaWNoZWxhbmdlbG8gRGUgU2ltb25lICA8bWljaGVsYW5n
ZWxvQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0NyYXNoXSBOdWxsIHBvaW50ZXIgaW4gQ1NTUGFy
c2VyOjpwYXJzZU1peEZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IGVmZDg3NjkuLmIyZTZhNGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuaApAQCAtMjUwLDYgKzI1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgQUxQSEEgPSAweDE5
MDYsCiAgICAgICAgIFJHQiA9IDB4MTkwNywKICAgICAgICAgUkdCQSA9IDB4MTkwOCwKKyAgICAg
ICAgQkdSQSA9IDB4ODBFMSwKICAgICAgICAgTFVNSU5BTkNFID0gMHgxOTA5LAogICAgICAgICBM
VU1JTkFOQ0VfQUxQSEEgPSAweDE5MEEsCiAgICAgICAgIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQg
PSAweDgwMzMsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IGEyMmU3MjAuLjhiMThkNDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0zOCwxMyArMzgsNiBAQAogCiAjaWYgUExBVEZPUk0o
UVQpCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VRdC5oIgotI2luY2x1ZGUgPFFPcGVuR0xDb250ZXh0
PgotI2VsaWYgT1MoV0lORE9XUykKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZWxpZiBPUyhNQUNf
T1NfWCkKLSNpbmNsdWRlIDxBR0wvYWdsLmg+Ci0jZWxpZiBkZWZpbmVkKFhQX1VOSVgpCi0jaW5j
bHVkZSA8R0wvZ2x4Lmg+CiAjZW5kaWYKIAogI2lmIFVTRShDQUlSTykKQEAgLTUzLDcwICs0Niw0
MyBAQAogI2luY2x1ZGUgPGNhaXJvLmg+CiAjZW5kaWYKIAotI2RlZmluZSBHTF9DTUQoLi4uKSBk
byB7IF9fVkFfQVJHU19fOyBBU1NFUlRfQVJHKF9fVkFfQVJHU19fLCAhZ2xHZXRFcnJvcigpKTsg
fSB3aGlsZSAoMCkKKyNpZiAhVVNFKFRFWE1BUF9PUEVOR0xfRVNfMikKKy8vIEZJWE1FOiBNb3Zl
IHRvIEV4dGVuc2lvbnMzRC5oLgorI2RlZmluZSBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIgMHg4
NEY1CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViAweDgzNjcKKyNkZWZpbmUg
R0xfVU5QQUNLX1JPV19MRU5HVEggMHgwQ0YyCisjZGVmaW5lIEdMX1VOUEFDS19TS0lQX1BJWEVM
UyAweDBDRjQKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUk9XUyAweDBDRjMKKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBzdHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAgICAgc3Ry
dWN0IFNoYXJlZEdMRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZEdMRGF0YT4gewotI2lm
IFBMQVRGT1JNKFFUKQotICAgICAgICB0eXBlZGVmIFFPcGVuR0xDb250ZXh0KiBHTENvbnRleHQ7
Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdMQ29udGV4dCgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBRT3BlbkdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKTsK
LSAgICAgICAgfQotI2VsaWYgT1MoV0lORE9XUykKLSAgICAgICAgdHlwZWRlZiBIR0xSQyBHTENv
bnRleHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdMQ29udGV4dCgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB3Z2xHZXRDdXJyZW50Q29udGV4dCgpOwotICAg
ICAgICB9Ci0jZWxpZiBPUyhNQUNfT1NfWCkKLSAgICAgICAgdHlwZWRlZiBBR0xDb250ZXh0IEdM
Q29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFnbEdldEN1cnJlbnRDb250ZXh0KCk7Ci0g
ICAgICAgIH0KLSNlbGlmIGRlZmluZWQoWFBfVU5JWCkKLSAgICAgICAgdHlwZWRlZiBHTFhDb250
ZXh0IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250
ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsWEdldEN1cnJlbnRDb250ZXh0
KCk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24g
Zm9yIHVua25vd24gb3BlbmdsLgotICAgICAgICAvLyBSZXR1cm5zIGFsd2F5cyBpbmNyZWFzaW5n
IG51bWJlciBhbmQgZGlzYWJsZXMgR0wgY29udGV4dCBkYXRhIHNoYXJpbmcuCi0gICAgICAgIHR5
cGVkZWYgdW5zaWduZWQgaW50IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBn
ZXRDdXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RhdGljIEdMQ29u
dGV4dCBkdW1teUNvbnRleHRDb3VudGVyID0gMDsKLSAgICAgICAgICAgIHJldHVybiArK2R1bW15
Q29udGV4dENvdW50ZXI7Ci0gICAgICAgIH0KLQotI2VuZGlmCiAKLSAgICAgICAgdHlwZWRlZiBI
YXNoTWFwPEdMQ29udGV4dCwgU2hhcmVkR0xEYXRhKj4gR0xDb250ZXh0RGF0YU1hcDsKKyAgICAg
ICAgdHlwZWRlZiBIYXNoTWFwPFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QsIFNoYXJlZEdMRGF0
YSo+IEdMQ29udGV4dERhdGFNYXA7CiAgICAgICAgIHN0YXRpYyBHTENvbnRleHREYXRhTWFwJiBn
bENvbnRleHREYXRhTWFwKCkKICAgICAgICAgewogICAgICAgICAgICAgc3RhdGljIEdMQ29udGV4
dERhdGFNYXAgbWFwOwogICAgICAgICAgICAgcmV0dXJuIG1hcDsKICAgICAgICAgfQogCi0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEdMRGF0YT4gY3VycmVudFNoYXJlZEdMRGF0YSgp
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEdMRGF0YT4gY3VycmVudFNoYXJlZEdM
RGF0YShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAg
R0xDb250ZXh0IGN1cnJlbnRHTENvbmV4dCA9IGdldEN1cnJlbnRHTENvbnRleHQoKTsKLSAgICAg
ICAgICAgIEdMQ29udGV4dERhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgp
LmZpbmQoY3VycmVudEdMQ29uZXh0KTsKKyAgICAgICAgICAgIEdMQ29udGV4dERhdGFNYXA6Oml0
ZXJhdG9yIGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgpLmZpbmQoY29udGV4dC0+cGxhdGZvcm1HcmFw
aGljc0NvbnRleHQzRCgpKTsKICAgICAgICAgICAgIGlmIChpdCAhPSBnbENvbnRleHREYXRhTWFw
KCkuZW5kKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CiAKLSAgICAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkR0xEYXRhKGdldEN1cnJlbnRHTENvbnRleHQo
KSkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRHTERhdGEoY29udGV4
dCkpOwogICAgICAgICB9CiAKIAogCiAgICAgICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
IHRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwogCi0gICAgICAgIFNoYXJlZEdMRGF0YShHTENv
bnRleHQgZ2xDb250ZXh0KQorICAgICAgICBTaGFyZWRHTERhdGEoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQpCisgICAgICAgICAgICA6IHRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKGNvbnRl
eHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsQ29udGV4dERhdGFNYXAoKS5hZGQoZ2xDb250
ZXh0LCB0aGlzKTsKKyAgICAgICAgICAgIGdsQ29udGV4dERhdGFNYXAoKS5hZGQoY29udGV4dC0+
cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpLCB0aGlzKTsKICAgICAgICAgfQogCiAgICAgICAg
IH5TaGFyZWRHTERhdGEoKQpAQCAtMTM1LDMwICsxMDEsMzIgQEAgc3RydWN0IFRleHR1cmVNYXBw
ZXJHTERhdGEgewogCiAgICAgU2hhcmVkR0xEYXRhJiBzaGFyZWRHTERhdGEoKSBjb25zdAogICAg
IHsKLSAgICAgICAgcmV0dXJuICoobV9zaGFyZWRHTERhdGEuZ2V0KCkpOworICAgICAgICByZXR1
cm4gKm1fc2hhcmVkR0xEYXRhOwogICAgIH0KIAogICAgIHZvaWQgaW5pdGlhbGl6ZVN0ZW5jaWwo
KTsKIAotICAgIFRleHR1cmVNYXBwZXJHTERhdGEoKQotICAgICAgICA6IFBhaW50RmxhZ3MoMCkK
KyAgICBUZXh0dXJlTWFwcGVyR0xEYXRhKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAg
ICAgICA6IGNvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBQYWludEZsYWdzKDApCiAgICAgICAg
ICwgcHJldmlvdXNQcm9ncmFtKDApCiAgICAgICAgICwgdGFyZ2V0RnJhbWVCdWZmZXIoMCkKICAg
ICAgICAgLCBkaWRNb2RpZnlTdGVuY2lsKGZhbHNlKQogICAgICAgICAsIHByZXZpb3VzU2Npc3Nv
clN0YXRlKDApCiAgICAgICAgICwgcHJldmlvdXNEZXB0aFN0YXRlKDApCi0gICAgICAgICwgbV9z
aGFyZWRHTERhdGEoVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpjdXJyZW50U2hh
cmVkR0xEYXRhKCkpCisgICAgICAgICwgbV9zaGFyZWRHTERhdGEoVGV4dHVyZU1hcHBlckdMRGF0
YTo6U2hhcmVkR0xEYXRhOjpjdXJyZW50U2hhcmVkR0xEYXRhKHRoaXMtPmNvbnRleHQpKQogICAg
IHsgfQogCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQ7CiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggcHJvamVjdGlvbk1hdHJpeDsKICAgICBUZXh0dXJlTWFwcGVyOjpQYWludEZsYWdz
IFBhaW50RmxhZ3M7Ci0gICAgR0xpbnQgcHJldmlvdXNQcm9ncmFtOwotICAgIEdMaW50IHRhcmdl
dEZyYW1lQnVmZmVyOworICAgIEdDM0RpbnQgcHJldmlvdXNQcm9ncmFtOworICAgIEdDM0RpbnQg
dGFyZ2V0RnJhbWVCdWZmZXI7CiAgICAgYm9vbCBkaWRNb2RpZnlTdGVuY2lsOwotICAgIEdMaW50
IHByZXZpb3VzU2Npc3NvclN0YXRlOwotICAgIEdMaW50IHByZXZpb3VzRGVwdGhTdGF0ZTsKLSAg
ICBHTGludCB2aWV3cG9ydFs0XTsKLSAgICBHTGludCBwcmV2aW91c1NjaXNzb3JbNF07CisgICAg
R0MzRGludCBwcmV2aW91c1NjaXNzb3JTdGF0ZTsKKyAgICBHQzNEaW50IHByZXZpb3VzRGVwdGhT
dGF0ZTsKKyAgICBHQzNEaW50IHZpZXdwb3J0WzRdOworICAgIEdDM0RpbnQgcHJldmlvdXNTY2lz
c29yWzRdOwogICAgIFJlZlB0cjxTaGFyZWRHTERhdGE+IG1fc2hhcmVkR0xEYXRhOwogICAgIFJl
ZlB0cjxCaXRtYXBUZXh0dXJlPiBjdXJyZW50U3VyZmFjZTsKIH07CkBAIC0xODIsMjUgKzE1MCwy
NSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjpwb3AoKQogICAgIGNsaXBTdGFj
ay5yZW1vdmVMYXN0KCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNjaXNzb3JDbGlwKGNvbnN0IEludFJl
Y3QmIHJlY3QpCitzdGF0aWMgdm9pZCBzY2lzc29yQ2xpcChHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEdMaW50IHZpZXdwb3J0WzRdOwotICAgIEdMX0NNRChnbEdl
dEludGVnZXJ2KEdMX1ZJRVdQT1JULCB2aWV3cG9ydCkpOwotICAgIEdMX0NNRChnbFNjaXNzb3Io
cmVjdC54KCksIHZpZXdwb3J0WzNdIC0gcmVjdC5tYXhZKCksIHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSkpOworICAgIEdDM0RpbnQgdmlld3BvcnRbNF07CisgICAgY29udGV4dC0+Z2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JULCB2aWV3cG9ydCk7CisgICAgY29udGV4
dC0+c2Npc3NvcihyZWN0LngoKSwgdmlld3BvcnRbM10gLSByZWN0Lm1heFkoKSwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFj
azo6YXBwbHkoKQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjazo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQpCiB7Ci0gICAgc2Npc3NvckNsaXAoY2xpcFN0YXRlLnNjaXNz
b3JCb3gpOwotICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9LRUVQLCBHTF9LRUVQLCBHTF9LRUVQ
KSk7Ci0gICAgR0xfQ01EKGdsU3RlbmNpbEZ1bmMoR0xfRVFVQUwsIGNsaXBTdGF0ZS5zdGVuY2ls
SW5kZXggLSAxLCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSkpOworICAgIHNjaXNzb3JDbGlw
KGNvbnRleHQsIGNsaXBTdGF0ZS5zY2lzc29yQm94KTsKKyAgICBjb250ZXh0LT5zdGVuY2lsT3Ao
R3JhcGhpY3NDb250ZXh0M0Q6OktFRVAsIEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQLCBHcmFwaGlj
c0NvbnRleHQzRDo6S0VFUCk7CisgICAgY29udGV4dC0+c3RlbmNpbEZ1bmMoR3JhcGhpY3NDb250
ZXh0M0Q6OkVRVUFMLCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSwgY2xpcFN0YXRlLnN0ZW5j
aWxJbmRleCAtIDEpOwogICAgIGlmIChjbGlwU3RhdGUuc3RlbmNpbEluZGV4ID09IDEpCi0gICAg
ICAgIEdMX0NNRChnbERpc2FibGUoR0xfU1RFTkNJTF9URVNUKSk7CisgICAgICAgIGNvbnRleHQt
PmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCk7CiAgICAgZWxzZQotICAg
ICAgICBHTF9DTUQoZ2xFbmFibGUoR0xfU1RFTkNJTF9URVNUKSk7CisgICAgICAgIGNvbnRleHQt
PmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKTsKIH0KIAogCkBAIC0yMTQs
OCArMTgyLDggQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0xEYXRhOjppbml0aWFsaXplU3RlbmNpbCgp
CiAgICAgaWYgKGRpZE1vZGlmeVN0ZW5jaWwpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdMX0NN
RChnbENsZWFyU3RlbmNpbCgwKSk7Ci0gICAgR0xfQ01EKGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZG
RVJfQklUKSk7CisgICAgY29udGV4dC0+Y2xlYXJTdGVuY2lsKDApOworICAgIGNvbnRleHQtPmNs
ZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOwogICAgIGRpZE1vZGlm
eVN0ZW5jaWwgPSB0cnVlOwogfQogCkBAIC0yMjksMTAgKzE5NywxMSBAQCBCaXRtYXBUZXh0dXJl
R0wqIHRvQml0bWFwVGV4dHVyZUdMKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpCiAKIFRleHR1cmVN
YXBwZXJHTDo6VGV4dHVyZU1hcHBlckdMKCkKICAgICA6IFRleHR1cmVNYXBwZXIoT3BlbkdMTW9k
ZSkKLSAgICAsIG1fZGF0YShuZXcgVGV4dHVyZU1hcHBlckdMRGF0YSkKICAgICAsIG1fY29udGV4
dCgwKQogICAgICwgbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcoZmFsc2UpCiB7Cisg
ICAgbV9jb250ZXh0M0QgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRm9yQ3VycmVudEdMQ29u
dGV4dCgpOworICAgIG1fZGF0YSA9IG5ldyBUZXh0dXJlTWFwcGVyR0xEYXRhKG1fY29udGV4dDNE
LmdldCgpKTsKIH0KIAogVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2smIFRleHR1cmVNYXBwZXJH
TDo6Y2xpcFN0YWNrKCkKQEAgLTI0MiwxNSArMjExLDkgQEAgVGV4dHVyZU1hcHBlckdMOjpDbGlw
U3RhY2smIFRleHR1cmVNYXBwZXJHTDo6Y2xpcFN0YWNrKCkKIAogdm9pZCBUZXh0dXJlTWFwcGVy
R0w6OmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyBmbGFncykKIHsKLSAgICAvLyBNYWtlIHN1cmUg
dGhhdCBubyBHTCBlcnJvciBjb2RlIHN0YXlzIGZyb20gcHJldmlvdXMgb3BlcmF0aW9ucy4KLSAg
ICBnbEdldEVycm9yKCk7Ci0KLSAgICBpZiAoIWluaXRpYWxpemVPcGVuR0xTaGltcygpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9DVVJSRU5UX1BST0dS
QU0sICZkYXRhKCkucHJldmlvdXNQcm9ncmFtKSk7Ci0gICAgZGF0YSgpLnByZXZpb3VzU2Npc3Nv
clN0YXRlID0gZ2xJc0VuYWJsZWQoR0xfU0NJU1NPUl9URVNUKTsKLSAgICBkYXRhKCkucHJldmlv
dXNEZXB0aFN0YXRlID0gZ2xJc0VuYWJsZWQoR0xfREVQVEhfVEVTVCk7CisgICAgbV9jb250ZXh0
M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpDVVJSRU5UX1BST0dSQU0sICZkYXRh
KCkucHJldmlvdXNQcm9ncmFtKTsKKyAgICBkYXRhKCkucHJldmlvdXNTY2lzc29yU3RhdGUgPSBt
X2NvbnRleHQzRC0+aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwor
ICAgIGRhdGEoKS5wcmV2aW91c0RlcHRoU3RhdGUgPSBtX2NvbnRleHQzRC0+aXNFbmFibGVkKEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUKTsKICNpZiBQTEFURk9STShRVCkKICAgICBpZiAo
bV9jb250ZXh0KSB7CiAgICAgICAgIFFQYWludGVyKiBwYWludGVyID0gbV9jb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKTsKQEAgLTI1OCwxNCArMjIxLDE0IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdM
OjpiZWdpblBhaW50aW5nKFBhaW50RmxhZ3MgZmxhZ3MpCiAgICAgICAgIHBhaW50ZXItPmJlZ2lu
TmF0aXZlUGFpbnRpbmcoKTsKICAgICB9CiAjZW5kaWYKLSAgICBnbERpc2FibGUoR0xfREVQVEhf
VEVTVCk7Ci0gICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBtX2NvbnRleHQzRC0+
ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCk7CisgICAgbV9jb250ZXh0M0Qt
PmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKICAgICBkYXRhKCkuZGlk
TW9kaWZ5U3RlbmNpbCA9IGZhbHNlOwotICAgIEdMX0NNRChnbERlcHRoTWFzaygwKSk7Ci0gICAg
R0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIGRhdGEoKS52aWV3cG9ydCkpOwotICAg
IEdMX0NNRChnbEdldEludGVnZXJ2KEdMX1NDSVNTT1JfQk9YLCBkYXRhKCkucHJldmlvdXNTY2lz
c29yKSk7CisgICAgbV9jb250ZXh0M0QtPmRlcHRoTWFzaygwKTsKKyAgICBtX2NvbnRleHQzRC0+
Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JULCBkYXRhKCkudmlld3BvcnQp
OworICAgIG1fY29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9CT1gsIGRhdGEoKS5wcmV2aW91c1NjaXNzb3IpOwogICAgIG1fY2xpcFN0YWNrLmluaXQoSW50
UmVjdCgwLCAwLCBkYXRhKCkudmlld3BvcnRbMl0sIGRhdGEoKS52aWV3cG9ydFszXSkpOwotICAg
IEdMX0NNRChnbEdldEludGVnZXJ2KEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcsICZkYXRhKCkudGFy
Z2V0RnJhbWVCdWZmZXIpKTsKKyAgICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSX0JJTkRJTkcsICZkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIp
OwogICAgIGRhdGEoKS5QYWludEZsYWdzID0gZmxhZ3M7CiAgICAgYmluZFN1cmZhY2UoMCk7CiB9
CkBAIC0yNzMsMjIgKzIzNiwyMiBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5QYWludGlu
ZyhQYWludEZsYWdzIGZsYWdzKQogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50aW5nKCkK
IHsKICAgICBpZiAoZGF0YSgpLmRpZE1vZGlmeVN0ZW5jaWwpIHsKLSAgICAgICAgZ2xDbGVhclN0
ZW5jaWwoMSk7Ci0gICAgICAgIGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJfQklUKTsKKyAgICAg
ICAgbV9jb250ZXh0M0QtPmNsZWFyU3RlbmNpbCgxKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmNs
ZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOwogICAgIH0KIAotICAg
IGdsVXNlUHJvZ3JhbShkYXRhKCkucHJldmlvdXNQcm9ncmFtKTsKKyAgICBtX2NvbnRleHQzRC0+
dXNlUHJvZ3JhbShkYXRhKCkucHJldmlvdXNQcm9ncmFtKTsKIAotICAgIGdsU2Npc3NvcihkYXRh
KCkucHJldmlvdXNTY2lzc29yWzBdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzFdLCBkYXRhKCku
cHJldmlvdXNTY2lzc29yWzJdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzNdKTsKKyAgICBtX2Nv
bnRleHQzRC0+c2Npc3NvcihkYXRhKCkucHJldmlvdXNTY2lzc29yWzBdLCBkYXRhKCkucHJldmlv
dXNTY2lzc29yWzFdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzJdLCBkYXRhKCkucHJldmlvdXNT
Y2lzc29yWzNdKTsKICAgICBpZiAoZGF0YSgpLnByZXZpb3VzU2Npc3NvclN0YXRlKQotICAgICAg
ICBnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgICAgICBtX2NvbnRleHQzRC0+ZW5hYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwogICAgIGVsc2UKLSAgICAgICAgZ2xE
aXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwogCiAgICAgaWYgKGRhdGEoKS5wcmV2aW91
c0RlcHRoU3RhdGUpCi0gICAgICAgIGdsRW5hYmxlKEdMX0RFUFRIX1RFU1QpOworICAgICAgICBt
X2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUKTsKICAgICBl
bHNlCi0gICAgICAgIGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKTsKKyAgICAgICAgbV9jb250ZXh0
M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1QpOwogCiAjaWYgUExBVEZP
Uk0oUVQpCiAgICAgaWYgKCFtX2NvbnRleHQpCkBAIC0yOTksNDAgKzI2Miw0MCBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6ZW5kUGFpbnRpbmcoKQogI2VuZGlmCiB9CiAKLXZvaWQgVGV4dHVyZU1h
cHBlckdMOjpkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYgcXVhZFRvRHJhdywgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW0qIHNoYWRlclByb2dyYW0sIEdMZW51bSBkcmF3aW5nTW9kZSwgYm9vbCBuZWVkc0JsZW5kaW5n
KQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiBxdWFkVG9E
cmF3LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbSogc2hhZGVyUHJvZ3JhbSwgR0MzRGVudW0gZHJhd2luZ01vZGUs
IGJvb2wgbmVlZHNCbGVuZGluZykKIHsKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbEJpbmRC
dWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAwKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRl
eHQzRC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwKTsKIAot
ICAgIGNvbnN0IEdMZmxvYXQgcXVhZFtdID0geworICAgIGNvbnN0IEdDM0RmbG9hdCBxdWFkW10g
PSB7CiAgICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMSgp
LngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAxKCkueSgpLAog
ICAgICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDIoKS54KCks
IHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMigpLnkoKSwKICAgICAg
ICAgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAzKCkueCgpLCBxdWFk
VG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDMoKS55KCksCiAgICAgICAgIHF1
YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wNCgpLngoKSwgcXVhZFRvRHJh
dy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnA0KCkueSgpCiAgICAgfTsKLSAgICBHTF9D
TUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAy
LCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHF1YWQpKTsKKyAgICBtX2NvbnRleHQzRC0+dmVydGV4
QXR0cmliUG9pbnRlcihzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cihxdWFkKSk7CiAKICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCkucHJv
amVjdGlvbk1hdHJpeCkubXVsdGlwbHkobW9kZWxWaWV3TWF0cml4KS5tdWx0aXBseShUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgKICAgICAgICAgICAgIHF1YWRUb0RyYXcub3JpZ2luYWxUYXJnZXRSZWN0
LndpZHRoKCksIDAsIDAsIDAsCiAgICAgICAgICAgICAwLCBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFy
Z2V0UmVjdC5oZWlnaHQoKSwgMCwgMCwKICAgICAgICAgICAgIDAsIDAsIDEsIDAsCiAgICAgICAg
ICAgICBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC54KCksIHF1YWRUb0RyYXcub3JpZ2lu
YWxUYXJnZXRSZWN0LnkoKSwgMCwgMSkpOwotICAgIGNvbnN0IEdMZmxvYXQgbTRbXSA9IHsKKyAg
ICBHQzNEZmxvYXQgbTRbXSA9IHsKICAgICAgICAgbWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCks
IG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAogICAgICAgICBtYXRyaXgubTIxKCksIG1hdHJp
eC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCiAgICAgICAgIG1hdHJpeC5tMzEo
KSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwKICAgICAgICAgbWF0
cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgpCiAgICAg
fTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRlclByb2dyYW0tPm1hdHJpeExv
Y2F0aW9uKCksIDEsIEdMX0ZBTFNFLCBtNCkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtTWF0
cml4NGZ2KHNoYWRlclByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIGZhbHNlLCBtNCk7CiAK
ICAgICBpZiAobmVlZHNCbGVuZGluZykgewotICAgICAgICBHTF9DTUQoZ2xCbGVuZEZ1bmMoR0xf
T05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKSk7Ci0gICAgICAgIEdMX0NNRChnbEVuYWJsZShH
TF9CTEVORCkpOworICAgICAgICBtX2NvbnRleHQzRC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4
dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICAg
ICAgbV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwogICAgIH0g
ZWxzZQotICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdMX0JMRU5EKSk7CisgICAgICAgIG1fY29u
dGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CiAKLSAgICBHTF9DTUQo
Z2xEcmF3QXJyYXlzKGRyYXdpbmdNb2RlLCAwLCA0KSk7Ci0gICAgR0xfQ01EKGdsRGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7CisgICAgbV9j
b250ZXh0M0QtPmRyYXdBcnJheXMoZHJhd2luZ01vZGUsIDAsIDQpOworICAgIG1fY29udGV4dDNE
LT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCkp
OwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDb2xvciYgY29s
b3IsIGZsb2F0IHdpZHRoLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgpCkBAIC0zNDEsMTcgKzMwNCwxNyBAQCB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0
IHdpZHRoLCBjb25zdCBGbG9hdFJlYwogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJl
ZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLnNvbGlkQ29sb3JQcm9ncmFtKCk7
Ci0gICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKSk7CisgICAgbV9jb250ZXh0
M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CiAKICAgICBmbG9hdCBhbHBoYSA9IGNvbG9y
LmFscGhhKCkgLyAyNTUuMDsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JM
b2NhdGlvbigpLAorICAgIG1fY29udGV4dDNELT51bmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2Nh
dGlvbigpLAogICAgICAgICAgICAgICAgICAgICAgICAoY29sb3IucmVkKCkgLyAyNTUuMCkgKiBh
bHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgKGNvbG9yLmdyZWVuKCkgLyAyNTUuMCkgKiBh
bHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgKGNvbG9yLmJsdWUoKSAvIDI1NS4wKSAqIGFs
cGhhLAotICAgICAgICAgICAgICAgICAgICAgICBhbHBoYSkpOwotICAgIEdMX0NNRChnbExpbmVX
aWR0aCh3aWR0aCkpOworICAgICAgICAgICAgICAgICAgICAgICBhbHBoYSk7CisgICAgbV9jb250
ZXh0M0QtPmxpbmVXaWR0aCh3aWR0aCk7CiAKLSAgICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2Rl
bFZpZXdNYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdMX0xJTkVfTE9PUCwgY29sb3IuaGFzQWxwaGEo
KSk7CisgICAgZHJhd1F1YWQodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdl
dCgpLCBHcmFwaGljc0NvbnRleHQzRDo6TElORV9MT09QLCBjb2xvci5oYXNBbHBoYSgpKTsKIH0K
IAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdSZXBhaW50Q291bnRlcihpbnQgdmFsdWUsIGlu
dCBwb2ludFNpemUsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4KQpAQCAtMzk4LDcgKzM2MSw3IEBAIHZvaWQg
VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJl
LCBjb25zdCBGbG9hdFJlY3QmCiAgICAgZHJhd1RleHR1cmUodGV4dHVyZUdMLmlkKCksIHRleHR1
cmVHTC5pc09wYXF1ZSgpID8gMCA6IFN1cHBvcnRzQmxlbmRpbmcsIHRleHR1cmVHTC5zaXplKCks
IHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSwgbWFzaywgZXhwb3NlZEVkZ2VzKTsKIH0KIAot
I2lmIGRlZmluZWQoR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlKQorI2lmICFVU0UoVEVYTUFQX09Q
RU5HTF9FU18yKQogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJC
KHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBt
YXNrVGV4dHVyZSkKIHsKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHBy
b2dyYW07CkBAIC00MDYsMzYgKzM2OSwzNiBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1Rl
eHR1cmVSZWN0YW5nbGVBUkIodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbgogICAg
ICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3RP
cGFjaXR5QW5kTWFzayk7CiAgICAgZWxzZQogICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJl
ZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3RTaW1wbGUpOwotICAgIEdMX0NNRChnbFVzZVBy
b2dyYW0ocHJvZ3JhbS0+aWQoKSkpOworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dy
YW0tPmlkKCkpOwogCi0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3Jh
bS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRV
UkUwKSk7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJC
LCB0ZXh0dXJlKSk7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW0tPnNvdXJjZVRleHR1
cmVMb2NhdGlvbigpLCAwKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOworICAgIG1fY29udGV4dDNELT5iaW5k
VGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIHRleHR1cmUpOworICAgIG1fY29udGV4
dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVyZUxvY2F0aW9uKCksIDApOwogCi0g
ICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW0tPmZsaXBMb2NhdGlvbigpLCAhIShmbGFncyAm
IFNob3VsZEZsaXBUZXh0dXJlKSkpOwotICAgIEdMX0NNRChnbFVuaWZvcm0yZihwcm9ncmFtLT50
ZXh0dXJlU2l6ZUxvY2F0aW9uKCksIHRleHR1cmVTaXplLndpZHRoKCksIHRleHR1cmVTaXplLmhl
aWdodCgpKSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5mbGlwTG9jYXRp
b24oKSwgISEoZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVyZSkpOworICAgIG1fY29udGV4dDNELT51
bmlmb3JtMmYocHJvZ3JhbS0+dGV4dHVyZVNpemVMb2NhdGlvbigpLCB0ZXh0dXJlU2l6ZS53aWR0
aCgpLCB0ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CiAKICAgICBpZiAoVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9u
KCkpKQotICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9u
KCksIG9wYWNpdHkpKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5v
cGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0eSk7CiAKICAgICBpZiAobWFza1RleHR1cmUgJiYgbWFz
a1RleHR1cmUtPmlzVmFsaWQoKSAmJiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxp
ZFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCkpKSB7CiAgICAg
ICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0PGNv
bnN0IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKLSAgICAgICAgR0xfQ01EKGdsQWN0
aXZlVGV4dHVyZShHTF9URVhUVVJFMSkpOwotICAgICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKSk7Ci0gICAgICAgIEdMX0NNRChnbFVu
aWZvcm0xaShwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCksIDEpKTsKLSAgICAgICAgR0xf
Q01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpOworICAgICAgICBtX2NvbnRleHQzRC0+
YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpOworICAgICAgICBtX2Nv
bnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1hc2tU
ZXh0dXJlR0wtPmlkKCkpOworICAgICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0t
Pm1hc2tUZXh0dXJlTG9jYXRpb24oKSwgMSk7CisgICAgICAgIG1fY29udGV4dDNELT5hY3RpdmVU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgfQogCiAgICAgYm9vbCBu
ZWVkc0JsZW5kaW5nID0gKGZsYWdzICYgU3VwcG9ydHNCbGVuZGluZykgfHwgb3BhY2l0eSA8IDAu
OTkgfHwgbWFza1RleHR1cmU7Ci0gICAgZHJhd1F1YWQodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0
cml4LCBwcm9ncmFtLmdldCgpLCBHTF9UUklBTkdMRV9GQU4sIG5lZWRzQmxlbmRpbmcpOworICAg
IGRyYXdRdWFkKHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgcHJvZ3JhbS5nZXQoKSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgbmVlZHNCbGVuZGluZyk7CiB9Ci0jZW5kaWYg
Ly8gZGVmaW5lZChHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUpIAorI2VuZGlmIC8vICFVU0UoVEVY
TUFQX09QRU5HTF9FU18yKQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUodWlu
dDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIC8qIHRleHR1cmVTaXpl
ICovLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUq
IG1hc2tUZXh0dXJlLCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpCiB7Ci0gICAgYm9vbCBuZWVkc0Fu
dGlsaWFpbmcgPSBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyAmJiAhbW9kZWxWaWV3
TWF0cml4LmlzSW50ZWdlclRyYW5zbGF0aW9uKCk7Ci0gICAgaWYgKG5lZWRzQW50aWxpYWluZyAm
JiBkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodGV4dHVyZSwgZmxhZ3MsIHRhcmdldFJlY3Qs
IG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgbWFza1RleHR1cmUsIGV4cG9zZWRFZGdlcykpCisg
ICAgYm9vbCBuZWVkc0FudGlhbGlhc2luZyA9IG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFz
aW5nICYmICFtb2RlbFZpZXdNYXRyaXguaXNJbnRlZ2VyVHJhbnNsYXRpb24oKTsKKyAgICBpZiAo
bmVlZHNBbnRpYWxpYXNpbmcgJiYgZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHRleHR1cmUs
IGZsYWdzLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0dXJl
LCBleHBvc2VkRWRnZXMpKQogICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbTsKQEAgLTQ0MywxNSArNDA2LDE1IEBAIHZvaWQgVGV4
dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywg
Y29uc3QgSW50U2l6ZSYKICAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyOjpPcGFjaXR5QW5kTWFzayk7CiAgICAgZWxzZQogICAgICAgICBwcm9ncmFt
ID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNo
YWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNpbXBsZSk7Ci0gICAgR0xf
Q01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVBy
b2dyYW0ocHJvZ3JhbS0+aWQoKSk7CiAKICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0o
cHJvZ3JhbS5nZXQoKSwgdGV4dHVyZSwgZmxhZ3MsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJp
eCwgb3BhY2l0eSwgbWFza1RleHR1cmUpOwogfQogCi1zdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRy
aXggdmlld3BvcnRNYXRyaXgoKQorc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZpZXdwb3J0
TWF0cml4KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QpCiB7Ci0gICAgR0xpbnQgdmlld3Bv
cnRbNF07Ci0gICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIHZpZXdwb3J0KSk7
CisgICAgR0MzRGludCB2aWV3cG9ydFs0XTsKKyAgICBjb250ZXh0M0QtPmdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dDNEOjpWSUVXUE9SVCwgdmlld3BvcnQpOwogCiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbWF0cml4OwogICAgIG1hdHJpeC50cmFuc2xhdGUzZCh2aWV3cG9ydFswXSwgdmll
d3BvcnRbMV0sIDApOwpAQCAtNTQ4LDcgKzUxMSw3IEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpk
cmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3Ms
CiAgICAgLy8gYW50aWFsaWFzaW5nLiBOb3RlIGhlcmUgdGhhdCB3ZSBhcmUgYWxzbyBpbmNsdWRp
bmcgdGhlIHZpZXdwb3J0IG1hdHJpeCAod2hpY2gKICAgICAvLyB0cmFuc2xhdGVzIGZyb20gbm9y
bWFsaXplZCBkZXZpY2UgY29vcmRpbmF0ZXMgdG8gc2NyZWVuIGNvb3JkaW5hdGVzKSwgYmVjYXVz
ZSB0aGVzZQogICAgIC8vIHZhbHVlcyBhcmUgY29uc3VtZWQgaW4gdGhlIGZyYWdtZW50IHNoYWRl
ciwgd2hpY2ggd29ya3MgaW4gc2NyZWVuIGNvb3JkaW5hdGVzLgotICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHNjcmVlblNwYWNlVHJhbnNmb3JtID0gdmlld3BvcnRNYXRyaXgoKS5tdWx0aXBseShU
cmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCkucHJvamVjdGlvbk1hdHJpeCkpLm11bHRpcGx5KG1v
ZGVsVmlld01hdHJpeCkudG8yZFRyYW5zZm9ybSgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHNjcmVlblNwYWNlVHJhbnNmb3JtID0gdmlld3BvcnRNYXRyaXgobV9jb250ZXh0M0QuZ2V0KCkp
Lm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KSku
bXVsdGlwbHkobW9kZWxWaWV3TWF0cml4KS50bzJkVHJhbnNmb3JtKCk7CiAgICAgaWYgKCFzY3Jl
ZW5TcGFjZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIEZsb2F0UXVhZCBxdWFkSW5TY3JlZW5TcGFjZSA9IHNjcmVlblNwYWNlVHJhbnNmb3JtLm1h
cFF1YWQob3JpZ2luYWxUYXJnZXRSZWN0KTsKQEAgLTU3Miw4ICs1MzUsOCBAQCBib29sIFRleHR1
cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUs
IEZsYWdzIGZsYWdzLAogICAgIHF1YWRUb0VkZ2VBcnJheShpbmZsYXRlUXVhZChxdWFkSW5TY3Jl
ZW5TcGFjZS5ib3VuZGluZ0JveCgpLCAgaW5mbGF0aW9uRGlzdGFuY2UpLCB0YXJnZXRRdWFkRWRn
ZXMgKyAxMik7CiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxp
YXNpbmdOb01hc2s+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuYW50aWFsaWFzaW5nTm9NYXNrUHJvZ3JhbSgpOwotICAgIEdMX0NNRChn
bFVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOwotICAgIEdMX0NNRChnbFVuaWZvcm0zZnYocHJv
Z3JhbS0+ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSwgOCwgdGFyZ2V0
UXVhZEVkZ2VzKSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7
CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0zZnYocHJvZ3JhbS0+ZXhwYW5kZWRRdWFkRWRnZXNJ
blNjcmVlblNwYWNlTG9jYXRpb24oKSwgOCwgdGFyZ2V0UXVhZEVkZ2VzKTsKIAogICAgIGRyYXdU
ZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0dXJlLCBmbGFncywgRHJh
d1F1YWQob3JpZ2luYWxUYXJnZXRSZWN0LCBleHBhbmRlZFF1YWRJblRleHR1cmVDb29yZGluYXRl
cyksIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgMCAvKiBtYXNrVGV4dHVyZSAqLyk7CiAgICAg
cmV0dXJuIHRydWU7CkBAIC01ODEsMjYgKzU0NCwyNiBAQCBib29sIFRleHR1cmVNYXBwZXJHTDo6
ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdz
LAogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCB1aW50MzJfdCB0ZXh0dXJlLCBGbGFn
cyBmbGFncywgY29uc3QgRHJhd1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1
cmUqIG1hc2tUZXh0dXJlKQogewotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShH
TF9URVhUVVJFMCkpOwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRl
eHR1cmUpKTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVyZUxv
Y2F0aW9uKCksIDApKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXko
cHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBtX2NvbnRl
eHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPnNvdXJjZVRleHR1cmVMb2NhdGlvbigpLCAwKTsKIAot
ICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtLT5mbGlwTG9jYXRpb24oKSwgISEoZmxhZ3Mg
JiBTaG91bGRGbGlwVGV4dHVyZSkpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dy
YW0tPmZsaXBMb2NhdGlvbigpLCAhIShmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSk7CiAKICAg
ICBpZiAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24o
cHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCkpKQotICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWYo
cHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpKTsKKyAgICAgICAgbV9jb250ZXh0
M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0eSk7CiAKICAg
ICBpZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSAmJiBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLT5tYXNrVGV4
dHVyZUxvY2F0aW9uKCkpKSB7CiAgICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1Rl
eHR1cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJl
KTsKLSAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSkpOwotICAgICAg
ICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgp
KSk7Ci0gICAgICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0
aW9uKCksIDEpKTsKLSAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkp
OworICAgICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRTEpOworICAgICAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPmlkKCkpOworICAgICAgICBtX2NvbnRl
eHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSwgMSk7CisgICAg
ICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
MCk7CiAgICAgfQogCiAgICAgYm9vbCBuZWVkc0JsZW5kaW5nID0gKGZsYWdzICYgU3VwcG9ydHNC
bGVuZGluZykgfHwgb3BhY2l0eSA8IDAuOTkgfHwgbWFza1RleHR1cmU7Ci0gICAgZHJhd1F1YWQo
cXVhZFRvRHJhdywgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLCBHTF9UUklBTkdMRV9GQU4sIG5l
ZWRzQmxlbmRpbmcpOworICAgIGRyYXdRdWFkKHF1YWRUb0RyYXcsIG1vZGVsVmlld01hdHJpeCwg
cHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgbmVlZHNCbGVuZGluZyk7
CiB9CiAKIGJvb2wgQml0bWFwVGV4dHVyZUdMOjpjYW5SZXVzZVdpdGgoY29uc3QgSW50U2l6ZSYg
Y29udGVudHNTaXplLCBGbGFncykKQEAgLTYxMSw3ICs1NzQsNyBAQCBib29sIEJpdG1hcFRleHR1
cmVHTDo6Y2FuUmV1c2VXaXRoKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSwgRmxhZ3MpCiAj
aWYgT1MoREFSV0lOKQogI2RlZmluZSBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQ
RSBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYKICNlbHNlCi0jZGVmaW5lIERFRkFVTFRfVEVY
VFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFIEdMX1VOU0lHTkVEX0JZVEUKKyNkZWZpbmUgREVGQVVM
VF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUKICNlbmRpZgogCiBzdGF0aWMgdm9pZCBzd2l6emxlQkdSQVRvUkdCQSh1aW50MzJfdCog
ZGF0YSwgY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHN0cmlkZSA9IDApCkBAIC02NDYsMzggKzYw
OSw0MiBAQCBzdGF0aWMgYm9vbCBkcml2ZXJTdXBwb3J0c1N1YkltYWdlKCkKIAogdm9pZCBCaXRt
YXBUZXh0dXJlR0w6OmRpZFJlc2V0KCkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOworCiAgICAgaWYgKCFt
X2lkKQotICAgICAgICBHTF9DTUQoZ2xHZW5UZXh0dXJlcygxLCAmbV9pZCkpOworICAgICAgICBt
X2lkID0gY29udGV4dDNELT5jcmVhdGVUZXh0dXJlKCk7CiAKICAgICBtX3Nob3VsZENsZWFyID0g
dHJ1ZTsKICAgICBpZiAobV90ZXh0dXJlU2l6ZSA9PSBjb250ZW50U2l6ZSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBHTHVpbnQgZm9ybWF0ID0gZHJpdmVyU3VwcG9ydHNCR1JBU3dpenpsaW5n
KCkgPyBHTF9CR1JBIDogR0xfUkdCQTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGZvcm1hdCA9IGRy
aXZlclN1cHBvcnRzQkdSQVN3aXp6bGluZygpID8gR3JhcGhpY3NDb250ZXh0M0Q6OkJHUkEgOiBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQTsKIAogICAgIG1fdGV4dHVyZVNpemUgPSBjb250ZW50U2l6
ZSgpOwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKTsKLSAg
ICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJ
TFRFUiwgR0xfTElORUFSKSk7Ci0gICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUikpOwotICAgIEdMX0NNRChnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RP
X0VER0UpKTsKLSAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKSk7Ci0gICAgR0xfQ01EKGdsVGV4SW1hZ2Uy
RChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4
dHVyZVNpemUuaGVpZ2h0KCksIDAsIGZvcm1hdCwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5T
RkVSX1RZUEUsIDApKTsKKyAgICBjb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBtX2lkKTsKKyAgICBjb250ZXh0M0QtPnRleFBhcmFtZXRlcmkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01J
Tl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIGNvbnRleHQzRC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAg
Y29udGV4dDNELT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFN
UF9UT19FREdFKTsKKyAgICBjb250ZXh0M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGNvbnRleHQzRC0+dGV4SW1hZ2UyRERp
cmVjdChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgZm9ybWF0LCBtX3RleHR1cmVT
aXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIGZvcm1hdCwgREVGQVVMVF9U
RVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIDApOwogfQogCiAKIHZvaWQgQml0bWFwVGV4dHVy
ZUdMOjp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJn
ZXRSZWN0LCBjb25zdCBJbnRQb2ludCYgc291cmNlT2Zmc2V0LCBpbnQgYnl0ZXNQZXJMaW5lKQog
ewotICAgIEdMdWludCBnbEZvcm1hdCA9IEdMX1JHQkE7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1
cmUoR0xfVEVYVFVSRV8yRCwgbV9pZCkpOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
M0QgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CisKKyAgICBQbGF0Zm9y
bTNET2JqZWN0IGdsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CisgICAgY29udGV4
dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9pZCk7CiAK
ICAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclBpeGVsID0gNDsKICAgICBpZiAoZHJpdmVyU3Vw
cG9ydHNCR1JBU3dpenpsaW5nKCkpCi0gICAgICAgIGdsRm9ybWF0ID0gR0xfQkdSQTsKKyAgICAg
ICAgZ2xGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6QkdSQTsKICAgICBlbHNlCiAgICAgICAg
IHN3aXp6bGVCR1JBVG9SR0JBKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihjb25zdF9jYXN0
PHZvaWQqPihkYXRhKSksIEludFJlY3Qoc291cmNlT2Zmc2V0LCB0YXJnZXRSZWN0LnNpemUoKSks
IGJ5dGVzUGVyTGluZSAvIGJ5dGVzUGVyUGl4ZWwpOwogCiAgICAgaWYgKGJ5dGVzUGVyTGluZSA9
PSB0YXJnZXRSZWN0LndpZHRoKCkgLyA0ICYmIHNvdXJjZU9mZnNldCA9PSBJbnRQb2ludDo6emVy
bygpKSB7Ci0gICAgICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwg
dGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdl
dFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJf
VFlQRSwgKGNvbnN0IGNoYXIqKWRhdGEpKTsKKyAgICAgICAgY29udGV4dDNELT50ZXhTdWJJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFy
Z2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xG
b3JtYXQsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29uc3QgY2hhciop
ZGF0YSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTY5NSwxOSArNjYyLDE5IEBAIHZv
aWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25z
dCBJbnRSZWN0JiB0YXJnZXRSZWN0CiAgICAgICAgICAgICBkc3QgKz0gdGFyZ2V0Qnl0ZXNQZXJM
aW5lOwogICAgICAgICB9CiAKLSAgICAgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhU
VVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lk
dGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIERFRkFVTFRfVEVYVFVSRV9QSVhF
TF9UUkFOU0ZFUl9UWVBFLCB0ZW1wb3JhcnlEYXRhLmRhdGEoKSkpOworICAgICAgICBjb250ZXh0
M0QtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIHRhcmdl
dFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0
LmhlaWdodCgpLCBnbEZvcm1hdCwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUs
IHRlbXBvcmFyeURhdGEuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lmICFk
ZWZpbmVkKFRFWE1BUF9PUEVOR0xfRVNfMikKICAgICAvLyBVc2UgdGhlIE9wZW5HTCBzdWItaW1h
Z2UgZXh0ZW5zaW9uLCBub3cgdGhhdCB3ZSBrbm93IGl0J3MgYXZhaWxhYmxlLgotICAgIEdMX0NN
RChnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCBieXRlc1BlckxpbmUgLyBieXRl
c1BlclBpeGVsKSk7Ci0gICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9X
Uywgc291cmNlT2Zmc2V0LnkoKSkpOwotICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdMX1VOUEFD
S19TS0lQX1BJWEVMUywgc291cmNlT2Zmc2V0LngoKSkpOwotICAgIEdMX0NNRChnbFRleFN1Yklt
YWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0
YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBERUZBVUxU
X1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgKGNvbnN0IGNoYXIqKWRhdGEpKTsKLSAgICBH
TF9DTUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgMCkpOwotICAgIEdMX0NN
RChnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JPV1MsIDApKTsKLSAgICBHTF9DTUQoZ2xQ
aXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsIDApKTsKKyAgICBjb250ZXh0M0QtPnBp
eGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCBieXRlc1BlckxpbmUgLyBieXRlc1BlclBp
eGVsKTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JPV1MsIHNv
dXJjZU9mZnNldC55KCkpOworICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NL
SVBfUElYRUxTLCBzb3VyY2VPZmZzZXQueCgpKTsKKyAgICBjb250ZXh0M0QtPnRleFN1YkltYWdl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJn
ZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBnbEZv
cm1hdCwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIChjb25zdCBjaGFyKilk
YXRhKTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCAw
KTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JPV1MsIDApOwor
ICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUElYRUxTLCAwKTsKICNl
bmRpZgogfQogCkBAIC03NDMsMTkgKzcxMCwxOSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJh
d0ZpbHRlcmVkKGNvbnN0IEJpdG1hcFRleHR1cmUmIHNvdXJjZVRleHR1cmUsIGNvbnN0IEJpdAog
CiAgICAgcHJvZ3JhbS0+cHJlcGFyZShmaWx0ZXIsIHBhc3MsIHNvdXJjZVRleHR1cmUuY29udGVu
dFNpemUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oY29udGVudFRleHR1
cmUpLmlkKCkpOwogCi0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3Jh
bS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eShwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVy
ZShHTF9URVhUVVJFMCkpOwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHNvdXJjZVRleHR1cmUpLmlkKCkp
KTsKLSAgICBnbFVuaWZvcm0xaShwcm9ncmFtLT50ZXh0dXJlVW5pZm9ybSgpLCAwKTsKLSAgICBj
b25zdCBHTGZsb2F0IHRhcmdldFZlcnRpY2VzW10gPSB7LTEsIC0xLCAxLCAtMSwgMSwgMSwgLTEs
IDF9OwotICAgIGNvbnN0IEdMZmxvYXQgc291cmNlVmVydGljZXNbXSA9IHswLCAwLCAxLCAwLCAx
LCAxLCAwLCAxfTsKLSAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZl
cnRleEF0dHJpYigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHRhcmdldFZlcnRpY2VzKSk7
Ci0gICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT50ZXhDb29yZEF0dHJp
YigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHNvdXJjZVZlcnRpY2VzKSk7Ci0gICAgR0xf
Q01EKGdsRGlzYWJsZShHTF9CTEVORCkpOwotICAgIEdMX0NNRChnbERyYXdBcnJheXMoR0xfVFJJ
QU5HTEVfRkFOLCAwLCA0KSk7Ci0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0
dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmliKCkpKTsKKyAgICBtX2NvbnRleHQzRC0+
ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1f
Y29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT50ZXhDb29yZEF0dHJp
YigpKTsKKyAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRTApOworICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oc291cmNl
VGV4dHVyZSkuaWQoKSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT50ZXh0
dXJlVW5pZm9ybSgpLCAwKTsKKyAgICBjb25zdCBHQzNEZmxvYXQgdGFyZ2V0VmVydGljZXNbXSA9
IHstMSwgLTEsIDEsIC0xLCAxLCAxLCAtMSwgMX07CisgICAgY29uc3QgR0MzRGZsb2F0IHNvdXJj
ZVZlcnRpY2VzW10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07CisgICAgbV9jb250ZXh0M0Qt
PnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIodGFyZ2V0VmVydGljZXMpKTsK
KyAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT50ZXhDb29yZEF0
dHJpYigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRy
KHNvdXJjZVZlcnRpY2VzKSk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250
ZXh0M0Q6OkJMRU5EKTsKKyAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRl
eHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+
ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmliKCkpOwogfQog
CiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IEJpdG1hcFRleHR1cmVHTDo6YXBwbHlGaWx0ZXJz
KGNvbnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiBmaWx0ZXJzKQpAQCAtNzk2LDE3ICs3NjMsMTkgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6
OmluaXRpYWxpemVTdGVuY2lsKCkKIHsKICAgICBpZiAobV9yYm8pCiAgICAgICAgIHJldHVybjsK
LSAgICBHTF9DTUQoZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX3JibykpOwotICAgIEdMX0NNRChn
bEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX3JibykpOworCisgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0
M0QoKTsKKyAgICBtX3JibyA9IGNvbnRleHQzRC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAg
Y29udGV4dDNELT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVIsIG1fcmJvKTsKICNpZmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSAgICBHTF9DTUQoZ2xSZW5k
ZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgR0xfU1RFTkNJTF9JTkRFWDgsIG1fdGV4
dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSkpOworICAgIGNvbnRleHQz
RC0+cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDgsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwg
bV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CiAjZWxzZQotICAgIEdMX0NNRChnbFJlbmRlcmJ1ZmZl
clN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9ERVBUSF9TVEVOQ0lMLCBtX3RleHR1cmVTaXpl
LndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKTsKKyAgICBjb250ZXh0M0QtPnJlbmRl
cmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX1NURU5DSUwsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJl
U2l6ZS5oZWlnaHQoKSk7CiAjZW5kaWYKLSAgICBHTF9DTUQoZ2xCaW5kUmVuZGVyYnVmZmVyKEdM
X1JFTkRFUkJVRkZFUiwgMCkpOwotICAgIEdMX0NNRChnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwg
bV9yYm8pKTsKLSAgICBHTF9DTUQoZ2xDbGVhclN0ZW5jaWwoMCkpOwotICAgIEdMX0NNRChnbENs
ZWFyKEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpOworICAgIGNvbnRleHQzRC0+YmluZFJlbmRlcmJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKKyAgICBjb250ZXh0M0Qt
PmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUiwgbV9yYm8pOworICAgIGNvbnRleHQzRC0+Y2xlYXJTdGVuY2lsKDApOwor
ICAgIGNvbnRleHQzRC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJ
VCk7CiB9CiAKIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpjbGVhcklmTmVlZGVkKCkKQEAgLTgxNCwx
MCArNzgzLDEyIEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpjbGVhcklmTmVlZGVkKCkKICAgICBp
ZiAoIW1fc2hvdWxkQ2xlYXIpCiAgICAgICAgIHJldHVybjsKIAorICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CisK
ICAgICBtX2NsaXBTdGFjay5pbml0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV90ZXh0dXJl
U2l6ZSkpOwotICAgIG1fY2xpcFN0YWNrLmFwcGx5KCk7Ci0gICAgR0xfQ01EKGdsQ2xlYXJDb2xv
cigwLCAwLCAwLCAwKSk7Ci0gICAgR0xfQ01EKGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCkp
OworICAgIG1fY2xpcFN0YWNrLmFwcGx5KGNvbnRleHQzRCk7CisgICAgY29udGV4dDNELT5jbGVh
ckNvbG9yKDAsIDAsIDAsIDApOworICAgIGNvbnRleHQzRC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOwogICAgIG1fc2hvdWxkQ2xlYXIgPSBmYWxzZTsKIH0KIApA
QCAtODI2LDMzICs3OTcsMzcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmNyZWF0ZUZib0lmTmVl
ZGVkKCkKICAgICBpZiAobV9mYm8pCiAgICAgICAgIHJldHVybjsKIAotICAgIEdMX0NNRChnbEdl
bkZyYW1lYnVmZmVycygxLCAmbV9mYm8pKTsKLSAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIo
R0xfRlJBTUVCVUZGRVIsIG1fZmJvKSk7Ci0gICAgR0xfQ01EKGdsRnJhbWVidWZmZXJUZXh0dXJl
MkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBp
ZCgpLCAwKSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1h
cHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBtX2ZibyA9IGNvbnRleHQzRC0+Y3JlYXRl
RnJhbWVidWZmZXIoKTsKKyAgICBjb250ZXh0M0QtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICBjb250ZXh0M0QtPmZyYW1lYnVmZmVy
VGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgaWQo
KSwgMCk7CiAgICAgbV9zaG91bGRDbGVhciA9IHRydWU7CiB9CiAKIHZvaWQgQml0bWFwVGV4dHVy
ZUdMOjpiaW5kKCkKIHsKLSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAw
KSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+
Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBjb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKICAgICBjcmVhdGVGYm9JZk5lZWRlZCgpOwotICAg
IEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pKTsKLSAgICBH
TF9DTUQoZ2xWaWV3cG9ydCgwLCAwLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNp
emUuaGVpZ2h0KCkpKTsKKyAgICBjb250ZXh0M0QtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICBjb250ZXh0M0QtPnZpZXdwb3J0KDAs
IDAsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CiAgICAg
Y2xlYXJJZk5lZWRlZCgpOwogICAgIG1fdGV4dHVyZU1hcHBlci0+ZGF0YSgpLnByb2plY3Rpb25N
YXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KG1fdGV4dHVyZVNpemUsIHRydWUgLyogbWly
cm9yZWQgKi8pOwotICAgIG1fY2xpcFN0YWNrLmFwcGx5KCk7CisgICAgbV9jbGlwU3RhY2suYXBw
bHkoY29udGV4dDNEKTsKIH0KIAogQml0bWFwVGV4dHVyZUdMOjp+Qml0bWFwVGV4dHVyZUdMKCkK
IHsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5n
cmFwaGljc0NvbnRleHQzRCgpOworCiAgICAgaWYgKG1faWQpCi0gICAgICAgIEdMX0NNRChnbERl
bGV0ZVRleHR1cmVzKDEsICZtX2lkKSk7CisgICAgICAgIGNvbnRleHQzRC0+ZGVsZXRlVGV4dHVy
ZShtX2lkKTsKIAogICAgIGlmIChtX2ZibykKLSAgICAgICAgR0xfQ01EKGdsRGVsZXRlRnJhbWVi
dWZmZXJzKDEsICZtX2ZibykpOworICAgICAgICBjb250ZXh0M0QtPmRlbGV0ZUZyYW1lYnVmZmVy
KG1fZmJvKTsKIAogICAgIGlmIChtX3JibykKLSAgICAgICAgR0xfQ01EKGdsRGVsZXRlUmVuZGVy
YnVmZmVycygxLCAmbV9yYm8pKTsKKyAgICAgICAgY29udGV4dDNELT5kZWxldGVSZW5kZXJidWZm
ZXIobV9yYm8pOwogfQogCiBib29sIEJpdG1hcFRleHR1cmVHTDo6aXNWYWxpZCgpIGNvbnN0CkBA
IC04NzIsMTEgKzg0NywxMSBAQCBUZXh0dXJlTWFwcGVyR0w6On5UZXh0dXJlTWFwcGVyR0woKQog
CiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmluZERlZmF1bHRTdXJmYWNlKCkKIHsKLSAgICBHTF9D
TUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGRhdGEoKS50YXJnZXRGcmFtZUJ1
ZmZlcikpOworICAgIG1fY29udGV4dDNELT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpOwogICAgIEludFNpemUg
dmlld3BvcnRTaXplKGRhdGEoKS52aWV3cG9ydFsyXSwgZGF0YSgpLnZpZXdwb3J0WzNdKTsKICAg
ICBkYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgodmlld3Bv
cnRTaXplLCBkYXRhKCkuUGFpbnRGbGFncyAmIFBhaW50aW5nTWlycm9yZWQpOwotICAgIEdMX0NN
RChnbFZpZXdwb3J0KGRhdGEoKS52aWV3cG9ydFswXSwgZGF0YSgpLnZpZXdwb3J0WzFdLCB2aWV3
cG9ydFNpemUud2lkdGgoKSwgdmlld3BvcnRTaXplLmhlaWdodCgpKSk7Ci0gICAgbV9jbGlwU3Rh
Y2suYXBwbHkoKTsKKyAgICBtX2NvbnRleHQzRC0+dmlld3BvcnQoZGF0YSgpLnZpZXdwb3J0WzBd
LCBkYXRhKCkudmlld3BvcnRbMV0sIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCB2aWV3cG9ydFNpemUu
aGVpZ2h0KCkpOworICAgIG1fY2xpcFN0YWNrLmFwcGx5KG1fY29udGV4dDNELmdldCgpKTsKICAg
ICBkYXRhKCkuY3VycmVudFN1cmZhY2UuY2xlYXIoKTsKIH0KIApAQCAtOTA2LDcgKzg4MSw3IEBA
IGJvb2wgVGV4dHVyZU1hcHBlckdMOjpiZWdpblNjaXNzb3JDbGlwKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNs
aXBTdGFjaygpLmN1cnJlbnQoKS5zY2lzc29yQm94LmludGVyc2VjdChyZWN0KTsKLSAgICBjbGlw
U3RhY2soKS5hcHBseSgpOworICAgIGNsaXBTdGFjaygpLmFwcGx5KG1fY29udGV4dDNELmdldCgp
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTIwLDEwICs4OTUsMTAgQEAgdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxW
aWV3TWF0cml4LCBjb24KIAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4g
cHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaW1wbGUpOwog
Ci0gICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKSk7Ci0gICAgR0xfQ01EKGds
RW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBj
b25zdCBHTGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07Ci0gICAg
R0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwg
R0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCB1bml0UmVjdCkpOworICAgIG1fY29udGV4dDNELT51c2VQ
cm9ncmFtKHByb2dyYW0tPmlkKCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgY29uc3QgR0MzRGZsb2F0IHVu
aXRSZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07CisgICAgbV9jb250ZXh0M0QtPnZl
cnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIodW5pdFJlY3QpKTsKIAogICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5w
cm9qZWN0aW9uTWF0cml4KQogICAgICAgICAgICAgLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkK
QEAgLTkzMiwxNCArOTA3LDE0IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAgICAgICAgICAg
ICAgICAgMCwgMCwgMSwgMCwKICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0
UmVjdC55KCksIDAsIDEpKTsKIAotICAgIGNvbnN0IEdMZmxvYXQgbTRbXSA9IHsKKyAgICBjb25z
dCBHQzNEZmxvYXQgbTRbXSA9IHsKICAgICAgICAgbWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCks
IG1hdHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAogICAgICAgICBtYXRyaXgubTIxKCksIG1hdHJp
eC5tMjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCiAgICAgICAgIG1hdHJpeC5tMzEo
KSwgbWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwKICAgICAgICAgbWF0
cml4Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgpCiAgICAg
fTsKIAotICAgIGNvbnN0IEdMZmxvYXQgbTRhbGxbXSA9IHsKKyAgICBjb25zdCBHQzNEZmxvYXQg
bTRhbGxbXSA9IHsKICAgICAgICAgMiwgMCwgMCwgMCwKICAgICAgICAgMCwgMiwgMCwgMCwKICAg
ICAgICAgMCwgMCwgMSwgMCwKQEAgLTk0OCw0MyArOTIzLDQyIEBAIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJp
eCwgY29uCiAKICAgICBpbnQmIHN0ZW5jaWxJbmRleCA9IGNsaXBTdGFjaygpLmN1cnJlbnQoKS5z
dGVuY2lsSW5kZXg7CiAKLSAgICBHTF9DTUQoZ2xFbmFibGUoR0xfU1RFTkNJTF9URVNUKSk7Cisg
ICAgbV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKTsK
IAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBkbyBhbnkgYWN0dWFsIGRyYXdpbmcuCi0gICAg
R0xfQ01EKGdsU3RlbmNpbEZ1bmMoR0xfTkVWRVIsIHN0ZW5jaWxJbmRleCwgc3RlbmNpbEluZGV4
KSk7CisgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpORVZF
Uiwgc3RlbmNpbEluZGV4LCBzdGVuY2lsSW5kZXgpOwogCiAgICAgLy8gT3BlcmF0ZSBvbmx5IG9u
IHRoZSBzdGVuY2lsSW5kZXggYW5kIGFib3ZlLgotICAgIEdMX0NNRChnbFN0ZW5jaWxNYXNrKDB4
ZmYgJiB+KHN0ZW5jaWxJbmRleCAtIDEpKSk7CisgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxNYXNr
KDB4ZmYgJiB+KHN0ZW5jaWxJbmRleCAtIDEpKTsKIAogICAgIC8vIEZpcnN0IGNsZWFyIHRoZSBl
bnRpcmUgYnVmZmVyIGF0IHRoZSBjdXJyZW50IGluZGV4LgotICAgIEdMX0NNRChnbFVuaWZvcm1N
YXRyaXg0ZnYocHJvZ3JhbS0+bWF0cml4TG9jYXRpb24oKSwgMSwgR0xfRkFMU0UsIG00YWxsKSk7
Ci0gICAgR0xfQ01EKGdsU3RlbmNpbE9wKEdMX1pFUk8sIEdMX1pFUk8sIEdMX1pFUk8pKTsKLSAg
ICBHTF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpOworICAgIG1fY29u
dGV4dDNELT51bmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIGZh
bHNlLCBjb25zdF9jYXN0PEdDM0RmbG9hdCo+KG00YWxsKSk7CisgICAgbV9jb250ZXh0M0QtPnN0
ZW5jaWxPcChHcmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8s
IEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKKyAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhH
cmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKIAogICAgIC8vIE5vdyBhcHBs
eSB0aGUgY3VycmVudCBpbmRleCB0byB0aGUgbmV3IHF1YWQuCi0gICAgR0xfQ01EKGdsU3RlbmNp
bE9wKEdMX1JFUExBQ0UsIEdMX1JFUExBQ0UsIEdMX1JFUExBQ0UpKTsKLSAgICBHTF9DTUQoZ2xV
bmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIEdMX0ZBTFNFLCBt
NCkpOwotICAgIEdMX0NNRChnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSk7Cisg
ICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxPcChHcmFwaGljc0NvbnRleHQzRDo6UkVQTEFDRSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFUExBQ0UsIEdyYXBoaWNzQ29udGV4dDNEOjpSRVBMQUNFKTsKKyAg
ICBtX2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigp
LCAxLCBmYWxzZSwgY29uc3RfY2FzdDxHQzNEZmxvYXQqPihtNCkpOworICAgIG1fY29udGV4dDNE
LT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQpOwogCiAg
ICAgLy8gQ2xlYXIgdGhlIHN0YXRlLgotICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbFN0ZW5jaWxNYXNr
KDApKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0t
PnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE1hc2soMCk7CiAKICAg
ICAvLyBJbmNyZWFzZSBzdGVuY2lsSW5kZXggYW5kIGFwcGx5IHN0ZW5jaWwgdGVzdGluZy4KICAg
ICBzdGVuY2lsSW5kZXggKj0gMjsKLSAgICBjbGlwU3RhY2soKS5hcHBseSgpOworICAgIGNsaXBT
dGFjaygpLmFwcGx5KG1fY29udGV4dDNELmdldCgpKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVy
R0w6OmVuZENsaXAoKQogewogICAgIGNsaXBTdGFjaygpLnBvcCgpOwotICAgIGNsaXBTdGFjaygp
LmFwcGx5KCk7CisgICAgY2xpcFN0YWNrKCkuYXBwbHkobV9jb250ZXh0M0QuZ2V0KCkpOwogfQog
CiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlVGV4dHVy
ZSgpCiB7Ci0gICAgQml0bWFwVGV4dHVyZUdMKiB0ZXh0dXJlID0gbmV3IEJpdG1hcFRleHR1cmVH
TCgpOwotICAgIHRleHR1cmUtPnNldFRleHR1cmVNYXBwZXIodGhpcyk7CisgICAgQml0bWFwVGV4
dHVyZUdMKiB0ZXh0dXJlID0gbmV3IEJpdG1hcFRleHR1cmVHTCh0aGlzKTsKICAgICByZXR1cm4g
YWRvcHRSZWYodGV4dHVyZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaAppbmRleCAwNzZlNjVmLi44
YTcyZDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCkBAIC0yMyw4ICsyMyw4IEBACiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAi
T3BlbkdMU2hpbXMuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVHJh
bnNmb3JtYXRpb25NYXRyaXguaCIKIApAQCAtMzgsNyArMzgsNiBAQCBjbGFzcyBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTsKIGNsYXNzIFRleHR1cmVNYXBwZXJHTCA6IHB1YmxpYyBUZXh0dXJl
TWFwcGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyR0w+
IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyR0wpOyB9Ci0gICAg
VGV4dHVyZU1hcHBlckdMKCk7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlckdMKCk7CiAKICAg
ICBlbnVtIEZsYWcgewpAQCAtNTQsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1
cmUqIG1hc2tUZXh0dXJlLCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpIE9WRVJSSURFOwogICAgIHZp
cnR1YWwgdm9pZCBkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncywgY29uc3QgSW50
U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3Qg
Qml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIHVuc2lnbmVkIGV4cG9zZWRFZGdlcyA9IEFsbEVk
Z2VzKTsKIAotI2lmIGRlZmluZWQoR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlKQorI2lmICFVU0Uo
VEVYTUFQX09QRU5HTF9FU18yKQogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZVJlY3Rhbmds
ZUFSQih1aW50MzJfdCB0ZXh0dXJlLCBGbGFncywgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFz
a1RleHR1cmUpOwogI2VuZGlmCiAKQEAgLTY2LDYgKzY1LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgSW50U2l6ZSBtYXhUZXh0dXJlU2l6ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIEludFNp
emUoMjAwMCwgMjAwMCk7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
Y3JlYXRlVGV4dHVyZSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0KiBn
cmFwaGljc0NvbnRleHQoKSBPVkVSUklERSB7IHJldHVybiBtX2NvbnRleHQ7IH0KKyAgICBpbmxp
bmUgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZXh0M0QuZ2V0KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkgT1ZFUlJJREUgeyBtX2NvbnRleHQgPSBjb250ZXh0
OyB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCkBAIC03NSw3ICs3NSw2IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldEVuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyhib29sIGVuYWJsZWQp
IHsgbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcgPSBlbmFibGVkOyB9CiAKIHByaXZh
dGU6Ci0KICAgICBzdHJ1Y3QgQ2xpcFN0YXRlIHsKICAgICAgICAgSW50UmVjdCBzY2lzc29yQm94
OwogICAgICAgICBpbnQgc3RlbmNpbEluZGV4OwpAQCAtODksNyArODgsNyBAQCBwcml2YXRlOgog
ICAgIHB1YmxpYzoKICAgICAgICAgdm9pZCBwdXNoKCk7CiAgICAgICAgIHZvaWQgcG9wKCk7Ci0g
ICAgICAgIHZvaWQgYXBwbHkoKTsKKyAgICAgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQz
RCopOwogICAgICAgICBpbmxpbmUgQ2xpcFN0YXRlJiBjdXJyZW50KCkgeyByZXR1cm4gY2xpcFN0
YXRlOyB9CiAgICAgICAgIHZvaWQgaW5pdChjb25zdCBJbnRSZWN0Jik7CiAKQEAgLTEwOSwxNiAr
MTA4LDE5IEBAIHByaXZhdGU6CiAgICAgICAgIEZsb2F0UXVhZCB0YXJnZXRSZWN0TWFwcGVkVG9V
bml0U3F1YXJlOwogICAgIH07CiAKKyAgICBUZXh0dXJlTWFwcGVyR0woKTsKKwogICAgIGJvb2wg
ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25z
dCBGbG9hdFJlY3QmIG9yaWdpbmFsVGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSog
bWFza1RleHR1cmUsIHVuc2lnbmVkIGV4cG9zZWRFZGdlcyk7CiAgICAgdm9pZCBkcmF3VGV4dHVy
ZWRRdWFkV2l0aFByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qLCB1aW50MzJfdCB0
ZXh0dXJlLCBGbGFncywgY29uc3QgRHJhd1F1YWQmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBt
YXNrVGV4dHVyZSk7Ci0gICAgdm9pZCBkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtKiwgR0xlbnVtIGRyYXdpbmdNb2RlLCBib29sIG5lZWRzQmxlbmRpbmcpOworICAgIHZv
aWQgZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIEdDM0RlbnVtIGRy
YXdpbmdNb2RlLCBib29sIG5lZWRzQmxlbmRpbmcpOwogCiAgICAgYm9vbCBiZWdpblNjaXNzb3JD
bGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7CiAgICAg
dm9pZCBiaW5kRGVmYXVsdFN1cmZhY2UoKTsKICAgICBDbGlwU3RhY2smIGNsaXBTdGFjaygpOwog
ICAgIGlubGluZSBUZXh0dXJlTWFwcGVyR0xEYXRhJiBkYXRhKCkgeyByZXR1cm4gKm1fZGF0YTsg
fQotICAgIFRleHR1cmVNYXBwZXJHTERhdGEqIG1fZGF0YTsKICAgICBHcmFwaGljc0NvbnRleHQq
IG1fY29udGV4dDsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDNEOwor
ICAgIFRleHR1cmVNYXBwZXJHTERhdGEqIG1fZGF0YTsKICAgICBDbGlwU3RhY2sgbV9jbGlwU3Rh
Y2s7CiAgICAgYm9vbCBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZzsKIApAQCAtMTM1
LDcgKzEzNyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGluaXRpYWxpemVTdGVuY2lsKCk7CiAgICAg
fkJpdG1hcFRleHR1cmVHTCgpOwogICAgIHZpcnR1YWwgdWludDMyX3QgaWQoKSBjb25zdCB7IHJl
dHVybiBtX2lkOyB9Ci0gICAgdWludDMyX3QgdGV4dHVyZVRhcmdldCgpIGNvbnN0IHsgcmV0dXJu
IEdMX1RFWFRVUkVfMkQ7IH0KKyAgICB1aW50MzJfdCB0ZXh0dXJlVGFyZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ7IH0KICAgICBJbnRTaXplIHRleHR1
cmVTaXplKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlU2l6ZTsgfQogICAgIHZvaWQgc2V0VGV4
dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyR0wqIHRleG1hcCkgeyBtX3RleHR1cmVNYXBwZXIgPSB0
ZXhtYXA7IH0KICAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKEltYWdlKiwgY29uc3QgSW50UmVjdCYs
IGNvbnN0IEludFBvaW50Jik7CkBAIC0xNDcsMjAgKzE0OSwyMiBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogcHJpdmF0ZToKLSAgICBHTHVpbnQgbV9pZDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1faWQ7
CiAgICAgSW50U2l6ZSBtX3RleHR1cmVTaXplOwogICAgIEludFJlY3QgbV9kaXJ0eVJlY3Q7Ci0g
ICAgR0x1aW50IG1fZmJvOwotICAgIEdMdWludCBtX3JibzsKKyAgICBQbGF0Zm9ybTNET2JqZWN0
IG1fZmJvOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9yYm87CiAgICAgYm9vbCBtX3Nob3VsZENs
ZWFyOwotICAgIFRleHR1cmVNYXBwZXJHTCogbV90ZXh0dXJlTWFwcGVyOwogICAgIFRleHR1cmVN
YXBwZXJHTDo6Q2xpcFN0YWNrIG1fY2xpcFN0YWNrOwotICAgIEJpdG1hcFRleHR1cmVHTCgpCisg
ICAgVGV4dHVyZU1hcHBlckdMKiBtX3RleHR1cmVNYXBwZXI7CisKKyAgICBCaXRtYXBUZXh0dXJl
R0woKTsKKyAgICBCaXRtYXBUZXh0dXJlR0woVGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVy
KQogICAgICAgICA6IG1faWQoMCkKICAgICAgICAgLCBtX2ZibygwKQogICAgICAgICAsIG1fcmJv
KDApCiAgICAgICAgICwgbV9zaG91bGRDbGVhcih0cnVlKQotICAgICAgICAsIG1fdGV4dHVyZU1h
cHBlcigwKQorICAgICAgICAsIG1fdGV4dHVyZU1hcHBlcih0ZXh0dXJlTWFwcGVyKQogICAgIHsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCmluZGV4
IDBmYmRiZTkuLmZhOGFjMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmNwcApAQCAtMzAsMjUgKzMwLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lm
bmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSNkZWZpbmUgT0VTMl9QUkVDSVNJT05fREVGSU5JVElP
TlMgXAotICAgICIjZGVmaW5lIGxvd3BcbiNkZWZpbmUgaGlnaHBcbiIKLSNkZWZpbmUgT0VTMl9G
UkFHTUVOVF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT04KLSNlbHNlCi0jZGVmaW5lIE9FUzJfUFJF
Q0lTSU9OX0RFRklOSVRJT05TCi0jZGVmaW5lIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFVTFRf
UFJFQ0lTSU9OIFwKLSAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IFxuIgotI2VuZGlmCi0K
LSNkZWZpbmUgU1RSSU5HSUZZX1ZBTChzcmMuLi4pICNzcmMKLSNkZWZpbmUgVkVSVEVYX1NIQURF
UihzcmMuLi4pIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TXAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU1RSSU5HSUZZX1ZBTChzcmMpCi0jZGVmaW5lIEZSQUdNRU5UX1NIQURFUihz
cmMuLi4pIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TXAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBPRVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTlwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSSU5HSUZZX1ZBTChzcmMpCisjZGVmaW5lIFNU
UklOR0lGWShzcmMuLi4pICNzcmMKIAogc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVy
U291cmNlT3BhY2l0eUFuZE1hc2sgPQotICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICBTVFJJTkdJ
RlkoCisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1bmlmb3JtIHNh
bXBsZXIyRCBzX3NvdXJjZTsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19tYXNrOwogICAg
ICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwpAQCAtNjQsNyArNTAsOCBAQCBzdGF0
aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9CiAgICAg
KTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdE9wYWNpdHlB
bmRNYXNrID0KLSAgICBGUkFHTUVOVF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAorICAgICAgICBw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNf
c291cmNlOwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc19tYXNrOwogICAgICAgICB1
bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwpAQCAtODAsNyArNjcsNyBAQCBzdGF0aWMgY29u
c3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0T3BhY2l0eUFuZE1hc2sgPQogICAgICk7
CiAKIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9
Ci0gICAgVkVSVEVYX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCiAgICAgICAgIHVuaWZvcm0gbWF0
NCB1X21hdHJpeDsKICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfZmxpcDsKICAgICAgICAg
YXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CkBAIC05NSw3ICs4Miw4IEBAIHN0YXRpYyBjb25zdCBj
aGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9CiAgICAgKTsKIAogc3RhdGlj
IGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlU2ltcGxlID0KLSAgICBGUkFHTUVOVF9T
SEFERVIoCisgICAgU1RSSU5HSUZZKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsK
ICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zb3VyY2U7CiAgICAgICAgIHVuaWZvcm0gbG93
cCBmbG9hdCB1X29wYWNpdHk7CiAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRl
eENvb3JkOwpAQCAtMTA3LDcgKzk1LDggQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hh
ZGVyU291cmNlU2ltcGxlID0KICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRT
aGFkZXJTb3VyY2VBbnRpYWxpYXNpbmdOb01hc2sgPQotICAgIEZSQUdNRU5UX1NIQURFUigKKyAg
ICBTVFJJTkdJRlkoCisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1
bmlmb3JtIHNhbXBsZXIyRCBzX3NvdXJjZTsKICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZf
c291cmNlVGV4Q29vcmQ7CiAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CkBA
IC0xNDUsNyArMTM0LDggQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNl
QW50aWFsaWFzaW5nTm9NYXNrID0KICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21l
bnRTaGFkZXJTb3VyY2VSZWN0U2ltcGxlID0KLSAgICBGUkFHTUVOVF9TSEFERVIoCisgICAgU1RS
SU5HSUZZKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgdW5pZm9y
bSBzYW1wbGVyMkRSZWN0IHNfc291cmNlOwogICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1X3Rl
eHR1cmVTaXplOwogICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwpAQCAtMTU4
LDcgKzE0OCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RT
aW1wbGUgPQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VT
aW1wbGUgPQotICAgIFZFUlRFWF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAogICAgICAgICB1bmlm
b3JtIG1hdDQgdV9tYXRyaXg7CiAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X2ZsaXA7CiAg
ICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwpAQCAtMTcxLDcgKzE2MSw3IEBAIHN0YXRp
YyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUgPQogICAgICk7CiAKIHN0YXRp
YyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTb2xpZENvbG9yID0KLSAgICBWRVJURVhf
U0hBREVSKAorICAgIFNUUklOR0lGWSgKICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4Owog
ICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKICAgICAgICAgdm9pZCBtYWluKHZvaWQp
CkBAIC0xODIsNyArMTcyLDggQEAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJj
ZVNvbGlkQ29sb3IgPQogCiAKIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJj
ZVNvbGlkQ29sb3IgPQotICAgIFZFUlRFWF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAorICAgICAg
ICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgdW5pZm9ybSB2ZWM0IHVfY29sb3I7
CiAgICAgICAgIHZvaWQgbWFpbih2b2lkKQogICAgICAgICB7CkBAIC0yMTIsMjIgKzIwMywyMiBA
QCBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZwogCiAgICAgc3dpdGNoIChzaGFkZXJUeXBlKSB7CiAg
ICAgY2FzZSBTaW1wbGU6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVNpbXBsZTo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNpbXBsZTo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgUmVjdFNpbXBsZToKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtUmVjdFNpbXBsZTo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmNyZWF0ZShtX2NvbnRleHQpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEFudGlhbGlhc2luZ05vTWFzazoKLSAgICAgICAgcHJvZ3JhbSA9IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpjcmVhdGUoKTsKKyAg
ICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9N
YXNrOjpjcmVhdGUobV9jb250ZXh0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBPcGFjaXR5
QW5kTWFzazoKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3Bh
Y2l0eUFuZE1hc2s6OmNyZWF0ZSgpOworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgUmVjdE9wYWNpdHlBbmRNYXNrOgotICAgICAgICBwcm9ncmFtID0gVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OmNyZWF0ZSgpOworICAg
ICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1h
c2s6OmNyZWF0ZShtX2NvbnRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNvbGlkQ29s
b3I6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29s
b3I6OmNyZWF0ZSgpOworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1Tb2xpZENvbG9yOjpjcmVhdGUobV9jb250ZXh0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBJbnZhbGlkOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIzNiw4ICsyMjcs
OSBAQCBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZwogICAgIHJldHVybiBwcm9ncmFtOwogfQogCi1U
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29u
c3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNv
dXJjZSkKLSAgICA6IG1faWQoMCkKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgY2hh
ciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSkK
KyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9pZCgwKQogICAgICwgbV92ZXJ0ZXhB
dHRyaWIoMCkKICAgICAsIG1fdmVydGV4U2hhZGVyKDApCiAgICAgLCBtX2ZyYWdtZW50U2hhZGVy
KDApCkBAIC0yNTYsNDYgKzI0OCw0NiBAQCB2b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
Ojppbml0aWFsaXplUHJvZ3JhbSgpCiB7CiAgICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291
cmNlUHJvZ3JhbSA9IHZlcnRleFNoYWRlclNvdXJjZSgpOwogICAgIGNvbnN0IGNoYXIqIGZyYWdt
ZW50U2hhZGVyU291cmNlUHJvZ3JhbSA9IGZyYWdtZW50U2hhZGVyU291cmNlKCk7Ci0gICAgR0x1
aW50IHZlcnRleFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOwotICAg
IEdMdWludCBmcmFnbWVudFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURF
Uik7Ci0gICAgZ2xTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAmdmVydGV4U2hhZGVyU291
cmNlUHJvZ3JhbSwgMCk7Ci0gICAgZ2xTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIDEsICZm
cmFnbWVudFNoYWRlclNvdXJjZVByb2dyYW0sIDApOwotICAgIEdMdWludCBwcm9ncmFtSUQgPSBn
bENyZWF0ZVByb2dyYW0oKTsKLSAgICBnbENvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAg
ICBnbENvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgIFBsYXRmb3JtM0RPYmplY3Qg
dmVydGV4U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OlZFUlRFWF9TSEFERVIpOworICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIgPSBt
X2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVS
KTsKKyAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNoYWRl
clNvdXJjZVByb2dyYW0pOworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKGZyYWdtZW50U2hh
ZGVyLCBmcmFnbWVudFNoYWRlclNvdXJjZVByb2dyYW0pOworICAgIFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbUlEID0gbV9jb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7CisgICAgbV9jb250ZXh0LT5j
b21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVy
KGZyYWdtZW50U2hhZGVyKTsKIAotICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVydGV4
U2hhZGVyKTsKLSAgICBnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVyKTsK
LSAgICBnbExpbmtQcm9ncmFtKHByb2dyYW1JRCk7CisgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFk
ZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVy
KHByb2dyYW1JRCwgZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0o
cHJvZ3JhbUlEKTsKIAotICAgIG1fdmVydGV4QXR0cmliID0gZ2xHZXRBdHRyaWJMb2NhdGlvbihw
cm9ncmFtSUQsICJhX3ZlcnRleCIpOworICAgIG1fdmVydGV4QXR0cmliID0gbV9jb250ZXh0LT5n
ZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3ZlcnRleCIpOwogCiAgICAgbV9pZCA9IHBy
b2dyYW1JRDsKICAgICBtX3ZlcnRleFNoYWRlciA9IHZlcnRleFNoYWRlcjsKICAgICBtX2ZyYWdt
ZW50U2hhZGVyID0gZnJhZ21lbnRTaGFkZXI7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbihHTGludCAmdmFyaWFibGUsIGNvbnN0IGNoYXIq
IG5hbWUpCit2b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpnZXRVbmlmb3JtTG9jYXRp
b24oR0MzRGludCAmdmFyaWFibGUsIGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgdmFyaWFibGUg
PSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX2lkLCBuYW1lKTsKKyAgICB2YXJpYWJsZSA9IG1fY29u
dGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1faWQsIG5hbWUpOwogICAgIEFTU0VSVCh2YXJpYWJs
ZSA+PSAwKTsKIH0KIAogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbSgpCiB7Ci0gICAgR0x1aW50IHByb2dyYW1JRCA9IG1faWQ7CisgICAgUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtSUQgPSBtX2lkOwogICAgIGlmICghcHJvZ3JhbUlEKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBnbERldGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fdmVydGV4U2hh
ZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7Ci0gICAgZ2xEZXRhY2hT
aGFkZXIocHJvZ3JhbUlELCBtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRlciht
X2ZyYWdtZW50U2hhZGVyKTsKLSAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbUlEKTsKKyAgICBt
X2NvbnRleHQtPmRldGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fdmVydGV4U2hhZGVyKTsKKyAgICBt
X2NvbnRleHQtPmRlbGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5k
ZXRhY2hTaGFkZXIocHJvZ3JhbUlELCBtX2ZyYWdtZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQt
PmRlbGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVBy
b2dyYW0ocHJvZ3JhbUlEKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCkKLSAgICA6IFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3Vy
Y2VTaW1wbGUpCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1TaW1wbGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1w
bGUsIGZyYWdtZW50U2hhZGVyU291cmNlU2ltcGxlKQogewogICAgIGluaXRpYWxpemVQcm9ncmFt
KCk7CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fZmxpcExvY2F0aW9uLCAidV9mbGlwIik7CkBA
IC0zMDQsMTYgKzI5NiwxNiBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKQogICAgIGdldFVuaWZvcm1Mb2NhdGlvbiht
X29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNvbGlkQ29sb3I6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcigp
Ci0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2VTb2xp
ZENvbG9yLCBmcmFnbWVudFNoYWRlclNvdXJjZVNvbGlkQ29sb3IpCitUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVNvbGlkQ29sb3I6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xv
cihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJjZVNvbGlkQ29sb3IsIGZyYWdtZW50U2hh
ZGVyU291cmNlU29saWRDb2xvcikKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdl
dFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKICAgICBnZXRV
bmlmb3JtTG9jYXRpb24obV9jb2xvckxvY2F0aW9uLCAidV9jb2xvciIpOwogfQogCi1UZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
UmVjdFNpbXBsZSgpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFk
ZXJTb3VyY2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdFNpbXBsZSkKK1RleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1S
ZWN0U2ltcGxlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDogVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVu
dFNoYWRlclNvdXJjZVJlY3RTaW1wbGUpCiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAg
ICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7CkBAIC0z
MjMsOCArMzE1LDggQEAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKQogICAgIGdldFVuaWZvcm1Mb2NhdGlv
bihtX29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNp
dHlBbmRNYXNrKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRl
clNvdXJjZU9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNr
KQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkK
KyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNv
dXJjZU9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrKQog
ewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0
cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwpAQCAtMzM0LDggKzMyNiw4IEBAIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
T3BhY2l0eUFuZE1hCiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAi
dV9vcGFjaXR5Iik7CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlB
bmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaygpCi0g
ICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5
QW5kTWFzaywgZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0T3BhY2l0eUFuZE1hc2spCitUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisg
ICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2VPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0T3BhY2l0eUFuZE1hc2sp
CiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9t
YXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7CkBAIC0zNDUsOCArMzM3LDggQEAgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtUmVjdE9wYWMKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRpb24s
ICJ1X29wYWNpdHkiKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNp
bmdOb01hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKCkK
LSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZVNpbXBs
ZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNpbmdOb01hc2spCitUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1BbnRpYWxpYXNpbmdOb01hc2soR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1w
bGUsIGZyYWdtZW50U2hhZGVyU291cmNlQW50aWFsaWFzaW5nTm9NYXNrKQogewogICAgIGluaXRp
YWxpemVQcm9ncmFtKCk7CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24s
ICJ1X21hdHJpeCIpOwpAQCAtMzU2LDkgKzM0OCw5IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtQW50aWFsaWFzaW5nTm9NYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlh
CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fZmxpcExvY2F0aW9uLCAidV9mbGlwIik7CiB9CiAK
LVRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigp
CitUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKIHsK
LSAgICBBU1NFUlQoaW5pdGlhbGl6ZU9wZW5HTFNoaW1zKCkpOwogfQogCiBUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6flRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkKQEAgLTM3MywxOCAr
MzY1LDE5IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIoKQogCiBTdGFuZGFyZEZpbHRlclByb2dyYW06On5TdGFuZGFyZEZpbHRlclByb2dy
YW0oKQogewotICAgIGdsRGV0YWNoU2hhZGVyKG1faWQsIG1fdmVydGV4U2hhZGVyKTsKLSAgICBn
bERlbGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7Ci0gICAgZ2xEZXRhY2hTaGFkZXIobV9pZCwg
bV9mcmFnbWVudFNoYWRlcik7Ci0gICAgZ2xEZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7
Ci0gICAgZ2xEZWxldGVQcm9ncmFtKG1faWQpOworICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVy
KG1faWQsIG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihtX3Zl
cnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIobV9pZCwgbV9mcmFnbWVu
dFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7
CisgICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1faWQpOwogfQogCi1TdGFuZGFyZEZpbHRl
clByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlv
blR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKLSAgICA6IG1faWQoMCkKK1N0YW5kYXJkRmlsdGVy
UHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKKyAg
ICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9pZCgwKQogewogICAgIGNvbnN0IGNoYXIq
IHZlcnRleFNoYWRlclNvdXJjZSA9Ci0gICAgICAgICAgICBWRVJURVhfU0hBREVSKAorICAgICAg
ICAgICAgU1RSSU5HSUZZKAogICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4
OwogICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdGV4Q29vcmQ7CiAgICAgICAgICAg
ICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7CkBAIC0zOTYsOCArMzg5LDcgQEAg
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0
aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgICAgICk7CiAKICNkZWZpbmUgU1RBTkRB
UkRfRklMVEVSKHguLi4pIFwKLSAgICAgICAgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlNcCi0g
ICAgICAgIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFVTFRfUFJFQ0lTSU9OXAorICAgICAgICAi
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iXAogICAgICAgICAidmFyeWluZyBoaWdocCB2ZWMy
IHZfdGV4Q29vcmQ7XG4iXAogICAgICAgICAidW5pZm9ybSBoaWdocCBmbG9hdCB1X2Ftb3VudDtc
biJcCiAgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG4iXApAQCAtNDkwLDcg
KzQ4Miw4IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZp
bHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgICk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgotICAgICAgICBmcmFnbWVudFNo
YWRlclNvdXJjZSA9IEZSQUdNRU5UX1NIQURFUigKKyAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UgPSBTVFJJTkdJRlkoCisgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAg
ICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOwogICAgICAgICAgICAgdW5p
Zm9ybSBsb3dwIHZlYzIgdV9ibHVyUmFkaXVzOwogICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVy
MkQgdV90ZXh0dXJlOwpAQCAtNTIzLDcgKzUxNiw4IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBl
CiAgICAgICAgIHN3aXRjaCAocGFzcykgewogICAgICAgICBjYXNlIDA6IHsKICAgICAgICAgICAg
IC8vIEZpcnN0IHBhc3M6IGhvcml6b250YWwgYWxwaGEgYmx1ci4KLSAgICAgICAgICAgIGZyYWdt
ZW50U2hhZGVyU291cmNlID0gRlJBR01FTlRfU0hBREVSKAorICAgICAgICAgICAgZnJhZ21lbnRT
aGFkZXJTb3VyY2UgPSBTVFJJTkdJRlkoCisgICAgICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1
bXAgZmxvYXQ7CiAgICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7
CiAgICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfc2hhZG93Qmx1clJhZGl1czsK
ICAgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1X3NoYWRvd09mZnNldDsKQEAgLTU1
Niw3ICs1NTAsOCBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3Jh
bShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICAgICAgfQogICAg
ICAgICBjYXNlIDE6IHsKICAgICAgICAgICAgIC8vIFNlY29uZCBwYXNzOiB2ZXJ0aWNhbCBhbHBo
YSBibHVyIGFuZCBjb21wb3NpdGUgd2l0aCBvcmlnaW4uCi0gICAgICAgICAgICBmcmFnbWVudFNo
YWRlclNvdXJjZSA9IEZSQUdNRU5UX1NIQURFUigKKyAgICAgICAgICAgIGZyYWdtZW50U2hhZGVy
U291cmNlID0gU1RSSU5HSUZZKAorICAgICAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OwogICAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOwogICAg
ICAgICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X3NoYWRvd0JsdXJSYWRpdXM7CiAgICAg
ICAgICAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzQgdV9zaGFkb3dDb2xvcjsKQEAgLTYwMiwyNiAr
NTk3LDI1IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZp
bHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAKICAgICBpZiAoIWZyYWdtZW50U2hh
ZGVyU291cmNlKQogICAgICAgICByZXR1cm47Ci0gICAgR0x1aW50IHZlcnRleFNoYWRlciA9IGds
Q3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOwotICAgIEdMdWludCBmcmFnbWVudFNoYWRl
ciA9IGdsQ3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURFUik7Ci0gICAgZ2xTaGFkZXJTb3Vy
Y2UodmVydGV4U2hhZGVyLCAxLCAmdmVydGV4U2hhZGVyU291cmNlLCAwKTsKLSAgICBnbFNoYWRl
clNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdtZW50U2hhZGVyU291cmNlLCAwKTsKLSAg
ICBHTHVpbnQgcHJvZ3JhbUlEID0gZ2xDcmVhdGVQcm9ncmFtKCk7Ci0gICAgZ2xDb21waWxlU2hh
ZGVyKHZlcnRleFNoYWRlcik7Ci0gICAgZ2xDb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsK
KyAgICBQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hh
ZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKTsKKyAgICBQbGF0Zm9ybTNET2Jq
ZWN0IGZyYWdtZW50U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUik7CisgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UodmVy
dGV4U2hhZGVyLCB2ZXJ0ZXhTaGFkZXJTb3VyY2UpOworICAgIG1fY29udGV4dC0+c2hhZGVyU291
cmNlKGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlclNvdXJjZSk7CisgICAgUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtSUQgPSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKKyAgICBtX2Nv
bnRleHQtPmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmNvbXBp
bGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOwogI2lmICFMT0dfRElTQUJMRUQKLSAgICBHTGNoYXIg
bG9nWzEwMF07Ci0gICAgR0xpbnQgbGVuOwotICAgIGdsR2V0U2hhZGVySW5mb0xvZyhmcmFnbWVu
dFNoYWRlciwgMTAwLCAmbGVuLCBsb2cpOworICAgIFN0cmluZyBsb2c7CisgICAgbV9jb250ZXh0
LT5nZXRTaGFkZXJJbmZvTG9nKGZyYWdtZW50U2hhZGVyKTsKICAgICBXVEZMb2coJkxvZ0NvbXBv
c2l0aW5nLCAiJXNcbiIsIGxvZyk7CiAjZW5kaWYKLSAgICBnbEF0dGFjaFNoYWRlcihwcm9ncmFt
SUQsIHZlcnRleFNoYWRlcik7Ci0gICAgZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVu
dFNoYWRlcik7Ci0gICAgZ2xMaW5rUHJvZ3JhbShwcm9ncmFtSUQpOworICAgIG1fY29udGV4dC0+
YXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmF0
dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmxp
bmtQcm9ncmFtKHByb2dyYW1JRCk7CiAKLSAgICBtX3ZlcnRleEF0dHJpYiA9IGdsR2V0QXR0cmli
TG9jYXRpb24ocHJvZ3JhbUlELCAiYV92ZXJ0ZXgiKTsKLSAgICBtX3RleENvb3JkQXR0cmliID0g
Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3RleENvb3JkIik7Ci0gICAgbV90ZXh0
dXJlVW5pZm9ybUxvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV90
ZXh0dXJlIik7CisgICAgbV92ZXJ0ZXhBdHRyaWIgPSBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0
aW9uKHByb2dyYW1JRCwgImFfdmVydGV4Iik7CisgICAgbV90ZXhDb29yZEF0dHJpYiA9IG1fY29u
dGV4dC0+Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiYV90ZXhDb29yZCIpOworICAgIG1f
dGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW1JRCwgInVfdGV4dHVyZSIpOwogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElB
OgpAQCAtNjMxLDIxICs2MjUsMjEgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZp
bHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
Q09OVFJBU1Q6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIG1f
dW5pZm9ybUxvY2F0aW9ucy5hbW91bnQgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQs
ICJ1X2Ftb3VudCIpOworICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuYW1vdW50ID0gbV9jb250
ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9hbW91bnQiKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6Ci0gICAgICAgIG1fdW5pZm9y
bUxvY2F0aW9ucy5ibHVyLnJhZGl1cyA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwg
InVfYmx1clJhZGl1cyIpOwotICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lh
bktlcm5lbCA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfZ2F1c3NpYW5LZXJu
ZWwiKTsKKyAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmJsdXIucmFkaXVzID0gbV9jb250ZXh0
LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9ibHVyUmFkaXVzIik7CisgICAgICAg
IG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLmdhdXNzaWFuS2VybmVsID0gbV9jb250ZXh0LT5nZXRV
bmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9nYXVzc2lhbktlcm5lbCIpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6Ci0gICAgICAgIG1f
dW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1cyA9IGdsR2V0VW5pZm9ybUxvY2F0aW9u
KHByb2dyYW1JRCwgInVfc2hhZG93Qmx1clJhZGl1cyIpOwotICAgICAgICBtX3VuaWZvcm1Mb2Nh
dGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3Jh
bUlELCAidV9nYXVzc2lhbktlcm5lbCIpOworICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hh
ZG93LmJsdXJSYWRpdXMgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQs
ICJ1X3NoYWRvd0JsdXJSYWRpdXMiKTsKKyAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRv
dy5nYXVzc2lhbktlcm5lbCA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1J
RCwgInVfZ2F1c3NpYW5LZXJuZWwiKTsKICAgICAgICAgaWYgKCFwYXNzKQotICAgICAgICAgICAg
bV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5vZmZzZXQgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtSUQsICJ1X3NoYWRvd09mZnNldCIpOworICAgICAgICAgICAgbV91bmlmb3JtTG9jYXRp
b25zLnNoYWRvdy5vZmZzZXQgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFt
SUQsICJ1X3NoYWRvd09mZnNldCIpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIFdl
IG9ubHkgbmVlZCB0aGUgY29sb3IgYW5kIHRoZSBjb250ZW50IHRleHR1cmUgaW4gdGhlIHNlY29u
ZCBwYXNzLCB0aGUgZmlyc3QgcGFzcyBpcyBvbmx5IGEgaG9yaXpvbnRhbCBhbHBoYSBibHVyLgot
ICAgICAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb2xvciA9IGdsR2V0VW5pZm9y
bUxvY2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93Q29sb3IiKTsKLSAgICAgICAgICAgIG1fdW5p
Zm9ybUxvY2F0aW9ucy5zaGFkb3cuY29udGVudFRleHR1cmUgPSBnbEdldFVuaWZvcm1Mb2NhdGlv
bihwcm9ncmFtSUQsICJ1X2NvbnRlbnRUZXh0dXJlIik7CisgICAgICAgICAgICBtX3VuaWZvcm1M
b2NhdGlvbnMuc2hhZG93LmNvbG9yID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJv
Z3JhbUlELCAidV9zaGFkb3dDb2xvciIpOworICAgICAgICAgICAgbV91bmlmb3JtTG9jYXRpb25z
LnNoYWRvdy5jb250ZW50VGV4dHVyZSA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW1JRCwgInVfY29udGVudFRleHR1cmUiKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
ICAgICBkZWZhdWx0OgpAQCAtNjU2LDkgKzY1MCw5IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBl
CiAgICAgbV9mcmFnbWVudFNoYWRlciA9IGZyYWdtZW50U2hhZGVyOwogfQogCi1QYXNzUmVmUHRy
PFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpjcmVhdGUoRmls
dGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUsIHVuc2lnbmVkIHBhc3MpCitQYXNzUmVm
UHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpjcmVhdGUo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlw
ZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQogewotICAgIFJlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dy
YW0+IHByb2dyYW0gPSBhZG9wdFJlZihuZXcgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKHR5cGUsIHBh
c3MpKTsKKyAgICBSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0gYWRvcHRS
ZWYobmV3IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbShjb250ZXh0LCB0eXBlLCBwYXNzKSk7CiAgICAg
aWYgKCFwcm9ncmFtLT5tX2lkKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtNjk0LDIxICs2ODgs
MjEgQEAgc3RhdGljIGZsb2F0KiBnYXVzc2lhbktlcm5lbCgpCiAgICAgcmV0dXJuIGtlcm5lbDsK
IH0KIAotdm9pZCBTdGFuZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVyT3Bl
cmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHBhc3MsIGNvbnN0IEludFNpemUmIHNpemUsIEdM
dWludCBjb250ZW50VGV4dHVyZSkKK3ZvaWQgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpwcmVwYXJl
KGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0aW9uLCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJ
bnRTaXplJiBzaXplLCBHQzNEdWludCBjb250ZW50VGV4dHVyZSkKIHsKLSAgICBnbFVzZVByb2dy
YW0obV9pZCk7CisgICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKG1faWQpOwogICAgIHN3aXRjaCAo
b3BlcmF0aW9uLmdldE9wZXJhdGlvblR5cGUoKSkgewogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpHUkFZU0NBTEU6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgogICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVF
X1JPVEFURToKLSAgICAgICAgZ2xVbmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCwg
c3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJh
dGlvbikuYW1vdW50KCkpOworICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihtX3VuaWZvcm1M
b2NhdGlvbnMuYW1vdW50LCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJS
SUdIVE5FU1M6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgogICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgotICAgICAgICBnbFVuaWZvcm0xZihtX3VuaWZvcm1M
b2NhdGlvbnMuYW1vdW50LCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7CisgICAgICAgIG1fY29udGV4
dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0YXRpY19jYXN0PGNvbnN0
IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3Vu
dCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsK
ICAgICAgICAgY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ciA9IHN0YXRpY19jYXN0PGNv
bnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pOwpAQCAtNzIwLDggKzcxNCw4IEBA
IHZvaWQgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlv
biYgb3BlcmF0aW9uLCB1bnNpZ25lZCBwCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJhZGl1
cy5zZXRXaWR0aChmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXIuc3RkRGV2aWF0aW9uKCksIHNpemUu
d2lkdGgoKSkgLyBzaXplLndpZHRoKCkpOwogCi0gICAgICAgIGdsVW5pZm9ybTJmKG1fdW5pZm9y
bUxvY2F0aW9ucy5ibHVyLnJhZGl1cywgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSk7
Ci0gICAgICAgIGdsVW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktl
cm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOworICAg
ICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5yYWRpdXMs
IHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpOworICAgICAgICBtX2NvbnRleHQtPnVu
aWZvcm0xZnYobV91bmlmb3JtTG9jYXRpb25zLmJsdXIuZ2F1c3NpYW5LZXJuZWwsIEdBVVNTSUFO
X0tFUk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogewpAQCAtNzI5LDIw
ICs3MjMsMjAgQEAgdm9pZCBTdGFuZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUoY29uc3QgRmls
dGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHAKICAgICAgICAgc3dpdGNoIChwYXNz
KSB7CiAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgIC8vIEZpcnN0IHBhc3M6IHZlcnRpY2Fs
IGFscGhhIGJsdXIuCi0gICAgICAgICAgICBnbFVuaWZvcm0yZihtX3VuaWZvcm1Mb2NhdGlvbnMu
c2hhZG93Lm9mZnNldCwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueCgpKSAvIGZsb2F0KHNpemUu
d2lkdGgoKSksIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigpLnkoKSkgLyBmbG9hdChzaXplLmhlaWdo
dCgpKSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93
LmJsdXJSYWRpdXMsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUud2lkdGgoKSkp
OwotICAgICAgICAgICAgZ2xVbmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1
c3NpYW5LZXJuZWwsIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgp
KTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKG1fdW5pZm9ybUxvY2F0aW9ucy5z
aGFkb3cub2Zmc2V0LCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQoc2l6ZS53
aWR0aCgpKSwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUuaGVpZ2h0
KCkpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9u
cy5zaGFkb3cuYmx1clJhZGl1cywgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS53
aWR0aCgpKSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobV91bmlmb3JtTG9j
YXRpb25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgs
IGdhdXNzaWFuS2VybmVsKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgMToK
ICAgICAgICAgICAgIC8vIFNlY29uZCBwYXNzOiB3ZSBuZWVkIHRoZSBzaGFkb3cgY29sb3IgYW5k
IHRoZSBjb250ZW50IHRleHR1cmUgZm9yIGNvbXBvc2l0aW5nLgotICAgICAgICAgICAgZ2xVbmlm
b3JtMWYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzLCBzaGFkb3cuc3RkRGV2
aWF0aW9uKCkgLyBmbG9hdChzaXplLmhlaWdodCgpKSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm0x
ZnYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VS
TkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOwotICAgICAgICAgICAgZ2xBY3RpdmVU
ZXh0dXJlKEdMX1RFWFRVUkUxKTsKLSAgICAgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgY29udGVudFRleHR1cmUpOwotICAgICAgICAgICAgZ2xVbmlmb3JtMWkobV91bmlmb3Jt
TG9jYXRpb25zLnNoYWRvdy5jb250ZW50VGV4dHVyZSwgMSk7CisgICAgICAgICAgICBtX2NvbnRl
eHQtPnVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMsIHNoYWRv
dy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIG1f
Y29udGV4dC0+dW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2Vy
bmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7CisgICAg
ICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUxKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIGNvbnRlbnRUZXh0dXJlKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+
dW5pZm9ybTFpKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29udGVudFRleHR1cmUsIDEpOwog
ICAgICAgICAgICAgZmxvYXQgciwgZywgYiwgYTsKICAgICAgICAgICAgIHNoYWRvdy5jb2xvcigp
LmdldFJHQkEociwgZywgYiwgYSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm00ZihtX3VuaWZvcm1M
b2NhdGlvbnMuc2hhZG93LmNvbG9yLCByLCBnLCBiLCBhKTsKKyAgICAgICAgICAgIG1fY29udGV4
dC0+dW5pZm9ybTRmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29sb3IsIHIsIGcsIGIsIGEp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC03NTks
NyArNzUzLDcgQEAgUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJGb3JGaWx0ZXIKICAgICBpbnQga2V5ID0gaW50KHR5
cGUpIHwgKHBhc3MgPDwgMTYpOwogICAgIEZpbHRlck1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBt
X2ZpbHRlck1hcC5maW5kKGtleSk7CiAgICAgaWYgKGl0ZXJhdG9yID09IG1fZmlsdGVyTWFwLmVu
ZCgpKSB7Ci0gICAgICAgIHByb2dyYW0gPSBTdGFuZGFyZEZpbHRlclByb2dyYW06OmNyZWF0ZSh0
eXBlLCBwYXNzKTsKKyAgICAgICAgcHJvZ3JhbSA9IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6Y3Jl
YXRlKG1fY29udGV4dCwgdHlwZSwgcGFzcyk7CiAgICAgICAgIGlmICghcHJvZ3JhbSkKICAgICAg
ICAgICAgIHJldHVybiAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5o
CmluZGV4IDc4NTQ5OGUuLjFmZmI3MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlci5oCkBAIC0yNCw5ICsyNCw5IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNs
dWRlICJPcGVuR0xTaGltcy5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyR0wuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAg
LTQ0LDM5ICs0NCw0MCBAQCBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjsKIAogY2xh
c3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbT4gewogcHVibGljOgotICAgIEdMdWludCBpZCgpIHsgcmV0dXJu
IG1faWQ7IH0KLSAgICBHTHVpbnQgdmVydGV4QXR0cmliKCkgeyByZXR1cm4gbV92ZXJ0ZXhBdHRy
aWI7IH0KKyAgICBQbGF0Zm9ybTNET2JqZWN0IGlkKCkgeyByZXR1cm4gbV9pZDsgfQorICAgIEdD
M0R1aW50IHZlcnRleEF0dHJpYigpIHsgcmV0dXJuIG1fdmVydGV4QXR0cmliOyB9CiAKLSAgICBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2Us
IGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKTsKKyAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNv
dXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwogICAgIHZpcnR1YWwgflRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShm
bG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKikgeyB9Ci0gICAgR0xpbnQgbWF0cml4
TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hdHJpeExvY2F0aW9uOyB9Ci0gICAgR0xpbnQg
ZmxpcExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mbGlwTG9jYXRpb247IH0KLSAgICBHTGlu
dCB0ZXh0dXJlU2l6ZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlU2l6ZUxvY2F0
aW9uOyB9Ci0gICAgR0xpbnQgc291cmNlVGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zb3VyY2VUZXh0dXJlTG9jYXRpb247IH0KLSAgICBHTGludCBtYXNrVGV4dHVyZUxvY2F0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGV4dHVyZUxvY2F0aW9uOyB9Ci0gICAgR0xpbnQgb3Bh
Y2l0eUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5TG9jYXRpb247IH0KKyAgICBH
QzNEaW50IG1hdHJpeExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhMb2NhdGlvbjsg
fQorICAgIEdDM0RpbnQgZmxpcExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mbGlwTG9jYXRp
b247IH0KKyAgICBHQzNEaW50IHRleHR1cmVTaXplTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3RleHR1cmVTaXplTG9jYXRpb247IH0KKyAgICBHQzNEaW50IHNvdXJjZVRleHR1cmVMb2NhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOyB9CisgICAgR0MzRGlu
dCBtYXNrVGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGV4dHVyZUxvY2F0
aW9uOyB9CisgICAgR0MzRGludCBvcGFjaXR5TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX29w
YWNpdHlMb2NhdGlvbjsgfQogCi0gICAgc3RhdGljIGJvb2wgaXNWYWxpZFVuaWZvcm1Mb2NhdGlv
bihHTGludCBsb2NhdGlvbikgeyByZXR1cm4gbG9jYXRpb24gPj0gMDsgfQorICAgIHN0YXRpYyBi
b29sIGlzVmFsaWRVbmlmb3JtTG9jYXRpb24oR0MzRGludCBsb2NhdGlvbikgeyByZXR1cm4gbG9j
YXRpb24gPj0gMDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBnZXRVbmlmb3JtTG9jYXRpb24o
R0xpbnQmIHZhciwgY29uc3QgY2hhciogbmFtZSk7CisgICAgdm9pZCBnZXRVbmlmb3JtTG9jYXRp
b24oR0MzRGludCYgdmFyLCBjb25zdCBjaGFyKiBuYW1lKTsKICAgICB2b2lkIGluaXRpYWxpemVQ
cm9ncmFtKCk7CiAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKSB7IH0KICAgICBjb25zdCBj
aGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleFNoYWRlclNv
dXJjZS5kYXRhKCk7IH0KICAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZnJhZ21lbnRTaGFkZXJTb3VyY2UuZGF0YSgpOyB9CiAKLSAgICBHTHVp
bnQgbV9pZDsKLSAgICBHTHVpbnQgbV92ZXJ0ZXhBdHRyaWI7Ci0gICAgR0x1aW50IG1fdmVydGV4
U2hhZGVyOwotICAgIEdMdWludCBtX2ZyYWdtZW50U2hhZGVyOwotICAgIEdMaW50IG1fbWF0cml4
TG9jYXRpb247Ci0gICAgR0xpbnQgbV9mbGlwTG9jYXRpb247Ci0gICAgR0xpbnQgbV90ZXh0dXJl
U2l6ZUxvY2F0aW9uOwotICAgIEdMaW50IG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOwotICAgIEdM
aW50IG1fb3BhY2l0eUxvY2F0aW9uOwotICAgIEdMaW50IG1fbWFza1RleHR1cmVMb2NhdGlvbjsK
KyAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OworICAgIFBsYXRmb3JtM0RPYmplY3Qg
bV9pZDsKKyAgICBHQzNEdWludCBtX3ZlcnRleEF0dHJpYjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0
IG1fdmVydGV4U2hhZGVyOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mcmFnbWVudFNoYWRlcjsK
KyAgICBHQzNEaW50IG1fbWF0cml4TG9jYXRpb247CisgICAgR0MzRGludCBtX2ZsaXBMb2NhdGlv
bjsKKyAgICBHQzNEaW50IG1fdGV4dHVyZVNpemVMb2NhdGlvbjsKKyAgICBHQzNEaW50IG1fc291
cmNlVGV4dHVyZUxvY2F0aW9uOworICAgIEdDM0RpbnQgbV9vcGFjaXR5TG9jYXRpb247CisgICAg
R0MzRGludCBtX21hc2tUZXh0dXJlTG9jYXRpb247CiAKIHByaXZhdGU6CiAgICAgQ1N0cmluZyBt
X3ZlcnRleFNoYWRlclNvdXJjZTsKQEAgLTg3LDMzICs4OCwzNiBAQCBwcml2YXRlOgogY2xhc3Mg
U3RhbmRhcmRGaWx0ZXJQcm9ncmFtIDogcHVibGljIFJlZkNvdW50ZWQ8U3RhbmRhcmRGaWx0ZXJQ
cm9ncmFtPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKCk7
Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiwgdW5zaWdu
ZWQgcGFzcywgY29uc3QgSW50U2l6ZSYsIEdMdWludCBjb250ZW50VGV4dHVyZSk7Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBjcmVhdGUoRmlsdGVyT3BlcmF0
aW9uOjpPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBwYXNzKTsKLSAgICBHTHVpbnQgdmVydGV4QXR0
cmliKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWI7IH0KLSAgICBHTHVpbnQgdGV4Q29v
cmRBdHRyaWIoKSBjb25zdCB7IHJldHVybiBtX3RleENvb3JkQXR0cmliOyB9Ci0gICAgR0x1aW50
IHRleHR1cmVVbmlmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9u
OyB9CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiwgdW5z
aWduZWQgcGFzcywgY29uc3QgSW50U2l6ZSYsIEdDM0R1aW50IGNvbnRlbnRUZXh0dXJlKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IGNyZWF0ZShHcmFwaGlj
c0NvbnRleHQzRCosIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgcGFz
cyk7CisgICAgR0MzRHVpbnQgdmVydGV4QXR0cmliKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhB
dHRyaWI7IH0KKyAgICBHQzNEdWludCB0ZXhDb29yZEF0dHJpYigpIGNvbnN0IHsgcmV0dXJuIG1f
dGV4Q29vcmRBdHRyaWI7IH0KKyAgICBHQzNEdWludCB0ZXh0dXJlVW5pZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbjsgfQorcHJvdGVjdGVkOgorICAgIEdyYXBo
aWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CiBwcml2YXRlOgotICAgIFN0YW5kYXJkRmlsdGVyUHJv
Z3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIHBhc3MpOwotICAg
IEdMdWludCBtX2lkOwotICAgIEdMdWludCBtX3ZlcnRleFNoYWRlcjsKLSAgICBHTHVpbnQgbV9m
cmFnbWVudFNoYWRlcjsKLSAgICBHTHVpbnQgbV92ZXJ0ZXhBdHRyaWI7Ci0gICAgR0x1aW50IG1f
dGV4Q29vcmRBdHRyaWI7Ci0gICAgR0x1aW50IG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbjsKKyAg
ICBTdGFuZGFyZEZpbHRlclByb2dyYW0oKTsKKyAgICBTdGFuZGFyZEZpbHRlclByb2dyYW0oR3Jh
cGhpY3NDb250ZXh0M0QqLCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIHVuc2lnbmVk
IHBhc3MpOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9pZDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0
IG1fdmVydGV4U2hhZGVyOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mcmFnbWVudFNoYWRlcjsK
KyAgICBHQzNEdWludCBtX3ZlcnRleEF0dHJpYjsKKyAgICBHQzNEdWludCBtX3RleENvb3JkQXR0
cmliOworICAgIEdDM0R1aW50IG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbjsKICAgICB1bmlvbiB7
Ci0gICAgICAgIEdMdWludCBhbW91bnQ7CisgICAgICAgIEdDM0R1aW50IGFtb3VudDsKIAogICAg
ICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0x1aW50IHJhZGl1czsKLSAgICAgICAgICAgIEdM
dWludCBnYXVzc2lhbktlcm5lbDsKKyAgICAgICAgICAgIEdDM0R1aW50IHJhZGl1czsKKyAgICAg
ICAgICAgIEdDM0R1aW50IGdhdXNzaWFuS2VybmVsOwogICAgICAgICB9IGJsdXI7CiAKICAgICAg
ICAgc3RydWN0IHsKLSAgICAgICAgICAgIEdMdWludCBibHVyUmFkaXVzOwotICAgICAgICAgICAg
R0x1aW50IGNvbG9yOwotICAgICAgICAgICAgR0x1aW50IG9mZnNldDsKLSAgICAgICAgICAgIEdM
dWludCBjb250ZW50VGV4dHVyZTsKLSAgICAgICAgICAgIEdMdWludCBnYXVzc2lhbktlcm5lbDsK
KyAgICAgICAgICAgIEdDM0R1aW50IGJsdXJSYWRpdXM7CisgICAgICAgICAgICBHQzNEdWludCBj
b2xvcjsKKyAgICAgICAgICAgIEdDM0R1aW50IG9mZnNldDsKKyAgICAgICAgICAgIEdDM0R1aW50
IGNvbnRlbnRUZXh0dXJlOworICAgICAgICAgICAgR0MzRHVpbnQgZ2F1c3NpYW5LZXJuZWw7CiAg
ICAgICAgIH0gc2hhZG93OwogICAgIH0gbV91bmlmb3JtTG9jYXRpb25zOwogfTsKQEAgLTEyMSw3
NyArMTI1LDg5IEBAIHByaXZhdGU6CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
U2ltcGxlIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZT4gY3Jl
YXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNp
bXBsZT4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNp
bXBsZShjb250ZXh0KSk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1TaW1wbGUoR3JhcGhpY3NDb250ZXh0M0QqKTsKK3ByaXZhdGU6CiAgICAgVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKTsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1SZWN0U2ltcGxlPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZT4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKGNvbnRleHQpKTsKICAgICB9
CiAKK3Byb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUo
R3JhcGhpY3NDb250ZXh0M0QqKTsKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1SZWN0U2ltcGxlKCk7CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bU9wYWNpdHlBbmRNYXNrIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9w
YWNpdHlBbmRNYXNrPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKGNvbnRleHQpKTsK
ICAgICB9CiAKK3Byb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNp
dHlBbmRNYXNrKEdyYXBoaWNzQ29udGV4dDNEKik7CiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKTsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrIDogcHVibGljIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaz4gY3JlYXRlKCkKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaz4g
Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFz
aygpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVJlY3RPcGFjaXR5QW5kTWFzayhjb250ZXh0KSk7CiAgICAgfQogCitwcm90ZWN0ZWQ6Cisg
ICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soR3JhcGhpY3ND
b250ZXh0M0QqKTsKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0
T3BhY2l0eUFuZE1hc2soKTsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
U29saWRDb2xvciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENv
bG9yPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU29saWRDb2xvcj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVNvbGlkQ29sb3IoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1Tb2xpZENvbG9yKGNvbnRleHQpKTsKICAgICB9CiAKLSAgICBHTGludCBj
b2xvckxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvckxvY2F0aW9uOyB9CisgICAgR0Mz
RGludCBjb2xvckxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvckxvY2F0aW9uOyB9CiAK
K3Byb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoR3Jh
cGhpY3NDb250ZXh0M0QqKTsKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1Tb2xpZENvbG9yKCk7Ci0gICAgR0xpbnQgbV9jb2xvckxvY2F0aW9uOworICAgIEdDM0RpbnQg
bV9jb2xvckxvY2F0aW9uOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1B
bnRpYWxpYXNpbmdOb01hc2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
QW50aWFsaWFzaW5nTm9NYXNrPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrPiBjcmVhdGUoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKCkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5n
Tm9NYXNrKGNvbnRleHQpKTsKICAgICB9CiAKLSAgICBHTGludCBleHBhbmRlZFF1YWRWZXJ0aWNl
c0luVGV4dHVyZUNvb3JkaW5hdGVzTG9jYXRpb24oKSB7IHJldHVybiBtX2V4cGFuZGVkUXVhZFZl
cnRpY2VzSW5UZXh0dXJlQ29yZGluYXRlc0xvY2F0aW9uOyB9Ci0gICAgR0xpbnQgZXhwYW5kZWRR
dWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSB7IHJldHVybiBtX2V4cGFuZGVkUXVhZEVk
Z2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uOyB9CisgICAgR0MzRGludCBleHBhbmRlZFF1YWRWZXJ0
aWNlc0luVGV4dHVyZUNvb3JkaW5hdGVzTG9jYXRpb24oKSB7IHJldHVybiBtX2V4cGFuZGVkUXVh
ZFZlcnRpY2VzSW5UZXh0dXJlQ29yZGluYXRlc0xvY2F0aW9uOyB9CisgICAgR0MzRGludCBleHBh
bmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbigpIHsgcmV0dXJuIG1fZXhwYW5kZWRR
dWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb247IH0KIAorcHJvdGVjdGVkOgorICAgIFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKEdyYXBoaWNzQ29udGV4dDNE
Kik7CiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5n
Tm9NYXNrKCk7CiAKLSAgICBHTGludCBtX2V4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29y
ZGluYXRlc0xvY2F0aW9uOwotICAgIEdMaW50IG1fZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNw
YWNlTG9jYXRpb247CisgICAgR0MzRGludCBtX2V4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJl
Q29yZGluYXRlc0xvY2F0aW9uOworICAgIEdDM0RpbnQgbV9leHBhbmRlZFF1YWRFZGdlc0luU2Ny
ZWVuU3BhY2VMb2NhdGlvbjsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
IHsKQEAgLTIwNiw3ICsyMjIsOCBAQCBwdWJsaWM6CiAgICAgICAgIFNvbGlkQ29sb3IKICAgICB9
OwogCi0gICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKTsKKyAgICBUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcigpIHsgfQorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKEdyYXBo
aWNzQ29udGV4dDNEKik7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIo
KTsKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTIyMSwxMiArMjM4LDEyIEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFNoYWRlclR5cGUsIFJlZlB0cjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4sIERlZmF1bHRIYXNoPGludD46Okhhc2gsIEhhc2hUcmFp
dHM8aW50PiA+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOwogICAgIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtTWFwIG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7CisgICAg
R3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
ICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiA+
IEZpbHRlck1hcDsKICAgICBGaWx0ZXJNYXAgbV9maWx0ZXJNYXA7CiAjZW5kaWYKLQogfTsKIAog
fQo=
</data>
<flag name="commit-queue"
          id="171145"
          type_id="3"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160567</attachid>
            <date>2012-08-25 12:10:48 -0700</date>
            <delta_ts>2012-08-28 08:26:17 -0700</delta_ts>
            <desc>patch [TextureMapperGL]</desc>
            <filename>final.diff</filename>
            <type>text/plain</type>
            <size>88349</size>
            <attacher name="Roland Takacs">rtakacs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyODBhMWRkLi5kZGQ3MTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI5
IEBACisyMDEyLTA4LTI1ICBSb2xhbmQgVGFrYWNzICA8cnRha2Fjc0BpbmYudS1zemVnZWQuaHU+
LCBIZWxkZXIgQ29ycmVpYSAgPGhlbGRlci5jb3JyZWlhQG5va2lhLmNvbT4KKworICAgICAgICBb
VGV4bWFwXSBNb3ZlIFRleHR1cmVNYXBwZXJHTCB0byB1c2UgR3JhcGhpY3NDb250ZXh0M0QKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NjcyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTm9hbSBSb3NlbnRoYWwuCisKKyAgICAgICAgSXQgaXMgYmFzZWQg
b24gYSBwcmV2aW91cyBwYXRjaCBieSBIZWxkZXIgQ29ycmVpYS4KKworICAgICAgICBUZXh0dXJl
TWFwcGVyR0wgKFRNR0wpIGluY2x1ZGVzIGRpcmVjdCBHTCBjYWxscyBhbmQKKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0M0QgKEdDM0QpIG9mZmVycyBtYW55IGNvbnZlbmllbmNlcyBvdmVyIHRoZQor
ICAgICAgICBmb3JtZXIgYXBwcm9hY2g6IHVzaW5nIGV4aXN0aW5nIENTUyBzaGFkZXIgY29kZSwg
QU5HTEUgZm9yCisgICAgICAgIHNoYWRlciBjb21waWxhdGlvbiwgcmV1c2luZyBXZWJDb3JlOjpU
ZXh0dXJlLCBoYXZpbmcgc2hhZGVycyBhbmQKKyAgICAgICAgdGV4dHVyZXMgdGhhdCBjYW4gZGVs
ZXRlIHRoZW1zZWx2ZXMuCisKKyAgICAgICAgQSBHQzNEIG9iamVjdCBpcyBjcmVhdGVkIGJ5IFRN
R0wgd2l0aCB0aGUgbmV3bHkgaW50cm9kdWNlZAorICAgICAgICBidWlsZGVyIGNyZWF0ZUZvckN1
cnJlbnRHTENvbnRleHQoKSwgd2hpY2ggaW4gdHVybiB1c2VzCisgICAgICAgIHRoZSBuZXcgUmVu
ZGVyVG9DdXJyZW50R0xDb250ZXh0IGZsYWcgdW5kZXJuZWF0aC4KKworICAgICAgICBUTUdMJ3Mg
ZGVwZW5kZW5jeSBvbiBPcGVuR0xTaGltcy5oIHdhcyBjb21wbGV0ZWx5IHJlbW92ZWQuCisgICAg
ICAgIEhvd2V2ZXIsIEdDM0QgZG9lcyBub3QgbWFwIGV2ZXJ5IHNpbmdsZSBHTCBjb25zdGFudC4g
VGh1cywgaXQncworICAgICAgICBpbXBvcnRhbnQgdG8gZG9jdW1lbnQgdGhlIGZvbGxvd2luZzoK
KyAgICAgICAgICAgIC0gR0xfRkFMU0Ugd2FzIG1hcHBlZCB0byBmYWxzZS4KKyAgICAgICAgICAg
IC0gR0xfVU5QQUNLX1JPV19MRU5HVEgsIEdMX1VOUEFDS19TS0lQX1BJWEVMUywKKyAgICAgICAg
ICAgIEdMX1VOUEFDS19TS0lQX1JPV1MsIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgYW5kCisg
ICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYgd2VyZSBsb2NhbGx5IGRlZmlu
ZWQgaW4gVE1HTC4KKworICAgICAgICBUaGUgcGF0Y2ggd2FzIG9yaWdpbmFsbHkgZGV2ZWxvcGVk
IGJ5IEhlbGRlciBDb3JyZWlhIGFuZCBmaW5pc2hlZAorICAgICAgICBieSBSb2xhbmQgVGFrYWNz
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoU2hhcmVkR0xEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6
Y3VycmVudFNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xE
YXRhOjpTaGFyZWRHTERhdGE6OlNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0xEYXRhOjpzaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMRGF0YTo6VGV4dHVyZU1hcHBlckdMRGF0YSk6CisgICAgICAgIChUZXh0dXJlTWFw
cGVyR0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnNjaXNzb3JDbGlwKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjphcHBseSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjppbml0aWFsaXplU3RlbmNpbCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjplbmRQYWludGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OmRyYXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6
ZHJhd0JvcmRlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVSZWN0YW5nbGVBUkIpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjp2aWV3cG9y
dE1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJl
V2l0aEFudGlhbGlhc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRy
YXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0
dXJlR0w6OmRpZFJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6dXBk
YXRlQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3Rmls
dGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjppbml0aWFsaXplU3Rl
bmNpbCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmNsZWFySWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpjcmVhdGVGYm9JZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmJpbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwVGV4dHVyZUdMOjp+Qml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJHTDo6YmluZERlZmF1bHRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJHTDo6YmVnaW5TY2lzc29yQ2xpcCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OmVuZENsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpj
cmVhdGVUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmdyYXBoaWNz
Q29udGV4dDNEKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChDbGlwU3Rh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjp0ZXh0dXJlVGFyZ2V0KToK
KyAgICAgICAgKEJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0
dXJlR0w6OkJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjppbml0aWFsaXplUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1T
aW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1Tb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2lt
cGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0
eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1h
c2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNr
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp+U3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJv
Z3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJk
RmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVy
UHJvZ3JhbTo6cHJlcGFyZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6Z2V0U2hhZGVyRm9yRmlsdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6dmVydGV4QXR0cmliKToKKyAgICAgICAgKFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjptYXRyaXhMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6ZmxpcExvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp0ZXh0dXJlU2l6ZUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzb3VyY2VUZXh0dXJlTG9jYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Om1hc2tUZXh0
dXJlTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06Om9wYWNpdHlMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChTdGFuZGFyZEZp
bHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp2
ZXJ0ZXhBdHRyaWIpOgorICAgICAgICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp0
ZXhDb29yZEF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dyYW06
OnRleHR1cmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU2ltcGxlOjpjcmVhdGUpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1TaW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1S
ZWN0U2ltcGxlOjpjcmVhdGUpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1S
ZWN0U2ltcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
T3BhY2l0eUFuZE1hc2s6OmNyZWF0ZSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbU9wYWNpdHlBbmRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpjcmVhdGUpOgorICAgICAgICAoVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpjb2xvckxvY2F0
aW9uKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05v
TWFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtQW50aWFsaWFzaW5nTm9NYXNrOjpleHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvb3Jk
aW5hdGVzTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OmV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxv
Y2F0aW9uKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5n
Tm9NYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcik6CisKIDIwMTItMDctMTggIFJvYmVydCBIb2dhbiAgPHJvYmVydEB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFRhYmxlcyB3aXRoIGp1c3QgYm9yZGVyLXN0eWxlIHNldCBvbiB0aGUgY2Vs
bHMgZG8gbm90IGdldCBhIGdyaWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IGVmZDg3NjkuLmIyZTZhNGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaApAQCAtMjUwLDYgKzI1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgQUxQSEEgPSAweDE5MDYs
CiAgICAgICAgIFJHQiA9IDB4MTkwNywKICAgICAgICAgUkdCQSA9IDB4MTkwOCwKKyAgICAgICAg
QkdSQSA9IDB4ODBFMSwKICAgICAgICAgTFVNSU5BTkNFID0gMHgxOTA5LAogICAgICAgICBMVU1J
TkFOQ0VfQUxQSEEgPSAweDE5MEEsCiAgICAgICAgIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQgPSAw
eDgwMzMsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IGEyMmU3MjAuLjhiMThkNDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0zOCwxMyArMzgsNiBAQAogCiAjaWYgUExBVEZPUk0oUVQp
CiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VRdC5oIgotI2luY2x1ZGUgPFFPcGVuR0xDb250ZXh0Pgot
I2VsaWYgT1MoV0lORE9XUykKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZWxpZiBPUyhNQUNfT1Nf
WCkKLSNpbmNsdWRlIDxBR0wvYWdsLmg+Ci0jZWxpZiBkZWZpbmVkKFhQX1VOSVgpCi0jaW5jbHVk
ZSA8R0wvZ2x4Lmg+CiAjZW5kaWYKIAogI2lmIFVTRShDQUlSTykKQEAgLTUzLDcwICs0Niw0MyBA
QAogI2luY2x1ZGUgPGNhaXJvLmg+CiAjZW5kaWYKIAotI2RlZmluZSBHTF9DTUQoLi4uKSBkbyB7
IF9fVkFfQVJHU19fOyBBU1NFUlRfQVJHKF9fVkFfQVJHU19fLCAhZ2xHZXRFcnJvcigpKTsgfSB3
aGlsZSAoMCkKKyNpZiAhVVNFKFRFWE1BUF9PUEVOR0xfRVNfMikKKy8vIEZJWE1FOiBNb3ZlIHRv
IEV4dGVuc2lvbnMzRC5oLgorI2RlZmluZSBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIgMHg4NEY1
CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViAweDgzNjcKKyNkZWZpbmUgR0xf
VU5QQUNLX1JPV19MRU5HVEggMHgwQ0YyCisjZGVmaW5lIEdMX1VOUEFDS19TS0lQX1BJWEVMUyAw
eDBDRjQKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUk9XUyAweDBDRjMKKyNlbmRpZgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBzdHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAgICAgc3RydWN0
IFNoYXJlZEdMRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZEdMRGF0YT4gewotI2lmIFBM
QVRGT1JNKFFUKQotICAgICAgICB0eXBlZGVmIFFPcGVuR0xDb250ZXh0KiBHTENvbnRleHQ7Ci0g
ICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdMQ29udGV4dCgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBRT3BlbkdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKTsKLSAg
ICAgICAgfQotI2VsaWYgT1MoV0lORE9XUykKLSAgICAgICAgdHlwZWRlZiBIR0xSQyBHTENvbnRl
eHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdMQ29udGV4dCgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiB3Z2xHZXRDdXJyZW50Q29udGV4dCgpOwotICAgICAg
ICB9Ci0jZWxpZiBPUyhNQUNfT1NfWCkKLSAgICAgICAgdHlwZWRlZiBBR0xDb250ZXh0IEdMQ29u
dGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFnbEdldEN1cnJlbnRDb250ZXh0KCk7Ci0gICAg
ICAgIH0KLSNlbGlmIGRlZmluZWQoWFBfVU5JWCkKLSAgICAgICAgdHlwZWRlZiBHTFhDb250ZXh0
IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0
KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsWEdldEN1cnJlbnRDb250ZXh0KCk7
Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9y
IHVua25vd24gb3BlbmdsLgotICAgICAgICAvLyBSZXR1cm5zIGFsd2F5cyBpbmNyZWFzaW5nIG51
bWJlciBhbmQgZGlzYWJsZXMgR0wgY29udGV4dCBkYXRhIHNoYXJpbmcuCi0gICAgICAgIHR5cGVk
ZWYgdW5zaWduZWQgaW50IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRD
dXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RhdGljIEdMQ29udGV4
dCBkdW1teUNvbnRleHRDb3VudGVyID0gMDsKLSAgICAgICAgICAgIHJldHVybiArK2R1bW15Q29u
dGV4dENvdW50ZXI7Ci0gICAgICAgIH0KLQotI2VuZGlmCiAKLSAgICAgICAgdHlwZWRlZiBIYXNo
TWFwPEdMQ29udGV4dCwgU2hhcmVkR0xEYXRhKj4gR0xDb250ZXh0RGF0YU1hcDsKKyAgICAgICAg
dHlwZWRlZiBIYXNoTWFwPFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QsIFNoYXJlZEdMRGF0YSo+
IEdMQ29udGV4dERhdGFNYXA7CiAgICAgICAgIHN0YXRpYyBHTENvbnRleHREYXRhTWFwJiBnbENv
bnRleHREYXRhTWFwKCkKICAgICAgICAgewogICAgICAgICAgICAgc3RhdGljIEdMQ29udGV4dERh
dGFNYXAgbWFwOwogICAgICAgICAgICAgcmV0dXJuIG1hcDsKICAgICAgICAgfQogCi0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEdMRGF0YT4gY3VycmVudFNoYXJlZEdMRGF0YSgpCisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEdMRGF0YT4gY3VycmVudFNoYXJlZEdMRGF0
YShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgR0xD
b250ZXh0IGN1cnJlbnRHTENvbmV4dCA9IGdldEN1cnJlbnRHTENvbnRleHQoKTsKLSAgICAgICAg
ICAgIEdMQ29udGV4dERhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgpLmZp
bmQoY3VycmVudEdMQ29uZXh0KTsKKyAgICAgICAgICAgIEdMQ29udGV4dERhdGFNYXA6Oml0ZXJh
dG9yIGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgpLmZpbmQoY29udGV4dC0+cGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQzRCgpKTsKICAgICAgICAgICAgIGlmIChpdCAhPSBnbENvbnRleHREYXRhTWFwKCku
ZW5kKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CiAKLSAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkR0xEYXRhKGdldEN1cnJlbnRHTENvbnRleHQoKSkp
OworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRHTERhdGEoY29udGV4dCkp
OwogICAgICAgICB9CiAKIAogCiAgICAgICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwogCi0gICAgICAgIFNoYXJlZEdMRGF0YShHTENvbnRl
eHQgZ2xDb250ZXh0KQorICAgICAgICBTaGFyZWRHTERhdGEoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCisgICAgICAgICAgICA6IHRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKGNvbnRleHQp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsQ29udGV4dERhdGFNYXAoKS5hZGQoZ2xDb250ZXh0
LCB0aGlzKTsKKyAgICAgICAgICAgIGdsQ29udGV4dERhdGFNYXAoKS5hZGQoY29udGV4dC0+cGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCgpLCB0aGlzKTsKICAgICAgICAgfQogCiAgICAgICAgIH5T
aGFyZWRHTERhdGEoKQpAQCAtMTM1LDMwICsxMDEsMzIgQEAgc3RydWN0IFRleHR1cmVNYXBwZXJH
TERhdGEgewogCiAgICAgU2hhcmVkR0xEYXRhJiBzaGFyZWRHTERhdGEoKSBjb25zdAogICAgIHsK
LSAgICAgICAgcmV0dXJuICoobV9zaGFyZWRHTERhdGEuZ2V0KCkpOworICAgICAgICByZXR1cm4g
Km1fc2hhcmVkR0xEYXRhOwogICAgIH0KIAogICAgIHZvaWQgaW5pdGlhbGl6ZVN0ZW5jaWwoKTsK
IAotICAgIFRleHR1cmVNYXBwZXJHTERhdGEoKQotICAgICAgICA6IFBhaW50RmxhZ3MoMCkKKyAg
ICBUZXh0dXJlTWFwcGVyR0xEYXRhKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgICAg
ICA6IGNvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBQYWludEZsYWdzKDApCiAgICAgICAgICwg
cHJldmlvdXNQcm9ncmFtKDApCiAgICAgICAgICwgdGFyZ2V0RnJhbWVCdWZmZXIoMCkKICAgICAg
ICAgLCBkaWRNb2RpZnlTdGVuY2lsKGZhbHNlKQogICAgICAgICAsIHByZXZpb3VzU2Npc3NvclN0
YXRlKDApCiAgICAgICAgICwgcHJldmlvdXNEZXB0aFN0YXRlKDApCi0gICAgICAgICwgbV9zaGFy
ZWRHTERhdGEoVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpjdXJyZW50U2hhcmVk
R0xEYXRhKCkpCisgICAgICAgICwgbV9zaGFyZWRHTERhdGEoVGV4dHVyZU1hcHBlckdMRGF0YTo6
U2hhcmVkR0xEYXRhOjpjdXJyZW50U2hhcmVkR0xEYXRhKHRoaXMtPmNvbnRleHQpKQogICAgIHsg
fQogCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQ7CiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggcHJvamVjdGlvbk1hdHJpeDsKICAgICBUZXh0dXJlTWFwcGVyOjpQYWludEZsYWdzIFBh
aW50RmxhZ3M7Ci0gICAgR0xpbnQgcHJldmlvdXNQcm9ncmFtOwotICAgIEdMaW50IHRhcmdldEZy
YW1lQnVmZmVyOworICAgIEdDM0RpbnQgcHJldmlvdXNQcm9ncmFtOworICAgIEdDM0RpbnQgdGFy
Z2V0RnJhbWVCdWZmZXI7CiAgICAgYm9vbCBkaWRNb2RpZnlTdGVuY2lsOwotICAgIEdMaW50IHBy
ZXZpb3VzU2Npc3NvclN0YXRlOwotICAgIEdMaW50IHByZXZpb3VzRGVwdGhTdGF0ZTsKLSAgICBH
TGludCB2aWV3cG9ydFs0XTsKLSAgICBHTGludCBwcmV2aW91c1NjaXNzb3JbNF07CisgICAgR0Mz
RGludCBwcmV2aW91c1NjaXNzb3JTdGF0ZTsKKyAgICBHQzNEaW50IHByZXZpb3VzRGVwdGhTdGF0
ZTsKKyAgICBHQzNEaW50IHZpZXdwb3J0WzRdOworICAgIEdDM0RpbnQgcHJldmlvdXNTY2lzc29y
WzRdOwogICAgIFJlZlB0cjxTaGFyZWRHTERhdGE+IG1fc2hhcmVkR0xEYXRhOwogICAgIFJlZlB0
cjxCaXRtYXBUZXh0dXJlPiBjdXJyZW50U3VyZmFjZTsKIH07CkBAIC0xODIsMjUgKzE1MCwyNSBA
QCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjpwb3AoKQogICAgIGNsaXBTdGFjay5y
ZW1vdmVMYXN0KCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNjaXNzb3JDbGlwKGNvbnN0IEludFJlY3Qm
IHJlY3QpCitzdGF0aWMgdm9pZCBzY2lzc29yQ2xpcChHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEdMaW50IHZpZXdwb3J0WzRdOwotICAgIEdMX0NNRChnbEdldElu
dGVnZXJ2KEdMX1ZJRVdQT1JULCB2aWV3cG9ydCkpOwotICAgIEdMX0NNRChnbFNjaXNzb3IocmVj
dC54KCksIHZpZXdwb3J0WzNdIC0gcmVjdC5tYXhZKCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSkpOworICAgIEdDM0RpbnQgdmlld3BvcnRbNF07CisgICAgY29udGV4dC0+Z2V0SW50ZWdl
cnYoR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JULCB2aWV3cG9ydCk7CisgICAgY29udGV4dC0+
c2Npc3NvcihyZWN0LngoKSwgdmlld3BvcnRbM10gLSByZWN0Lm1heFkoKSwgcmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjazo6
YXBwbHkoKQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjazo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQpCiB7Ci0gICAgc2Npc3NvckNsaXAoY2xpcFN0YXRlLnNjaXNzb3JC
b3gpOwotICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9LRUVQLCBHTF9LRUVQLCBHTF9LRUVQKSk7
Ci0gICAgR0xfQ01EKGdsU3RlbmNpbEZ1bmMoR0xfRVFVQUwsIGNsaXBTdGF0ZS5zdGVuY2lsSW5k
ZXggLSAxLCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSkpOworICAgIHNjaXNzb3JDbGlwKGNv
bnRleHQsIGNsaXBTdGF0ZS5zY2lzc29yQm94KTsKKyAgICBjb250ZXh0LT5zdGVuY2lsT3AoR3Jh
cGhpY3NDb250ZXh0M0Q6OktFRVAsIEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQLCBHcmFwaGljc0Nv
bnRleHQzRDo6S0VFUCk7CisgICAgY29udGV4dC0+c3RlbmNpbEZ1bmMoR3JhcGhpY3NDb250ZXh0
M0Q6OkVRVUFMLCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSwgY2xpcFN0YXRlLnN0ZW5jaWxJ
bmRleCAtIDEpOwogICAgIGlmIChjbGlwU3RhdGUuc3RlbmNpbEluZGV4ID09IDEpCi0gICAgICAg
IEdMX0NNRChnbERpc2FibGUoR0xfU1RFTkNJTF9URVNUKSk7CisgICAgICAgIGNvbnRleHQtPmRp
c2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCk7CiAgICAgZWxzZQotICAgICAg
ICBHTF9DTUQoZ2xFbmFibGUoR0xfU1RFTkNJTF9URVNUKSk7CisgICAgICAgIGNvbnRleHQtPmVu
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKTsKIH0KIAogCkBAIC0yMTQsOCAr
MTgyLDggQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0xEYXRhOjppbml0aWFsaXplU3RlbmNpbCgpCiAg
ICAgaWYgKGRpZE1vZGlmeVN0ZW5jaWwpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdMX0NNRChn
bENsZWFyU3RlbmNpbCgwKSk7Ci0gICAgR0xfQ01EKGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJf
QklUKSk7CisgICAgY29udGV4dC0+Y2xlYXJTdGVuY2lsKDApOworICAgIGNvbnRleHQtPmNsZWFy
KEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOwogICAgIGRpZE1vZGlmeVN0
ZW5jaWwgPSB0cnVlOwogfQogCkBAIC0yMjksMTAgKzE5NywxMSBAQCBCaXRtYXBUZXh0dXJlR0wq
IHRvQml0bWFwVGV4dHVyZUdMKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpCiAKIFRleHR1cmVNYXBw
ZXJHTDo6VGV4dHVyZU1hcHBlckdMKCkKICAgICA6IFRleHR1cmVNYXBwZXIoT3BlbkdMTW9kZSkK
LSAgICAsIG1fZGF0YShuZXcgVGV4dHVyZU1hcHBlckdMRGF0YSkKICAgICAsIG1fY29udGV4dCgw
KQogICAgICwgbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcoZmFsc2UpCiB7CisgICAg
bV9jb250ZXh0M0QgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRm9yQ3VycmVudEdMQ29udGV4
dCgpOworICAgIG1fZGF0YSA9IG5ldyBUZXh0dXJlTWFwcGVyR0xEYXRhKG1fY29udGV4dDNELmdl
dCgpKTsKIH0KIAogVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2smIFRleHR1cmVNYXBwZXJHTDo6
Y2xpcFN0YWNrKCkKQEAgLTI0MiwxNSArMjExLDkgQEAgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3Rh
Y2smIFRleHR1cmVNYXBwZXJHTDo6Y2xpcFN0YWNrKCkKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyBmbGFncykKIHsKLSAgICAvLyBNYWtlIHN1cmUgdGhh
dCBubyBHTCBlcnJvciBjb2RlIHN0YXlzIGZyb20gcHJldmlvdXMgb3BlcmF0aW9ucy4KLSAgICBn
bEdldEVycm9yKCk7Ci0KLSAgICBpZiAoIWluaXRpYWxpemVPcGVuR0xTaGltcygpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9DVVJSRU5UX1BST0dSQU0s
ICZkYXRhKCkucHJldmlvdXNQcm9ncmFtKSk7Ci0gICAgZGF0YSgpLnByZXZpb3VzU2Npc3NvclN0
YXRlID0gZ2xJc0VuYWJsZWQoR0xfU0NJU1NPUl9URVNUKTsKLSAgICBkYXRhKCkucHJldmlvdXNE
ZXB0aFN0YXRlID0gZ2xJc0VuYWJsZWQoR0xfREVQVEhfVEVTVCk7CisgICAgbV9jb250ZXh0M0Qt
PmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpDVVJSRU5UX1BST0dSQU0sICZkYXRhKCku
cHJldmlvdXNQcm9ncmFtKTsKKyAgICBkYXRhKCkucHJldmlvdXNTY2lzc29yU3RhdGUgPSBtX2Nv
bnRleHQzRC0+aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAg
IGRhdGEoKS5wcmV2aW91c0RlcHRoU3RhdGUgPSBtX2NvbnRleHQzRC0+aXNFbmFibGVkKEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9URVNUKTsKICNpZiBQTEFURk9STShRVCkKICAgICBpZiAobV9j
b250ZXh0KSB7CiAgICAgICAgIFFQYWludGVyKiBwYWludGVyID0gbV9jb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKQEAgLTI1OCwxNCArMjIxLDE0IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpi
ZWdpblBhaW50aW5nKFBhaW50RmxhZ3MgZmxhZ3MpCiAgICAgICAgIHBhaW50ZXItPmJlZ2luTmF0
aXZlUGFpbnRpbmcoKTsKICAgICB9CiAjZW5kaWYKLSAgICBnbERpc2FibGUoR0xfREVQVEhfVEVT
VCk7Ci0gICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlz
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCk7CisgICAgbV9jb250ZXh0M0QtPmVu
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKICAgICBkYXRhKCkuZGlkTW9k
aWZ5U3RlbmNpbCA9IGZhbHNlOwotICAgIEdMX0NNRChnbERlcHRoTWFzaygwKSk7Ci0gICAgR0xf
Q01EKGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIGRhdGEoKS52aWV3cG9ydCkpOwotICAgIEdM
X0NNRChnbEdldEludGVnZXJ2KEdMX1NDSVNTT1JfQk9YLCBkYXRhKCkucHJldmlvdXNTY2lzc29y
KSk7CisgICAgbV9jb250ZXh0M0QtPmRlcHRoTWFzaygwKTsKKyAgICBtX2NvbnRleHQzRC0+Z2V0
SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JULCBkYXRhKCkudmlld3BvcnQpOwor
ICAgIG1fY29udGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9C
T1gsIGRhdGEoKS5wcmV2aW91c1NjaXNzb3IpOwogICAgIG1fY2xpcFN0YWNrLmluaXQoSW50UmVj
dCgwLCAwLCBkYXRhKCkudmlld3BvcnRbMl0sIGRhdGEoKS52aWV3cG9ydFszXSkpOwotICAgIEdM
X0NNRChnbEdldEludGVnZXJ2KEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcsICZkYXRhKCkudGFyZ2V0
RnJhbWVCdWZmZXIpKTsKKyAgICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSX0JJTkRJTkcsICZkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpOwog
ICAgIGRhdGEoKS5QYWludEZsYWdzID0gZmxhZ3M7CiAgICAgYmluZFN1cmZhY2UoMCk7CiB9CkBA
IC0yNzMsMjIgKzIzNiwyMiBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5QYWludGluZyhQ
YWludEZsYWdzIGZsYWdzKQogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50aW5nKCkKIHsK
ICAgICBpZiAoZGF0YSgpLmRpZE1vZGlmeVN0ZW5jaWwpIHsKLSAgICAgICAgZ2xDbGVhclN0ZW5j
aWwoMSk7Ci0gICAgICAgIGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJfQklUKTsKKyAgICAgICAg
bV9jb250ZXh0M0QtPmNsZWFyU3RlbmNpbCgxKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmNsZWFy
KEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOwogICAgIH0KIAotICAgIGds
VXNlUHJvZ3JhbShkYXRhKCkucHJldmlvdXNQcm9ncmFtKTsKKyAgICBtX2NvbnRleHQzRC0+dXNl
UHJvZ3JhbShkYXRhKCkucHJldmlvdXNQcm9ncmFtKTsKIAotICAgIGdsU2Npc3NvcihkYXRhKCku
cHJldmlvdXNTY2lzc29yWzBdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzFdLCBkYXRhKCkucHJl
dmlvdXNTY2lzc29yWzJdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzNdKTsKKyAgICBtX2NvbnRl
eHQzRC0+c2Npc3NvcihkYXRhKCkucHJldmlvdXNTY2lzc29yWzBdLCBkYXRhKCkucHJldmlvdXNT
Y2lzc29yWzFdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzJdLCBkYXRhKCkucHJldmlvdXNTY2lz
c29yWzNdKTsKICAgICBpZiAoZGF0YSgpLnByZXZpb3VzU2Npc3NvclN0YXRlKQotICAgICAgICBn
bEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgICAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwogICAgIGVsc2UKLSAgICAgICAgZ2xEaXNh
YmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwogCiAgICAgaWYgKGRhdGEoKS5wcmV2aW91c0Rl
cHRoU3RhdGUpCi0gICAgICAgIGdsRW5hYmxlKEdMX0RFUFRIX1RFU1QpOworICAgICAgICBtX2Nv
bnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUKTsKICAgICBlbHNl
Ci0gICAgICAgIGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKTsKKyAgICAgICAgbV9jb250ZXh0M0Qt
PmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1QpOwogCiAjaWYgUExBVEZPUk0o
UVQpCiAgICAgaWYgKCFtX2NvbnRleHQpCkBAIC0yOTksNDAgKzI2Miw0MCBAQCB2b2lkIFRleHR1
cmVNYXBwZXJHTDo6ZW5kUGFpbnRpbmcoKQogI2VuZGlmCiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYgcXVhZFRvRHJhdywgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0q
IHNoYWRlclByb2dyYW0sIEdMZW51bSBkcmF3aW5nTW9kZSwgYm9vbCBuZWVkc0JsZW5kaW5nKQor
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiBxdWFkVG9EcmF3
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbSogc2hhZGVyUHJvZ3JhbSwgR0MzRGVudW0gZHJhd2luZ01vZGUsIGJv
b2wgbmVlZHNCbGVuZGluZykKIHsKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eShzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbEJpbmRCdWZm
ZXIoR0xfQVJSQVlfQlVGRkVSLCAwKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQz
RC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwKTsKIAotICAg
IGNvbnN0IEdMZmxvYXQgcXVhZFtdID0geworICAgIGNvbnN0IEdDM0RmbG9hdCBxdWFkW10gPSB7
CiAgICAgICAgIHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMSgpLngo
KSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAxKCkueSgpLAogICAg
ICAgICBxdWFkVG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDIoKS54KCksIHF1
YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMigpLnkoKSwKICAgICAgICAg
cXVhZFRvRHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAzKCkueCgpLCBxdWFkVG9E
cmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDMoKS55KCksCiAgICAgICAgIHF1YWRU
b0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wNCgpLngoKSwgcXVhZFRvRHJhdy50
YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnA0KCkueSgpCiAgICAgfTsKLSAgICBHTF9DTUQo
Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBH
TF9GTE9BVCwgR0xfRkFMU0UsIDAsIHF1YWQpKTsKKyAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0
cmliUG9pbnRlcihzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cihxdWFkKSk7CiAKICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCkucHJvamVj
dGlvbk1hdHJpeCkubXVsdGlwbHkobW9kZWxWaWV3TWF0cml4KS5tdWx0aXBseShUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgKICAgICAgICAgICAgIHF1YWRUb0RyYXcub3JpZ2luYWxUYXJnZXRSZWN0Lndp
ZHRoKCksIDAsIDAsIDAsCiAgICAgICAgICAgICAwLCBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0
UmVjdC5oZWlnaHQoKSwgMCwgMCwKICAgICAgICAgICAgIDAsIDAsIDEsIDAsCiAgICAgICAgICAg
ICBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC54KCksIHF1YWRUb0RyYXcub3JpZ2luYWxU
YXJnZXRSZWN0LnkoKSwgMCwgMSkpOwotICAgIGNvbnN0IEdMZmxvYXQgbTRbXSA9IHsKKyAgICBH
QzNEZmxvYXQgbTRbXSA9IHsKICAgICAgICAgbWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIG1h
dHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAogICAgICAgICBtYXRyaXgubTIxKCksIG1hdHJpeC5t
MjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCiAgICAgICAgIG1hdHJpeC5tMzEoKSwg
bWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwKICAgICAgICAgbWF0cml4
Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgpCiAgICAgfTsK
LSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRlclByb2dyYW0tPm1hdHJpeExvY2F0
aW9uKCksIDEsIEdMX0ZBTFNFLCBtNCkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtTWF0cml4
NGZ2KHNoYWRlclByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIGZhbHNlLCBtNCk7CiAKICAg
ICBpZiAobmVlZHNCbGVuZGluZykgewotICAgICAgICBHTF9DTUQoZ2xCbGVuZEZ1bmMoR0xfT05F
LCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKSk7Ci0gICAgICAgIEdMX0NNRChnbEVuYWJsZShHTF9C
TEVORCkpOworICAgICAgICBtX2NvbnRleHQzRC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNE
OjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICAgICAg
bV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwogICAgIH0gZWxz
ZQotICAgICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdMX0JMRU5EKSk7CisgICAgICAgIG1fY29udGV4
dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CiAKLSAgICBHTF9DTUQoZ2xE
cmF3QXJyYXlzKGRyYXdpbmdNb2RlLCAwLCA0KSk7Ci0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7CisgICAgbV9jb250
ZXh0M0QtPmRyYXdBcnJheXMoZHJhd2luZ01vZGUsIDAsIDQpOworICAgIG1fY29udGV4dDNELT5k
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOwog
fQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDb2xvciYgY29sb3Is
IGZsb2F0IHdpZHRoLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgpCkBAIC0zNDEsMTcgKzMwNCwxNyBAQCB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdp
ZHRoLCBjb25zdCBGbG9hdFJlYwogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdM
RGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLnNvbGlkQ29sb3JQcm9ncmFtKCk7Ci0g
ICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKSk7CisgICAgbV9jb250ZXh0M0Qt
PnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CiAKICAgICBmbG9hdCBhbHBoYSA9IGNvbG9yLmFs
cGhhKCkgLyAyNTUuMDsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2Nh
dGlvbigpLAorICAgIG1fY29udGV4dDNELT51bmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlv
bigpLAogICAgICAgICAgICAgICAgICAgICAgICAoY29sb3IucmVkKCkgLyAyNTUuMCkgKiBhbHBo
YSwKICAgICAgICAgICAgICAgICAgICAgICAgKGNvbG9yLmdyZWVuKCkgLyAyNTUuMCkgKiBhbHBo
YSwKICAgICAgICAgICAgICAgICAgICAgICAgKGNvbG9yLmJsdWUoKSAvIDI1NS4wKSAqIGFscGhh
LAotICAgICAgICAgICAgICAgICAgICAgICBhbHBoYSkpOwotICAgIEdMX0NNRChnbExpbmVXaWR0
aCh3aWR0aCkpOworICAgICAgICAgICAgICAgICAgICAgICBhbHBoYSk7CisgICAgbV9jb250ZXh0
M0QtPmxpbmVXaWR0aCh3aWR0aCk7CiAKLSAgICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZp
ZXdNYXRyaXgsIHByb2dyYW0uZ2V0KCksIEdMX0xJTkVfTE9PUCwgY29sb3IuaGFzQWxwaGEoKSk7
CisgICAgZHJhd1F1YWQodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdldCgp
LCBHcmFwaGljc0NvbnRleHQzRDo6TElORV9MT09QLCBjb2xvci5oYXNBbHBoYSgpKTsKIH0KIAog
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdSZXBhaW50Q291bnRlcihpbnQgdmFsdWUsIGludCBw
b2ludFNpemUsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4KQpAQCAtMzk4LDcgKzM2MSw3IEBAIHZvaWQgVGV4
dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBj
b25zdCBGbG9hdFJlY3QmCiAgICAgZHJhd1RleHR1cmUodGV4dHVyZUdMLmlkKCksIHRleHR1cmVH
TC5pc09wYXF1ZSgpID8gMCA6IFN1cHBvcnRzQmxlbmRpbmcsIHRleHR1cmVHTC5zaXplKCksIHRh
cmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSwgbWFzaywgZXhwb3NlZEVkZ2VzKTsKIH0KIAotI2lm
IGRlZmluZWQoR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlKQorI2lmICFVU0UoVEVYTUFQX09QRU5H
TF9FU18yKQogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKHVp
bnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNr
VGV4dHVyZSkKIHsKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dy
YW07CkBAIC00MDYsMzYgKzM2OSwzNiBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1
cmVSZWN0YW5nbGVBUkIodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbgogICAgICAg
ICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3RPcGFj
aXR5QW5kTWFzayk7CiAgICAgZWxzZQogICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdM
RGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3RTaW1wbGUpOwotICAgIEdMX0NNRChnbFVzZVByb2dy
YW0ocHJvZ3JhbS0+aWQoKSkpOworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0t
PmlkKCkpOwogCi0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+
dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUw
KSk7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCB0
ZXh0dXJlKSk7Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW0tPnNvdXJjZVRleHR1cmVM
b2NhdGlvbigpLCAwKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOworICAgIG1fY29udGV4dDNELT5iaW5kVGV4
dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIHRleHR1cmUpOworICAgIG1fY29udGV4dDNE
LT51bmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVyZUxvY2F0aW9uKCksIDApOwogCi0gICAg
R0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW0tPmZsaXBMb2NhdGlvbigpLCAhIShmbGFncyAmIFNo
b3VsZEZsaXBUZXh0dXJlKSkpOwotICAgIEdMX0NNRChnbFVuaWZvcm0yZihwcm9ncmFtLT50ZXh0
dXJlU2l6ZUxvY2F0aW9uKCksIHRleHR1cmVTaXplLndpZHRoKCksIHRleHR1cmVTaXplLmhlaWdo
dCgpKSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5mbGlwTG9jYXRpb24o
KSwgISEoZmxhZ3MgJiBTaG91bGRGbGlwVGV4dHVyZSkpOworICAgIG1fY29udGV4dDNELT51bmlm
b3JtMmYocHJvZ3JhbS0+dGV4dHVyZVNpemVMb2NhdGlvbigpLCB0ZXh0dXJlU2l6ZS53aWR0aCgp
LCB0ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CiAKICAgICBpZiAoVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCkp
KQotICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCks
IG9wYWNpdHkpKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5vcGFj
aXR5TG9jYXRpb24oKSwgb3BhY2l0eSk7CiAKICAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1Rl
eHR1cmUtPmlzVmFsaWQoKSAmJiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCkpKSB7CiAgICAgICAg
IGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0
IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKLSAgICAgICAgR0xfQ01EKGdsQWN0aXZl
VGV4dHVyZShHTF9URVhUVVJFMSkpOwotICAgICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKSk7Ci0gICAgICAgIEdMX0NNRChnbFVuaWZv
cm0xaShwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCksIDEpKTsKLSAgICAgICAgR0xfQ01E
KGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpOworICAgICAgICBtX2NvbnRleHQzRC0+YWN0
aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpOworICAgICAgICBtX2NvbnRl
eHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1hc2tUZXh0
dXJlR0wtPmlkKCkpOworICAgICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPm1h
c2tUZXh0dXJlTG9jYXRpb24oKSwgMSk7CisgICAgICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgfQogCiAgICAgYm9vbCBuZWVk
c0JsZW5kaW5nID0gKGZsYWdzICYgU3VwcG9ydHNCbGVuZGluZykgfHwgb3BhY2l0eSA8IDAuOTkg
fHwgbWFza1RleHR1cmU7Ci0gICAgZHJhd1F1YWQodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4
LCBwcm9ncmFtLmdldCgpLCBHTF9UUklBTkdMRV9GQU4sIG5lZWRzQmxlbmRpbmcpOworICAgIGRy
YXdRdWFkKHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgcHJvZ3JhbS5nZXQoKSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgbmVlZHNCbGVuZGluZyk7CiB9Ci0jZW5kaWYgLy8g
ZGVmaW5lZChHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUpIAorI2VuZGlmIC8vICFVU0UoVEVYTUFQ
X09QRU5HTF9FU18yKQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUodWludDMy
X3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIC8qIHRleHR1cmVTaXplICov
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1h
c2tUZXh0dXJlLCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpCiB7Ci0gICAgYm9vbCBuZWVkc0FudGls
aWFpbmcgPSBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyAmJiAhbW9kZWxWaWV3TWF0
cml4LmlzSW50ZWdlclRyYW5zbGF0aW9uKCk7Ci0gICAgaWYgKG5lZWRzQW50aWxpYWluZyAmJiBk
cmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodGV4dHVyZSwgZmxhZ3MsIHRhcmdldFJlY3QsIG1v
ZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgbWFza1RleHR1cmUsIGV4cG9zZWRFZGdlcykpCisgICAg
Ym9vbCBuZWVkc0FudGlhbGlhc2luZyA9IG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5n
ICYmICFtb2RlbFZpZXdNYXRyaXguaXNJbnRlZ2VyVHJhbnNsYXRpb24oKTsKKyAgICBpZiAobmVl
ZHNBbnRpYWxpYXNpbmcgJiYgZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHRleHR1cmUsIGZs
YWdzLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0dXJlLCBl
eHBvc2VkRWRnZXMpKQogICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbTsKQEAgLTQ0MywxNSArNDA2LDE1IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29u
c3QgSW50U2l6ZSYKICAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjpPcGFjaXR5QW5kTWFzayk7CiAgICAgZWxzZQogICAgICAgICBwcm9ncmFtID0g
ZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRl
clByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNpbXBsZSk7Ci0gICAgR0xfQ01E
KGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dy
YW0ocHJvZ3JhbS0+aWQoKSk7CiAKICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJv
Z3JhbS5nZXQoKSwgdGV4dHVyZSwgZmxhZ3MsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwg
b3BhY2l0eSwgbWFza1RleHR1cmUpOwogfQogCi1zdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXgg
dmlld3BvcnRNYXRyaXgoKQorc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZpZXdwb3J0TWF0
cml4KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QpCiB7Ci0gICAgR0xpbnQgdmlld3BvcnRb
NF07Ci0gICAgR0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIHZpZXdwb3J0KSk7Cisg
ICAgR0MzRGludCB2aWV3cG9ydFs0XTsKKyAgICBjb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dDNEOjpWSUVXUE9SVCwgdmlld3BvcnQpOwogCiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbWF0cml4OwogICAgIG1hdHJpeC50cmFuc2xhdGUzZCh2aWV3cG9ydFswXSwgdmlld3Bv
cnRbMV0sIDApOwpAQCAtNTQ4LDcgKzUxMSw3IEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpkcmF3
VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsCiAg
ICAgLy8gYW50aWFsaWFzaW5nLiBOb3RlIGhlcmUgdGhhdCB3ZSBhcmUgYWxzbyBpbmNsdWRpbmcg
dGhlIHZpZXdwb3J0IG1hdHJpeCAod2hpY2gKICAgICAvLyB0cmFuc2xhdGVzIGZyb20gbm9ybWFs
aXplZCBkZXZpY2UgY29vcmRpbmF0ZXMgdG8gc2NyZWVuIGNvb3JkaW5hdGVzKSwgYmVjYXVzZSB0
aGVzZQogICAgIC8vIHZhbHVlcyBhcmUgY29uc3VtZWQgaW4gdGhlIGZyYWdtZW50IHNoYWRlciwg
d2hpY2ggd29ya3MgaW4gc2NyZWVuIGNvb3JkaW5hdGVzLgotICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHNjcmVlblNwYWNlVHJhbnNmb3JtID0gdmlld3BvcnRNYXRyaXgoKS5tdWx0aXBseShUcmFu
c2Zvcm1hdGlvbk1hdHJpeChkYXRhKCkucHJvamVjdGlvbk1hdHJpeCkpLm11bHRpcGx5KG1vZGVs
Vmlld01hdHJpeCkudG8yZFRyYW5zZm9ybSgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNj
cmVlblNwYWNlVHJhbnNmb3JtID0gdmlld3BvcnRNYXRyaXgobV9jb250ZXh0M0QuZ2V0KCkpLm11
bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KSkubXVs
dGlwbHkobW9kZWxWaWV3TWF0cml4KS50bzJkVHJhbnNmb3JtKCk7CiAgICAgaWYgKCFzY3JlZW5T
cGFjZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IEZsb2F0UXVhZCBxdWFkSW5TY3JlZW5TcGFjZSA9IHNjcmVlblNwYWNlVHJhbnNmb3JtLm1hcFF1
YWQob3JpZ2luYWxUYXJnZXRSZWN0KTsKQEAgLTU3Miw4ICs1MzUsOCBAQCBib29sIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUsIEZs
YWdzIGZsYWdzLAogICAgIHF1YWRUb0VkZ2VBcnJheShpbmZsYXRlUXVhZChxdWFkSW5TY3JlZW5T
cGFjZS5ib3VuZGluZ0JveCgpLCAgaW5mbGF0aW9uRGlzdGFuY2UpLCB0YXJnZXRRdWFkRWRnZXMg
KyAxMik7CiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNp
bmdOb01hc2s+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIuYW50aWFsaWFzaW5nTm9NYXNrUHJvZ3JhbSgpOwotICAgIEdMX0NNRChnbFVz
ZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSkpOwotICAgIEdMX0NNRChnbFVuaWZvcm0zZnYocHJvZ3Jh
bS0+ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSwgOCwgdGFyZ2V0UXVh
ZEVkZ2VzKSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7Cisg
ICAgbV9jb250ZXh0M0QtPnVuaWZvcm0zZnYocHJvZ3JhbS0+ZXhwYW5kZWRRdWFkRWRnZXNJblNj
cmVlblNwYWNlTG9jYXRpb24oKSwgOCwgdGFyZ2V0UXVhZEVkZ2VzKTsKIAogICAgIGRyYXdUZXh0
dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0dXJlLCBmbGFncywgRHJhd1F1
YWQob3JpZ2luYWxUYXJnZXRSZWN0LCBleHBhbmRlZFF1YWRJblRleHR1cmVDb29yZGluYXRlcyks
IG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgMCAvKiBtYXNrVGV4dHVyZSAqLyk7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC01ODEsMjYgKzU0NCwyNiBAQCBib29sIFRleHR1cmVNYXBwZXJHTDo6ZHJh
d1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLAog
CiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCB1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBm
bGFncywgY29uc3QgRHJhd1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUq
IG1hc2tUZXh0dXJlKQogewotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHBy
b2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9U
RVhUVVJFMCkpOwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1
cmUpKTsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVyZUxvY2F0
aW9uKCksIDApKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJv
Z3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBtX2NvbnRleHQz
RC0+dW5pZm9ybTFpKHByb2dyYW0tPnNvdXJjZVRleHR1cmVMb2NhdGlvbigpLCAwKTsKIAotICAg
IEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtLT5mbGlwTG9jYXRpb24oKSwgISEoZmxhZ3MgJiBT
aG91bGRGbGlwVGV4dHVyZSkpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0t
PmZsaXBMb2NhdGlvbigpLCAhIShmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSk7CiAKICAgICBp
ZiAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24ocHJv
Z3JhbS0+b3BhY2l0eUxvY2F0aW9uKCkpKQotICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJv
Z3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpKTsKKyAgICAgICAgbV9jb250ZXh0M0Qt
PnVuaWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0eSk7CiAKICAgICBp
ZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSAmJiBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLT5tYXNrVGV4dHVy
ZUxvY2F0aW9uKCkpKSB7CiAgICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1
cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsK
LSAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSkpOwotICAgICAgICBH
TF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKSk7
Ci0gICAgICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9u
KCksIDEpKTsKLSAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpOwor
ICAgICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRTEpOworICAgICAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPmlkKCkpOworICAgICAgICBtX2NvbnRleHQz
RC0+dW5pZm9ybTFpKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSwgMSk7CisgICAgICAg
IG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7
CiAgICAgfQogCiAgICAgYm9vbCBuZWVkc0JsZW5kaW5nID0gKGZsYWdzICYgU3VwcG9ydHNCbGVu
ZGluZykgfHwgb3BhY2l0eSA8IDAuOTkgfHwgbWFza1RleHR1cmU7Ci0gICAgZHJhd1F1YWQocXVh
ZFRvRHJhdywgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLCBHTF9UUklBTkdMRV9GQU4sIG5lZWRz
QmxlbmRpbmcpOworICAgIGRyYXdRdWFkKHF1YWRUb0RyYXcsIG1vZGVsVmlld01hdHJpeCwgcHJv
Z3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgbmVlZHNCbGVuZGluZyk7CiB9
CiAKIGJvb2wgQml0bWFwVGV4dHVyZUdMOjpjYW5SZXVzZVdpdGgoY29uc3QgSW50U2l6ZSYgY29u
dGVudHNTaXplLCBGbGFncykKQEAgLTYxMSw3ICs1NzQsNyBAQCBib29sIEJpdG1hcFRleHR1cmVH
TDo6Y2FuUmV1c2VXaXRoKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSwgRmxhZ3MpCiAjaWYg
T1MoREFSV0lOKQogI2RlZmluZSBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSBH
TF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYKICNlbHNlCi0jZGVmaW5lIERFRkFVTFRfVEVYVFVS
RV9QSVhFTF9UUkFOU0ZFUl9UWVBFIEdMX1VOU0lHTkVEX0JZVEUKKyNkZWZpbmUgREVGQVVMVF9U
RVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUKICNlbmRpZgogCiBzdGF0aWMgdm9pZCBzd2l6emxlQkdSQVRvUkdCQSh1aW50MzJfdCogZGF0
YSwgY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHN0cmlkZSA9IDApCkBAIC02NDYsMzggKzYwOSw0
MiBAQCBzdGF0aWMgYm9vbCBkcml2ZXJTdXBwb3J0c1N1YkltYWdlKCkKIAogdm9pZCBCaXRtYXBU
ZXh0dXJlR0w6OmRpZFJlc2V0KCkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNE
ID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOworCiAgICAgaWYgKCFtX2lk
KQotICAgICAgICBHTF9DTUQoZ2xHZW5UZXh0dXJlcygxLCAmbV9pZCkpOworICAgICAgICBtX2lk
ID0gY29udGV4dDNELT5jcmVhdGVUZXh0dXJlKCk7CiAKICAgICBtX3Nob3VsZENsZWFyID0gdHJ1
ZTsKICAgICBpZiAobV90ZXh0dXJlU2l6ZSA9PSBjb250ZW50U2l6ZSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBHTHVpbnQgZm9ybWF0ID0gZHJpdmVyU3VwcG9ydHNCR1JBU3dpenpsaW5nKCkg
PyBHTF9CR1JBIDogR0xfUkdCQTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGZvcm1hdCA9IGRyaXZl
clN1cHBvcnRzQkdSQVN3aXp6bGluZygpID8gR3JhcGhpY3NDb250ZXh0M0Q6OkJHUkEgOiBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQTsKIAogICAgIG1fdGV4dHVyZVNpemUgPSBjb250ZW50U2l6ZSgp
OwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKTsKLSAgICBH
TF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRF
UiwgR0xfTElORUFSKSk7Ci0gICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUikpOwotICAgIEdMX0NNRChnbFRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VE
R0UpKTsKLSAgICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKSk7Ci0gICAgR0xfQ01EKGdsVGV4SW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVy
ZVNpemUuaGVpZ2h0KCksIDAsIGZvcm1hdCwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVS
X1RZUEUsIDApKTsKKyAgICBjb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBtX2lkKTsKKyAgICBjb250ZXh0M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9G
SUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIGNvbnRleHQzRC0+dGV4UGFy
YW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgY29u
dGV4dDNELT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9U
T19FREdFKTsKKyAgICBjb250ZXh0M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3ND
b250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGNvbnRleHQzRC0+dGV4SW1hZ2UyRERpcmVj
dChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgZm9ybWF0LCBtX3RleHR1cmVTaXpl
LndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIGZvcm1hdCwgREVGQVVMVF9URVhU
VVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIDApOwogfQogCiAKIHZvaWQgQml0bWFwVGV4dHVyZUdM
Ojp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBJbnRQb2ludCYgc291cmNlT2Zmc2V0LCBpbnQgYnl0ZXNQZXJMaW5lKQogewot
ICAgIEdMdWludCBnbEZvcm1hdCA9IEdMX1JHQkE7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgbV9pZCkpOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0Qg
PSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CisKKyAgICBQbGF0Zm9ybTNE
T2JqZWN0IGdsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CisgICAgY29udGV4dDNE
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9pZCk7CiAKICAg
ICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclBpeGVsID0gNDsKICAgICBpZiAoZHJpdmVyU3VwcG9y
dHNCR1JBU3dpenpsaW5nKCkpCi0gICAgICAgIGdsRm9ybWF0ID0gR0xfQkdSQTsKKyAgICAgICAg
Z2xGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6QkdSQTsKICAgICBlbHNlCiAgICAgICAgIHN3
aXp6bGVCR1JBVG9SR0JBKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihjb25zdF9jYXN0PHZv
aWQqPihkYXRhKSksIEludFJlY3Qoc291cmNlT2Zmc2V0LCB0YXJnZXRSZWN0LnNpemUoKSksIGJ5
dGVzUGVyTGluZSAvIGJ5dGVzUGVyUGl4ZWwpOwogCiAgICAgaWYgKGJ5dGVzUGVyTGluZSA9PSB0
YXJnZXRSZWN0LndpZHRoKCkgLyA0ICYmIHNvdXJjZU9mZnNldCA9PSBJbnRQb2ludDo6emVybygp
KSB7Ci0gICAgICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFy
Z2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJl
Y3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQ
RSwgKGNvbnN0IGNoYXIqKWRhdGEpKTsKKyAgICAgICAgY29udGV4dDNELT50ZXhTdWJJbWFnZTJE
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0
UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3Jt
YXQsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29uc3QgY2hhciopZGF0
YSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTY5NSwxOSArNjYyLDE5IEBAIHZvaWQg
Qml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJ
bnRSZWN0JiB0YXJnZXRSZWN0CiAgICAgICAgICAgICBkc3QgKz0gdGFyZ2V0Qnl0ZXNQZXJMaW5l
OwogICAgICAgICB9CiAKLSAgICAgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgo
KSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9U
UkFOU0ZFUl9UWVBFLCB0ZW1wb3JhcnlEYXRhLmRhdGEoKSkpOworICAgICAgICBjb250ZXh0M0Qt
PnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIHRhcmdldFJl
Y3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0Lmhl
aWdodCgpLCBnbEZvcm1hdCwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIHRl
bXBvcmFyeURhdGEuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lmICFkZWZp
bmVkKFRFWE1BUF9PUEVOR0xfRVNfMikKICAgICAvLyBVc2UgdGhlIE9wZW5HTCBzdWItaW1hZ2Ug
ZXh0ZW5zaW9uLCBub3cgdGhhdCB3ZSBrbm93IGl0J3MgYXZhaWxhYmxlLgotICAgIEdMX0NNRChn
bFBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCBieXRlc1BlckxpbmUgLyBieXRlc1Bl
clBpeGVsKSk7Ci0gICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywg
c291cmNlT2Zmc2V0LnkoKSkpOwotICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19T
S0lQX1BJWEVMUywgc291cmNlT2Zmc2V0LngoKSkpOwotICAgIEdMX0NNRChnbFRleFN1YkltYWdl
MkQoR0xfVEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJn
ZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBERUZBVUxUX1RF
WFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgKGNvbnN0IGNoYXIqKWRhdGEpKTsKLSAgICBHTF9D
TUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgMCkpOwotICAgIEdMX0NNRChn
bFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JPV1MsIDApKTsKLSAgICBHTF9DTUQoZ2xQaXhl
bFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsIDApKTsKKyAgICBjb250ZXh0M0QtPnBpeGVs
U3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCBieXRlc1BlckxpbmUgLyBieXRlc1BlclBpeGVs
KTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JPV1MsIHNvdXJj
ZU9mZnNldC55KCkpOworICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBf
UElYRUxTLCBzb3VyY2VPZmZzZXQueCgpKTsKKyAgICBjb250ZXh0M0QtPnRleFN1YkltYWdlMkQo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRS
ZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBnbEZvcm1h
dCwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIChjb25zdCBjaGFyKilkYXRh
KTsKKyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCAwKTsK
KyAgICBjb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JPV1MsIDApOworICAg
IGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUElYRUxTLCAwKTsKICNlbmRp
ZgogfQogCkBAIC03NDMsMTkgKzcxMCwxOSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0Zp
bHRlcmVkKGNvbnN0IEJpdG1hcFRleHR1cmUmIHNvdXJjZVRleHR1cmUsIGNvbnN0IEJpdAogCiAg
ICAgcHJvZ3JhbS0+cHJlcGFyZShmaWx0ZXIsIHBhc3MsIHNvdXJjZVRleHR1cmUuY29udGVudFNp
emUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oY29udGVudFRleHR1cmUp
LmlkKCkpOwogCi0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+
dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShw
cm9ncmFtLT50ZXhDb29yZEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShH
TF9URVhUVVJFMCkpOwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHN0
YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHNvdXJjZVRleHR1cmUpLmlkKCkpKTsK
LSAgICBnbFVuaWZvcm0xaShwcm9ncmFtLT50ZXh0dXJlVW5pZm9ybSgpLCAwKTsKLSAgICBjb25z
dCBHTGZsb2F0IHRhcmdldFZlcnRpY2VzW10gPSB7LTEsIC0xLCAxLCAtMSwgMSwgMSwgLTEsIDF9
OwotICAgIGNvbnN0IEdMZmxvYXQgc291cmNlVmVydGljZXNbXSA9IHswLCAwLCAxLCAwLCAxLCAx
LCAwLCAxfTsKLSAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRl
eEF0dHJpYigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHRhcmdldFZlcnRpY2VzKSk7Ci0g
ICAgR0xfQ01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigp
LCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHNvdXJjZVZlcnRpY2VzKSk7Ci0gICAgR0xfQ01E
KGdsRGlzYWJsZShHTF9CTEVORCkpOwotICAgIEdMX0NNRChnbERyYXdBcnJheXMoR0xfVFJJQU5H
TEVfRkFOLCAwLCA0KSk7Ci0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHBy
b2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJp
YkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmliKCkpKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29u
dGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT50ZXhDb29yZEF0dHJpYigp
KTsKKyAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRTApOworICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oc291cmNlVGV4
dHVyZSkuaWQoKSk7CisgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT50ZXh0dXJl
VW5pZm9ybSgpLCAwKTsKKyAgICBjb25zdCBHQzNEZmxvYXQgdGFyZ2V0VmVydGljZXNbXSA9IHst
MSwgLTEsIDEsIC0xLCAxLCAxLCAtMSwgMX07CisgICAgY29uc3QgR0MzRGZsb2F0IHNvdXJjZVZl
cnRpY2VzW10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07CisgICAgbV9jb250ZXh0M0QtPnZl
cnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIodGFyZ2V0VmVydGljZXMpKTsKKyAg
ICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT50ZXhDb29yZEF0dHJp
YigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHNv
dXJjZVZlcnRpY2VzKSk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OkJMRU5EKTsKKyAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQz
RDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0
dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlz
YWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmliKCkpOwogfQogCiBQ
YXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IEJpdG1hcFRleHR1cmVHTDo6YXBwbHlGaWx0ZXJzKGNv
bnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiBmaWx0ZXJzKQpAQCAtNzk2LDE3ICs3NjMsMTkgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6Omlu
aXRpYWxpemVTdGVuY2lsKCkKIHsKICAgICBpZiAobV9yYm8pCiAgICAgICAgIHJldHVybjsKLSAg
ICBHTF9DTUQoZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX3JibykpOwotICAgIEdMX0NNRChnbEJp
bmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX3JibykpOworCisgICAgR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0Qo
KTsKKyAgICBtX3JibyA9IGNvbnRleHQzRC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAgY29u
dGV4dDNELT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIs
IG1fcmJvKTsKICNpZmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKLSAgICBHTF9DTUQoZ2xSZW5kZXJi
dWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgR0xfU1RFTkNJTF9JTkRFWDgsIG1fdGV4dHVy
ZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSkpOworICAgIGNvbnRleHQzRC0+
cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDgsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90
ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CiAjZWxzZQotICAgIEdMX0NNRChnbFJlbmRlcmJ1ZmZlclN0
b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9ERVBUSF9TVEVOQ0lMLCBtX3RleHR1cmVTaXplLndp
ZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKTsKKyAgICBjb250ZXh0M0QtPnJlbmRlcmJ1
ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX1NURU5DSUwsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6
ZS5oZWlnaHQoKSk7CiAjZW5kaWYKLSAgICBHTF9DTUQoZ2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JF
TkRFUkJVRkZFUiwgMCkpOwotICAgIEdMX0NNRChnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9y
Ym8pKTsKLSAgICBHTF9DTUQoZ2xDbGVhclN0ZW5jaWwoMCkpOwotICAgIEdMX0NNRChnbENsZWFy
KEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpOworICAgIGNvbnRleHQzRC0+YmluZFJlbmRlcmJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKKyAgICBjb250ZXh0M0QtPmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUiwgbV9yYm8pOworICAgIGNvbnRleHQzRC0+Y2xlYXJTdGVuY2lsKDApOworICAg
IGNvbnRleHQzRC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCk7
CiB9CiAKIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpjbGVhcklmTmVlZGVkKCkKQEAgLTgxNCwxMCAr
NzgzLDEyIEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpjbGVhcklmTmVlZGVkKCkKICAgICBpZiAo
IW1fc2hvdWxkQ2xlYXIpCiAgICAgICAgIHJldHVybjsKIAorICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CisKICAg
ICBtX2NsaXBTdGFjay5pbml0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV90ZXh0dXJlU2l6
ZSkpOwotICAgIG1fY2xpcFN0YWNrLmFwcGx5KCk7Ci0gICAgR0xfQ01EKGdsQ2xlYXJDb2xvcigw
LCAwLCAwLCAwKSk7Ci0gICAgR0xfQ01EKGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCkpOwor
ICAgIG1fY2xpcFN0YWNrLmFwcGx5KGNvbnRleHQzRCk7CisgICAgY29udGV4dDNELT5jbGVhckNv
bG9yKDAsIDAsIDAsIDApOworICAgIGNvbnRleHQzRC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkNPTE9SX0JVRkZFUl9CSVQpOwogICAgIG1fc2hvdWxkQ2xlYXIgPSBmYWxzZTsKIH0KIApAQCAt
ODI2LDMzICs3OTcsMzcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmNyZWF0ZUZib0lmTmVlZGVk
KCkKICAgICBpZiAobV9mYm8pCiAgICAgICAgIHJldHVybjsKIAotICAgIEdMX0NNRChnbEdlbkZy
YW1lYnVmZmVycygxLCAmbV9mYm8pKTsKLSAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIG1fZmJvKSk7Ci0gICAgR0xfQ01EKGdsRnJhbWVidWZmZXJUZXh0dXJlMkQo
R0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBpZCgp
LCAwKSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBl
ci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBtX2ZibyA9IGNvbnRleHQzRC0+Y3JlYXRlRnJh
bWVidWZmZXIoKTsKKyAgICBjb250ZXh0M0QtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICBjb250ZXh0M0QtPmZyYW1lYnVmZmVyVGV4
dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgaWQoKSwg
MCk7CiAgICAgbV9zaG91bGRDbGVhciA9IHRydWU7CiB9CiAKIHZvaWQgQml0bWFwVGV4dHVyZUdM
OjpiaW5kKCkKIHsKLSAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKSk7
CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3Jh
cGhpY3NDb250ZXh0M0QoKTsKKyAgICBjb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwKTsKICAgICBjcmVhdGVGYm9JZk5lZWRlZCgpOwotICAgIEdM
X0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pKTsKLSAgICBHTF9D
TUQoZ2xWaWV3cG9ydCgwLCAwLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUu
aGVpZ2h0KCkpKTsKKyAgICBjb250ZXh0M0QtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICBjb250ZXh0M0QtPnZpZXdwb3J0KDAsIDAs
IG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CiAgICAgY2xl
YXJJZk5lZWRlZCgpOwogICAgIG1fdGV4dHVyZU1hcHBlci0+ZGF0YSgpLnByb2plY3Rpb25NYXRy
aXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KG1fdGV4dHVyZVNpemUsIHRydWUgLyogbWlycm9y
ZWQgKi8pOwotICAgIG1fY2xpcFN0YWNrLmFwcGx5KCk7CisgICAgbV9jbGlwU3RhY2suYXBwbHko
Y29udGV4dDNEKTsKIH0KIAogQml0bWFwVGV4dHVyZUdMOjp+Qml0bWFwVGV4dHVyZUdMKCkKIHsK
KyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFw
aGljc0NvbnRleHQzRCgpOworCiAgICAgaWYgKG1faWQpCi0gICAgICAgIEdMX0NNRChnbERlbGV0
ZVRleHR1cmVzKDEsICZtX2lkKSk7CisgICAgICAgIGNvbnRleHQzRC0+ZGVsZXRlVGV4dHVyZSht
X2lkKTsKIAogICAgIGlmIChtX2ZibykKLSAgICAgICAgR0xfQ01EKGdsRGVsZXRlRnJhbWVidWZm
ZXJzKDEsICZtX2ZibykpOworICAgICAgICBjb250ZXh0M0QtPmRlbGV0ZUZyYW1lYnVmZmVyKG1f
ZmJvKTsKIAogICAgIGlmIChtX3JibykKLSAgICAgICAgR0xfQ01EKGdsRGVsZXRlUmVuZGVyYnVm
ZmVycygxLCAmbV9yYm8pKTsKKyAgICAgICAgY29udGV4dDNELT5kZWxldGVSZW5kZXJidWZmZXIo
bV9yYm8pOwogfQogCiBib29sIEJpdG1hcFRleHR1cmVHTDo6aXNWYWxpZCgpIGNvbnN0CkBAIC04
NzIsMTEgKzg0NywxMSBAQCBUZXh0dXJlTWFwcGVyR0w6On5UZXh0dXJlTWFwcGVyR0woKQogCiB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6YmluZERlZmF1bHRTdXJmYWNlKCkKIHsKLSAgICBHTF9DTUQo
Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGRhdGEoKS50YXJnZXRGcmFtZUJ1ZmZl
cikpOworICAgIG1fY29udGV4dDNELT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpOwogICAgIEludFNpemUgdmll
d3BvcnRTaXplKGRhdGEoKS52aWV3cG9ydFsyXSwgZGF0YSgpLnZpZXdwb3J0WzNdKTsKICAgICBk
YXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgodmlld3BvcnRT
aXplLCBkYXRhKCkuUGFpbnRGbGFncyAmIFBhaW50aW5nTWlycm9yZWQpOwotICAgIEdMX0NNRChn
bFZpZXdwb3J0KGRhdGEoKS52aWV3cG9ydFswXSwgZGF0YSgpLnZpZXdwb3J0WzFdLCB2aWV3cG9y
dFNpemUud2lkdGgoKSwgdmlld3BvcnRTaXplLmhlaWdodCgpKSk7Ci0gICAgbV9jbGlwU3RhY2su
YXBwbHkoKTsKKyAgICBtX2NvbnRleHQzRC0+dmlld3BvcnQoZGF0YSgpLnZpZXdwb3J0WzBdLCBk
YXRhKCkudmlld3BvcnRbMV0sIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCB2aWV3cG9ydFNpemUuaGVp
Z2h0KCkpOworICAgIG1fY2xpcFN0YWNrLmFwcGx5KG1fY29udGV4dDNELmdldCgpKTsKICAgICBk
YXRhKCkuY3VycmVudFN1cmZhY2UuY2xlYXIoKTsKIH0KIApAQCAtOTA2LDcgKzg4MSw3IEBAIGJv
b2wgVGV4dHVyZU1hcHBlckdMOjpiZWdpblNjaXNzb3JDbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNsaXBT
dGFjaygpLmN1cnJlbnQoKS5zY2lzc29yQm94LmludGVyc2VjdChyZWN0KTsKLSAgICBjbGlwU3Rh
Y2soKS5hcHBseSgpOworICAgIGNsaXBTdGFjaygpLmFwcGx5KG1fY29udGV4dDNELmdldCgpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTIwLDEwICs4OTUsMTAgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4LCBjb24KIAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJv
Z3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5n
ZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaW1wbGUpOwogCi0g
ICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKSk7Ci0gICAgR0xfQ01EKGdsRW5h
YmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBjb25z
dCBHTGZsb2F0IHVuaXRSZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07Ci0gICAgR0xf
Q01EKGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR0xf
RkxPQVQsIEdMX0ZBTFNFLCAwLCB1bml0UmVjdCkpOworICAgIG1fY29udGV4dDNELT51c2VQcm9n
cmFtKHByb2dyYW0tPmlkKCkpOworICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7CisgICAgY29uc3QgR0MzRGZsb2F0IHVuaXRS
ZWN0W10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07CisgICAgbV9jb250ZXh0M0QtPnZlcnRl
eEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4QXR0cmliKCksIDIsIEdyYXBoaWNzQ29udGV4
dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0RpbnRwdHIodW5pdFJlY3QpKTsKIAogICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9q
ZWN0aW9uTWF0cml4KQogICAgICAgICAgICAgLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkKQEAg
LTkzMiwxNCArOTA3LDE0IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAgICAgICAgICAgICAg
ICAgMCwgMCwgMSwgMCwKICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVj
dC55KCksIDAsIDEpKTsKIAotICAgIGNvbnN0IEdMZmxvYXQgbTRbXSA9IHsKKyAgICBjb25zdCBH
QzNEZmxvYXQgbTRbXSA9IHsKICAgICAgICAgbWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIG1h
dHJpeC5tMTMoKSwgbWF0cml4Lm0xNCgpLAogICAgICAgICBtYXRyaXgubTIxKCksIG1hdHJpeC5t
MjIoKSwgbWF0cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCiAgICAgICAgIG1hdHJpeC5tMzEoKSwg
bWF0cml4Lm0zMigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwKICAgICAgICAgbWF0cml4
Lm00MSgpLCBtYXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgpCiAgICAgfTsK
IAotICAgIGNvbnN0IEdMZmxvYXQgbTRhbGxbXSA9IHsKKyAgICBjb25zdCBHQzNEZmxvYXQgbTRh
bGxbXSA9IHsKICAgICAgICAgMiwgMCwgMCwgMCwKICAgICAgICAgMCwgMiwgMCwgMCwKICAgICAg
ICAgMCwgMCwgMSwgMCwKQEAgLTk0OCw0MyArOTIzLDQyIEBAIHZvaWQgVGV4dHVyZU1hcHBlckdM
OjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwg
Y29uCiAKICAgICBpbnQmIHN0ZW5jaWxJbmRleCA9IGNsaXBTdGFjaygpLmN1cnJlbnQoKS5zdGVu
Y2lsSW5kZXg7CiAKLSAgICBHTF9DTUQoZ2xFbmFibGUoR0xfU1RFTkNJTF9URVNUKSk7CisgICAg
bV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKTsKIAog
ICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBkbyBhbnkgYWN0dWFsIGRyYXdpbmcuCi0gICAgR0xf
Q01EKGdsU3RlbmNpbEZ1bmMoR0xfTkVWRVIsIHN0ZW5jaWxJbmRleCwgc3RlbmNpbEluZGV4KSk7
CisgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpORVZFUiwg
c3RlbmNpbEluZGV4LCBzdGVuY2lsSW5kZXgpOwogCiAgICAgLy8gT3BlcmF0ZSBvbmx5IG9uIHRo
ZSBzdGVuY2lsSW5kZXggYW5kIGFib3ZlLgotICAgIEdMX0NNRChnbFN0ZW5jaWxNYXNrKDB4ZmYg
JiB+KHN0ZW5jaWxJbmRleCAtIDEpKSk7CisgICAgbV9jb250ZXh0M0QtPnN0ZW5jaWxNYXNrKDB4
ZmYgJiB+KHN0ZW5jaWxJbmRleCAtIDEpKTsKIAogICAgIC8vIEZpcnN0IGNsZWFyIHRoZSBlbnRp
cmUgYnVmZmVyIGF0IHRoZSBjdXJyZW50IGluZGV4LgotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRy
aXg0ZnYocHJvZ3JhbS0+bWF0cml4TG9jYXRpb24oKSwgMSwgR0xfRkFMU0UsIG00YWxsKSk7Ci0g
ICAgR0xfQ01EKGdsU3RlbmNpbE9wKEdMX1pFUk8sIEdMX1pFUk8sIEdMX1pFUk8pKTsKLSAgICBH
TF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpOworICAgIG1fY29udGV4
dDNELT51bmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIGZhbHNl
LCBjb25zdF9jYXN0PEdDM0RmbG9hdCo+KG00YWxsKSk7CisgICAgbV9jb250ZXh0M0QtPnN0ZW5j
aWxPcChHcmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdy
YXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKKyAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFw
aGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKIAogICAgIC8vIE5vdyBhcHBseSB0
aGUgY3VycmVudCBpbmRleCB0byB0aGUgbmV3IHF1YWQuCi0gICAgR0xfQ01EKGdsU3RlbmNpbE9w
KEdMX1JFUExBQ0UsIEdMX1JFUExBQ0UsIEdMX1JFUExBQ0UpKTsKLSAgICBHTF9DTUQoZ2xVbmlm
b3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIEdMX0ZBTFNFLCBtNCkp
OwotICAgIEdMX0NNRChnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSk7CisgICAg
bV9jb250ZXh0M0QtPnN0ZW5jaWxPcChHcmFwaGljc0NvbnRleHQzRDo6UkVQTEFDRSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFUExBQ0UsIEdyYXBoaWNzQ29udGV4dDNEOjpSRVBMQUNFKTsKKyAgICBt
X2NvbnRleHQzRC0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAx
LCBmYWxzZSwgY29uc3RfY2FzdDxHQzNEZmxvYXQqPihtNCkpOworICAgIG1fY29udGV4dDNELT5k
cmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQpOwogCiAgICAg
Ly8gQ2xlYXIgdGhlIHN0YXRlLgotICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbFN0ZW5jaWxNYXNrKDAp
KTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZl
cnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE1hc2soMCk7CiAKICAgICAv
LyBJbmNyZWFzZSBzdGVuY2lsSW5kZXggYW5kIGFwcGx5IHN0ZW5jaWwgdGVzdGluZy4KICAgICBz
dGVuY2lsSW5kZXggKj0gMjsKLSAgICBjbGlwU3RhY2soKS5hcHBseSgpOworICAgIGNsaXBTdGFj
aygpLmFwcGx5KG1fY29udGV4dDNELmdldCgpKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmVuZENsaXAoKQogewogICAgIGNsaXBTdGFjaygpLnBvcCgpOwotICAgIGNsaXBTdGFjaygpLmFw
cGx5KCk7CisgICAgY2xpcFN0YWNrKCkuYXBwbHkobV9jb250ZXh0M0QuZ2V0KCkpOwogfQogCiBQ
YXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlVGV4dHVyZSgp
CiB7Ci0gICAgQml0bWFwVGV4dHVyZUdMKiB0ZXh0dXJlID0gbmV3IEJpdG1hcFRleHR1cmVHTCgp
OwotICAgIHRleHR1cmUtPnNldFRleHR1cmVNYXBwZXIodGhpcyk7CisgICAgQml0bWFwVGV4dHVy
ZUdMKiB0ZXh0dXJlID0gbmV3IEJpdG1hcFRleHR1cmVHTCh0aGlzKTsKICAgICByZXR1cm4gYWRv
cHRSZWYodGV4dHVyZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaAppbmRleCAwNzZlNjVmLi44YTcy
ZDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCkBAIC0yMyw4ICsyMyw4IEBACiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiT3Bl
bkdMU2hpbXMuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVHJhbnNm
b3JtYXRpb25NYXRyaXguaCIKIApAQCAtMzgsNyArMzgsNiBAQCBjbGFzcyBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTsKIGNsYXNzIFRleHR1cmVNYXBwZXJHTCA6IHB1YmxpYyBUZXh0dXJlTWFw
cGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyR0w+IGNy
ZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyR0wpOyB9Ci0gICAgVGV4
dHVyZU1hcHBlckdMKCk7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlckdMKCk7CiAKICAgICBl
bnVtIEZsYWcgewpAQCAtNTQsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRy
YXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUq
IG1hc2tUZXh0dXJlLCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpIE9WRVJSSURFOwogICAgIHZpcnR1
YWwgdm9pZCBkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncywgY29uc3QgSW50U2l6
ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0
bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIHVuc2lnbmVkIGV4cG9zZWRFZGdlcyA9IEFsbEVkZ2Vz
KTsKIAotI2lmIGRlZmluZWQoR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlKQorI2lmICFVU0UoVEVY
TUFQX09QRU5HTF9FU18yKQogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZVJlY3RhbmdsZUFS
Qih1aW50MzJfdCB0ZXh0dXJlLCBGbGFncywgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1v
ZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1Rl
eHR1cmUpOwogI2VuZGlmCiAKQEAgLTY2LDYgKzY1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
SW50U2l6ZSBtYXhUZXh0dXJlU2l6ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIEludFNpemUo
MjAwMCwgMjAwMCk7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3Jl
YXRlVGV4dHVyZSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0KiBncmFw
aGljc0NvbnRleHQoKSBPVkVSUklERSB7IHJldHVybiBtX2NvbnRleHQ7IH0KKyAgICBpbmxpbmUg
R3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZXh0M0QuZ2V0KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCkgT1ZFUlJJREUgeyBtX2NvbnRleHQgPSBjb250ZXh0OyB9
CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCkBAIC03NSw3ICs3NSw2IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldEVuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyhib29sIGVuYWJsZWQpIHsg
bV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcgPSBlbmFibGVkOyB9CiAKIHByaXZhdGU6
Ci0KICAgICBzdHJ1Y3QgQ2xpcFN0YXRlIHsKICAgICAgICAgSW50UmVjdCBzY2lzc29yQm94Owog
ICAgICAgICBpbnQgc3RlbmNpbEluZGV4OwpAQCAtODksNyArODgsNyBAQCBwcml2YXRlOgogICAg
IHB1YmxpYzoKICAgICAgICAgdm9pZCBwdXNoKCk7CiAgICAgICAgIHZvaWQgcG9wKCk7Ci0gICAg
ICAgIHZvaWQgYXBwbHkoKTsKKyAgICAgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQzRCop
OwogICAgICAgICBpbmxpbmUgQ2xpcFN0YXRlJiBjdXJyZW50KCkgeyByZXR1cm4gY2xpcFN0YXRl
OyB9CiAgICAgICAgIHZvaWQgaW5pdChjb25zdCBJbnRSZWN0Jik7CiAKQEAgLTEwOSwxNiArMTA4
LDE5IEBAIHByaXZhdGU6CiAgICAgICAgIEZsb2F0UXVhZCB0YXJnZXRSZWN0TWFwcGVkVG9Vbml0
U3F1YXJlOwogICAgIH07CiAKKyAgICBUZXh0dXJlTWFwcGVyR0woKTsKKwogICAgIGJvb2wgZHJh
d1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBG
bG9hdFJlY3QmIG9yaWdpbmFsVGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFz
a1RleHR1cmUsIHVuc2lnbmVkIGV4cG9zZWRFZGdlcyk7CiAgICAgdm9pZCBkcmF3VGV4dHVyZWRR
dWFkV2l0aFByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qLCB1aW50MzJfdCB0ZXh0
dXJlLCBGbGFncywgY29uc3QgRHJhd1F1YWQmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNr
VGV4dHVyZSk7Ci0gICAgdm9pZCBkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtKiwgR0xlbnVtIGRyYXdpbmdNb2RlLCBib29sIG5lZWRzQmxlbmRpbmcpOworICAgIHZvaWQg
ZHJhd1F1YWQoY29uc3QgRHJhd1F1YWQmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9k
ZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIEdDM0RlbnVtIGRyYXdp
bmdNb2RlLCBib29sIG5lZWRzQmxlbmRpbmcpOwogCiAgICAgYm9vbCBiZWdpblNjaXNzb3JDbGlw
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9p
ZCBiaW5kRGVmYXVsdFN1cmZhY2UoKTsKICAgICBDbGlwU3RhY2smIGNsaXBTdGFjaygpOwogICAg
IGlubGluZSBUZXh0dXJlTWFwcGVyR0xEYXRhJiBkYXRhKCkgeyByZXR1cm4gKm1fZGF0YTsgfQot
ICAgIFRleHR1cmVNYXBwZXJHTERhdGEqIG1fZGF0YTsKICAgICBHcmFwaGljc0NvbnRleHQqIG1f
Y29udGV4dDsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDNEOworICAg
IFRleHR1cmVNYXBwZXJHTERhdGEqIG1fZGF0YTsKICAgICBDbGlwU3RhY2sgbV9jbGlwU3RhY2s7
CiAgICAgYm9vbCBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZzsKIApAQCAtMTM1LDcg
KzEzNyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGluaXRpYWxpemVTdGVuY2lsKCk7CiAgICAgfkJp
dG1hcFRleHR1cmVHTCgpOwogICAgIHZpcnR1YWwgdWludDMyX3QgaWQoKSBjb25zdCB7IHJldHVy
biBtX2lkOyB9Ci0gICAgdWludDMyX3QgdGV4dHVyZVRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIEdM
X1RFWFRVUkVfMkQ7IH0KKyAgICB1aW50MzJfdCB0ZXh0dXJlVGFyZ2V0KCkgY29uc3QgeyByZXR1
cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ7IH0KICAgICBJbnRTaXplIHRleHR1cmVT
aXplKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlU2l6ZTsgfQogICAgIHZvaWQgc2V0VGV4dHVy
ZU1hcHBlcihUZXh0dXJlTWFwcGVyR0wqIHRleG1hcCkgeyBtX3RleHR1cmVNYXBwZXIgPSB0ZXht
YXA7IH0KICAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNv
bnN0IEludFBvaW50Jik7CkBAIC0xNDcsMjAgKzE0OSwyMiBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
cHJpdmF0ZToKLSAgICBHTHVpbnQgbV9pZDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1faWQ7CiAg
ICAgSW50U2l6ZSBtX3RleHR1cmVTaXplOwogICAgIEludFJlY3QgbV9kaXJ0eVJlY3Q7Ci0gICAg
R0x1aW50IG1fZmJvOwotICAgIEdMdWludCBtX3JibzsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1f
ZmJvOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9yYm87CiAgICAgYm9vbCBtX3Nob3VsZENsZWFy
OwotICAgIFRleHR1cmVNYXBwZXJHTCogbV90ZXh0dXJlTWFwcGVyOwogICAgIFRleHR1cmVNYXBw
ZXJHTDo6Q2xpcFN0YWNrIG1fY2xpcFN0YWNrOwotICAgIEJpdG1hcFRleHR1cmVHTCgpCisgICAg
VGV4dHVyZU1hcHBlckdMKiBtX3RleHR1cmVNYXBwZXI7CisKKyAgICBCaXRtYXBUZXh0dXJlR0wo
KTsKKyAgICBCaXRtYXBUZXh0dXJlR0woVGV4dHVyZU1hcHBlckdMKiB0ZXh0dXJlTWFwcGVyKQog
ICAgICAgICA6IG1faWQoMCkKICAgICAgICAgLCBtX2ZibygwKQogICAgICAgICAsIG1fcmJvKDAp
CiAgICAgICAgICwgbV9zaG91bGRDbGVhcih0cnVlKQotICAgICAgICAsIG1fdGV4dHVyZU1hcHBl
cigwKQorICAgICAgICAsIG1fdGV4dHVyZU1hcHBlcih0ZXh0dXJlTWFwcGVyKQogICAgIHsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCmluZGV4IDBm
YmRiZTkuLmZhOGFjMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
LmNwcApAQCAtMzAsMjUgKzMwLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmbmRl
ZiBURVhNQVBfT1BFTkdMX0VTXzIKLSNkZWZpbmUgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlMg
XAotICAgICIjZGVmaW5lIGxvd3BcbiNkZWZpbmUgaGlnaHBcbiIKLSNkZWZpbmUgT0VTMl9GUkFH
TUVOVF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT04KLSNlbHNlCi0jZGVmaW5lIE9FUzJfUFJFQ0lT
SU9OX0RFRklOSVRJT05TCi0jZGVmaW5lIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFVTFRfUFJF
Q0lTSU9OIFwKLSAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IFxuIgotI2VuZGlmCi0KLSNk
ZWZpbmUgU1RSSU5HSUZZX1ZBTChzcmMuLi4pICNzcmMKLSNkZWZpbmUgVkVSVEVYX1NIQURFUihz
cmMuLi4pIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TXAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU1RSSU5HSUZZX1ZBTChzcmMpCi0jZGVmaW5lIEZSQUdNRU5UX1NIQURFUihzcmMu
Li4pIE9FUzJfUFJFQ0lTSU9OX0RFRklOSVRJT05TXAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPRVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTlwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU1RSSU5HSUZZX1ZBTChzcmMpCisjZGVmaW5lIFNUUklO
R0lGWShzcmMuLi4pICNzcmMKIAogc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291
cmNlT3BhY2l0eUFuZE1hc2sgPQotICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICBTVFJJTkdJRlko
CisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1bmlmb3JtIHNhbXBs
ZXIyRCBzX3NvdXJjZTsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19tYXNrOwogICAgICAg
ICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwpAQCAtNjQsNyArNTAsOCBAQCBzdGF0aWMg
Y29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9CiAgICAgKTsK
IAogc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdE9wYWNpdHlBbmRN
YXNrID0KLSAgICBGUkFHTUVOVF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAorICAgICAgICBwcmVj
aXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfc291
cmNlOwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc19tYXNrOwogICAgICAgICB1bmlm
b3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwpAQCAtODAsNyArNjcsNyBAQCBzdGF0aWMgY29uc3Qg
Y2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0T3BhY2l0eUFuZE1hc2sgPQogICAgICk7CiAK
IHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9Ci0g
ICAgVkVSVEVYX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCiAgICAgICAgIHVuaWZvcm0gbWF0NCB1
X21hdHJpeDsKICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfZmxpcDsKICAgICAgICAgYXR0
cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CkBAIC05NSw3ICs4Miw4IEBAIHN0YXRpYyBjb25zdCBjaGFy
KiB2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9CiAgICAgKTsKIAogc3RhdGljIGNv
bnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlU2ltcGxlID0KLSAgICBGUkFHTUVOVF9TSEFE
RVIoCisgICAgU1RSSU5HSUZZKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAg
ICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zb3VyY2U7CiAgICAgICAgIHVuaWZvcm0gbG93cCBm
bG9hdCB1X29wYWNpdHk7CiAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENv
b3JkOwpAQCAtMTA3LDcgKzk1LDggQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVy
U291cmNlU2ltcGxlID0KICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFk
ZXJTb3VyY2VBbnRpYWxpYXNpbmdOb01hc2sgPQotICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICBT
VFJJTkdJRlkoCisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1bmlm
b3JtIHNhbXBsZXIyRCBzX3NvdXJjZTsKICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291
cmNlVGV4Q29vcmQ7CiAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CkBAIC0x
NDUsNyArMTM0LDggQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlQW50
aWFsaWFzaW5nTm9NYXNrID0KICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRT
aGFkZXJTb3VyY2VSZWN0U2ltcGxlID0KLSAgICBGUkFHTUVOVF9TSEFERVIoCisgICAgU1RSSU5H
SUZZKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgdW5pZm9ybSBz
YW1wbGVyMkRSZWN0IHNfc291cmNlOwogICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1X3RleHR1
cmVTaXplOwogICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwpAQCAtMTU4LDcg
KzE0OCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RTaW1w
bGUgPQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1w
bGUgPQotICAgIFZFUlRFWF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAogICAgICAgICB1bmlmb3Jt
IG1hdDQgdV9tYXRyaXg7CiAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X2ZsaXA7CiAgICAg
ICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwpAQCAtMTcxLDcgKzE2MSw3IEBAIHN0YXRpYyBj
b25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUgPQogICAgICk7CiAKIHN0YXRpYyBj
b25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2VTb2xpZENvbG9yID0KLSAgICBWRVJURVhfU0hB
REVSKAorICAgIFNUUklOR0lGWSgKICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OwogICAg
ICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKICAgICAgICAgdm9pZCBtYWluKHZvaWQpCkBA
IC0xODIsNyArMTcyLDggQEAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNv
bGlkQ29sb3IgPQogCiAKIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVNv
bGlkQ29sb3IgPQotICAgIFZFUlRFWF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAorICAgICAgICBw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgdW5pZm9ybSB2ZWM0IHVfY29sb3I7CiAg
ICAgICAgIHZvaWQgbWFpbih2b2lkKQogICAgICAgICB7CkBAIC0yMTIsMjIgKzIwMywyMiBAQCBQ
YXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6Z2V0U2hhZGVyUHJvZwogCiAgICAgc3dpdGNoIChzaGFkZXJUeXBlKSB7CiAgICAg
Y2FzZSBTaW1wbGU6Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVNpbXBsZTo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNpbXBsZTo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgUmVjdFNpbXBsZToKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtUmVjdFNpbXBsZTo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OmNyZWF0ZShtX2NvbnRleHQpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEFudGlhbGlhc2luZ05vTWFzazoKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpjcmVhdGUoKTsKKyAgICAg
ICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNr
OjpjcmVhdGUobV9jb250ZXh0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBPcGFjaXR5QW5k
TWFzazoKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0
eUFuZE1hc2s6OmNyZWF0ZSgpOworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgUmVjdE9wYWNpdHlBbmRNYXNrOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OmNyZWF0ZSgpOworICAgICAg
ICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6
OmNyZWF0ZShtX2NvbnRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNvbGlkQ29sb3I6
Ci0gICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3I6
OmNyZWF0ZSgpOworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1T
b2xpZENvbG9yOjpjcmVhdGUobV9jb250ZXh0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
bnZhbGlkOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIzNiw4ICsyMjcsOSBA
QCBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6Z2V0U2hhZGVyUHJvZwogICAgIHJldHVybiBwcm9ncmFtOwogfQogCi1UZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29uc3Qg
Y2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJj
ZSkKLSAgICA6IG1faWQoMCkKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgY2hhciog
dmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSkKKyAg
ICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9pZCgwKQogICAgICwgbV92ZXJ0ZXhBdHRy
aWIoMCkKICAgICAsIG1fdmVydGV4U2hhZGVyKDApCiAgICAgLCBtX2ZyYWdtZW50U2hhZGVyKDAp
CkBAIC0yNTYsNDYgKzI0OCw0NiBAQCB2b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpp
bml0aWFsaXplUHJvZ3JhbSgpCiB7CiAgICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNl
UHJvZ3JhbSA9IHZlcnRleFNoYWRlclNvdXJjZSgpOwogICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50
U2hhZGVyU291cmNlUHJvZ3JhbSA9IGZyYWdtZW50U2hhZGVyU291cmNlKCk7Ci0gICAgR0x1aW50
IHZlcnRleFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOwotICAgIEdM
dWludCBmcmFnbWVudFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURFUik7
Ci0gICAgZ2xTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAmdmVydGV4U2hhZGVyU291cmNl
UHJvZ3JhbSwgMCk7Ci0gICAgZ2xTaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIDEsICZmcmFn
bWVudFNoYWRlclNvdXJjZVByb2dyYW0sIDApOwotICAgIEdMdWludCBwcm9ncmFtSUQgPSBnbENy
ZWF0ZVByb2dyYW0oKTsKLSAgICBnbENvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBn
bENvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgIFBsYXRmb3JtM0RPYmplY3QgdmVy
dGV4U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZF
UlRFWF9TSEFERVIpOworICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIgPSBtX2Nv
bnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKTsK
KyAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNoYWRlclNv
dXJjZVByb2dyYW0pOworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVy
LCBmcmFnbWVudFNoYWRlclNvdXJjZVByb2dyYW0pOworICAgIFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbUlEID0gbV9jb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7CisgICAgbV9jb250ZXh0LT5jb21w
aWxlU2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyKGZy
YWdtZW50U2hhZGVyKTsKIAotICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVydGV4U2hh
ZGVyKTsKLSAgICBnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVyKTsKLSAg
ICBnbExpbmtQcm9ncmFtKHByb2dyYW1JRCk7CisgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIo
cHJvZ3JhbUlELCB2ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKHBy
b2dyYW1JRCwgZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0ocHJv
Z3JhbUlEKTsKIAotICAgIG1fdmVydGV4QXR0cmliID0gZ2xHZXRBdHRyaWJMb2NhdGlvbihwcm9n
cmFtSUQsICJhX3ZlcnRleCIpOworICAgIG1fdmVydGV4QXR0cmliID0gbV9jb250ZXh0LT5nZXRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3ZlcnRleCIpOwogCiAgICAgbV9pZCA9IHByb2dy
YW1JRDsKICAgICBtX3ZlcnRleFNoYWRlciA9IHZlcnRleFNoYWRlcjsKICAgICBtX2ZyYWdtZW50
U2hhZGVyID0gZnJhZ21lbnRTaGFkZXI7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbihHTGludCAmdmFyaWFibGUsIGNvbnN0IGNoYXIqIG5h
bWUpCit2b2lkIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpnZXRVbmlmb3JtTG9jYXRpb24o
R0MzRGludCAmdmFyaWFibGUsIGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgdmFyaWFibGUgPSBn
bEdldFVuaWZvcm1Mb2NhdGlvbihtX2lkLCBuYW1lKTsKKyAgICB2YXJpYWJsZSA9IG1fY29udGV4
dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1faWQsIG5hbWUpOwogICAgIEFTU0VSVCh2YXJpYWJsZSA+
PSAwKTsKIH0KIAogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06On5UZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbSgpCiB7Ci0gICAgR0x1aW50IHByb2dyYW1JRCA9IG1faWQ7CisgICAgUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtSUQgPSBtX2lkOwogICAgIGlmICghcHJvZ3JhbUlEKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBnbERldGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fdmVydGV4U2hhZGVy
KTsKLSAgICBnbERlbGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7Ci0gICAgZ2xEZXRhY2hTaGFk
ZXIocHJvZ3JhbUlELCBtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRlcihtX2Zy
YWdtZW50U2hhZGVyKTsKLSAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbUlEKTsKKyAgICBtX2Nv
bnRleHQtPmRldGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2Nv
bnRleHQtPmRlbGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5kZXRh
Y2hTaGFkZXIocHJvZ3JhbUlELCBtX2ZyYWdtZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRl
bGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dy
YW0ocHJvZ3JhbUlEKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGU6OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VT
aW1wbGUpCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1TaW1wbGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUs
IGZyYWdtZW50U2hhZGVyU291cmNlU2ltcGxlKQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7
CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fZmxpcExvY2F0aW9uLCAidV9mbGlwIik7CkBAIC0z
MDQsMTYgKzI5NiwxNiBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZTo6VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKQogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29w
YWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVNvbGlkQ29sb3I6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcigpCi0g
ICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2VTb2xpZENv
bG9yLCBmcmFnbWVudFNoYWRlclNvdXJjZVNvbGlkQ29sb3IpCitUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNvbGlkQ29sb3I6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcihH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJjZVNvbGlkQ29sb3IsIGZyYWdtZW50U2hhZGVy
U291cmNlU29saWRDb2xvcikKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVu
aWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKICAgICBnZXRVbmlm
b3JtTG9jYXRpb24obV9jb2xvckxvY2F0aW9uLCAidV9jb2xvciIpOwogfQogCi1UZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVj
dFNpbXBsZSgpCi0gICAgOiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJT
b3VyY2VTaW1wbGUsIGZyYWdtZW50U2hhZGVyU291cmNlUmVjdFNpbXBsZSkKK1RleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0
U2ltcGxlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDogVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNo
YWRlclNvdXJjZVJlY3RTaW1wbGUpCiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICBn
ZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7CkBAIC0zMjMs
OCArMzE1LDggQEAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKQogICAgIGdldFVuaWZvcm1Mb2NhdGlvbiht
X29wYWNpdHlMb2NhdGlvbiwgInVfb3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlB
bmRNYXNrKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNv
dXJjZU9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrKQor
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1PcGFjaXR5QW5kTWFzayhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAg
ICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJj
ZU9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrKQogewog
ICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4
TG9jYXRpb24sICJ1X21hdHJpeCIpOwpAQCAtMzM0LDggKzMyNiw4IEBAIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3Bh
Y2l0eUFuZE1hCiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9v
cGFjaXR5Iik7CiB9CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRN
YXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaygpCi0gICAg
OiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTb3VyY2VPcGFjaXR5QW5k
TWFzaywgZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0T3BhY2l0eUFuZE1hc2spCitUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAg
OiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VP
cGFjaXR5QW5kTWFzaywgZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0T3BhY2l0eUFuZE1hc2spCiB7
CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRy
aXhMb2NhdGlvbiwgInVfbWF0cml4Iik7CkBAIC0zNDUsOCArMzM3LDggQEAgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtUmVjdE9wYWMKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRpb24sICJ1
X29wYWNpdHkiKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdO
b01hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKCkKLSAg
ICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSwg
ZnJhZ21lbnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNpbmdOb01hc2spCitUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1B
bnRpYWxpYXNpbmdOb01hc2soR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUs
IGZyYWdtZW50U2hhZGVyU291cmNlQW50aWFsaWFzaW5nTm9NYXNrKQogewogICAgIGluaXRpYWxp
emVQcm9ncmFtKCk7CiAgICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1
X21hdHJpeCIpOwpAQCAtMzU2LDkgKzM0OCw5IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
QW50aWFsaWFzaW5nTm9NYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhCiAg
ICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fZmxpcExvY2F0aW9uLCAidV9mbGlwIik7CiB9CiAKLVRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpCitU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKIHsKLSAg
ICBBU1NFUlQoaW5pdGlhbGl6ZU9wZW5HTFNoaW1zKCkpOwogfQogCiBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6flRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkKQEAgLTM3MywxOCArMzY1
LDE5IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIoKQogCiBTdGFuZGFyZEZpbHRlclByb2dyYW06On5TdGFuZGFyZEZpbHRlclByb2dyYW0o
KQogewotICAgIGdsRGV0YWNoU2hhZGVyKG1faWQsIG1fdmVydGV4U2hhZGVyKTsKLSAgICBnbERl
bGV0ZVNoYWRlcihtX3ZlcnRleFNoYWRlcik7Ci0gICAgZ2xEZXRhY2hTaGFkZXIobV9pZCwgbV9m
cmFnbWVudFNoYWRlcik7Ci0gICAgZ2xEZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7Ci0g
ICAgZ2xEZWxldGVQcm9ncmFtKG1faWQpOworICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG1f
aWQsIG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihtX3ZlcnRl
eFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIobV9pZCwgbV9mcmFnbWVudFNo
YWRlcik7CisgICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIobV9mcmFnbWVudFNoYWRlcik7Cisg
ICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1faWQpOwogfQogCi1TdGFuZGFyZEZpbHRlclBy
b2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5
cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKLSAgICA6IG1faWQoMCkKK1N0YW5kYXJkRmlsdGVyUHJv
Z3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBG
aWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKKyAgICA6
IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9pZCgwKQogewogICAgIGNvbnN0IGNoYXIqIHZl
cnRleFNoYWRlclNvdXJjZSA9Ci0gICAgICAgICAgICBWRVJURVhfU0hBREVSKAorICAgICAgICAg
ICAgU1RSSU5HSUZZKAogICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4Owog
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdGV4Q29vcmQ7CiAgICAgICAgICAgICAg
ICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7CkBAIC0zOTYsOCArMzg5LDcgQEAgU3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9u
OjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgICAgICk7CiAKICNkZWZpbmUgU1RBTkRBUkRf
RklMVEVSKHguLi4pIFwKLSAgICAgICAgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlNcCi0gICAg
ICAgIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFVTFRfUFJFQ0lTSU9OXAorICAgICAgICAicHJl
Y2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iXAogICAgICAgICAidmFyeWluZyBoaWdocCB2ZWMyIHZf
dGV4Q29vcmQ7XG4iXAogICAgICAgICAidW5pZm9ybSBoaWdocCBmbG9hdCB1X2Ftb3VudDtcbiJc
CiAgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG4iXApAQCAtNDkwLDcgKzQ4
Miw4IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRl
ck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgICk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgotICAgICAgICBmcmFnbWVudFNoYWRl
clNvdXJjZSA9IEZSQUdNRU5UX1NIQURFUigKKyAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2Ug
PSBTVFJJTkdJRlkoCisgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAg
ICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOwogICAgICAgICAgICAgdW5pZm9y
bSBsb3dwIHZlYzIgdV9ibHVyUmFkaXVzOwogICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQg
dV90ZXh0dXJlOwpAQCAtNTIzLDcgKzUxNiw4IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAg
ICAgICAgIHN3aXRjaCAocGFzcykgewogICAgICAgICBjYXNlIDA6IHsKICAgICAgICAgICAgIC8v
IEZpcnN0IHBhc3M6IGhvcml6b250YWwgYWxwaGEgYmx1ci4KLSAgICAgICAgICAgIGZyYWdtZW50
U2hhZGVyU291cmNlID0gRlJBR01FTlRfU0hBREVSKAorICAgICAgICAgICAgZnJhZ21lbnRTaGFk
ZXJTb3VyY2UgPSBTVFJJTkdJRlkoCisgICAgICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAg
ZmxvYXQ7CiAgICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7CiAg
ICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfc2hhZG93Qmx1clJhZGl1czsKICAg
ICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1X3NoYWRvd09mZnNldDsKQEAgLTU1Niw3
ICs1NTAsOCBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShG
aWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICAgICAgfQogICAgICAg
ICBjYXNlIDE6IHsKICAgICAgICAgICAgIC8vIFNlY29uZCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBi
bHVyIGFuZCBjb21wb3NpdGUgd2l0aCBvcmlnaW4uCi0gICAgICAgICAgICBmcmFnbWVudFNoYWRl
clNvdXJjZSA9IEZSQUdNRU5UX1NIQURFUigKKyAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyU291
cmNlID0gU1RSSU5HSUZZKAorICAgICAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0
OwogICAgICAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOwogICAgICAg
ICAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X3NoYWRvd0JsdXJSYWRpdXM7CiAgICAgICAg
ICAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzQgdV9zaGFkb3dDb2xvcjsKQEAgLTYwMiwyNiArNTk3
LDI1IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRl
ck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAKICAgICBpZiAoIWZyYWdtZW50U2hhZGVy
U291cmNlKQogICAgICAgICByZXR1cm47Ci0gICAgR0x1aW50IHZlcnRleFNoYWRlciA9IGdsQ3Jl
YXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOwotICAgIEdMdWludCBmcmFnbWVudFNoYWRlciA9
IGdsQ3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURFUik7Ci0gICAgZ2xTaGFkZXJTb3VyY2Uo
dmVydGV4U2hhZGVyLCAxLCAmdmVydGV4U2hhZGVyU291cmNlLCAwKTsKLSAgICBnbFNoYWRlclNv
dXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdtZW50U2hhZGVyU291cmNlLCAwKTsKLSAgICBH
THVpbnQgcHJvZ3JhbUlEID0gZ2xDcmVhdGVQcm9ncmFtKCk7Ci0gICAgZ2xDb21waWxlU2hhZGVy
KHZlcnRleFNoYWRlcik7Ci0gICAgZ2xDb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVy
KEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0
IGZyYWdtZW50U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQUdNRU5UX1NIQURFUik7CisgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UodmVydGV4
U2hhZGVyLCB2ZXJ0ZXhTaGFkZXJTb3VyY2UpOworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNl
KGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlclNvdXJjZSk7CisgICAgUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtSUQgPSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKKyAgICBtX2NvbnRl
eHQtPmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmNvbXBpbGVT
aGFkZXIoZnJhZ21lbnRTaGFkZXIpOwogI2lmICFMT0dfRElTQUJMRUQKLSAgICBHTGNoYXIgbG9n
WzEwMF07Ci0gICAgR0xpbnQgbGVuOwotICAgIGdsR2V0U2hhZGVySW5mb0xvZyhmcmFnbWVudFNo
YWRlciwgMTAwLCAmbGVuLCBsb2cpOworICAgIFN0cmluZyBsb2c7CisgICAgbV9jb250ZXh0LT5n
ZXRTaGFkZXJJbmZvTG9nKGZyYWdtZW50U2hhZGVyKTsKICAgICBXVEZMb2coJkxvZ0NvbXBvc2l0
aW5nLCAiJXNcbiIsIGxvZyk7CiAjZW5kaWYKLSAgICBnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQs
IHZlcnRleFNoYWRlcik7Ci0gICAgZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNo
YWRlcik7Ci0gICAgZ2xMaW5rUHJvZ3JhbShwcm9ncmFtSUQpOworICAgIG1fY29udGV4dC0+YXR0
YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmF0dGFj
aFNoYWRlcihwcm9ncmFtSUQsIGZyYWdtZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmxpbmtQ
cm9ncmFtKHByb2dyYW1JRCk7CiAKLSAgICBtX3ZlcnRleEF0dHJpYiA9IGdsR2V0QXR0cmliTG9j
YXRpb24ocHJvZ3JhbUlELCAiYV92ZXJ0ZXgiKTsKLSAgICBtX3RleENvb3JkQXR0cmliID0gZ2xH
ZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3RleENvb3JkIik7Ci0gICAgbV90ZXh0dXJl
VW5pZm9ybUxvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV90ZXh0
dXJlIik7CisgICAgbV92ZXJ0ZXhBdHRyaWIgPSBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9u
KHByb2dyYW1JRCwgImFfdmVydGV4Iik7CisgICAgbV90ZXhDb29yZEF0dHJpYiA9IG1fY29udGV4
dC0+Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbUlELCAiYV90ZXhDb29yZCIpOworICAgIG1fdGV4
dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dy
YW1JRCwgInVfdGV4dHVyZSIpOwogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpHUkFZU0NBTEU6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgpA
QCAtNjMxLDIxICs2MjUsMjEgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRl
clByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09O
VFJBU1Q6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIG1fdW5p
Zm9ybUxvY2F0aW9ucy5hbW91bnQgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1
X2Ftb3VudCIpOworICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuYW1vdW50ID0gbV9jb250ZXh0
LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9hbW91bnQiKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6Ci0gICAgICAgIG1fdW5pZm9ybUxv
Y2F0aW9ucy5ibHVyLnJhZGl1cyA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVf
Ymx1clJhZGl1cyIpOwotICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktl
cm5lbCA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwgInVfZ2F1c3NpYW5LZXJuZWwi
KTsKKyAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmJsdXIucmFkaXVzID0gbV9jb250ZXh0LT5n
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9ibHVyUmFkaXVzIik7CisgICAgICAgIG1f
dW5pZm9ybUxvY2F0aW9ucy5ibHVyLmdhdXNzaWFuS2VybmVsID0gbV9jb250ZXh0LT5nZXRVbmlm
b3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9nYXVzc2lhbktlcm5lbCIpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6Ci0gICAgICAgIG1fdW5p
Zm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1cyA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW1JRCwgInVfc2hhZG93Qmx1clJhZGl1cyIpOwotICAgICAgICBtX3VuaWZvcm1Mb2NhdGlv
bnMuc2hhZG93LmdhdXNzaWFuS2VybmVsID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlE
LCAidV9nYXVzc2lhbktlcm5lbCIpOworICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93
LmJsdXJSYWRpdXMgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1
X3NoYWRvd0JsdXJSYWRpdXMiKTsKKyAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5n
YXVzc2lhbktlcm5lbCA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1JRCwg
InVfZ2F1c3NpYW5LZXJuZWwiKTsKICAgICAgICAgaWYgKCFwYXNzKQotICAgICAgICAgICAgbV91
bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5vZmZzZXQgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9n
cmFtSUQsICJ1X3NoYWRvd09mZnNldCIpOworICAgICAgICAgICAgbV91bmlmb3JtTG9jYXRpb25z
LnNoYWRvdy5vZmZzZXQgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQs
ICJ1X3NoYWRvd09mZnNldCIpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlIG9u
bHkgbmVlZCB0aGUgY29sb3IgYW5kIHRoZSBjb250ZW50IHRleHR1cmUgaW4gdGhlIHNlY29uZCBw
YXNzLCB0aGUgZmlyc3QgcGFzcyBpcyBvbmx5IGEgaG9yaXpvbnRhbCBhbHBoYSBibHVyLgotICAg
ICAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb2xvciA9IGdsR2V0VW5pZm9ybUxv
Y2F0aW9uKHByb2dyYW1JRCwgInVfc2hhZG93Q29sb3IiKTsKLSAgICAgICAgICAgIG1fdW5pZm9y
bUxvY2F0aW9ucy5zaGFkb3cuY29udGVudFRleHR1cmUgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtSUQsICJ1X2NvbnRlbnRUZXh0dXJlIik7CisgICAgICAgICAgICBtX3VuaWZvcm1Mb2Nh
dGlvbnMuc2hhZG93LmNvbG9yID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3Jh
bUlELCAidV9zaGFkb3dDb2xvciIpOworICAgICAgICAgICAgbV91bmlmb3JtTG9jYXRpb25zLnNo
YWRvdy5jb250ZW50VGV4dHVyZSA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dy
YW1JRCwgInVfY29udGVudFRleHR1cmUiKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAg
ICBkZWZhdWx0OgpAQCAtNjU2LDkgKzY1MCw5IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAg
ICAgbV9mcmFnbWVudFNoYWRlciA9IGZyYWdtZW50U2hhZGVyOwogfQogCi1QYXNzUmVmUHRyPFN0
YW5kYXJkRmlsdGVyUHJvZ3JhbT4gU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpjcmVhdGUoRmlsdGVy
T3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUsIHVuc2lnbmVkIHBhc3MpCitQYXNzUmVmUHRy
PFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpjcmVhdGUoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0
eXBlLCB1bnNpZ25lZCBwYXNzKQogewotICAgIFJlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+
IHByb2dyYW0gPSBhZG9wdFJlZihuZXcgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKHR5cGUsIHBhc3Mp
KTsKKyAgICBSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0gYWRvcHRSZWYo
bmV3IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbShjb250ZXh0LCB0eXBlLCBwYXNzKSk7CiAgICAgaWYg
KCFwcm9ncmFtLT5tX2lkKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtNjk0LDIxICs2ODgsMjEg
QEAgc3RhdGljIGZsb2F0KiBnYXVzc2lhbktlcm5lbCgpCiAgICAgcmV0dXJuIGtlcm5lbDsKIH0K
IAotdm9pZCBTdGFuZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0
aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHBhc3MsIGNvbnN0IEludFNpemUmIHNpemUsIEdMdWlu
dCBjb250ZW50VGV4dHVyZSkKK3ZvaWQgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpwcmVwYXJlKGNv
bnN0IEZpbHRlck9wZXJhdGlvbiYgb3BlcmF0aW9uLCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRT
aXplJiBzaXplLCBHQzNEdWludCBjb250ZW50VGV4dHVyZSkKIHsKLSAgICBnbFVzZVByb2dyYW0o
bV9pZCk7CisgICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKG1faWQpOwogICAgIHN3aXRjaCAob3Bl
cmF0aW9uLmdldE9wZXJhdGlvblR5cGUoKSkgewogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpH
UkFZU0NBTEU6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgogICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpTQVRVUkFURToKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JP
VEFURToKLSAgICAgICAgZ2xVbmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCwgc3Rh
dGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlv
bikuYW1vdW50KCkpOworICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihtX3VuaWZvcm1Mb2Nh
dGlvbnMuYW1vdW50LCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdI
VE5FU1M6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgogICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpPUEFDSVRZOgotICAgICAgICBnbFVuaWZvcm0xZihtX3VuaWZvcm1Mb2Nh
dGlvbnMuYW1vdW50LCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7CisgICAgICAgIG1fY29udGV4dC0+
dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0YXRpY19jYXN0PGNvbnN0IEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKICAg
ICAgICAgY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ciA9IHN0YXRpY19jYXN0PGNvbnN0
IEJsdXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pOwpAQCAtNzIwLDggKzcxNCw4IEBAIHZv
aWQgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpwcmVwYXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiYg
b3BlcmF0aW9uLCB1bnNpZ25lZCBwCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJhZGl1cy5z
ZXRXaWR0aChmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXIuc3RkRGV2aWF0aW9uKCksIHNpemUud2lk
dGgoKSkgLyBzaXplLndpZHRoKCkpOwogCi0gICAgICAgIGdsVW5pZm9ybTJmKG1fdW5pZm9ybUxv
Y2F0aW9ucy5ibHVyLnJhZGl1cywgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSk7Ci0g
ICAgICAgIGdsVW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktlcm5l
bCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOworICAgICAg
ICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5yYWRpdXMsIHJh
ZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpOworICAgICAgICBtX2NvbnRleHQtPnVuaWZv
cm0xZnYobV91bmlmb3JtTG9jYXRpb25zLmJsdXIuZ2F1c3NpYW5LZXJuZWwsIEdBVVNTSUFOX0tF
Uk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogewpAQCAtNzI5LDIwICs3
MjMsMjAgQEAgdm9pZCBTdGFuZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVy
T3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHAKICAgICAgICAgc3dpdGNoIChwYXNzKSB7
CiAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgIC8vIEZpcnN0IHBhc3M6IHZlcnRpY2FsIGFs
cGhhIGJsdXIuCi0gICAgICAgICAgICBnbFVuaWZvcm0yZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hh
ZG93Lm9mZnNldCwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueCgpKSAvIGZsb2F0KHNpemUud2lk
dGgoKSksIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigpLnkoKSkgLyBmbG9hdChzaXplLmhlaWdodCgp
KSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJs
dXJSYWRpdXMsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUud2lkdGgoKSkpOwot
ICAgICAgICAgICAgZ2xVbmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3Np
YW5LZXJuZWwsIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsK
KyAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFk
b3cub2Zmc2V0LCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQoc2l6ZS53aWR0
aCgpKSwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkp
KTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5z
aGFkb3cuYmx1clJhZGl1cywgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS53aWR0
aCgpKSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobV91bmlmb3JtTG9jYXRp
b25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdh
dXNzaWFuS2VybmVsKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgMToKICAg
ICAgICAgICAgIC8vIFNlY29uZCBwYXNzOiB3ZSBuZWVkIHRoZSBzaGFkb3cgY29sb3IgYW5kIHRo
ZSBjb250ZW50IHRleHR1cmUgZm9yIGNvbXBvc2l0aW5nLgotICAgICAgICAgICAgZ2xVbmlmb3Jt
MWYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzLCBzaGFkb3cuc3RkRGV2aWF0
aW9uKCkgLyBmbG9hdChzaXplLmhlaWdodCgpKSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm0xZnYo
bV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVM
X0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOwotICAgICAgICAgICAgZ2xBY3RpdmVUZXh0
dXJlKEdMX1RFWFRVUkUxKTsKLSAgICAgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgY29udGVudFRleHR1cmUpOwotICAgICAgICAgICAgZ2xVbmlmb3JtMWkobV91bmlmb3JtTG9j
YXRpb25zLnNoYWRvdy5jb250ZW50VGV4dHVyZSwgMSk7CisgICAgICAgICAgICBtX2NvbnRleHQt
PnVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMsIHNoYWRvdy5z
dGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIG1fY29u
dGV4dC0+dW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVs
LCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7CisgICAgICAg
ICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUx
KTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIGNvbnRlbnRUZXh0dXJlKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dW5p
Zm9ybTFpKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29udGVudFRleHR1cmUsIDEpOwogICAg
ICAgICAgICAgZmxvYXQgciwgZywgYiwgYTsKICAgICAgICAgICAgIHNoYWRvdy5jb2xvcigpLmdl
dFJHQkEociwgZywgYiwgYSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm00ZihtX3VuaWZvcm1Mb2Nh
dGlvbnMuc2hhZG93LmNvbG9yLCByLCBnLCBiLCBhKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+
dW5pZm9ybTRmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuY29sb3IsIHIsIGcsIGIsIGEpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC03NTksNyAr
NzUzLDcgQEAgUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJGb3JGaWx0ZXIKICAgICBpbnQga2V5ID0gaW50KHR5cGUp
IHwgKHBhc3MgPDwgMTYpOwogICAgIEZpbHRlck1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2Zp
bHRlck1hcC5maW5kKGtleSk7CiAgICAgaWYgKGl0ZXJhdG9yID09IG1fZmlsdGVyTWFwLmVuZCgp
KSB7Ci0gICAgICAgIHByb2dyYW0gPSBTdGFuZGFyZEZpbHRlclByb2dyYW06OmNyZWF0ZSh0eXBl
LCBwYXNzKTsKKyAgICAgICAgcHJvZ3JhbSA9IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6Y3JlYXRl
KG1fY29udGV4dCwgdHlwZSwgcGFzcyk7CiAgICAgICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAg
ICAgIHJldHVybiAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCmlu
ZGV4IDc4NTQ5OGUuLjFmZmI3MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlci5oCkBAIC0yNCw5ICsyNCw5IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRl
ICJPcGVuR0xTaGltcy5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyR0wuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTQ0
LDM5ICs0NCw0MCBAQCBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjsKIAogY2xhc3Mg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbT4gewogcHVibGljOgotICAgIEdMdWludCBpZCgpIHsgcmV0dXJuIG1f
aWQ7IH0KLSAgICBHTHVpbnQgdmVydGV4QXR0cmliKCkgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWI7
IH0KKyAgICBQbGF0Zm9ybTNET2JqZWN0IGlkKCkgeyByZXR1cm4gbV9pZDsgfQorICAgIEdDM0R1
aW50IHZlcnRleEF0dHJpYigpIHsgcmV0dXJuIG1fdmVydGV4QXR0cmliOyB9CiAKLSAgICBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbShjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNv
bnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKTsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJj
ZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwogICAgIHZpcnR1YWwgflRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShmbG9h
dCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKikgeyB9Ci0gICAgR0xpbnQgbWF0cml4TG9j
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hdHJpeExvY2F0aW9uOyB9Ci0gICAgR0xpbnQgZmxp
cExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mbGlwTG9jYXRpb247IH0KLSAgICBHTGludCB0
ZXh0dXJlU2l6ZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlU2l6ZUxvY2F0aW9u
OyB9Ci0gICAgR0xpbnQgc291cmNlVGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9z
b3VyY2VUZXh0dXJlTG9jYXRpb247IH0KLSAgICBHTGludCBtYXNrVGV4dHVyZUxvY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXNrVGV4dHVyZUxvY2F0aW9uOyB9Ci0gICAgR0xpbnQgb3BhY2l0
eUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5TG9jYXRpb247IH0KKyAgICBHQzNE
aW50IG1hdHJpeExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhMb2NhdGlvbjsgfQor
ICAgIEdDM0RpbnQgZmxpcExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mbGlwTG9jYXRpb247
IH0KKyAgICBHQzNEaW50IHRleHR1cmVTaXplTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Rl
eHR1cmVTaXplTG9jYXRpb247IH0KKyAgICBHQzNEaW50IHNvdXJjZVRleHR1cmVMb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOyB9CisgICAgR0MzRGludCBt
YXNrVGV4dHVyZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGV4dHVyZUxvY2F0aW9u
OyB9CisgICAgR0MzRGludCBvcGFjaXR5TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX29wYWNp
dHlMb2NhdGlvbjsgfQogCi0gICAgc3RhdGljIGJvb2wgaXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihH
TGludCBsb2NhdGlvbikgeyByZXR1cm4gbG9jYXRpb24gPj0gMDsgfQorICAgIHN0YXRpYyBib29s
IGlzVmFsaWRVbmlmb3JtTG9jYXRpb24oR0MzRGludCBsb2NhdGlvbikgeyByZXR1cm4gbG9jYXRp
b24gPj0gMDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBnZXRVbmlmb3JtTG9jYXRpb24oR0xp
bnQmIHZhciwgY29uc3QgY2hhciogbmFtZSk7CisgICAgdm9pZCBnZXRVbmlmb3JtTG9jYXRpb24o
R0MzRGludCYgdmFyLCBjb25zdCBjaGFyKiBuYW1lKTsKICAgICB2b2lkIGluaXRpYWxpemVQcm9n
cmFtKCk7CiAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKSB7IH0KICAgICBjb25zdCBjaGFy
KiB2ZXJ0ZXhTaGFkZXJTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleFNoYWRlclNvdXJj
ZS5kYXRhKCk7IH0KICAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZnJhZ21lbnRTaGFkZXJTb3VyY2UuZGF0YSgpOyB9CiAKLSAgICBHTHVpbnQg
bV9pZDsKLSAgICBHTHVpbnQgbV92ZXJ0ZXhBdHRyaWI7Ci0gICAgR0x1aW50IG1fdmVydGV4U2hh
ZGVyOwotICAgIEdMdWludCBtX2ZyYWdtZW50U2hhZGVyOwotICAgIEdMaW50IG1fbWF0cml4TG9j
YXRpb247Ci0gICAgR0xpbnQgbV9mbGlwTG9jYXRpb247Ci0gICAgR0xpbnQgbV90ZXh0dXJlU2l6
ZUxvY2F0aW9uOwotICAgIEdMaW50IG1fc291cmNlVGV4dHVyZUxvY2F0aW9uOwotICAgIEdMaW50
IG1fb3BhY2l0eUxvY2F0aW9uOwotICAgIEdMaW50IG1fbWFza1RleHR1cmVMb2NhdGlvbjsKKyAg
ICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9p
ZDsKKyAgICBHQzNEdWludCBtX3ZlcnRleEF0dHJpYjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1f
dmVydGV4U2hhZGVyOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mcmFnbWVudFNoYWRlcjsKKyAg
ICBHQzNEaW50IG1fbWF0cml4TG9jYXRpb247CisgICAgR0MzRGludCBtX2ZsaXBMb2NhdGlvbjsK
KyAgICBHQzNEaW50IG1fdGV4dHVyZVNpemVMb2NhdGlvbjsKKyAgICBHQzNEaW50IG1fc291cmNl
VGV4dHVyZUxvY2F0aW9uOworICAgIEdDM0RpbnQgbV9vcGFjaXR5TG9jYXRpb247CisgICAgR0Mz
RGludCBtX21hc2tUZXh0dXJlTG9jYXRpb247CiAKIHByaXZhdGU6CiAgICAgQ1N0cmluZyBtX3Zl
cnRleFNoYWRlclNvdXJjZTsKQEAgLTg3LDMzICs4OCwzNiBAQCBwcml2YXRlOgogY2xhc3MgU3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtIDogcHVibGljIFJlZkNvdW50ZWQ8U3RhbmRhcmRGaWx0ZXJQcm9n
cmFtPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiwgdW5zaWduZWQg
cGFzcywgY29uc3QgSW50U2l6ZSYsIEdMdWludCBjb250ZW50VGV4dHVyZSk7Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBjcmVhdGUoRmlsdGVyT3BlcmF0aW9u
OjpPcGVyYXRpb25UeXBlLCB1bnNpZ25lZCBwYXNzKTsKLSAgICBHTHVpbnQgdmVydGV4QXR0cmli
KCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWI7IH0KLSAgICBHTHVpbnQgdGV4Q29vcmRB
dHRyaWIoKSBjb25zdCB7IHJldHVybiBtX3RleENvb3JkQXR0cmliOyB9Ci0gICAgR0x1aW50IHRl
eHR1cmVVbmlmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOyB9
CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiwgdW5zaWdu
ZWQgcGFzcywgY29uc3QgSW50U2l6ZSYsIEdDM0R1aW50IGNvbnRlbnRUZXh0dXJlKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IGNyZWF0ZShHcmFwaGljc0Nv
bnRleHQzRCosIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgcGFzcyk7
CisgICAgR0MzRHVpbnQgdmVydGV4QXR0cmliKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhBdHRy
aWI7IH0KKyAgICBHQzNEdWludCB0ZXhDb29yZEF0dHJpYigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4
Q29vcmRBdHRyaWI7IH0KKyAgICBHQzNEdWludCB0ZXh0dXJlVW5pZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbjsgfQorcHJvdGVjdGVkOgorICAgIEdyYXBoaWNz
Q29udGV4dDNEKiBtX2NvbnRleHQ7CiBwcml2YXRlOgotICAgIFN0YW5kYXJkRmlsdGVyUHJvZ3Jh
bShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIHBhc3MpOwotICAgIEdM
dWludCBtX2lkOwotICAgIEdMdWludCBtX3ZlcnRleFNoYWRlcjsKLSAgICBHTHVpbnQgbV9mcmFn
bWVudFNoYWRlcjsKLSAgICBHTHVpbnQgbV92ZXJ0ZXhBdHRyaWI7Ci0gICAgR0x1aW50IG1fdGV4
Q29vcmRBdHRyaWI7Ci0gICAgR0x1aW50IG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbjsKKyAgICBT
dGFuZGFyZEZpbHRlclByb2dyYW0oKTsKKyAgICBTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhp
Y3NDb250ZXh0M0QqLCBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIHBh
c3MpOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9pZDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1f
dmVydGV4U2hhZGVyOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mcmFnbWVudFNoYWRlcjsKKyAg
ICBHQzNEdWludCBtX3ZlcnRleEF0dHJpYjsKKyAgICBHQzNEdWludCBtX3RleENvb3JkQXR0cmli
OworICAgIEdDM0R1aW50IG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbjsKICAgICB1bmlvbiB7Ci0g
ICAgICAgIEdMdWludCBhbW91bnQ7CisgICAgICAgIEdDM0R1aW50IGFtb3VudDsKIAogICAgICAg
ICBzdHJ1Y3QgewotICAgICAgICAgICAgR0x1aW50IHJhZGl1czsKLSAgICAgICAgICAgIEdMdWlu
dCBnYXVzc2lhbktlcm5lbDsKKyAgICAgICAgICAgIEdDM0R1aW50IHJhZGl1czsKKyAgICAgICAg
ICAgIEdDM0R1aW50IGdhdXNzaWFuS2VybmVsOwogICAgICAgICB9IGJsdXI7CiAKICAgICAgICAg
c3RydWN0IHsKLSAgICAgICAgICAgIEdMdWludCBibHVyUmFkaXVzOwotICAgICAgICAgICAgR0x1
aW50IGNvbG9yOwotICAgICAgICAgICAgR0x1aW50IG9mZnNldDsKLSAgICAgICAgICAgIEdMdWlu
dCBjb250ZW50VGV4dHVyZTsKLSAgICAgICAgICAgIEdMdWludCBnYXVzc2lhbktlcm5lbDsKKyAg
ICAgICAgICAgIEdDM0R1aW50IGJsdXJSYWRpdXM7CisgICAgICAgICAgICBHQzNEdWludCBjb2xv
cjsKKyAgICAgICAgICAgIEdDM0R1aW50IG9mZnNldDsKKyAgICAgICAgICAgIEdDM0R1aW50IGNv
bnRlbnRUZXh0dXJlOworICAgICAgICAgICAgR0MzRHVpbnQgZ2F1c3NpYW5LZXJuZWw7CiAgICAg
ICAgIH0gc2hhZG93OwogICAgIH0gbV91bmlmb3JtTG9jYXRpb25zOwogfTsKQEAgLTEyMSw3NyAr
MTI1LDg5IEBAIHByaXZhdGU6CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2lt
cGxlIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZT4gY3JlYXRl
KCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBs
ZT4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBs
ZShjb250ZXh0KSk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1TaW1wbGUoR3JhcGhpY3NDb250ZXh0M0QqKTsKK3ByaXZhdGU6CiAgICAgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKTsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdFNpbXBsZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1SZWN0U2ltcGxlPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZT4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlKGNvbnRleHQpKTsKICAgICB9CiAK
K3Byb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoR3Jh
cGhpY3NDb250ZXh0M0QqKTsKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1SZWN0U2ltcGxlKCk7CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9w
YWNpdHlBbmRNYXNrIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNp
dHlBbmRNYXNrPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKGNvbnRleHQpKTsKICAg
ICB9CiAKK3Byb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlB
bmRNYXNrKEdyYXBoaWNzQ29udGV4dDNEKik7CiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soKTsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaz4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaz4gY3Jl
YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzaygp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVJlY3RPcGFjaXR5QW5kTWFzayhjb250ZXh0KSk7CiAgICAgfQogCitwcm90ZWN0ZWQ6CisgICAg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2soR3JhcGhpY3NDb250
ZXh0M0QqKTsKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3Bh
Y2l0eUFuZE1hc2soKTsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29s
aWRDb2xvciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9y
PiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU29saWRDb2xvcj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNv
bGlkQ29sb3IoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1Tb2xpZENvbG9yKGNvbnRleHQpKTsKICAgICB9CiAKLSAgICBHTGludCBjb2xv
ckxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvckxvY2F0aW9uOyB9CisgICAgR0MzRGlu
dCBjb2xvckxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvckxvY2F0aW9uOyB9CiAKK3By
b3RlY3RlZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoR3JhcGhp
Y3NDb250ZXh0M0QqKTsKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1T
b2xpZENvbG9yKCk7Ci0gICAgR0xpbnQgbV9jb2xvckxvY2F0aW9uOworICAgIEdDM0RpbnQgbV9j
b2xvckxvY2F0aW9uOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRp
YWxpYXNpbmdOb01hc2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50
aWFsaWFzaW5nTm9NYXNrPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrPiBjcmVhdGUoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKCkpOworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9N
YXNrKGNvbnRleHQpKTsKICAgICB9CiAKLSAgICBHTGludCBleHBhbmRlZFF1YWRWZXJ0aWNlc0lu
VGV4dHVyZUNvb3JkaW5hdGVzTG9jYXRpb24oKSB7IHJldHVybiBtX2V4cGFuZGVkUXVhZFZlcnRp
Y2VzSW5UZXh0dXJlQ29yZGluYXRlc0xvY2F0aW9uOyB9Ci0gICAgR0xpbnQgZXhwYW5kZWRRdWFk
RWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSB7IHJldHVybiBtX2V4cGFuZGVkUXVhZEVkZ2Vz
SW5TY3JlZW5TcGFjZUxvY2F0aW9uOyB9CisgICAgR0MzRGludCBleHBhbmRlZFF1YWRWZXJ0aWNl
c0luVGV4dHVyZUNvb3JkaW5hdGVzTG9jYXRpb24oKSB7IHJldHVybiBtX2V4cGFuZGVkUXVhZFZl
cnRpY2VzSW5UZXh0dXJlQ29yZGluYXRlc0xvY2F0aW9uOyB9CisgICAgR0MzRGludCBleHBhbmRl
ZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbigpIHsgcmV0dXJuIG1fZXhwYW5kZWRRdWFk
RWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb247IH0KIAorcHJvdGVjdGVkOgorICAgIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrKEdyYXBoaWNzQ29udGV4dDNEKik7
CiBwcml2YXRlOgogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9N
YXNrKCk7CiAKLSAgICBHTGludCBtX2V4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29yZGlu
YXRlc0xvY2F0aW9uOwotICAgIEdMaW50IG1fZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNl
TG9jYXRpb247CisgICAgR0MzRGludCBtX2V4cGFuZGVkUXVhZFZlcnRpY2VzSW5UZXh0dXJlQ29y
ZGluYXRlc0xvY2F0aW9uOworICAgIEdDM0RpbnQgbV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVu
U3BhY2VMb2NhdGlvbjsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHsK
QEAgLTIwNiw3ICsyMjIsOCBAQCBwdWJsaWM6CiAgICAgICAgIFNvbGlkQ29sb3IKICAgICB9Owog
Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKTsKKyAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcigpIHsgfQorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKEdyYXBoaWNz
Q29udGV4dDNEKik7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKTsK
IAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTIyMSwxMiArMjM4LDEyIEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFNoYWRlclR5cGUsIFJlZlB0cjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbT4sIERlZmF1bHRIYXNoPGludD46Okhhc2gsIEhhc2hUcmFpdHM8
aW50PiA+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOwogICAgIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtTWFwIG1fdGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7CisgICAgR3Jh
cGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAg
ICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiA+IEZp
bHRlck1hcDsKICAgICBGaWx0ZXJNYXAgbV9maWx0ZXJNYXA7CiAjZW5kaWYKLQogfTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160989</attachid>
            <date>2012-08-28 08:26:17 -0700</date>
            <delta_ts>2012-08-29 16:12:22 -0700</delta_ts>
            <desc>patch</desc>
            <filename>final.diff</filename>
            <type>text/plain</type>
            <size>88357</size>
            <attacher name="Roland Takacs">rtakacs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5YWUyMTg4Li41ZjJkMzM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI5
IEBACisyMDEyLTA4LTI4ICBSb2xhbmQgVGFrYWNzICA8cnRha2Fjc0BpbmYudS1zemVnZWQuaHU+
LCBIZWxkZXIgQ29ycmVpYSAgPGhlbGRlci5jb3JyZWlhQG5va2lhLmNvbT4KKworICAgICAgICBb
VGV4bWFwXSBNb3ZlIFRleHR1cmVNYXBwZXJHTCB0byB1c2UgR3JhcGhpY3NDb250ZXh0M0QKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NjcyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTm9hbSBSb3NlbnRoYWwuCisKKyAgICAgICAgSXQgaXMgYmFzZWQg
b24gYSBwcmV2aW91cyBwYXRjaCBieSBIZWxkZXIgQ29ycmVpYS4KKworICAgICAgICBUZXh0dXJl
TWFwcGVyR0wgKFRNR0wpIGluY2x1ZGVzIGRpcmVjdCBHTCBjYWxscyBhbmQKKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0M0QgKEdDM0QpIG9mZmVycyBtYW55IGNvbnZlbmllbmNlcyBvdmVyIHRoZQor
ICAgICAgICBmb3JtZXIgYXBwcm9hY2g6IHVzaW5nIGV4aXN0aW5nIENTUyBzaGFkZXIgY29kZSwg
QU5HTEUgZm9yCisgICAgICAgIHNoYWRlciBjb21waWxhdGlvbiwgcmV1c2luZyBXZWJDb3JlOjpU
ZXh0dXJlLCBoYXZpbmcgc2hhZGVycyBhbmQKKyAgICAgICAgdGV4dHVyZXMgdGhhdCBjYW4gZGVs
ZXRlIHRoZW1zZWx2ZXMuCisKKyAgICAgICAgQSBHQzNEIG9iamVjdCBpcyBjcmVhdGVkIGJ5IFRN
R0wgd2l0aCB0aGUgbmV3bHkgaW50cm9kdWNlZAorICAgICAgICBidWlsZGVyIGNyZWF0ZUZvckN1
cnJlbnRHTENvbnRleHQoKSwgd2hpY2ggaW4gdHVybiB1c2VzCisgICAgICAgIHRoZSBuZXcgUmVu
ZGVyVG9DdXJyZW50R0xDb250ZXh0IGZsYWcgdW5kZXJuZWF0aC4KKworICAgICAgICBUTUdMJ3Mg
ZGVwZW5kZW5jeSBvbiBPcGVuR0xTaGltcy5oIHdhcyBjb21wbGV0ZWx5IHJlbW92ZWQuCisgICAg
ICAgIEhvd2V2ZXIsIEdDM0QgZG9lcyBub3QgbWFwIGV2ZXJ5IHNpbmdsZSBHTCBjb25zdGFudC4g
VGh1cywgaXQncworICAgICAgICBpbXBvcnRhbnQgdG8gZG9jdW1lbnQgdGhlIGZvbGxvd2luZzoK
KyAgICAgICAgICAgIC0gR0xfRkFMU0Ugd2FzIG1hcHBlZCB0byBmYWxzZS4KKyAgICAgICAgICAg
IC0gR0xfVU5QQUNLX1JPV19MRU5HVEgsIEdMX1VOUEFDS19TS0lQX1BJWEVMUywKKyAgICAgICAg
ICAgIEdMX1VOUEFDS19TS0lQX1JPV1MsIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgYW5kCisg
ICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYgd2VyZSBsb2NhbGx5IGRlZmlu
ZWQgaW4gVE1HTC4KKworICAgICAgICBUaGUgcGF0Y2ggd2FzIG9yaWdpbmFsbHkgZGV2ZWxvcGVk
IGJ5IEhlbGRlciBDb3JyZWlhIGFuZCBmaW5pc2hlZAorICAgICAgICBieSBSb2xhbmQgVGFrYWNz
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAoU2hhcmVkR0xEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6
Y3VycmVudFNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xE
YXRhOjpTaGFyZWRHTERhdGE6OlNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0xEYXRhOjpzaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMRGF0YTo6VGV4dHVyZU1hcHBlckdMRGF0YSk6CisgICAgICAgIChUZXh0dXJlTWFw
cGVyR0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnNjaXNzb3JDbGlwKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjphcHBseSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjppbml0aWFsaXplU3RlbmNpbCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjplbmRQYWludGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OmRyYXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6
ZHJhd0JvcmRlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVSZWN0YW5nbGVBUkIpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjp2aWV3cG9y
dE1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJl
V2l0aEFudGlhbGlhc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRy
YXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0
dXJlR0w6OmRpZFJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6dXBk
YXRlQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3Rmls
dGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjppbml0aWFsaXplU3Rl
bmNpbCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmNsZWFySWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpjcmVhdGVGYm9JZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmJpbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwVGV4dHVyZUdMOjp+Qml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJHTDo6YmluZERlZmF1bHRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJHTDo6YmVnaW5TY2lzc29yQ2xpcCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OmVuZENsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpj
cmVhdGVUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmdyYXBoaWNz
Q29udGV4dDNEKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChDbGlwU3Rh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjp0ZXh0dXJlVGFyZ2V0KToK
KyAgICAgICAgKEJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0
dXJlR0w6OkJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjppbml0aWFsaXplUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1T
aW1wbGU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1Tb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2lt
cGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0
eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1h
c2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNr
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp+U3Rh
bmRhcmRGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVyUHJv
Z3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJk
RmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YW5kYXJkRmlsdGVy
UHJvZ3JhbTo6cHJlcGFyZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6Z2V0U2hhZGVyRm9yRmlsdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6dmVydGV4QXR0cmliKToKKyAgICAgICAgKFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjptYXRyaXhMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6ZmxpcExvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp0ZXh0dXJlU2l6ZUxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpzb3VyY2VUZXh0dXJlTG9jYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Om1hc2tUZXh0
dXJlTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06Om9wYWNpdHlMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChTdGFuZGFyZEZp
bHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp2
ZXJ0ZXhBdHRyaWIpOgorICAgICAgICAoV2ViQ29yZTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjp0
ZXhDb29yZEF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpTdGFuZGFyZEZpbHRlclByb2dyYW06
OnRleHR1cmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU2ltcGxlOjpjcmVhdGUpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1TaW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1S
ZWN0U2ltcGxlOjpjcmVhdGUpOgorICAgICAgICAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1S
ZWN0U2ltcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
T3BhY2l0eUFuZE1hc2s6OmNyZWF0ZSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbU9wYWNpdHlBbmRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpjcmVhdGUpOgorICAgICAgICAoVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENvbG9yOjpjb2xvckxvY2F0
aW9uKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlhbGlhc2luZ05v
TWFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtQW50aWFsaWFzaW5nTm9NYXNrOjpleHBhbmRlZFF1YWRWZXJ0aWNlc0luVGV4dHVyZUNvb3Jk
aW5hdGVzTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OmV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxv
Y2F0aW9uKToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5n
Tm9NYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcik6CisKIDIwMTItMDgtMjggIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3Jn
PgogCiAgICAgICAgIFNpbXBsaWZ5IGNsb25pbmcgb2YgaW5saW5lIHN0eWxlIChiZWxvdyBOb2Rl
LmNsb25lTm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oCmluZGV4IGVmZDg3NjkuLmIyZTZhNGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAt
MjUwLDYgKzI1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgQUxQSEEgPSAweDE5MDYsCiAgICAgICAg
IFJHQiA9IDB4MTkwNywKICAgICAgICAgUkdCQSA9IDB4MTkwOCwKKyAgICAgICAgQkdSQSA9IDB4
ODBFMSwKICAgICAgICAgTFVNSU5BTkNFID0gMHgxOTA5LAogICAgICAgICBMVU1JTkFOQ0VfQUxQ
SEEgPSAweDE5MEEsCiAgICAgICAgIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQgPSAweDgwMzMsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IGEyMmU3MjAuLjFhM2JhODQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0wuY3BwCkBAIC0zOCwxMyArMzgsNiBAQAogCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVk
ZSAiTmF0aXZlSW1hZ2VRdC5oIgotI2luY2x1ZGUgPFFPcGVuR0xDb250ZXh0PgotI2VsaWYgT1Mo
V0lORE9XUykKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZWxpZiBPUyhNQUNfT1NfWCkKLSNpbmNs
dWRlIDxBR0wvYWdsLmg+Ci0jZWxpZiBkZWZpbmVkKFhQX1VOSVgpCi0jaW5jbHVkZSA8R0wvZ2x4
Lmg+CiAjZW5kaWYKIAogI2lmIFVTRShDQUlSTykKQEAgLTUzLDcwICs0Niw0MyBAQAogI2luY2x1
ZGUgPGNhaXJvLmg+CiAjZW5kaWYKIAotI2RlZmluZSBHTF9DTUQoLi4uKSBkbyB7IF9fVkFfQVJH
U19fOyBBU1NFUlRfQVJHKF9fVkFfQVJHU19fLCAhZ2xHZXRFcnJvcigpKTsgfSB3aGlsZSAoMCkK
KyNpZiAhVVNFKFRFWE1BUF9PUEVOR0xfRVNfMikKKy8vIEZJWE1FOiBNb3ZlIHRvIEV4dGVuc2lv
bnMzRC5oLgorI2RlZmluZSBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIgMHg4NEY1CisjZGVmaW5l
IEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViAweDgzNjcKKyNkZWZpbmUgR0xfVU5QQUNLX1JP
V19MRU5HVEggMHgwQ0YyCisjZGVmaW5lIEdMX1VOUEFDS19TS0lQX1BJWEVMUyAweDBDRjQKKyNk
ZWZpbmUgR0xfVU5QQUNLX1NLSVBfUk9XUyAweDBDRjMKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBzdHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAgICAgc3RydWN0IFNoYXJlZEdM
RGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZEdMRGF0YT4gewotI2lmIFBMQVRGT1JNKFFU
KQotICAgICAgICB0eXBlZGVmIFFPcGVuR0xDb250ZXh0KiBHTENvbnRleHQ7Ci0gICAgICAgIHN0
YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdMQ29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBRT3BlbkdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKTsKLSAgICAgICAgfQot
I2VsaWYgT1MoV0lORE9XUykKLSAgICAgICAgdHlwZWRlZiBIR0xSQyBHTENvbnRleHQ7Ci0gICAg
ICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdMQ29udGV4dCgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiB3Z2xHZXRDdXJyZW50Q29udGV4dCgpOwotICAgICAgICB9Ci0jZWxp
ZiBPUyhNQUNfT1NfWCkKLSAgICAgICAgdHlwZWRlZiBBR0xDb250ZXh0IEdMQ29udGV4dDsKLSAg
ICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGFnbEdldEN1cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIH0KLSNl
bGlmIGRlZmluZWQoWFBfVU5JWCkKLSAgICAgICAgdHlwZWRlZiBHTFhDb250ZXh0IEdMQ29udGV4
dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xDb250ZXh0KCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGdsWEdldEN1cnJlbnRDb250ZXh0KCk7Ci0gICAgICAg
IH0KLSNlbHNlCi0gICAgICAgIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIHVua25vd24g
b3BlbmdsLgotICAgICAgICAvLyBSZXR1cm5zIGFsd2F5cyBpbmNyZWFzaW5nIG51bWJlciBhbmQg
ZGlzYWJsZXMgR0wgY29udGV4dCBkYXRhIHNoYXJpbmcuCi0gICAgICAgIHR5cGVkZWYgdW5zaWdu
ZWQgaW50IEdMQ29udGV4dDsKLSAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJyZW50R0xD
b250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RhdGljIEdMQ29udGV4dCBkdW1teUNv
bnRleHRDb3VudGVyID0gMDsKLSAgICAgICAgICAgIHJldHVybiArK2R1bW15Q29udGV4dENvdW50
ZXI7Ci0gICAgICAgIH0KLQotI2VuZGlmCiAKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEdMQ29u
dGV4dCwgU2hhcmVkR0xEYXRhKj4gR0xDb250ZXh0RGF0YU1hcDsKKyAgICAgICAgdHlwZWRlZiBI
YXNoTWFwPFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QsIFNoYXJlZEdMRGF0YSo+IEdMQ29udGV4
dERhdGFNYXA7CiAgICAgICAgIHN0YXRpYyBHTENvbnRleHREYXRhTWFwJiBnbENvbnRleHREYXRh
TWFwKCkKICAgICAgICAgewogICAgICAgICAgICAgc3RhdGljIEdMQ29udGV4dERhdGFNYXAgbWFw
OwogICAgICAgICAgICAgcmV0dXJuIG1hcDsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNoYXJlZEdMRGF0YT4gY3VycmVudFNoYXJlZEdMRGF0YSgpCisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEdMRGF0YT4gY3VycmVudFNoYXJlZEdMRGF0YShHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgR0xDb250ZXh0IGN1
cnJlbnRHTENvbmV4dCA9IGdldEN1cnJlbnRHTENvbnRleHQoKTsKLSAgICAgICAgICAgIEdMQ29u
dGV4dERhdGFNYXA6Oml0ZXJhdG9yIGl0ID0gZ2xDb250ZXh0RGF0YU1hcCgpLmZpbmQoY3VycmVu
dEdMQ29uZXh0KTsKKyAgICAgICAgICAgIEdMQ29udGV4dERhdGFNYXA6Oml0ZXJhdG9yIGl0ID0g
Z2xDb250ZXh0RGF0YU1hcCgpLmZpbmQoY29udGV4dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQz
RCgpKTsKICAgICAgICAgICAgIGlmIChpdCAhPSBnbENvbnRleHREYXRhTWFwKCkuZW5kKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CiAKLSAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU2hhcmVkR0xEYXRhKGdldEN1cnJlbnRHTENvbnRleHQoKSkpOworICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRHTERhdGEoY29udGV4dCkpOwogICAgICAg
ICB9CiAKIAogCiAgICAgICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOwogCi0gICAgICAgIFNoYXJlZEdMRGF0YShHTENvbnRleHQgZ2xDb250
ZXh0KQorICAgICAgICBTaGFyZWRHTERhdGEoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisg
ICAgICAgICAgICA6IHRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKGNvbnRleHQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGdsQ29udGV4dERhdGFNYXAoKS5hZGQoZ2xDb250ZXh0LCB0aGlzKTsK
KyAgICAgICAgICAgIGdsQ29udGV4dERhdGFNYXAoKS5hZGQoY29udGV4dC0+cGxhdGZvcm1HcmFw
aGljc0NvbnRleHQzRCgpLCB0aGlzKTsKICAgICAgICAgfQogCiAgICAgICAgIH5TaGFyZWRHTERh
dGEoKQpAQCAtMTM1LDMwICsxMDEsMzIgQEAgc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEgewog
CiAgICAgU2hhcmVkR0xEYXRhJiBzaGFyZWRHTERhdGEoKSBjb25zdAogICAgIHsKLSAgICAgICAg
cmV0dXJuICoobV9zaGFyZWRHTERhdGEuZ2V0KCkpOworICAgICAgICByZXR1cm4gKm1fc2hhcmVk
R0xEYXRhOwogICAgIH0KIAogICAgIHZvaWQgaW5pdGlhbGl6ZVN0ZW5jaWwoKTsKIAotICAgIFRl
eHR1cmVNYXBwZXJHTERhdGEoKQotICAgICAgICA6IFBhaW50RmxhZ3MoMCkKKyAgICBUZXh0dXJl
TWFwcGVyR0xEYXRhKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgICAgICA6IGNvbnRl
eHQoY29udGV4dCkKKyAgICAgICAgLCBQYWludEZsYWdzKDApCiAgICAgICAgICwgcHJldmlvdXNQ
cm9ncmFtKDApCiAgICAgICAgICwgdGFyZ2V0RnJhbWVCdWZmZXIoMCkKICAgICAgICAgLCBkaWRN
b2RpZnlTdGVuY2lsKGZhbHNlKQogICAgICAgICAsIHByZXZpb3VzU2Npc3NvclN0YXRlKDApCiAg
ICAgICAgICwgcHJldmlvdXNEZXB0aFN0YXRlKDApCi0gICAgICAgICwgbV9zaGFyZWRHTERhdGEo
VGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpjdXJyZW50U2hhcmVkR0xEYXRhKCkp
CisgICAgICAgICwgbV9zaGFyZWRHTERhdGEoVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xE
YXRhOjpjdXJyZW50U2hhcmVkR0xEYXRhKHRoaXMtPmNvbnRleHQpKQogICAgIHsgfQogCisgICAg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQ7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJv
amVjdGlvbk1hdHJpeDsKICAgICBUZXh0dXJlTWFwcGVyOjpQYWludEZsYWdzIFBhaW50RmxhZ3M7
Ci0gICAgR0xpbnQgcHJldmlvdXNQcm9ncmFtOwotICAgIEdMaW50IHRhcmdldEZyYW1lQnVmZmVy
OworICAgIEdDM0RpbnQgcHJldmlvdXNQcm9ncmFtOworICAgIEdDM0RpbnQgdGFyZ2V0RnJhbWVC
dWZmZXI7CiAgICAgYm9vbCBkaWRNb2RpZnlTdGVuY2lsOwotICAgIEdMaW50IHByZXZpb3VzU2Np
c3NvclN0YXRlOwotICAgIEdMaW50IHByZXZpb3VzRGVwdGhTdGF0ZTsKLSAgICBHTGludCB2aWV3
cG9ydFs0XTsKLSAgICBHTGludCBwcmV2aW91c1NjaXNzb3JbNF07CisgICAgR0MzRGludCBwcmV2
aW91c1NjaXNzb3JTdGF0ZTsKKyAgICBHQzNEaW50IHByZXZpb3VzRGVwdGhTdGF0ZTsKKyAgICBH
QzNEaW50IHZpZXdwb3J0WzRdOworICAgIEdDM0RpbnQgcHJldmlvdXNTY2lzc29yWzRdOwogICAg
IFJlZlB0cjxTaGFyZWRHTERhdGE+IG1fc2hhcmVkR0xEYXRhOwogICAgIFJlZlB0cjxCaXRtYXBU
ZXh0dXJlPiBjdXJyZW50U3VyZmFjZTsKIH07CkBAIC0xODIsMjUgKzE1MCwyNSBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjpwb3AoKQogICAgIGNsaXBTdGFjay5yZW1vdmVMYXN0
KCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNjaXNzb3JDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QpCitz
dGF0aWMgdm9pZCBzY2lzc29yQ2xpcChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEdMaW50IHZpZXdwb3J0WzRdOwotICAgIEdMX0NNRChnbEdldEludGVnZXJ2KEdM
X1ZJRVdQT1JULCB2aWV3cG9ydCkpOwotICAgIEdMX0NNRChnbFNjaXNzb3IocmVjdC54KCksIHZp
ZXdwb3J0WzNdIC0gcmVjdC5tYXhZKCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkpOwor
ICAgIEdDM0RpbnQgdmlld3BvcnRbNF07CisgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhp
Y3NDb250ZXh0M0Q6OlZJRVdQT1JULCB2aWV3cG9ydCk7CisgICAgY29udGV4dC0+c2Npc3Nvcihy
ZWN0LngoKSwgdmlld3BvcnRbM10gLSByZWN0Lm1heFkoKSwgcmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjazo6YXBwbHkoKQor
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjazo6YXBwbHkoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQpCiB7Ci0gICAgc2Npc3NvckNsaXAoY2xpcFN0YXRlLnNjaXNzb3JCb3gpOwotICAg
IEdMX0NNRChnbFN0ZW5jaWxPcChHTF9LRUVQLCBHTF9LRUVQLCBHTF9LRUVQKSk7Ci0gICAgR0xf
Q01EKGdsU3RlbmNpbEZ1bmMoR0xfRVFVQUwsIGNsaXBTdGF0ZS5zdGVuY2lsSW5kZXggLSAxLCBj
bGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSkpOworICAgIHNjaXNzb3JDbGlwKGNvbnRleHQsIGNs
aXBTdGF0ZS5zY2lzc29yQm94KTsKKyAgICBjb250ZXh0LT5zdGVuY2lsT3AoR3JhcGhpY3NDb250
ZXh0M0Q6OktFRVAsIEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQLCBHcmFwaGljc0NvbnRleHQzRDo6
S0VFUCk7CisgICAgY29udGV4dC0+c3RlbmNpbEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkVRVUFM
LCBjbGlwU3RhdGUuc3RlbmNpbEluZGV4IC0gMSwgY2xpcFN0YXRlLnN0ZW5jaWxJbmRleCAtIDEp
OwogICAgIGlmIChjbGlwU3RhdGUuc3RlbmNpbEluZGV4ID09IDEpCi0gICAgICAgIEdMX0NNRChn
bERpc2FibGUoR0xfU1RFTkNJTF9URVNUKSk7CisgICAgICAgIGNvbnRleHQtPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCk7CiAgICAgZWxzZQotICAgICAgICBHTF9DTUQo
Z2xFbmFibGUoR0xfU1RFTkNJTF9URVNUKSk7CisgICAgICAgIGNvbnRleHQtPmVuYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKTsKIH0KIAogCkBAIC0yMTQsOCArMTgyLDggQEAg
dm9pZCBUZXh0dXJlTWFwcGVyR0xEYXRhOjppbml0aWFsaXplU3RlbmNpbCgpCiAgICAgaWYgKGRp
ZE1vZGlmeVN0ZW5jaWwpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdMX0NNRChnbENsZWFyU3Rl
bmNpbCgwKSk7Ci0gICAgR0xfQ01EKGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJfQklUKSk7Cisg
ICAgY29udGV4dC0+Y2xlYXJTdGVuY2lsKDApOworICAgIGNvbnRleHQtPmNsZWFyKEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOwogICAgIGRpZE1vZGlmeVN0ZW5jaWwgPSB0
cnVlOwogfQogCkBAIC0yMjksMTAgKzE5NywxMSBAQCBCaXRtYXBUZXh0dXJlR0wqIHRvQml0bWFw
VGV4dHVyZUdMKEJpdG1hcFRleHR1cmUqIHRleHR1cmUpCiAKIFRleHR1cmVNYXBwZXJHTDo6VGV4
dHVyZU1hcHBlckdMKCkKICAgICA6IFRleHR1cmVNYXBwZXIoT3BlbkdMTW9kZSkKLSAgICAsIG1f
ZGF0YShuZXcgVGV4dHVyZU1hcHBlckdMRGF0YSkKICAgICAsIG1fY29udGV4dCgwKQogICAgICwg
bV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcoZmFsc2UpCiB7CisgICAgbV9jb250ZXh0
M0QgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRm9yQ3VycmVudEdMQ29udGV4dCgpOworICAg
IG1fZGF0YSA9IG5ldyBUZXh0dXJlTWFwcGVyR0xEYXRhKG1fY29udGV4dDNELmdldCgpKTsKIH0K
IAogVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2smIFRleHR1cmVNYXBwZXJHTDo6Y2xpcFN0YWNr
KCkKQEAgLTI0MiwxNSArMjExLDkgQEAgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2smIFRleHR1
cmVNYXBwZXJHTDo6Y2xpcFN0YWNrKCkKIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFp
bnRpbmcoUGFpbnRGbGFncyBmbGFncykKIHsKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBubyBHTCBl
cnJvciBjb2RlIHN0YXlzIGZyb20gcHJldmlvdXMgb3BlcmF0aW9ucy4KLSAgICBnbEdldEVycm9y
KCk7Ci0KLSAgICBpZiAoIWluaXRpYWxpemVPcGVuR0xTaGltcygpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBHTF9DTUQoZ2xHZXRJbnRlZ2VydihHTF9DVVJSRU5UX1BST0dSQU0sICZkYXRhKCku
cHJldmlvdXNQcm9ncmFtKSk7Ci0gICAgZGF0YSgpLnByZXZpb3VzU2Npc3NvclN0YXRlID0gZ2xJ
c0VuYWJsZWQoR0xfU0NJU1NPUl9URVNUKTsKLSAgICBkYXRhKCkucHJldmlvdXNEZXB0aFN0YXRl
ID0gZ2xJc0VuYWJsZWQoR0xfREVQVEhfVEVTVCk7CisgICAgbV9jb250ZXh0M0QtPmdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpDVVJSRU5UX1BST0dSQU0sICZkYXRhKCkucHJldmlvdXNQ
cm9ncmFtKTsKKyAgICBkYXRhKCkucHJldmlvdXNTY2lzc29yU3RhdGUgPSBtX2NvbnRleHQzRC0+
aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAgIGRhdGEoKS5w
cmV2aW91c0RlcHRoU3RhdGUgPSBtX2NvbnRleHQzRC0+aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9URVNUKTsKICNpZiBQTEFURk9STShRVCkKICAgICBpZiAobV9jb250ZXh0KSB7
CiAgICAgICAgIFFQYWludGVyKiBwYWludGVyID0gbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKQEAgLTI1OCwxNCArMjIxLDE0IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpblBhaW50
aW5nKFBhaW50RmxhZ3MgZmxhZ3MpCiAgICAgICAgIHBhaW50ZXItPmJlZ2luTmF0aXZlUGFpbnRp
bmcoKTsKICAgICB9CiAjZW5kaWYKLSAgICBnbERpc2FibGUoR0xfREVQVEhfVEVTVCk7Ci0gICAg
Z2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKICAgICBkYXRhKCkuZGlkTW9kaWZ5U3RlbmNp
bCA9IGZhbHNlOwotICAgIEdMX0NNRChnbERlcHRoTWFzaygwKSk7Ci0gICAgR0xfQ01EKGdsR2V0
SW50ZWdlcnYoR0xfVklFV1BPUlQsIGRhdGEoKS52aWV3cG9ydCkpOwotICAgIEdMX0NNRChnbEdl
dEludGVnZXJ2KEdMX1NDSVNTT1JfQk9YLCBkYXRhKCkucHJldmlvdXNTY2lzc29yKSk7CisgICAg
bV9jb250ZXh0M0QtPmRlcHRoTWFzaygwKTsKKyAgICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JULCBkYXRhKCkudmlld3BvcnQpOworICAgIG1fY29u
dGV4dDNELT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1gsIGRhdGEo
KS5wcmV2aW91c1NjaXNzb3IpOwogICAgIG1fY2xpcFN0YWNrLmluaXQoSW50UmVjdCgwLCAwLCBk
YXRhKCkudmlld3BvcnRbMl0sIGRhdGEoKS52aWV3cG9ydFszXSkpOwotICAgIEdMX0NNRChnbEdl
dEludGVnZXJ2KEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcsICZkYXRhKCkudGFyZ2V0RnJhbWVCdWZm
ZXIpKTsKKyAgICBtX2NvbnRleHQzRC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0JJTkRJTkcsICZkYXRhKCkudGFyZ2V0RnJhbWVCdWZmZXIpOwogICAgIGRhdGEo
KS5QYWludEZsYWdzID0gZmxhZ3M7CiAgICAgYmluZFN1cmZhY2UoMCk7CiB9CkBAIC0yNzMsMjIg
KzIzNiwyMiBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5QYWludGluZyhQYWludEZsYWdz
IGZsYWdzKQogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50aW5nKCkKIHsKICAgICBpZiAo
ZGF0YSgpLmRpZE1vZGlmeVN0ZW5jaWwpIHsKLSAgICAgICAgZ2xDbGVhclN0ZW5jaWwoMSk7Ci0g
ICAgICAgIGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJfQklUKTsKKyAgICAgICAgbV9jb250ZXh0
M0QtPmNsZWFyU3RlbmNpbCgxKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmNsZWFyKEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOwogICAgIH0KIAotICAgIGdsVXNlUHJvZ3Jh
bShkYXRhKCkucHJldmlvdXNQcm9ncmFtKTsKKyAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShk
YXRhKCkucHJldmlvdXNQcm9ncmFtKTsKIAotICAgIGdsU2Npc3NvcihkYXRhKCkucHJldmlvdXNT
Y2lzc29yWzBdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzFdLCBkYXRhKCkucHJldmlvdXNTY2lz
c29yWzJdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzNdKTsKKyAgICBtX2NvbnRleHQzRC0+c2Np
c3NvcihkYXRhKCkucHJldmlvdXNTY2lzc29yWzBdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzFd
LCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzJdLCBkYXRhKCkucHJldmlvdXNTY2lzc29yWzNdKTsK
ICAgICBpZiAoZGF0YSgpLnByZXZpb3VzU2Npc3NvclN0YXRlKQotICAgICAgICBnbEVuYWJsZShH
TF9TQ0lTU09SX1RFU1QpOworICAgICAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpTQ0lTU09SX1RFU1QpOwogICAgIGVsc2UKLSAgICAgICAgZ2xEaXNhYmxlKEdMX1ND
SVNTT1JfVEVTVCk7CisgICAgICAgIG1fY29udGV4dDNELT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4
dDNEOjpTQ0lTU09SX1RFU1QpOwogCiAgICAgaWYgKGRhdGEoKS5wcmV2aW91c0RlcHRoU3RhdGUp
Ci0gICAgICAgIGdsRW5hYmxlKEdMX0RFUFRIX1RFU1QpOworICAgICAgICBtX2NvbnRleHQzRC0+
ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUKTsKICAgICBlbHNlCi0gICAgICAg
IGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPmRpc2FibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1QpOwogCiAjaWYgUExBVEZPUk0oUVQpCiAgICAg
aWYgKCFtX2NvbnRleHQpCkBAIC0yOTksNDAgKzI2Miw0MCBAQCB2b2lkIFRleHR1cmVNYXBwZXJH
TDo6ZW5kUGFpbnRpbmcoKQogI2VuZGlmCiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3
UXVhZChjb25zdCBEcmF3UXVhZCYgcXVhZFRvRHJhdywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHNoYWRlclBy
b2dyYW0sIEdMZW51bSBkcmF3aW5nTW9kZSwgYm9vbCBuZWVkc0JsZW5kaW5nKQordm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiBxdWFkVG9EcmF3LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbSogc2hhZGVyUHJvZ3JhbSwgR0MzRGVudW0gZHJhd2luZ01vZGUsIGJvb2wgbmVlZHNC
bGVuZGluZykKIHsKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShzaGFkZXJQ
cm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbEJpbmRCdWZmZXIoR0xfQVJS
QVlfQlVGRkVSLCAwKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+YmluZEJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwKTsKIAotICAgIGNvbnN0IEdM
ZmxvYXQgcXVhZFtdID0geworICAgIGNvbnN0IEdDM0RmbG9hdCBxdWFkW10gPSB7CiAgICAgICAg
IHF1YWRUb0RyYXcudGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMSgpLngoKSwgcXVhZFRv
RHJhdy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAxKCkueSgpLAogICAgICAgICBxdWFk
VG9EcmF3LnRhcmdldFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDIoKS54KCksIHF1YWRUb0RyYXcu
dGFyZ2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wMigpLnkoKSwKICAgICAgICAgcXVhZFRvRHJh
dy50YXJnZXRSZWN0TWFwcGVkVG9Vbml0U3F1YXJlLnAzKCkueCgpLCBxdWFkVG9EcmF3LnRhcmdl
dFJlY3RNYXBwZWRUb1VuaXRTcXVhcmUucDMoKS55KCksCiAgICAgICAgIHF1YWRUb0RyYXcudGFy
Z2V0UmVjdE1hcHBlZFRvVW5pdFNxdWFyZS5wNCgpLngoKSwgcXVhZFRvRHJhdy50YXJnZXRSZWN0
TWFwcGVkVG9Vbml0U3F1YXJlLnA0KCkueSgpCiAgICAgfTsKLSAgICBHTF9DTUQoZ2xWZXJ0ZXhB
dHRyaWJQb2ludGVyKHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpLCAyLCBHTF9GTE9BVCwg
R0xfRkFMU0UsIDAsIHF1YWQpKTsKKyAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRl
cihzaGFkZXJQcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FULCBmYWxzZSwgMCwgR0MzRGludHB0cihxdWFkKSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBtYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChkYXRhKCkucHJvamVjdGlvbk1hdHJp
eCkubXVsdGlwbHkobW9kZWxWaWV3TWF0cml4KS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgKICAgICAgICAgICAgIHF1YWRUb0RyYXcub3JpZ2luYWxUYXJnZXRSZWN0LndpZHRoKCksIDAs
IDAsIDAsCiAgICAgICAgICAgICAwLCBxdWFkVG9EcmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC5oZWln
aHQoKSwgMCwgMCwKICAgICAgICAgICAgIDAsIDAsIDEsIDAsCiAgICAgICAgICAgICBxdWFkVG9E
cmF3Lm9yaWdpbmFsVGFyZ2V0UmVjdC54KCksIHF1YWRUb0RyYXcub3JpZ2luYWxUYXJnZXRSZWN0
LnkoKSwgMCwgMSkpOwotICAgIGNvbnN0IEdMZmxvYXQgbTRbXSA9IHsKKyAgICBHQzNEZmxvYXQg
bTRbXSA9IHsKICAgICAgICAgbWF0cml4Lm0xMSgpLCBtYXRyaXgubTEyKCksIG1hdHJpeC5tMTMo
KSwgbWF0cml4Lm0xNCgpLAogICAgICAgICBtYXRyaXgubTIxKCksIG1hdHJpeC5tMjIoKSwgbWF0
cml4Lm0yMygpLCBtYXRyaXgubTI0KCksCiAgICAgICAgIG1hdHJpeC5tMzEoKSwgbWF0cml4Lm0z
MigpLCBtYXRyaXgubTMzKCksIG1hdHJpeC5tMzQoKSwKICAgICAgICAgbWF0cml4Lm00MSgpLCBt
YXRyaXgubTQyKCksIG1hdHJpeC5tNDMoKSwgbWF0cml4Lm00NCgpCiAgICAgfTsKLSAgICBHTF9D
TUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRlclByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEs
IEdMX0ZBTFNFLCBtNCkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtTWF0cml4NGZ2KHNoYWRl
clByb2dyYW0tPm1hdHJpeExvY2F0aW9uKCksIDEsIGZhbHNlLCBtNCk7CiAKICAgICBpZiAobmVl
ZHNCbGVuZGluZykgewotICAgICAgICBHTF9DTUQoZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVf
TUlOVVNfU1JDX0FMUEhBKSk7Ci0gICAgICAgIEdMX0NNRChnbEVuYWJsZShHTF9CTEVORCkpOwor
ICAgICAgICBtX2NvbnRleHQzRC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdy
YXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICAgICAgbV9jb250ZXh0
M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwogICAgIH0gZWxzZQotICAgICAg
ICBHTF9DTUQoZ2xEaXNhYmxlKEdMX0JMRU5EKSk7CisgICAgICAgIG1fY29udGV4dDNELT5kaXNh
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CiAKLSAgICBHTF9DTUQoZ2xEcmF3QXJyYXlz
KGRyYXdpbmdNb2RlLCAwLCA0KSk7Ci0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KHNoYWRlclByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7CisgICAgbV9jb250ZXh0M0QtPmRy
YXdBcnJheXMoZHJhd2luZ01vZGUsIDAsIDQpOworICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkoc2hhZGVyUHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOwogfQogCiB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdp
ZHRoLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtb2RlbFZpZXdNYXRyaXgpCkBAIC0zNDEsMTcgKzMwNCwxNyBAQCB2b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdpZHRoLCBjb25z
dCBGbG9hdFJlYwogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1Tb2xpZENvbG9yPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLnNvbGlkQ29sb3JQcm9ncmFtKCk7Ci0gICAgR0xfQ01E
KGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5pZCgpKSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dy
YW0ocHJvZ3JhbS0+aWQoKSk7CiAKICAgICBmbG9hdCBhbHBoYSA9IGNvbG9yLmFscGhhKCkgLyAy
NTUuMDsKLSAgICBHTF9DTUQoZ2xVbmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLAor
ICAgIG1fY29udGV4dDNELT51bmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLAogICAg
ICAgICAgICAgICAgICAgICAgICAoY29sb3IucmVkKCkgLyAyNTUuMCkgKiBhbHBoYSwKICAgICAg
ICAgICAgICAgICAgICAgICAgKGNvbG9yLmdyZWVuKCkgLyAyNTUuMCkgKiBhbHBoYSwKICAgICAg
ICAgICAgICAgICAgICAgICAgKGNvbG9yLmJsdWUoKSAvIDI1NS4wKSAqIGFscGhhLAotICAgICAg
ICAgICAgICAgICAgICAgICBhbHBoYSkpOwotICAgIEdMX0NNRChnbExpbmVXaWR0aCh3aWR0aCkp
OworICAgICAgICAgICAgICAgICAgICAgICBhbHBoYSk7CisgICAgbV9jb250ZXh0M0QtPmxpbmVX
aWR0aCh3aWR0aCk7CiAKLSAgICBkcmF3UXVhZCh0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgs
IHByb2dyYW0uZ2V0KCksIEdMX0xJTkVfTE9PUCwgY29sb3IuaGFzQWxwaGEoKSk7CisgICAgZHJh
d1F1YWQodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLmdldCgpLCBHcmFwaGlj
c0NvbnRleHQzRDo6TElORV9MT09QLCBjb2xvci5oYXNBbHBoYSgpKTsKIH0KIAogdm9pZCBUZXh0
dXJlTWFwcGVyR0w6OmRyYXdSZXBhaW50Q291bnRlcihpbnQgdmFsdWUsIGludCBwb2ludFNpemUs
IGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbW9kZWxWaWV3TWF0cml4KQpAQCAtMzk4LDcgKzM2MSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBGbG9h
dFJlY3QmCiAgICAgZHJhd1RleHR1cmUodGV4dHVyZUdMLmlkKCksIHRleHR1cmVHTC5pc09wYXF1
ZSgpID8gMCA6IFN1cHBvcnRzQmxlbmRpbmcsIHRleHR1cmVHTC5zaXplKCksIHRhcmdldFJlY3Qs
IG1hdHJpeCwgb3BhY2l0eSwgbWFzaywgZXhwb3NlZEVkZ2VzKTsKIH0KIAotI2lmIGRlZmluZWQo
R0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlKQorI2lmICFVU0UoVEVYTUFQX09QRU5HTF9FU18yKQog
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJCKHVpbnQzMl90IHRl
eHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxv
YXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkK
IHsKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW07CkBAIC00
MDYsMzYgKzM2OSwzNiBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVSZWN0YW5n
bGVBUkIodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsIGNvbgogICAgICAgICBwcm9ncmFt
ID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNo
YWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3RPcGFjaXR5QW5kTWFz
ayk7CiAgICAgZWxzZQogICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlJlY3RTaW1wbGUpOwotICAgIEdMX0NNRChnbFVzZVByb2dyYW0ocHJvZ3Jh
bS0+aWQoKSkpOworICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpOwog
Ci0gICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0
cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSk7Ci0gICAg
R0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCB0ZXh0dXJlKSk7
Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW0tPnNvdXJjZVRleHR1cmVMb2NhdGlvbigp
LCAwKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0t
PnZlcnRleEF0dHJpYigpKTsKKyAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRTApOworICAgIG1fY29udGV4dDNELT5iaW5kVGV4dHVyZShHTF9U
RVhUVVJFX1JFQ1RBTkdMRV9BUkIsIHRleHR1cmUpOworICAgIG1fY29udGV4dDNELT51bmlmb3Jt
MWkocHJvZ3JhbS0+c291cmNlVGV4dHVyZUxvY2F0aW9uKCksIDApOwogCi0gICAgR0xfQ01EKGds
VW5pZm9ybTFmKHByb2dyYW0tPmZsaXBMb2NhdGlvbigpLCAhIShmbGFncyAmIFNob3VsZEZsaXBU
ZXh0dXJlKSkpOwotICAgIEdMX0NNRChnbFVuaWZvcm0yZihwcm9ncmFtLT50ZXh0dXJlU2l6ZUxv
Y2F0aW9uKCksIHRleHR1cmVTaXplLndpZHRoKCksIHRleHR1cmVTaXplLmhlaWdodCgpKSk7Cisg
ICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5mbGlwTG9jYXRpb24oKSwgISEoZmxh
Z3MgJiBTaG91bGRGbGlwVGV4dHVyZSkpOworICAgIG1fY29udGV4dDNELT51bmlmb3JtMmYocHJv
Z3JhbS0+dGV4dHVyZVNpemVMb2NhdGlvbigpLCB0ZXh0dXJlU2l6ZS53aWR0aCgpLCB0ZXh0dXJl
U2l6ZS5oZWlnaHQoKSk7CiAKICAgICBpZiAoVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Omlz
VmFsaWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCkpKQotICAgICAg
ICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbS0+b3BhY2l0eUxvY2F0aW9uKCksIG9wYWNpdHkp
KTsKKyAgICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0xZihwcm9ncmFtLT5vcGFjaXR5TG9jYXRp
b24oKSwgb3BhY2l0eSk7CiAKICAgICBpZiAobWFza1RleHR1cmUgJiYgbWFza1RleHR1cmUtPmlz
VmFsaWQoKSAmJiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2Nh
dGlvbihwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCkpKSB7CiAgICAgICAgIGNvbnN0IEJp
dG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRl
eHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKLSAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShH
TF9URVhUVVJFMSkpOwotICAgICAgICBHTF9DTUQoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJE
LCBtYXNrVGV4dHVyZUdMLT5pZCgpKSk7Ci0gICAgICAgIEdMX0NNRChnbFVuaWZvcm0xaShwcm9n
cmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCksIDEpKTsKLSAgICAgICAgR0xfQ01EKGdsQWN0aXZl
VGV4dHVyZShHTF9URVhUVVJFMCkpOworICAgICAgICBtX2NvbnRleHQzRC0+YWN0aXZlVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpOworICAgICAgICBtX2NvbnRleHQzRC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1hc2tUZXh0dXJlR0wtPmlk
KCkpOworICAgICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPm1hc2tUZXh0dXJl
TG9jYXRpb24oKSwgMSk7CisgICAgICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgfQogCiAgICAgYm9vbCBuZWVkc0JsZW5kaW5n
ID0gKGZsYWdzICYgU3VwcG9ydHNCbGVuZGluZykgfHwgb3BhY2l0eSA8IDAuOTkgfHwgbWFza1Rl
eHR1cmU7Ci0gICAgZHJhd1F1YWQodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBwcm9ncmFt
LmdldCgpLCBHTF9UUklBTkdMRV9GQU4sIG5lZWRzQmxlbmRpbmcpOworICAgIGRyYXdRdWFkKHRh
cmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgcHJvZ3JhbS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRSSUFOR0xFX0ZBTiwgbmVlZHNCbGVuZGluZyk7CiB9Ci0jZW5kaWYgLy8gZGVmaW5lZChH
TF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUpIAorI2VuZGlmIC8vICFVU0UoVEVYTUFQX09QRU5HTF9F
U18yKQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVy
ZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEludFNpemUmIC8qIHRleHR1cmVTaXplICovLCBjb25zdCBG
bG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZp
ZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJl
LCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpCiB7Ci0gICAgYm9vbCBuZWVkc0FudGlsaWFpbmcgPSBt
X2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyAmJiAhbW9kZWxWaWV3TWF0cml4LmlzSW50
ZWdlclRyYW5zbGF0aW9uKCk7Ci0gICAgaWYgKG5lZWRzQW50aWxpYWluZyAmJiBkcmF3VGV4dHVy
ZVdpdGhBbnRpYWxpYXNpbmcodGV4dHVyZSwgZmxhZ3MsIHRhcmdldFJlY3QsIG1vZGVsVmlld01h
dHJpeCwgb3BhY2l0eSwgbWFza1RleHR1cmUsIGV4cG9zZWRFZGdlcykpCisgICAgYm9vbCBuZWVk
c0FudGlhbGlhc2luZyA9IG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nICYmICFtb2Rl
bFZpZXdNYXRyaXguaXNJbnRlZ2VyVHJhbnNsYXRpb24oKTsKKyAgICBpZiAobmVlZHNBbnRpYWxp
YXNpbmcgJiYgZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHRleHR1cmUsIGZsYWdzLCB0YXJn
ZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0dXJlLCBleHBvc2VkRWRn
ZXMpKQogICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbT4gcHJvZ3JhbTsKQEAgLTQ0MywxNSArNDA2LDE1IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdM
OjpkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSW50U2l6
ZSYKICAgICAgICAgcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpPcGFjaXR5QW5kTWFzayk7CiAgICAgZWxzZQogICAgICAgICBwcm9ncmFtID0gZGF0YSgpLnNo
YXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0o
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNpbXBsZSk7Ci0gICAgR0xfQ01EKGdsVXNlUHJv
Z3JhbShwcm9ncmFtLT5pZCgpKSk7CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3Jh
bS0+aWQoKSk7CiAKICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQo
KSwgdGV4dHVyZSwgZmxhZ3MsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwg
bWFza1RleHR1cmUpOwogfQogCi1zdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggdmlld3BvcnRN
YXRyaXgoKQorc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZpZXdwb3J0TWF0cml4KEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0M0QpCiB7Ci0gICAgR0xpbnQgdmlld3BvcnRbNF07Ci0gICAg
R0xfQ01EKGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIHZpZXdwb3J0KSk7CisgICAgR0MzRGlu
dCB2aWV3cG9ydFs0XTsKKyAgICBjb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dDNEOjpWSUVXUE9SVCwgdmlld3BvcnQpOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0
cml4OwogICAgIG1hdHJpeC50cmFuc2xhdGUzZCh2aWV3cG9ydFswXSwgdmlld3BvcnRbMV0sIDAp
OwpAQCAtNTQ4LDcgKzUxMSw3IEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdp
dGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3MsCiAgICAgLy8gYW50
aWFsaWFzaW5nLiBOb3RlIGhlcmUgdGhhdCB3ZSBhcmUgYWxzbyBpbmNsdWRpbmcgdGhlIHZpZXdw
b3J0IG1hdHJpeCAod2hpY2gKICAgICAvLyB0cmFuc2xhdGVzIGZyb20gbm9ybWFsaXplZCBkZXZp
Y2UgY29vcmRpbmF0ZXMgdG8gc2NyZWVuIGNvb3JkaW5hdGVzKSwgYmVjYXVzZSB0aGVzZQogICAg
IC8vIHZhbHVlcyBhcmUgY29uc3VtZWQgaW4gdGhlIGZyYWdtZW50IHNoYWRlciwgd2hpY2ggd29y
a3MgaW4gc2NyZWVuIGNvb3JkaW5hdGVzLgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcmVl
blNwYWNlVHJhbnNmb3JtID0gdmlld3BvcnRNYXRyaXgoKS5tdWx0aXBseShUcmFuc2Zvcm1hdGlv
bk1hdHJpeChkYXRhKCkucHJvamVjdGlvbk1hdHJpeCkpLm11bHRpcGx5KG1vZGVsVmlld01hdHJp
eCkudG8yZFRyYW5zZm9ybSgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcmVlblNwYWNl
VHJhbnNmb3JtID0gdmlld3BvcnRNYXRyaXgobV9jb250ZXh0M0QuZ2V0KCkpLm11bHRpcGx5KFRy
YW5zZm9ybWF0aW9uTWF0cml4KGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4KSkubXVsdGlwbHkobW9k
ZWxWaWV3TWF0cml4KS50bzJkVHJhbnNmb3JtKCk7CiAgICAgaWYgKCFzY3JlZW5TcGFjZVRyYW5z
Zm9ybS5pc0ludmVydGlibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEZsb2F0UXVh
ZCBxdWFkSW5TY3JlZW5TcGFjZSA9IHNjcmVlblNwYWNlVHJhbnNmb3JtLm1hcFF1YWQob3JpZ2lu
YWxUYXJnZXRSZWN0KTsKQEAgLTU3Miw4ICs1MzUsOCBAQCBib29sIFRleHR1cmVNYXBwZXJHTDo6
ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdz
LAogICAgIHF1YWRUb0VkZ2VBcnJheShpbmZsYXRlUXVhZChxdWFkSW5TY3JlZW5TcGFjZS5ib3Vu
ZGluZ0JveCgpLCAgaW5mbGF0aW9uRGlzdGFuY2UpLCB0YXJnZXRRdWFkRWRnZXMgKyAxMik7CiAK
ICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s+
IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIuYW50aWFsaWFzaW5nTm9NYXNrUHJvZ3JhbSgpOwotICAgIEdMX0NNRChnbFVzZVByb2dyYW0o
cHJvZ3JhbS0+aWQoKSkpOwotICAgIEdMX0NNRChnbFVuaWZvcm0zZnYocHJvZ3JhbS0+ZXhwYW5k
ZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSwgOCwgdGFyZ2V0UXVhZEVkZ2VzKSk7
CisgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CisgICAgbV9jb250
ZXh0M0QtPnVuaWZvcm0zZnYocHJvZ3JhbS0+ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNl
TG9jYXRpb24oKSwgOCwgdGFyZ2V0UXVhZEVkZ2VzKTsKIAogICAgIGRyYXdUZXh0dXJlZFF1YWRX
aXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCB0ZXh0dXJlLCBmbGFncywgRHJhd1F1YWQob3JpZ2lu
YWxUYXJnZXRSZWN0LCBleHBhbmRlZFF1YWRJblRleHR1cmVDb29yZGluYXRlcyksIG1vZGVsVmll
d01hdHJpeCwgb3BhY2l0eSwgMCAvKiBtYXNrVGV4dHVyZSAqLyk7CiAgICAgcmV0dXJuIHRydWU7
CkBAIC01ODEsMjYgKzU0NCwyNiBAQCBib29sIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVX
aXRoQW50aWFsaWFzaW5nKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzIGZsYWdzLAogCiB2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtKiBwcm9ncmFtLCB1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29u
c3QgRHJhd1F1YWQmIHF1YWRUb0RyYXcsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2Rl
bFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0
dXJlKQogewotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZl
cnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkp
OwotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmUpKTsKLSAg
ICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbS0+c291cmNlVGV4dHVyZUxvY2F0aW9uKCksIDAp
KTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVy
dGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFMCk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9y
bTFpKHByb2dyYW0tPnNvdXJjZVRleHR1cmVMb2NhdGlvbigpLCAwKTsKIAotICAgIEdMX0NNRChn
bFVuaWZvcm0xZihwcm9ncmFtLT5mbGlwTG9jYXRpb24oKSwgISEoZmxhZ3MgJiBTaG91bGRGbGlw
VGV4dHVyZSkpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFmKHByb2dyYW0tPmZsaXBMb2Nh
dGlvbigpLCAhIShmbGFncyAmIFNob3VsZEZsaXBUZXh0dXJlKSk7CiAKICAgICBpZiAoVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW06OmlzVmFsaWRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbS0+b3Bh
Y2l0eUxvY2F0aW9uKCkpKQotICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWYocHJvZ3JhbS0+b3Bh
Y2l0eUxvY2F0aW9uKCksIG9wYWNpdHkpKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0x
Zihwcm9ncmFtLT5vcGFjaXR5TG9jYXRpb24oKSwgb3BhY2l0eSk7CiAKICAgICBpZiAobWFza1Rl
eHR1cmUgJiYgbWFza1RleHR1cmUtPmlzVmFsaWQoKSAmJiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbTo6aXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9u
KCkpKSB7CiAgICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmVHTCogbWFza1RleHR1cmVHTCA9IHN0
YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCo+KG1hc2tUZXh0dXJlKTsKLSAgICAgICAg
R0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSkpOwotICAgICAgICBHTF9DTUQoZ2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtYXNrVGV4dHVyZUdMLT5pZCgpKSk7Ci0gICAgICAg
IEdMX0NNRChnbFVuaWZvcm0xaShwcm9ncmFtLT5tYXNrVGV4dHVyZUxvY2F0aW9uKCksIDEpKTsK
LSAgICAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpOworICAgICAgICBt
X2NvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpOwor
ICAgICAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIG1hc2tUZXh0dXJlR0wtPmlkKCkpOworICAgICAgICBtX2NvbnRleHQzRC0+dW5pZm9y
bTFpKHByb2dyYW0tPm1hc2tUZXh0dXJlTG9jYXRpb24oKSwgMSk7CisgICAgICAgIG1fY29udGV4
dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgfQog
CiAgICAgYm9vbCBuZWVkc0JsZW5kaW5nID0gKGZsYWdzICYgU3VwcG9ydHNCbGVuZGluZykgfHwg
b3BhY2l0eSA8IDAuOTkgfHwgbWFza1RleHR1cmU7Ci0gICAgZHJhd1F1YWQocXVhZFRvRHJhdywg
bW9kZWxWaWV3TWF0cml4LCBwcm9ncmFtLCBHTF9UUklBTkdMRV9GQU4sIG5lZWRzQmxlbmRpbmcp
OworICAgIGRyYXdRdWFkKHF1YWRUb0RyYXcsIG1vZGVsVmlld01hdHJpeCwgcHJvZ3JhbSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgbmVlZHNCbGVuZGluZyk7CiB9CiAKIGJvb2wg
Qml0bWFwVGV4dHVyZUdMOjpjYW5SZXVzZVdpdGgoY29uc3QgSW50U2l6ZSYgY29udGVudHNTaXpl
LCBGbGFncykKQEAgLTYxMSw3ICs1NzQsNyBAQCBib29sIEJpdG1hcFRleHR1cmVHTDo6Y2FuUmV1
c2VXaXRoKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSwgRmxhZ3MpCiAjaWYgT1MoREFSV0lO
KQogI2RlZmluZSBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSBHTF9VTlNJR05F
RF9JTlRfOF84XzhfOF9SRVYKICNlbHNlCi0jZGVmaW5lIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9U
UkFOU0ZFUl9UWVBFIEdMX1VOU0lHTkVEX0JZVEUKKyNkZWZpbmUgREVGQVVMVF9URVhUVVJFX1BJ
WEVMX1RSQU5TRkVSX1RZUEUgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKICNlbmRp
ZgogCiBzdGF0aWMgdm9pZCBzd2l6emxlQkdSQVRvUkdCQSh1aW50MzJfdCogZGF0YSwgY29uc3Qg
SW50UmVjdCYgcmVjdCwgaW50IHN0cmlkZSA9IDApCkBAIC02NDYsMzggKzYwOSw0MiBAQCBzdGF0
aWMgYm9vbCBkcml2ZXJTdXBwb3J0c1N1YkltYWdlKCkKIAogdm9pZCBCaXRtYXBUZXh0dXJlR0w6
OmRpZFJlc2V0KCkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0
dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOworCiAgICAgaWYgKCFtX2lkKQotICAgICAg
ICBHTF9DTUQoZ2xHZW5UZXh0dXJlcygxLCAmbV9pZCkpOworICAgICAgICBtX2lkID0gY29udGV4
dDNELT5jcmVhdGVUZXh0dXJlKCk7CiAKICAgICBtX3Nob3VsZENsZWFyID0gdHJ1ZTsKICAgICBp
ZiAobV90ZXh0dXJlU2l6ZSA9PSBjb250ZW50U2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBHTHVpbnQgZm9ybWF0ID0gZHJpdmVyU3VwcG9ydHNCR1JBU3dpenpsaW5nKCkgPyBHTF9CR1JB
IDogR0xfUkdCQTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGZvcm1hdCA9IGRyaXZlclN1cHBvcnRz
QkdSQVN3aXp6bGluZygpID8gR3JhcGhpY3NDb250ZXh0M0Q6OkJHUkEgOiBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQTsKIAogICAgIG1fdGV4dHVyZVNpemUgPSBjb250ZW50U2l6ZSgpOwotICAgIEdM
X0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1faWQpKTsKLSAgICBHTF9DTUQoZ2xU
ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElO
RUFSKSk7Ci0gICAgR0xfQ01EKGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX01BR19GSUxURVIsIEdMX0xJTkVBUikpOwotICAgIEdMX0NNRChnbFRleFBhcmFtZXRlcmko
R0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpKTsKLSAg
ICBHTF9DTUQoZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9U
LCBHTF9DTEFNUF9UT19FREdFKSk7Ci0gICAgR0xfQ01EKGdsVGV4SW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwLCBHTF9SR0JBLCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVp
Z2h0KCksIDAsIGZvcm1hdCwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIDAp
KTsKKyAgICBjb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBtX2lkKTsKKyAgICBjb250ZXh0M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIGNvbnRleHQzRC0+dGV4UGFyYW1ldGVyaShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
TUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgY29udGV4dDNELT50
ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsK
KyAgICBjb250ZXh0M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6
OkNMQU1QX1RPX0VER0UpOworICAgIGNvbnRleHQzRC0+dGV4SW1hZ2UyRERpcmVjdChHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG1fdGV4
dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgZm9ybWF0LCBERUZB
VUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgMCk7CiB9CiAKIAogdm9pZCBCaXRtYXBU
ZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEsIGNvbnN0IEludFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZzZXQsIGludCBieXRlc1Blckxp
bmUpCiB7Ci0gICAgR0x1aW50IGdsRm9ybWF0ID0gR0xfUkdCQTsKLSAgICBHTF9DTUQoZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lkKSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKworICAgIFBs
YXRmb3JtM0RPYmplY3QgZ2xGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKKyAgICBj
b250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2lk
KTsKIAogICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OwogICAgIGlmIChkcml2
ZXJTdXBwb3J0c0JHUkFTd2l6emxpbmcoKSkKLSAgICAgICAgZ2xGb3JtYXQgPSBHTF9CR1JBOwor
ICAgICAgICBnbEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpCR1JBOwogICAgIGVsc2UKICAg
ICAgICAgc3dpenpsZUJHUkFUb1JHQkEocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGNvbnN0
X2Nhc3Q8dm9pZCo+KGRhdGEpKSwgSW50UmVjdChzb3VyY2VPZmZzZXQsIHRhcmdldFJlY3Quc2l6
ZSgpKSwgYnl0ZXNQZXJMaW5lIC8gYnl0ZXNQZXJQaXhlbCk7CiAKICAgICBpZiAoYnl0ZXNQZXJM
aW5lID09IHRhcmdldFJlY3Qud2lkdGgoKSAvIDQgJiYgc291cmNlT2Zmc2V0ID09IEludFBvaW50
Ojp6ZXJvKCkpIHsKLSAgICAgICAgR0xfQ01EKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJE
LCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwg
dGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFO
U0ZFUl9UWVBFLCAoY29uc3QgY2hhciopZGF0YSkpOworICAgICAgICBjb250ZXh0M0QtPnRleFN1
YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgp
LCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgp
LCBnbEZvcm1hdCwgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIChjb25zdCBj
aGFyKilkYXRhKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjk1LDE5ICs2NjIsMTkg
QEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqIGRhdGEs
IGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QKICAgICAgICAgICAgIGRzdCArPSB0YXJnZXRCeXRl
c1BlckxpbmU7CiAgICAgICAgIH0KIAotICAgICAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdM
X1RFWFRVUkVfMkQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0LnkoKSwgdGFyZ2V0UmVj
dC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBnbEZvcm1hdCwgREVGQVVMVF9URVhUVVJF
X1BJWEVMX1RSQU5TRkVSX1RZUEUsIHRlbXBvcmFyeURhdGEuZGF0YSgpKSk7CisgICAgICAgIGNv
bnRleHQzRC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwg
dGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdl
dFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJf
VFlQRSwgdGVtcG9yYXJ5RGF0YS5kYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAj
aWYgIWRlZmluZWQoVEVYTUFQX09QRU5HTF9FU18yKQogICAgIC8vIFVzZSB0aGUgT3BlbkdMIHN1
Yi1pbWFnZSBleHRlbnNpb24sIG5vdyB0aGF0IHdlIGtub3cgaXQncyBhdmFpbGFibGUuCi0gICAg
R0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIGJ5dGVzUGVyTGluZSAv
IGJ5dGVzUGVyUGl4ZWwpKTsKLSAgICBHTF9DTUQoZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJ
UF9ST1dTLCBzb3VyY2VPZmZzZXQueSgpKSk7Ci0gICAgR0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xf
VU5QQUNLX1NLSVBfUElYRUxTLCBzb3VyY2VPZmZzZXQueCgpKSk7Ci0gICAgR0xfQ01EKGdsVGV4
U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55
KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQoKSwgZ2xGb3JtYXQsIERF
RkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFLCAoY29uc3QgY2hhciopZGF0YSkpOwot
ICAgIEdMX0NNRChnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCAwKSk7Ci0gICAg
R0xfQ01EKGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywgMCkpOwotICAgIEdMX0NN
RChnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1BJWEVMUywgMCkpOworICAgIGNvbnRleHQz
RC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5HVEgsIGJ5dGVzUGVyTGluZSAvIGJ5dGVz
UGVyUGl4ZWwpOworICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9X
Uywgc291cmNlT2Zmc2V0LnkoKSk7CisgICAgY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBB
Q0tfU0tJUF9QSVhFTFMsIHNvdXJjZU9mZnNldC54KCkpOworICAgIGNvbnRleHQzRC0+dGV4U3Vi
SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdGFyZ2V0UmVjdC54KCks
IHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCks
IGdsRm9ybWF0LCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwgKGNvbnN0IGNo
YXIqKWRhdGEpOworICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1JPV19MRU5H
VEgsIDApOworICAgIGNvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NLSVBfUk9XUywg
MCk7CisgICAgY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBBQ0tfU0tJUF9QSVhFTFMsIDAp
OwogI2VuZGlmCiB9CiAKQEAgLTc0MywxOSArNzEwLDE5IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdM
OjpkcmF3RmlsdGVyZWQoY29uc3QgQml0bWFwVGV4dHVyZSYgc291cmNlVGV4dHVyZSwgY29uc3Qg
Qml0CiAKICAgICBwcm9ncmFtLT5wcmVwYXJlKGZpbHRlciwgcGFzcywgc291cmNlVGV4dHVyZS5j
b250ZW50U2l6ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihjb250ZW50
VGV4dHVyZSkuaWQoKSk7CiAKLSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShw
cm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwotICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KHByb2dyYW0tPnRleENvb3JkQXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xBY3RpdmVU
ZXh0dXJlKEdMX1RFWFRVUkUwKSk7Ci0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oc291cmNlVGV4dHVyZSku
aWQoKSkpOwotICAgIGdsVW5pZm9ybTFpKHByb2dyYW0tPnRleHR1cmVVbmlmb3JtKCksIDApOwot
ICAgIGNvbnN0IEdMZmxvYXQgdGFyZ2V0VmVydGljZXNbXSA9IHstMSwgLTEsIDEsIC0xLCAxLCAx
LCAtMSwgMX07Ci0gICAgY29uc3QgR0xmbG9hdCBzb3VyY2VWZXJ0aWNlc1tdID0gezAsIDAsIDEs
IDAsIDEsIDEsIDAsIDF9OwotICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3Jh
bS0+dmVydGV4QXR0cmliKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdGFyZ2V0VmVydGlj
ZXMpKTsKLSAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnRleENvb3Jk
QXR0cmliKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgc291cmNlVmVydGljZXMpKTsKLSAg
ICBHTF9DTUQoZ2xEaXNhYmxlKEdMX0JMRU5EKSk7Ci0gICAgR0xfQ01EKGdsRHJhd0FycmF5cyhH
TF9UUklBTkdMRV9GQU4sIDAsIDQpKTsKLSAgICBHTF9DTUQoZ2xEaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpKTsKLSAgICBHTF9DTUQoZ2xEaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSkpOworICAgIG1fY29udGV4
dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSk7Cisg
ICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3Jk
QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFMCk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihz
b3VyY2VUZXh0dXJlKS5pZCgpKTsKKyAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0t
PnRleHR1cmVVbmlmb3JtKCksIDApOworICAgIGNvbnN0IEdDM0RmbG9hdCB0YXJnZXRWZXJ0aWNl
c1tdID0gey0xLCAtMSwgMSwgLTEsIDEsIDEsIC0xLCAxfTsKKyAgICBjb25zdCBHQzNEZmxvYXQg
c291cmNlVmVydGljZXNbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKKyAgICBtX2NvbnRl
eHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cih0YXJnZXRWZXJ0aWNl
cykpOworICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnRleENv
b3JkQXR0cmliKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIEdDM0Rp
bnRwdHIoc291cmNlVmVydGljZXMpKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkQpOworICAgIG1fY29udGV4dDNELT5kcmF3QXJyYXlzKEdyYXBoaWNz
Q29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQpOworICAgIG1fY29udGV4dDNELT5kaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4
dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRBdHRyaWIoKSk7
CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQml0bWFwVGV4dHVyZUdMOjphcHBseUZp
bHRlcnMoY29uc3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmIGZpbHRlcnMpCkBAIC03OTYsMTcgKzc2MywxOSBAQCB2b2lkIEJpdG1hcFRleHR1
cmVHTDo6aW5pdGlhbGl6ZVN0ZW5jaWwoKQogewogICAgIGlmIChtX3JibykKICAgICAgICAgcmV0
dXJuOwotICAgIEdMX0NNRChnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fcmJvKSk7Ci0gICAgR0xf
Q01EKGdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fcmJvKSk7CisKKyAgICBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0dXJlTWFwcGVyLT5ncmFwaGljc0Nv
bnRleHQzRCgpOworICAgIG1fcmJvID0gY29udGV4dDNELT5jcmVhdGVSZW5kZXJidWZmZXIoKTsK
KyAgICBjb250ZXh0M0QtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUiwgbV9yYm8pOwogI2lmZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgotICAgIEdMX0NNRChn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9TVEVOQ0lMX0lOREVYOCwg
bV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKSk7CisgICAgY29u
dGV4dDNELT5yZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVYOCwgbV90ZXh0dXJlU2l6ZS53aWR0
aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsKICNlbHNlCi0gICAgR0xfQ01EKGdsUmVuZGVy
YnVmZmVyU3RvcmFnZShHTF9SRU5ERVJCVUZGRVIsIEdMX0RFUFRIX1NURU5DSUwsIG1fdGV4dHVy
ZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSkpOworICAgIGNvbnRleHQzRC0+
cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3Rl
eHR1cmVTaXplLmhlaWdodCgpKTsKICNlbmRpZgotICAgIEdMX0NNRChnbEJpbmRSZW5kZXJidWZm
ZXIoR0xfUkVOREVSQlVGRkVSLCAwKSk7Ci0gICAgR0xfQ01EKGdsRnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVG
RkVSLCBtX3JibykpOwotICAgIEdMX0NNRChnbENsZWFyU3RlbmNpbCgwKSk7Ci0gICAgR0xfQ01E
KGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJfQklUKSk7CisgICAgY29udGV4dDNELT5iaW5kUmVu
ZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOworICAgIGNvbnRl
eHQzRC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSLCBtX3Jibyk7CisgICAgY29udGV4dDNELT5jbGVhclN0ZW5jaWwo
MCk7CisgICAgY29udGV4dDNELT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZG
RVJfQklUKTsKIH0KIAogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmNsZWFySWZOZWVkZWQoKQpAQCAt
ODE0LDEwICs3ODMsMTIgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmNsZWFySWZOZWVkZWQoKQog
ICAgIGlmICghbV9zaG91bGRDbGVhcikKICAgICAgICAgcmV0dXJuOwogCisgICAgR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQzRCA9IG1fdGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0Qo
KTsKKwogICAgIG1fY2xpcFN0YWNrLmluaXQoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX3Rl
eHR1cmVTaXplKSk7Ci0gICAgbV9jbGlwU3RhY2suYXBwbHkoKTsKLSAgICBHTF9DTUQoZ2xDbGVh
ckNvbG9yKDAsIDAsIDAsIDApKTsKLSAgICBHTF9DTUQoZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJf
QklUKSk7CisgICAgbV9jbGlwU3RhY2suYXBwbHkoY29udGV4dDNEKTsKKyAgICBjb250ZXh0M0Qt
PmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgY29udGV4dDNELT5jbGVhcihHcmFwaGljc0Nv
bnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCk7CiAgICAgbV9zaG91bGRDbGVhciA9IGZhbHNlOwog
fQogCkBAIC04MjYsMzMgKzc5NywzNyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6Y3JlYXRlRmJv
SWZOZWVkZWQoKQogICAgIGlmIChtX2ZibykKICAgICAgICAgcmV0dXJuOwogCi0gICAgR0xfQ01E
KGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2ZibykpOwotICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1
ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pKTsKLSAgICBHTF9DTUQoZ2xGcmFtZWJ1ZmZlclRl
eHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVf
MkQsIGlkKCksIDApKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0
dXJlTWFwcGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOworICAgIG1fZmJvID0gY29udGV4dDNELT5j
cmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIGNvbnRleHQzRC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIGNvbnRleHQzRC0+ZnJhbWVi
dWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBpZCgpLCAwKTsKICAgICBtX3Nob3VsZENsZWFyID0gdHJ1ZTsKIH0KIAogdm9pZCBCaXRtYXBU
ZXh0dXJlR0w6OmJpbmQoKQogewotICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIDApKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbV90ZXh0dXJlTWFw
cGVyLT5ncmFwaGljc0NvbnRleHQzRCgpOworICAgIGNvbnRleHQzRC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwogICAgIGNyZWF0ZUZib0lmTmVlZGVkKCk7
Ci0gICAgR0xfQ01EKGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2ZibykpOwot
ICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0
dXJlU2l6ZS5oZWlnaHQoKSkpOworICAgIGNvbnRleHQzRC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIGNvbnRleHQzRC0+dmlld3Bv
cnQoMCwgMCwgbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsK
ICAgICBjbGVhcklmTmVlZGVkKCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5kYXRhKCkucHJvamVj
dGlvbk1hdHJpeCA9IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgobV90ZXh0dXJlU2l6ZSwgdHJ1ZSAv
KiBtaXJyb3JlZCAqLyk7Ci0gICAgbV9jbGlwU3RhY2suYXBwbHkoKTsKKyAgICBtX2NsaXBTdGFj
ay5hcHBseShjb250ZXh0M0QpOwogfQogCiBCaXRtYXBUZXh0dXJlR0w6On5CaXRtYXBUZXh0dXJl
R0woKQogeworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBtX3RleHR1cmVNYXBw
ZXItPmdyYXBoaWNzQ29udGV4dDNEKCk7CisKICAgICBpZiAobV9pZCkKLSAgICAgICAgR0xfQ01E
KGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1faWQpKTsKKyAgICAgICAgY29udGV4dDNELT5kZWxldGVU
ZXh0dXJlKG1faWQpOwogCiAgICAgaWYgKG1fZmJvKQotICAgICAgICBHTF9DTUQoZ2xEZWxldGVG
cmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKSk7CisgICAgICAgIGNvbnRleHQzRC0+ZGVsZXRlRnJhbWVi
dWZmZXIobV9mYm8pOwogCiAgICAgaWYgKG1fcmJvKQotICAgICAgICBHTF9DTUQoZ2xEZWxldGVS
ZW5kZXJidWZmZXJzKDEsICZtX3JibykpOworICAgICAgICBjb250ZXh0M0QtPmRlbGV0ZVJlbmRl
cmJ1ZmZlcihtX3Jibyk7CiB9CiAKIGJvb2wgQml0bWFwVGV4dHVyZUdMOjppc1ZhbGlkKCkgY29u
c3QKQEAgLTg3MiwxMSArODQ3LDExIEBAIFRleHR1cmVNYXBwZXJHTDo6flRleHR1cmVNYXBwZXJH
TCgpCiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiaW5kRGVmYXVsdFN1cmZhY2UoKQogewotICAg
IEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZGF0YSgpLnRhcmdldEZy
YW1lQnVmZmVyKSk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIGRhdGEoKS50YXJnZXRGcmFtZUJ1ZmZlcik7CiAgICAgSW50
U2l6ZSB2aWV3cG9ydFNpemUoZGF0YSgpLnZpZXdwb3J0WzJdLCBkYXRhKCkudmlld3BvcnRbM10p
OwogICAgIGRhdGEoKS5wcm9qZWN0aW9uTWF0cml4ID0gY3JlYXRlUHJvamVjdGlvbk1hdHJpeCh2
aWV3cG9ydFNpemUsIGRhdGEoKS5QYWludEZsYWdzICYgUGFpbnRpbmdNaXJyb3JlZCk7Ci0gICAg
R0xfQ01EKGdsVmlld3BvcnQoZGF0YSgpLnZpZXdwb3J0WzBdLCBkYXRhKCkudmlld3BvcnRbMV0s
IHZpZXdwb3J0U2l6ZS53aWR0aCgpLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpKTsKLSAgICBtX2Ns
aXBTdGFjay5hcHBseSgpOworICAgIG1fY29udGV4dDNELT52aWV3cG9ydChkYXRhKCkudmlld3Bv
cnRbMF0sIGRhdGEoKS52aWV3cG9ydFsxXSwgdmlld3BvcnRTaXplLndpZHRoKCksIHZpZXdwb3J0
U2l6ZS5oZWlnaHQoKSk7CisgICAgbV9jbGlwU3RhY2suYXBwbHkobV9jb250ZXh0M0QuZ2V0KCkp
OwogICAgIGRhdGEoKS5jdXJyZW50U3VyZmFjZS5jbGVhcigpOwogfQogCkBAIC05MDYsNyArODgx
LDcgQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luU2Npc3NvckNsaXAoY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgY2xpcFN0YWNrKCkuY3VycmVudCgpLnNjaXNzb3JCb3guaW50ZXJzZWN0KHJlY3QpOwotICAg
IGNsaXBTdGFjaygpLmFwcGx5KCk7CisgICAgY2xpcFN0YWNrKCkuYXBwbHkobV9jb250ZXh0M0Qu
Z2V0KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05MjAsMTAgKzg5NSwxMCBAQCB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
b2RlbFZpZXdNYXRyaXgsIGNvbgogCiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNpbXBs
ZSk7CiAKLSAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dyYW0tPmlkKCkpKTsKLSAgICBHTF9D
TUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSkpOwot
ICAgIGNvbnN0IEdMZmxvYXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsK
LSAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0tPnZlcnRleEF0dHJpYigp
LCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHVuaXRSZWN0KSk7CisgICAgbV9jb250ZXh0M0Qt
PnVzZVByb2dyYW0ocHJvZ3JhbS0+aWQoKSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKTsKKyAgICBjb25zdCBHQzNEZmxv
YXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKKyAgICBtX2NvbnRleHQz
RC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhBdHRyaWIoKSwgMiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cih1bml0UmVjdCkpOwogCiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0
YSgpLnByb2plY3Rpb25NYXRyaXgpCiAgICAgICAgICAgICAubXVsdGlwbHkobW9kZWxWaWV3TWF0
cml4KQpAQCAtOTMyLDE0ICs5MDcsMTQgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xp
cChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb24KICAgICAg
ICAgICAgICAgICAwLCAwLCAxLCAwLAogICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpLCB0
YXJnZXRSZWN0LnkoKSwgMCwgMSkpOwogCi0gICAgY29uc3QgR0xmbG9hdCBtNFtdID0geworICAg
IGNvbnN0IEdDM0RmbG9hdCBtNFtdID0gewogICAgICAgICBtYXRyaXgubTExKCksIG1hdHJpeC5t
MTIoKSwgbWF0cml4Lm0xMygpLCBtYXRyaXgubTE0KCksCiAgICAgICAgIG1hdHJpeC5tMjEoKSwg
bWF0cml4Lm0yMigpLCBtYXRyaXgubTIzKCksIG1hdHJpeC5tMjQoKSwKICAgICAgICAgbWF0cml4
Lm0zMSgpLCBtYXRyaXgubTMyKCksIG1hdHJpeC5tMzMoKSwgbWF0cml4Lm0zNCgpLAogICAgICAg
ICBtYXRyaXgubTQxKCksIG1hdHJpeC5tNDIoKSwgbWF0cml4Lm00MygpLCBtYXRyaXgubTQ0KCkK
ICAgICB9OwogCi0gICAgY29uc3QgR0xmbG9hdCBtNGFsbFtdID0geworICAgIGNvbnN0IEdDM0Rm
bG9hdCBtNGFsbFtdID0gewogICAgICAgICAyLCAwLCAwLCAwLAogICAgICAgICAwLCAyLCAwLCAw
LAogICAgICAgICAwLCAwLCAxLCAwLApAQCAtOTQ4LDQzICs5MjMsNDIgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4LCBjb24KIAogICAgIGludCYgc3RlbmNpbEluZGV4ID0gY2xpcFN0YWNrKCkuY3VycmVu
dCgpLnN0ZW5jaWxJbmRleDsKIAotICAgIEdMX0NNRChnbEVuYWJsZShHTF9TVEVOQ0lMX1RFU1Qp
KTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RF
U1QpOwogCiAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGRvIGFueSBhY3R1YWwgZHJhd2luZy4K
LSAgICBHTF9DTUQoZ2xTdGVuY2lsRnVuYyhHTF9ORVZFUiwgc3RlbmNpbEluZGV4LCBzdGVuY2ls
SW5kZXgpKTsKKyAgICBtX2NvbnRleHQzRC0+c3RlbmNpbEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6
Ok5FVkVSLCBzdGVuY2lsSW5kZXgsIHN0ZW5jaWxJbmRleCk7CiAKICAgICAvLyBPcGVyYXRlIG9u
bHkgb24gdGhlIHN0ZW5jaWxJbmRleCBhbmQgYWJvdmUuCi0gICAgR0xfQ01EKGdsU3RlbmNpbE1h
c2soMHhmZiAmIH4oc3RlbmNpbEluZGV4IC0gMSkpKTsKKyAgICBtX2NvbnRleHQzRC0+c3RlbmNp
bE1hc2soMHhmZiAmIH4oc3RlbmNpbEluZGV4IC0gMSkpOwogCiAgICAgLy8gRmlyc3QgY2xlYXIg
dGhlIGVudGlyZSBidWZmZXIgYXQgdGhlIGN1cnJlbnQgaW5kZXguCi0gICAgR0xfQ01EKGdsVW5p
Zm9ybU1hdHJpeDRmdihwcm9ncmFtLT5tYXRyaXhMb2NhdGlvbigpLCAxLCBHTF9GQUxTRSwgbTRh
bGwpKTsKLSAgICBHTF9DTUQoZ2xTdGVuY2lsT3AoR0xfWkVSTywgR0xfWkVSTywgR0xfWkVSTykp
OwotICAgIEdMX0NNRChnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KSk7CisgICAg
bV9jb250ZXh0M0QtPnVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+bWF0cml4TG9jYXRpb24oKSwg
MSwgZmFsc2UsIGNvbnN0X2Nhc3Q8R0MzRGZsb2F0Kj4obTRhbGwpKTsKKyAgICBtX2NvbnRleHQz
RC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6
WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOworICAgIG1fY29udGV4dDNELT5kcmF3QXJy
YXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIDQpOwogCiAgICAgLy8gTm93
IGFwcGx5IHRoZSBjdXJyZW50IGluZGV4IHRvIHRoZSBuZXcgcXVhZC4KLSAgICBHTF9DTUQoZ2xT
dGVuY2lsT3AoR0xfUkVQTEFDRSwgR0xfUkVQTEFDRSwgR0xfUkVQTEFDRSkpOwotICAgIEdMX0NN
RChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+bWF0cml4TG9jYXRpb24oKSwgMSwgR0xfRkFM
U0UsIG00KSk7Ci0gICAgR0xfQ01EKGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQp
KTsKKyAgICBtX2NvbnRleHQzRC0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpSRVBMQUNF
LCBHcmFwaGljc0NvbnRleHQzRDo6UkVQTEFDRSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFUExBQ0Up
OworICAgIG1fY29udGV4dDNELT51bmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPm1hdHJpeExvY2F0
aW9uKCksIDEsIGZhbHNlLCBjb25zdF9jYXN0PEdDM0RmbG9hdCo+KG00KSk7CisgICAgbV9jb250
ZXh0M0QtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7
CiAKICAgICAvLyBDbGVhciB0aGUgc3RhdGUuCi0gICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0
dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleEF0dHJpYigpKSk7Ci0gICAgR0xfQ01EKGdsU3RlbmNp
bE1hc2soMCkpOworICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJv
Z3JhbS0+dmVydGV4QXR0cmliKCkpOworICAgIG1fY29udGV4dDNELT5zdGVuY2lsTWFzaygwKTsK
IAogICAgIC8vIEluY3JlYXNlIHN0ZW5jaWxJbmRleCBhbmQgYXBwbHkgc3RlbmNpbCB0ZXN0aW5n
LgogICAgIHN0ZW5jaWxJbmRleCAqPSAyOwotICAgIGNsaXBTdGFjaygpLmFwcGx5KCk7CisgICAg
Y2xpcFN0YWNrKCkuYXBwbHkobV9jb250ZXh0M0QuZ2V0KCkpOwogfQogCiB2b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZW5kQ2xpcCgpCiB7CiAgICAgY2xpcFN0YWNrKCkucG9wKCk7Ci0gICAgY2xpcFN0
YWNrKCkuYXBwbHkoKTsKKyAgICBjbGlwU3RhY2soKS5hcHBseShtX2NvbnRleHQzRC5nZXQoKSk7
CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGVU
ZXh0dXJlKCkKIHsKLSAgICBCaXRtYXBUZXh0dXJlR0wqIHRleHR1cmUgPSBuZXcgQml0bWFwVGV4
dHVyZUdMKCk7Ci0gICAgdGV4dHVyZS0+c2V0VGV4dHVyZU1hcHBlcih0aGlzKTsKKyAgICBCaXRt
YXBUZXh0dXJlR0wqIHRleHR1cmUgPSBuZXcgQml0bWFwVGV4dHVyZUdMKHRoaXMpOwogICAgIHJl
dHVybiBhZG9wdFJlZih0ZXh0dXJlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCmluZGV4IDA3NmU2
NWYuLjhhNzJkNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKQEAgLTIzLDggKzIzLDggQEAKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNs
dWRlICJPcGVuR0xTaGltcy5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCkBAIC0zOCw3ICszOCw2IEBAIGNsYXNzIFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtOwogY2xhc3MgVGV4dHVyZU1hcHBlckdMIDogcHVibGljIFRl
eHR1cmVNYXBwZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHR1cmVNYXBw
ZXJHTD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJHTCk7IH0K
LSAgICBUZXh0dXJlTWFwcGVyR0woKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyR0woKTsK
IAogICAgIGVudW0gRmxhZyB7CkBAIC01NCw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFw
VGV4dHVyZSogbWFza1RleHR1cmUsIHVuc2lnbmVkIGV4cG9zZWRFZGdlcykgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25z
dCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBj
b25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzID0g
QWxsRWRnZXMpOwogCi0jaWYgZGVmaW5lZChHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUpCisjaWYg
IVVTRShURVhNQVBfT1BFTkdMX0VTXzIpCiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlUmVj
dGFuZ2xlQVJCKHVpbnQzMl90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJl
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJl
KiBtYXNrVGV4dHVyZSk7CiAjZW5kaWYKIApAQCAtNjYsNiArNjUsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBJbnRTaXplIG1heFRleHR1cmVTaXplKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
SW50U2l6ZSgyMDAwLCAyMDAwKTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0
dXJlPiBjcmVhdGVUZXh0dXJlKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRl
eHQqIGdyYXBoaWNzQ29udGV4dCgpIE9WRVJSSURFIHsgcmV0dXJuIG1fY29udGV4dDsgfQorICAg
IGlubGluZSBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRleHQzRC5nZXQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFwaGljc0Nv
bnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KSBPVkVSUklERSB7IG1fY29udGV4dCA9IGNv
bnRleHQ7IH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTc1LDcgKzc1LDYgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0RW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nKGJvb2wgZW5h
YmxlZCkgeyBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyA9IGVuYWJsZWQ7IH0KIAog
cHJpdmF0ZToKLQogICAgIHN0cnVjdCBDbGlwU3RhdGUgewogICAgICAgICBJbnRSZWN0IHNjaXNz
b3JCb3g7CiAgICAgICAgIGludCBzdGVuY2lsSW5kZXg7CkBAIC04OSw3ICs4OCw3IEBAIHByaXZh
dGU6CiAgICAgcHVibGljOgogICAgICAgICB2b2lkIHB1c2goKTsKICAgICAgICAgdm9pZCBwb3Ao
KTsKLSAgICAgICAgdm9pZCBhcHBseSgpOworICAgICAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dDNEKik7CiAgICAgICAgIGlubGluZSBDbGlwU3RhdGUmIGN1cnJlbnQoKSB7IHJldHVybiBj
bGlwU3RhdGU7IH0KICAgICAgICAgdm9pZCBpbml0KGNvbnN0IEludFJlY3QmKTsKIApAQCAtMTA5
LDE2ICsxMDgsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgRmxvYXRRdWFkIHRhcmdldFJlY3RNYXBw
ZWRUb1VuaXRTcXVhcmU7CiAgICAgfTsKIAorICAgIFRleHR1cmVNYXBwZXJHTCgpOworCiAgICAg
Ym9vbCBkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVyZSwgRmxhZ3Ms
IGNvbnN0IEZsb2F0UmVjdCYgb3JpZ2luYWxUYXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0
dXJlKiBtYXNrVGV4dHVyZSwgdW5zaWduZWQgZXhwb3NlZEVkZ2VzKTsKICAgICB2b2lkIGRyYXdU
ZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIHVpbnQz
Ml90IHRleHR1cmUsIEZsYWdzLCBjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1
cmUqIG1hc2tUZXh0dXJlKTsKLSAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0qLCBHTGVudW0gZHJhd2luZ01vZGUsIGJvb2wgbmVlZHNCbGVuZGluZyk7Cisg
ICAgdm9pZCBkcmF3UXVhZChjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiwgR0MzRGVu
dW0gZHJhd2luZ01vZGUsIGJvb2wgbmVlZHNCbGVuZGluZyk7CiAKICAgICBib29sIGJlZ2luU2Np
c3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsK
ICAgICB2b2lkIGJpbmREZWZhdWx0U3VyZmFjZSgpOwogICAgIENsaXBTdGFjayYgY2xpcFN0YWNr
KCk7CiAgICAgaW5saW5lIFRleHR1cmVNYXBwZXJHTERhdGEmIGRhdGEoKSB7IHJldHVybiAqbV9k
YXRhOyB9Ci0gICAgVGV4dHVyZU1hcHBlckdMRGF0YSogbV9kYXRhOwogICAgIEdyYXBoaWNzQ29u
dGV4dCogbV9jb250ZXh0OworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0
M0Q7CisgICAgVGV4dHVyZU1hcHBlckdMRGF0YSogbV9kYXRhOwogICAgIENsaXBTdGFjayBtX2Ns
aXBTdGFjazsKICAgICBib29sIG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nOwogCkBA
IC0xMzUsNyArMTM3LDcgQEAgcHVibGljOgogICAgIHZvaWQgaW5pdGlhbGl6ZVN0ZW5jaWwoKTsK
ICAgICB+Qml0bWFwVGV4dHVyZUdMKCk7CiAgICAgdmlydHVhbCB1aW50MzJfdCBpZCgpIGNvbnN0
IHsgcmV0dXJuIG1faWQ7IH0KLSAgICB1aW50MzJfdCB0ZXh0dXJlVGFyZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gR0xfVEVYVFVSRV8yRDsgfQorICAgIHVpbnQzMl90IHRleHR1cmVUYXJnZXQoKSBjb25z
dCB7IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDsgfQogICAgIEludFNpemUg
dGV4dHVyZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVTaXplOyB9CiAgICAgdm9pZCBz
ZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXJHTCogdGV4bWFwKSB7IG1fdGV4dHVyZU1hcHBl
ciA9IHRleG1hcDsgfQogICAgIHZvaWQgdXBkYXRlQ29udGVudHMoSW1hZ2UqLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgSW50UG9pbnQmKTsKQEAgLTE0NywyMCArMTQ5LDIyIEBAIHB1YmxpYzoKICNl
bmRpZgogCiBwcml2YXRlOgotICAgIEdMdWludCBtX2lkOworICAgIFBsYXRmb3JtM0RPYmplY3Qg
bV9pZDsKICAgICBJbnRTaXplIG1fdGV4dHVyZVNpemU7CiAgICAgSW50UmVjdCBtX2RpcnR5UmVj
dDsKLSAgICBHTHVpbnQgbV9mYm87Ci0gICAgR0x1aW50IG1fcmJvOworICAgIFBsYXRmb3JtM0RP
YmplY3QgbV9mYm87CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3JibzsKICAgICBib29sIG1fc2hv
dWxkQ2xlYXI7Ci0gICAgVGV4dHVyZU1hcHBlckdMKiBtX3RleHR1cmVNYXBwZXI7CiAgICAgVGV4
dHVyZU1hcHBlckdMOjpDbGlwU3RhY2sgbV9jbGlwU3RhY2s7Ci0gICAgQml0bWFwVGV4dHVyZUdM
KCkKKyAgICBUZXh0dXJlTWFwcGVyR0wqIG1fdGV4dHVyZU1hcHBlcjsKKworICAgIEJpdG1hcFRl
eHR1cmVHTCgpOworICAgIEJpdG1hcFRleHR1cmVHTChUZXh0dXJlTWFwcGVyR0wqIHRleHR1cmVN
YXBwZXIpCiAgICAgICAgIDogbV9pZCgwKQogICAgICAgICAsIG1fZmJvKDApCiAgICAgICAgICwg
bV9yYm8oMCkKICAgICAgICAgLCBtX3Nob3VsZENsZWFyKHRydWUpCi0gICAgICAgICwgbV90ZXh0
dXJlTWFwcGVyKDApCisgICAgICAgICwgbV90ZXh0dXJlTWFwcGVyKHRleHR1cmVNYXBwZXIpCiAg
ICAgewogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAK
aW5kZXggMGZiZGJlOS4uZmE4YWMwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuY3BwCkBAIC0zMCwyNSArMzAsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0jaWZuZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgotI2RlZmluZSBPRVMyX1BSRUNJU0lPTl9ERUZJ
TklUSU9OUyBcCi0gICAgIiNkZWZpbmUgbG93cFxuI2RlZmluZSBoaWdocFxuIgotI2RlZmluZSBP
RVMyX0ZSQUdNRU5UX1NIQURFUl9ERUZBVUxUX1BSRUNJU0lPTgotI2Vsc2UKLSNkZWZpbmUgT0VT
Ml9QUkVDSVNJT05fREVGSU5JVElPTlMKLSNkZWZpbmUgT0VTMl9GUkFHTUVOVF9TSEFERVJfREVG
QVVMVF9QUkVDSVNJT04gXAotICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgXG4iCi0jZW5k
aWYKLQotI2RlZmluZSBTVFJJTkdJRllfVkFMKHNyYy4uLikgI3NyYwotI2RlZmluZSBWRVJURVhf
U0hBREVSKHNyYy4uLikgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlNcCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTVFJJTkdJRllfVkFMKHNyYykKLSNkZWZpbmUgRlJBR01FTlRfU0hB
REVSKHNyYy4uLikgT0VTMl9QUkVDSVNJT05fREVGSU5JVElPTlNcCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE9FUzJfRlJBR01FTlRfU0hBREVSX0RFRkFVTFRfUFJFQ0lTSU9OXAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJJTkdJRllfVkFMKHNyYykKKyNkZWZp
bmUgU1RSSU5HSUZZKHNyYy4uLikgI3NyYwogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRT
aGFkZXJTb3VyY2VPcGFjaXR5QW5kTWFzayA9Ci0gICAgRlJBR01FTlRfU0hBREVSKAorICAgIFNU
UklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgIHVuaWZv
cm0gc2FtcGxlcjJEIHNfc291cmNlOwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX21hc2s7
CiAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CkBAIC02NCw3ICs1MCw4IEBA
IHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrID0K
ICAgICApOwogCiBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0T3Bh
Y2l0eUFuZE1hc2sgPQotICAgIEZSQUdNRU5UX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCisgICAg
ICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRFJl
Y3Qgc19zb3VyY2U7CiAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX21hc2s7CiAgICAg
ICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CkBAIC04MCw3ICs2Nyw3IEBAIHN0YXRp
YyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5QW5kTWFzayA9CiAg
ICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRN
YXNrID0KLSAgICBWRVJURVhfU0hBREVSKAorICAgIFNUUklOR0lGWSgKICAgICAgICAgdW5pZm9y
bSBtYXQ0IHVfbWF0cml4OwogICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9mbGlwOwogICAg
ICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKQEAgLTk1LDcgKzgyLDggQEAgc3RhdGljIGNv
bnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZU9wYWNpdHlBbmRNYXNrID0KICAgICApOwogCiBz
dGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUgPQotICAgIEZSQUdN
RU5UX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OwogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NvdXJjZTsKICAgICAgICAgdW5pZm9y
bSBsb3dwIGZsb2F0IHVfb3BhY2l0eTsKICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291
cmNlVGV4Q29vcmQ7CkBAIC0xMDcsNyArOTUsOCBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21l
bnRTaGFkZXJTb3VyY2VTaW1wbGUgPQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFn
bWVudFNoYWRlclNvdXJjZUFudGlhbGlhc2luZ05vTWFzayA9Ci0gICAgRlJBR01FTlRfU0hBREVS
KAorICAgIFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAg
ICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc291cmNlOwogICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZl
YzIgdl9zb3VyY2VUZXhDb29yZDsKICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0
eTsKQEAgLTE0NSw3ICsxMzQsOCBAQCBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJT
b3VyY2VBbnRpYWxpYXNpbmdOb01hc2sgPQogICAgICk7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBm
cmFnbWVudFNoYWRlclNvdXJjZVJlY3RTaW1wbGUgPQotICAgIEZSQUdNRU5UX1NIQURFUigKKyAg
ICBTVFJJTkdJRlkoCisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1
bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc19zb3VyY2U7CiAgICAgICAgIHVuaWZvcm0gbG93cCB2ZWMy
IHVfdGV4dHVyZVNpemU7CiAgICAgICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7CkBA
IC0xNTgsNyArMTQ4LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNl
UmVjdFNpbXBsZSA9CiAgICAgKTsKIAogc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNv
dXJjZVNpbXBsZSA9Ci0gICAgVkVSVEVYX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCiAgICAgICAg
IHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfZmxp
cDsKICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CkBAIC0xNzEsNyArMTYxLDcgQEAg
c3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSA9CiAgICAgKTsKIAog
c3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNvbGlkQ29sb3IgPQotICAgIFZF
UlRFWF9TSEFERVIoCisgICAgU1RSSU5HSUZZKAogICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRy
aXg7CiAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwogICAgICAgICB2b2lkIG1haW4o
dm9pZCkKQEAgLTE4Miw3ICsxNzIsOCBAQCBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVy
U291cmNlU29saWRDb2xvciA9CiAKIAogc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVy
U291cmNlU29saWRDb2xvciA9Ci0gICAgVkVSVEVYX1NIQURFUigKKyAgICBTVFJJTkdJRlkoCisg
ICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICB1bmlmb3JtIHZlYzQgdV9j
b2xvcjsKICAgICAgICAgdm9pZCBtYWluKHZvaWQpCiAgICAgICAgIHsKQEAgLTIxMiwyMiArMjAz
LDIyIEBAIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9nCiAKICAgICBzd2l0Y2ggKHNoYWRlclR5cGUp
IHsKICAgICBjYXNlIFNpbXBsZToKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtU2ltcGxlOjpjcmVhdGUoKTsKKyAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpjcmVhdGUobV9jb250ZXh0KTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBSZWN0U2ltcGxlOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1SZWN0U2ltcGxlOjpjcmVhdGUoKTsKKyAgICAgICAgcHJvZ3JhbSA9IFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQW50aWFsaWFzaW5nTm9NYXNrOgotICAgICAgICBwcm9ncmFt
ID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OmNyZWF0ZSgp
OworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNp
bmdOb01hc2s6OmNyZWF0ZShtX2NvbnRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE9w
YWNpdHlBbmRNYXNrOgotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW1PcGFjaXR5QW5kTWFzazo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpjcmVhdGUobV9jb250ZXh0KTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBSZWN0T3BhY2l0eUFuZE1hc2s6Ci0gICAgICAgIHByb2dyYW0g
PSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6Y3JlYXRlKCk7
CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5
QW5kTWFzazo6Y3JlYXRlKG1fY29udGV4dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU29s
aWRDb2xvcjoKLSAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29s
aWRDb2xvcjo6Y3JlYXRlKCk7CisgICAgICAgIHByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNvbGlkQ29sb3I6OmNyZWF0ZShtX2NvbnRleHQpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEludmFsaWQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjM2LDgg
KzIyNyw5IEBAIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9nCiAgICAgcmV0dXJuIHByb2dyYW07CiB9
CiAKLVRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bShjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hh
ZGVyU291cmNlKQotICAgIDogbV9pZCgwKQorVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25z
dCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291
cmNlKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX2lkKDApCiAgICAgLCBtX3Zl
cnRleEF0dHJpYigwKQogICAgICwgbV92ZXJ0ZXhTaGFkZXIoMCkKICAgICAsIG1fZnJhZ21lbnRT
aGFkZXIoMCkKQEAgLTI1Niw0NiArMjQ4LDQ2IEBAIHZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW06OmluaXRpYWxpemVQcm9ncmFtKCkKIHsKICAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFk
ZXJTb3VyY2VQcm9ncmFtID0gdmVydGV4U2hhZGVyU291cmNlKCk7CiAgICAgY29uc3QgY2hhciog
ZnJhZ21lbnRTaGFkZXJTb3VyY2VQcm9ncmFtID0gZnJhZ21lbnRTaGFkZXJTb3VyY2UoKTsKLSAg
ICBHTHVpbnQgdmVydGV4U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7
Ci0gICAgR0x1aW50IGZyYWdtZW50U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRf
U0hBREVSKTsKLSAgICBnbFNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFk
ZXJTb3VyY2VQcm9ncmFtLCAwKTsKLSAgICBnbFNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwg
MSwgJmZyYWdtZW50U2hhZGVyU291cmNlUHJvZ3JhbSwgMCk7Ci0gICAgR0x1aW50IHByb2dyYW1J
RCA9IGdsQ3JlYXRlUHJvZ3JhbSgpOwotICAgIGdsQ29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIp
OwotICAgIGdsQ29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CisgICAgUGxhdGZvcm0zRE9i
amVjdCB2ZXJ0ZXhTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRl
eHQzRDo6VkVSVEVYX1NIQURFUik7CisgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNoYWRl
ciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9T
SEFERVIpOworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4
U2hhZGVyU291cmNlUHJvZ3JhbSk7CisgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UoZnJhZ21l
bnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyU291cmNlUHJvZ3JhbSk7CisgICAgUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtSUQgPSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKKyAgICBtX2NvbnRl
eHQtPmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmNvbXBpbGVT
aGFkZXIoZnJhZ21lbnRTaGFkZXIpOwogCi0gICAgZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2
ZXJ0ZXhTaGFkZXIpOwotICAgIGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRTaGFk
ZXIpOwotICAgIGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlEKTsKKyAgICBtX2NvbnRleHQtPmF0dGFj
aFNoYWRlcihwcm9ncmFtSUQsIHZlcnRleFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5hdHRhY2hT
aGFkZXIocHJvZ3JhbUlELCBmcmFnbWVudFNoYWRlcik7CisgICAgbV9jb250ZXh0LT5saW5rUHJv
Z3JhbShwcm9ncmFtSUQpOwogCi0gICAgbV92ZXJ0ZXhBdHRyaWIgPSBnbEdldEF0dHJpYkxvY2F0
aW9uKHByb2dyYW1JRCwgImFfdmVydGV4Iik7CisgICAgbV92ZXJ0ZXhBdHRyaWIgPSBtX2NvbnRl
eHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdmVydGV4Iik7CiAKICAgICBtX2lk
ID0gcHJvZ3JhbUlEOwogICAgIG1fdmVydGV4U2hhZGVyID0gdmVydGV4U2hhZGVyOwogICAgIG1f
ZnJhZ21lbnRTaGFkZXIgPSBmcmFnbWVudFNoYWRlcjsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKEdMaW50ICZ2YXJpYWJsZSwgY29uc3Qg
Y2hhciogbmFtZSkKK3ZvaWQgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmdldFVuaWZvcm1M
b2NhdGlvbihHQzNEaW50ICZ2YXJpYWJsZSwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICB2YXJp
YWJsZSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1faWQsIG5hbWUpOworICAgIHZhcmlhYmxlID0g
bV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9pZCwgbmFtZSk7CiAgICAgQVNTRVJUKHZh
cmlhYmxlID49IDApOwogfQogCiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6flRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtKCkKIHsKLSAgICBHTHVpbnQgcHJvZ3JhbUlEID0gbV9pZDsKKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW1JRCA9IG1faWQ7CiAgICAgaWYgKCFwcm9ncmFtSUQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGdsRGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV92ZXJ0
ZXhTaGFkZXIpOwotICAgIGdsRGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKLSAgICBnbERl
dGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsRGVsZXRlU2hh
ZGVyKG1fZnJhZ21lbnRTaGFkZXIpOwotICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwor
ICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKHByb2dyYW1JRCwgbV92ZXJ0ZXhTaGFkZXIpOwor
ICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRl
eHQtPmRldGFjaFNoYWRlcihwcm9ncmFtSUQsIG1fZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29u
dGV4dC0+ZGVsZXRlU2hhZGVyKG1fZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGVs
ZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNp
bXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1TaW1wbGUoKQotICAgIDogVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNlU2ltcGxlLCBmcmFnbWVudFNoYWRl
clNvdXJjZVNpbXBsZSkKK1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxlOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAg
ICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJj
ZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VTaW1wbGUpCiB7CiAgICAgaW5pdGlhbGl6ZVBy
b2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9mbGlwTG9jYXRpb24sICJ1X2ZsaXAi
KTsKQEAgLTMwNCwxNiArMjk2LDE2IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxl
OjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpCiAgICAgZ2V0VW5pZm9ybUxvY2F0
aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7CiB9CiAKLVRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xpZENv
bG9yKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJj
ZVNvbGlkQ29sb3IsIGZyYWdtZW50U2hhZGVyU291cmNlU29saWRDb2xvcikKK1RleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtU29saWRDb2xvcjo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1Tb2xp
ZENvbG9yKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDogVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlU29saWRDb2xvciwgZnJhZ21l
bnRTaGFkZXJTb3VyY2VTb2xpZENvbG9yKQogewogICAgIGluaXRpYWxpemVQcm9ncmFtKCk7CiAg
ICAgZ2V0VW5pZm9ybUxvY2F0aW9uKG1fbWF0cml4TG9jYXRpb24sICJ1X21hdHJpeCIpOwogICAg
IGdldFVuaWZvcm1Mb2NhdGlvbihtX2NvbG9yTG9jYXRpb24sICJ1X2NvbG9yIik7CiB9CiAKLVRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZTo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1SZWN0U2ltcGxlKCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRl
eFNoYWRlclNvdXJjZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VSZWN0U2ltcGxlKQorVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlOjpUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbVJlY3RTaW1wbGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGUsIGZy
YWdtZW50U2hhZGVyU291cmNlUmVjdFNpbXBsZSkKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgp
OwogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsK
QEAgLTMyMyw4ICszMTUsOCBAQCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU6
OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgpCiAgICAgZ2V0VW5pZm9ybUxv
Y2F0aW9uKG1fb3BhY2l0eUxvY2F0aW9uLCAidV9vcGFjaXR5Iik7CiB9CiAKLVRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
T3BhY2l0eUFuZE1hc2soKQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odmVydGV4
U2hhZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0eUFu
ZE1hc2spCitUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrOjpUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KQorICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oY29udGV4dCwgdmVydGV4U2hh
ZGVyU291cmNlT3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50U2hhZGVyU291cmNlT3BhY2l0eUFuZE1h
c2spCiB7CiAgICAgaW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24o
bV9tYXRyaXhMb2NhdGlvbiwgInVfbWF0cml4Iik7CkBAIC0zMzQsOCArMzI2LDggQEAgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1PcGFjaXR5QW5kTWEKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9vcGFjaXR5TG9jYXRp
b24sICJ1X29wYWNpdHkiKTsKIH0KIAotVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3Bh
Y2l0eUFuZE1hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNr
KCkKLSAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZU9w
YWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5QW5kTWFzaykKK1Rl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrOjpUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayhHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKKyAgICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRl
clNvdXJjZU9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudFNoYWRlclNvdXJjZVJlY3RPcGFjaXR5QW5k
TWFzaykKIHsKICAgICBpbml0aWFsaXplUHJvZ3JhbSgpOwogICAgIGdldFVuaWZvcm1Mb2NhdGlv
bihtX21hdHJpeExvY2F0aW9uLCAidV9tYXRyaXgiKTsKQEAgLTM0NSw4ICszMzcsOCBAQCBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzazo6VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1SZWN0T3BhYwogICAgIGdldFVuaWZvcm1Mb2NhdGlvbihtX29wYWNpdHlMb2Nh
dGlvbiwgInVfb3BhY2l0eSIpOwogfQogCi1UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbUFudGlh
bGlhc2luZ05vTWFzazo6VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01h
c2soKQotICAgIDogVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU291cmNl
U2ltcGxlLCBmcmFnbWVudFNoYWRlclNvdXJjZUFudGlhbGlhc2luZ05vTWFzaykKK1RleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtQW50aWFsaWFzaW5nTm9NYXNrOjpUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbUFudGlhbGlhc2luZ05vTWFzayhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAg
ICA6IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJj
ZVNpbXBsZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2VBbnRpYWxpYXNpbmdOb01hc2spCiB7CiAgICAg
aW5pdGlhbGl6ZVByb2dyYW0oKTsKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9tYXRyaXhMb2Nh
dGlvbiwgInVfbWF0cml4Iik7CkBAIC0zNTYsOSArMzQ4LDkgQEAgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s6OlRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtQW50
aWFsaWEKICAgICBnZXRVbmlmb3JtTG9jYXRpb24obV9mbGlwTG9jYXRpb24sICJ1X2ZsaXAiKTsK
IH0KIAotVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyKCkKK1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0
KQogewotICAgIEFTU0VSVChpbml0aWFsaXplT3BlbkdMU2hpbXMoKSk7CiB9CiAKIFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKQpAQCAtMzcz
LDE4ICszNjUsMTkgQEAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6On5UZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcigpCiAKIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6flN0YW5kYXJkRmlsdGVy
UHJvZ3JhbSgpCiB7Ci0gICAgZ2xEZXRhY2hTaGFkZXIobV9pZCwgbV92ZXJ0ZXhTaGFkZXIpOwot
ICAgIGdsRGVsZXRlU2hhZGVyKG1fdmVydGV4U2hhZGVyKTsKLSAgICBnbERldGFjaFNoYWRlciht
X2lkLCBtX2ZyYWdtZW50U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hh
ZGVyKTsKLSAgICBnbERlbGV0ZVByb2dyYW0obV9pZCk7CisgICAgbV9jb250ZXh0LT5kZXRhY2hT
aGFkZXIobV9pZCwgbV92ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVy
KG1fdmVydGV4U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihtX2lkLCBtX2Zy
YWdtZW50U2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihtX2ZyYWdtZW50U2hh
ZGVyKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV9pZCk7CiB9CiAKLVN0YW5kYXJk
RmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3Bl
cmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQotICAgIDogbV9pZCgwKQorU3RhbmRhcmRG
aWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNz
KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX2lkKDApCiB7CiAgICAgY29uc3Qg
Y2hhciogdmVydGV4U2hhZGVyU291cmNlID0KLSAgICAgICAgICAgIFZFUlRFWF9TSEFERVIoCisg
ICAgICAgICAgICBTVFJJTkdJRlkoCiAgICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92
ZXJ0ZXg7CiAgICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV90ZXhDb29yZDsKICAgICAg
ICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhDb29yZDsKQEAgLTM5Niw4ICszODks
NyBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5kYXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJP
cGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAgICAgICAgICAgKTsKIAogI2RlZmluZSBT
VEFOREFSRF9GSUxURVIoeC4uLikgXAotICAgICAgICBPRVMyX1BSRUNJU0lPTl9ERUZJTklUSU9O
U1wKLSAgICAgICAgT0VTMl9GUkFHTUVOVF9TSEFERVJfREVGQVVMVF9QUkVDSVNJT05cCisgICAg
ICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiJcCiAgICAgICAgICJ2YXJ5aW5nIGhpZ2hw
IHZlYzIgdl90ZXhDb29yZDtcbiJcCiAgICAgICAgICJ1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYW1v
dW50O1xuIlwKICAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbiJcCkBAIC00
OTAsNyArNDgyLDggQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dy
YW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKICAgICAgICAgKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6Ci0gICAgICAgIGZyYWdt
ZW50U2hhZGVyU291cmNlID0gRlJBR01FTlRfU0hBREVSKAorICAgICAgICBmcmFnbWVudFNoYWRl
clNvdXJjZSA9IFNUUklOR0lGWSgKKyAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0
OwogICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7CiAgICAgICAgICAg
ICB1bmlmb3JtIGxvd3AgdmVjMiB1X2JsdXJSYWRpdXM7CiAgICAgICAgICAgICB1bmlmb3JtIHNh
bXBsZXIyRCB1X3RleHR1cmU7CkBAIC01MjMsNyArNTE2LDggQEAgU3RhbmRhcmRGaWx0ZXJQcm9n
cmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBl
IHR5cGUKICAgICAgICAgc3dpdGNoIChwYXNzKSB7CiAgICAgICAgIGNhc2UgMDogewogICAgICAg
ICAgICAgLy8gRmlyc3QgcGFzczogaG9yaXpvbnRhbCBhbHBoYSBibHVyLgotICAgICAgICAgICAg
ZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBGUkFHTUVOVF9TSEFERVIoCisgICAgICAgICAgICBmcmFn
bWVudFNoYWRlclNvdXJjZSA9IFNUUklOR0lGWSgKKyAgICAgICAgICAgICAgICBwcmVjaXNpb24g
bWVkaXVtcCBmbG9hdDsKICAgICAgICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl90ZXhD
b29yZDsKICAgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9zaGFkb3dCbHVyUmFk
aXVzOwogICAgICAgICAgICAgICAgIHVuaWZvcm0gbG93cCB2ZWMyIHVfc2hhZG93T2Zmc2V0OwpA
QCAtNTU2LDcgKzU1MCw4IEBAIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6U3RhbmRhcmRGaWx0ZXJQ
cm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlCiAgICAgICAgICAgICB9
CiAgICAgICAgIGNhc2UgMTogewogICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHZlcnRpY2Fs
IGFscGhhIGJsdXIgYW5kIGNvbXBvc2l0ZSB3aXRoIG9yaWdpbi4KLSAgICAgICAgICAgIGZyYWdt
ZW50U2hhZGVyU291cmNlID0gRlJBR01FTlRfU0hBREVSKAorICAgICAgICAgICAgZnJhZ21lbnRT
aGFkZXJTb3VyY2UgPSBTVFJJTkdJRlkoCisgICAgICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1
bXAgZmxvYXQ7CiAgICAgICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7
CiAgICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IHVfc2hhZG93Qmx1clJhZGl1czsK
ICAgICAgICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjNCB1X3NoYWRvd0NvbG9yOwpAQCAtNjAy
LDI2ICs1OTcsMjUgQEAgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtOjpTdGFuZGFyZEZpbHRlclByb2dy
YW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUKIAogICAgIGlmICghZnJhZ21l
bnRTaGFkZXJTb3VyY2UpCiAgICAgICAgIHJldHVybjsKLSAgICBHTHVpbnQgdmVydGV4U2hhZGVy
ID0gZ2xDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7Ci0gICAgR0x1aW50IGZyYWdtZW50
U2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSKTsKLSAgICBnbFNoYWRl
clNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIDEsICZ2ZXJ0ZXhTaGFkZXJTb3VyY2UsIDApOwotICAgIGds
U2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCAxLCAmZnJhZ21lbnRTaGFkZXJTb3VyY2UsIDAp
OwotICAgIEdMdWludCBwcm9ncmFtSUQgPSBnbENyZWF0ZVByb2dyYW0oKTsKLSAgICBnbENvbXBp
bGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBnbENvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFk
ZXIpOworICAgIFBsYXRmb3JtM0RPYmplY3QgdmVydGV4U2hhZGVyID0gbV9jb250ZXh0LT5jcmVh
dGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpOworICAgIFBsYXRmb3Jt
M0RPYmplY3QgZnJhZ21lbnRTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKTsKKyAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJj
ZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNoYWRlclNvdXJjZSk7CisgICAgbV9jb250ZXh0LT5zaGFk
ZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyU291cmNlKTsKKyAgICBQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW1JRCA9IG1fY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOworICAg
IG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4dC0+
Y29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgIEdM
Y2hhciBsb2dbMTAwXTsKLSAgICBHTGludCBsZW47Ci0gICAgZ2xHZXRTaGFkZXJJbmZvTG9nKGZy
YWdtZW50U2hhZGVyLCAxMDAsICZsZW4sIGxvZyk7CisgICAgU3RyaW5nIGxvZzsKKyAgICBtX2Nv
bnRleHQtPmdldFNoYWRlckluZm9Mb2coZnJhZ21lbnRTaGFkZXIpOwogICAgIFdURkxvZygmTG9n
Q29tcG9zaXRpbmcsICIlc1xuIiwgbG9nKTsKICNlbmRpZgotICAgIGdsQXR0YWNoU2hhZGVyKHBy
b2dyYW1JRCwgdmVydGV4U2hhZGVyKTsKLSAgICBnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZy
YWdtZW50U2hhZGVyKTsKLSAgICBnbExpbmtQcm9ncmFtKHByb2dyYW1JRCk7CisgICAgbV9jb250
ZXh0LT5hdHRhY2hTaGFkZXIocHJvZ3JhbUlELCB2ZXJ0ZXhTaGFkZXIpOworICAgIG1fY29udGV4
dC0+YXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgZnJhZ21lbnRTaGFkZXIpOworICAgIG1fY29udGV4
dC0+bGlua1Byb2dyYW0ocHJvZ3JhbUlEKTsKIAotICAgIG1fdmVydGV4QXR0cmliID0gZ2xHZXRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3ZlcnRleCIpOwotICAgIG1fdGV4Q29vcmRBdHRy
aWIgPSBnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW1JRCwgImFfdGV4Q29vcmQiKTsKLSAgICBt
X3RleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQs
ICJ1X3RleHR1cmUiKTsKKyAgICBtX3ZlcnRleEF0dHJpYiA9IG1fY29udGV4dC0+Z2V0QXR0cmli
TG9jYXRpb24ocHJvZ3JhbUlELCAiYV92ZXJ0ZXgiKTsKKyAgICBtX3RleENvb3JkQXR0cmliID0g
bV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSUQsICJhX3RleENvb3JkIik7Cisg
ICAgbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRp
b24ocHJvZ3JhbUlELCAidV90ZXh0dXJlIik7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
U0VQSUE6CkBAIC02MzEsMjEgKzYyNSwyMSBAQCBTdGFuZGFyZEZpbHRlclByb2dyYW06OlN0YW5k
YXJkRmlsdGVyUHJvZ3JhbShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZQogICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpDT05UUkFTVDoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAg
ICAgbV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dy
YW1JRCwgInVfYW1vdW50Iik7CisgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5hbW91bnQgPSBt
X2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2Ftb3VudCIpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKLSAgICAgICAgbV91
bmlmb3JtTG9jYXRpb25zLmJsdXIucmFkaXVzID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3Jh
bUlELCAidV9ibHVyUmFkaXVzIik7Ci0gICAgICAgIG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLmdh
dXNzaWFuS2VybmVsID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9nYXVzc2lh
bktlcm5lbCIpOworICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5yYWRpdXMgPSBtX2Nv
bnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2JsdXJSYWRpdXMiKTsKKyAg
ICAgICAgbV91bmlmb3JtTG9jYXRpb25zLmJsdXIuZ2F1c3NpYW5LZXJuZWwgPSBtX2NvbnRleHQt
PmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKLSAgICAg
ICAgbV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzID0gZ2xHZXRVbmlmb3JtTG9j
YXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dCbHVyUmFkaXVzIik7Ci0gICAgICAgIG1fdW5pZm9y
bUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3NpYW5LZXJuZWwgPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtSUQsICJ1X2dhdXNzaWFuS2VybmVsIik7CisgICAgICAgIG1fdW5pZm9ybUxvY2F0aW9u
cy5zaGFkb3cuYmx1clJhZGl1cyA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dy
YW1JRCwgInVfc2hhZG93Qmx1clJhZGl1cyIpOworICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMu
c2hhZG93LmdhdXNzaWFuS2VybmVsID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJv
Z3JhbUlELCAidV9nYXVzc2lhbktlcm5lbCIpOwogICAgICAgICBpZiAoIXBhc3MpCi0gICAgICAg
ICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93Lm9mZnNldCA9IGdsR2V0VW5pZm9ybUxvY2F0
aW9uKHByb2dyYW1JRCwgInVfc2hhZG93T2Zmc2V0Iik7CisgICAgICAgICAgICBtX3VuaWZvcm1M
b2NhdGlvbnMuc2hhZG93Lm9mZnNldCA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW1JRCwgInVfc2hhZG93T2Zmc2V0Iik7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
Ly8gV2Ugb25seSBuZWVkIHRoZSBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBpbiB0aGUg
c2Vjb25kIHBhc3MsIHRoZSBmaXJzdCBwYXNzIGlzIG9ubHkgYSBob3Jpem9udGFsIGFscGhhIGJs
dXIuCi0gICAgICAgICAgICBtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbG9yID0gZ2xHZXRV
bmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlELCAidV9zaGFkb3dDb2xvciIpOwotICAgICAgICAgICAg
bV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb250ZW50VGV4dHVyZSA9IGdsR2V0VW5pZm9ybUxv
Y2F0aW9uKHByb2dyYW1JRCwgInVfY29udGVudFRleHR1cmUiKTsKKyAgICAgICAgICAgIG1fdW5p
Zm9ybUxvY2F0aW9ucy5zaGFkb3cuY29sb3IgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlv
bihwcm9ncmFtSUQsICJ1X3NoYWRvd0NvbG9yIik7CisgICAgICAgICAgICBtX3VuaWZvcm1Mb2Nh
dGlvbnMuc2hhZG93LmNvbnRlbnRUZXh0dXJlID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRp
b24ocHJvZ3JhbUlELCAidV9jb250ZW50VGV4dHVyZSIpOwogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6CkBAIC02NTYsOSArNjUwLDkgQEAgU3RhbmRhcmRGaWx0ZXJQcm9n
cmFtOjpTdGFuZGFyZEZpbHRlclByb2dyYW0oRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBl
IHR5cGUKICAgICBtX2ZyYWdtZW50U2hhZGVyID0gZnJhZ21lbnRTaGFkZXI7CiB9CiAKLVBhc3NS
ZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBTdGFuZGFyZEZpbHRlclByb2dyYW06OmNyZWF0
ZShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKK1Bh
c3NSZWZQdHI8U3RhbmRhcmRGaWx0ZXJQcm9ncmFtPiBTdGFuZGFyZEZpbHRlclByb2dyYW06OmNy
ZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRp
b25UeXBlIHR5cGUsIHVuc2lnbmVkIHBhc3MpCiB7Ci0gICAgUmVmUHRyPFN0YW5kYXJkRmlsdGVy
UHJvZ3JhbT4gcHJvZ3JhbSA9IGFkb3B0UmVmKG5ldyBTdGFuZGFyZEZpbHRlclByb2dyYW0odHlw
ZSwgcGFzcykpOworICAgIFJlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IHByb2dyYW0gPSBh
ZG9wdFJlZihuZXcgU3RhbmRhcmRGaWx0ZXJQcm9ncmFtKGNvbnRleHQsIHR5cGUsIHBhc3MpKTsK
ICAgICBpZiAoIXByb2dyYW0tPm1faWQpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC02OTQsMjEg
KzY4OCwyMSBAQCBzdGF0aWMgZmxvYXQqIGdhdXNzaWFuS2VybmVsKCkKICAgICByZXR1cm4ga2Vy
bmVsOwogfQogCi12b2lkIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6cHJlcGFyZShjb25zdCBGaWx0
ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwgdW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgR0x1aW50IGNvbnRlbnRUZXh0dXJlKQordm9pZCBTdGFuZGFyZEZpbHRlclByb2dyYW06OnBy
ZXBhcmUoY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHBhc3MsIGNv
bnN0IEludFNpemUmIHNpemUsIEdDM0R1aW50IGNvbnRlbnRUZXh0dXJlKQogewotICAgIGdsVXNl
UHJvZ3JhbShtX2lkKTsKKyAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0obV9pZCk7CiAgICAgc3dp
dGNoIChvcGVyYXRpb24uZ2V0T3BlcmF0aW9uVHlwZSgpKSB7CiAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkdSQVlTQ0FMRToKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CiAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpIVUVfUk9UQVRFOgotICAgICAgICBnbFVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuYW1v
dW50LCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJj4o
b3BlcmF0aW9uKS5hbW91bnQoKSk7CisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1fdW5p
Zm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhG
aWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QlJJR0hUTkVTUzoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CiAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIGdsVW5pZm9ybTFmKG1fdW5p
Zm9ybUxvY2F0aW9ucy5hbW91bnQsIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJh
bnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKKyAgICAgICAgbV9j
b250ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9jYXRpb25zLmFtb3VudCwgc3RhdGljX2Nhc3Q8
Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbiku
YW1vdW50KCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxV
UjogewogICAgICAgICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyID0gc3RhdGljX2Nh
c3Q8Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbik7CkBAIC03MjAsOCArNzE0
LDggQEAgdm9pZCBTdGFuZGFyZEZpbHRlclByb2dyYW06OnByZXBhcmUoY29uc3QgRmlsdGVyT3Bl
cmF0aW9uJiBvcGVyYXRpb24sIHVuc2lnbmVkIHAKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
cmFkaXVzLnNldFdpZHRoKGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ci5zdGREZXZpYXRpb24oKSwg
c2l6ZS53aWR0aCgpKSAvIHNpemUud2lkdGgoKSk7CiAKLSAgICAgICAgZ2xVbmlmb3JtMmYobV91
bmlmb3JtTG9jYXRpb25zLmJsdXIucmFkaXVzLCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdo
dCgpKTsKLSAgICAgICAgZ2xVbmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLmdhdXNz
aWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7
CisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKG1fdW5pZm9ybUxvY2F0aW9ucy5ibHVyLnJh
ZGl1cywgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSk7CisgICAgICAgIG1fY29udGV4
dC0+dW5pZm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuYmx1ci5nYXVzc2lhbktlcm5lbCwgR0FV
U1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2VybmVsKCkpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7CkBAIC03
MjksMjAgKzcyMywyMCBAQCB2b2lkIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6cHJlcGFyZShjb25z
dCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwgdW5zaWduZWQgcAogICAgICAgICBzd2l0Y2gg
KHBhc3MpIHsKICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgLy8gRmlyc3QgcGFzczogdmVy
dGljYWwgYWxwaGEgYmx1ci4KLSAgICAgICAgICAgIGdsVW5pZm9ybTJmKG1fdW5pZm9ybUxvY2F0
aW9ucy5zaGFkb3cub2Zmc2V0LCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQo
c2l6ZS53aWR0aCgpKSwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUu
aGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGdsVW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5z
aGFkb3cuYmx1clJhZGl1cywgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS53aWR0
aCgpKSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm0xZnYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRv
dy5nYXVzc2lhbktlcm5lbCwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEgsIGdhdXNzaWFuS2Vy
bmVsKCkpOworICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobV91bmlmb3JtTG9jYXRp
b25zLnNoYWRvdy5vZmZzZXQsIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigpLngoKSkgLyBmbG9hdChz
aXplLndpZHRoKCkpLCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS55KCkpIC8gZmxvYXQoc2l6ZS5o
ZWlnaHQoKSkpOworICAgICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobV91bmlmb3JtTG9j
YXRpb25zLnNoYWRvdy5ibHVyUmFkaXVzLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChz
aXplLndpZHRoKCkpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihtX3VuaWZv
cm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lBTl9LRVJORUxfSEFMRl9X
SURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSAxOgogICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHdlIG5lZWQgdGhlIHNoYWRvdyBjb2xv
ciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3IgY29tcG9zaXRpbmcuCi0gICAgICAgICAgICBn
bFVuaWZvcm0xZihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmJsdXJSYWRpdXMsIHNoYWRvdy5z
dGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGdsVW5p
Zm9ybTFmdihtX3VuaWZvcm1Mb2NhdGlvbnMuc2hhZG93LmdhdXNzaWFuS2VybmVsLCBHQVVTU0lB
Tl9LRVJORUxfSEFMRl9XSURUSCwgZ2F1c3NpYW5LZXJuZWwoKSk7Ci0gICAgICAgICAgICBnbEFj
dGl2ZVRleHR1cmUoR0xfVEVYVFVSRTEpOwotICAgICAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCBjb250ZW50VGV4dHVyZSk7Ci0gICAgICAgICAgICBnbFVuaWZvcm0xaShtX3Vu
aWZvcm1Mb2NhdGlvbnMuc2hhZG93LmNvbnRlbnRUZXh0dXJlLCAxKTsKKyAgICAgICAgICAgIG1f
Y29udGV4dC0+dW5pZm9ybTFmKG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuYmx1clJhZGl1cywg
c2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAg
ICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KG1fdW5pZm9ybUxvY2F0aW9ucy5zaGFkb3cuZ2F1c3Np
YW5LZXJuZWwsIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRILCBnYXVzc2lhbktlcm5lbCgpKTsK
KyAgICAgICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRTEpOworICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgY29udGVudFRleHR1cmUpOworICAgICAgICAgICAgbV9jb250
ZXh0LT51bmlmb3JtMWkobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb250ZW50VGV4dHVyZSwg
MSk7CiAgICAgICAgICAgICBmbG9hdCByLCBnLCBiLCBhOwogICAgICAgICAgICAgc2hhZG93LmNv
bG9yKCkuZ2V0UkdCQShyLCBnLCBiLCBhKTsKLSAgICAgICAgICAgIGdsVW5pZm9ybTRmKG1fdW5p
Zm9ybUxvY2F0aW9ucy5zaGFkb3cuY29sb3IsIHIsIGcsIGIsIGEpOworICAgICAgICAgICAgbV9j
b250ZXh0LT51bmlmb3JtNGYobV91bmlmb3JtTG9jYXRpb25zLnNoYWRvdy5jb2xvciwgciwgZywg
YiwgYSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAg
LTc1OSw3ICs3NTMsNyBAQCBQYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlckZvckZpbHRlcgogICAgIGludCBrZXkgPSBp
bnQodHlwZSkgfCAocGFzcyA8PCAxNik7CiAgICAgRmlsdGVyTWFwOjppdGVyYXRvciBpdGVyYXRv
ciA9IG1fZmlsdGVyTWFwLmZpbmQoa2V5KTsKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9maWx0ZXJN
YXAuZW5kKCkpIHsKLSAgICAgICAgcHJvZ3JhbSA9IFN0YW5kYXJkRmlsdGVyUHJvZ3JhbTo6Y3Jl
YXRlKHR5cGUsIHBhc3MpOworICAgICAgICBwcm9ncmFtID0gU3RhbmRhcmRGaWx0ZXJQcm9ncmFt
OjpjcmVhdGUobV9jb250ZXh0LCB0eXBlLCBwYXNzKTsKICAgICAgICAgaWYgKCFwcm9ncmFtKQog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmgKaW5kZXggNzg1NDk4ZS4uMWZmYjcxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmgKQEAgLTI0LDkgKzI0LDkgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKIAogI2luY2x1ZGUgIkZsb2F0UXVhZC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgot
I2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4
LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgpAQCAtNDQsMzkgKzQ0LDQwIEBAIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwog
CiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiB7CiBwdWJsaWM6Ci0gICAgR0x1aW50IGlkKCkgeyBy
ZXR1cm4gbV9pZDsgfQotICAgIEdMdWludCB2ZXJ0ZXhBdHRyaWIoKSB7IHJldHVybiBtX3ZlcnRl
eEF0dHJpYjsgfQorICAgIFBsYXRmb3JtM0RPYmplY3QgaWQoKSB7IHJldHVybiBtX2lkOyB9Cisg
ICAgR0MzRHVpbnQgdmVydGV4QXR0cmliKCkgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWI7IH0KIAot
ICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNv
dXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpOworICAgIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgY2hhciogdmVydGV4U2hh
ZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSk7CiAgICAgdmlydHVh
bCB+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwcmVw
YXJlKGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqKSB7IH0KLSAgICBHTGludCBt
YXRyaXhMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4TG9jYXRpb247IH0KLSAgICBH
TGludCBmbGlwTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZsaXBMb2NhdGlvbjsgfQotICAg
IEdMaW50IHRleHR1cmVTaXplTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVTaXpl
TG9jYXRpb247IH0KLSAgICBHTGludCBzb3VyY2VUZXh0dXJlTG9jYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZVRleHR1cmVMb2NhdGlvbjsgfQotICAgIEdMaW50IG1hc2tUZXh0dXJlTG9j
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hc2tUZXh0dXJlTG9jYXRpb247IH0KLSAgICBHTGlu
dCBvcGFjaXR5TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHlMb2NhdGlvbjsgfQor
ICAgIEdDM0RpbnQgbWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hdHJpeExvY2F0
aW9uOyB9CisgICAgR0MzRGludCBmbGlwTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZsaXBM
b2NhdGlvbjsgfQorICAgIEdDM0RpbnQgdGV4dHVyZVNpemVMb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fdGV4dHVyZVNpemVMb2NhdGlvbjsgfQorICAgIEdDM0RpbnQgc291cmNlVGV4dHVyZUxv
Y2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VUZXh0dXJlTG9jYXRpb247IH0KKyAgICBH
QzNEaW50IG1hc2tUZXh0dXJlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hc2tUZXh0dXJl
TG9jYXRpb247IH0KKyAgICBHQzNEaW50IG9wYWNpdHlMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fb3BhY2l0eUxvY2F0aW9uOyB9CiAKLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVW5pZm9ybUxv
Y2F0aW9uKEdMaW50IGxvY2F0aW9uKSB7IHJldHVybiBsb2NhdGlvbiA+PSAwOyB9CisgICAgc3Rh
dGljIGJvb2wgaXNWYWxpZFVuaWZvcm1Mb2NhdGlvbihHQzNEaW50IGxvY2F0aW9uKSB7IHJldHVy
biBsb2NhdGlvbiA+PSAwOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGdldFVuaWZvcm1Mb2Nh
dGlvbihHTGludCYgdmFyLCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB2b2lkIGdldFVuaWZvcm1M
b2NhdGlvbihHQzNEaW50JiB2YXIsIGNvbnN0IGNoYXIqIG5hbWUpOwogICAgIHZvaWQgaW5pdGlh
bGl6ZVByb2dyYW0oKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpIHsgfQogICAgIGNv
bnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4U2hh
ZGVyU291cmNlLmRhdGEoKTsgfQogICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNl
KCkgY29uc3QgeyByZXR1cm4gbV9mcmFnbWVudFNoYWRlclNvdXJjZS5kYXRhKCk7IH0KIAotICAg
IEdMdWludCBtX2lkOwotICAgIEdMdWludCBtX3ZlcnRleEF0dHJpYjsKLSAgICBHTHVpbnQgbV92
ZXJ0ZXhTaGFkZXI7Ci0gICAgR0x1aW50IG1fZnJhZ21lbnRTaGFkZXI7Ci0gICAgR0xpbnQgbV9t
YXRyaXhMb2NhdGlvbjsKLSAgICBHTGludCBtX2ZsaXBMb2NhdGlvbjsKLSAgICBHTGludCBtX3Rl
eHR1cmVTaXplTG9jYXRpb247Ci0gICAgR0xpbnQgbV9zb3VyY2VUZXh0dXJlTG9jYXRpb247Ci0g
ICAgR0xpbnQgbV9vcGFjaXR5TG9jYXRpb247Ci0gICAgR0xpbnQgbV9tYXNrVGV4dHVyZUxvY2F0
aW9uOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgUGxhdGZvcm0zRE9i
amVjdCBtX2lkOworICAgIEdDM0R1aW50IG1fdmVydGV4QXR0cmliOworICAgIFBsYXRmb3JtM0RP
YmplY3QgbV92ZXJ0ZXhTaGFkZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZyYWdtZW50U2hh
ZGVyOworICAgIEdDM0RpbnQgbV9tYXRyaXhMb2NhdGlvbjsKKyAgICBHQzNEaW50IG1fZmxpcExv
Y2F0aW9uOworICAgIEdDM0RpbnQgbV90ZXh0dXJlU2l6ZUxvY2F0aW9uOworICAgIEdDM0RpbnQg
bV9zb3VyY2VUZXh0dXJlTG9jYXRpb247CisgICAgR0MzRGludCBtX29wYWNpdHlMb2NhdGlvbjsK
KyAgICBHQzNEaW50IG1fbWFza1RleHR1cmVMb2NhdGlvbjsKIAogcHJpdmF0ZToKICAgICBDU3Ry
aW5nIG1fdmVydGV4U2hhZGVyU291cmNlOwpAQCAtODcsMzMgKzg4LDM2IEBAIHByaXZhdGU6CiBj
bGFzcyBTdGFuZGFyZEZpbHRlclByb2dyYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxTdGFuZGFyZEZp
bHRlclByb2dyYW0+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TdGFuZGFyZEZpbHRlclByb2dy
YW0oKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShjb25zdCBGaWx0ZXJPcGVyYXRpb24mLCB1
bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRTaXplJiwgR0x1aW50IGNvbnRlbnRUZXh0dXJlKTsKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dyYW0+IGNyZWF0ZShGaWx0ZXJP
cGVyYXRpb246Ok9wZXJhdGlvblR5cGUsIHVuc2lnbmVkIHBhc3MpOwotICAgIEdMdWludCB2ZXJ0
ZXhBdHRyaWIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleEF0dHJpYjsgfQotICAgIEdMdWludCB0
ZXhDb29yZEF0dHJpYigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4Q29vcmRBdHRyaWI7IH0KLSAgICBH
THVpbnQgdGV4dHVyZVVuaWZvcm0oKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVVbmlmb3JtTG9j
YXRpb247IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZShjb25zdCBGaWx0ZXJPcGVyYXRpb24m
LCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRTaXplJiwgR0MzRHVpbnQgY29udGVudFRleHR1cmUp
OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0YW5kYXJkRmlsdGVyUHJvZ3JhbT4gY3JlYXRlKEdy
YXBoaWNzQ29udGV4dDNEKiwgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCB1bnNpZ25l
ZCBwYXNzKTsKKyAgICBHQzNEdWludCB2ZXJ0ZXhBdHRyaWIoKSBjb25zdCB7IHJldHVybiBtX3Zl
cnRleEF0dHJpYjsgfQorICAgIEdDM0R1aW50IHRleENvb3JkQXR0cmliKCkgY29uc3QgeyByZXR1
cm4gbV90ZXhDb29yZEF0dHJpYjsgfQorICAgIEdDM0R1aW50IHRleHR1cmVVbmlmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOyB9Citwcm90ZWN0ZWQ6CisgICAg
R3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKIHByaXZhdGU6Ci0gICAgU3RhbmRhcmRGaWx0
ZXJQcm9ncmFtKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgdW5zaWduZWQgcGFzcyk7
Ci0gICAgR0x1aW50IG1faWQ7Ci0gICAgR0x1aW50IG1fdmVydGV4U2hhZGVyOwotICAgIEdMdWlu
dCBtX2ZyYWdtZW50U2hhZGVyOwotICAgIEdMdWludCBtX3ZlcnRleEF0dHJpYjsKLSAgICBHTHVp
bnQgbV90ZXhDb29yZEF0dHJpYjsKLSAgICBHTHVpbnQgbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9u
OworICAgIFN0YW5kYXJkRmlsdGVyUHJvZ3JhbSgpOworICAgIFN0YW5kYXJkRmlsdGVyUHJvZ3Jh
bShHcmFwaGljc0NvbnRleHQzRCosIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgdW5z
aWduZWQgcGFzcyk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2lkOworICAgIFBsYXRmb3JtM0RP
YmplY3QgbV92ZXJ0ZXhTaGFkZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZyYWdtZW50U2hh
ZGVyOworICAgIEdDM0R1aW50IG1fdmVydGV4QXR0cmliOworICAgIEdDM0R1aW50IG1fdGV4Q29v
cmRBdHRyaWI7CisgICAgR0MzRHVpbnQgbV90ZXh0dXJlVW5pZm9ybUxvY2F0aW9uOwogICAgIHVu
aW9uIHsKLSAgICAgICAgR0x1aW50IGFtb3VudDsKKyAgICAgICAgR0MzRHVpbnQgYW1vdW50Owog
CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBHTHVpbnQgcmFkaXVzOwotICAgICAgICAg
ICAgR0x1aW50IGdhdXNzaWFuS2VybmVsOworICAgICAgICAgICAgR0MzRHVpbnQgcmFkaXVzOwor
ICAgICAgICAgICAgR0MzRHVpbnQgZ2F1c3NpYW5LZXJuZWw7CiAgICAgICAgIH0gYmx1cjsKIAog
ICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR0x1aW50IGJsdXJSYWRpdXM7Ci0gICAgICAg
ICAgICBHTHVpbnQgY29sb3I7Ci0gICAgICAgICAgICBHTHVpbnQgb2Zmc2V0OwotICAgICAgICAg
ICAgR0x1aW50IGNvbnRlbnRUZXh0dXJlOwotICAgICAgICAgICAgR0x1aW50IGdhdXNzaWFuS2Vy
bmVsOworICAgICAgICAgICAgR0MzRHVpbnQgYmx1clJhZGl1czsKKyAgICAgICAgICAgIEdDM0R1
aW50IGNvbG9yOworICAgICAgICAgICAgR0MzRHVpbnQgb2Zmc2V0OworICAgICAgICAgICAgR0Mz
RHVpbnQgY29udGVudFRleHR1cmU7CisgICAgICAgICAgICBHQzNEdWludCBnYXVzc2lhbktlcm5l
bDsKICAgICAgICAgfSBzaGFkb3c7CiAgICAgfSBtX3VuaWZvcm1Mb2NhdGlvbnM7CiB9OwpAQCAt
MTIxLDc3ICsxMjUsODkgQEAgcHJpdmF0ZToKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1TaW1wbGUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0gewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxl
PiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU2ltcGxlPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU2ltcGxl
KCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtU2ltcGxlKGNvbnRleHQpKTsKICAgICB9CiAKIHByb3RlY3RlZDoKKyAgICBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbVNpbXBsZShHcmFwaGljc0NvbnRleHQzRCopOworcHJpdmF0ZToKICAg
ICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNpbXBsZSgpOwogfTsKIAogY2xhc3MgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGU+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1SZWN0U2ltcGxlPiBjcmVhdGUoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNpbXBsZSgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RTaW1wbGUoY29udGV4dCkpOwog
ICAgIH0KIAorcHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdFNp
bXBsZShHcmFwaGljc0NvbnRleHQzRCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbVJlY3RTaW1wbGUoKTsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtT3BhY2l0eUFuZE1hc2sgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0g
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtT3BhY2l0eUFuZE1hc2s+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaz4gY3JlYXRlKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbU9wYWNpdHlBbmRNYXNrKCkpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtT3BhY2l0eUFuZE1hc2soY29udGV4
dCkpOwogICAgIH0KIAorcHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
T3BhY2l0eUFuZE1hc2soR3JhcGhpY3NDb250ZXh0M0QqKTsKIHByaXZhdGU6CiAgICAgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1PcGFjaXR5QW5kTWFzaygpOwogfTsKIAogY2xhc3MgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1SZWN0T3BhY2l0eUFuZE1hc2sgOiBwdWJsaWMgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrPiBjcmVhdGUoKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRN
YXNrPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtUmVjdE9wYWNpdHlB
bmRNYXNrKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtUmVjdE9wYWNpdHlBbmRNYXNrKGNvbnRleHQpKTsKICAgICB9CiAKK3Byb3RlY3Rl
ZDoKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVJlY3RPcGFjaXR5QW5kTWFzayhHcmFw
aGljc0NvbnRleHQzRCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bVJlY3RPcGFjaXR5QW5kTWFzaygpOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1Tb2xpZENvbG9yIDogcHVibGljIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbVNv
bGlkQ29sb3I+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1Tb2xpZENvbG9yPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQp
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtU29saWRDb2xvcigpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbVNvbGlkQ29sb3IoY29udGV4dCkpOwogICAgIH0KIAotICAgIEdM
aW50IGNvbG9yTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbG9yTG9jYXRpb247IH0KKyAg
ICBHQzNEaW50IGNvbG9yTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbG9yTG9jYXRpb247
IH0KIAorcHJvdGVjdGVkOgorICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtU29saWRDb2xv
cihHcmFwaGljc0NvbnRleHQzRCopOwogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbVNvbGlkQ29sb3IoKTsKLSAgICBHTGludCBtX2NvbG9yTG9jYXRpb247CisgICAgR0Mz
RGludCBtX2NvbG9yTG9jYXRpb247CiB9OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbUFudGlhbGlhc2luZ05vTWFzayA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW1BbnRpYWxpYXNpbmdOb01hc2s+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2s+IGNyZWF0ZShHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2soKSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxp
YXNpbmdOb01hc2soY29udGV4dCkpOwogICAgIH0KIAotICAgIEdMaW50IGV4cGFuZGVkUXVhZFZl
cnRpY2VzSW5UZXh0dXJlQ29vcmRpbmF0ZXNMb2NhdGlvbigpIHsgcmV0dXJuIG1fZXhwYW5kZWRR
dWFkVmVydGljZXNJblRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247IH0KLSAgICBHTGludCBleHBh
bmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbigpIHsgcmV0dXJuIG1fZXhwYW5kZWRR
dWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb247IH0KKyAgICBHQzNEaW50IGV4cGFuZGVkUXVh
ZFZlcnRpY2VzSW5UZXh0dXJlQ29vcmRpbmF0ZXNMb2NhdGlvbigpIHsgcmV0dXJuIG1fZXhwYW5k
ZWRRdWFkVmVydGljZXNJblRleHR1cmVDb3JkaW5hdGVzTG9jYXRpb247IH0KKyAgICBHQzNEaW50
IGV4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZUxvY2F0aW9uKCkgeyByZXR1cm4gbV9leHBh
bmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbjsgfQogCitwcm90ZWN0ZWQ6CisgICAg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxpYXNpbmdOb01hc2soR3JhcGhpY3NDb250
ZXh0M0QqKTsKIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1BbnRpYWxp
YXNpbmdOb01hc2soKTsKIAotICAgIEdMaW50IG1fZXhwYW5kZWRRdWFkVmVydGljZXNJblRleHR1
cmVDb3JkaW5hdGVzTG9jYXRpb247Ci0gICAgR0xpbnQgbV9leHBhbmRlZFF1YWRFZGdlc0luU2Ny
ZWVuU3BhY2VMb2NhdGlvbjsKKyAgICBHQzNEaW50IG1fZXhwYW5kZWRRdWFkVmVydGljZXNJblRl
eHR1cmVDb3JkaW5hdGVzTG9jYXRpb247CisgICAgR0MzRGludCBtX2V4cGFuZGVkUXVhZEVkZ2Vz
SW5TY3JlZW5TcGFjZUxvY2F0aW9uOwogfTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXIgewpAQCAtMjA2LDcgKzIyMiw4IEBAIHB1YmxpYzoKICAgICAgICAgU29saWRDb2xvcgog
ICAgIH07CiAKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpOworICAgIFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyKCkgeyB9CisgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIo
R3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcigpOwogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQpAQCAtMjIxLDEyICsyMzgsMTIgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8U2hhZGVyVHlwZSwgUmVmUHRy
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiwgRGVmYXVsdEhhc2g8aW50Pjo6SGFzaCwgSGFz
aFRyYWl0czxpbnQ+ID4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7CiAgICAgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW1NYXAgbV90ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDsK
KyAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwogCiAjaWYgRU5BQkxFKENTU19GSUxU
RVJTKQogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxTdGFuZGFyZEZpbHRlclByb2dy
YW0+ID4gRmlsdGVyTWFwOwogICAgIEZpbHRlck1hcCBtX2ZpbHRlck1hcDsKICNlbmRpZgotCiB9
OwogCiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>