<?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>93252</bug_id>
          
          <creation_ts>2012-08-06 03:54:23 -0700</creation_ts>
          <short_desc>Make GraphicsSurface double buffered by default.</short_desc>
          <delta_ts>2012-08-16 06:24:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>79169</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zeno Albisser">zeno</reporter>
          <assigned_to name="Zeno Albisser">zeno</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>cmarrin</cc>
    
    <cc>dino</cc>
    
    <cc>eric</cc>
    
    <cc>hausmann</cc>
    
    <cc>jamesr</cc>
    
    <cc>jesus</cc>
    
    <cc>kbr</cc>
    
    <cc>lauro.neto</cc>
    
    <cc>noam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>687980</commentid>
    <comment_count>0</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-08-06 03:54:23 -0700</bug_when>
    <thetext>The current GraphicsSurface implementation is mainly used for WebGL.
To achieve a reasonable performance, WebGL requires at least two buffers. Therefore we currently create two GraphicsSurfaces on mac so we can switch between them.
On Linux nevertheless we only create a single GraphicsSurface, because the GraphicsSurfaceGLX is backed by an XWindow which already has a front and a back buffer.

We should unify this behaviour and only create a single GraphicsSurface which always provides two buffers on the writing side.
For mac this would mean that a GraphicsSurface will be backed by two IOSurfaces that will be used alternated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688055</commentid>
    <comment_count>1</comment_count>
      <attachid>156673</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-08-06 05:52:54 -0700</bug_when>
    <thetext>Created attachment 156673
patch for feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688083</commentid>
    <comment_count>2</comment_count>
      <attachid>156673</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-06 06:30:35 -0700</bug_when>
    <thetext>Comment on attachment 156673
patch for feedback.

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

Make sure this doesn&apos;t break WebGL on WebKit1.

&gt; Source/WebCore/ChangeLog:9
&gt; +        two provide a front and a back buffer.

two -&gt; to

&gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:267
&gt; -    const QOpenGLContext* currentContext = QOpenGLContext::currentContext();
&gt; -    QSurface* currentSurface = 0;
&gt; -    if (currentContext != m_platformContext) {
&gt; -        currentSurface = currentContext-&gt;surface();
&gt; +    if (QOpenGLContext::currentContext() != m_platformContext)
&gt;          m_platformContext-&gt;makeCurrent(m_surface);
&gt; -    }
&gt; +
&gt;      blitMultisampleFramebuffer();
&gt; -    if (currentSurface)
&gt; -        const_cast&lt;QOpenGLContext*&gt;(currentContext)-&gt;makeCurrent(currentSurface);
&gt; +    m_platformContext-&gt;makeCurrent(m_surface);

This will break WebGL on WebKit1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688119</commentid>
    <comment_count>3</comment_count>
      <attachid>156673</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-08-06 07:34:23 -0700</bug_when>
    <thetext>Comment on attachment 156673
patch for feedback.

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

&gt;&gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:267
&gt;&gt; +    m_platformContext-&gt;makeCurrent(m_surface);
&gt; 
&gt; This will break WebGL on WebKit1.

Good point! I&apos;ll look at this again.

Do you agree with the general direction of the patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688120</commentid>
    <comment_count>4</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-06 07:36:00 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 156673 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=156673&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:267
&gt; &gt;&gt; +    m_platformContext-&gt;makeCurrent(m_surface);
&gt; &gt; 
&gt; &gt; This will break WebGL on WebKit1.
&gt; 
&gt; Good point! I&apos;ll look at this again.
&gt; 
&gt; Do you agree with the general direction of the patch?

Definitely! Good work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690135</commentid>
    <comment_count>5</comment_count>
      <attachid>156673</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-08-08 04:14:15 -0700</bug_when>
    <thetext>Comment on attachment 156673
patch for feedback.

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp:267
&gt;&gt;&gt;&gt; +    m_platformContext-&gt;makeCurrent(m_surface);
&gt;&gt;&gt; 
&gt;&gt;&gt; This will break WebGL on WebKit1.
&gt;&gt; 
&gt;&gt; Good point! I&apos;ll look at this again.
&gt;&gt; 
&gt;&gt; Do you agree with the general direction of the patch?
&gt; 
&gt; Definitely! Good work.

I was wrong about this hunk. It is actually wrong and also unnecessary. - I will remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690137</commentid>
    <comment_count>6</comment_count>
      <attachid>157177</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-08-08 04:14:57 -0700</bug_when>
    <thetext>Created attachment 157177
patch for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690151</commentid>
    <comment_count>7</comment_count>
      <attachid>157177</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-08-08 04:43:23 -0700</bug_when>
    <thetext>Comment on attachment 157177
patch for review.

Patch needs to be rebased first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690181</commentid>
    <comment_count>8</comment_count>
      <attachid>157189</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-08-08 05:15:30 -0700</bug_when>
    <thetext>Created attachment 157189
patch for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690233</commentid>
    <comment_count>9</comment_count>
      <attachid>157189</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-08-08 06:03:49 -0700</bug_when>
    <thetext>Comment on attachment 157189
patch for review.

Attachment 157189 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13454490</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690246</commentid>
    <comment_count>10</comment_count>
      <attachid>157189</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-08-08 06:17:02 -0700</bug_when>
    <thetext>Comment on attachment 157189
patch for review.

Attachment 157189 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13456479</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690289</commentid>
    <comment_count>11</comment_count>
      <attachid>157213</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-08-08 07:23:04 -0700</bug_when>
    <thetext>Created attachment 157213
patch for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693869</commentid>
    <comment_count>12</comment_count>
      <attachid>157213</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-08-13 11:26:33 -0700</bug_when>
    <thetext>Comment on attachment 157213
patch for review.

Interesting. This looks good to me for what it&apos;s worth, but Noam should review it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697061</commentid>
    <comment_count>13</comment_count>
      <attachid>157213</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-08-16 06:24:44 -0700</bug_when>
    <thetext>Comment on attachment 157213
patch for review.

Clearing flags on attachment: 157213

Committed r125773: &lt;http://trac.webkit.org/changeset/125773&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697062</commentid>
    <comment_count>14</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-08-16 06:24:53 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156673</attachid>
            <date>2012-08-06 05:52:54 -0700</date>
            <delta_ts>2012-08-08 05:15:30 -0700</delta_ts>
            <desc>patch for feedback.</desc>
            <filename>93252_20120806-145111.patch</filename>
            <type>text/plain</type>
            <size>48625</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1YzJkNzA5Li5hNTY1NThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAx
IEBACisyMDEyLTA4LTA2ICBaZW5vIEFsYmlzc2VyICA8emVub0B3ZWJraXQub3JnPgorCisgICAg
ICAgIE1ha2UgR3JhcGhpY3NTdXJmYWNlIGRvdWJsZSBidWZmZXJlZCBieSBkZWZhdWx0LgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTMyNTIKKworICAg
ICAgICBDcmVhdGUgb25seSBhIHNpbmdsZSBHcmFwaGljc1N1cmZhY2UgcGVyIGNhbnZhcworICAg
ICAgICBvbiBib3RoIHN1cHBvcnRlZCBwbGF0Zm9ybXMgTWFjL0xpbnV4LgorICAgICAgICBUaGUg
R3JhcGhpY3NTdXJmYWNlIG9uIE1hYyBpbnRlcm5hbGx5IHVzZXMgdHdvIElPU3VyZmFjZQorICAg
ICAgICB0d28gcHJvdmlkZSBhIGZyb250IGFuZCBhIGJhY2sgYnVmZmVyLgorICAgICAgICBUaGUg
R0xYIGltcGxlbWVudGF0aW9uIG9mIEdyYXBoaWNzU3VyZmFjZSB1c2VzCisgICAgICAgIGFuIFhX
aW5kb3cgd2hpY2ggYWxyZWFkeSBwcm92aWRlcyBhIGZyb250IGFuZCBhIGJhY2sgYnVmZmVyLgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAgICAgUmVtb3ZlIGNyZWF0aW9uIG9mIHNlY29u
ZCBHcmFwaGljc1N1cmZhY2UuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z3Jh
cGhpY3NTdXJmYWNlVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpibGl0TXVsdGlzYW1wbGVGcmFtZWJ1ZmZlckFuZFJlc3RvcmVDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NT
dXJmYWNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NT
dXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKToK
KyAgICAgICAgICAgIEFkanVzdCB0b2tlbiB0eXBlIHRvIHVpbnQ2NF90LgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NTdXJmYWNlOjpleHBvcnRUb2tlbik6CisgICAgICAgICAgICBBZGp1c3Qg
cmV0dXJuIHR5cGUgdG8gdWludDY0X3QuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZh
Y2U6OmZyb250QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NTdXJmYWNlOjpzd2FwQnVmZmVycyk6CisgICAgICAgICAgICBBZGQgZm9yd2FyZGlu
ZyBmdW5jdGlvbiB0byBzd2FwIGJ1ZmZlcnMgaW5zaWRlIEdyYXBoaWNzU3VyZmFjZS4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuaDoKKyAgICAg
ICAgKEdyYXBoaWNzU3VyZmFjZSk6CisgICAgICAgICAgICBBZGQgU3VwcG9ydHNTaW5nbGVCdWZm
ZXJlZCBmbGFnIHRvIGFsbG93IGZvciBzaW5nbGUgYnVmZmVyZWQgaW1wbGVtZW50YXRpb25zLgor
ICAgICAgICAgICAgQ3VycmVudGx5IHNpbmdsZSBidWZmZXJlZCBzdXJmYWNlcyBhcmUgZWl0aGVy
IG5vdCBpbXBsZW1lbnRlZCBvciBkaXNhYmxlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9tYWMvR3JhcGhpY3NTdXJmYWNlTWFjLmNwcDoKKyAgICAgICAgICAgIE1vdmUg
aW1wbGVtZW50YXRpb24gZGV0YWlscyBpbnRvIEdyYXBoaWNzU3VyZmFjZVByaXZhdGUuCisgICAg
ICAgICAgICBUaGlzIHdheSB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgY29kZSBjYW4gYmUgaGlkZGVu
IGluIHRoZSBzcGVjaWZpYyBjcHAgZmlsZQorICAgICAgICAgICAgaW5zdGVhZCBvZiBwb2xsdXRp
bmcgdGhlIGdsb2JhbCBHcmFwaGljc1N1cmZhY2UgaGVhZGVyLgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChHcmFwaGljc1N1cmZhY2VQcml2YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OkdyYXBoaWNzU3VyZmFjZVByaXZh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6fkdyYXBoaWNz
U3VyZmFjZVByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0
ZTo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0
ZTo6dG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6ZnJv
bnRCdWZmZXJUZXh0dXJlSUQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJp
dmF0ZTo6YmFja0J1ZmZlclRleHR1cmVJRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1
cmZhY2VQcml2YXRlOjpmcm9udEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1
cmZhY2VQcml2YXRlOjpiYWNrQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUV4cG9ydCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtR2V0VGV4dHVyZUlEKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Db3B5VG9HTFRleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlGcm9tRnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUZyb250QnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Td2FwQnVmZmVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1JbXBvcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6aW9TdXJmYWNlTG9ja09wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NTdXJmYWNlOjpwbGF0Zm9ybVVubG9jayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1
cmZhY2U6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvcXQvR3JhcGhpY3NTdXJmYWNlR0xYLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZlNj
cmVlblJvb3RXaW5kb3c6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQ
cml2YXRlOjpzd2FwQnVmZmVycyk6CisgICAgICAgICAgICBNYWtlIHN1cmUgdGhhdCBmcmFtZWJ1
ZmZlciBiaW5kaW5ncyByZW1haW4gY29uc2lzdGVudAorICAgICAgICAgICAgYWZ0ZXIgc3dhcHBp
bmcgYnVmZmVycyBvbiB0aGUgWFdpbmRvdy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3Vy
ZmFjZTo6cGxhdGZvcm1FeHBvcnQpOgorICAgICAgICAgICAgTWFrZSBzdXJlIHRoZSBHTFhQaXht
YXAgaXMgb25seSBib3VuZCB0byB0aGUgdGV4dHVyZSBvbmNlLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUdldFRleHR1cmVJRCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29weUZyb21GcmFtZWJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1G
cm9udEJ1ZmZlcik6CisgICAgICAgICAgICBUaGUgR0xYIHN1cmZhY2UgZG9lcyBub3Qga25vdyBo
b3cgdG8gZGVzdGluZ3Vpc2ggYmV0d2VlbgorICAgICAgICAgICAgdGhlIGZyb250IGFuZCB0aGUg
YmFjayBidWZmZXIgYnkgYW4gaWQuIFRoaXMgaXMgbm90IG5lY2Vzc2FyeQorICAgICAgICAgICAg
Zm9yIEdyYXBoaWNzU3VyZmFjZUdMWCwgYmVjYXVzZSB0aGUgdGV4dHVyZSBjYW4ganVzdCBiZQor
ICAgICAgICAgICAgcmVhZCBmcm9tIHRoZSBYV2luZG93IGF0IGFueSB0aW1lLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybVN3YXBCdWZmZXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1DcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUltcG9ydCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwOgorICAgICAg
ICAgICAgUmVtb3ZlIGNvZGUgdGhhdCB3YXMgdXNlZCBmb3Igc3dpdGNoaW5nIGJldHdlZW4gdHdv
IEdyYXBoaWNzU3VyZmFjZXMsCisgICAgICAgICAgICBhcyB0aGlzIGlzIG5vdyBoYW5kbGVkIGRp
cmVjdGx5IGluc2lkZSBHcmFwaGljc1N1cmZhY2UuCisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6c2V0R3JhcGhpY3NTdXJmYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlOjpwYWludFRvVGV4dHVy
ZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdT
dG9yZTo6c2V0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oOgorICAgICAgICAg
ICAgUmVtb3ZlIEdyYXBoaWNzU3VyZmFjZURhdGEgc3RydWN0LiBUaGlzIGNsYXNzIGlzIG5vdCBu
ZWVkZWQgYW55bW9yZQorICAgICAgICAgICAgYXMgd2UgZG8gbm90IGtlZXAgdHJhY2sgb2YgbW9y
ZSB0aGFuIG9uZSBHcmFwaGljc1N1cmZhY2UgYXQgdGhlIHRpbWUuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlOjpncmFwaGljc1N1cmZh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU6
OlRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyOjpncmFwaGljc1N1cmZhY2VUb2tlbik6
CisKIDIwMTItMDgtMDYgIERvdWdsYXMgU3RvY2t3ZWxsICA8ZHN0b2Nrd2VsbEBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgQ3Jhc2ggaW4gV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OnVwZGF0ZU1h
cmtlckxvY2F0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCmluZGV4IDg5NWY3NjYuLjdjM2UwMWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
Q29udGV4dDNEUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCkBAIC03MSw2ICs3MSw3IEBAIHB1YmxpYzoKICNlbmRp
ZgogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQogICAgIHZpcnR1YWwgdWludDMyX3QgY29weVRv
R3JhcGhpY3NTdXJmYWNlKCk7CisgICAgdmlydHVhbCB1aW50NjRfdCBncmFwaGljc1N1cmZhY2VU
b2tlbigpIGNvbnN0OwogI2VuZGlmCiAKICAgICBRUmVjdEYgYm91bmRpbmdSZWN0KCkgY29uc3Q7
CkBAIC04NSw4ICs4Niw3IEBAIHB1YmxpYzoKICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
IG1fcGxhdGZvcm1Db250ZXh0OwogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQogICAgIEdyYXBo
aWNzU3VyZmFjZTo6RmxhZ3MgbV9zdXJmYWNlRmxhZ3M7Ci0gICAgUmVmUHRyPEdyYXBoaWNzU3Vy
ZmFjZT4gbV9mcm9udEJ1ZmZlckdyYXBoaWNzU3VyZmFjZTsKLSAgICBSZWZQdHI8R3JhcGhpY3NT
dXJmYWNlPiBtX2JhY2tCdWZmZXJHcmFwaGljc1N1cmZhY2U7CisgICAgUmVmUHRyPEdyYXBoaWNz
U3VyZmFjZT4gbV9ncmFwaGljc1N1cmZhY2U7CiAjZW5kaWYKIH07CiAKQEAgLTE0Miw4ICsxNDIs
NyBAQCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSAogICAgICAgICAgICAgICAgICAgICB8IEdyYXBo
aWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOwogCiAgICAgaWYgKCFzdXJmYWNlU2l6ZS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgbV9mcm9udEJ1ZmZlckdyYXBoaWNzU3VyZmFjZSA9IEdyYXBoaWNz
U3VyZmFjZTo6Y3JlYXRlKHN1cmZhY2VTaXplLCBtX3N1cmZhY2VGbGFncyk7Ci0gICAgICAgIG1f
YmFja0J1ZmZlckdyYXBoaWNzU3VyZmFjZSA9IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKHN1cmZh
Y2VTaXplLCBtX3N1cmZhY2VGbGFncyk7CisgICAgICAgIG1fZ3JhcGhpY3NTdXJmYWNlID0gR3Jh
cGhpY3NTdXJmYWNlOjpjcmVhdGUoc3VyZmFjZVNpemUsIG1fc3VyZmFjZUZsYWdzKTsKICAgICB9
CiAjZW5kaWYKIH0KQEAgLTIyMiwxNCArMjIxLDE5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVy
CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiB1aW50MzJfdCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpCiB7Ci0gICAgaWYgKCFtX2Zyb250QnVmZmVy
R3JhcGhpY3NTdXJmYWNlIHx8ICFtX2JhY2tCdWZmZXJHcmFwaGljc1N1cmZhY2UpCisgICAgaWYg
KCFtX2dyYXBoaWNzU3VyZmFjZSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBibGl0TXVsdGlz
YW1wbGVGcmFtZWJ1ZmZlckFuZFJlc3RvcmVDb250ZXh0KCk7CiAgICAgbWFrZUN1cnJlbnRJZk5l
ZWRlZCgpOwotICAgIG1fYmFja0J1ZmZlckdyYXBoaWNzU3VyZmFjZS0+Y29weUZyb21GcmFtZWJ1
ZmZlcihtX2NvbnRleHQtPm1fZmJvLCBJbnRSZWN0KDAsIDAsIG1fY29udGV4dC0+bV9jdXJyZW50
V2lkdGgsIG1fY29udGV4dC0+bV9jdXJyZW50SGVpZ2h0KSk7Ci0gICAgc3RkOjpzd2FwKG1fZnJv
bnRCdWZmZXJHcmFwaGljc1N1cmZhY2UsIG1fYmFja0J1ZmZlckdyYXBoaWNzU3VyZmFjZSk7Ci0g
ICAgcmV0dXJuIG1fZnJvbnRCdWZmZXJHcmFwaGljc1N1cmZhY2UtPmV4cG9ydFRva2VuKCk7Cisg
ICAgbV9ncmFwaGljc1N1cmZhY2UtPmNvcHlGcm9tRnJhbWVidWZmZXIobV9jb250ZXh0LT5tX2Zi
bywgSW50UmVjdCgwLCAwLCBtX2NvbnRleHQtPm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQtPm1f
Y3VycmVudEhlaWdodCkpOworICAgIHVpbnQzMl90IGZyb250QnVmZmVyID0gbV9ncmFwaGljc1N1
cmZhY2UtPnN3YXBCdWZmZXJzKCk7CisgICAgcmV0dXJuIGZyb250QnVmZmVyOworfQorCit1aW50
NjRfdCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdyYXBoaWNzU3VyZmFjZVRva2VuKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9ncmFwaGljc1N1cmZhY2UtPmV4cG9ydFRva2VuKCk7CiB9CiAj
ZW5kaWYKIApAQCAtMjU2LDE1ICsyNjAsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmJsaXRNdWx0aXNhbXBsZUZyYW1lYnVmZmVyQW5kUmVzdG9yZUNvbnRleHQoKSBjb24KICAg
ICAgICAgcmV0dXJuOwogCiAjaWYgSEFWRShRVDUpCi0gICAgY29uc3QgUU9wZW5HTENvbnRleHQq
IGN1cnJlbnRDb250ZXh0ID0gUU9wZW5HTENvbnRleHQ6OmN1cnJlbnRDb250ZXh0KCk7Ci0gICAg
UVN1cmZhY2UqIGN1cnJlbnRTdXJmYWNlID0gMDsKLSAgICBpZiAoY3VycmVudENvbnRleHQgIT0g
bV9wbGF0Zm9ybUNvbnRleHQpIHsKLSAgICAgICAgY3VycmVudFN1cmZhY2UgPSBjdXJyZW50Q29u
dGV4dC0+c3VyZmFjZSgpOworICAgIGlmIChRT3BlbkdMQ29udGV4dDo6Y3VycmVudENvbnRleHQo
KSAhPSBtX3BsYXRmb3JtQ29udGV4dCkKICAgICAgICAgbV9wbGF0Zm9ybUNvbnRleHQtPm1ha2VD
dXJyZW50KG1fc3VyZmFjZSk7Ci0gICAgfQorCiAgICAgYmxpdE11bHRpc2FtcGxlRnJhbWVidWZm
ZXIoKTsKLSAgICBpZiAoY3VycmVudFN1cmZhY2UpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UU9wZW5H
TENvbnRleHQqPihjdXJyZW50Q29udGV4dCktPm1ha2VDdXJyZW50KGN1cnJlbnRTdXJmYWNlKTsK
KyAgICBtX3BsYXRmb3JtQ29udGV4dC0+bWFrZUN1cnJlbnQobV9zdXJmYWNlKTsKICNlbHNlCiAg
ICAgY29uc3QgUUdMQ29udGV4dCogY3VycmVudENvbnRleHQgPSBRR0xDb250ZXh0OjpjdXJyZW50
Q29udGV4dCgpOwogICAgIGNvbnN0IFFHTENvbnRleHQqIHdpZGdldENvbnRleHQgPSBtX3N1cmZh
Y2UtPmNvbnRleHQoKTsKQEAgLTI5OSwxMyArMjk5LDEwIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjptYWtlQ3VycmVudElmTmVlZGVkKCkgY29uc3QKIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc1N1cmZhY2VzKGNvbnN0IEludFNpemUmIHNpemUp
CiB7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgaWYgKHNpemUuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIG1fZnJvbnRCdWZmZXJHcmFwaGljc1N1cmZhY2UuY2xlYXIoKTsKLSAgICAgICAg
bV9iYWNrQnVmZmVyR3JhcGhpY3NTdXJmYWNlLmNsZWFyKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgbV9mcm9udEJ1ZmZlckdyYXBoaWNzU3VyZmFjZSA9IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRl
KHNpemUsIG1fc3VyZmFjZUZsYWdzKTsKLSAgICAgICAgbV9iYWNrQnVmZmVyR3JhcGhpY3NTdXJm
YWNlID0gR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoc2l6ZSwgbV9zdXJmYWNlRmxhZ3MpOwotICAg
IH0KKyAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIG1fZ3JhcGhpY3NTdXJmYWNlLmNs
ZWFyKCk7CisgICAgZWxzZQorICAgICAgICBtX2dyYXBoaWNzU3VyZmFjZSA9IEdyYXBoaWNzU3Vy
ZmFjZTo6Y3JlYXRlKHNpemUsIG1fc3VyZmFjZUZsYWdzKTsKICNlbmRpZgogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1
cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3Jh
cGhpY3NTdXJmYWNlLmNwcAppbmRleCAyYjhjZDY1Li41NWM2NDVhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNz
U3VyZmFjZS5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBo
aWNzU3VyZmFjZTo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCB1aW50
MzJfdCB0b2tlbikKK1Bhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGljc1N1cmZhY2U6
OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncywgdWludDY0X3QgdG9rZW4p
CiB7CiAgICAgcmV0dXJuIHBsYXRmb3JtSW1wb3J0KHNpemUsIGZsYWdzLCB0b2tlbik7CiB9CkBA
IC0zNSw3ICszNSw3IEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGljc1N1cmZh
Y2U6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBHcmFwaGljCiAgICAgcmV0dXJuIHBsYXRm
b3JtQ3JlYXRlKHNpemUsIGZsYWdzKTsKIH0KIAotdWludDMyX3QgR3JhcGhpY3NTdXJmYWNlOjpl
eHBvcnRUb2tlbigpCit1aW50NjRfdCBHcmFwaGljc1N1cmZhY2U6OmV4cG9ydFRva2VuKCkKIHsK
ICAgICByZXR1cm4gcGxhdGZvcm1FeHBvcnQoKTsKIH0KQEAgLTYzLDYgKzYzLDE2IEBAIHZvaWQg
R3JhcGhpY3NTdXJmYWNlOjpjb3B5RnJvbUZyYW1lYnVmZmVyKHVpbnQzMl90IGZibywgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjCiAgICAgcGxhdGZvcm1Db3B5RnJvbUZyYW1lYnVmZmVyKGZibywg
c291cmNlUmVjdCk7CiB9CiAKK3VpbnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6ZnJvbnRCdWZmZXIo
KQoreworICAgIHJldHVybiBwbGF0Zm9ybUZyb250QnVmZmVyKCk7Cit9CisKK3VpbnQzMl90IEdy
YXBoaWNzU3VyZmFjZTo6c3dhcEJ1ZmZlcnMoKQoreworICAgIHJldHVybiBwbGF0Zm9ybVN3YXBC
dWZmZXJzKCk7Cit9CisKIEdyYXBoaWNzU3VyZmFjZTo6R3JhcGhpY3NTdXJmYWNlKGNvbnN0IElu
dFNpemUmIHNpemUsIEZsYWdzIGZsYWdzKQogICAgIDogbV9mbGFncyhmbGFncykKICAgICAsIG1f
c2l6ZShzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuaAppbmRleCA3YWVlZDc5Li5lOGFjNTM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFw
aGljc1N1cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9HcmFwaGljc1N1cmZhY2UuaApAQCAtNTAsNyArNTAsOCBAQCBwdWJsaWM6CiAgICAgICAg
IFN1cHBvcnRzVGV4dHVyZVNvdXJjZSA9IDB4MTAsCiAgICAgICAgIFN1cHBvcnRzQ29weVRvVGV4
dHVyZSA9IDB4MjAsCiAgICAgICAgIFN1cHBvcnRzQ29weUZyb21UZXh0dXJlID0gMHg0MCwKLSAg
ICAgICAgU3VwcG9ydHNTaGFyaW5nID0gMHg4MAorICAgICAgICBTdXBwb3J0c1NoYXJpbmcgPSAw
eDgwLAorICAgICAgICBTdXBwb3J0c1NpbmdsZUJ1ZmZlcmVkID0gMHgxMDAKICAgICB9OwogCiAg
ICAgZW51bSBMb2NrT3B0aW9uIHsKQEAgLTY2LDEwICs2NywxMiBAQCBwdWJsaWM6CiAgICAgSW50
U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxHcmFwaGljc1N1cmZhY2U+IGNyZWF0ZShjb25zdCBJbnRTaXplJiwgRmxhZ3MpOwotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gY3JlYXRlKGNvbnN0IEludFNpemUm
LCBGbGFncywgdWludDMyX3QgdG9rZW4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNz
U3VyZmFjZT4gY3JlYXRlKGNvbnN0IEludFNpemUmLCBGbGFncywgdWludDY0X3QgdG9rZW4pOwog
ICAgIHZvaWQgY29weVRvR0xUZXh0dXJlKHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgdGV4dHVy
ZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UG9pbnQmIHNvdXJjZU9mZnNl
dCk7CiAgICAgdm9pZCBjb3B5RnJvbUZyYW1lYnVmZmVyKHVpbnQzMl90IGZibywgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCk7Ci0gICAgdWludDMyX3QgZXhwb3J0VG9rZW4oKTsKKyAgICB1aW50
MzJfdCBmcm9udEJ1ZmZlcigpOworICAgIHVpbnQzMl90IHN3YXBCdWZmZXJzKCk7CisgICAgdWlu
dDY0X3QgZXhwb3J0VG9rZW4oKTsKICAgICB1aW50MzJfdCBnZXRUZXh0dXJlSUQoKTsKICAgICBQ
YXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYmVnaW5QYWludChjb25zdCBJbnRSZWN0JiwgTG9j
a09wdGlvbnMpOwogICAgIFBhc3NSZWZQdHI8SW1hZ2U+IGNyZWF0ZVJlYWRPbmx5SW1hZ2UoY29u
c3QgSW50UmVjdCYpOwpAQCAtNzcsOCArODAsOCBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHBsYXRmb3JtQ3JlYXRlKGNvbnN0
IEludFNpemUmLCBGbGFncyk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNl
PiBwbGF0Zm9ybUltcG9ydChjb25zdCBJbnRTaXplJiwgRmxhZ3MsIHVpbnQzMl90KTsKLSAgICB1
aW50MzJfdCBwbGF0Zm9ybUV4cG9ydCgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNz
U3VyZmFjZT4gcGxhdGZvcm1JbXBvcnQoY29uc3QgSW50U2l6ZSYsIEZsYWdzLCB1aW50NjRfdCk7
CisgICAgdWludDY0X3QgcGxhdGZvcm1FeHBvcnQoKTsKICAgICB2b2lkIHBsYXRmb3JtRGVzdHJv
eSgpOwogCiAgICAgdWludDMyX3QgcGxhdGZvcm1HZXRUZXh0dXJlSUQoKTsKQEAgLTg2LDYgKzg5
LDggQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgcGxhdGZvcm1VbmxvY2soKTsKICAgICB2b2lkIHBs
YXRmb3JtQ29weVRvR0xUZXh0dXJlKHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgdGV4dHVyZSwg
Y29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50Jik7CiAgICAgdm9pZCBwbGF0Zm9ybUNvcHlG
cm9tRnJhbWVidWZmZXIodWludDMyX3QgZmJvLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KTsK
KyAgICB1aW50MzJfdCBwbGF0Zm9ybUZyb250QnVmZmVyKCkgY29uc3Q7CisgICAgdWludDMyX3Qg
cGxhdGZvcm1Td2FwQnVmZmVycygpOwogCiAgICAgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+
IHBsYXRmb3JtQmVnaW5QYWludChjb25zdCBJbnRTaXplJiwgY2hhciogYml0cywgaW50IHN0cmlk
ZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL21hYy9HcmFwaGljc1N1cmZhY2VNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHAKaW5kZXggYmZhMjBi
YS4uYjIxMWMxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHAKQEAg
LTMwLDEzICszMCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IEdyYXBoaWNz
U3VyZmFjZVByaXZhdGUgeyB9OwotCi11aW50MzJfdCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3Jt
RXhwb3J0KCkKLXsKLSAgICByZXR1cm4gSU9TdXJmYWNlR2V0SUQobV9wbGF0Zm9ybVN1cmZhY2Up
OwotfQotCiBzdGF0aWMgdWludDMyX3QgY3JlYXRlVGV4dHVyZShJT1N1cmZhY2VSZWYgaGFuZGxl
KQogewogICAgIEdMdWludCB0ZXh0dXJlID0gMDsKQEAgLTUyLDYgKzQ1LDcgQEAgc3RhdGljIHVp
bnQzMl90IGNyZWF0ZVRleHR1cmUoSU9TdXJmYWNlUmVmIGhhbmRsZSkKICAgICBnbEdldEludGVn
ZXJ2KEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgJnByZXZUZXh0dXJlKTsKICAgICBpZiAoIXdh
c0VuYWJsZWQpCiAgICAgICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQik7CisK
ICAgICBnbEdlblRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKICAgICBnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfUkVDVEFOR0xFX0FSQiwgdGV4dHVyZSk7CiAgICAgQ0dMRXJyb3IgZXJyb3IgPSBDR0xU
ZXhJbWFnZUlPU3VyZmFjZTJEKGNvbnRleHQsIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgaW50
ZXJuYWxGb3JtYXQsIElPU3VyZmFjZUdldFdpZHRoKGhhbmRsZSksIElPU3VyZmFjZUdldEhlaWdo
dChoYW5kbGUpLCBmb3JtYXQsIHR5cGUsIGhhbmRsZSwgMCk7CkBAIC02MywyMSArNTcsMTQ5IEBA
IHN0YXRpYyB1aW50MzJfdCBjcmVhdGVUZXh0dXJlKElPU3VyZmFjZVJlZiBoYW5kbGUpCiAgICAg
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIHByZXZUZXh0dXJlKTsKICAg
ICBpZiAoIXdhc0VuYWJsZWQpCiAgICAgICAgIGdsRGlzYWJsZShHTF9URVhUVVJFX1JFQ1RBTkdM
RV9BUkIpOworCiAgICAgcmV0dXJuIHRleHR1cmU7CiB9CiAKK3N0cnVjdCBHcmFwaGljc1N1cmZh
Y2VQcml2YXRlIHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc1N1cmZhY2VQcml2YXRlKHVpbnQ2NF90
IHRva2VuKQorICAgICAgICA6IG1fdG9rZW4odG9rZW4pCisgICAgICAgICwgbV9mcm9udEJ1ZmZl
clRleHR1cmUoMCkKKyAgICAgICAgLCBtX2JhY2tCdWZmZXJUZXh0dXJlKDApCisgICAgeworICAg
ICAgICAvLyBUaGUgdG9rZW4gY29udGFpbnMgdGhlIElPU3VyZmFjZUlEIG9mIHRoZSBmaXN0IHN1
cmZhY2UvYnVmZmVyIGluIHRoZSBmaXJzdCAzMiBCaXQKKyAgICAgICAgLy8gYW5kIHRoZSBJT1N1
cmZhY2VJRCBvZiB0aGUgc2Vjb25kIHN1cmZhY2UvYnVmZmVyIGluIHRoZSBzZWNvbmQgMzIgQml0
LgorICAgICAgICB1aW50MzJfdCBmcm9udEJ1ZmZlciA9IHRva2VuID4+IDMyOworICAgICAgICB1
aW50MzJfdCBiYWNrQnVmZmVyID0gdG9rZW4gJiAweGZmZmY7CisKKyAgICAgICAgbV9mcm9udEJ1
ZmZlciA9IElPU3VyZmFjZUxvb2t1cChmcm9udEJ1ZmZlcik7CisgICAgICAgIG1fYmFja0J1ZmZl
ciA9IElPU3VyZmFjZUxvb2t1cChiYWNrQnVmZmVyKTsKKyAgICB9CisKKyAgICBHcmFwaGljc1N1
cmZhY2VQcml2YXRlKGNvbnN0IEludFNpemUmIHNpemUsIEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3Mg
ZmxhZ3MpCisgICAgICAgIDogbV9mcm9udEJ1ZmZlclRleHR1cmUoMCkKKyAgICAgICAgLCBtX2Jh
Y2tCdWZmZXJUZXh0dXJlKDApCisgICAgeworICAgICAgICB1bnNpZ25lZCBwaXhlbEZvcm1hdCA9
ICdCR1JBJzsKKyAgICAgICAgdW5zaWduZWQgYnl0ZXNQZXJFbGVtZW50ID0gNDsKKyAgICAgICAg
aW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOworICAgICAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWln
aHQoKTsKKworICAgICAgICB1bnNpZ25lZCBsb25nIGJ5dGVzUGVyUm93ID0gSU9TdXJmYWNlQWxp
Z25Qcm9wZXJ0eShrSU9TdXJmYWNlQnl0ZXNQZXJSb3csIHdpZHRoICogYnl0ZXNQZXJFbGVtZW50
KTsKKyAgICAgICAgaWYgKCFieXRlc1BlclJvdykKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICB1bnNpZ25lZCBsb25nIGFsbG9jU2l6ZSA9IElPU3VyZmFjZUFsaWduUHJvcGVydHkoa0lP
U3VyZmFjZUFsbG9jU2l6ZSwgaGVpZ2h0ICogYnl0ZXNQZXJSb3cpOworICAgICAgICBpZiAoIWFs
bG9jU2l6ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjb25zdCB2b2lkICprZXlz
WzddOworICAgICAgICBjb25zdCB2b2lkICp2YWx1ZXNbN107CisgICAgICAgIGtleXNbMF0gPSBr
SU9TdXJmYWNlV2lkdGg7CisgICAgICAgIHZhbHVlc1swXSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtD
Rk51bWJlckludFR5cGUsICZ3aWR0aCk7CisgICAgICAgIGtleXNbMV0gPSBrSU9TdXJmYWNlSGVp
Z2h0OworICAgICAgICB2YWx1ZXNbMV0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJJbnRU
eXBlLCAmaGVpZ2h0KTsKKyAgICAgICAga2V5c1syXSA9IGtJT1N1cmZhY2VQaXhlbEZvcm1hdDsK
KyAgICAgICAgdmFsdWVzWzJdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVySW50VHlwZSwg
JnBpeGVsRm9ybWF0KTsKKyAgICAgICAga2V5c1szXSA9IGtJT1N1cmZhY2VCeXRlc1BlckVsZW1l
bnQ7CisgICAgICAgIHZhbHVlc1szXSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckludFR5
cGUsICZieXRlc1BlckVsZW1lbnQpOworICAgICAgICBrZXlzWzRdID0ga0lPU3VyZmFjZUJ5dGVz
UGVyUm93OworICAgICAgICB2YWx1ZXNbNF0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJM
b25nVHlwZSwgJmJ5dGVzUGVyUm93KTsKKyAgICAgICAga2V5c1s1XSA9IGtJT1N1cmZhY2VBbGxv
Y1NpemU7CisgICAgICAgIHZhbHVlc1s1XSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckxv
bmdUeXBlLCAmYWxsb2NTaXplKTsKKyAgICAgICAga2V5c1s2XSA9IGtJT1N1cmZhY2VJc0dsb2Jh
bDsKKyAgICAgICAgdmFsdWVzWzZdID0gKGZsYWdzICYgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0
c1NoYXJpbmcpID8ga0NGQm9vbGVhblRydWUgOiBrQ0ZCb29sZWFuRmFsc2U7CisKKyAgICAgICAg
Q0ZEaWN0aW9uYXJ5UmVmIGRpY3QgPSBDRkRpY3Rpb25hcnlDcmVhdGUoMCwga2V5cywgdmFsdWVz
LCA3LCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZh
bHVlQ2FsbEJhY2tzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDc7IGkrKykK
KyAgICAgICAgICAgIENGUmVsZWFzZSh2YWx1ZXNbaV0pOworCisgICAgICAgIG1fZnJvbnRCdWZm
ZXIgPSBJT1N1cmZhY2VDcmVhdGUoZGljdCk7CisgICAgICAgIG1fYmFja0J1ZmZlciA9IElPU3Vy
ZmFjZUNyZWF0ZShkaWN0KTsKKworICAgICAgICB1aW50NjRfdCB0b2tlbiA9IElPU3VyZmFjZUdl
dElEKG1fZnJvbnRCdWZmZXIpOworICAgICAgICB0b2tlbiA8PD0gMzI7CisgICAgICAgIHRva2Vu
IHw9IElPU3VyZmFjZUdldElEKG1fYmFja0J1ZmZlcik7CisKKyAgICAgICAgbV90b2tlbiA9IHRv
a2VuOworICAgIH0KKworICAgIH5HcmFwaGljc1N1cmZhY2VQcml2YXRlKCkKKyAgICB7CisgICAg
ICAgIGlmIChtX2Zyb250QnVmZmVyVGV4dHVyZSkKKyAgICAgICAgICAgIGdsRGVsZXRlVGV4dHVy
ZXMoMSwgJm1fZnJvbnRCdWZmZXJUZXh0dXJlKTsKKworICAgICAgICBpZiAobV9iYWNrQnVmZmVy
VGV4dHVyZSkKKyAgICAgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fYmFja0J1ZmZlclRl
eHR1cmUpOworCisgICAgICAgIGlmIChtX2Zyb250QnVmZmVyKQorICAgICAgICAgICAgQ0ZSZWxl
YXNlKElPU3VyZmFjZVJlZihtX2Zyb250QnVmZmVyKSk7CisKKyAgICAgICAgaWYgKG1fYmFja0J1
ZmZlcikKKyAgICAgICAgICAgIENGUmVsZWFzZShJT1N1cmZhY2VSZWYobV9iYWNrQnVmZmVyKSk7
CisgICAgfQorCisgICAgdWludDMyX3Qgc3dhcEJ1ZmZlcnMoKQorICAgIHsKKyAgICAgICAgc3Rk
Ojpzd2FwKG1fZnJvbnRCdWZmZXIsIG1fYmFja0J1ZmZlcik7CisgICAgICAgIHN0ZDo6c3dhcCht
X2Zyb250QnVmZmVyVGV4dHVyZSwgbV9iYWNrQnVmZmVyVGV4dHVyZSk7CisKKyAgICAgICAgcmV0
dXJuIElPU3VyZmFjZUdldElEKG1fZnJvbnRCdWZmZXIpOworICAgIH0KKworICAgIHVpbnQ2NF90
IHRva2VuKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Rva2VuOworICAgIH0KKwor
ICAgIHVpbnQzMl90IGZyb250QnVmZmVyVGV4dHVyZUlEKCkKKyAgICB7CisgICAgICAgIGlmICgh
bV9mcm9udEJ1ZmZlclRleHR1cmUpCisgICAgICAgICAgICBtX2Zyb250QnVmZmVyVGV4dHVyZSA9
IGNyZWF0ZVRleHR1cmUobV9mcm9udEJ1ZmZlcik7CisKKyAgICAgICAgcmV0dXJuIG1fZnJvbnRC
dWZmZXJUZXh0dXJlOworICAgIH0KKworICAgIHVpbnQzMl90IGJhY2tCdWZmZXJUZXh0dXJlSUQo
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2JhY2tCdWZmZXJUZXh0dXJlKQorICAgICAgICAgICAg
bV9iYWNrQnVmZmVyVGV4dHVyZSA9IGNyZWF0ZVRleHR1cmUobV9iYWNrQnVmZmVyKTsKKworICAg
ICAgICByZXR1cm4gbV9iYWNrQnVmZmVyVGV4dHVyZTsKKyAgICB9CisKKyAgICBQbGF0Zm9ybUdy
YXBoaWNzU3VyZmFjZSBmcm9udEJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9mcm9udEJ1ZmZlcjsKKyAgICB9CisKKyAgICBQbGF0Zm9ybUdyYXBoaWNzU3VyZmFjZSBiYWNr
QnVmZmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JhY2tCdWZmZXI7CisgICAg
fQorCitwcml2YXRlOgorICAgIFBsYXRmb3JtR3JhcGhpY3NTdXJmYWNlIG1fZnJvbnRCdWZmZXI7
CisgICAgUGxhdGZvcm1HcmFwaGljc1N1cmZhY2UgbV9iYWNrQnVmZmVyOworICAgIHVpbnQzMl90
IG1fZnJvbnRCdWZmZXJUZXh0dXJlOworICAgIHVpbnQzMl90IG1fYmFja0J1ZmZlclRleHR1cmU7
CisgICAgdWludDY0X3QgbV90b2tlbjsKK307CisKK3VpbnQ2NF90IEdyYXBoaWNzU3VyZmFjZTo6
cGxhdGZvcm1FeHBvcnQoKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnRva2VuKCk7Cit9CisK
IHVpbnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1HZXRUZXh0dXJlSUQoKQogewotICAg
IGlmICghbV90ZXh0dXJlKQotICAgICAgICBtX3RleHR1cmUgPSBjcmVhdGVUZXh0dXJlKG1fcGxh
dGZvcm1TdXJmYWNlKTsKLSAgICByZXR1cm4gbV90ZXh0dXJlOworICAgIHJldHVybiBtX3ByaXZh
dGUtPmZyb250QnVmZmVyVGV4dHVyZUlEKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NTdXJmYWNlOjpw
bGF0Zm9ybUNvcHlUb0dMVGV4dHVyZSh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IGlkLCBjb25z
dCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQogewogICAgIGds
UHVzaEF0dHJpYihHTF9BTExfQVRUUklCX0JJVFMpOwotICAgIGlmICghbV90ZXh0dXJlKQotICAg
ICAgICBtX3RleHR1cmUgPSBjcmVhdGVUZXh0dXJlKG1fcGxhdGZvcm1TdXJmYWNlKTsKICAgICBp
ZiAoIW1fZmJvKQogICAgICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pOwogICAgIGds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCAwKTsKQEAgLTg1LDcgKzIwNyw3
IEBAIHZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlUb0dMVGV4dHVyZSh1aW50MzJf
dCB0YXJnZXQsIHVpbnQzMl90IGlkLCBjb25zCiAgICAgZ2xFbmFibGUodGFyZ2V0KTsKICAgICBn
bEJpbmRUZXh0dXJlKHRhcmdldCwgaWQpOwogICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX1JFQURf
RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX1JFQURf
RlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9B
UkIsIG1fdGV4dHVyZSwgMCk7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9SRUFEX0ZS
QU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJC
LCBtX3ByaXZhdGUtPmZyb250QnVmZmVyVGV4dHVyZUlEKCksIDApOwogICAgIGdsQ29weVRleFN1
YkltYWdlMkQodGFyZ2V0LCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0UmVjdC55KCksIG9mZnNl
dC54KCksIG9mZnNldC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFyZ2V0UmVjdC5oZWlnaHQo
KSk7CiAgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9SRUFEX0ZSQU1FQlVGRkVSLCBHTF9D
T0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCAwLCAwKTsKICAgICBn
bEJpbmRGcmFtZWJ1ZmZlcihHTF9SRUFEX0ZSQU1FQlVGRkVSLCAwKTsKQEAgLTEwMSwxNiArMjIz
LDE1IEBAIHZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlUb0dMVGV4dHVyZSh1aW50
MzJfdCB0YXJnZXQsIHVpbnQzMl90IGlkLCBjb25zCiB2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxh
dGZvcm1Db3B5RnJvbUZyYW1lYnVmZmVyKHVpbnQzMl90IG9yaWdpbkZibywgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCkKIHsKICAgICBnbFB1c2hBdHRyaWIoR0xfQUxMX0FUVFJJQl9CSVRTKTsK
LSAgICBpZiAoIW1fdGV4dHVyZSkKLSAgICAgICAgbV90ZXh0dXJlID0gY3JlYXRlVGV4dHVyZSht
X3BsYXRmb3JtU3VyZmFjZSk7CiAgICAgaWYgKCFtX2ZibykKICAgICAgICAgZ2xHZW5GcmFtZWJ1
ZmZlcnMoMSwgJm1fZmJvKTsKKwogICAgIEdMaW50IG9sZEZCTzsKICAgICBnbEdldEludGVnZXJ2
KEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcsICZvbGRGQk8pOwogICAgIGdsRW5hYmxlKEdMX1RFWFRV
UkVfUkVDVEFOR0xFX0FSQik7CiAgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfUkVBRF9GUkFNRUJV
RkZFUiwgb3JpZ2luRmJvKTsKICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9EUkFXX0ZSQU1FQlVG
RkVSLCBtX2Zibyk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9EUkFXX0ZSQU1FQlVG
RkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBtX3Rl
eHR1cmUsIDApOworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRFJBV19GUkFNRUJVRkZF
UiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgbV9wcml2
YXRlLT5iYWNrQnVmZmVyVGV4dHVyZUlEKCksIDApOwogICAgIGdsQmxpdEZyYW1lYnVmZmVyKDAs
IDAsIHNvdXJjZVJlY3Qud2lkdGgoKSwgc291cmNlUmVjdC5oZWlnaHQoKSwgMCwgc291cmNlUmVj
dC5oZWlnaHQoKSwgc291cmNlUmVjdC53aWR0aCgpLCAwLCBHTF9DT0xPUl9CVUZGRVJfQklULCBH
TF9MSU5FQVIpOyAvLyBGbGlwIHRoZSB0ZXh0dXJlIHVwc2lkZSBkb3duLgogICAgIGdsRnJhbWVi
dWZmZXJUZXh0dXJlMkQoR0xfRFJBV19GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAs
IEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgMCwgMCk7CiAgICAgZ2xCaW5kRnJhbWVidWZmZXIo
R0xfRlJBTUVCVUZGRVIsIG9sZEZCTyk7CkBAIC0xMjAsNjcgKzI0MSw0NyBAQCB2b2lkIEdyYXBo
aWNzU3VyZmFjZTo6cGxhdGZvcm1Db3B5RnJvbUZyYW1lYnVmZmVyKHVpbnQzMl90IG9yaWdpbkZi
bywgY29uc3QgSW50UgogICAgIGdsRmx1c2goKTsKIH0KIAordWludDMyX3QgR3JhcGhpY3NTdXJm
YWNlOjpwbGF0Zm9ybUZyb250QnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSU9TdXJmYWNl
R2V0SUQobV9wcml2YXRlLT5mcm9udEJ1ZmZlcigpKTsKK30KKwordWludDMyX3QgR3JhcGhpY3NT
dXJmYWNlOjpwbGF0Zm9ybVN3YXBCdWZmZXJzKCkKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5z
d2FwQnVmZmVycygpOworfQorCiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gR3JhcGhpY3NT
dXJmYWNlOjpwbGF0Zm9ybUNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncykK
IHsKICAgICAvLyBXZSBjdXJyZW50bHkgZGlzYWJsZSBzdXBwb3J0IGZvciBDb3B5VG9UZXh0dXJl
IG9uIE1hYywgYmVjYXVzZSB0aGlzIGlzIHVzZWQgZm9yIHNpbmdsZSBidWZmZXJlZCBUaWxlcy4K
ICAgICAvLyBUaGUgc2luZ2xlIGJ1ZmZlcmVkIG5hdHVyZSBvZiB0aGlzIHJlcXVpcmVzIGEgY2Fs
bCB0byBnbEZsdXNoLCBhcyBkZXNjcmliZWQgaW4gcGxhdGZvcm1Db3B5VG9UZXh0dXJlLgogICAg
IC8vIFRoaXMgY2FsbCBibG9ja3MgdGhlIEdQVSBmb3IgYWJvdXQgNDBtcywgd2hpY2ggbWFrZXMg
c21vb3RoIGFuaW1hdGlvbnMgaW1wb3NzaWJsZS4KLSAgICBpZiAoZmxhZ3MgJiBTdXBwb3J0c0Nv
cHlUb1RleHR1cmUpCisgICAgaWYgKGZsYWdzICYgU3VwcG9ydHNDb3B5VG9UZXh0dXJlIHx8IGZs
YWdzICYgU3VwcG9ydHNTaW5nbGVCdWZmZXJlZCkKICAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8
R3JhcGhpY3NTdXJmYWNlPigpOwogCi0gICAgdW5zaWduZWQgcGl4ZWxGb3JtYXQgPSAnQkdSQSc7
Ci0gICAgdW5zaWduZWQgYnl0ZXNQZXJFbGVtZW50ID0gNDsKLSAgICBpbnQgd2lkdGggPSBzaXpl
LndpZHRoKCk7Ci0gICAgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7Ci0KLSAgICB1bnNpZ25l
ZCBsb25nIGJ5dGVzUGVyUm93ID0gSU9TdXJmYWNlQWxpZ25Qcm9wZXJ0eShrSU9TdXJmYWNlQnl0
ZXNQZXJSb3csIHdpZHRoICogYnl0ZXNQZXJFbGVtZW50KTsKLSAgICBpZiAoIWJ5dGVzUGVyUm93
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBsb25nIGFsbG9jU2l6ZSA9
IElPU3VyZmFjZUFsaWduUHJvcGVydHkoa0lPU3VyZmFjZUFsbG9jU2l6ZSwgaGVpZ2h0ICogYnl0
ZXNQZXJSb3cpOwotICAgIGlmICghYWxsb2NTaXplKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBjb25zdCB2b2lkICprZXlzWzddOwotICAgIGNvbnN0IHZvaWQgKnZhbHVlc1s3XTsKLSAg
ICBrZXlzWzBdID0ga0lPU3VyZmFjZVdpZHRoOwotICAgIHZhbHVlc1swXSA9IENGTnVtYmVyQ3Jl
YXRlKDAsIGtDRk51bWJlckludFR5cGUsICZ3aWR0aCk7Ci0gICAga2V5c1sxXSA9IGtJT1N1cmZh
Y2VIZWlnaHQ7Ci0gICAgdmFsdWVzWzFdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVySW50
VHlwZSwgJmhlaWdodCk7Ci0gICAga2V5c1syXSA9IGtJT1N1cmZhY2VQaXhlbEZvcm1hdDsKLSAg
ICB2YWx1ZXNbMl0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcGl4ZWxG
b3JtYXQpOwotICAgIGtleXNbM10gPSBrSU9TdXJmYWNlQnl0ZXNQZXJFbGVtZW50OwotICAgIHZh
bHVlc1szXSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckludFR5cGUsICZieXRlc1BlckVs
ZW1lbnQpOwotICAgIGtleXNbNF0gPSBrSU9TdXJmYWNlQnl0ZXNQZXJSb3c7Ci0gICAgdmFsdWVz
WzRdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVyTG9uZ1R5cGUsICZieXRlc1BlclJvdyk7
Ci0gICAga2V5c1s1XSA9IGtJT1N1cmZhY2VBbGxvY1NpemU7Ci0gICAgdmFsdWVzWzVdID0gQ0ZO
dW1iZXJDcmVhdGUoMCwga0NGTnVtYmVyTG9uZ1R5cGUsICZhbGxvY1NpemUpOwotICAgIGtleXNb
Nl0gPSBrSU9TdXJmYWNlSXNHbG9iYWw7Ci0gICAgdmFsdWVzWzZdID0gKGZsYWdzICYgR3JhcGhp
Y3NTdXJmYWNlOjpTdXBwb3J0c1NoYXJpbmcpID8ga0NGQm9vbGVhblRydWUgOiBrQ0ZCb29sZWFu
RmFsc2U7Ci0KLSAgICBDRkRpY3Rpb25hcnlSZWYgZGljdCA9IENGRGljdGlvbmFyeUNyZWF0ZSgw
LCBrZXlzLCB2YWx1ZXMsIDcsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5
cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCA3OyBpKyspCi0gICAgICAgIENGUmVsZWFzZSh2YWx1ZXNbaV0pOwotCiAgICAgUmVmUHRyPEdy
YXBoaWNzU3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc1N1cmZhY2Uoc2l6
ZSwgZmxhZ3MpKTsKLSAgICBzdXJmYWNlLT5tX3BsYXRmb3JtU3VyZmFjZSA9IElPU3VyZmFjZUNy
ZWF0ZShkaWN0KTsKLSAgICBpZiAoIXN1cmZhY2UtPm1fcGxhdGZvcm1TdXJmYWNlKQorICAgIHN1
cmZhY2UtPm1fcHJpdmF0ZSA9IG5ldyBHcmFwaGljc1N1cmZhY2VQcml2YXRlKHNpemUsIGZsYWdz
KTsKKworICAgIGlmICghc3VyZmFjZS0+bV9wcml2YXRlLT5mcm9udEJ1ZmZlcigpIHx8ICFzdXJm
YWNlLT5tX3ByaXZhdGUtPmJhY2tCdWZmZXIoKSkKICAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8
R3JhcGhpY3NTdXJmYWNlPigpOworCiAgICAgcmV0dXJuIHN1cmZhY2U7CiB9CiAKLVBhc3NSZWZQ
dHI8R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtSW1wb3J0KGNvbnN0
IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCB1aW50MzJfdCB0b2tlbikKK1Bhc3NSZWZQdHI8
R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtSW1wb3J0KGNvbnN0IElu
dFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCB1aW50NjRfdCB0b2tlbikKIHsKICAgICAvLyBXZSBj
dXJyZW50bHkgZGlzYWJsZSBzdXBwb3J0IGZvciBDb3B5VG9UZXh0dXJlIG9uIE1hYywgYmVjYXVz
ZSB0aGlzIGlzIHVzZWQgZm9yIHNpbmdsZSBidWZmZXJlZCBUaWxlcy4KICAgICAvLyBUaGUgc2lu
Z2xlIGJ1ZmZlcmVkIG5hdHVyZSBvZiB0aGlzIHJlcXVpcmVzIGEgY2FsbCB0byBnbEZsdXNoLCBh
cyBkZXNjcmliZWQgaW4gcGxhdGZvcm1Db3B5VG9UZXh0dXJlLgogICAgIC8vIFRoaXMgY2FsbCBi
bG9ja3MgdGhlIEdQVSBmb3IgYWJvdXQgNDBtcywgd2hpY2ggbWFrZXMgc21vb3RoIGFuaW1hdGlv
bnMgaW1wb3NzaWJsZS4KLSAgICBpZiAoZmxhZ3MgJiBTdXBwb3J0c0NvcHlUb1RleHR1cmUpCisg
ICAgaWYgKGZsYWdzICYgU3VwcG9ydHNDb3B5VG9UZXh0dXJlIHx8IGZsYWdzICYgU3VwcG9ydHNT
aW5nbGVCdWZmZXJlZCkKICAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNl
PigpOwogCiAgICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0UmVmKG5l
dyBHcmFwaGljc1N1cmZhY2Uoc2l6ZSwgZmxhZ3MpKTsKLSAgICBzdXJmYWNlLT5tX3BsYXRmb3Jt
U3VyZmFjZSA9IElPU3VyZmFjZUxvb2t1cCh0b2tlbik7Ci0gICAgaWYgKCFzdXJmYWNlLT5tX3Bs
YXRmb3JtU3VyZmFjZSkKKyAgICBzdXJmYWNlLT5tX3ByaXZhdGUgPSBuZXcgR3JhcGhpY3NTdXJm
YWNlUHJpdmF0ZSh0b2tlbik7CisKKyAgICBpZiAoIXN1cmZhY2UtPm1fcHJpdmF0ZS0+ZnJvbnRC
dWZmZXIoKSB8fCAhc3VyZmFjZS0+bV9wcml2YXRlLT5iYWNrQnVmZmVyKCkpCiAgICAgICAgIHJl
dHVybiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oKTsKKwogICAgIHJldHVybiBzdXJmYWNl
OwogfQogCkBAIC0xOTEsMzggKzI5Miw0MiBAQCBzdGF0aWMgaW50IGlvU3VyZmFjZUxvY2tPcHRp
b25zKGludCBsb2NrT3B0aW9ucykKICAgICAgICAgb3B0aW9ucyB8PSBrSU9TdXJmYWNlTG9ja1Jl
YWRPbmx5OwogICAgIGlmICghKGxvY2tPcHRpb25zICYgR3JhcGhpY3NTdXJmYWNlOjpSZXRhaW5Q
aXhlbHMpKQogICAgICAgICBvcHRpb25zIHw9IGtJT1N1cmZhY2VMb2NrQXZvaWRTeW5jOworCiAg
ICAgcmV0dXJuIG9wdGlvbnM7CiB9CiAKIGNoYXIqIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1M
b2NrKGNvbnN0IEludFJlY3QmIHJlY3QsIGludCogb3V0cHV0U3RyaWRlLCBMb2NrT3B0aW9ucyBs
b2NrT3B0aW9ucykKIHsKKyAgICAvLyBMb2NraW5nIGlzIG9ubHkgbmVjZXNzYXJ5IGZvciBzaW5n
bGUgYnVmZmVyZWQgdXNlLgorICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBvbmx5IGhhdmUgYSBmcm9u
dCBidWZmZXIsIHNvIHdlIG9ubHkgbG9jayB0aGlzIG9uZS4KICAgICBtX2xvY2tPcHRpb25zID0g
bG9ja09wdGlvbnM7Ci0gICAgSU9SZXR1cm4gc3RhdHVzID0gSU9TdXJmYWNlTG9jayhtX3BsYXRm
b3JtU3VyZmFjZSwgaW9TdXJmYWNlTG9ja09wdGlvbnMobV9sb2NrT3B0aW9ucyksIDApOworICAg
IElPUmV0dXJuIHN0YXR1cyA9IElPU3VyZmFjZUxvY2sobV9wcml2YXRlLT5mcm9udEJ1ZmZlcigp
LCBpb1N1cmZhY2VMb2NrT3B0aW9ucyhtX2xvY2tPcHRpb25zKSwgMCk7CiAgICAgaWYgKHN0YXR1
cyA9PSBrSU9SZXR1cm5DYW5ub3RMb2NrKSB7CiAgICAgICAgIG1fbG9ja09wdGlvbnMgfD0gUmV0
YWluUGl4ZWxzOwotICAgICAgICBJT1N1cmZhY2VMb2NrKG1fcGxhdGZvcm1TdXJmYWNlLCBpb1N1
cmZhY2VMb2NrT3B0aW9ucyhtX2xvY2tPcHRpb25zKSwgMCk7CisgICAgICAgIElPU3VyZmFjZUxv
Y2sobV9wcml2YXRlLT5mcm9udEJ1ZmZlcigpLCBpb1N1cmZhY2VMb2NrT3B0aW9ucyhtX2xvY2tP
cHRpb25zKSwgMCk7CiAgICAgfQogCi0gICAgaW50IHN0cmlkZSA9IElPU3VyZmFjZUdldEJ5dGVz
UGVyUm93KG1fcGxhdGZvcm1TdXJmYWNlKTsKKyAgICBpbnQgc3RyaWRlID0gSU9TdXJmYWNlR2V0
Qnl0ZXNQZXJSb3cobV9wcml2YXRlLT5mcm9udEJ1ZmZlcigpKTsKICAgICBpZiAob3V0cHV0U3Ry
aWRlKQogICAgICAgICAqb3V0cHV0U3RyaWRlID0gc3RyaWRlOwogCi0gICAgY2hhciogYmFzZSA9
IHN0YXRpY19jYXN0PGNoYXIqPihJT1N1cmZhY2VHZXRCYXNlQWRkcmVzcyhtX3BsYXRmb3JtU3Vy
ZmFjZSkpOworICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oSU9TdXJmYWNlR2V0
QmFzZUFkZHJlc3MobV9wcml2YXRlLT5mcm9udEJ1ZmZlcigpKSk7CisKICAgICByZXR1cm4gYmFz
ZSArIHN0cmlkZSAqIHJlY3QueSgpICsgcmVjdC54KCkgKiA0OwogfQogCiB2b2lkIEdyYXBoaWNz
U3VyZmFjZTo6cGxhdGZvcm1VbmxvY2soKQogewotICAgIElPU3VyZmFjZVVubG9jayhtX3BsYXRm
b3JtU3VyZmFjZSwgaW9TdXJmYWNlTG9ja09wdGlvbnMobV9sb2NrT3B0aW9ucyksIDApOworICAg
IElPU3VyZmFjZVVubG9jayhtX3ByaXZhdGUtPmZyb250QnVmZmVyKCksIGlvU3VyZmFjZUxvY2tP
cHRpb25zKG1fbG9ja09wdGlvbnMpLCAwKTsKIH0KIAogdm9pZCBHcmFwaGljc1N1cmZhY2U6OnBs
YXRmb3JtRGVzdHJveSgpCiB7CiAgICAgaWYgKG1fZmJvKQogICAgICAgICBnbERlbGV0ZUZyYW1l
YnVmZmVycygxLCAmbV9mYm8pOwotICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgIGdsRGVsZXRl
VGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgQ0ZSZWxlYXNlKElPU3VyZmFjZVJlZihtX3Bs
YXRmb3JtU3VyZmFjZSkpOworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIGRlbGV0ZSBtX3By
aXZhdGU7CisgICAgbV9wcml2YXRlID0gMDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvcXQvR3JhcGhpY3NTdXJmYWNlR0xYLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNz
U3VyZmFjZUdMWC5jcHAKaW5kZXggYWZjM2E4NC4uZWFiYjUyOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvcXQvR3JhcGhpY3NTdXJmYWNlR0xY
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9xdC9H
cmFwaGljc1N1cmZhY2VHTFguY3BwCkBAIC02MCw2ICs2MCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIFhDaGFuZ2VXaW5kb3dBdHRyaWJ1dGVzKGRweSwgd2luZG93LT5oYW5kbGUoKS0+d2luSWQo
KSwgWDExT3ZlcnJpZGVSZWRpcmVjdCwgJmF0dHJpYnV0ZXMpOwogICAgICAgICAgICAgd2luZG93
LT5zaG93KCk7CiAgICAgICAgIH0KKwogICAgICAgICByZXR1cm4gd2luZG93OwogICAgIH0KIApA
QCAtMTczLDYgKzE3NCwxMiBAQCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAKICAg
ICB2b2lkIHN3YXBCdWZmZXJzKCkKICAgICB7CisgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgeHBp
eG1hcCwgd2UgYXJlIG9uIHRoZSByZWFkaW5nIHNpZGUgYW5kIGRvIG5vdCB3YW50IHRvIHN3YXAg
YW55IGJ1ZmZlcnMuCisgICAgICAgIC8vIFRoZSBidWZmZXJzIGFyZSBiZWluZyBzd2l0Y2hlZCBv
biB0aGUgd3JpdGluZyBzaWRlLCB0aGUgcmVhZGluZyBzaWRlIGp1c3QgcmVhZHMKKyAgICAgICAg
Ly8gd2hhdGV2ZXIgdGV4dHVyZSB0aGUgWFdpbmRvdyBjb250YWlucy4KKyAgICAgICAgaWYgKG1f
eFBpeG1hcCkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBpZiAoIW1fc3VyZmFjZS0+
aXNWaXNpYmxlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTE4Miw4ICsxODksMTMgQEAg
c3RydWN0IEdyYXBoaWNzU3VyZmFjZVByaXZhdGUgewogICAgICAgICAgICAgUUNvcmVBcHBsaWNh
dGlvbjo6cHJvY2Vzc0V2ZW50cygpOwogCiAgICAgICAgIFFPcGVuR0xDb250ZXh0KiBnbENvbnRl
eHQgPSBRT3BlbkdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKTsKLSAgICAgICAgaWYgKG1fc3Vy
ZmFjZSAmJiBnbENvbnRleHQpCisgICAgICAgIGlmIChtX3N1cmZhY2UgJiYgZ2xDb250ZXh0KSB7
CisgICAgICAgICAgICBHTGludCBvbGRGQk87CisgICAgICAgICAgICBnbEdldEludGVnZXJ2KEdM
X0ZSQU1FQlVGRkVSX0JJTkRJTkcsICZvbGRGQk8pOworICAgICAgICAgICAgcEdsQmluZEZyYW1l
YnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBnbENvbnRleHQtPmRlZmF1bHRGcmFtZWJ1ZmZlck9iamVj
dCgpKTsKICAgICAgICAgICAgIGdsQ29udGV4dC0+c3dhcEJ1ZmZlcnMobV9zdXJmYWNlLmdldCgp
KTsKKyAgICAgICAgICAgIHBHbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgb2xkRkJP
KTsKKyAgICAgICAgfQogICAgIH0KIAogCkBAIC0yMjQsMjIgKzIzNiwyMiBAQCBzdGF0aWMgYm9v
bCByZXNvbHZlR0xNZXRob2RzKEdyYXBoaWNzU3VyZmFjZVByaXZhdGUqIHApCiAgICAgcmV0dXJu
IHJlc29sdmVkOwogfQogCi11aW50MzJfdCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRXhwb3J0
KCkKK3VpbnQ2NF90IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1FeHBvcnQoKQogewogICAgIHJl
dHVybiBtX3BsYXRmb3JtU3VyZmFjZTsKIH0KIAogdWludDMyX3QgR3JhcGhpY3NTdXJmYWNlOjpw
bGF0Zm9ybUdldFRleHR1cmVJRCgpCiB7Ci0gICAgaWYgKCFtX3RleHR1cmUpCisgICAgaWYgKCFt
X3RleHR1cmUpIHsKICAgICAgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLQotICAg
IGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICBnbFRleFBhcmFt
ZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwot
ICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIs
IEdMX0xJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIHBHbFhC
aW5kVGV4SW1hZ2VFWFQobV9wcml2YXRlLT5kaXNwbGF5KCksIG1fcHJpdmF0ZS0+Z2x4UGl4bWFw
KCksIEdMWF9GUk9OVF9FWFQsIDApOworICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG1fdGV4dHVyZSk7CisgICAgICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgIGdsVGV4UGFyYW1ldGVy
ZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAg
ICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xf
Q0xBTVBfVE9fRURHRSk7CisgICAgICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIHBHbFhCaW5kVGV4
SW1hZ2VFWFQobV9wcml2YXRlLT5kaXNwbGF5KCksIG1fcHJpdmF0ZS0+Z2x4UGl4bWFwKCksIEdM
WF9GUk9OVF9FWFQsIDApOworICAgIH0KIAogICAgIHJldHVybiBtX3RleHR1cmU7CiB9CkBAIC0y
NjMsMTQgKzI3NSwyNSBAQCB2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Db3B5RnJvbUZy
YW1lYnVmZmVyKHVpbnQzMl90IG9yaWdpbkZibywgY29uc3QgSW50UgogICAgIHBHbEJsaXRGcmFt
ZWJ1ZmZlcigwLCAwLCB3aWR0aCwgaGVpZ2h0LCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBHTF9DT0xP
Ul9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwogICAgIHBHbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFN
RUJVRkZFUiwgb2xkRkJPKTsKICAgICBnbFBvcEF0dHJpYigpOworfQogCit1aW50MzJfdCBHcmFw
aGljc1N1cmZhY2U6OnBsYXRmb3JtRnJvbnRCdWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiAw
OworfQorCit1aW50MzJfdCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtU3dhcEJ1ZmZlcnMoKQor
ewogICAgIG1fcHJpdmF0ZS0+c3dhcEJ1ZmZlcnMoKTsKKyAgICByZXR1cm4gMDsKIH0KIAogUGFz
c1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1DcmVhdGUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MpCiB7CiAgICAgLy8gWDExIGRvZXMgbm90
IHN1cHBvcnQgQ29weVRvVGV4dHVyZSwgc28gd2UgZG8gbm90IGNyZWF0ZSBhIEdyYXBoaWNzU3Vy
ZmFjZSBpZiB0aGlzIGlzIHJlcXVlc3RlZC4KLSAgICBpZiAoZmxhZ3MgJiBTdXBwb3J0c0NvcHlU
b1RleHR1cmUpCisgICAgLy8gR3JhcGhpY3NTdXJmYWNlR0xYIHVzZXMgYW4gWFdpbmRvdyBhcyBu
YXRpdmUgc3VyZmFjZS4gVGhpcyBvbmUgYWx3YXlzIGhhcyBhIGZyb250IGFuZCBhIGJhY2sgYnVm
ZmVyLgorICAgIC8vIFRoZXJlZm9yZSBzaW5nbGUgYnVmZmVyZWQgR3JhcGhpY3NTdXJmYWNlcyBh
cmUgbm90IHN1cHBvcnRlZC4KKyAgICBpZiAoZmxhZ3MgJiBTdXBwb3J0c0NvcHlUb1RleHR1cmUg
fHwgZmxhZ3MgJiBTdXBwb3J0c1NpbmdsZUJ1ZmZlcmVkKQogICAgICAgICByZXR1cm4gUGFzc1Jl
ZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CiAKICAgICBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBz
dXJmYWNlID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzU3VyZmFjZShzaXplLCBmbGFncykpOwpAQCAt
Mjg0LDEwICszMDcsMTIgQEAgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3Vy
ZmFjZTo6cGxhdGZvcm1DcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwKICAgICByZXR1cm4gc3Vy
ZmFjZTsKIH0KIAotUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6
cGxhdGZvcm1JbXBvcnQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MsIHVpbnQzMl90
IHRva2VuKQorUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6cGxh
dGZvcm1JbXBvcnQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MsIHVpbnQ2NF90IHRv
a2VuKQogewogICAgIC8vIFgxMSBkb2VzIG5vdCBzdXBwb3J0IENvcHlUb1RleHR1cmUsIHNvIHdl
IGRvIG5vdCBjcmVhdGUgYSBHcmFwaGljc1N1cmZhY2UgaWYgdGhpcyBpcyByZXF1ZXN0ZWQuCi0g
ICAgaWYgKGZsYWdzICYgU3VwcG9ydHNDb3B5VG9UZXh0dXJlKQorICAgIC8vIEdyYXBoaWNzU3Vy
ZmFjZUdMWCB1c2VzIGFuIFhXaW5kb3cgYXMgbmF0aXZlIHN1cmZhY2UuIFRoaXMgb25lIGFsd2F5
cyBoYXMgYSBmcm9udCBhbmQgYSBiYWNrIGJ1ZmZlci4KKyAgICAvLyBUaGVyZWZvcmUgc2luZ2xl
IGJ1ZmZlcmVkIEdyYXBoaWNzU3VyZmFjZXMgYXJlIG5vdCBzdXBwb3J0ZWQuCisgICAgaWYgKGZs
YWdzICYgU3VwcG9ydHNDb3B5VG9UZXh0dXJlIHx8IGZsYWdzICYgU3VwcG9ydHNTaW5nbGVCdWZm
ZXJlZCkKICAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPigpOwogCiAg
ICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0UmVmKG5ldyBHcmFwaGlj
c1N1cmZhY2Uoc2l6ZSwgZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0
b3JlLmNwcAppbmRleCA4ZDYwYzdiLi5iMjU4ZDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJCYWNraW5nU3RvcmUuY3BwCkBAIC0zNCwxNiArMzQsMTkgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotdm9pZCBUZXh0dXJlTWFwcGVyU3VyZmFj
ZUJhY2tpbmdTdG9yZTo6c2V0R3JhcGhpY3NTdXJmYWNlKHVpbnQzMl90IGdyYXBoaWNzU3VyZmFj
ZVRva2VuLCBjb25zdCBJbnRTaXplJiBzdXJmYWNlU2l6ZSkKK3ZvaWQgVGV4dHVyZU1hcHBlclN1
cmZhY2VCYWNraW5nU3RvcmU6OnNldEdyYXBoaWNzU3VyZmFjZSh1aW50NjRfdCBncmFwaGljc1N1
cmZhY2VUb2tlbiwgY29uc3QgSW50U2l6ZSYgc3VyZmFjZVNpemUsIHVpbnQzMl90IGZyb250QnVm
ZmVyKQogewotICAgIGlmIChncmFwaGljc1N1cmZhY2VUb2tlbiAhPSBtX2JhY2tCdWZmZXJHcmFw
aGljc1N1cmZhY2VEYXRhLm1fZ3JhcGhpY3NTdXJmYWNlVG9rZW4pIHsKKyAgICBpZiAoZ3JhcGhp
Y3NTdXJmYWNlVG9rZW4gIT0gbV9ncmFwaGljc1N1cmZhY2VUb2tlbikgewogICAgICAgICBHcmFw
aGljc1N1cmZhY2U6OkZsYWdzIHN1cmZhY2VGbGFncyA9IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9y
dHNUZXh0dXJlVGFyZ2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1NoYXJpbmc7Ci0gICAgICAgIG1fYmFja0J1
ZmZlckdyYXBoaWNzU3VyZmFjZURhdGEuc2V0U3VyZmFjZShHcmFwaGljc1N1cmZhY2U6OmNyZWF0
ZShzdXJmYWNlU2l6ZSwgc3VyZmFjZUZsYWdzLCBncmFwaGljc1N1cmZhY2VUb2tlbikpOworICAg
ICAgICBzZXRTdXJmYWNlKEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKHN1cmZhY2VTaXplLCBzdXJm
YWNlRmxhZ3MsIGdyYXBoaWNzU3VyZmFjZVRva2VuKSk7CiAgICAgICAgIG1fZ3JhcGhpY3NTdXJm
YWNlU2l6ZSA9IHN1cmZhY2VTaXplOwogICAgIH0KIAotICAgIHN0ZDo6c3dhcChtX2JhY2tCdWZm
ZXJHcmFwaGljc1N1cmZhY2VEYXRhLCBtX2Zyb250QnVmZmVyR3JhcGhpY3NTdXJmYWNlRGF0YSk7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSA9IGdyYXBoaWNz
U3VyZmFjZSgpOworICAgIGlmIChzdXJmYWNlLT5mcm9udEJ1ZmZlcigpICE9IGZyb250QnVmZmVy
KQorICAgICAgICBzdXJmYWNlLT5zd2FwQnVmZmVycygpOworCiB9CiAKIFBhc3NSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU6OnRleHR1cmUoKSBj
b25zdApAQCAtNTksMTUgKzYyLDI1IEBAIHZvaWQgVGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5n
U3RvcmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1CiAgICAgYWRq
dXN0ZWRUcmFuc2Zvcm0ubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3Qo
RmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbV9ncmFwaGljc1N1cmZhY2VTaXplKSwgdGFy
Z2V0UmVjdCkpOwogI2lmIE9TKERBUldJTikKICAgICAvLyBUaGlzIGlzIHNwZWNpZmljIHRvIHRo
ZSBNYWMgaW1wbGVtZW50YXRpb24gb2YgR3JhcGhpY3NTdXJmYWNlLiBJT1N1cmZhY2UgcmVxdWly
ZXMgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCIHRvIGJlIHVzZWQuCi0gICAgc3RhdGljX2Nhc3Q8
VGV4dHVyZU1hcHBlckdMKj4odGV4dHVyZU1hcHBlciktPmRyYXdUZXh0dXJlUmVjdGFuZ2xlQVJC
KG1fZnJvbnRCdWZmZXJHcmFwaGljc1N1cmZhY2VEYXRhLm1fdGV4dHVyZUlELCAwLCBtX2dyYXBo
aWNzU3VyZmFjZVNpemUsIHRhcmdldFJlY3QsIGFkanVzdGVkVHJhbnNmb3JtLCBvcGFjaXR5LCBt
YXNrKTsKKyAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPih0ZXh0dXJlTWFwcGVyKS0+
ZHJhd1RleHR1cmVSZWN0YW5nbGVBUkIobV9ncmFwaGljc1N1cmZhY2UtPmdldFRleHR1cmVJRCgp
LCAwLCBtX2dyYXBoaWNzU3VyZmFjZVNpemUsIHRhcmdldFJlY3QsIGFkanVzdGVkVHJhbnNmb3Jt
LCBvcGFjaXR5LCBtYXNrKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRleHR1cmVNYXBwZXIp
OwotICAgIFVOVVNFRF9QQVJBTShvcGFjaXR5KTsKLSAgICBVTlVTRURfUEFSQU0obWFzayk7Cisg
ICAgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMKj4odGV4dHVyZU1hcHBlciktPmRyYXdUZXh0
dXJlKG1fZ3JhcGhpY3NTdXJmYWNlLT5nZXRUZXh0dXJlSUQoKSwgMCwgbV9ncmFwaGljc1N1cmZh
Y2VTaXplLCB0YXJnZXRSZWN0LCBhZGp1c3RlZFRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzayk7CiAj
ZW5kaWYKIH0KICNlbmRpZgogCit2b2lkIFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3Jl
OjpzZXRTdXJmYWNlKFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlKQoreworICAg
IGlmIChzdXJmYWNlKSB7CisgICAgICAgIG1fZ3JhcGhpY3NTdXJmYWNlID0gc3VyZmFjZTsKKyAg
ICAgICAgbV9ncmFwaGljc1N1cmZhY2VUb2tlbiA9IG1fZ3JhcGhpY3NTdXJmYWNlLT5leHBvcnRU
b2tlbigpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZ3JhcGhpY3NTdXJmYWNlID0gUmVmUHRy
PEdyYXBoaWNzU3VyZmFjZT4oKTsKKyAgICAgICAgbV9ncmFwaGljc1N1cmZhY2VUb2tlbiA9IDA7
CisgICAgfQorfQorCisKIHZvaWQgVGV4dHVyZU1hcHBlclRpbGU6OnVwZGF0ZUNvbnRlbnRzKFRl
eHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYg
ZGlydHlSZWN0KQogewogICAgIEludFJlY3QgdGFyZ2V0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qo
bV9yZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oCmluZGV4IDQxMjMw
NjYuLjlkMDAyYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaApAQCAt
NDcsMzUgKzQ3LDI3IEBAIHByb3RlY3RlZDoKIH07CiAKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKLXN0cnVjdCBHcmFwaGljc1N1cmZhY2VEYXRhIHsKLSAgICB2b2lkIHNldFN1cmZhY2UoUGFz
c1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2UpCi0gICAgewotICAgICAgICBtX2dyYXBo
aWNzU3VyZmFjZSA9IHN1cmZhY2U7Ci0gICAgICAgIG1fZ3JhcGhpY3NTdXJmYWNlVG9rZW4gPSBt
X2dyYXBoaWNzU3VyZmFjZS0+ZXhwb3J0VG9rZW4oKTsKLSAgICAgICAgbV90ZXh0dXJlSUQgPSBt
X2dyYXBoaWNzU3VyZmFjZS0+Z2V0VGV4dHVyZUlEKCk7Ci0gICAgfQotCi0gICAgR3JhcGhpY3NT
dXJmYWNlRGF0YSgpCi0gICAgICAgIDogbV90ZXh0dXJlSUQoMCkKLSAgICAgICAgLCBtX2dyYXBo
aWNzU3VyZmFjZVRva2VuKDApCi0gICAgeyB9Ci0KLSAgICB1aW50MzJfdCBtX3RleHR1cmVJRDsK
LSAgICB1aW50MzJfdCBtX2dyYXBoaWNzU3VyZmFjZVRva2VuOwotICAgIFJlZlB0cjxXZWJDb3Jl
OjpHcmFwaGljc1N1cmZhY2U+IG1fZ3JhcGhpY3NTdXJmYWNlOwotfTsKLQogY2xhc3MgVGV4dHVy
ZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlckJhY2tpbmdT
dG9yZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZh
Y2VCYWNraW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFw
cGVyU3VyZmFjZUJhY2tpbmdTdG9yZSk7IH0KLSAgICB2b2lkIHNldEdyYXBoaWNzU3VyZmFjZSh1
aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbiwgY29uc3QgSW50U2l6ZSYgc3VyZmFjZVNpemUp
OworICAgIHZvaWQgc2V0R3JhcGhpY3NTdXJmYWNlKHVpbnQ2NF90IGdyYXBoaWNzU3VyZmFjZVRv
a2VuLCBjb25zdCBJbnRTaXplJiBzdXJmYWNlU2l6ZSwgdWludDMyX3QgZnJvbnRCdWZmZXIpOwor
ICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlPiBncmFwaGljc1N1cmZhY2Uo
KSBjb25zdCB7IHJldHVybiBtX2dyYXBoaWNzU3VyZmFjZTsgfQogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBh
aW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBCaXRtYXBUZXh0dXJlKik7CiAgICAgdmly
dHVhbCB+VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmUoKSB7IH0KKworcHJvdGVjdGVk
OgorICAgIHZvaWQgc2V0U3VyZmFjZShQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4pOworCiBw
cml2YXRlOgorICAgIFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlKCkKKyAgICAgICAg
OiBUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlKCkKKyAgICAgICAgLCBtX2dyYXBoaWNzU3VyZmFj
ZVRva2VuKDApCisgICAgICAgIHsgfQorCisgICAgdWludDY0X3QgbV9ncmFwaGljc1N1cmZhY2VU
b2tlbjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlPiBtX2dyYXBoaWNzU3Vy
ZmFjZTsKICAgICBJbnRTaXplIG1fZ3JhcGhpY3NTdXJmYWNlU2l6ZTsKLSAgICBHcmFwaGljc1N1
cmZhY2VEYXRhIG1fZnJvbnRCdWZmZXJHcmFwaGljc1N1cmZhY2VEYXRhOwotICAgIEdyYXBoaWNz
U3VyZmFjZURhdGEgbV9iYWNrQnVmZmVyR3JhcGhpY3NTdXJmYWNlRGF0YTsKIH07CiAjZW5kaWYK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaAppbmRleCA5NjE0Yzg5Li4y
MjkyZjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaApAQCAtMzQs
NiArMzQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN3YXBCdWZmZXJzKCkgeyB9CiAj
aWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiAgICAgdmlydHVhbCB1aW50MzJfdCBjb3B5VG9HcmFw
aGljc1N1cmZhY2UoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB1aW50NjRfdCBncmFwaGlj
c1N1cmZhY2VUb2tlbigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICNlbmRpZgogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CmluZGV4IDM3ODhhYjMuLjc0YTUyMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAx
Mi0wOC0wNiAgWmVubyBBbGJpc3NlciAgPHplbm9Ad2Via2l0Lm9yZz4KKworICAgICAgICBNYWtl
IEdyYXBoaWNzU3VyZmFjZSBkb3VibGUgYnVmZmVyZWQgYnkgZGVmYXVsdC4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzMjUyCisKKyAgICAgICAgQ3Jl
YXRlIG9ubHkgYSBzaW5nbGUgR3JhcGhpY3NTdXJmYWNlIHBlciBjYW52YXMKKyAgICAgICAgb24g
Ym90aCBzdXBwb3J0ZWQgcGxhdGZvcm1zIE1hYy9MaW51eC4KKyAgICAgICAgVGhlIEdyYXBoaWNz
U3VyZmFjZSBvbiBNYWMgaW50ZXJuYWxseSB1c2VzIHR3byBJT1N1cmZhY2UKKyAgICAgICAgdHdv
IHByb3ZpZGUgYSBmcm9udCBhbmQgYSBiYWNrIGJ1ZmZlci4KKyAgICAgICAgVGhlIEdMWCBpbXBs
ZW1lbnRhdGlvbiBvZiBHcmFwaGljc1N1cmZhY2UgdXNlcworICAgICAgICBhbiBYV2luZG93IHdo
aWNoIGFscmVhZHkgcHJvdmlkZXMgYSBmcm9udCBhbmQgYSBiYWNrIGJ1ZmZlci4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9TaGFyZWFi
bGVTdXJmYWNlLmg6CisgICAgICAgIChIYW5kbGUpOgorICAgICAgICAgICAgQ2hhbmdlIHRoZSB0
eXBlIG9mIEdyYXBoaWNzU3VyZmFjZSB0b2tlbiB0byB1aW50NjRfdC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c3luY0NhbnZhcyk6
CisgICAgICAgICAgICBBZGQgYSBwYXJhbWV0ZXIgdGhhdCBkZW5vdGVzIHRoZSBjdXJyZW50IGZy
b250IGJ1ZmZlciBvZiB0aGUKKyAgICAgICAgICAgIEdyYXBoaWNzU3VyZmFjZS4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5
Lmg6CisgICAgICAgIChMYXllclRyZWVDb29yZGluYXRvclByb3h5KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3Nh
Z2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJl
ZVJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmND
YW52YXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJl
ZVJlbmRlcmVyLmg6CisgICAgICAgIChMYXllclRyZWVSZW5kZXJlcik6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3lu
Y0NhbnZhcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmg6CisgICAgICAgIChDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXJDbGllbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNDYW52YXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmg6CisgICAgICAg
IChMYXllclRyZWVDb29yZGluYXRvcik6CisKIDIwMTItMDgtMDYgIE1hcmlvIFNhbmNoZXogUHJh
ZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtXSzJdW0dUS10gSW1wbGVtZW50
IGEgbmV3IHNwZWxsIGNoZWNrZXIgQVBJIGZvciBXZWJLaXQyR1RLKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVN1cmZhY2UuaCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9TaGFyZWFibGVTdXJmYWNlLmgKaW5kZXggZmI3NGI2MS4uNmNkNzM2OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVN1cmZhY2UuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlU3VyZmFjZS5oCkBAIC02Miw3ICs2Miw3IEBAIHB1Ymxp
YzoKICAgICAgICAgZnJpZW5kIGNsYXNzIFNoYXJlYWJsZVN1cmZhY2U7CiAgICAgICAgIG11dGFi
bGUgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgbV9iaXRtYXBIYW5kbGU7CiAjaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCi0gICAgICAgIHVpbnQzMl90IG1fZ3JhcGhpY3NTdXJmYWNlVG9rZW47Cisg
ICAgICAgIHVpbnQ2NF90IG1fZ3JhcGhpY3NTdXJmYWNlVG9rZW47CiAjZW5kaWYKICAgICAgICAg
V2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7CiAgICAgICAgIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3Mg
bV9mbGFnczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5j
cHAKaW5kZXggOWIwYTVhMy4uMTUyNDkxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTE2NCw5ICsxNjQsOSBAQCB2b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50
JiBwb3NpdGlvbgogICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpk
aWRDaGFuZ2VTY3JvbGxQb3NpdGlvbiwgbV9yZW5kZXJlci5nZXQoKSwgcG9zaXRpb24pKTsKIH0K
IAotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzeW5jQ2FudmFzKHVpbnQzMl90IGlk
LCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tl
bikKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c3luY0NhbnZhcyh1aW50MzJfdCBp
ZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDY0X3QgZ3JhcGhpY3NTdXJmYWNlVG9r
ZW4sIHVpbnQzMl90IGZyb250QnVmZmVyKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxh
eWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgY2FudmFz
U2l6ZSwgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZM
YXllclRyZWVSZW5kZXJlcjo6c3luY0NhbnZhcywgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGNhbnZh
c1NpemUsIGdyYXBoaWNzU3VyZmFjZVRva2VuLCBmcm9udEJ1ZmZlcikpOwogfQogCiB2b2lkIExh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnB1cmdlQmFja2luZ1N0b3JlcygpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVD
b29yZGluYXRvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmgKaW5kZXggZDZmMTVkMS4uN2JmOWRi
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaApAQCAt
NzEsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOwogICAgIHZv
aWQgcmVuZGVyTmV4dEZyYW1lKCk7CiAgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24pOwotICAgIHZvaWQgc3luY0NhbnZhcyh1
aW50MzJfdCBpZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3Qg
Z3JhcGhpY3NTdXJmYWNlVG9rZW4pOworICAgIHZvaWQgc3luY0NhbnZhcyh1aW50MzJfdCBpZCwg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDY0X3QgZ3JhcGhpY3NTdXJm
YWNlVG9rZW4sIHVpbnQzMl90IGZyb250QnVmZmVyKTsKICAgICB2b2lkIHB1cmdlQmFja2luZ1N0
b3JlcygpOwogICAgIExheWVyVHJlZVJlbmRlcmVyKiBsYXllclRyZWVSZW5kZXJlcigpIGNvbnN0
IHsgcmV0dXJuIG1fcmVuZGVyZXIuZ2V0KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4KaW5kZXggOWVjYTAzMi4u
ZjhjM2QyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0zMyw2ICszMyw2IEBAIG1lc3NhZ2VzIC0+IExheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkgewogICAgIERlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZShpbnQ2NF90IGtleSkKICAgICBEaWRSZW5kZXJGcmFtZSgpCiAgICAgRGlkQ2hhbmdlU2Nyb2xs
UG9zaXRpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9zaXRpb24pCi0gICAgU3luY0NhbnZhcyh1aW50
MzJfdCBpZCwgV2ViQ29yZTo6SW50U2l6ZSBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1
cmZhY2VUb2tlbikKKyAgICBTeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpJbnRTaXpl
IGNhbnZhc1NpemUsIHVpbnQ2NF90IGdyYXBoaWNzU3VyZmFjZVRva2VuLCB1aW50MzJfdCBmcm9u
dEJ1ZmZlcikKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCmlu
ZGV4IDQ3MDRlNWUuLjc5NGU4MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5j
cHAKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpkaWRDaGFuZ2VT
Y3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCiAgICAgbV9wZW5kaW5nUmVu
ZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uID0gcG9zaXRpb247CiB9CiAKLXZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OnN5bmNDYW52YXMoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pCit2b2lkIExh
eWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzKFdlYkxheWVySUQgaWQsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQ2NF90IGdyYXBoaWNzU3VyZmFjZVRva2VuLCB1aW50
MzJfdCBmcm9udEJ1ZmZlcikKIHsKICAgICBpZiAoY2FudmFzU2l6ZS5pc0VtcHR5KCkgfHwgIW1f
dGV4dHVyZU1hcHBlcikKICAgICAgICAgcmV0dXJuOwpAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQg
TGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNDYW52YXMoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgY2FudmFzCiAgICAgfSBlbHNlCiAgICAgICAgIGNhbnZhc0JhY2tpbmdTdG9y
ZSA9IGl0LT5zZWNvbmQ7CiAKLSAgICBjYW52YXNCYWNraW5nU3RvcmUtPnNldEdyYXBoaWNzU3Vy
ZmFjZShncmFwaGljc1N1cmZhY2VUb2tlbiwgY2FudmFzU2l6ZSk7CisgICAgY2FudmFzQmFja2lu
Z1N0b3JlLT5zZXRHcmFwaGljc1N1cmZhY2UoZ3JhcGhpY3NTdXJmYWNlVG9rZW4sIGNhbnZhc1Np
emUsIGZyb250QnVmZmVyKTsKICAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGNhbnZhc0Jh
Y2tpbmdTdG9yZS5nZXQoKSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJl
ci5oCmluZGV4IDEyM2JlMzguLjhkZGQxMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVy
ZXIuaApAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDb250ZW50c1NpemUo
Y29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CiAgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xs
UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uKTsKLSAgICB2b2lkIHN5
bmNDYW52YXModWludDMyX3QgaWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUs
IHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuKTsKKyAgICB2b2lkIHN5bmNDYW52YXModWlu
dDMyX3QgaWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQ2NF90IGdy
YXBoaWNzU3VyZmFjZVRva2VuLCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7CiAKICAgICB2b2lkIGRl
dGFjaCgpOwogICAgIHZvaWQgYXBwZW5kVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIuY3BwCmluZGV4IGQ4OWU3NGEuLjYwYjBjMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcApAQCAtNTAxLDgg
KzUwMSwxMCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0NhbnZhcygpCiAg
ICAgICAgIHJldHVybjsKIAogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHVpbnQzMl90
IGdyYXBoaWNzU3VyZmFjZVRva2VuID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5jb3B5VG9HcmFw
aGljc1N1cmZhY2UoKTsKLSAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+c3lu
Y0NhbnZhcyhtX2lkLCBJbnRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpLCBn
cmFwaGljc1N1cmZhY2VUb2tlbik7CisgICAgdWludDMyX3QgZnJvbnRCdWZmZXIgPSBtX2NhbnZh
c1BsYXRmb3JtTGF5ZXItPmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpOworICAgIHVpbnQ2NF90IHRv
a2VuID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5ncmFwaGljc1N1cmZhY2VUb2tlbigpOworCisg
ICAgbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPnN5bmNDYW52YXMobV9pZCwgSW50
U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSwgdG9rZW4sIGZyb250QnVmZmVy
KTsKICNlbmRpZgogICAgIG1fY2FudmFzTmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCmlu
ZGV4IDZlMGM1N2QuLmQyOTk3NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhXZWJMYXllcklELCBjb25zdCBXZWJD
b3JlOjpGaWx0ZXJPcGVyYXRpb25zJikgPSAwOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCi0g
ICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBjYW52YXNTaXplLCB1aW50NjRfdCBncmFwaGljc1N1cmZhY2VUb2tlbiwgdWludDMyX3Qg
ZnJvbnRCdWZmZXIpID0gMDsKICNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hMYXllcihX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopID0gMDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcApp
bmRleCAxMzViN2Y1Li42NDhjYTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCkBAIC0yNzgsMTAgKzI3OCwxMCBAQCB2b2lkIExh
eWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jTGF5ZXJDaGlsZHJlbihXZWJMYXllcklEIGlkLCBjb25z
dCBWZWN0b3I8V2ViTGF5ZQogICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKGlkLCBjaGlsZHJl
bikpOwogfQogCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jQ2FudmFzKFdlYkxheWVy
SUQgaWQsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFj
ZVRva2VuKQordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0NhbnZhcyhXZWJMYXllcklE
IGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCB1aW50NjRfdCBncmFwaGljc1N1cmZhY2VU
b2tlbiwgdWludDMyX3QgZnJvbnRCdWZmZXIpCiB7CiAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0
cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTo6U3luY0NhbnZhcyhpZCwgY2FudmFzU2l6ZSwgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pKTsK
KyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OlN5bmNDYW52YXMoaWQsIGNhbnZhc1NpemUsIGdyYXBoaWNzU3VyZmFjZVRva2VuLCBmcm9udEJ1
ZmZlcikpOwogfQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKaW5kZXggNDQ5NDZkYi4uNGI5YmQ4
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRv
ci5oCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAg
ICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29y
ZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwogI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIHN5bmNDYW52
YXMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMy
X3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzeW5j
Q2FudmFzKFdlYkxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVp
bnQ2NF90IGdyYXBoaWNzU3VyZmFjZVRva2VuLCB1aW50MzJfdCBmcm9udEJ1ZmZlcikgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJz
KCk7Cg==
</data>
<flag name="review"
          id="166416"
          type_id="1"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157177</attachid>
            <date>2012-08-08 04:14:57 -0700</date>
            <delta_ts>2012-08-08 04:43:22 -0700</delta_ts>
            <desc>patch for review.</desc>
            <filename>93252_20120808-131217.patch</filename>
            <type>text/plain</type>
            <size>47728</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1YzJkNzA5Li44MGIyYWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAw
IEBACisyMDEyLTA4LTA4ICBaZW5vIEFsYmlzc2VyICA8emVub0B3ZWJraXQub3JnPgorCisgICAg
ICAgIE1ha2UgR3JhcGhpY3NTdXJmYWNlIGRvdWJsZSBidWZmZXJlZCBieSBkZWZhdWx0LgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTMyNTIKKworICAg
ICAgICBDcmVhdGUgb25seSBhIHNpbmdsZSBHcmFwaGljc1N1cmZhY2UgcGVyIGNhbnZhcworICAg
ICAgICBvbiBib3RoIHN1cHBvcnRlZCBwbGF0Zm9ybXMgTWFjL0xpbnV4LgorICAgICAgICBUaGUg
R3JhcGhpY3NTdXJmYWNlIG9uIE1hYyBpbnRlcm5hbGx5IHVzZXMgdHdvIElPU3VyZmFjZQorICAg
ICAgICB0byBwcm92aWRlIGEgZnJvbnQgYW5kIGEgYmFjayBidWZmZXIuCisgICAgICAgIFRoZSBH
TFggaW1wbGVtZW50YXRpb24gb2YgR3JhcGhpY3NTdXJmYWNlIHVzZXMKKyAgICAgICAgYW4gWFdp
bmRvdyB3aGljaCBhbHJlYWR5IHByb3ZpZGVzIGEgZnJvbnQgYW5kIGEgYmFjayBidWZmZXIuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZSk6CisgICAgICAgICAgICBSZW1vdmUgY3JlYXRpb24gb2Ygc2Vjb25k
IEdyYXBoaWNzU3VyZmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Y29weVRvR3JhcGhpY3NTdXJmYWNlKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpncmFw
aGljc1N1cmZhY2VUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc1N1cmZhY2U6OmNyZWF0ZSk6CisgICAgICAgICAgICBBZGp1c3QgdG9rZW4gdHlwZSB0byB1
aW50NjRfdC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6ZXhwb3J0VG9rZW4p
OgorICAgICAgICAgICAgQWRqdXN0IHJldHVybiB0eXBlIHRvIHVpbnQ2NF90LgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpmcm9udEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6c3dhcEJ1ZmZlcnMpOgorICAg
ICAgICAgICAgQWRkIGZvcndhcmRpbmcgZnVuY3Rpb24gdG8gc3dhcCBidWZmZXJzIGluc2lkZSBH
cmFwaGljc1N1cmZhY2UuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3Jh
cGhpY3NTdXJmYWNlLmg6CisgICAgICAgIChHcmFwaGljc1N1cmZhY2UpOgorICAgICAgICAgICAg
QWRkIFN1cHBvcnRzU2luZ2xlQnVmZmVyZWQgZmxhZyB0byBhbGxvdyBmb3Igc2luZ2xlIGJ1ZmZl
cmVkIGltcGxlbWVudGF0aW9ucy4KKyAgICAgICAgICAgIEN1cnJlbnRseSBzaW5nbGUgYnVmZmVy
ZWQgc3VyZmFjZXMgYXJlIGVpdGhlciBub3QgaW1wbGVtZW50ZWQgb3IgZGlzYWJsZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5j
cHA6CisgICAgICAgICAgICBNb3ZlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgaW50byBHcmFwaGlj
c1N1cmZhY2VQcml2YXRlLgorICAgICAgICAgICAgVGhpcyB3YXkgdGhlIHBsYXRmb3JtIHNwZWNp
ZmljIGNvZGUgY2FuIGJlIGhpZGRlbiBpbiB0aGUgc3BlY2lmaWMgY3BwIGZpbGUKKyAgICAgICAg
ICAgIGluc3RlYWQgb2YgcG9sbHV0aW5nIHRoZSBnbG9iYWwgR3JhcGhpY3NTdXJmYWNlIGhlYWRl
ci4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoR3JhcGhpY3NT
dXJmYWNlUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRl
OjpHcmFwaGljc1N1cmZhY2VQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3Vy
ZmFjZVByaXZhdGU6On5HcmFwaGljc1N1cmZhY2VQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OnRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzU3VyZmFjZVByaXZhdGU6OmZyb250QnVmZmVyVGV4dHVyZUlEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OmJhY2tCdWZmZXJUZXh0dXJlSUQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6ZnJvbnRCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6YmFja0J1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1F
eHBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUdldFRl
eHR1cmVJRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29w
eVRvR0xUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZv
cm1Db3B5RnJvbUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFj
ZTo6cGxhdGZvcm1Gcm9udEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZh
Y2U6OnBsYXRmb3JtU3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJm
YWNlOjpwbGF0Zm9ybUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6
OnBsYXRmb3JtSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OmlvU3VyZmFjZUxvY2tPcHRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Mb2NrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1VbmxvY2spOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpPZmZTY3JlZW5Sb290V2luZG93OjpnZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAgICAg
TWFrZSBzdXJlIHRoYXQgZnJhbWVidWZmZXIgYmluZGluZ3MgcmVtYWluIGNvbnNpc3RlbnQKKyAg
ICAgICAgICAgIGFmdGVyIHN3YXBwaW5nIGJ1ZmZlcnMgb24gdGhlIFhXaW5kb3cuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRXhwb3J0KToKKyAgICAgICAgICAg
IE1ha2Ugc3VyZSB0aGUgR0xYUGl4bWFwIGlzIG9ubHkgYm91bmQgdG8gdGhlIHRleHR1cmUgb25j
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1HZXRUZXh0dXJl
SUQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlGcm9t
RnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc1N1cmZhY2U6OnBsYXRmb3JtRnJvbnRCdWZmZXIpOgorICAgICAgICAgICAgVGhlIEdMWCBz
dXJmYWNlIGRvZXMgbm90IGtub3cgaG93IHRvIGRlc3Rpbmd1aXNoIGJldHdlZW4KKyAgICAgICAg
ICAgIHRoZSBmcm9udCBhbmQgdGhlIGJhY2sgYnVmZmVyIGJ5IGFuIGlkLiBUaGlzIGlzIG5vdCBu
ZWNlc3NhcnkKKyAgICAgICAgICAgIGZvciBHcmFwaGljc1N1cmZhY2VHTFgsIGJlY2F1c2UgdGhl
IHRleHR1cmUgY2FuIGp1c3QgYmUKKyAgICAgICAgICAgIHJlYWQgZnJvbSB0aGUgWFdpbmRvdyBh
dCBhbnkgdGltZS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1T
d2FwQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3Jt
Q3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1JbXBv
cnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFj
a2luZ1N0b3JlLmNwcDoKKyAgICAgICAgICAgIFJlbW92ZSBjb2RlIHRoYXQgd2FzIHVzZWQgZm9y
IHN3aXRjaGluZyBiZXR3ZWVuIHR3byBHcmFwaGljc1N1cmZhY2VzLAorICAgICAgICAgICAgYXMg
dGhpcyBpcyBub3cgaGFuZGxlZCBkaXJlY3RseSBpbnNpZGUgR3JhcGhpY3NTdXJmYWNlLgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU6OnNldEdyYXBo
aWNzU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tp
bmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU6OnNldFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgICAgIFJlbW92ZSBHcmFwaGljc1N1cmZhY2VEYXRhIHN0cnVj
dC4gVGhpcyBjbGFzcyBpcyBub3QgbmVlZGVkIGFueW1vcmUKKyAgICAgICAgICAgIGFzIHdlIGRv
IG5vdCBrZWVwIHRyYWNrIG9mIG1vcmUgdGhhbiBvbmUgR3JhcGhpY3NTdXJmYWNlIGF0IHRoZSB0
aW1lLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU3VyZmFjZUJh
Y2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tp
bmdTdG9yZTo6Z3JhcGhpY3NTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJTdXJmYWNlQmFja2luZ1N0b3JlOjpUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcjo6
Z3JhcGhpY3NTdXJmYWNlVG9rZW4pOgorCiAyMDEyLTA4LTA2ICBEb3VnbGFzIFN0b2Nrd2VsbCAg
PGRzdG9ja3dlbGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENyYXNoIGluIFdlYkNvcmU6OlJl
bmRlckxpc3RJdGVtOjp1cGRhdGVNYXJrZXJMb2NhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApp
bmRleCA4OTVmNzY2Li4yMzUzNWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAtNzEsNiAr
NzEsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKICAgICB2
aXJ0dWFsIHVpbnQzMl90IGNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpOworICAgIHZpcnR1YWwgdWlu
dDY0X3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4oKSBjb25zdDsKICNlbmRpZgogCiAgICAgUVJlY3RG
IGJvdW5kaW5nUmVjdCgpIGNvbnN0OwpAQCAtODUsOCArODYsNyBAQCBwdWJsaWM6CiAgICAgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCBtX3BsYXRmb3JtQ29udGV4dDsKICNpZiBVU0UoR1JBUEhJ
Q1NfU1VSRkFDRSkKICAgICBHcmFwaGljc1N1cmZhY2U6OkZsYWdzIG1fc3VyZmFjZUZsYWdzOwot
ICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IG1fZnJvbnRCdWZmZXJHcmFwaGljc1N1cmZhY2U7
Ci0gICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gbV9iYWNrQnVmZmVyR3JhcGhpY3NTdXJmYWNl
OworICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IG1fZ3JhcGhpY3NTdXJmYWNlOwogI2VuZGlm
CiB9OwogCkBAIC0xNDIsOCArMTQyLDcgQEAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFw
aGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEgKICAgICAg
ICAgICAgICAgICAgICAgfCBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZzsKIAogICAg
IGlmICghc3VyZmFjZVNpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fZnJvbnRCdWZmZXJHcmFw
aGljc1N1cmZhY2UgPSBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShzdXJmYWNlU2l6ZSwgbV9zdXJm
YWNlRmxhZ3MpOwotICAgICAgICBtX2JhY2tCdWZmZXJHcmFwaGljc1N1cmZhY2UgPSBHcmFwaGlj
c1N1cmZhY2U6OmNyZWF0ZShzdXJmYWNlU2l6ZSwgbV9zdXJmYWNlRmxhZ3MpOworICAgICAgICBt
X2dyYXBoaWNzU3VyZmFjZSA9IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKHN1cmZhY2VTaXplLCBt
X3N1cmZhY2VGbGFncyk7CiAgICAgfQogI2VuZGlmCiB9CkBAIC0yMjIsMTQgKzIyMSwxOSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVy
ZU1hcHBlciogdGV4dHVyZU1hcHBlcgogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQogdWludDMy
X3QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjb3B5VG9HcmFwaGljc1N1cmZhY2UoKQogewot
ICAgIGlmICghbV9mcm9udEJ1ZmZlckdyYXBoaWNzU3VyZmFjZSB8fCAhbV9iYWNrQnVmZmVyR3Jh
cGhpY3NTdXJmYWNlKQorICAgIGlmICghbV9ncmFwaGljc1N1cmZhY2UpCiAgICAgICAgIHJldHVy
biAwOwogCiAgICAgYmxpdE11bHRpc2FtcGxlRnJhbWVidWZmZXJBbmRSZXN0b3JlQ29udGV4dCgp
OwogICAgIG1ha2VDdXJyZW50SWZOZWVkZWQoKTsKLSAgICBtX2JhY2tCdWZmZXJHcmFwaGljc1N1
cmZhY2UtPmNvcHlGcm9tRnJhbWVidWZmZXIobV9jb250ZXh0LT5tX2ZibywgSW50UmVjdCgwLCAw
LCBtX2NvbnRleHQtPm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodCkp
OwotICAgIHN0ZDo6c3dhcChtX2Zyb250QnVmZmVyR3JhcGhpY3NTdXJmYWNlLCBtX2JhY2tCdWZm
ZXJHcmFwaGljc1N1cmZhY2UpOwotICAgIHJldHVybiBtX2Zyb250QnVmZmVyR3JhcGhpY3NTdXJm
YWNlLT5leHBvcnRUb2tlbigpOworICAgIG1fZ3JhcGhpY3NTdXJmYWNlLT5jb3B5RnJvbUZyYW1l
YnVmZmVyKG1fY29udGV4dC0+bV9mYm8sIEludFJlY3QoMCwgMCwgbV9jb250ZXh0LT5tX2N1cnJl
bnRXaWR0aCwgbV9jb250ZXh0LT5tX2N1cnJlbnRIZWlnaHQpKTsKKyAgICB1aW50MzJfdCBmcm9u
dEJ1ZmZlciA9IG1fZ3JhcGhpY3NTdXJmYWNlLT5zd2FwQnVmZmVycygpOworICAgIHJldHVybiBm
cm9udEJ1ZmZlcjsKK30KKwordWludDY0X3QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpncmFw
aGljc1N1cmZhY2VUb2tlbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZ3JhcGhpY3NTdXJmYWNl
LT5leHBvcnRUb2tlbigpOwogfQogI2VuZGlmCiAKQEAgLTI5OSwxMyArMzAzLDEwIEBAIGJvb2wg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlQ3VycmVudElmTmVlZGVkKCkgY29uc3QKIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc1N1cmZhY2VzKGNvbnN0
IEludFNpemUmIHNpemUpCiB7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgaWYgKHNp
emUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fZnJvbnRCdWZmZXJHcmFwaGljc1N1cmZhY2UuY2xl
YXIoKTsKLSAgICAgICAgbV9iYWNrQnVmZmVyR3JhcGhpY3NTdXJmYWNlLmNsZWFyKCk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgbV9mcm9udEJ1ZmZlckdyYXBoaWNzU3VyZmFjZSA9IEdyYXBoaWNz
U3VyZmFjZTo6Y3JlYXRlKHNpemUsIG1fc3VyZmFjZUZsYWdzKTsKLSAgICAgICAgbV9iYWNrQnVm
ZmVyR3JhcGhpY3NTdXJmYWNlID0gR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoc2l6ZSwgbV9zdXJm
YWNlRmxhZ3MpOwotICAgIH0KKyAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIG1fZ3Jh
cGhpY3NTdXJmYWNlLmNsZWFyKCk7CisgICAgZWxzZQorICAgICAgICBtX2dyYXBoaWNzU3VyZmFj
ZSA9IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKHNpemUsIG1fc3VyZmFjZUZsYWdzKTsKICNlbmRp
ZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9HcmFwaGljc1N1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmNwcAppbmRleCAyYjhjZDY1Li41NWM2NDVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFw
aGljc1N1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKICNpZiBVU0UoR1JB
UEhJQ1NfU1VSRkFDRSkKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxHcmFwaGlj
c1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEZs
YWdzIGZsYWdzLCB1aW50MzJfdCB0b2tlbikKK1Bhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBH
cmFwaGljc1N1cmZhY2U6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncywg
dWludDY0X3QgdG9rZW4pCiB7CiAgICAgcmV0dXJuIHBsYXRmb3JtSW1wb3J0KHNpemUsIGZsYWdz
LCB0b2tlbik7CiB9CkBAIC0zNSw3ICszNSw3IEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNl
PiBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBHcmFwaGljCiAg
ICAgcmV0dXJuIHBsYXRmb3JtQ3JlYXRlKHNpemUsIGZsYWdzKTsKIH0KIAotdWludDMyX3QgR3Jh
cGhpY3NTdXJmYWNlOjpleHBvcnRUb2tlbigpCit1aW50NjRfdCBHcmFwaGljc1N1cmZhY2U6OmV4
cG9ydFRva2VuKCkKIHsKICAgICByZXR1cm4gcGxhdGZvcm1FeHBvcnQoKTsKIH0KQEAgLTYzLDYg
KzYzLDE2IEBAIHZvaWQgR3JhcGhpY3NTdXJmYWNlOjpjb3B5RnJvbUZyYW1lYnVmZmVyKHVpbnQz
Ml90IGZibywgY29uc3QgSW50UmVjdCYgc291cmNlUmVjCiAgICAgcGxhdGZvcm1Db3B5RnJvbUZy
YW1lYnVmZmVyKGZibywgc291cmNlUmVjdCk7CiB9CiAKK3VpbnQzMl90IEdyYXBoaWNzU3VyZmFj
ZTo6ZnJvbnRCdWZmZXIoKQoreworICAgIHJldHVybiBwbGF0Zm9ybUZyb250QnVmZmVyKCk7Cit9
CisKK3VpbnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6c3dhcEJ1ZmZlcnMoKQoreworICAgIHJldHVy
biBwbGF0Zm9ybVN3YXBCdWZmZXJzKCk7Cit9CisKIEdyYXBoaWNzU3VyZmFjZTo6R3JhcGhpY3NT
dXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzKQogICAgIDogbV9mbGFncyhm
bGFncykKICAgICAsIG1fc2l6ZShzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuaAppbmRleCA3YWVl
ZDc5Li5lOGFjNTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuaApAQCAtNTAsNyArNTAsOCBAQCBw
dWJsaWM6CiAgICAgICAgIFN1cHBvcnRzVGV4dHVyZVNvdXJjZSA9IDB4MTAsCiAgICAgICAgIFN1
cHBvcnRzQ29weVRvVGV4dHVyZSA9IDB4MjAsCiAgICAgICAgIFN1cHBvcnRzQ29weUZyb21UZXh0
dXJlID0gMHg0MCwKLSAgICAgICAgU3VwcG9ydHNTaGFyaW5nID0gMHg4MAorICAgICAgICBTdXBw
b3J0c1NoYXJpbmcgPSAweDgwLAorICAgICAgICBTdXBwb3J0c1NpbmdsZUJ1ZmZlcmVkID0gMHgx
MDAKICAgICB9OwogCiAgICAgZW51bSBMb2NrT3B0aW9uIHsKQEAgLTY2LDEwICs2NywxMiBAQCBw
dWJsaWM6CiAgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IGNyZWF0ZShjb25zdCBJbnRTaXpl
JiwgRmxhZ3MpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gY3JlYXRl
KGNvbnN0IEludFNpemUmLCBGbGFncywgdWludDMyX3QgdG9rZW4pOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gY3JlYXRlKGNvbnN0IEludFNpemUmLCBGbGFncywgdWlu
dDY0X3QgdG9rZW4pOwogICAgIHZvaWQgY29weVRvR0xUZXh0dXJlKHVpbnQzMl90IHRhcmdldCwg
dWludDMyX3QgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UG9p
bnQmIHNvdXJjZU9mZnNldCk7CiAgICAgdm9pZCBjb3B5RnJvbUZyYW1lYnVmZmVyKHVpbnQzMl90
IGZibywgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7Ci0gICAgdWludDMyX3QgZXhwb3J0VG9r
ZW4oKTsKKyAgICB1aW50MzJfdCBmcm9udEJ1ZmZlcigpOworICAgIHVpbnQzMl90IHN3YXBCdWZm
ZXJzKCk7CisgICAgdWludDY0X3QgZXhwb3J0VG9rZW4oKTsKICAgICB1aW50MzJfdCBnZXRUZXh0
dXJlSUQoKTsKICAgICBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYmVnaW5QYWludChjb25z
dCBJbnRSZWN0JiwgTG9ja09wdGlvbnMpOwogICAgIFBhc3NSZWZQdHI8SW1hZ2U+IGNyZWF0ZVJl
YWRPbmx5SW1hZ2UoY29uc3QgSW50UmVjdCYpOwpAQCAtNzcsOCArODAsOCBAQCBwdWJsaWM6CiAK
IHByb3RlY3RlZDoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHBsYXRm
b3JtQ3JlYXRlKGNvbnN0IEludFNpemUmLCBGbGFncyk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
R3JhcGhpY3NTdXJmYWNlPiBwbGF0Zm9ybUltcG9ydChjb25zdCBJbnRTaXplJiwgRmxhZ3MsIHVp
bnQzMl90KTsKLSAgICB1aW50MzJfdCBwbGF0Zm9ybUV4cG9ydCgpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gcGxhdGZvcm1JbXBvcnQoY29uc3QgSW50U2l6ZSYsIEZs
YWdzLCB1aW50NjRfdCk7CisgICAgdWludDY0X3QgcGxhdGZvcm1FeHBvcnQoKTsKICAgICB2b2lk
IHBsYXRmb3JtRGVzdHJveSgpOwogCiAgICAgdWludDMyX3QgcGxhdGZvcm1HZXRUZXh0dXJlSUQo
KTsKQEAgLTg2LDYgKzg5LDggQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgcGxhdGZvcm1VbmxvY2so
KTsKICAgICB2b2lkIHBsYXRmb3JtQ29weVRvR0xUZXh0dXJlKHVpbnQzMl90IHRhcmdldCwgdWlu
dDMyX3QgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50Jik7CiAgICAgdm9p
ZCBwbGF0Zm9ybUNvcHlGcm9tRnJhbWVidWZmZXIodWludDMyX3QgZmJvLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0KTsKKyAgICB1aW50MzJfdCBwbGF0Zm9ybUZyb250QnVmZmVyKCkgY29uc3Q7
CisgICAgdWludDMyX3QgcGxhdGZvcm1Td2FwQnVmZmVycygpOwogCiAgICAgUGFzc093blB0cjxH
cmFwaGljc0NvbnRleHQ+IHBsYXRmb3JtQmVnaW5QYWludChjb25zdCBJbnRTaXplJiwgY2hhciog
Yml0cywgaW50IHN0cmlkZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL21hYy9HcmFwaGljc1N1cmZhY2VNYWMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5j
cHAKaW5kZXggYmZhMjBiYS4uYjIxMWMxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3Vy
ZmFjZU1hYy5jcHAKQEAgLTMwLDEzICszMCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c3RydWN0IEdyYXBoaWNzU3VyZmFjZVByaXZhdGUgeyB9OwotCi11aW50MzJfdCBHcmFwaGljc1N1
cmZhY2U6OnBsYXRmb3JtRXhwb3J0KCkKLXsKLSAgICByZXR1cm4gSU9TdXJmYWNlR2V0SUQobV9w
bGF0Zm9ybVN1cmZhY2UpOwotfQotCiBzdGF0aWMgdWludDMyX3QgY3JlYXRlVGV4dHVyZShJT1N1
cmZhY2VSZWYgaGFuZGxlKQogewogICAgIEdMdWludCB0ZXh0dXJlID0gMDsKQEAgLTUyLDYgKzQ1
LDcgQEAgc3RhdGljIHVpbnQzMl90IGNyZWF0ZVRleHR1cmUoSU9TdXJmYWNlUmVmIGhhbmRsZSkK
ICAgICBnbEdldEludGVnZXJ2KEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgJnByZXZUZXh0dXJl
KTsKICAgICBpZiAoIXdhc0VuYWJsZWQpCiAgICAgICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfUkVD
VEFOR0xFX0FSQik7CisKICAgICBnbEdlblRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKICAgICBnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgdGV4dHVyZSk7CiAgICAgQ0dMRXJy
b3IgZXJyb3IgPSBDR0xUZXhJbWFnZUlPU3VyZmFjZTJEKGNvbnRleHQsIEdMX1RFWFRVUkVfUkVD
VEFOR0xFX0FSQiwgaW50ZXJuYWxGb3JtYXQsIElPU3VyZmFjZUdldFdpZHRoKGhhbmRsZSksIElP
U3VyZmFjZUdldEhlaWdodChoYW5kbGUpLCBmb3JtYXQsIHR5cGUsIGhhbmRsZSwgMCk7CkBAIC02
MywyMSArNTcsMTQ5IEBAIHN0YXRpYyB1aW50MzJfdCBjcmVhdGVUZXh0dXJlKElPU3VyZmFjZVJl
ZiBoYW5kbGUpCiAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIHBy
ZXZUZXh0dXJlKTsKICAgICBpZiAoIXdhc0VuYWJsZWQpCiAgICAgICAgIGdsRGlzYWJsZShHTF9U
RVhUVVJFX1JFQ1RBTkdMRV9BUkIpOworCiAgICAgcmV0dXJuIHRleHR1cmU7CiB9CiAKK3N0cnVj
dCBHcmFwaGljc1N1cmZhY2VQcml2YXRlIHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc1N1cmZhY2VQ
cml2YXRlKHVpbnQ2NF90IHRva2VuKQorICAgICAgICA6IG1fdG9rZW4odG9rZW4pCisgICAgICAg
ICwgbV9mcm9udEJ1ZmZlclRleHR1cmUoMCkKKyAgICAgICAgLCBtX2JhY2tCdWZmZXJUZXh0dXJl
KDApCisgICAgeworICAgICAgICAvLyBUaGUgdG9rZW4gY29udGFpbnMgdGhlIElPU3VyZmFjZUlE
IG9mIHRoZSBmaXN0IHN1cmZhY2UvYnVmZmVyIGluIHRoZSBmaXJzdCAzMiBCaXQKKyAgICAgICAg
Ly8gYW5kIHRoZSBJT1N1cmZhY2VJRCBvZiB0aGUgc2Vjb25kIHN1cmZhY2UvYnVmZmVyIGluIHRo
ZSBzZWNvbmQgMzIgQml0LgorICAgICAgICB1aW50MzJfdCBmcm9udEJ1ZmZlciA9IHRva2VuID4+
IDMyOworICAgICAgICB1aW50MzJfdCBiYWNrQnVmZmVyID0gdG9rZW4gJiAweGZmZmY7CisKKyAg
ICAgICAgbV9mcm9udEJ1ZmZlciA9IElPU3VyZmFjZUxvb2t1cChmcm9udEJ1ZmZlcik7CisgICAg
ICAgIG1fYmFja0J1ZmZlciA9IElPU3VyZmFjZUxvb2t1cChiYWNrQnVmZmVyKTsKKyAgICB9CisK
KyAgICBHcmFwaGljc1N1cmZhY2VQcml2YXRlKGNvbnN0IEludFNpemUmIHNpemUsIEdyYXBoaWNz
U3VyZmFjZTo6RmxhZ3MgZmxhZ3MpCisgICAgICAgIDogbV9mcm9udEJ1ZmZlclRleHR1cmUoMCkK
KyAgICAgICAgLCBtX2JhY2tCdWZmZXJUZXh0dXJlKDApCisgICAgeworICAgICAgICB1bnNpZ25l
ZCBwaXhlbEZvcm1hdCA9ICdCR1JBJzsKKyAgICAgICAgdW5zaWduZWQgYnl0ZXNQZXJFbGVtZW50
ID0gNDsKKyAgICAgICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOworICAgICAgICBpbnQgaGVp
Z2h0ID0gc2l6ZS5oZWlnaHQoKTsKKworICAgICAgICB1bnNpZ25lZCBsb25nIGJ5dGVzUGVyUm93
ID0gSU9TdXJmYWNlQWxpZ25Qcm9wZXJ0eShrSU9TdXJmYWNlQnl0ZXNQZXJSb3csIHdpZHRoICog
Ynl0ZXNQZXJFbGVtZW50KTsKKyAgICAgICAgaWYgKCFieXRlc1BlclJvdykKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICB1bnNpZ25lZCBsb25nIGFsbG9jU2l6ZSA9IElPU3VyZmFjZUFs
aWduUHJvcGVydHkoa0lPU3VyZmFjZUFsbG9jU2l6ZSwgaGVpZ2h0ICogYnl0ZXNQZXJSb3cpOwor
ICAgICAgICBpZiAoIWFsbG9jU2l6ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBj
b25zdCB2b2lkICprZXlzWzddOworICAgICAgICBjb25zdCB2b2lkICp2YWx1ZXNbN107CisgICAg
ICAgIGtleXNbMF0gPSBrSU9TdXJmYWNlV2lkdGg7CisgICAgICAgIHZhbHVlc1swXSA9IENGTnVt
YmVyQ3JlYXRlKDAsIGtDRk51bWJlckludFR5cGUsICZ3aWR0aCk7CisgICAgICAgIGtleXNbMV0g
PSBrSU9TdXJmYWNlSGVpZ2h0OworICAgICAgICB2YWx1ZXNbMV0gPSBDRk51bWJlckNyZWF0ZSgw
LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmaGVpZ2h0KTsKKyAgICAgICAga2V5c1syXSA9IGtJT1N1cmZh
Y2VQaXhlbEZvcm1hdDsKKyAgICAgICAgdmFsdWVzWzJdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NG
TnVtYmVySW50VHlwZSwgJnBpeGVsRm9ybWF0KTsKKyAgICAgICAga2V5c1szXSA9IGtJT1N1cmZh
Y2VCeXRlc1BlckVsZW1lbnQ7CisgICAgICAgIHZhbHVlc1szXSA9IENGTnVtYmVyQ3JlYXRlKDAs
IGtDRk51bWJlckludFR5cGUsICZieXRlc1BlckVsZW1lbnQpOworICAgICAgICBrZXlzWzRdID0g
a0lPU3VyZmFjZUJ5dGVzUGVyUm93OworICAgICAgICB2YWx1ZXNbNF0gPSBDRk51bWJlckNyZWF0
ZSgwLCBrQ0ZOdW1iZXJMb25nVHlwZSwgJmJ5dGVzUGVyUm93KTsKKyAgICAgICAga2V5c1s1XSA9
IGtJT1N1cmZhY2VBbGxvY1NpemU7CisgICAgICAgIHZhbHVlc1s1XSA9IENGTnVtYmVyQ3JlYXRl
KDAsIGtDRk51bWJlckxvbmdUeXBlLCAmYWxsb2NTaXplKTsKKyAgICAgICAga2V5c1s2XSA9IGtJ
T1N1cmZhY2VJc0dsb2JhbDsKKyAgICAgICAgdmFsdWVzWzZdID0gKGZsYWdzICYgR3JhcGhpY3NT
dXJmYWNlOjpTdXBwb3J0c1NoYXJpbmcpID8ga0NGQm9vbGVhblRydWUgOiBrQ0ZCb29sZWFuRmFs
c2U7CisKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGRpY3QgPSBDRkRpY3Rpb25hcnlDcmVhdGUo
MCwga2V5cywgdmFsdWVzLCA3LCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZU
eXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IDc7IGkrKykKKyAgICAgICAgICAgIENGUmVsZWFzZSh2YWx1ZXNbaV0pOworCisgICAg
ICAgIG1fZnJvbnRCdWZmZXIgPSBJT1N1cmZhY2VDcmVhdGUoZGljdCk7CisgICAgICAgIG1fYmFj
a0J1ZmZlciA9IElPU3VyZmFjZUNyZWF0ZShkaWN0KTsKKworICAgICAgICB1aW50NjRfdCB0b2tl
biA9IElPU3VyZmFjZUdldElEKG1fZnJvbnRCdWZmZXIpOworICAgICAgICB0b2tlbiA8PD0gMzI7
CisgICAgICAgIHRva2VuIHw9IElPU3VyZmFjZUdldElEKG1fYmFja0J1ZmZlcik7CisKKyAgICAg
ICAgbV90b2tlbiA9IHRva2VuOworICAgIH0KKworICAgIH5HcmFwaGljc1N1cmZhY2VQcml2YXRl
KCkKKyAgICB7CisgICAgICAgIGlmIChtX2Zyb250QnVmZmVyVGV4dHVyZSkKKyAgICAgICAgICAg
IGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fZnJvbnRCdWZmZXJUZXh0dXJlKTsKKworICAgICAgICBp
ZiAobV9iYWNrQnVmZmVyVGV4dHVyZSkKKyAgICAgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwg
Jm1fYmFja0J1ZmZlclRleHR1cmUpOworCisgICAgICAgIGlmIChtX2Zyb250QnVmZmVyKQorICAg
ICAgICAgICAgQ0ZSZWxlYXNlKElPU3VyZmFjZVJlZihtX2Zyb250QnVmZmVyKSk7CisKKyAgICAg
ICAgaWYgKG1fYmFja0J1ZmZlcikKKyAgICAgICAgICAgIENGUmVsZWFzZShJT1N1cmZhY2VSZWYo
bV9iYWNrQnVmZmVyKSk7CisgICAgfQorCisgICAgdWludDMyX3Qgc3dhcEJ1ZmZlcnMoKQorICAg
IHsKKyAgICAgICAgc3RkOjpzd2FwKG1fZnJvbnRCdWZmZXIsIG1fYmFja0J1ZmZlcik7CisgICAg
ICAgIHN0ZDo6c3dhcChtX2Zyb250QnVmZmVyVGV4dHVyZSwgbV9iYWNrQnVmZmVyVGV4dHVyZSk7
CisKKyAgICAgICAgcmV0dXJuIElPU3VyZmFjZUdldElEKG1fZnJvbnRCdWZmZXIpOworICAgIH0K
KworICAgIHVpbnQ2NF90IHRva2VuKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Rv
a2VuOworICAgIH0KKworICAgIHVpbnQzMl90IGZyb250QnVmZmVyVGV4dHVyZUlEKCkKKyAgICB7
CisgICAgICAgIGlmICghbV9mcm9udEJ1ZmZlclRleHR1cmUpCisgICAgICAgICAgICBtX2Zyb250
QnVmZmVyVGV4dHVyZSA9IGNyZWF0ZVRleHR1cmUobV9mcm9udEJ1ZmZlcik7CisKKyAgICAgICAg
cmV0dXJuIG1fZnJvbnRCdWZmZXJUZXh0dXJlOworICAgIH0KKworICAgIHVpbnQzMl90IGJhY2tC
dWZmZXJUZXh0dXJlSUQoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2JhY2tCdWZmZXJUZXh0dXJl
KQorICAgICAgICAgICAgbV9iYWNrQnVmZmVyVGV4dHVyZSA9IGNyZWF0ZVRleHR1cmUobV9iYWNr
QnVmZmVyKTsKKworICAgICAgICByZXR1cm4gbV9iYWNrQnVmZmVyVGV4dHVyZTsKKyAgICB9CisK
KyAgICBQbGF0Zm9ybUdyYXBoaWNzU3VyZmFjZSBmcm9udEJ1ZmZlcigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9mcm9udEJ1ZmZlcjsKKyAgICB9CisKKyAgICBQbGF0Zm9ybUdyYXBo
aWNzU3VyZmFjZSBiYWNrQnVmZmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Jh
Y2tCdWZmZXI7CisgICAgfQorCitwcml2YXRlOgorICAgIFBsYXRmb3JtR3JhcGhpY3NTdXJmYWNl
IG1fZnJvbnRCdWZmZXI7CisgICAgUGxhdGZvcm1HcmFwaGljc1N1cmZhY2UgbV9iYWNrQnVmZmVy
OworICAgIHVpbnQzMl90IG1fZnJvbnRCdWZmZXJUZXh0dXJlOworICAgIHVpbnQzMl90IG1fYmFj
a0J1ZmZlclRleHR1cmU7CisgICAgdWludDY0X3QgbV90b2tlbjsKK307CisKK3VpbnQ2NF90IEdy
YXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1FeHBvcnQoKQoreworICAgIHJldHVybiBtX3ByaXZhdGUt
PnRva2VuKCk7Cit9CisKIHVpbnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1HZXRUZXh0
dXJlSUQoKQogewotICAgIGlmICghbV90ZXh0dXJlKQotICAgICAgICBtX3RleHR1cmUgPSBjcmVh
dGVUZXh0dXJlKG1fcGxhdGZvcm1TdXJmYWNlKTsKLSAgICByZXR1cm4gbV90ZXh0dXJlOworICAg
IHJldHVybiBtX3ByaXZhdGUtPmZyb250QnVmZmVyVGV4dHVyZUlEKCk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlUb0dMVGV4dHVyZSh1aW50MzJfdCB0YXJnZXQsIHVp
bnQzMl90IGlkLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRQb2ludCYgb2Zm
c2V0KQogewogICAgIGdsUHVzaEF0dHJpYihHTF9BTExfQVRUUklCX0JJVFMpOwotICAgIGlmICgh
bV90ZXh0dXJlKQotICAgICAgICBtX3RleHR1cmUgPSBjcmVhdGVUZXh0dXJlKG1fcGxhdGZvcm1T
dXJmYWNlKTsKICAgICBpZiAoIW1fZmJvKQogICAgICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAm
bV9mYm8pOwogICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCAwKTsK
QEAgLTg1LDcgKzIwNyw3IEBAIHZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlUb0dM
VGV4dHVyZSh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IGlkLCBjb25zCiAgICAgZ2xFbmFibGUo
dGFyZ2V0KTsKICAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgaWQpOwogICAgIGdsQmluZEZyYW1l
YnVmZmVyKEdMX1JFQURfRlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICBnbEZyYW1lYnVmZmVyVGV4
dHVyZTJEKEdMX1JFQURfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhU
VVJFX1JFQ1RBTkdMRV9BUkIsIG1fdGV4dHVyZSwgMCk7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyRChHTF9SRUFEX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVS
RV9SRUNUQU5HTEVfQVJCLCBtX3ByaXZhdGUtPmZyb250QnVmZmVyVGV4dHVyZUlEKCksIDApOwog
ICAgIGdsQ29weVRleFN1YkltYWdlMkQodGFyZ2V0LCAwLCB0YXJnZXRSZWN0LngoKSwgdGFyZ2V0
UmVjdC55KCksIG9mZnNldC54KCksIG9mZnNldC55KCksIHRhcmdldFJlY3Qud2lkdGgoKSwgdGFy
Z2V0UmVjdC5oZWlnaHQoKSk7CiAgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9SRUFEX0ZS
QU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJC
LCAwLCAwKTsKICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9SRUFEX0ZSQU1FQlVGRkVSLCAwKTsK
QEAgLTEwMSwxNiArMjIzLDE1IEBAIHZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlU
b0dMVGV4dHVyZSh1aW50MzJfdCB0YXJnZXQsIHVpbnQzMl90IGlkLCBjb25zCiB2b2lkIEdyYXBo
aWNzU3VyZmFjZTo6cGxhdGZvcm1Db3B5RnJvbUZyYW1lYnVmZmVyKHVpbnQzMl90IG9yaWdpbkZi
bywgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkKIHsKICAgICBnbFB1c2hBdHRyaWIoR0xfQUxM
X0FUVFJJQl9CSVRTKTsKLSAgICBpZiAoIW1fdGV4dHVyZSkKLSAgICAgICAgbV90ZXh0dXJlID0g
Y3JlYXRlVGV4dHVyZShtX3BsYXRmb3JtU3VyZmFjZSk7CiAgICAgaWYgKCFtX2ZibykKICAgICAg
ICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKKwogICAgIEdMaW50IG9sZEZCTzsKICAg
ICBnbEdldEludGVnZXJ2KEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcsICZvbGRGQk8pOwogICAgIGds
RW5hYmxlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQik7CiAgICAgZ2xCaW5kRnJhbWVidWZmZXIo
R0xfUkVBRF9GUkFNRUJVRkZFUiwgb3JpZ2luRmJvKTsKICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihH
TF9EUkFXX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChH
TF9EUkFXX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV9SRUNU
QU5HTEVfQVJCLCBtX3RleHR1cmUsIDApOworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xf
RFJBV19GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfUkVDVEFO
R0xFX0FSQiwgbV9wcml2YXRlLT5iYWNrQnVmZmVyVGV4dHVyZUlEKCksIDApOwogICAgIGdsQmxp
dEZyYW1lYnVmZmVyKDAsIDAsIHNvdXJjZVJlY3Qud2lkdGgoKSwgc291cmNlUmVjdC5oZWlnaHQo
KSwgMCwgc291cmNlUmVjdC5oZWlnaHQoKSwgc291cmNlUmVjdC53aWR0aCgpLCAwLCBHTF9DT0xP
Ul9CVUZGRVJfQklULCBHTF9MSU5FQVIpOyAvLyBGbGlwIHRoZSB0ZXh0dXJlIHVwc2lkZSBkb3du
LgogICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRFJBV19GUkFNRUJVRkZFUiwgR0xfQ09M
T1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgMCwgMCk7CiAgICAgZ2xC
aW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG9sZEZCTyk7CkBAIC0xMjAsNjcgKzI0MSw0
NyBAQCB2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Db3B5RnJvbUZyYW1lYnVmZmVyKHVp
bnQzMl90IG9yaWdpbkZibywgY29uc3QgSW50UgogICAgIGdsRmx1c2goKTsKIH0KIAordWludDMy
X3QgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUZyb250QnVmZmVyKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gSU9TdXJmYWNlR2V0SUQobV9wcml2YXRlLT5mcm9udEJ1ZmZlcigpKTsKK30KKwordWlu
dDMyX3QgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybVN3YXBCdWZmZXJzKCkKK3sKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5zd2FwQnVmZmVycygpOworfQorCiBQYXNzUmVmUHRyPEdyYXBoaWNzU3Vy
ZmFjZT4gR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXpl
LCBGbGFncyBmbGFncykKIHsKICAgICAvLyBXZSBjdXJyZW50bHkgZGlzYWJsZSBzdXBwb3J0IGZv
ciBDb3B5VG9UZXh0dXJlIG9uIE1hYywgYmVjYXVzZSB0aGlzIGlzIHVzZWQgZm9yIHNpbmdsZSBi
dWZmZXJlZCBUaWxlcy4KICAgICAvLyBUaGUgc2luZ2xlIGJ1ZmZlcmVkIG5hdHVyZSBvZiB0aGlz
IHJlcXVpcmVzIGEgY2FsbCB0byBnbEZsdXNoLCBhcyBkZXNjcmliZWQgaW4gcGxhdGZvcm1Db3B5
VG9UZXh0dXJlLgogICAgIC8vIFRoaXMgY2FsbCBibG9ja3MgdGhlIEdQVSBmb3IgYWJvdXQgNDBt
cywgd2hpY2ggbWFrZXMgc21vb3RoIGFuaW1hdGlvbnMgaW1wb3NzaWJsZS4KLSAgICBpZiAoZmxh
Z3MgJiBTdXBwb3J0c0NvcHlUb1RleHR1cmUpCisgICAgaWYgKGZsYWdzICYgU3VwcG9ydHNDb3B5
VG9UZXh0dXJlIHx8IGZsYWdzICYgU3VwcG9ydHNTaW5nbGVCdWZmZXJlZCkKICAgICAgICAgcmV0
dXJuIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPigpOwogCi0gICAgdW5zaWduZWQgcGl4ZWxG
b3JtYXQgPSAnQkdSQSc7Ci0gICAgdW5zaWduZWQgYnl0ZXNQZXJFbGVtZW50ID0gNDsKLSAgICBp
bnQgd2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7
Ci0KLSAgICB1bnNpZ25lZCBsb25nIGJ5dGVzUGVyUm93ID0gSU9TdXJmYWNlQWxpZ25Qcm9wZXJ0
eShrSU9TdXJmYWNlQnl0ZXNQZXJSb3csIHdpZHRoICogYnl0ZXNQZXJFbGVtZW50KTsKLSAgICBp
ZiAoIWJ5dGVzUGVyUm93KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBs
b25nIGFsbG9jU2l6ZSA9IElPU3VyZmFjZUFsaWduUHJvcGVydHkoa0lPU3VyZmFjZUFsbG9jU2l6
ZSwgaGVpZ2h0ICogYnl0ZXNQZXJSb3cpOwotICAgIGlmICghYWxsb2NTaXplKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCB2b2lkICprZXlzWzddOwotICAgIGNvbnN0IHZvaWQg
KnZhbHVlc1s3XTsKLSAgICBrZXlzWzBdID0ga0lPU3VyZmFjZVdpZHRoOwotICAgIHZhbHVlc1sw
XSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckludFR5cGUsICZ3aWR0aCk7Ci0gICAga2V5
c1sxXSA9IGtJT1N1cmZhY2VIZWlnaHQ7Ci0gICAgdmFsdWVzWzFdID0gQ0ZOdW1iZXJDcmVhdGUo
MCwga0NGTnVtYmVySW50VHlwZSwgJmhlaWdodCk7Ci0gICAga2V5c1syXSA9IGtJT1N1cmZhY2VQ
aXhlbEZvcm1hdDsKLSAgICB2YWx1ZXNbMl0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJJ
bnRUeXBlLCAmcGl4ZWxGb3JtYXQpOwotICAgIGtleXNbM10gPSBrSU9TdXJmYWNlQnl0ZXNQZXJF
bGVtZW50OwotICAgIHZhbHVlc1szXSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckludFR5
cGUsICZieXRlc1BlckVsZW1lbnQpOwotICAgIGtleXNbNF0gPSBrSU9TdXJmYWNlQnl0ZXNQZXJS
b3c7Ci0gICAgdmFsdWVzWzRdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVyTG9uZ1R5cGUs
ICZieXRlc1BlclJvdyk7Ci0gICAga2V5c1s1XSA9IGtJT1N1cmZhY2VBbGxvY1NpemU7Ci0gICAg
dmFsdWVzWzVdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVyTG9uZ1R5cGUsICZhbGxvY1Np
emUpOwotICAgIGtleXNbNl0gPSBrSU9TdXJmYWNlSXNHbG9iYWw7Ci0gICAgdmFsdWVzWzZdID0g
KGZsYWdzICYgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1NoYXJpbmcpID8ga0NGQm9vbGVhblRy
dWUgOiBrQ0ZCb29sZWFuRmFsc2U7Ci0KLSAgICBDRkRpY3Rpb25hcnlSZWYgZGljdCA9IENGRGlj
dGlvbmFyeUNyZWF0ZSgwLCBrZXlzLCB2YWx1ZXMsIDcsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNh
bGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCA3OyBpKyspCi0gICAgICAgIENGUmVsZWFzZSh2YWx1ZXNbaV0pOwot
CiAgICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0UmVmKG5ldyBHcmFw
aGljc1N1cmZhY2Uoc2l6ZSwgZmxhZ3MpKTsKLSAgICBzdXJmYWNlLT5tX3BsYXRmb3JtU3VyZmFj
ZSA9IElPU3VyZmFjZUNyZWF0ZShkaWN0KTsKLSAgICBpZiAoIXN1cmZhY2UtPm1fcGxhdGZvcm1T
dXJmYWNlKQorICAgIHN1cmZhY2UtPm1fcHJpdmF0ZSA9IG5ldyBHcmFwaGljc1N1cmZhY2VQcml2
YXRlKHNpemUsIGZsYWdzKTsKKworICAgIGlmICghc3VyZmFjZS0+bV9wcml2YXRlLT5mcm9udEJ1
ZmZlcigpIHx8ICFzdXJmYWNlLT5tX3ByaXZhdGUtPmJhY2tCdWZmZXIoKSkKICAgICAgICAgcmV0
dXJuIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPigpOworCiAgICAgcmV0dXJuIHN1cmZhY2U7
CiB9CiAKLVBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGljc1N1cmZhY2U6OnBsYXRm
b3JtSW1wb3J0KGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCB1aW50MzJfdCB0b2tl
bikKK1Bhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3Jt
SW1wb3J0KGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCB1aW50NjRfdCB0b2tlbikK
IHsKICAgICAvLyBXZSBjdXJyZW50bHkgZGlzYWJsZSBzdXBwb3J0IGZvciBDb3B5VG9UZXh0dXJl
IG9uIE1hYywgYmVjYXVzZSB0aGlzIGlzIHVzZWQgZm9yIHNpbmdsZSBidWZmZXJlZCBUaWxlcy4K
ICAgICAvLyBUaGUgc2luZ2xlIGJ1ZmZlcmVkIG5hdHVyZSBvZiB0aGlzIHJlcXVpcmVzIGEgY2Fs
bCB0byBnbEZsdXNoLCBhcyBkZXNjcmliZWQgaW4gcGxhdGZvcm1Db3B5VG9UZXh0dXJlLgogICAg
IC8vIFRoaXMgY2FsbCBibG9ja3MgdGhlIEdQVSBmb3IgYWJvdXQgNDBtcywgd2hpY2ggbWFrZXMg
c21vb3RoIGFuaW1hdGlvbnMgaW1wb3NzaWJsZS4KLSAgICBpZiAoZmxhZ3MgJiBTdXBwb3J0c0Nv
cHlUb1RleHR1cmUpCisgICAgaWYgKGZsYWdzICYgU3VwcG9ydHNDb3B5VG9UZXh0dXJlIHx8IGZs
YWdzICYgU3VwcG9ydHNTaW5nbGVCdWZmZXJlZCkKICAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8
R3JhcGhpY3NTdXJmYWNlPigpOwogCiAgICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFj
ZSA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc1N1cmZhY2Uoc2l6ZSwgZmxhZ3MpKTsKLSAgICBzdXJm
YWNlLT5tX3BsYXRmb3JtU3VyZmFjZSA9IElPU3VyZmFjZUxvb2t1cCh0b2tlbik7Ci0gICAgaWYg
KCFzdXJmYWNlLT5tX3BsYXRmb3JtU3VyZmFjZSkKKyAgICBzdXJmYWNlLT5tX3ByaXZhdGUgPSBu
ZXcgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSh0b2tlbik7CisKKyAgICBpZiAoIXN1cmZhY2UtPm1f
cHJpdmF0ZS0+ZnJvbnRCdWZmZXIoKSB8fCAhc3VyZmFjZS0+bV9wcml2YXRlLT5iYWNrQnVmZmVy
KCkpCiAgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oKTsKKwogICAg
IHJldHVybiBzdXJmYWNlOwogfQogCkBAIC0xOTEsMzggKzI5Miw0MiBAQCBzdGF0aWMgaW50IGlv
U3VyZmFjZUxvY2tPcHRpb25zKGludCBsb2NrT3B0aW9ucykKICAgICAgICAgb3B0aW9ucyB8PSBr
SU9TdXJmYWNlTG9ja1JlYWRPbmx5OwogICAgIGlmICghKGxvY2tPcHRpb25zICYgR3JhcGhpY3NT
dXJmYWNlOjpSZXRhaW5QaXhlbHMpKQogICAgICAgICBvcHRpb25zIHw9IGtJT1N1cmZhY2VMb2Nr
QXZvaWRTeW5jOworCiAgICAgcmV0dXJuIG9wdGlvbnM7CiB9CiAKIGNoYXIqIEdyYXBoaWNzU3Vy
ZmFjZTo6cGxhdGZvcm1Mb2NrKGNvbnN0IEludFJlY3QmIHJlY3QsIGludCogb3V0cHV0U3RyaWRl
LCBMb2NrT3B0aW9ucyBsb2NrT3B0aW9ucykKIHsKKyAgICAvLyBMb2NraW5nIGlzIG9ubHkgbmVj
ZXNzYXJ5IGZvciBzaW5nbGUgYnVmZmVyZWQgdXNlLgorICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBv
bmx5IGhhdmUgYSBmcm9udCBidWZmZXIsIHNvIHdlIG9ubHkgbG9jayB0aGlzIG9uZS4KICAgICBt
X2xvY2tPcHRpb25zID0gbG9ja09wdGlvbnM7Ci0gICAgSU9SZXR1cm4gc3RhdHVzID0gSU9TdXJm
YWNlTG9jayhtX3BsYXRmb3JtU3VyZmFjZSwgaW9TdXJmYWNlTG9ja09wdGlvbnMobV9sb2NrT3B0
aW9ucyksIDApOworICAgIElPUmV0dXJuIHN0YXR1cyA9IElPU3VyZmFjZUxvY2sobV9wcml2YXRl
LT5mcm9udEJ1ZmZlcigpLCBpb1N1cmZhY2VMb2NrT3B0aW9ucyhtX2xvY2tPcHRpb25zKSwgMCk7
CiAgICAgaWYgKHN0YXR1cyA9PSBrSU9SZXR1cm5DYW5ub3RMb2NrKSB7CiAgICAgICAgIG1fbG9j
a09wdGlvbnMgfD0gUmV0YWluUGl4ZWxzOwotICAgICAgICBJT1N1cmZhY2VMb2NrKG1fcGxhdGZv
cm1TdXJmYWNlLCBpb1N1cmZhY2VMb2NrT3B0aW9ucyhtX2xvY2tPcHRpb25zKSwgMCk7CisgICAg
ICAgIElPU3VyZmFjZUxvY2sobV9wcml2YXRlLT5mcm9udEJ1ZmZlcigpLCBpb1N1cmZhY2VMb2Nr
T3B0aW9ucyhtX2xvY2tPcHRpb25zKSwgMCk7CiAgICAgfQogCi0gICAgaW50IHN0cmlkZSA9IElP
U3VyZmFjZUdldEJ5dGVzUGVyUm93KG1fcGxhdGZvcm1TdXJmYWNlKTsKKyAgICBpbnQgc3RyaWRl
ID0gSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3cobV9wcml2YXRlLT5mcm9udEJ1ZmZlcigpKTsKICAg
ICBpZiAob3V0cHV0U3RyaWRlKQogICAgICAgICAqb3V0cHV0U3RyaWRlID0gc3RyaWRlOwogCi0g
ICAgY2hhciogYmFzZSA9IHN0YXRpY19jYXN0PGNoYXIqPihJT1N1cmZhY2VHZXRCYXNlQWRkcmVz
cyhtX3BsYXRmb3JtU3VyZmFjZSkpOworICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFy
Kj4oSU9TdXJmYWNlR2V0QmFzZUFkZHJlc3MobV9wcml2YXRlLT5mcm9udEJ1ZmZlcigpKSk7CisK
ICAgICByZXR1cm4gYmFzZSArIHN0cmlkZSAqIHJlY3QueSgpICsgcmVjdC54KCkgKiA0OwogfQog
CiB2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1VbmxvY2soKQogewotICAgIElPU3VyZmFj
ZVVubG9jayhtX3BsYXRmb3JtU3VyZmFjZSwgaW9TdXJmYWNlTG9ja09wdGlvbnMobV9sb2NrT3B0
aW9ucyksIDApOworICAgIElPU3VyZmFjZVVubG9jayhtX3ByaXZhdGUtPmZyb250QnVmZmVyKCks
IGlvU3VyZmFjZUxvY2tPcHRpb25zKG1fbG9ja09wdGlvbnMpLCAwKTsKIH0KIAogdm9pZCBHcmFw
aGljc1N1cmZhY2U6OnBsYXRmb3JtRGVzdHJveSgpCiB7CiAgICAgaWYgKG1fZmJvKQogICAgICAg
ICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOwotICAgIGlmIChtX3RleHR1cmUpCi0g
ICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgQ0ZSZWxlYXNlKElP
U3VyZmFjZVJlZihtX3BsYXRmb3JtU3VyZmFjZSkpOworICAgIGlmIChtX3ByaXZhdGUpCisgICAg
ICAgIGRlbGV0ZSBtX3ByaXZhdGU7CisgICAgbV9wcml2YXRlID0gMDsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvcXQvR3JhcGhp
Y3NTdXJmYWNlR0xYLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL3F0L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKaW5kZXggYWZjM2E4NC4uZWFiYjUyOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvcXQvR3Jh
cGhpY3NTdXJmYWNlR0xYLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9xdC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCkBAIC02MCw2ICs2MCw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIFhDaGFuZ2VXaW5kb3dBdHRyaWJ1dGVzKGRweSwgd2luZG93LT5o
YW5kbGUoKS0+d2luSWQoKSwgWDExT3ZlcnJpZGVSZWRpcmVjdCwgJmF0dHJpYnV0ZXMpOwogICAg
ICAgICAgICAgd2luZG93LT5zaG93KCk7CiAgICAgICAgIH0KKwogICAgICAgICByZXR1cm4gd2lu
ZG93OwogICAgIH0KIApAQCAtMTczLDYgKzE3NCwxMiBAQCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNl
UHJpdmF0ZSB7CiAKICAgICB2b2lkIHN3YXBCdWZmZXJzKCkKICAgICB7CisgICAgICAgIC8vIElm
IHRoZXJlIGlzIGEgeHBpeG1hcCwgd2UgYXJlIG9uIHRoZSByZWFkaW5nIHNpZGUgYW5kIGRvIG5v
dCB3YW50IHRvIHN3YXAgYW55IGJ1ZmZlcnMuCisgICAgICAgIC8vIFRoZSBidWZmZXJzIGFyZSBi
ZWluZyBzd2l0Y2hlZCBvbiB0aGUgd3JpdGluZyBzaWRlLCB0aGUgcmVhZGluZyBzaWRlIGp1c3Qg
cmVhZHMKKyAgICAgICAgLy8gd2hhdGV2ZXIgdGV4dHVyZSB0aGUgWFdpbmRvdyBjb250YWlucy4K
KyAgICAgICAgaWYgKG1feFBpeG1hcCkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBp
ZiAoIW1fc3VyZmFjZS0+aXNWaXNpYmxlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTE4
Miw4ICsxODksMTMgQEAgc3RydWN0IEdyYXBoaWNzU3VyZmFjZVByaXZhdGUgewogICAgICAgICAg
ICAgUUNvcmVBcHBsaWNhdGlvbjo6cHJvY2Vzc0V2ZW50cygpOwogCiAgICAgICAgIFFPcGVuR0xD
b250ZXh0KiBnbENvbnRleHQgPSBRT3BlbkdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKTsKLSAg
ICAgICAgaWYgKG1fc3VyZmFjZSAmJiBnbENvbnRleHQpCisgICAgICAgIGlmIChtX3N1cmZhY2Ug
JiYgZ2xDb250ZXh0KSB7CisgICAgICAgICAgICBHTGludCBvbGRGQk87CisgICAgICAgICAgICBn
bEdldEludGVnZXJ2KEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcsICZvbGRGQk8pOworICAgICAgICAg
ICAgcEdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBnbENvbnRleHQtPmRlZmF1bHRG
cmFtZWJ1ZmZlck9iamVjdCgpKTsKICAgICAgICAgICAgIGdsQ29udGV4dC0+c3dhcEJ1ZmZlcnMo
bV9zdXJmYWNlLmdldCgpKTsKKyAgICAgICAgICAgIHBHbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFN
RUJVRkZFUiwgb2xkRkJPKTsKKyAgICAgICAgfQogICAgIH0KIAogCkBAIC0yMjQsMjIgKzIzNiwy
MiBAQCBzdGF0aWMgYm9vbCByZXNvbHZlR0xNZXRob2RzKEdyYXBoaWNzU3VyZmFjZVByaXZhdGUq
IHApCiAgICAgcmV0dXJuIHJlc29sdmVkOwogfQogCi11aW50MzJfdCBHcmFwaGljc1N1cmZhY2U6
OnBsYXRmb3JtRXhwb3J0KCkKK3VpbnQ2NF90IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1FeHBv
cnQoKQogewogICAgIHJldHVybiBtX3BsYXRmb3JtU3VyZmFjZTsKIH0KIAogdWludDMyX3QgR3Jh
cGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUdldFRleHR1cmVJRCgpCiB7Ci0gICAgaWYgKCFtX3RleHR1
cmUpCisgICAgaWYgKCFtX3RleHR1cmUpIHsKICAgICAgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV90
ZXh0dXJlKTsKLQotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsK
LSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVS
LCBHTF9MSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VE
R0UpOwotICAgIHBHbFhCaW5kVGV4SW1hZ2VFWFQobV9wcml2YXRlLT5kaXNwbGF5KCksIG1fcHJp
dmF0ZS0+Z2x4UGl4bWFwKCksIEdMWF9GUk9OVF9FWFQsIDApOworICAgICAgICBnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CisgICAgICAgIGdsVGV4UGFyYW1ldGVyZihH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAg
IGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdM
X0xJTkVBUik7CisgICAgICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIGdsVGV4UGFyYW1ldGVyaShH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAg
ICAgIHBHbFhCaW5kVGV4SW1hZ2VFWFQobV9wcml2YXRlLT5kaXNwbGF5KCksIG1fcHJpdmF0ZS0+
Z2x4UGl4bWFwKCksIEdMWF9GUk9OVF9FWFQsIDApOworICAgIH0KIAogICAgIHJldHVybiBtX3Rl
eHR1cmU7CiB9CkBAIC0yNjMsMTQgKzI3NSwyNSBAQCB2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxh
dGZvcm1Db3B5RnJvbUZyYW1lYnVmZmVyKHVpbnQzMl90IG9yaWdpbkZibywgY29uc3QgSW50Ugog
ICAgIHBHbEJsaXRGcmFtZWJ1ZmZlcigwLCAwLCB3aWR0aCwgaGVpZ2h0LCAwLCAwLCB3aWR0aCwg
aGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwogICAgIHBHbEJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgb2xkRkJPKTsKICAgICBnbFBvcEF0dHJpYigpOworfQog
Cit1aW50MzJfdCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRnJvbnRCdWZmZXIoKSBjb25zdAor
eworICAgIHJldHVybiAwOworfQorCit1aW50MzJfdCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3Jt
U3dhcEJ1ZmZlcnMoKQorewogICAgIG1fcHJpdmF0ZS0+c3dhcEJ1ZmZlcnMoKTsKKyAgICByZXR1
cm4gMDsKIH0KIAogUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6
cGxhdGZvcm1DcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MpCiB7CiAgICAg
Ly8gWDExIGRvZXMgbm90IHN1cHBvcnQgQ29weVRvVGV4dHVyZSwgc28gd2UgZG8gbm90IGNyZWF0
ZSBhIEdyYXBoaWNzU3VyZmFjZSBpZiB0aGlzIGlzIHJlcXVlc3RlZC4KLSAgICBpZiAoZmxhZ3Mg
JiBTdXBwb3J0c0NvcHlUb1RleHR1cmUpCisgICAgLy8gR3JhcGhpY3NTdXJmYWNlR0xYIHVzZXMg
YW4gWFdpbmRvdyBhcyBuYXRpdmUgc3VyZmFjZS4gVGhpcyBvbmUgYWx3YXlzIGhhcyBhIGZyb250
IGFuZCBhIGJhY2sgYnVmZmVyLgorICAgIC8vIFRoZXJlZm9yZSBzaW5nbGUgYnVmZmVyZWQgR3Jh
cGhpY3NTdXJmYWNlcyBhcmUgbm90IHN1cHBvcnRlZC4KKyAgICBpZiAoZmxhZ3MgJiBTdXBwb3J0
c0NvcHlUb1RleHR1cmUgfHwgZmxhZ3MgJiBTdXBwb3J0c1NpbmdsZUJ1ZmZlcmVkKQogICAgICAg
ICByZXR1cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CiAKICAgICBSZWZQdHI8R3Jh
cGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzU3VyZmFjZShzaXpl
LCBmbGFncykpOwpAQCAtMjg0LDEwICszMDcsMTIgQEAgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZh
Y2U+IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1DcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwK
ICAgICByZXR1cm4gc3VyZmFjZTsKIH0KIAotUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdy
YXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1JbXBvcnQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3Mg
ZmxhZ3MsIHVpbnQzMl90IHRva2VuKQorUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBo
aWNzU3VyZmFjZTo6cGxhdGZvcm1JbXBvcnQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxh
Z3MsIHVpbnQ2NF90IHRva2VuKQogewogICAgIC8vIFgxMSBkb2VzIG5vdCBzdXBwb3J0IENvcHlU
b1RleHR1cmUsIHNvIHdlIGRvIG5vdCBjcmVhdGUgYSBHcmFwaGljc1N1cmZhY2UgaWYgdGhpcyBp
cyByZXF1ZXN0ZWQuCi0gICAgaWYgKGZsYWdzICYgU3VwcG9ydHNDb3B5VG9UZXh0dXJlKQorICAg
IC8vIEdyYXBoaWNzU3VyZmFjZUdMWCB1c2VzIGFuIFhXaW5kb3cgYXMgbmF0aXZlIHN1cmZhY2Uu
IFRoaXMgb25lIGFsd2F5cyBoYXMgYSBmcm9udCBhbmQgYSBiYWNrIGJ1ZmZlci4KKyAgICAvLyBU
aGVyZWZvcmUgc2luZ2xlIGJ1ZmZlcmVkIEdyYXBoaWNzU3VyZmFjZXMgYXJlIG5vdCBzdXBwb3J0
ZWQuCisgICAgaWYgKGZsYWdzICYgU3VwcG9ydHNDb3B5VG9UZXh0dXJlIHx8IGZsYWdzICYgU3Vw
cG9ydHNTaW5nbGVCdWZmZXJlZCkKICAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8R3JhcGhpY3NT
dXJmYWNlPigpOwogCiAgICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0
UmVmKG5ldyBHcmFwaGljc1N1cmZhY2Uoc2l6ZSwgZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0
b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyQmFja2luZ1N0b3JlLmNwcAppbmRleCA4ZDYwYzdiLi5iMjU4ZDRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJh
Y2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwCkBAIC0zNCwxNiArMzQsMTkgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotdm9pZCBUZXh0
dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6c2V0R3JhcGhpY3NTdXJmYWNlKHVpbnQzMl90
IGdyYXBoaWNzU3VyZmFjZVRva2VuLCBjb25zdCBJbnRTaXplJiBzdXJmYWNlU2l6ZSkKK3ZvaWQg
VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU6OnNldEdyYXBoaWNzU3VyZmFjZSh1aW50
NjRfdCBncmFwaGljc1N1cmZhY2VUb2tlbiwgY29uc3QgSW50U2l6ZSYgc3VyZmFjZVNpemUsIHVp
bnQzMl90IGZyb250QnVmZmVyKQogewotICAgIGlmIChncmFwaGljc1N1cmZhY2VUb2tlbiAhPSBt
X2JhY2tCdWZmZXJHcmFwaGljc1N1cmZhY2VEYXRhLm1fZ3JhcGhpY3NTdXJmYWNlVG9rZW4pIHsK
KyAgICBpZiAoZ3JhcGhpY3NTdXJmYWNlVG9rZW4gIT0gbV9ncmFwaGljc1N1cmZhY2VUb2tlbikg
ewogICAgICAgICBHcmFwaGljc1N1cmZhY2U6OkZsYWdzIHN1cmZhY2VGbGFncyA9IEdyYXBoaWNz
U3VyZmFjZTo6U3VwcG9ydHNUZXh0dXJlVGFyZ2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1NoYXJpbmc7Ci0g
ICAgICAgIG1fYmFja0J1ZmZlckdyYXBoaWNzU3VyZmFjZURhdGEuc2V0U3VyZmFjZShHcmFwaGlj
c1N1cmZhY2U6OmNyZWF0ZShzdXJmYWNlU2l6ZSwgc3VyZmFjZUZsYWdzLCBncmFwaGljc1N1cmZh
Y2VUb2tlbikpOworICAgICAgICBzZXRTdXJmYWNlKEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKHN1
cmZhY2VTaXplLCBzdXJmYWNlRmxhZ3MsIGdyYXBoaWNzU3VyZmFjZVRva2VuKSk7CiAgICAgICAg
IG1fZ3JhcGhpY3NTdXJmYWNlU2l6ZSA9IHN1cmZhY2VTaXplOwogICAgIH0KIAotICAgIHN0ZDo6
c3dhcChtX2JhY2tCdWZmZXJHcmFwaGljc1N1cmZhY2VEYXRhLCBtX2Zyb250QnVmZmVyR3JhcGhp
Y3NTdXJmYWNlRGF0YSk7CisgICAgUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZT4gc3Vy
ZmFjZSA9IGdyYXBoaWNzU3VyZmFjZSgpOworICAgIGlmIChzdXJmYWNlLT5mcm9udEJ1ZmZlcigp
ICE9IGZyb250QnVmZmVyKQorICAgICAgICBzdXJmYWNlLT5zd2FwQnVmZmVycygpOworCiB9CiAK
IFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3Rv
cmU6OnRleHR1cmUoKSBjb25zdApAQCAtNTksMTUgKzYyLDI1IEBAIHZvaWQgVGV4dHVyZU1hcHBl
clN1cmZhY2VCYWNraW5nU3RvcmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIq
IHRleHR1CiAgICAgYWRqdXN0ZWRUcmFuc2Zvcm0ubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRy
aXg6OnJlY3RUb1JlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbV9ncmFwaGljc1N1
cmZhY2VTaXplKSwgdGFyZ2V0UmVjdCkpOwogI2lmIE9TKERBUldJTikKICAgICAvLyBUaGlzIGlz
IHNwZWNpZmljIHRvIHRoZSBNYWMgaW1wbGVtZW50YXRpb24gb2YgR3JhcGhpY3NTdXJmYWNlLiBJ
T1N1cmZhY2UgcmVxdWlyZXMgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCIHRvIGJlIHVzZWQuCi0g
ICAgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMKj4odGV4dHVyZU1hcHBlciktPmRyYXdUZXh0
dXJlUmVjdGFuZ2xlQVJCKG1fZnJvbnRCdWZmZXJHcmFwaGljc1N1cmZhY2VEYXRhLm1fdGV4dHVy
ZUlELCAwLCBtX2dyYXBoaWNzU3VyZmFjZVNpemUsIHRhcmdldFJlY3QsIGFkanVzdGVkVHJhbnNm
b3JtLCBvcGFjaXR5LCBtYXNrKTsKKyAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPih0
ZXh0dXJlTWFwcGVyKS0+ZHJhd1RleHR1cmVSZWN0YW5nbGVBUkIobV9ncmFwaGljc1N1cmZhY2Ut
PmdldFRleHR1cmVJRCgpLCAwLCBtX2dyYXBoaWNzU3VyZmFjZVNpemUsIHRhcmdldFJlY3QsIGFk
anVzdGVkVHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KHRleHR1cmVNYXBwZXIpOwotICAgIFVOVVNFRF9QQVJBTShvcGFjaXR5KTsKLSAgICBVTlVTRURf
UEFSQU0obWFzayk7CisgICAgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMKj4odGV4dHVyZU1h
cHBlciktPmRyYXdUZXh0dXJlKG1fZ3JhcGhpY3NTdXJmYWNlLT5nZXRUZXh0dXJlSUQoKSwgMCwg
bV9ncmFwaGljc1N1cmZhY2VTaXplLCB0YXJnZXRSZWN0LCBhZGp1c3RlZFRyYW5zZm9ybSwgb3Bh
Y2l0eSwgbWFzayk7CiAjZW5kaWYKIH0KICNlbmRpZgogCit2b2lkIFRleHR1cmVNYXBwZXJTdXJm
YWNlQmFja2luZ1N0b3JlOjpzZXRTdXJmYWNlKFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBz
dXJmYWNlKQoreworICAgIGlmIChzdXJmYWNlKSB7CisgICAgICAgIG1fZ3JhcGhpY3NTdXJmYWNl
ID0gc3VyZmFjZTsKKyAgICAgICAgbV9ncmFwaGljc1N1cmZhY2VUb2tlbiA9IG1fZ3JhcGhpY3NT
dXJmYWNlLT5leHBvcnRUb2tlbigpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZ3JhcGhpY3NT
dXJmYWNlID0gUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oKTsKKyAgICAgICAgbV9ncmFwaGljc1N1
cmZhY2VUb2tlbiA9IDA7CisgICAgfQorfQorCisKIHZvaWQgVGV4dHVyZU1hcHBlclRpbGU6OnVw
ZGF0ZUNvbnRlbnRzKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEltYWdlKiBpbWFnZSwg
Y29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQogewogICAgIEludFJlY3QgdGFyZ2V0UmVjdCA9IGVu
Y2xvc2luZ0ludFJlY3QobV9yZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9y
ZS5oCmluZGV4IDQxMjMwNjYuLjlkMDAyYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmUuaApAQCAtNDcsMzUgKzQ3LDI3IEBAIHByb3RlY3RlZDoKIH07CiAKICNpZiBVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkKLXN0cnVjdCBHcmFwaGljc1N1cmZhY2VEYXRhIHsKLSAgICB2b2lk
IHNldFN1cmZhY2UoUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2UpCi0gICAgewot
ICAgICAgICBtX2dyYXBoaWNzU3VyZmFjZSA9IHN1cmZhY2U7Ci0gICAgICAgIG1fZ3JhcGhpY3NT
dXJmYWNlVG9rZW4gPSBtX2dyYXBoaWNzU3VyZmFjZS0+ZXhwb3J0VG9rZW4oKTsKLSAgICAgICAg
bV90ZXh0dXJlSUQgPSBtX2dyYXBoaWNzU3VyZmFjZS0+Z2V0VGV4dHVyZUlEKCk7Ci0gICAgfQot
Ci0gICAgR3JhcGhpY3NTdXJmYWNlRGF0YSgpCi0gICAgICAgIDogbV90ZXh0dXJlSUQoMCkKLSAg
ICAgICAgLCBtX2dyYXBoaWNzU3VyZmFjZVRva2VuKDApCi0gICAgeyB9Ci0KLSAgICB1aW50MzJf
dCBtX3RleHR1cmVJRDsKLSAgICB1aW50MzJfdCBtX2dyYXBoaWNzU3VyZmFjZVRva2VuOwotICAg
IFJlZlB0cjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U+IG1fZ3JhcGhpY3NTdXJmYWNlOwotfTsK
LQogY2xhc3MgVGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmUgOiBwdWJsaWMgVGV4dHVy
ZU1hcHBlckJhY2tpbmdTdG9yZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4
dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZSk7IH0KLSAgICB2b2lkIHNldEdy
YXBoaWNzU3VyZmFjZSh1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbiwgY29uc3QgSW50U2l6
ZSYgc3VyZmFjZVNpemUpOworICAgIHZvaWQgc2V0R3JhcGhpY3NTdXJmYWNlKHVpbnQ2NF90IGdy
YXBoaWNzU3VyZmFjZVRva2VuLCBjb25zdCBJbnRTaXplJiBzdXJmYWNlU2l6ZSwgdWludDMyX3Qg
ZnJvbnRCdWZmZXIpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlPiBn
cmFwaGljc1N1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX2dyYXBoaWNzU3VyZmFjZTsgfQogICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlKCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBCaXRtYXBUZXh0
dXJlKik7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmUoKSB7
IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgc2V0U3VyZmFjZShQYXNzUmVmUHRyPEdyYXBoaWNz
U3VyZmFjZT4pOworCiBwcml2YXRlOgorICAgIFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0
b3JlKCkKKyAgICAgICAgOiBUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlKCkKKyAgICAgICAgLCBt
X2dyYXBoaWNzU3VyZmFjZVRva2VuKDApCisgICAgICAgIHsgfQorCisgICAgdWludDY0X3QgbV9n
cmFwaGljc1N1cmZhY2VUb2tlbjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNl
PiBtX2dyYXBoaWNzU3VyZmFjZTsKICAgICBJbnRTaXplIG1fZ3JhcGhpY3NTdXJmYWNlU2l6ZTsK
LSAgICBHcmFwaGljc1N1cmZhY2VEYXRhIG1fZnJvbnRCdWZmZXJHcmFwaGljc1N1cmZhY2VEYXRh
OwotICAgIEdyYXBoaWNzU3VyZmFjZURhdGEgbV9iYWNrQnVmZmVyR3JhcGhpY3NTdXJmYWNlRGF0
YTsKIH07CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaApp
bmRleCA5NjE0Yzg5Li4yMjkyZjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXIuaApAQCAtMzQsNiArMzQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN3YXBC
dWZmZXJzKCkgeyB9CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiAgICAgdmlydHVhbCB1aW50
MzJfdCBjb3B5VG9HcmFwaGljc1N1cmZhY2UoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB1
aW50NjRfdCBncmFwaGljc1N1cmZhY2VUb2tlbigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICNlbmRp
ZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCmluZGV4IDM3ODhhYjMuLjBhMTQwOGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MCBAQAorMjAxMi0wOC0wOCAgWmVubyBBbGJpc3NlciAgPHplbm9Ad2Via2l0Lm9yZz4K
KworICAgICAgICBNYWtlIEdyYXBoaWNzU3VyZmFjZSBkb3VibGUgYnVmZmVyZWQgYnkgZGVmYXVs
dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzMjUy
CisKKyAgICAgICAgQ3JlYXRlIG9ubHkgYSBzaW5nbGUgR3JhcGhpY3NTdXJmYWNlIHBlciBjYW52
YXMKKyAgICAgICAgb24gYm90aCBzdXBwb3J0ZWQgcGxhdGZvcm1zIE1hYy9MaW51eC4KKyAgICAg
ICAgVGhlIEdyYXBoaWNzU3VyZmFjZSBvbiBNYWMgaW50ZXJuYWxseSB1c2VzIHR3byBJT1N1cmZh
Y2UKKyAgICAgICAgdHdvIHByb3ZpZGUgYSBmcm9udCBhbmQgYSBiYWNrIGJ1ZmZlci4KKyAgICAg
ICAgVGhlIEdMWCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc1N1cmZhY2UgdXNlcworICAgICAg
ICBhbiBYV2luZG93IHdoaWNoIGFscmVhZHkgcHJvdmlkZXMgYSBmcm9udCBhbmQgYSBiYWNrIGJ1
ZmZlci4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFNoYXJlZC9TaGFyZWFibGVTdXJmYWNlLmg6CisgICAgICAgIChIYW5kbGUpOgorICAgICAgICAg
ICAgQ2hhbmdlIHRoZSB0eXBlIG9mIEdyYXBoaWNzU3VyZmFjZSB0b2tlbiB0byB1aW50NjRfdC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eTo6c3luY0NhbnZhcyk6CisgICAgICAgICAgICBBZGQgYSBwYXJhbWV0ZXIgdGhhdCBkZW5vdGVz
IHRoZSBjdXJyZW50IGZyb250IGJ1ZmZlciBvZiB0aGUKKyAgICAgICAgICAgIEdyYXBoaWNzU3Vy
ZmFjZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVD
b29yZGluYXRvclByb3h5Lmg6CisgICAgICAgIChMYXllclRyZWVDb29yZGluYXRvclByb3h5KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
UmVuZGVyZXI6OnN5bmNDYW52YXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmg6CisgICAgICAgIChMYXllclRyZWVSZW5kZXJlcik6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c3luY0NhbnZhcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmg6CisgICAgICAgIChD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNDYW52YXMpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5h
dG9yLmg6CisgICAgICAgIChMYXllclRyZWVDb29yZGluYXRvcik6CisKIDIwMTItMDgtMDYgIE1h
cmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtXSzJd
W0dUS10gSW1wbGVtZW50IGEgbmV3IHNwZWxsIGNoZWNrZXIgQVBJIGZvciBXZWJLaXQyR1RLKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVN1cmZhY2UuaCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVTdXJmYWNlLmgKaW5kZXggZmI3NGI2MS4uNmNk
NzM2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVN1cmZhY2Uu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlU3VyZmFjZS5oCkBAIC02Miw3
ICs2Miw3IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIFNoYXJlYWJsZVN1cmZhY2U7
CiAgICAgICAgIG11dGFibGUgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgbV9iaXRtYXBIYW5kbGU7
CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgICAgIHVpbnQzMl90IG1fZ3JhcGhpY3NT
dXJmYWNlVG9rZW47CisgICAgICAgIHVpbnQ2NF90IG1fZ3JhcGhpY3NTdXJmYWNlVG9rZW47CiAj
ZW5kaWYKICAgICAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7CiAgICAgICAgIFNoYXJlYWJs
ZUJpdG1hcDo6RmxhZ3MgbV9mbGFnczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eS5jcHAKaW5kZXggOWIwYTVhMy4uMTUyNDkxYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTE2NCw5ICsxNjQsOSBA
QCB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9u
KGNvbnN0IEludFBvaW50JiBwb3NpdGlvbgogICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVy
VHJlZVJlbmRlcmVyOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbiwgbV9yZW5kZXJlci5nZXQoKSwg
cG9zaXRpb24pKTsKIH0KIAotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzeW5jQ2Fu
dmFzKHVpbnQzMl90IGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFw
aGljc1N1cmZhY2VUb2tlbikKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c3luY0Nh
bnZhcyh1aW50MzJfdCBpZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDY0X3QgZ3Jh
cGhpY3NTdXJmYWNlVG9rZW4sIHVpbnQzMl90IGZyb250QnVmZmVyKQogewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzLCBtX3JlbmRlcmVyLmdl
dCgpLCBpZCwgY2FudmFzU2l6ZSwgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pKTsKKyAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c3luY0NhbnZhcywgbV9yZW5kZXJlci5n
ZXQoKSwgaWQsIGNhbnZhc1NpemUsIGdyYXBoaWNzU3VyZmFjZVRva2VuLCBmcm9udEJ1ZmZlcikp
OwogfQogCiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnB1cmdlQmFja2luZ1N0b3Jl
cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmgKaW5kZXgg
ZDZmMTVkMS4uN2JmOWRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkuaApAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVWaWV3
cG9ydCgpOwogICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CiAgICAgdm9pZCBkaWRDaGFuZ2VT
Y3JvbGxQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24pOwotICAgIHZv
aWQgc3luY0NhbnZhcyh1aW50MzJfdCBpZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFz
U2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pOworICAgIHZvaWQgc3luY0NhbnZh
cyh1aW50MzJfdCBpZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDY0
X3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4sIHVpbnQzMl90IGZyb250QnVmZmVyKTsKICAgICB2b2lk
IHB1cmdlQmFja2luZ1N0b3JlcygpOwogICAgIExheWVyVHJlZVJlbmRlcmVyKiBsYXllclRyZWVS
ZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXIuZ2V0KCk7IH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4K
aW5kZXggOWVjYTAzMi4uZjhjM2QyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdl
cy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0zMyw2ICszMyw2IEBAIG1l
c3NhZ2VzIC0+IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkgewogICAgIERlc3Ryb3lEaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSkKICAgICBEaWRSZW5kZXJGcmFtZSgpCiAgICAg
RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9zaXRpb24pCi0gICAg
U3luY0NhbnZhcyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6SW50U2l6ZSBjYW52YXNTaXplLCB1aW50
MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikKKyAgICBTeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBX
ZWJDb3JlOjpJbnRTaXplIGNhbnZhc1NpemUsIHVpbnQ2NF90IGdyYXBoaWNzU3VyZmFjZVRva2Vu
LCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
UmVuZGVyZXIuY3BwCmluZGV4IDQ3MDRlNWUuLjc5NGU4MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVSZW5kZXJlci5jcHAKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIExheWVyVHJlZVJlbmRl
cmVyOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCiAg
ICAgbV9wZW5kaW5nUmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uID0gcG9zaXRpb247CiB9
CiAKLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNDYW52YXMoV2ViTGF5ZXJJRCBpZCwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNl
VG9rZW4pCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzKFdlYkxheWVySUQgaWQs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQ2NF90IGdyYXBoaWNzU3Vy
ZmFjZVRva2VuLCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKIHsKICAgICBpZiAoY2FudmFzU2l6ZS5p
c0VtcHR5KCkgfHwgIW1fdGV4dHVyZU1hcHBlcikKICAgICAgICAgcmV0dXJuOwpAQCAtMjA4LDcg
KzIwOCw3IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNDYW52YXMoV2ViTGF5ZXJJRCBp
ZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzCiAgICAgfSBlbHNlCiAgICAgICAgIGNh
bnZhc0JhY2tpbmdTdG9yZSA9IGl0LT5zZWNvbmQ7CiAKLSAgICBjYW52YXNCYWNraW5nU3RvcmUt
PnNldEdyYXBoaWNzU3VyZmFjZShncmFwaGljc1N1cmZhY2VUb2tlbiwgY2FudmFzU2l6ZSk7Cisg
ICAgY2FudmFzQmFja2luZ1N0b3JlLT5zZXRHcmFwaGljc1N1cmZhY2UoZ3JhcGhpY3NTdXJmYWNl
VG9rZW4sIGNhbnZhc1NpemUsIGZyb250QnVmZmVyKTsKICAgICBsYXllci0+c2V0Q29udGVudHNU
b01lZGlhKGNhbnZhc0JhY2tpbmdTdG9yZS5nZXQoKSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJl
bmRlcmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVSZW5kZXJlci5oCmluZGV4IDEyM2JlMzguLjhkZGQxMDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRl
cmVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlUmVuZGVyZXIuaApAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CiAgICAgdm9pZCBzZXRW
aXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogICAgIHZvaWQg
ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9u
KTsKLSAgICB2b2lkIHN5bmNDYW52YXModWludDMyX3QgaWQsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuKTsKKyAgICB2b2lk
IHN5bmNDYW52YXModWludDMyX3QgaWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1Np
emUsIHVpbnQ2NF90IGdyYXBoaWNzU3VyZmFjZVRva2VuLCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7
CiAKICAgICB2b2lkIGRldGFjaCgpOwogICAgIHZvaWQgYXBwZW5kVXBkYXRlKGNvbnN0IEZ1bmN0
aW9uPHZvaWQoKT4mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IGQ4OWU3NGEuLjYwYjBjMmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
LmNwcApAQCAtNTAxLDggKzUwMSwxMCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c3luY0NhbnZhcygpCiAgICAgICAgIHJldHVybjsKIAogI2lmIFVTRShHUkFQSElDU19TVVJGQUNF
KQotICAgIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuID0gbV9jYW52YXNQbGF0Zm9ybUxh
eWVyLT5jb3B5VG9HcmFwaGljc1N1cmZhY2UoKTsKLSAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllckNsaWVudC0+c3luY0NhbnZhcyhtX2lkLCBJbnRTaXplKHNpemUoKS53aWR0aCgpLCBzaXpl
KCkuaGVpZ2h0KCkpLCBncmFwaGljc1N1cmZhY2VUb2tlbik7CisgICAgdWludDMyX3QgZnJvbnRC
dWZmZXIgPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpOwor
ICAgIHVpbnQ2NF90IHRva2VuID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5ncmFwaGljc1N1cmZh
Y2VUb2tlbigpOworCisgICAgbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPnN5bmND
YW52YXMobV9pZCwgSW50U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSwgdG9r
ZW4sIGZyb250QnVmZmVyKTsKICNlbmRpZgogICAgIG1fY2FudmFzTmVlZHNEaXNwbGF5ID0gZmFs
c2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllci5oCmluZGV4IDZlMGM1N2QuLmQyOTk3NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCkBAIC02MSw3ICs2
MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhXZWJMYXll
cklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJikgPSAwOwogI2VuZGlmCiAjaWYg
UExBVEZPUk0oUVQpCi0gICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMoV2ViTGF5ZXJJRCwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNl
VG9rZW4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhXZWJMYXllcklELCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBjYW52YXNTaXplLCB1aW50NjRfdCBncmFwaGljc1N1cmZhY2VU
b2tlbiwgdWludDMyX3QgZnJvbnRCdWZmZXIpID0gMDsKICNlbmRpZgogICAgIHZpcnR1YWwgdm9p
ZCBhdHRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllciopID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNv
b3JkaW5hdG9yLmNwcAppbmRleCAxMzViN2Y1Li42NDhjYTcyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVD
b29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCkBAIC0yNzgsMTAgKzI3
OCwxMCBAQCB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jTGF5ZXJDaGlsZHJlbihXZWJM
YXllcklEIGlkLCBjb25zdCBWZWN0b3I8V2ViTGF5ZQogICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckNoaWxk
cmVuKGlkLCBjaGlsZHJlbikpOwogfQogCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5j
Q2FudmFzKFdlYkxheWVySUQgaWQsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90
IGdyYXBoaWNzU3VyZmFjZVRva2VuKQordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0Nh
bnZhcyhXZWJMYXllcklEIGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCB1aW50NjRfdCBn
cmFwaGljc1N1cmZhY2VUb2tlbiwgdWludDMyX3QgZnJvbnRCdWZmZXIpCiB7CiAgICAgbV9zaG91
bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eTo6U3luY0NhbnZhcyhpZCwgY2FudmFzU2l6ZSwgZ3JhcGhpY3NT
dXJmYWNlVG9rZW4pKTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OlN5bmNDYW52YXMoaWQsIGNhbnZhc1NpemUsIGdyYXBoaWNzU3VyZmFj
ZVRva2VuLCBmcm9udEJ1ZmZlcikpOwogfQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKaW5kZXgg
NDQ5NDZkYi4uNGI5YmQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvci5oCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCiAgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMoV2ViTGF5ZXJJ
RCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwogI2VuZGlmCi0gICAgdmlydHVh
bCB2b2lkIHN5bmNDYW52YXMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2Fu
dmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBzeW5jQ2FudmFzKFdlYkxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IGNhbnZhc1NpemUsIHVpbnQ2NF90IGdyYXBoaWNzU3VyZmFjZVRva2VuLCB1aW50MzJfdCBmcm9u
dEJ1ZmZlcikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaExheWVyKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXll
cihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQg
c3luY0ZpeGVkTGF5ZXJzKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157189</attachid>
            <date>2012-08-08 05:15:30 -0700</date>
            <delta_ts>2012-08-08 07:23:04 -0700</delta_ts>
            <desc>patch for review.</desc>
            <filename>93252_20120808-134905.patch</filename>
            <type>text/plain</type>
            <size>47832</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3MzcxNDdiLi40NTlkNzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAw
IEBACisyMDEyLTA4LTA4ICBaZW5vIEFsYmlzc2VyICA8emVub0B3ZWJraXQub3JnPgorCisgICAg
ICAgIE1ha2UgR3JhcGhpY3NTdXJmYWNlIGRvdWJsZSBidWZmZXJlZCBieSBkZWZhdWx0LgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTMyNTIKKworICAg
ICAgICBDcmVhdGUgb25seSBhIHNpbmdsZSBHcmFwaGljc1N1cmZhY2UgcGVyIGNhbnZhcworICAg
ICAgICBvbiBib3RoIHN1cHBvcnRlZCBwbGF0Zm9ybXMgTWFjL0xpbnV4LgorICAgICAgICBUaGUg
R3JhcGhpY3NTdXJmYWNlIG9uIE1hYyBpbnRlcm5hbGx5IHVzZXMgdHdvIElPU3VyZmFjZQorICAg
ICAgICB0byBwcm92aWRlIGEgZnJvbnQgYW5kIGEgYmFjayBidWZmZXIuCisgICAgICAgIFRoZSBH
TFggaW1wbGVtZW50YXRpb24gb2YgR3JhcGhpY3NTdXJmYWNlIHVzZXMKKyAgICAgICAgYW4gWFdp
bmRvdyB3aGljaCBhbHJlYWR5IHByb3ZpZGVzIGEgZnJvbnQgYW5kIGEgYmFjayBidWZmZXIuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZSk6CisgICAgICAgICAgICBSZW1vdmUgY3JlYXRpb24gb2Ygc2Vjb25k
IEdyYXBoaWNzU3VyZmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Y29weVRvR3JhcGhpY3NTdXJmYWNlKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpncmFw
aGljc1N1cmZhY2VUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc1N1cmZhY2U6OmNyZWF0ZSk6CisgICAgICAgICAgICBBZGp1c3QgdG9rZW4gdHlwZSB0byB1
aW50NjRfdC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6ZXhwb3J0VG9rZW4p
OgorICAgICAgICAgICAgQWRqdXN0IHJldHVybiB0eXBlIHRvIHVpbnQ2NF90LgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpmcm9udEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6c3dhcEJ1ZmZlcnMpOgorICAg
ICAgICAgICAgQWRkIGZvcndhcmRpbmcgZnVuY3Rpb24gdG8gc3dhcCBidWZmZXJzIGluc2lkZSBH
cmFwaGljc1N1cmZhY2UuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3Jh
cGhpY3NTdXJmYWNlLmg6CisgICAgICAgIChHcmFwaGljc1N1cmZhY2UpOgorICAgICAgICAgICAg
QWRkIFN1cHBvcnRzU2luZ2xlQnVmZmVyZWQgZmxhZyB0byBhbGxvdyBmb3Igc2luZ2xlIGJ1ZmZl
cmVkIGltcGxlbWVudGF0aW9ucy4KKyAgICAgICAgICAgIEN1cnJlbnRseSBzaW5nbGUgYnVmZmVy
ZWQgc3VyZmFjZXMgYXJlIGVpdGhlciBub3QgaW1wbGVtZW50ZWQgb3IgZGlzYWJsZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5j
cHA6CisgICAgICAgICAgICBNb3ZlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgaW50byBHcmFwaGlj
c1N1cmZhY2VQcml2YXRlLgorICAgICAgICAgICAgVGhpcyB3YXkgdGhlIHBsYXRmb3JtIHNwZWNp
ZmljIGNvZGUgY2FuIGJlIGhpZGRlbiBpbiB0aGUgc3BlY2lmaWMgY3BwIGZpbGUKKyAgICAgICAg
ICAgIGluc3RlYWQgb2YgcG9sbHV0aW5nIHRoZSBnbG9iYWwgR3JhcGhpY3NTdXJmYWNlIGhlYWRl
ci4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoR3JhcGhpY3NT
dXJmYWNlUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRl
OjpHcmFwaGljc1N1cmZhY2VQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3Vy
ZmFjZVByaXZhdGU6On5HcmFwaGljc1N1cmZhY2VQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OnRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzU3VyZmFjZVByaXZhdGU6OmZyb250QnVmZmVyVGV4dHVyZUlEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OmJhY2tCdWZmZXJUZXh0dXJlSUQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6ZnJvbnRCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6YmFja0J1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1F
eHBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUdldFRl
eHR1cmVJRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29w
eVRvR0xUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZv
cm1Db3B5RnJvbUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFj
ZTo6cGxhdGZvcm1Gcm9udEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZh
Y2U6OnBsYXRmb3JtU3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJm
YWNlOjpwbGF0Zm9ybUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6
OnBsYXRmb3JtSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OmlvU3VyZmFjZUxvY2tPcHRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Mb2NrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1VbmxvY2spOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpPZmZTY3JlZW5Sb290V2luZG93OjpnZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAgICAg
TWFrZSBzdXJlIHRoYXQgZnJhbWVidWZmZXIgYmluZGluZ3MgcmVtYWluIGNvbnNpc3RlbnQKKyAg
ICAgICAgICAgIGFmdGVyIHN3YXBwaW5nIGJ1ZmZlcnMgb24gdGhlIFhXaW5kb3cuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRXhwb3J0KToKKyAgICAgICAgICAg
IE1ha2Ugc3VyZSB0aGUgR0xYUGl4bWFwIGlzIG9ubHkgYm91bmQgdG8gdGhlIHRleHR1cmUgb25j
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1HZXRUZXh0dXJl
SUQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlGcm9t
RnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc1N1cmZhY2U6OnBsYXRmb3JtRnJvbnRCdWZmZXIpOgorICAgICAgICAgICAgVGhlIEdMWCBz
dXJmYWNlIGRvZXMgbm90IGtub3cgaG93IHRvIGRlc3Rpbmd1aXNoIGJldHdlZW4KKyAgICAgICAg
ICAgIHRoZSBmcm9udCBhbmQgdGhlIGJhY2sgYnVmZmVyIGJ5IGFuIGlkLiBUaGlzIGlzIG5vdCBu
ZWNlc3NhcnkKKyAgICAgICAgICAgIGZvciBHcmFwaGljc1N1cmZhY2VHTFgsIGJlY2F1c2UgdGhl
IHRleHR1cmUgY2FuIGp1c3QgYmUKKyAgICAgICAgICAgIHJlYWQgZnJvbSB0aGUgWFdpbmRvdyBh
dCBhbnkgdGltZS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1T
d2FwQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3Jt
Q3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1JbXBv
cnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFj
a2luZ1N0b3JlLmNwcDoKKyAgICAgICAgICAgIFJlbW92ZSBjb2RlIHRoYXQgd2FzIHVzZWQgZm9y
IHN3aXRjaGluZyBiZXR3ZWVuIHR3byBHcmFwaGljc1N1cmZhY2VzLAorICAgICAgICAgICAgYXMg
dGhpcyBpcyBub3cgaGFuZGxlZCBkaXJlY3RseSBpbnNpZGUgR3JhcGhpY3NTdXJmYWNlLgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU6OnNldEdyYXBo
aWNzU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tp
bmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU6OnNldFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgICAgIFJlbW92ZSBHcmFwaGljc1N1cmZhY2VEYXRhIHN0cnVj
dC4gVGhpcyBjbGFzcyBpcyBub3QgbmVlZGVkIGFueW1vcmUKKyAgICAgICAgICAgIGFzIHdlIGRv
IG5vdCBrZWVwIHRyYWNrIG9mIG1vcmUgdGhhbiBvbmUgR3JhcGhpY3NTdXJmYWNlIGF0IHRoZSB0
aW1lLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU3VyZmFjZUJh
Y2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tp
bmdTdG9yZTo6Z3JhcGhpY3NTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJTdXJmYWNlQmFja2luZ1N0b3JlOjpUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcjo6
Z3JhcGhpY3NTdXJmYWNlVG9rZW4pOgorCiAyMDEyLTA4LTA4ICBLZW50YXJvIEhhcmEgIDxoYXJh
a2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICAnY2xhc3MgV3JhcHBlclR5cGVJbmZvJyBzaG91
bGQgYmUgJ3N0cnVjdCBXcmFwcGVyVHlwZUluZm8nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCmluZGV4
IGNiODI0ZjYuLjg4NTJjY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCkBAIC02OSw2ICs2OSw3
IEBAIHB1YmxpYzoKICNlbmRpZgogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQogICAgIHZpcnR1
YWwgdWludDMyX3QgY29weVRvR3JhcGhpY3NTdXJmYWNlKCk7CisgICAgdmlydHVhbCB1aW50NjRf
dCBncmFwaGljc1N1cmZhY2VUb2tlbigpIGNvbnN0OwogI2VuZGlmCiAKICAgICBRUmVjdEYgYm91
bmRpbmdSZWN0KCkgY29uc3Q7CkBAIC04Myw4ICs4NCw3IEBAIHB1YmxpYzoKICAgICBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEIG1fcGxhdGZvcm1Db250ZXh0OwogI2lmIFVTRShHUkFQSElDU19T
VVJGQUNFKQogICAgIEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3MgbV9zdXJmYWNlRmxhZ3M7Ci0gICAg
UmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gbV9mcm9udEJ1ZmZlckdyYXBoaWNzU3VyZmFjZTsKLSAg
ICBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBtX2JhY2tCdWZmZXJHcmFwaGljc1N1cmZhY2U7Cisg
ICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gbV9ncmFwaGljc1N1cmZhY2U7CiAjZW5kaWYKIH07
CiAKQEAgLTE0MCw4ICsxNDAsNyBAQCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSAogICAgICAgICAg
ICAgICAgICAgICB8IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOwogCiAgICAgaWYg
KCFzdXJmYWNlU2l6ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9mcm9udEJ1ZmZlckdyYXBoaWNz
U3VyZmFjZSA9IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKHN1cmZhY2VTaXplLCBtX3N1cmZhY2VG
bGFncyk7Ci0gICAgICAgIG1fYmFja0J1ZmZlckdyYXBoaWNzU3VyZmFjZSA9IEdyYXBoaWNzU3Vy
ZmFjZTo6Y3JlYXRlKHN1cmZhY2VTaXplLCBtX3N1cmZhY2VGbGFncyk7CisgICAgICAgIG1fZ3Jh
cGhpY3NTdXJmYWNlID0gR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoc3VyZmFjZVNpemUsIG1fc3Vy
ZmFjZUZsYWdzKTsKICAgICB9CiAjZW5kaWYKIH0KQEAgLTIyMCwxNCArMjE5LDE5IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFw
cGVyKiB0ZXh0dXJlTWFwcGVyCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiB1aW50MzJfdCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpCiB7Ci0gICAg
aWYgKCFtX2Zyb250QnVmZmVyR3JhcGhpY3NTdXJmYWNlIHx8ICFtX2JhY2tCdWZmZXJHcmFwaGlj
c1N1cmZhY2UpCisgICAgaWYgKCFtX2dyYXBoaWNzU3VyZmFjZSkKICAgICAgICAgcmV0dXJuIDA7
CiAKICAgICBibGl0TXVsdGlzYW1wbGVGcmFtZWJ1ZmZlckFuZFJlc3RvcmVDb250ZXh0KCk7CiAg
ICAgbWFrZUN1cnJlbnRJZk5lZWRlZCgpOwotICAgIG1fYmFja0J1ZmZlckdyYXBoaWNzU3VyZmFj
ZS0+Y29weUZyb21GcmFtZWJ1ZmZlcihtX2NvbnRleHQtPm1fZmJvLCBJbnRSZWN0KDAsIDAsIG1f
Y29udGV4dC0+bV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC0+bV9jdXJyZW50SGVpZ2h0KSk7Ci0g
ICAgc3RkOjpzd2FwKG1fZnJvbnRCdWZmZXJHcmFwaGljc1N1cmZhY2UsIG1fYmFja0J1ZmZlckdy
YXBoaWNzU3VyZmFjZSk7Ci0gICAgcmV0dXJuIG1fZnJvbnRCdWZmZXJHcmFwaGljc1N1cmZhY2Ut
PmV4cG9ydFRva2VuKCk7CisgICAgbV9ncmFwaGljc1N1cmZhY2UtPmNvcHlGcm9tRnJhbWVidWZm
ZXIobV9jb250ZXh0LT5tX2ZibywgSW50UmVjdCgwLCAwLCBtX2NvbnRleHQtPm1fY3VycmVudFdp
ZHRoLCBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodCkpOworICAgIHVpbnQzMl90IGZyb250QnVm
ZmVyID0gbV9ncmFwaGljc1N1cmZhY2UtPnN3YXBCdWZmZXJzKCk7CisgICAgcmV0dXJuIGZyb250
QnVmZmVyOworfQorCit1aW50NjRfdCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdyYXBoaWNz
U3VyZmFjZVRva2VuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ncmFwaGljc1N1cmZhY2UtPmV4
cG9ydFRva2VuKCk7CiB9CiAjZW5kaWYKIApAQCAtMjc1LDEzICsyNzksMTAgQEAgYm9vbCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6Om1ha2VDdXJyZW50SWZOZWVkZWQoKSBjb25zdAogdm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMoY29uc3QgSW50
U2l6ZSYgc2l6ZSkKIHsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBpZiAoc2l6ZS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgbV9mcm9udEJ1ZmZlckdyYXBoaWNzU3VyZmFjZS5jbGVhcigp
OwotICAgICAgICBtX2JhY2tCdWZmZXJHcmFwaGljc1N1cmZhY2UuY2xlYXIoKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBtX2Zyb250QnVmZmVyR3JhcGhpY3NTdXJmYWNlID0gR3JhcGhpY3NTdXJm
YWNlOjpjcmVhdGUoc2l6ZSwgbV9zdXJmYWNlRmxhZ3MpOwotICAgICAgICBtX2JhY2tCdWZmZXJH
cmFwaGljc1N1cmZhY2UgPSBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShzaXplLCBtX3N1cmZhY2VG
bGFncyk7Ci0gICAgfQorICAgIGlmIChzaXplLmlzRW1wdHkoKSkKKyAgICAgICAgbV9ncmFwaGlj
c1N1cmZhY2UuY2xlYXIoKTsKKyAgICBlbHNlCisgICAgICAgIG1fZ3JhcGhpY3NTdXJmYWNlID0g
R3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoc2l6ZSwgbV9zdXJmYWNlRmxhZ3MpOwogI2VuZGlmCiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L0dyYXBoaWNzU3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuY3BwCmluZGV4IDJiOGNkNjUuLjU1YzY0NWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNz
U3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvR3JhcGhpY3NTdXJmYWNlLmNwcApAQCAtMjUsNyArMjUsNyBAQAogI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPEdyYXBoaWNzU3Vy
ZmFjZT4gR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3Mg
ZmxhZ3MsIHVpbnQzMl90IHRva2VuKQorUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBo
aWNzU3VyZmFjZTo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCB1aW50
NjRfdCB0b2tlbikKIHsKICAgICByZXR1cm4gcGxhdGZvcm1JbXBvcnQoc2l6ZSwgZmxhZ3MsIHRv
a2VuKTsKIH0KQEAgLTM1LDcgKzM1LDcgQEAgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdy
YXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEdyYXBoaWMKICAgICBy
ZXR1cm4gcGxhdGZvcm1DcmVhdGUoc2l6ZSwgZmxhZ3MpOwogfQogCi11aW50MzJfdCBHcmFwaGlj
c1N1cmZhY2U6OmV4cG9ydFRva2VuKCkKK3VpbnQ2NF90IEdyYXBoaWNzU3VyZmFjZTo6ZXhwb3J0
VG9rZW4oKQogewogICAgIHJldHVybiBwbGF0Zm9ybUV4cG9ydCgpOwogfQpAQCAtNjMsNiArNjMs
MTYgQEAgdm9pZCBHcmFwaGljc1N1cmZhY2U6OmNvcHlGcm9tRnJhbWVidWZmZXIodWludDMyX3Qg
ZmJvLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWMKICAgICBwbGF0Zm9ybUNvcHlGcm9tRnJhbWVi
dWZmZXIoZmJvLCBzb3VyY2VSZWN0KTsKIH0KIAordWludDMyX3QgR3JhcGhpY3NTdXJmYWNlOjpm
cm9udEJ1ZmZlcigpCit7CisgICAgcmV0dXJuIHBsYXRmb3JtRnJvbnRCdWZmZXIoKTsKK30KKwor
dWludDMyX3QgR3JhcGhpY3NTdXJmYWNlOjpzd2FwQnVmZmVycygpCit7CisgICAgcmV0dXJuIHBs
YXRmb3JtU3dhcEJ1ZmZlcnMoKTsKK30KKwogR3JhcGhpY3NTdXJmYWNlOjpHcmFwaGljc1N1cmZh
Y2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MpCiAgICAgOiBtX2ZsYWdzKGZsYWdz
KQogICAgICwgbV9zaXplKHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5oCmluZGV4IDdhZWVkNzku
LmU4YWM1MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5oCkBAIC01MCw3ICs1MCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgU3VwcG9ydHNUZXh0dXJlU291cmNlID0gMHgxMCwKICAgICAgICAgU3VwcG9y
dHNDb3B5VG9UZXh0dXJlID0gMHgyMCwKICAgICAgICAgU3VwcG9ydHNDb3B5RnJvbVRleHR1cmUg
PSAweDQwLAotICAgICAgICBTdXBwb3J0c1NoYXJpbmcgPSAweDgwCisgICAgICAgIFN1cHBvcnRz
U2hhcmluZyA9IDB4ODAsCisgICAgICAgIFN1cHBvcnRzU2luZ2xlQnVmZmVyZWQgPSAweDEwMAog
ICAgIH07CiAKICAgICBlbnVtIExvY2tPcHRpb24gewpAQCAtNjYsMTAgKzY3LDEyIEBAIHB1Ymxp
YzoKICAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIAogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gY3JlYXRlKGNvbnN0IEludFNpemUmLCBG
bGFncyk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBjcmVhdGUoY29u
c3QgSW50U2l6ZSYsIEZsYWdzLCB1aW50MzJfdCB0b2tlbik7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8R3JhcGhpY3NTdXJmYWNlPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYsIEZsYWdzLCB1aW50NjRf
dCB0b2tlbik7CiAgICAgdm9pZCBjb3B5VG9HTFRleHR1cmUodWludDMyX3QgdGFyZ2V0LCB1aW50
MzJfdCB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRQb2ludCYg
c291cmNlT2Zmc2V0KTsKICAgICB2b2lkIGNvcHlGcm9tRnJhbWVidWZmZXIodWludDMyX3QgZmJv
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KTsKLSAgICB1aW50MzJfdCBleHBvcnRUb2tlbigp
OworICAgIHVpbnQzMl90IGZyb250QnVmZmVyKCk7CisgICAgdWludDMyX3Qgc3dhcEJ1ZmZlcnMo
KTsKKyAgICB1aW50NjRfdCBleHBvcnRUb2tlbigpOwogICAgIHVpbnQzMl90IGdldFRleHR1cmVJ
RCgpOwogICAgIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBiZWdpblBhaW50KGNvbnN0IElu
dFJlY3QmLCBMb2NrT3B0aW9ucyk7CiAgICAgUGFzc1JlZlB0cjxJbWFnZT4gY3JlYXRlUmVhZE9u
bHlJbWFnZShjb25zdCBJbnRSZWN0Jik7CkBAIC03Nyw4ICs4MCw4IEBAIHB1YmxpYzoKIAogcHJv
dGVjdGVkOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gcGxhdGZvcm1D
cmVhdGUoY29uc3QgSW50U2l6ZSYsIEZsYWdzKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFw
aGljc1N1cmZhY2U+IHBsYXRmb3JtSW1wb3J0KGNvbnN0IEludFNpemUmLCBGbGFncywgdWludDMy
X3QpOwotICAgIHVpbnQzMl90IHBsYXRmb3JtRXhwb3J0KCk7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8R3JhcGhpY3NTdXJmYWNlPiBwbGF0Zm9ybUltcG9ydChjb25zdCBJbnRTaXplJiwgRmxhZ3Ms
IHVpbnQ2NF90KTsKKyAgICB1aW50NjRfdCBwbGF0Zm9ybUV4cG9ydCgpOwogICAgIHZvaWQgcGxh
dGZvcm1EZXN0cm95KCk7CiAKICAgICB1aW50MzJfdCBwbGF0Zm9ybUdldFRleHR1cmVJRCgpOwpA
QCAtODYsNiArODksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBwbGF0Zm9ybVVubG9jaygpOwog
ICAgIHZvaWQgcGxhdGZvcm1Db3B5VG9HTFRleHR1cmUodWludDMyX3QgdGFyZ2V0LCB1aW50MzJf
dCB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmKTsKICAgICB2b2lkIHBs
YXRmb3JtQ29weUZyb21GcmFtZWJ1ZmZlcih1aW50MzJfdCBmYm8sIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QpOworICAgIHVpbnQzMl90IHBsYXRmb3JtRnJvbnRCdWZmZXIoKSBjb25zdDsKKyAg
ICB1aW50MzJfdCBwbGF0Zm9ybVN3YXBCdWZmZXJzKCk7CiAKICAgICBQYXNzT3duUHRyPEdyYXBo
aWNzQ29udGV4dD4gcGxhdGZvcm1CZWdpblBhaW50KGNvbnN0IEludFNpemUmLCBjaGFyKiBiaXRz
LCBpbnQgc3RyaWRlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9tYWMvR3JhcGhpY3NTdXJmYWNlTWFjLmNwcApp
bmRleCBiZmEyMGJhLi5iMjExYzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9tYWMvR3JhcGhpY3NTdXJmYWNlTWFjLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9tYWMvR3JhcGhpY3NTdXJmYWNl
TWFjLmNwcApAQCAtMzAsMTMgKzMwLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1
Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7IH07Ci0KLXVpbnQzMl90IEdyYXBoaWNzU3VyZmFj
ZTo6cGxhdGZvcm1FeHBvcnQoKQotewotICAgIHJldHVybiBJT1N1cmZhY2VHZXRJRChtX3BsYXRm
b3JtU3VyZmFjZSk7Ci19Ci0KIHN0YXRpYyB1aW50MzJfdCBjcmVhdGVUZXh0dXJlKElPU3VyZmFj
ZVJlZiBoYW5kbGUpCiB7CiAgICAgR0x1aW50IHRleHR1cmUgPSAwOwpAQCAtNTIsNiArNDUsNyBA
QCBzdGF0aWMgdWludDMyX3QgY3JlYXRlVGV4dHVyZShJT1N1cmZhY2VSZWYgaGFuZGxlKQogICAg
IGdsR2V0SW50ZWdlcnYoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCAmcHJldlRleHR1cmUpOwog
ICAgIGlmICghd2FzRW5hYmxlZCkKICAgICAgICAgZ2xFbmFibGUoR0xfVEVYVFVSRV9SRUNUQU5H
TEVfQVJCKTsKKwogICAgIGdsR2VuVGV4dHVyZXMoMSwgJnRleHR1cmUpOwogICAgIGdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCB0ZXh0dXJlKTsKICAgICBDR0xFcnJvciBl
cnJvciA9IENHTFRleEltYWdlSU9TdXJmYWNlMkQoY29udGV4dCwgR0xfVEVYVFVSRV9SRUNUQU5H
TEVfQVJCLCBpbnRlcm5hbEZvcm1hdCwgSU9TdXJmYWNlR2V0V2lkdGgoaGFuZGxlKSwgSU9TdXJm
YWNlR2V0SGVpZ2h0KGhhbmRsZSksIGZvcm1hdCwgdHlwZSwgaGFuZGxlLCAwKTsKQEAgLTYzLDIx
ICs1NywxNDkgQEAgc3RhdGljIHVpbnQzMl90IGNyZWF0ZVRleHR1cmUoSU9TdXJmYWNlUmVmIGhh
bmRsZSkKICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgcHJldlRl
eHR1cmUpOwogICAgIGlmICghd2FzRW5hYmxlZCkKICAgICAgICAgZ2xEaXNhYmxlKEdMX1RFWFRV
UkVfUkVDVEFOR0xFX0FSQik7CisKICAgICByZXR1cm4gdGV4dHVyZTsKIH0KIAorc3RydWN0IEdy
YXBoaWNzU3VyZmFjZVByaXZhdGUgeworcHVibGljOgorICAgIEdyYXBoaWNzU3VyZmFjZVByaXZh
dGUodWludDY0X3QgdG9rZW4pCisgICAgICAgIDogbV90b2tlbih0b2tlbikKKyAgICAgICAgLCBt
X2Zyb250QnVmZmVyVGV4dHVyZSgwKQorICAgICAgICAsIG1fYmFja0J1ZmZlclRleHR1cmUoMCkK
KyAgICB7CisgICAgICAgIC8vIFRoZSB0b2tlbiBjb250YWlucyB0aGUgSU9TdXJmYWNlSUQgb2Yg
dGhlIGZpc3Qgc3VyZmFjZS9idWZmZXIgaW4gdGhlIGZpcnN0IDMyIEJpdAorICAgICAgICAvLyBh
bmQgdGhlIElPU3VyZmFjZUlEIG9mIHRoZSBzZWNvbmQgc3VyZmFjZS9idWZmZXIgaW4gdGhlIHNl
Y29uZCAzMiBCaXQuCisgICAgICAgIHVpbnQzMl90IGZyb250QnVmZmVyID0gdG9rZW4gPj4gMzI7
CisgICAgICAgIHVpbnQzMl90IGJhY2tCdWZmZXIgPSB0b2tlbiAmIDB4ZmZmZjsKKworICAgICAg
ICBtX2Zyb250QnVmZmVyID0gSU9TdXJmYWNlTG9va3VwKGZyb250QnVmZmVyKTsKKyAgICAgICAg
bV9iYWNrQnVmZmVyID0gSU9TdXJmYWNlTG9va3VwKGJhY2tCdWZmZXIpOworICAgIH0KKworICAg
IEdyYXBoaWNzU3VyZmFjZVByaXZhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgR3JhcGhpY3NTdXJm
YWNlOjpGbGFncyBmbGFncykKKyAgICAgICAgOiBtX2Zyb250QnVmZmVyVGV4dHVyZSgwKQorICAg
ICAgICAsIG1fYmFja0J1ZmZlclRleHR1cmUoMCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHBp
eGVsRm9ybWF0ID0gJ0JHUkEnOworICAgICAgICB1bnNpZ25lZCBieXRlc1BlckVsZW1lbnQgPSA0
OworICAgICAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CisgICAgICAgIGludCBoZWlnaHQg
PSBzaXplLmhlaWdodCgpOworCisgICAgICAgIHVuc2lnbmVkIGxvbmcgYnl0ZXNQZXJSb3cgPSBJ
T1N1cmZhY2VBbGlnblByb3BlcnR5KGtJT1N1cmZhY2VCeXRlc1BlclJvdywgd2lkdGggKiBieXRl
c1BlckVsZW1lbnQpOworICAgICAgICBpZiAoIWJ5dGVzUGVyUm93KQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHVuc2lnbmVkIGxvbmcgYWxsb2NTaXplID0gSU9TdXJmYWNlQWxpZ25Q
cm9wZXJ0eShrSU9TdXJmYWNlQWxsb2NTaXplLCBoZWlnaHQgKiBieXRlc1BlclJvdyk7CisgICAg
ICAgIGlmICghYWxsb2NTaXplKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnN0
IHZvaWQgKmtleXNbN107CisgICAgICAgIGNvbnN0IHZvaWQgKnZhbHVlc1s3XTsKKyAgICAgICAg
a2V5c1swXSA9IGtJT1N1cmZhY2VXaWR0aDsKKyAgICAgICAgdmFsdWVzWzBdID0gQ0ZOdW1iZXJD
cmVhdGUoMCwga0NGTnVtYmVySW50VHlwZSwgJndpZHRoKTsKKyAgICAgICAga2V5c1sxXSA9IGtJ
T1N1cmZhY2VIZWlnaHQ7CisgICAgICAgIHZhbHVlc1sxXSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtD
Rk51bWJlckludFR5cGUsICZoZWlnaHQpOworICAgICAgICBrZXlzWzJdID0ga0lPU3VyZmFjZVBp
eGVsRm9ybWF0OworICAgICAgICB2YWx1ZXNbMl0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1i
ZXJJbnRUeXBlLCAmcGl4ZWxGb3JtYXQpOworICAgICAgICBrZXlzWzNdID0ga0lPU3VyZmFjZUJ5
dGVzUGVyRWxlbWVudDsKKyAgICAgICAgdmFsdWVzWzNdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NG
TnVtYmVySW50VHlwZSwgJmJ5dGVzUGVyRWxlbWVudCk7CisgICAgICAgIGtleXNbNF0gPSBrSU9T
dXJmYWNlQnl0ZXNQZXJSb3c7CisgICAgICAgIHZhbHVlc1s0XSA9IENGTnVtYmVyQ3JlYXRlKDAs
IGtDRk51bWJlckxvbmdUeXBlLCAmYnl0ZXNQZXJSb3cpOworICAgICAgICBrZXlzWzVdID0ga0lP
U3VyZmFjZUFsbG9jU2l6ZTsKKyAgICAgICAgdmFsdWVzWzVdID0gQ0ZOdW1iZXJDcmVhdGUoMCwg
a0NGTnVtYmVyTG9uZ1R5cGUsICZhbGxvY1NpemUpOworICAgICAgICBrZXlzWzZdID0ga0lPU3Vy
ZmFjZUlzR2xvYmFsOworICAgICAgICB2YWx1ZXNbNl0gPSAoZmxhZ3MgJiBHcmFwaGljc1N1cmZh
Y2U6OlN1cHBvcnRzU2hhcmluZykgPyBrQ0ZCb29sZWFuVHJ1ZSA6IGtDRkJvb2xlYW5GYWxzZTsK
KworICAgICAgICBDRkRpY3Rpb25hcnlSZWYgZGljdCA9IENGRGljdGlvbmFyeUNyZWF0ZSgwLCBr
ZXlzLCB2YWx1ZXMsIDcsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVE
aWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgNzsgaSsrKQorICAgICAgICAgICAgQ0ZSZWxlYXNlKHZhbHVlc1tpXSk7CisKKyAgICAgICAg
bV9mcm9udEJ1ZmZlciA9IElPU3VyZmFjZUNyZWF0ZShkaWN0KTsKKyAgICAgICAgbV9iYWNrQnVm
ZmVyID0gSU9TdXJmYWNlQ3JlYXRlKGRpY3QpOworCisgICAgICAgIHVpbnQ2NF90IHRva2VuID0g
SU9TdXJmYWNlR2V0SUQobV9mcm9udEJ1ZmZlcik7CisgICAgICAgIHRva2VuIDw8PSAzMjsKKyAg
ICAgICAgdG9rZW4gfD0gSU9TdXJmYWNlR2V0SUQobV9iYWNrQnVmZmVyKTsKKworICAgICAgICBt
X3Rva2VuID0gdG9rZW47CisgICAgfQorCisgICAgfkdyYXBoaWNzU3VyZmFjZVByaXZhdGUoKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fZnJvbnRCdWZmZXJUZXh0dXJlKQorICAgICAgICAgICAgZ2xE
ZWxldGVUZXh0dXJlcygxLCAmbV9mcm9udEJ1ZmZlclRleHR1cmUpOworCisgICAgICAgIGlmICht
X2JhY2tCdWZmZXJUZXh0dXJlKQorICAgICAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9i
YWNrQnVmZmVyVGV4dHVyZSk7CisKKyAgICAgICAgaWYgKG1fZnJvbnRCdWZmZXIpCisgICAgICAg
ICAgICBDRlJlbGVhc2UoSU9TdXJmYWNlUmVmKG1fZnJvbnRCdWZmZXIpKTsKKworICAgICAgICBp
ZiAobV9iYWNrQnVmZmVyKQorICAgICAgICAgICAgQ0ZSZWxlYXNlKElPU3VyZmFjZVJlZihtX2Jh
Y2tCdWZmZXIpKTsKKyAgICB9CisKKyAgICB1aW50MzJfdCBzd2FwQnVmZmVycygpCisgICAgewor
ICAgICAgICBzdGQ6OnN3YXAobV9mcm9udEJ1ZmZlciwgbV9iYWNrQnVmZmVyKTsKKyAgICAgICAg
c3RkOjpzd2FwKG1fZnJvbnRCdWZmZXJUZXh0dXJlLCBtX2JhY2tCdWZmZXJUZXh0dXJlKTsKKwor
ICAgICAgICByZXR1cm4gSU9TdXJmYWNlR2V0SUQobV9mcm9udEJ1ZmZlcik7CisgICAgfQorCisg
ICAgdWludDY0X3QgdG9rZW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdG9rZW47
CisgICAgfQorCisgICAgdWludDMyX3QgZnJvbnRCdWZmZXJUZXh0dXJlSUQoKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX2Zyb250QnVmZmVyVGV4dHVyZSkKKyAgICAgICAgICAgIG1fZnJvbnRCdWZm
ZXJUZXh0dXJlID0gY3JlYXRlVGV4dHVyZShtX2Zyb250QnVmZmVyKTsKKworICAgICAgICByZXR1
cm4gbV9mcm9udEJ1ZmZlclRleHR1cmU7CisgICAgfQorCisgICAgdWludDMyX3QgYmFja0J1ZmZl
clRleHR1cmVJRCgpCisgICAgeworICAgICAgICBpZiAoIW1fYmFja0J1ZmZlclRleHR1cmUpCisg
ICAgICAgICAgICBtX2JhY2tCdWZmZXJUZXh0dXJlID0gY3JlYXRlVGV4dHVyZShtX2JhY2tCdWZm
ZXIpOworCisgICAgICAgIHJldHVybiBtX2JhY2tCdWZmZXJUZXh0dXJlOworICAgIH0KKworICAg
IFBsYXRmb3JtR3JhcGhpY3NTdXJmYWNlIGZyb250QnVmZmVyKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2Zyb250QnVmZmVyOworICAgIH0KKworICAgIFBsYXRmb3JtR3JhcGhpY3NT
dXJmYWNlIGJhY2tCdWZmZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmFja0J1
ZmZlcjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUGxhdGZvcm1HcmFwaGljc1N1cmZhY2UgbV9m
cm9udEJ1ZmZlcjsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzU3VyZmFjZSBtX2JhY2tCdWZmZXI7Cisg
ICAgdWludDMyX3QgbV9mcm9udEJ1ZmZlclRleHR1cmU7CisgICAgdWludDMyX3QgbV9iYWNrQnVm
ZmVyVGV4dHVyZTsKKyAgICB1aW50NjRfdCBtX3Rva2VuOworfTsKKwordWludDY0X3QgR3JhcGhp
Y3NTdXJmYWNlOjpwbGF0Zm9ybUV4cG9ydCgpCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+dG9r
ZW4oKTsKK30KKwogdWludDMyX3QgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUdldFRleHR1cmVJ
RCgpCiB7Ci0gICAgaWYgKCFtX3RleHR1cmUpCi0gICAgICAgIG1fdGV4dHVyZSA9IGNyZWF0ZVRl
eHR1cmUobV9wbGF0Zm9ybVN1cmZhY2UpOwotICAgIHJldHVybiBtX3RleHR1cmU7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+ZnJvbnRCdWZmZXJUZXh0dXJlSUQoKTsKIH0KIAogdm9pZCBHcmFwaGlj
c1N1cmZhY2U6OnBsYXRmb3JtQ29weVRvR0xUZXh0dXJlKHVpbnQzMl90IHRhcmdldCwgdWludDMy
X3QgaWQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFBvaW50JiBvZmZzZXQp
CiB7CiAgICAgZ2xQdXNoQXR0cmliKEdMX0FMTF9BVFRSSUJfQklUUyk7Ci0gICAgaWYgKCFtX3Rl
eHR1cmUpCi0gICAgICAgIG1fdGV4dHVyZSA9IGNyZWF0ZVRleHR1cmUobV9wbGF0Zm9ybVN1cmZh
Y2UpOwogICAgIGlmICghbV9mYm8pCiAgICAgICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2Zi
byk7CiAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIDApOwpAQCAt
ODUsNyArMjA3LDcgQEAgdm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29weVRvR0xUZXh0
dXJlKHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgaWQsIGNvbnMKICAgICBnbEVuYWJsZSh0YXJn
ZXQpOwogICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCBpZCk7CiAgICAgZ2xCaW5kRnJhbWVidWZm
ZXIoR0xfUkVBRF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJl
MkQoR0xfUkVBRF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVf
UkVDVEFOR0xFX0FSQiwgbV90ZXh0dXJlLCAwKTsKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJE
KEdMX1JFQURfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFX1JF
Q1RBTkdMRV9BUkIsIG1fcHJpdmF0ZS0+ZnJvbnRCdWZmZXJUZXh0dXJlSUQoKSwgMCk7CiAgICAg
Z2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0
LnkoKSwgb2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRS
ZWN0LmhlaWdodCgpKTsKICAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX1JFQURfRlJBTUVC
VUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIDAs
IDApOwogICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJBTUVCVUZGRVIsIDApOwpAQCAt
MTAxLDE2ICsyMjMsMTUgQEAgdm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29weVRvR0xU
ZXh0dXJlKHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgaWQsIGNvbnMKIHZvaWQgR3JhcGhpY3NT
dXJmYWNlOjpwbGF0Zm9ybUNvcHlGcm9tRnJhbWVidWZmZXIodWludDMyX3Qgb3JpZ2luRmJvLCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KQogewogICAgIGdsUHVzaEF0dHJpYihHTF9BTExfQVRU
UklCX0JJVFMpOwotICAgIGlmICghbV90ZXh0dXJlKQotICAgICAgICBtX3RleHR1cmUgPSBjcmVh
dGVUZXh0dXJlKG1fcGxhdGZvcm1TdXJmYWNlKTsKICAgICBpZiAoIW1fZmJvKQogICAgICAgICBn
bEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworCiAgICAgR0xpbnQgb2xkRkJPOwogICAgIGds
R2V0SW50ZWdlcnYoR0xfRlJBTUVCVUZGRVJfQklORElORywgJm9sZEZCTyk7CiAgICAgZ2xFbmFi
bGUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCKTsKICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9S
RUFEX0ZSQU1FQlVGRkVSLCBvcmlnaW5GYm8pOwogICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0RS
QVdfRlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0RS
QVdfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFX1JFQ1RBTkdM
RV9BUkIsIG1fdGV4dHVyZSwgMCk7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9EUkFX
X0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV9SRUNUQU5HTEVf
QVJCLCBtX3ByaXZhdGUtPmJhY2tCdWZmZXJUZXh0dXJlSUQoKSwgMCk7CiAgICAgZ2xCbGl0RnJh
bWVidWZmZXIoMCwgMCwgc291cmNlUmVjdC53aWR0aCgpLCBzb3VyY2VSZWN0LmhlaWdodCgpLCAw
LCBzb3VyY2VSZWN0LmhlaWdodCgpLCBzb3VyY2VSZWN0LndpZHRoKCksIDAsIEdMX0NPTE9SX0JV
RkZFUl9CSVQsIEdMX0xJTkVBUik7IC8vIEZsaXAgdGhlIHRleHR1cmUgdXBzaWRlIGRvd24uCiAg
ICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9EUkFXX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9B
VFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCAwLCAwKTsKICAgICBnbEJpbmRG
cmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgb2xkRkJPKTsKQEAgLTEyMCw2NyArMjQxLDQ3IEBA
IHZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlGcm9tRnJhbWVidWZmZXIodWludDMy
X3Qgb3JpZ2luRmJvLCBjb25zdCBJbnRSCiAgICAgZ2xGbHVzaCgpOwogfQogCit1aW50MzJfdCBH
cmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRnJvbnRCdWZmZXIoKSBjb25zdAoreworICAgIHJldHVy
biBJT1N1cmZhY2VHZXRJRChtX3ByaXZhdGUtPmZyb250QnVmZmVyKCkpOworfQorCit1aW50MzJf
dCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtU3dhcEJ1ZmZlcnMoKQoreworICAgIHJldHVybiBt
X3ByaXZhdGUtPnN3YXBCdWZmZXJzKCk7Cit9CisKIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNl
PiBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEZs
YWdzIGZsYWdzKQogewogICAgIC8vIFdlIGN1cnJlbnRseSBkaXNhYmxlIHN1cHBvcnQgZm9yIENv
cHlUb1RleHR1cmUgb24gTWFjLCBiZWNhdXNlIHRoaXMgaXMgdXNlZCBmb3Igc2luZ2xlIGJ1ZmZl
cmVkIFRpbGVzLgogICAgIC8vIFRoZSBzaW5nbGUgYnVmZmVyZWQgbmF0dXJlIG9mIHRoaXMgcmVx
dWlyZXMgYSBjYWxsIHRvIGdsRmx1c2gsIGFzIGRlc2NyaWJlZCBpbiBwbGF0Zm9ybUNvcHlUb1Rl
eHR1cmUuCiAgICAgLy8gVGhpcyBjYWxsIGJsb2NrcyB0aGUgR1BVIGZvciBhYm91dCA0MG1zLCB3
aGljaCBtYWtlcyBzbW9vdGggYW5pbWF0aW9ucyBpbXBvc3NpYmxlLgotICAgIGlmIChmbGFncyAm
IFN1cHBvcnRzQ29weVRvVGV4dHVyZSkKKyAgICBpZiAoZmxhZ3MgJiBTdXBwb3J0c0NvcHlUb1Rl
eHR1cmUgfHwgZmxhZ3MgJiBTdXBwb3J0c1NpbmdsZUJ1ZmZlcmVkKQogICAgICAgICByZXR1cm4g
UGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CiAKLSAgICB1bnNpZ25lZCBwaXhlbEZvcm1h
dCA9ICdCR1JBJzsKLSAgICB1bnNpZ25lZCBieXRlc1BlckVsZW1lbnQgPSA0OwotICAgIGludCB3
aWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKLQot
ICAgIHVuc2lnbmVkIGxvbmcgYnl0ZXNQZXJSb3cgPSBJT1N1cmZhY2VBbGlnblByb3BlcnR5KGtJ
T1N1cmZhY2VCeXRlc1BlclJvdywgd2lkdGggKiBieXRlc1BlckVsZW1lbnQpOwotICAgIGlmICgh
Ynl0ZXNQZXJSb3cpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIGxvbmcg
YWxsb2NTaXplID0gSU9TdXJmYWNlQWxpZ25Qcm9wZXJ0eShrSU9TdXJmYWNlQWxsb2NTaXplLCBo
ZWlnaHQgKiBieXRlc1BlclJvdyk7Ci0gICAgaWYgKCFhbGxvY1NpemUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGNvbnN0IHZvaWQgKmtleXNbN107Ci0gICAgY29uc3Qgdm9pZCAqdmFs
dWVzWzddOwotICAgIGtleXNbMF0gPSBrSU9TdXJmYWNlV2lkdGg7Ci0gICAgdmFsdWVzWzBdID0g
Q0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVySW50VHlwZSwgJndpZHRoKTsKLSAgICBrZXlzWzFd
ID0ga0lPU3VyZmFjZUhlaWdodDsKLSAgICB2YWx1ZXNbMV0gPSBDRk51bWJlckNyZWF0ZSgwLCBr
Q0ZOdW1iZXJJbnRUeXBlLCAmaGVpZ2h0KTsKLSAgICBrZXlzWzJdID0ga0lPU3VyZmFjZVBpeGVs
Rm9ybWF0OwotICAgIHZhbHVlc1syXSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckludFR5
cGUsICZwaXhlbEZvcm1hdCk7Ci0gICAga2V5c1szXSA9IGtJT1N1cmZhY2VCeXRlc1BlckVsZW1l
bnQ7Ci0gICAgdmFsdWVzWzNdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVySW50VHlwZSwg
JmJ5dGVzUGVyRWxlbWVudCk7Ci0gICAga2V5c1s0XSA9IGtJT1N1cmZhY2VCeXRlc1BlclJvdzsK
LSAgICB2YWx1ZXNbNF0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJMb25nVHlwZSwgJmJ5
dGVzUGVyUm93KTsKLSAgICBrZXlzWzVdID0ga0lPU3VyZmFjZUFsbG9jU2l6ZTsKLSAgICB2YWx1
ZXNbNV0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJMb25nVHlwZSwgJmFsbG9jU2l6ZSk7
Ci0gICAga2V5c1s2XSA9IGtJT1N1cmZhY2VJc0dsb2JhbDsKLSAgICB2YWx1ZXNbNl0gPSAoZmxh
Z3MgJiBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZykgPyBrQ0ZCb29sZWFuVHJ1ZSA6
IGtDRkJvb2xlYW5GYWxzZTsKLQotICAgIENGRGljdGlvbmFyeVJlZiBkaWN0ID0gQ0ZEaWN0aW9u
YXJ5Q3JlYXRlKDAsIGtleXMsIHZhbHVlcywgNywgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJh
Y2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDc7IGkrKykKLSAgICAgICAgQ0ZSZWxlYXNlKHZhbHVlc1tpXSk7Ci0KICAg
ICBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRSZWYobmV3IEdyYXBoaWNz
U3VyZmFjZShzaXplLCBmbGFncykpOwotICAgIHN1cmZhY2UtPm1fcGxhdGZvcm1TdXJmYWNlID0g
SU9TdXJmYWNlQ3JlYXRlKGRpY3QpOwotICAgIGlmICghc3VyZmFjZS0+bV9wbGF0Zm9ybVN1cmZh
Y2UpCisgICAgc3VyZmFjZS0+bV9wcml2YXRlID0gbmV3IEdyYXBoaWNzU3VyZmFjZVByaXZhdGUo
c2l6ZSwgZmxhZ3MpOworCisgICAgaWYgKCFzdXJmYWNlLT5tX3ByaXZhdGUtPmZyb250QnVmZmVy
KCkgfHwgIXN1cmZhY2UtPm1fcHJpdmF0ZS0+YmFja0J1ZmZlcigpKQogICAgICAgICByZXR1cm4g
UGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CisKICAgICByZXR1cm4gc3VyZmFjZTsKIH0K
IAotUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1J
bXBvcnQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MsIHVpbnQzMl90IHRva2VuKQor
UGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1JbXBv
cnQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MsIHVpbnQ2NF90IHRva2VuKQogewog
ICAgIC8vIFdlIGN1cnJlbnRseSBkaXNhYmxlIHN1cHBvcnQgZm9yIENvcHlUb1RleHR1cmUgb24g
TWFjLCBiZWNhdXNlIHRoaXMgaXMgdXNlZCBmb3Igc2luZ2xlIGJ1ZmZlcmVkIFRpbGVzLgogICAg
IC8vIFRoZSBzaW5nbGUgYnVmZmVyZWQgbmF0dXJlIG9mIHRoaXMgcmVxdWlyZXMgYSBjYWxsIHRv
IGdsRmx1c2gsIGFzIGRlc2NyaWJlZCBpbiBwbGF0Zm9ybUNvcHlUb1RleHR1cmUuCiAgICAgLy8g
VGhpcyBjYWxsIGJsb2NrcyB0aGUgR1BVIGZvciBhYm91dCA0MG1zLCB3aGljaCBtYWtlcyBzbW9v
dGggYW5pbWF0aW9ucyBpbXBvc3NpYmxlLgotICAgIGlmIChmbGFncyAmIFN1cHBvcnRzQ29weVRv
VGV4dHVyZSkKKyAgICBpZiAoZmxhZ3MgJiBTdXBwb3J0c0NvcHlUb1RleHR1cmUgfHwgZmxhZ3Mg
JiBTdXBwb3J0c1NpbmdsZUJ1ZmZlcmVkKQogICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxHcmFw
aGljc1N1cmZhY2U+KCk7CiAKICAgICBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlID0g
YWRvcHRSZWYobmV3IEdyYXBoaWNzU3VyZmFjZShzaXplLCBmbGFncykpOwotICAgIHN1cmZhY2Ut
Pm1fcGxhdGZvcm1TdXJmYWNlID0gSU9TdXJmYWNlTG9va3VwKHRva2VuKTsKLSAgICBpZiAoIXN1
cmZhY2UtPm1fcGxhdGZvcm1TdXJmYWNlKQorICAgIHN1cmZhY2UtPm1fcHJpdmF0ZSA9IG5ldyBH
cmFwaGljc1N1cmZhY2VQcml2YXRlKHRva2VuKTsKKworICAgIGlmICghc3VyZmFjZS0+bV9wcml2
YXRlLT5mcm9udEJ1ZmZlcigpIHx8ICFzdXJmYWNlLT5tX3ByaXZhdGUtPmJhY2tCdWZmZXIoKSkK
ICAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPigpOworCiAgICAgcmV0
dXJuIHN1cmZhY2U7CiB9CiAKQEAgLTE5MSwzOCArMjkyLDQyIEBAIHN0YXRpYyBpbnQgaW9TdXJm
YWNlTG9ja09wdGlvbnMoaW50IGxvY2tPcHRpb25zKQogICAgICAgICBvcHRpb25zIHw9IGtJT1N1
cmZhY2VMb2NrUmVhZE9ubHk7CiAgICAgaWYgKCEobG9ja09wdGlvbnMgJiBHcmFwaGljc1N1cmZh
Y2U6OlJldGFpblBpeGVscykpCiAgICAgICAgIG9wdGlvbnMgfD0ga0lPU3VyZmFjZUxvY2tBdm9p
ZFN5bmM7CisKICAgICByZXR1cm4gb3B0aW9uczsKIH0KIAogY2hhciogR3JhcGhpY3NTdXJmYWNl
OjpwbGF0Zm9ybUxvY2soY29uc3QgSW50UmVjdCYgcmVjdCwgaW50KiBvdXRwdXRTdHJpZGUsIExv
Y2tPcHRpb25zIGxvY2tPcHRpb25zKQogeworICAgIC8vIExvY2tpbmcgaXMgb25seSBuZWNlc3Nh
cnkgZm9yIHNpbmdsZSBidWZmZXJlZCB1c2UuCisgICAgLy8gSW4gdGhpcyBjYXNlIHdlIG9ubHkg
aGF2ZSBhIGZyb250IGJ1ZmZlciwgc28gd2Ugb25seSBsb2NrIHRoaXMgb25lLgogICAgIG1fbG9j
a09wdGlvbnMgPSBsb2NrT3B0aW9uczsKLSAgICBJT1JldHVybiBzdGF0dXMgPSBJT1N1cmZhY2VM
b2NrKG1fcGxhdGZvcm1TdXJmYWNlLCBpb1N1cmZhY2VMb2NrT3B0aW9ucyhtX2xvY2tPcHRpb25z
KSwgMCk7CisgICAgSU9SZXR1cm4gc3RhdHVzID0gSU9TdXJmYWNlTG9jayhtX3ByaXZhdGUtPmZy
b250QnVmZmVyKCksIGlvU3VyZmFjZUxvY2tPcHRpb25zKG1fbG9ja09wdGlvbnMpLCAwKTsKICAg
ICBpZiAoc3RhdHVzID09IGtJT1JldHVybkNhbm5vdExvY2spIHsKICAgICAgICAgbV9sb2NrT3B0
aW9ucyB8PSBSZXRhaW5QaXhlbHM7Ci0gICAgICAgIElPU3VyZmFjZUxvY2sobV9wbGF0Zm9ybVN1
cmZhY2UsIGlvU3VyZmFjZUxvY2tPcHRpb25zKG1fbG9ja09wdGlvbnMpLCAwKTsKKyAgICAgICAg
SU9TdXJmYWNlTG9jayhtX3ByaXZhdGUtPmZyb250QnVmZmVyKCksIGlvU3VyZmFjZUxvY2tPcHRp
b25zKG1fbG9ja09wdGlvbnMpLCAwKTsKICAgICB9CiAKLSAgICBpbnQgc3RyaWRlID0gSU9TdXJm
YWNlR2V0Qnl0ZXNQZXJSb3cobV9wbGF0Zm9ybVN1cmZhY2UpOworICAgIGludCBzdHJpZGUgPSBJ
T1N1cmZhY2VHZXRCeXRlc1BlclJvdyhtX3ByaXZhdGUtPmZyb250QnVmZmVyKCkpOwogICAgIGlm
IChvdXRwdXRTdHJpZGUpCiAgICAgICAgICpvdXRwdXRTdHJpZGUgPSBzdHJpZGU7CiAKLSAgICBj
aGFyKiBiYXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KElPU3VyZmFjZUdldEJhc2VBZGRyZXNzKG1f
cGxhdGZvcm1TdXJmYWNlKSk7CisgICAgY2hhciogYmFzZSA9IHN0YXRpY19jYXN0PGNoYXIqPihJ
T1N1cmZhY2VHZXRCYXNlQWRkcmVzcyhtX3ByaXZhdGUtPmZyb250QnVmZmVyKCkpKTsKKwogICAg
IHJldHVybiBiYXNlICsgc3RyaWRlICogcmVjdC55KCkgKyByZWN0LngoKSAqIDQ7CiB9CiAKIHZv
aWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybVVubG9jaygpCiB7Ci0gICAgSU9TdXJmYWNlVW5s
b2NrKG1fcGxhdGZvcm1TdXJmYWNlLCBpb1N1cmZhY2VMb2NrT3B0aW9ucyhtX2xvY2tPcHRpb25z
KSwgMCk7CisgICAgSU9TdXJmYWNlVW5sb2NrKG1fcHJpdmF0ZS0+ZnJvbnRCdWZmZXIoKSwgaW9T
dXJmYWNlTG9ja09wdGlvbnMobV9sb2NrT3B0aW9ucyksIDApOwogfQogCiB2b2lkIEdyYXBoaWNz
U3VyZmFjZTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKICAgICBpZiAobV9mYm8pCiAgICAgICAgIGds
RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0gICAgaWYgKG1fdGV4dHVyZSkKLSAgICAg
ICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICBDRlJlbGVhc2UoSU9TdXJm
YWNlUmVmKG1fcGxhdGZvcm1TdXJmYWNlKSk7CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAg
ZGVsZXRlIG1fcHJpdmF0ZTsKKyAgICBtX3ByaXZhdGUgPSAwOwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9xdC9HcmFwaGljc1N1
cmZhY2VHTFguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
cXQvR3JhcGhpY3NTdXJmYWNlR0xYLmNwcAppbmRleCBhZmMzYTg0Li5lYWJiNTI5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9xdC9HcmFwaGlj
c1N1cmZhY2VHTFguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKQEAgLTYwLDYgKzYwLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgWENoYW5nZVdpbmRvd0F0dHJpYnV0ZXMoZHB5LCB3aW5kb3ctPmhhbmRs
ZSgpLT53aW5JZCgpLCBYMTFPdmVycmlkZVJlZGlyZWN0LCAmYXR0cmlidXRlcyk7CiAgICAgICAg
ICAgICB3aW5kb3ctPnNob3coKTsKICAgICAgICAgfQorCiAgICAgICAgIHJldHVybiB3aW5kb3c7
CiAgICAgfQogCkBAIC0xNzMsNiArMTc0LDEyIEBAIHN0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2
YXRlIHsKIAogICAgIHZvaWQgc3dhcEJ1ZmZlcnMoKQogICAgIHsKKyAgICAgICAgLy8gSWYgdGhl
cmUgaXMgYSB4cGl4bWFwLCB3ZSBhcmUgb24gdGhlIHJlYWRpbmcgc2lkZSBhbmQgZG8gbm90IHdh
bnQgdG8gc3dhcCBhbnkgYnVmZmVycy4KKyAgICAgICAgLy8gVGhlIGJ1ZmZlcnMgYXJlIGJlaW5n
IHN3aXRjaGVkIG9uIHRoZSB3cml0aW5nIHNpZGUsIHRoZSByZWFkaW5nIHNpZGUganVzdCByZWFk
cworICAgICAgICAvLyB3aGF0ZXZlciB0ZXh0dXJlIHRoZSBYV2luZG93IGNvbnRhaW5zLgorICAg
ICAgICBpZiAobV94UGl4bWFwKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIGlmICgh
bV9zdXJmYWNlLT5pc1Zpc2libGUoKSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMTgyLDgg
KzE4OSwxMyBAQCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAgICAgICAgICAgICBR
Q29yZUFwcGxpY2F0aW9uOjpwcm9jZXNzRXZlbnRzKCk7CiAKICAgICAgICAgUU9wZW5HTENvbnRl
eHQqIGdsQ29udGV4dCA9IFFPcGVuR0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgpOwotICAgICAg
ICBpZiAobV9zdXJmYWNlICYmIGdsQ29udGV4dCkKKyAgICAgICAgaWYgKG1fc3VyZmFjZSAmJiBn
bENvbnRleHQpIHsKKyAgICAgICAgICAgIEdMaW50IG9sZEZCTzsKKyAgICAgICAgICAgIGdsR2V0
SW50ZWdlcnYoR0xfRlJBTUVCVUZGRVJfQklORElORywgJm9sZEZCTyk7CisgICAgICAgICAgICBw
R2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGdsQ29udGV4dC0+ZGVmYXVsdEZyYW1l
YnVmZmVyT2JqZWN0KCkpOwogICAgICAgICAgICAgZ2xDb250ZXh0LT5zd2FwQnVmZmVycyhtX3N1
cmZhY2UuZ2V0KCkpOworICAgICAgICAgICAgcEdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVG
RkVSLCBvbGRGQk8pOworICAgICAgICB9CiAgICAgfQogCiAKQEAgLTIyNCwyMiArMjM2LDIyIEBA
IHN0YXRpYyBib29sIHJlc29sdmVHTE1ldGhvZHMoR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSogcCkK
ICAgICByZXR1cm4gcmVzb2x2ZWQ7CiB9CiAKLXVpbnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6cGxh
dGZvcm1FeHBvcnQoKQordWludDY0X3QgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUV4cG9ydCgp
CiB7CiAgICAgcmV0dXJuIG1fcGxhdGZvcm1TdXJmYWNlOwogfQogCiB1aW50MzJfdCBHcmFwaGlj
c1N1cmZhY2U6OnBsYXRmb3JtR2V0VGV4dHVyZUlEKCkKIHsKLSAgICBpZiAoIW1fdGV4dHVyZSkK
KyAgICBpZiAoIW1fdGV4dHVyZSkgewogICAgICAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1
cmUpOwotCi0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAg
IGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdM
X0xJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
TUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7
Ci0gICAgcEdsWEJpbmRUZXhJbWFnZUVYVChtX3ByaXZhdGUtPmRpc3BsYXkoKSwgbV9wcml2YXRl
LT5nbHhQaXhtYXAoKSwgR0xYX0ZST05UX0VYVCwgMCk7CisgICAgICAgIGdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2xU
ZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElO
RUFSKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
V1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAg
cEdsWEJpbmRUZXhJbWFnZUVYVChtX3ByaXZhdGUtPmRpc3BsYXkoKSwgbV9wcml2YXRlLT5nbHhQ
aXhtYXAoKSwgR0xYX0ZST05UX0VYVCwgMCk7CisgICAgfQogCiAgICAgcmV0dXJuIG1fdGV4dHVy
ZTsKIH0KQEAgLTI2MywxNCArMjc1LDI1IEBAIHZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9y
bUNvcHlGcm9tRnJhbWVidWZmZXIodWludDMyX3Qgb3JpZ2luRmJvLCBjb25zdCBJbnRSCiAgICAg
cEdsQmxpdEZyYW1lYnVmZmVyKDAsIDAsIHdpZHRoLCBoZWlnaHQsIDAsIDAsIHdpZHRoLCBoZWln
aHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CiAgICAgcEdsQmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBvbGRGQk8pOwogICAgIGdsUG9wQXR0cmliKCk7Cit9CiAKK3Vp
bnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Gcm9udEJ1ZmZlcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3VpbnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Td2Fw
QnVmZmVycygpCit7CiAgICAgbV9wcml2YXRlLT5zd2FwQnVmZmVycygpOworICAgIHJldHVybiAw
OwogfQogCiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gR3JhcGhpY3NTdXJmYWNlOjpwbGF0
Zm9ybUNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncykKIHsKICAgICAvLyBY
MTEgZG9lcyBub3Qgc3VwcG9ydCBDb3B5VG9UZXh0dXJlLCBzbyB3ZSBkbyBub3QgY3JlYXRlIGEg
R3JhcGhpY3NTdXJmYWNlIGlmIHRoaXMgaXMgcmVxdWVzdGVkLgotICAgIGlmIChmbGFncyAmIFN1
cHBvcnRzQ29weVRvVGV4dHVyZSkKKyAgICAvLyBHcmFwaGljc1N1cmZhY2VHTFggdXNlcyBhbiBY
V2luZG93IGFzIG5hdGl2ZSBzdXJmYWNlLiBUaGlzIG9uZSBhbHdheXMgaGFzIGEgZnJvbnQgYW5k
IGEgYmFjayBidWZmZXIuCisgICAgLy8gVGhlcmVmb3JlIHNpbmdsZSBidWZmZXJlZCBHcmFwaGlj
c1N1cmZhY2VzIGFyZSBub3Qgc3VwcG9ydGVkLgorICAgIGlmIChmbGFncyAmIFN1cHBvcnRzQ29w
eVRvVGV4dHVyZSB8fCBmbGFncyAmIFN1cHBvcnRzU2luZ2xlQnVmZmVyZWQpCiAgICAgICAgIHJl
dHVybiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oKTsKIAogICAgIFJlZlB0cjxHcmFwaGlj
c1N1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NTdXJmYWNlKHNpemUsIGZs
YWdzKSk7CkBAIC0yODQsMTAgKzMwNywxMiBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4g
R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLAogICAg
IHJldHVybiBzdXJmYWNlOwogfQogCi1QYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gR3JhcGhp
Y3NTdXJmYWNlOjpwbGF0Zm9ybUltcG9ydChjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFn
cywgdWludDMyX3QgdG9rZW4pCitQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gR3JhcGhpY3NT
dXJmYWNlOjpwbGF0Zm9ybUltcG9ydChjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncywg
dWludDY0X3QgdG9rZW4pCiB7CiAgICAgLy8gWDExIGRvZXMgbm90IHN1cHBvcnQgQ29weVRvVGV4
dHVyZSwgc28gd2UgZG8gbm90IGNyZWF0ZSBhIEdyYXBoaWNzU3VyZmFjZSBpZiB0aGlzIGlzIHJl
cXVlc3RlZC4KLSAgICBpZiAoZmxhZ3MgJiBTdXBwb3J0c0NvcHlUb1RleHR1cmUpCisgICAgLy8g
R3JhcGhpY3NTdXJmYWNlR0xYIHVzZXMgYW4gWFdpbmRvdyBhcyBuYXRpdmUgc3VyZmFjZS4gVGhp
cyBvbmUgYWx3YXlzIGhhcyBhIGZyb250IGFuZCBhIGJhY2sgYnVmZmVyLgorICAgIC8vIFRoZXJl
Zm9yZSBzaW5nbGUgYnVmZmVyZWQgR3JhcGhpY3NTdXJmYWNlcyBhcmUgbm90IHN1cHBvcnRlZC4K
KyAgICBpZiAoZmxhZ3MgJiBTdXBwb3J0c0NvcHlUb1RleHR1cmUgfHwgZmxhZ3MgJiBTdXBwb3J0
c1NpbmdsZUJ1ZmZlcmVkKQogICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZh
Y2U+KCk7CiAKICAgICBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRSZWYo
bmV3IEdyYXBoaWNzU3VyZmFjZShzaXplLCBmbGFncykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDhkNjBjN2IuLmIyNThkNGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2lu
Z1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAKQEAgLTM0LDE2ICszNCwxOSBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi12b2lkIFRleHR1cmVN
YXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlOjpzZXRHcmFwaGljc1N1cmZhY2UodWludDMyX3QgZ3Jh
cGhpY3NTdXJmYWNlVG9rZW4sIGNvbnN0IEludFNpemUmIHN1cmZhY2VTaXplKQordm9pZCBUZXh0
dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6c2V0R3JhcGhpY3NTdXJmYWNlKHVpbnQ2NF90
IGdyYXBoaWNzU3VyZmFjZVRva2VuLCBjb25zdCBJbnRTaXplJiBzdXJmYWNlU2l6ZSwgdWludDMy
X3QgZnJvbnRCdWZmZXIpCiB7Ci0gICAgaWYgKGdyYXBoaWNzU3VyZmFjZVRva2VuICE9IG1fYmFj
a0J1ZmZlckdyYXBoaWNzU3VyZmFjZURhdGEubV9ncmFwaGljc1N1cmZhY2VUb2tlbikgeworICAg
IGlmIChncmFwaGljc1N1cmZhY2VUb2tlbiAhPSBtX2dyYXBoaWNzU3VyZmFjZVRva2VuKSB7CiAg
ICAgICAgIEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3Mgc3VyZmFjZUZsYWdzID0gR3JhcGhpY3NTdXJm
YWNlOjpTdXBwb3J0c1RleHR1cmVUYXJnZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZzsKLSAgICAg
ICAgbV9iYWNrQnVmZmVyR3JhcGhpY3NTdXJmYWNlRGF0YS5zZXRTdXJmYWNlKEdyYXBoaWNzU3Vy
ZmFjZTo6Y3JlYXRlKHN1cmZhY2VTaXplLCBzdXJmYWNlRmxhZ3MsIGdyYXBoaWNzU3VyZmFjZVRv
a2VuKSk7CisgICAgICAgIHNldFN1cmZhY2UoR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoc3VyZmFj
ZVNpemUsIHN1cmZhY2VGbGFncywgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pKTsKICAgICAgICAgbV9n
cmFwaGljc1N1cmZhY2VTaXplID0gc3VyZmFjZVNpemU7CiAgICAgfQogCi0gICAgc3RkOjpzd2Fw
KG1fYmFja0J1ZmZlckdyYXBoaWNzU3VyZmFjZURhdGEsIG1fZnJvbnRCdWZmZXJHcmFwaGljc1N1
cmZhY2VEYXRhKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNl
ID0gZ3JhcGhpY3NTdXJmYWNlKCk7CisgICAgaWYgKHN1cmZhY2UtPmZyb250QnVmZmVyKCkgIT0g
ZnJvbnRCdWZmZXIpCisgICAgICAgIHN1cmZhY2UtPnN3YXBCdWZmZXJzKCk7CisKIH0KIAogUGFz
c1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6
dGV4dHVyZSgpIGNvbnN0CkBAIC01OSwxNSArNjIsMjUgQEAgdm9pZCBUZXh0dXJlTWFwcGVyU3Vy
ZmFjZUJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4
dHUKICAgICBhZGp1c3RlZFRyYW5zZm9ybS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
cmVjdFRvUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBtX2dyYXBoaWNzU3VyZmFj
ZVNpemUpLCB0YXJnZXRSZWN0KSk7CiAjaWYgT1MoREFSV0lOKQogICAgIC8vIFRoaXMgaXMgc3Bl
Y2lmaWMgdG8gdGhlIE1hYyBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc1N1cmZhY2UuIElPU3Vy
ZmFjZSByZXF1aXJlcyBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIgdG8gYmUgdXNlZC4KLSAgICBz
dGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPih0ZXh0dXJlTWFwcGVyKS0+ZHJhd1RleHR1cmVS
ZWN0YW5nbGVBUkIobV9mcm9udEJ1ZmZlckdyYXBoaWNzU3VyZmFjZURhdGEubV90ZXh0dXJlSUQs
IDAsIG1fZ3JhcGhpY3NTdXJmYWNlU2l6ZSwgdGFyZ2V0UmVjdCwgYWRqdXN0ZWRUcmFuc2Zvcm0s
IG9wYWNpdHksIG1hc2spOworICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KHRleHR1
cmVNYXBwZXIpLT5kcmF3VGV4dHVyZVJlY3RhbmdsZUFSQihtX2dyYXBoaWNzU3VyZmFjZS0+Z2V0
VGV4dHVyZUlEKCksIDAsIG1fZ3JhcGhpY3NTdXJmYWNlU2l6ZSwgdGFyZ2V0UmVjdCwgYWRqdXN0
ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIG1hc2spOwogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odGV4
dHVyZU1hcHBlcik7Ci0gICAgVU5VU0VEX1BBUkFNKG9wYWNpdHkpOwotICAgIFVOVVNFRF9QQVJB
TShtYXNrKTsKKyAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPih0ZXh0dXJlTWFwcGVy
KS0+ZHJhd1RleHR1cmUobV9ncmFwaGljc1N1cmZhY2UtPmdldFRleHR1cmVJRCgpLCAwLCBtX2dy
YXBoaWNzU3VyZmFjZVNpemUsIHRhcmdldFJlY3QsIGFkanVzdGVkVHJhbnNmb3JtLCBvcGFjaXR5
LCBtYXNrKTsKICNlbmRpZgogfQogI2VuZGlmCiAKK3ZvaWQgVGV4dHVyZU1hcHBlclN1cmZhY2VC
YWNraW5nU3RvcmU6OnNldFN1cmZhY2UoUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZh
Y2UpCit7CisgICAgaWYgKHN1cmZhY2UpIHsKKyAgICAgICAgbV9ncmFwaGljc1N1cmZhY2UgPSBz
dXJmYWNlOworICAgICAgICBtX2dyYXBoaWNzU3VyZmFjZVRva2VuID0gbV9ncmFwaGljc1N1cmZh
Y2UtPmV4cG9ydFRva2VuKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ncmFwaGljc1N1cmZh
Y2UgPSBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPigpOworICAgICAgICBtX2dyYXBoaWNzU3VyZmFj
ZVRva2VuID0gMDsKKyAgICB9Cit9CisKKwogdm9pZCBUZXh0dXJlTWFwcGVyVGlsZTo6dXBkYXRl
Q29udGVudHMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgSW1hZ2UqIGltYWdlLCBjb25z
dCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7CiAgICAgSW50UmVjdCB0YXJnZXRSZWN0ID0gZW5jbG9z
aW5nSW50UmVjdChtX3JlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgK
aW5kZXggNDEyMzA2Ni4uOWQwMDJiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdT
dG9yZS5oCkBAIC00NywzNSArNDcsMjcgQEAgcHJvdGVjdGVkOgogfTsKIAogI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQotc3RydWN0IEdyYXBoaWNzU3VyZmFjZURhdGEgewotICAgIHZvaWQgc2V0
U3VyZmFjZShQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSkKLSAgICB7Ci0gICAg
ICAgIG1fZ3JhcGhpY3NTdXJmYWNlID0gc3VyZmFjZTsKLSAgICAgICAgbV9ncmFwaGljc1N1cmZh
Y2VUb2tlbiA9IG1fZ3JhcGhpY3NTdXJmYWNlLT5leHBvcnRUb2tlbigpOwotICAgICAgICBtX3Rl
eHR1cmVJRCA9IG1fZ3JhcGhpY3NTdXJmYWNlLT5nZXRUZXh0dXJlSUQoKTsKLSAgICB9Ci0KLSAg
ICBHcmFwaGljc1N1cmZhY2VEYXRhKCkKLSAgICAgICAgOiBtX3RleHR1cmVJRCgwKQotICAgICAg
ICAsIG1fZ3JhcGhpY3NTdXJmYWNlVG9rZW4oMCkKLSAgICB7IH0KLQotICAgIHVpbnQzMl90IG1f
dGV4dHVyZUlEOwotICAgIHVpbnQzMl90IG1fZ3JhcGhpY3NTdXJmYWNlVG9rZW47Ci0gICAgUmVm
UHRyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZT4gbV9ncmFwaGljc1N1cmZhY2U7Ci19OwotCiBj
bGFzcyBUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZSA6IHB1YmxpYyBUZXh0dXJlTWFw
cGVyQmFja2luZ1N0b3JlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJl
TWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlKTsgfQotICAgIHZvaWQgc2V0R3JhcGhp
Y3NTdXJmYWNlKHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuLCBjb25zdCBJbnRTaXplJiBz
dXJmYWNlU2l6ZSk7CisgICAgdm9pZCBzZXRHcmFwaGljc1N1cmZhY2UodWludDY0X3QgZ3JhcGhp
Y3NTdXJmYWNlVG9rZW4sIGNvbnN0IEludFNpemUmIHN1cmZhY2VTaXplLCB1aW50MzJfdCBmcm9u
dEJ1ZmZlcik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U+IGdyYXBo
aWNzU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhcGhpY3NTdXJmYWNlOyB9CiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUoKSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIEJpdG1hcFRleHR1cmUq
KTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZSgpIHsgfQor
Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBzZXRTdXJmYWNlKFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJm
YWNlPik7CisKIHByaXZhdGU6CisgICAgVGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmUo
KQorICAgICAgICA6IFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUoKQorICAgICAgICAsIG1fZ3Jh
cGhpY3NTdXJmYWNlVG9rZW4oMCkKKyAgICAgICAgeyB9CisKKyAgICB1aW50NjRfdCBtX2dyYXBo
aWNzU3VyZmFjZVRva2VuOworICAgIFJlZlB0cjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U+IG1f
Z3JhcGhpY3NTdXJmYWNlOwogICAgIEludFNpemUgbV9ncmFwaGljc1N1cmZhY2VTaXplOwotICAg
IEdyYXBoaWNzU3VyZmFjZURhdGEgbV9mcm9udEJ1ZmZlckdyYXBoaWNzU3VyZmFjZURhdGE7Ci0g
ICAgR3JhcGhpY3NTdXJmYWNlRGF0YSBtX2JhY2tCdWZmZXJHcmFwaGljc1N1cmZhY2VEYXRhOwog
fTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCmluZGV4
IDk2MTRjODkuLjIyOTJmNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ci5oCkBAIC0zNCw2ICszNCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3dhcEJ1ZmZl
cnMoKSB7IH0KICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKICAgICB2aXJ0dWFsIHVpbnQzMl90
IGNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHVpbnQ2
NF90IGdyYXBoaWNzU3VyZmFjZVRva2VuKCkgY29uc3QgeyByZXR1cm4gMDsgfQogI2VuZGlmCiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKaW5kZXggZTk4YzYxMy4uOGI2NDFhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDQwIEBACisyMDEyLTA4LTA4ICBaZW5vIEFsYmlzc2VyICA8emVub0B3ZWJraXQub3JnPgorCisg
ICAgICAgIE1ha2UgR3JhcGhpY3NTdXJmYWNlIGRvdWJsZSBidWZmZXJlZCBieSBkZWZhdWx0Lgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTMyNTIKKwor
ICAgICAgICBDcmVhdGUgb25seSBhIHNpbmdsZSBHcmFwaGljc1N1cmZhY2UgcGVyIGNhbnZhcwor
ICAgICAgICBvbiBib3RoIHN1cHBvcnRlZCBwbGF0Zm9ybXMgTWFjL0xpbnV4LgorICAgICAgICBU
aGUgR3JhcGhpY3NTdXJmYWNlIG9uIE1hYyBpbnRlcm5hbGx5IHVzZXMgdHdvIElPU3VyZmFjZQor
ICAgICAgICB0byBwcm92aWRlIGEgZnJvbnQgYW5kIGEgYmFjayBidWZmZXIuCisgICAgICAgIFRo
ZSBHTFggaW1wbGVtZW50YXRpb24gb2YgR3JhcGhpY3NTdXJmYWNlIHVzZXMKKyAgICAgICAgYW4g
WFdpbmRvdyB3aGljaCBhbHJlYWR5IHByb3ZpZGVzIGEgZnJvbnQgYW5kIGEgYmFjayBidWZmZXIu
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFy
ZWQvU2hhcmVhYmxlU3VyZmFjZS5oOgorICAgICAgICAoSGFuZGxlKToKKyAgICAgICAgICAgIENo
YW5nZSB0aGUgdHlwZSBvZiBHcmFwaGljc1N1cmZhY2UgdG9rZW4gdG8gdWludDY0X3QuCisgICAg
ICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnN5
bmNDYW52YXMpOgorICAgICAgICAgICAgQWRkIGEgcGFyYW1ldGVyIHRoYXQgZGVub3RlcyB0aGUg
Y3VycmVudCBmcm9udCBidWZmZXIgb2YgdGhlCisgICAgICAgICAgICBHcmFwaGljc1N1cmZhY2Uu
CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eS5oOgorICAgICAgICAoTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVSZW5kZXJlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRl
cmVyOjpzeW5jQ2FudmFzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVSZW5kZXJlci5oOgorICAgICAgICAoTGF5ZXJUcmVlUmVuZGVyZXIpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnN5bmNDYW52YXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oOgorICAgICAgICAoQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jQ2FudmFzKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5o
OgorICAgICAgICAoTGF5ZXJUcmVlQ29vcmRpbmF0b3IpOgorCiAyMDEyLTA4LTA4ICBBbmRyYXMg
QmVjc2kgIDxhbmRyYXMuYmVjc2lAbm9raWEuY29tPgogCiAgICAgICAgIFtRdF1bV0syXSBTZXQg
dGhlIGZpeGVkIGxheW91dCBzZXR0aW5nIGJlZm9yZSBjcmVhdGluZyB0aGUgcGFnZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVN1cmZhY2UuaCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVTdXJmYWNlLmgKaW5kZXggZmI3NGI2MS4uNmNkNzM2OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVN1cmZhY2UuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlU3VyZmFjZS5oCkBAIC02Miw3ICs2Miw3
IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIFNoYXJlYWJsZVN1cmZhY2U7CiAgICAg
ICAgIG11dGFibGUgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgbV9iaXRtYXBIYW5kbGU7CiAjaWYg
VVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgICAgIHVpbnQzMl90IG1fZ3JhcGhpY3NTdXJmYWNl
VG9rZW47CisgICAgICAgIHVpbnQ2NF90IG1fZ3JhcGhpY3NTdXJmYWNlVG9rZW47CiAjZW5kaWYK
ICAgICAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7CiAgICAgICAgIFNoYXJlYWJsZUJpdG1h
cDo6RmxhZ3MgbV9mbGFnczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eS5jcHAKaW5kZXggZWY5NzJmMy4uNmIwZGU3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTE3NCw5ICsxNzQsOSBAQCB2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0
IEludFBvaW50JiBwb3NpdGlvbgogICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJl
bmRlcmVyOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbiwgbV9yZW5kZXJlci5nZXQoKSwgcG9zaXRp
b24pKTsKIH0KIAotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzeW5jQ2FudmFzKHVp
bnQzMl90IGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1
cmZhY2VUb2tlbikKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c3luY0NhbnZhcyh1
aW50MzJfdCBpZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDY0X3QgZ3JhcGhpY3NT
dXJmYWNlVG9rZW4sIHVpbnQzMl90IGZyb250QnVmZmVyKQogewotICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzLCBtX3JlbmRlcmVyLmdldCgpLCBp
ZCwgY2FudmFzU2l6ZSwgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pKTsKKyAgICBkaXNwYXRjaFVwZGF0
ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c3luY0NhbnZhcywgbV9yZW5kZXJlci5nZXQoKSwg
aWQsIGNhbnZhc1NpemUsIGdyYXBoaWNzU3VyZmFjZVRva2VuLCBmcm9udEJ1ZmZlcikpOwogfQog
CiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnB1cmdlQmFja2luZ1N0b3JlcygpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmgKaW5kZXggZjYwM2Nk
MC4uZWQ3MWRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkuaApAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgp
OwogICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CiAgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQ
b3NpdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24pOwotICAgIHZvaWQgc3lu
Y0NhbnZhcyh1aW50MzJfdCBpZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwg
dWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pOworICAgIHZvaWQgc3luY0NhbnZhcyh1aW50
MzJfdCBpZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDY0X3QgZ3Jh
cGhpY3NTdXJmYWNlVG9rZW4sIHVpbnQzMl90IGZyb250QnVmZmVyKTsKICAgICB2b2lkIHB1cmdl
QmFja2luZ1N0b3JlcygpOwogICAgIExheWVyVHJlZVJlbmRlcmVyKiBsYXllclRyZWVSZW5kZXJl
cigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXIuZ2V0KCk7IH0KICAgICB2b2lkIHNldExheWVy
QW5pbWF0ZWRPcGFjaXR5KHVpbnQzMl90LCBmbG9hdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclBy
b3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgppbmRleCBkMjQzOGYx
Li4yMzg2OTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkubWVzc2FnZXMuaW4KQEAgLTMzLDcgKzMzLDcgQEAgbWVzc2FnZXMgLT4gTGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSB7CiAgICAgRGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZElt
YWdlKGludDY0X3Qga2V5KQogICAgIERpZFJlbmRlckZyYW1lKCkKICAgICBEaWRDaGFuZ2VTY3Jv
bGxQb3NpdGlvbihXZWJDb3JlOjpJbnRQb2ludCBwb3NpdGlvbikKLSAgICBTeW5jQ2FudmFzKHVp
bnQzMl90IGlkLCBXZWJDb3JlOjpJbnRTaXplIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNz
U3VyZmFjZVRva2VuKQorICAgIFN5bmNDYW52YXModWludDMyX3QgaWQsIFdlYkNvcmU6OkludFNp
emUgY2FudmFzU2l6ZSwgdWludDY0X3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4sIHVpbnQzMl90IGZy
b250QnVmZmVyKQogICAgIFNldExheWVyQW5pbWF0ZWRPcGFjaXR5KHVpbnQzMl90IGlkLCBmbG9h
dCBvcGFjaXR5KQogICAgIFNldExheWVyQW5pbWF0ZWRUcmFuc2Zvcm0odWludDMyX3QgaWQsIFdl
YkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSkKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRl
cmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZVJlbmRlcmVyLmNwcAppbmRleCBlZDBiZTNjLi40ODFiOWY3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5k
ZXJlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBMYXllclRy
ZWVSZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHBvc2l0
aW9uKQogICAgIG1fcGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9IHBvc2l0
aW9uOwogfQogCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzKFdlYkxheWVySUQg
aWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNz
U3VyZmFjZVRva2VuKQordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c3luY0NhbnZhcyhXZWJMYXll
cklEIGlkLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjYW52YXNTaXplLCB1aW50NjRfdCBncmFw
aGljc1N1cmZhY2VUb2tlbiwgdWludDMyX3QgZnJvbnRCdWZmZXIpCiB7CiAgICAgaWYgKGNhbnZh
c1NpemUuaXNFbXB0eSgpIHx8ICFtX3RleHR1cmVNYXBwZXIpCiAgICAgICAgIHJldHVybjsKQEAg
LTIwOCw3ICsyMDgsNyBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzKFdlYkxh
eWVySUQgaWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhcwogICAgIH0gZWxzZQogICAg
ICAgICBjYW52YXNCYWNraW5nU3RvcmUgPSBpdC0+c2Vjb25kOwogCi0gICAgY2FudmFzQmFja2lu
Z1N0b3JlLT5zZXRHcmFwaGljc1N1cmZhY2UoZ3JhcGhpY3NTdXJmYWNlVG9rZW4sIGNhbnZhc1Np
emUpOworICAgIGNhbnZhc0JhY2tpbmdTdG9yZS0+c2V0R3JhcGhpY3NTdXJmYWNlKGdyYXBoaWNz
U3VyZmFjZVRva2VuLCBjYW52YXNTaXplLCBmcm9udEJ1ZmZlcik7CiAgICAgbGF5ZXItPnNldENv
bnRlbnRzVG9NZWRpYShjYW52YXNCYWNraW5nU3RvcmUuZ2V0KCkpOwogI2VuZGlmCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVSZW5kZXJlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaAppbmRleCA2NDAzYjVkLi41NzA2YTRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVSZW5kZXJlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmgKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwogICAgIHZv
aWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKICAg
ICB2b2lkIGRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBw
b3NpdGlvbik7Ci0gICAgdm9pZCBzeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbik7Cisg
ICAgdm9pZCBzeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBj
YW52YXNTaXplLCB1aW50NjRfdCBncmFwaGljc1N1cmZhY2VUb2tlbiwgdWludDMyX3QgZnJvbnRC
dWZmZXIpOwogCiAgICAgdm9pZCBkZXRhY2goKTsKICAgICB2b2lkIGFwcGVuZFVwZGF0ZShjb25z
dCBGdW5jdGlvbjx2b2lkKCk+Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAppbmRleCBkNTBjZTFjLi41ZDJlNDFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5jcHAKQEAgLTUyNyw4ICs1MjcsMTAgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnN5bmNDYW52YXMoKQogICAgICAgICByZXR1cm47CiAKICNpZiBVU0UoR1JBUEhJQ1Nf
U1VSRkFDRSkKLSAgICB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbiA9IG1fY2FudmFzUGxh
dGZvcm1MYXllci0+Y29weVRvR3JhcGhpY3NTdXJmYWNlKCk7Ci0gICAgbV9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJDbGllbnQtPnN5bmNDYW52YXMobV9pZCwgSW50U2l6ZShzaXplKCkud2lkdGgo
KSwgc2l6ZSgpLmhlaWdodCgpKSwgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pOworICAgIHVpbnQzMl90
IGZyb250QnVmZmVyID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5jb3B5VG9HcmFwaGljc1N1cmZh
Y2UoKTsKKyAgICB1aW50NjRfdCB0b2tlbiA9IG1fY2FudmFzUGxhdGZvcm1MYXllci0+Z3JhcGhp
Y3NTdXJmYWNlVG9rZW4oKTsKKworICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50
LT5zeW5jQ2FudmFzKG1faWQsIEludFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQo
KSksIHRva2VuLCBmcm9udEJ1ZmZlcik7CiAjZW5kaWYKICAgICBtX2NhbnZhc05lZWRzRGlzcGxh
eSA9IGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIuaAppbmRleCAyNWNjZDk0Li5mNGVhMmZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaApAQCAt
NjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMo
V2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpID0gMDsKICNlbmRp
ZgogI2lmIFBMQVRGT1JNKFFUKQotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKFdlYkxheWVy
SUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNz
U3VyZmFjZVRva2VuKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMoV2ViTGF5ZXJJ
RCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDY0X3QgZ3JhcGhpY3NT
dXJmYWNlVG9rZW4sIHVpbnQzMl90IGZyb250QnVmZmVyKSA9IDA7CiAjZW5kaWYKIAogICAgIHZp
cnR1YWwgdm9pZCBzZXRMYXllckFuaW1hdGVkT3BhY2l0eShXZWJMYXllcklELCBmbG9hdCkgPSAw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3Iu
Y3BwCmluZGV4IDlkNTk4ZGIuLjlhOGM2NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAKQEAgLTI3OSwxMCArMjc5LDEwIEBAIHZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNMYXllckNoaWxkcmVuKFdlYkxheWVySUQgaWQs
IGNvbnN0IFZlY3RvcjxXZWJMYXllCiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oaWQsIGNo
aWxkcmVuKSk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNDYW52YXMoV2Vi
TGF5ZXJJRCBpZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NT
dXJmYWNlVG9rZW4pCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jQ2FudmFzKFdlYkxh
eWVySUQgaWQsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIHVpbnQ2NF90IGdyYXBoaWNzU3Vy
ZmFjZVRva2VuLCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKIHsKICAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OjpTeW5jQ2FudmFzKGlkLCBjYW52YXNTaXplLCBncmFwaGljc1N1cmZhY2VUb2tl
bikpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTo6U3luY0NhbnZhcyhpZCwgY2FudmFzU2l6ZSwgZ3JhcGhpY3NTdXJmYWNlVG9rZW4sIGZy
b250QnVmZmVyKSk7CiB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAppbmRleCA4MmUwYzcxLi4z
NWE5Y2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3Jk
aW5hdG9yLmgKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKICAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhXZWJMYXllcklELCBjb25zdCBX
ZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7CiAjZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgc3lu
Y0NhbnZhcyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjYW52YXNTaXplLCB1
aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHN5bmNDYW52YXMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6
ZSwgdWludDY0X3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4sIHVpbnQzMl90IGZyb250QnVmZmVyKSBP
VkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRM
YXllcnMoKTsK
</data>
<flag name="commit-queue"
          id="167045"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157213</attachid>
            <date>2012-08-08 07:23:04 -0700</date>
            <delta_ts>2012-08-16 06:24:44 -0700</delta_ts>
            <desc>patch for review.</desc>
            <filename>93252_20120808-162119.patch</filename>
            <type>text/plain</type>
            <size>47775</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3MzcxNDdiLi40NTlkNzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAw
IEBACisyMDEyLTA4LTA4ICBaZW5vIEFsYmlzc2VyICA8emVub0B3ZWJraXQub3JnPgorCisgICAg
ICAgIE1ha2UgR3JhcGhpY3NTdXJmYWNlIGRvdWJsZSBidWZmZXJlZCBieSBkZWZhdWx0LgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTMyNTIKKworICAg
ICAgICBDcmVhdGUgb25seSBhIHNpbmdsZSBHcmFwaGljc1N1cmZhY2UgcGVyIGNhbnZhcworICAg
ICAgICBvbiBib3RoIHN1cHBvcnRlZCBwbGF0Zm9ybXMgTWFjL0xpbnV4LgorICAgICAgICBUaGUg
R3JhcGhpY3NTdXJmYWNlIG9uIE1hYyBpbnRlcm5hbGx5IHVzZXMgdHdvIElPU3VyZmFjZQorICAg
ICAgICB0byBwcm92aWRlIGEgZnJvbnQgYW5kIGEgYmFjayBidWZmZXIuCisgICAgICAgIFRoZSBH
TFggaW1wbGVtZW50YXRpb24gb2YgR3JhcGhpY3NTdXJmYWNlIHVzZXMKKyAgICAgICAgYW4gWFdp
bmRvdyB3aGljaCBhbHJlYWR5IHByb3ZpZGVzIGEgZnJvbnQgYW5kIGEgYmFjayBidWZmZXIuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZSk6CisgICAgICAgICAgICBSZW1vdmUgY3JlYXRpb24gb2Ygc2Vjb25k
IEdyYXBoaWNzU3VyZmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Y29weVRvR3JhcGhpY3NTdXJmYWNlKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpncmFw
aGljc1N1cmZhY2VUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc1N1cmZhY2U6OmNyZWF0ZSk6CisgICAgICAgICAgICBBZGp1c3QgdG9rZW4gdHlwZSB0byB1
aW50NjRfdC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6ZXhwb3J0VG9rZW4p
OgorICAgICAgICAgICAgQWRqdXN0IHJldHVybiB0eXBlIHRvIHVpbnQ2NF90LgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpmcm9udEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6c3dhcEJ1ZmZlcnMpOgorICAg
ICAgICAgICAgQWRkIGZvcndhcmRpbmcgZnVuY3Rpb24gdG8gc3dhcCBidWZmZXJzIGluc2lkZSBH
cmFwaGljc1N1cmZhY2UuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3Jh
cGhpY3NTdXJmYWNlLmg6CisgICAgICAgIChHcmFwaGljc1N1cmZhY2UpOgorICAgICAgICAgICAg
QWRkIFN1cHBvcnRzU2luZ2xlQnVmZmVyZWQgZmxhZyB0byBhbGxvdyBmb3Igc2luZ2xlIGJ1ZmZl
cmVkIGltcGxlbWVudGF0aW9ucy4KKyAgICAgICAgICAgIEN1cnJlbnRseSBzaW5nbGUgYnVmZmVy
ZWQgc3VyZmFjZXMgYXJlIGVpdGhlciBub3QgaW1wbGVtZW50ZWQgb3IgZGlzYWJsZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5j
cHA6CisgICAgICAgICAgICBNb3ZlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgaW50byBHcmFwaGlj
c1N1cmZhY2VQcml2YXRlLgorICAgICAgICAgICAgVGhpcyB3YXkgdGhlIHBsYXRmb3JtIHNwZWNp
ZmljIGNvZGUgY2FuIGJlIGhpZGRlbiBpbiB0aGUgc3BlY2lmaWMgY3BwIGZpbGUKKyAgICAgICAg
ICAgIGluc3RlYWQgb2YgcG9sbHV0aW5nIHRoZSBnbG9iYWwgR3JhcGhpY3NTdXJmYWNlIGhlYWRl
ci4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoR3JhcGhpY3NT
dXJmYWNlUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRl
OjpHcmFwaGljc1N1cmZhY2VQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3Vy
ZmFjZVByaXZhdGU6On5HcmFwaGljc1N1cmZhY2VQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OnRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzU3VyZmFjZVByaXZhdGU6OmZyb250QnVmZmVyVGV4dHVyZUlEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OmJhY2tCdWZmZXJUZXh0dXJlSUQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6ZnJvbnRCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6YmFja0J1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1F
eHBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUdldFRl
eHR1cmVJRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29w
eVRvR0xUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZv
cm1Db3B5RnJvbUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFj
ZTo6cGxhdGZvcm1Gcm9udEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZh
Y2U6OnBsYXRmb3JtU3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJm
YWNlOjpwbGF0Zm9ybUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6
OnBsYXRmb3JtSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OmlvU3VyZmFjZUxvY2tPcHRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Mb2NrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1VbmxvY2spOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpPZmZTY3JlZW5Sb290V2luZG93OjpnZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAgICAg
TWFrZSBzdXJlIHRoYXQgZnJhbWVidWZmZXIgYmluZGluZ3MgcmVtYWluIGNvbnNpc3RlbnQKKyAg
ICAgICAgICAgIGFmdGVyIHN3YXBwaW5nIGJ1ZmZlcnMgb24gdGhlIFhXaW5kb3cuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRXhwb3J0KToKKyAgICAgICAgICAg
IE1ha2Ugc3VyZSB0aGUgR0xYUGl4bWFwIGlzIG9ubHkgYm91bmQgdG8gdGhlIHRleHR1cmUgb25j
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1HZXRUZXh0dXJl
SUQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlGcm9t
RnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc1N1cmZhY2U6OnBsYXRmb3JtRnJvbnRCdWZmZXIpOgorICAgICAgICAgICAgVGhlIEdMWCBz
dXJmYWNlIGRvZXMgbm90IGtub3cgaG93IHRvIGRlc3Rpbmd1aXNoIGJldHdlZW4KKyAgICAgICAg
ICAgIHRoZSBmcm9udCBhbmQgdGhlIGJhY2sgYnVmZmVyIGJ5IGFuIGlkLiBUaGlzIGlzIG5vdCBu
ZWNlc3NhcnkKKyAgICAgICAgICAgIGZvciBHcmFwaGljc1N1cmZhY2VHTFgsIGJlY2F1c2UgdGhl
IHRleHR1cmUgY2FuIGp1c3QgYmUKKyAgICAgICAgICAgIHJlYWQgZnJvbSB0aGUgWFdpbmRvdyBh
dCBhbnkgdGltZS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1T
d2FwQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3Jt
Q3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1JbXBv
cnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFj
a2luZ1N0b3JlLmNwcDoKKyAgICAgICAgICAgIFJlbW92ZSBjb2RlIHRoYXQgd2FzIHVzZWQgZm9y
IHN3aXRjaGluZyBiZXR3ZWVuIHR3byBHcmFwaGljc1N1cmZhY2VzLAorICAgICAgICAgICAgYXMg
dGhpcyBpcyBub3cgaGFuZGxlZCBkaXJlY3RseSBpbnNpZGUgR3JhcGhpY3NTdXJmYWNlLgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU6OnNldEdyYXBo
aWNzU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tp
bmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU6OnNldFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgICAgIFJlbW92ZSBHcmFwaGljc1N1cmZhY2VEYXRhIHN0cnVj
dC4gVGhpcyBjbGFzcyBpcyBub3QgbmVlZGVkIGFueW1vcmUKKyAgICAgICAgICAgIGFzIHdlIGRv
IG5vdCBrZWVwIHRyYWNrIG9mIG1vcmUgdGhhbiBvbmUgR3JhcGhpY3NTdXJmYWNlIGF0IHRoZSB0
aW1lLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU3VyZmFjZUJh
Y2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tp
bmdTdG9yZTo6Z3JhcGhpY3NTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJTdXJmYWNlQmFja2luZ1N0b3JlOjpUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcjo6
Z3JhcGhpY3NTdXJmYWNlVG9rZW4pOgorCiAyMDEyLTA4LTA4ICBLZW50YXJvIEhhcmEgIDxoYXJh
a2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICAnY2xhc3MgV3JhcHBlclR5cGVJbmZvJyBzaG91
bGQgYmUgJ3N0cnVjdCBXcmFwcGVyVHlwZUluZm8nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCmluZGV4
IGNiODI0ZjYuLjg4NTJjY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCkBAIC02OSw2ICs2OSw3
IEBAIHB1YmxpYzoKICNlbmRpZgogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQogICAgIHZpcnR1
YWwgdWludDMyX3QgY29weVRvR3JhcGhpY3NTdXJmYWNlKCk7CisgICAgdmlydHVhbCB1aW50NjRf
dCBncmFwaGljc1N1cmZhY2VUb2tlbigpIGNvbnN0OwogI2VuZGlmCiAKICAgICBRUmVjdEYgYm91
bmRpbmdSZWN0KCkgY29uc3Q7CkBAIC04Myw4ICs4NCw3IEBAIHB1YmxpYzoKICAgICBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEIG1fcGxhdGZvcm1Db250ZXh0OwogI2lmIFVTRShHUkFQSElDU19T
VVJGQUNFKQogICAgIEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3MgbV9zdXJmYWNlRmxhZ3M7Ci0gICAg
UmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gbV9mcm9udEJ1ZmZlckdyYXBoaWNzU3VyZmFjZTsKLSAg
ICBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBtX2JhY2tCdWZmZXJHcmFwaGljc1N1cmZhY2U7Cisg
ICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gbV9ncmFwaGljc1N1cmZhY2U7CiAjZW5kaWYKIH07
CiAKQEAgLTE0MCw4ICsxNDAsNyBAQCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSAogICAgICAgICAg
ICAgICAgICAgICB8IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOwogCiAgICAgaWYg
KCFzdXJmYWNlU2l6ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9mcm9udEJ1ZmZlckdyYXBoaWNz
U3VyZmFjZSA9IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKHN1cmZhY2VTaXplLCBtX3N1cmZhY2VG
bGFncyk7Ci0gICAgICAgIG1fYmFja0J1ZmZlckdyYXBoaWNzU3VyZmFjZSA9IEdyYXBoaWNzU3Vy
ZmFjZTo6Y3JlYXRlKHN1cmZhY2VTaXplLCBtX3N1cmZhY2VGbGFncyk7CisgICAgICAgIG1fZ3Jh
cGhpY3NTdXJmYWNlID0gR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoc3VyZmFjZVNpemUsIG1fc3Vy
ZmFjZUZsYWdzKTsKICAgICB9CiAjZW5kaWYKIH0KQEAgLTIyMCwxNCArMjE5LDE5IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFw
cGVyKiB0ZXh0dXJlTWFwcGVyCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiB1aW50MzJfdCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpCiB7Ci0gICAg
aWYgKCFtX2Zyb250QnVmZmVyR3JhcGhpY3NTdXJmYWNlIHx8ICFtX2JhY2tCdWZmZXJHcmFwaGlj
c1N1cmZhY2UpCisgICAgaWYgKCFtX2dyYXBoaWNzU3VyZmFjZSkKICAgICAgICAgcmV0dXJuIDA7
CiAKICAgICBibGl0TXVsdGlzYW1wbGVGcmFtZWJ1ZmZlckFuZFJlc3RvcmVDb250ZXh0KCk7CiAg
ICAgbWFrZUN1cnJlbnRJZk5lZWRlZCgpOwotICAgIG1fYmFja0J1ZmZlckdyYXBoaWNzU3VyZmFj
ZS0+Y29weUZyb21GcmFtZWJ1ZmZlcihtX2NvbnRleHQtPm1fZmJvLCBJbnRSZWN0KDAsIDAsIG1f
Y29udGV4dC0+bV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC0+bV9jdXJyZW50SGVpZ2h0KSk7Ci0g
ICAgc3RkOjpzd2FwKG1fZnJvbnRCdWZmZXJHcmFwaGljc1N1cmZhY2UsIG1fYmFja0J1ZmZlckdy
YXBoaWNzU3VyZmFjZSk7Ci0gICAgcmV0dXJuIG1fZnJvbnRCdWZmZXJHcmFwaGljc1N1cmZhY2Ut
PmV4cG9ydFRva2VuKCk7CisgICAgbV9ncmFwaGljc1N1cmZhY2UtPmNvcHlGcm9tRnJhbWVidWZm
ZXIobV9jb250ZXh0LT5tX2ZibywgSW50UmVjdCgwLCAwLCBtX2NvbnRleHQtPm1fY3VycmVudFdp
ZHRoLCBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodCkpOworICAgIHVpbnQzMl90IGZyb250QnVm
ZmVyID0gbV9ncmFwaGljc1N1cmZhY2UtPnN3YXBCdWZmZXJzKCk7CisgICAgcmV0dXJuIGZyb250
QnVmZmVyOworfQorCit1aW50NjRfdCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdyYXBoaWNz
U3VyZmFjZVRva2VuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ncmFwaGljc1N1cmZhY2UtPmV4
cG9ydFRva2VuKCk7CiB9CiAjZW5kaWYKIApAQCAtMjc1LDEzICsyNzksMTAgQEAgYm9vbCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6Om1ha2VDdXJyZW50SWZOZWVkZWQoKSBjb25zdAogdm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMoY29uc3QgSW50
U2l6ZSYgc2l6ZSkKIHsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBpZiAoc2l6ZS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgbV9mcm9udEJ1ZmZlckdyYXBoaWNzU3VyZmFjZS5jbGVhcigp
OwotICAgICAgICBtX2JhY2tCdWZmZXJHcmFwaGljc1N1cmZhY2UuY2xlYXIoKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBtX2Zyb250QnVmZmVyR3JhcGhpY3NTdXJmYWNlID0gR3JhcGhpY3NTdXJm
YWNlOjpjcmVhdGUoc2l6ZSwgbV9zdXJmYWNlRmxhZ3MpOwotICAgICAgICBtX2JhY2tCdWZmZXJH
cmFwaGljc1N1cmZhY2UgPSBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShzaXplLCBtX3N1cmZhY2VG
bGFncyk7Ci0gICAgfQorICAgIGlmIChzaXplLmlzRW1wdHkoKSkKKyAgICAgICAgbV9ncmFwaGlj
c1N1cmZhY2UuY2xlYXIoKTsKKyAgICBlbHNlCisgICAgICAgIG1fZ3JhcGhpY3NTdXJmYWNlID0g
R3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoc2l6ZSwgbV9zdXJmYWNlRmxhZ3MpOwogI2VuZGlmCiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L0dyYXBoaWNzU3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuY3BwCmluZGV4IDJiOGNkNjUuLjU1YzY0NWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNz
U3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvR3JhcGhpY3NTdXJmYWNlLmNwcApAQCAtMjUsNyArMjUsNyBAQAogI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPEdyYXBoaWNzU3Vy
ZmFjZT4gR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3Mg
ZmxhZ3MsIHVpbnQzMl90IHRva2VuKQorUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBo
aWNzU3VyZmFjZTo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCB1aW50
NjRfdCB0b2tlbikKIHsKICAgICByZXR1cm4gcGxhdGZvcm1JbXBvcnQoc2l6ZSwgZmxhZ3MsIHRv
a2VuKTsKIH0KQEAgLTM1LDcgKzM1LDcgQEAgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdy
YXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEdyYXBoaWMKICAgICBy
ZXR1cm4gcGxhdGZvcm1DcmVhdGUoc2l6ZSwgZmxhZ3MpOwogfQogCi11aW50MzJfdCBHcmFwaGlj
c1N1cmZhY2U6OmV4cG9ydFRva2VuKCkKK3VpbnQ2NF90IEdyYXBoaWNzU3VyZmFjZTo6ZXhwb3J0
VG9rZW4oKQogewogICAgIHJldHVybiBwbGF0Zm9ybUV4cG9ydCgpOwogfQpAQCAtNjMsNiArNjMs
MTYgQEAgdm9pZCBHcmFwaGljc1N1cmZhY2U6OmNvcHlGcm9tRnJhbWVidWZmZXIodWludDMyX3Qg
ZmJvLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWMKICAgICBwbGF0Zm9ybUNvcHlGcm9tRnJhbWVi
dWZmZXIoZmJvLCBzb3VyY2VSZWN0KTsKIH0KIAordWludDMyX3QgR3JhcGhpY3NTdXJmYWNlOjpm
cm9udEJ1ZmZlcigpCit7CisgICAgcmV0dXJuIHBsYXRmb3JtRnJvbnRCdWZmZXIoKTsKK30KKwor
dWludDMyX3QgR3JhcGhpY3NTdXJmYWNlOjpzd2FwQnVmZmVycygpCit7CisgICAgcmV0dXJuIHBs
YXRmb3JtU3dhcEJ1ZmZlcnMoKTsKK30KKwogR3JhcGhpY3NTdXJmYWNlOjpHcmFwaGljc1N1cmZh
Y2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MpCiAgICAgOiBtX2ZsYWdzKGZsYWdz
KQogICAgICwgbV9zaXplKHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5oCmluZGV4IDdhZWVkNzku
LmU4YWM1MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5oCkBAIC01MCw3ICs1MCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgU3VwcG9ydHNUZXh0dXJlU291cmNlID0gMHgxMCwKICAgICAgICAgU3VwcG9y
dHNDb3B5VG9UZXh0dXJlID0gMHgyMCwKICAgICAgICAgU3VwcG9ydHNDb3B5RnJvbVRleHR1cmUg
PSAweDQwLAotICAgICAgICBTdXBwb3J0c1NoYXJpbmcgPSAweDgwCisgICAgICAgIFN1cHBvcnRz
U2hhcmluZyA9IDB4ODAsCisgICAgICAgIFN1cHBvcnRzU2luZ2xlQnVmZmVyZWQgPSAweDEwMAog
ICAgIH07CiAKICAgICBlbnVtIExvY2tPcHRpb24gewpAQCAtNjYsMTAgKzY3LDEyIEBAIHB1Ymxp
YzoKICAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIAogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gY3JlYXRlKGNvbnN0IEludFNpemUmLCBG
bGFncyk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBjcmVhdGUoY29u
c3QgSW50U2l6ZSYsIEZsYWdzLCB1aW50MzJfdCB0b2tlbik7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8R3JhcGhpY3NTdXJmYWNlPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYsIEZsYWdzLCB1aW50NjRf
dCB0b2tlbik7CiAgICAgdm9pZCBjb3B5VG9HTFRleHR1cmUodWludDMyX3QgdGFyZ2V0LCB1aW50
MzJfdCB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRQb2ludCYg
c291cmNlT2Zmc2V0KTsKICAgICB2b2lkIGNvcHlGcm9tRnJhbWVidWZmZXIodWludDMyX3QgZmJv
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KTsKLSAgICB1aW50MzJfdCBleHBvcnRUb2tlbigp
OworICAgIHVpbnQzMl90IGZyb250QnVmZmVyKCk7CisgICAgdWludDMyX3Qgc3dhcEJ1ZmZlcnMo
KTsKKyAgICB1aW50NjRfdCBleHBvcnRUb2tlbigpOwogICAgIHVpbnQzMl90IGdldFRleHR1cmVJ
RCgpOwogICAgIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBiZWdpblBhaW50KGNvbnN0IElu
dFJlY3QmLCBMb2NrT3B0aW9ucyk7CiAgICAgUGFzc1JlZlB0cjxJbWFnZT4gY3JlYXRlUmVhZE9u
bHlJbWFnZShjb25zdCBJbnRSZWN0Jik7CkBAIC03Nyw4ICs4MCw4IEBAIHB1YmxpYzoKIAogcHJv
dGVjdGVkOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gcGxhdGZvcm1D
cmVhdGUoY29uc3QgSW50U2l6ZSYsIEZsYWdzKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFw
aGljc1N1cmZhY2U+IHBsYXRmb3JtSW1wb3J0KGNvbnN0IEludFNpemUmLCBGbGFncywgdWludDMy
X3QpOwotICAgIHVpbnQzMl90IHBsYXRmb3JtRXhwb3J0KCk7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8R3JhcGhpY3NTdXJmYWNlPiBwbGF0Zm9ybUltcG9ydChjb25zdCBJbnRTaXplJiwgRmxhZ3Ms
IHVpbnQ2NF90KTsKKyAgICB1aW50NjRfdCBwbGF0Zm9ybUV4cG9ydCgpOwogICAgIHZvaWQgcGxh
dGZvcm1EZXN0cm95KCk7CiAKICAgICB1aW50MzJfdCBwbGF0Zm9ybUdldFRleHR1cmVJRCgpOwpA
QCAtODYsNiArODksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBwbGF0Zm9ybVVubG9jaygpOwog
ICAgIHZvaWQgcGxhdGZvcm1Db3B5VG9HTFRleHR1cmUodWludDMyX3QgdGFyZ2V0LCB1aW50MzJf
dCB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmKTsKICAgICB2b2lkIHBs
YXRmb3JtQ29weUZyb21GcmFtZWJ1ZmZlcih1aW50MzJfdCBmYm8sIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QpOworICAgIHVpbnQzMl90IHBsYXRmb3JtRnJvbnRCdWZmZXIoKSBjb25zdDsKKyAg
ICB1aW50MzJfdCBwbGF0Zm9ybVN3YXBCdWZmZXJzKCk7CiAKICAgICBQYXNzT3duUHRyPEdyYXBo
aWNzQ29udGV4dD4gcGxhdGZvcm1CZWdpblBhaW50KGNvbnN0IEludFNpemUmLCBjaGFyKiBiaXRz
LCBpbnQgc3RyaWRlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9tYWMvR3JhcGhpY3NTdXJmYWNlTWFjLmNwcApp
bmRleCBiZmEyMGJhLi5iMjExYzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9tYWMvR3JhcGhpY3NTdXJmYWNlTWFjLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9tYWMvR3JhcGhpY3NTdXJmYWNl
TWFjLmNwcApAQCAtMzAsMTMgKzMwLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1
Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7IH07Ci0KLXVpbnQzMl90IEdyYXBoaWNzU3VyZmFj
ZTo6cGxhdGZvcm1FeHBvcnQoKQotewotICAgIHJldHVybiBJT1N1cmZhY2VHZXRJRChtX3BsYXRm
b3JtU3VyZmFjZSk7Ci19Ci0KIHN0YXRpYyB1aW50MzJfdCBjcmVhdGVUZXh0dXJlKElPU3VyZmFj
ZVJlZiBoYW5kbGUpCiB7CiAgICAgR0x1aW50IHRleHR1cmUgPSAwOwpAQCAtNTIsNiArNDUsNyBA
QCBzdGF0aWMgdWludDMyX3QgY3JlYXRlVGV4dHVyZShJT1N1cmZhY2VSZWYgaGFuZGxlKQogICAg
IGdsR2V0SW50ZWdlcnYoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCAmcHJldlRleHR1cmUpOwog
ICAgIGlmICghd2FzRW5hYmxlZCkKICAgICAgICAgZ2xFbmFibGUoR0xfVEVYVFVSRV9SRUNUQU5H
TEVfQVJCKTsKKwogICAgIGdsR2VuVGV4dHVyZXMoMSwgJnRleHR1cmUpOwogICAgIGdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCB0ZXh0dXJlKTsKICAgICBDR0xFcnJvciBl
cnJvciA9IENHTFRleEltYWdlSU9TdXJmYWNlMkQoY29udGV4dCwgR0xfVEVYVFVSRV9SRUNUQU5H
TEVfQVJCLCBpbnRlcm5hbEZvcm1hdCwgSU9TdXJmYWNlR2V0V2lkdGgoaGFuZGxlKSwgSU9TdXJm
YWNlR2V0SGVpZ2h0KGhhbmRsZSksIGZvcm1hdCwgdHlwZSwgaGFuZGxlLCAwKTsKQEAgLTYzLDIx
ICs1NywxNDkgQEAgc3RhdGljIHVpbnQzMl90IGNyZWF0ZVRleHR1cmUoSU9TdXJmYWNlUmVmIGhh
bmRsZSkKICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgcHJldlRl
eHR1cmUpOwogICAgIGlmICghd2FzRW5hYmxlZCkKICAgICAgICAgZ2xEaXNhYmxlKEdMX1RFWFRV
UkVfUkVDVEFOR0xFX0FSQik7CisKICAgICByZXR1cm4gdGV4dHVyZTsKIH0KIAorc3RydWN0IEdy
YXBoaWNzU3VyZmFjZVByaXZhdGUgeworcHVibGljOgorICAgIEdyYXBoaWNzU3VyZmFjZVByaXZh
dGUodWludDY0X3QgdG9rZW4pCisgICAgICAgIDogbV90b2tlbih0b2tlbikKKyAgICAgICAgLCBt
X2Zyb250QnVmZmVyVGV4dHVyZSgwKQorICAgICAgICAsIG1fYmFja0J1ZmZlclRleHR1cmUoMCkK
KyAgICB7CisgICAgICAgIC8vIFRoZSB0b2tlbiBjb250YWlucyB0aGUgSU9TdXJmYWNlSUQgb2Yg
dGhlIGZpc3Qgc3VyZmFjZS9idWZmZXIgaW4gdGhlIGZpcnN0IDMyIEJpdAorICAgICAgICAvLyBh
bmQgdGhlIElPU3VyZmFjZUlEIG9mIHRoZSBzZWNvbmQgc3VyZmFjZS9idWZmZXIgaW4gdGhlIHNl
Y29uZCAzMiBCaXQuCisgICAgICAgIHVpbnQzMl90IGZyb250QnVmZmVyID0gdG9rZW4gPj4gMzI7
CisgICAgICAgIHVpbnQzMl90IGJhY2tCdWZmZXIgPSB0b2tlbiAmIDB4ZmZmZjsKKworICAgICAg
ICBtX2Zyb250QnVmZmVyID0gSU9TdXJmYWNlTG9va3VwKGZyb250QnVmZmVyKTsKKyAgICAgICAg
bV9iYWNrQnVmZmVyID0gSU9TdXJmYWNlTG9va3VwKGJhY2tCdWZmZXIpOworICAgIH0KKworICAg
IEdyYXBoaWNzU3VyZmFjZVByaXZhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgR3JhcGhpY3NTdXJm
YWNlOjpGbGFncyBmbGFncykKKyAgICAgICAgOiBtX2Zyb250QnVmZmVyVGV4dHVyZSgwKQorICAg
ICAgICAsIG1fYmFja0J1ZmZlclRleHR1cmUoMCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHBp
eGVsRm9ybWF0ID0gJ0JHUkEnOworICAgICAgICB1bnNpZ25lZCBieXRlc1BlckVsZW1lbnQgPSA0
OworICAgICAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CisgICAgICAgIGludCBoZWlnaHQg
PSBzaXplLmhlaWdodCgpOworCisgICAgICAgIHVuc2lnbmVkIGxvbmcgYnl0ZXNQZXJSb3cgPSBJ
T1N1cmZhY2VBbGlnblByb3BlcnR5KGtJT1N1cmZhY2VCeXRlc1BlclJvdywgd2lkdGggKiBieXRl
c1BlckVsZW1lbnQpOworICAgICAgICBpZiAoIWJ5dGVzUGVyUm93KQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHVuc2lnbmVkIGxvbmcgYWxsb2NTaXplID0gSU9TdXJmYWNlQWxpZ25Q
cm9wZXJ0eShrSU9TdXJmYWNlQWxsb2NTaXplLCBoZWlnaHQgKiBieXRlc1BlclJvdyk7CisgICAg
ICAgIGlmICghYWxsb2NTaXplKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnN0
IHZvaWQgKmtleXNbN107CisgICAgICAgIGNvbnN0IHZvaWQgKnZhbHVlc1s3XTsKKyAgICAgICAg
a2V5c1swXSA9IGtJT1N1cmZhY2VXaWR0aDsKKyAgICAgICAgdmFsdWVzWzBdID0gQ0ZOdW1iZXJD
cmVhdGUoMCwga0NGTnVtYmVySW50VHlwZSwgJndpZHRoKTsKKyAgICAgICAga2V5c1sxXSA9IGtJ
T1N1cmZhY2VIZWlnaHQ7CisgICAgICAgIHZhbHVlc1sxXSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtD
Rk51bWJlckludFR5cGUsICZoZWlnaHQpOworICAgICAgICBrZXlzWzJdID0ga0lPU3VyZmFjZVBp
eGVsRm9ybWF0OworICAgICAgICB2YWx1ZXNbMl0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1i
ZXJJbnRUeXBlLCAmcGl4ZWxGb3JtYXQpOworICAgICAgICBrZXlzWzNdID0ga0lPU3VyZmFjZUJ5
dGVzUGVyRWxlbWVudDsKKyAgICAgICAgdmFsdWVzWzNdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NG
TnVtYmVySW50VHlwZSwgJmJ5dGVzUGVyRWxlbWVudCk7CisgICAgICAgIGtleXNbNF0gPSBrSU9T
dXJmYWNlQnl0ZXNQZXJSb3c7CisgICAgICAgIHZhbHVlc1s0XSA9IENGTnVtYmVyQ3JlYXRlKDAs
IGtDRk51bWJlckxvbmdUeXBlLCAmYnl0ZXNQZXJSb3cpOworICAgICAgICBrZXlzWzVdID0ga0lP
U3VyZmFjZUFsbG9jU2l6ZTsKKyAgICAgICAgdmFsdWVzWzVdID0gQ0ZOdW1iZXJDcmVhdGUoMCwg
a0NGTnVtYmVyTG9uZ1R5cGUsICZhbGxvY1NpemUpOworICAgICAgICBrZXlzWzZdID0ga0lPU3Vy
ZmFjZUlzR2xvYmFsOworICAgICAgICB2YWx1ZXNbNl0gPSAoZmxhZ3MgJiBHcmFwaGljc1N1cmZh
Y2U6OlN1cHBvcnRzU2hhcmluZykgPyBrQ0ZCb29sZWFuVHJ1ZSA6IGtDRkJvb2xlYW5GYWxzZTsK
KworICAgICAgICBDRkRpY3Rpb25hcnlSZWYgZGljdCA9IENGRGljdGlvbmFyeUNyZWF0ZSgwLCBr
ZXlzLCB2YWx1ZXMsIDcsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVE
aWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgNzsgaSsrKQorICAgICAgICAgICAgQ0ZSZWxlYXNlKHZhbHVlc1tpXSk7CisKKyAgICAgICAg
bV9mcm9udEJ1ZmZlciA9IElPU3VyZmFjZUNyZWF0ZShkaWN0KTsKKyAgICAgICAgbV9iYWNrQnVm
ZmVyID0gSU9TdXJmYWNlQ3JlYXRlKGRpY3QpOworCisgICAgICAgIHVpbnQ2NF90IHRva2VuID0g
SU9TdXJmYWNlR2V0SUQobV9mcm9udEJ1ZmZlcik7CisgICAgICAgIHRva2VuIDw8PSAzMjsKKyAg
ICAgICAgdG9rZW4gfD0gSU9TdXJmYWNlR2V0SUQobV9iYWNrQnVmZmVyKTsKKworICAgICAgICBt
X3Rva2VuID0gdG9rZW47CisgICAgfQorCisgICAgfkdyYXBoaWNzU3VyZmFjZVByaXZhdGUoKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fZnJvbnRCdWZmZXJUZXh0dXJlKQorICAgICAgICAgICAgZ2xE
ZWxldGVUZXh0dXJlcygxLCAmbV9mcm9udEJ1ZmZlclRleHR1cmUpOworCisgICAgICAgIGlmICht
X2JhY2tCdWZmZXJUZXh0dXJlKQorICAgICAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9i
YWNrQnVmZmVyVGV4dHVyZSk7CisKKyAgICAgICAgaWYgKG1fZnJvbnRCdWZmZXIpCisgICAgICAg
ICAgICBDRlJlbGVhc2UoSU9TdXJmYWNlUmVmKG1fZnJvbnRCdWZmZXIpKTsKKworICAgICAgICBp
ZiAobV9iYWNrQnVmZmVyKQorICAgICAgICAgICAgQ0ZSZWxlYXNlKElPU3VyZmFjZVJlZihtX2Jh
Y2tCdWZmZXIpKTsKKyAgICB9CisKKyAgICB1aW50MzJfdCBzd2FwQnVmZmVycygpCisgICAgewor
ICAgICAgICBzdGQ6OnN3YXAobV9mcm9udEJ1ZmZlciwgbV9iYWNrQnVmZmVyKTsKKyAgICAgICAg
c3RkOjpzd2FwKG1fZnJvbnRCdWZmZXJUZXh0dXJlLCBtX2JhY2tCdWZmZXJUZXh0dXJlKTsKKwor
ICAgICAgICByZXR1cm4gSU9TdXJmYWNlR2V0SUQobV9mcm9udEJ1ZmZlcik7CisgICAgfQorCisg
ICAgdWludDY0X3QgdG9rZW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdG9rZW47
CisgICAgfQorCisgICAgdWludDMyX3QgZnJvbnRCdWZmZXJUZXh0dXJlSUQoKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX2Zyb250QnVmZmVyVGV4dHVyZSkKKyAgICAgICAgICAgIG1fZnJvbnRCdWZm
ZXJUZXh0dXJlID0gY3JlYXRlVGV4dHVyZShtX2Zyb250QnVmZmVyKTsKKworICAgICAgICByZXR1
cm4gbV9mcm9udEJ1ZmZlclRleHR1cmU7CisgICAgfQorCisgICAgdWludDMyX3QgYmFja0J1ZmZl
clRleHR1cmVJRCgpCisgICAgeworICAgICAgICBpZiAoIW1fYmFja0J1ZmZlclRleHR1cmUpCisg
ICAgICAgICAgICBtX2JhY2tCdWZmZXJUZXh0dXJlID0gY3JlYXRlVGV4dHVyZShtX2JhY2tCdWZm
ZXIpOworCisgICAgICAgIHJldHVybiBtX2JhY2tCdWZmZXJUZXh0dXJlOworICAgIH0KKworICAg
IFBsYXRmb3JtR3JhcGhpY3NTdXJmYWNlIGZyb250QnVmZmVyKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2Zyb250QnVmZmVyOworICAgIH0KKworICAgIFBsYXRmb3JtR3JhcGhpY3NT
dXJmYWNlIGJhY2tCdWZmZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmFja0J1
ZmZlcjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUGxhdGZvcm1HcmFwaGljc1N1cmZhY2UgbV9m
cm9udEJ1ZmZlcjsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzU3VyZmFjZSBtX2JhY2tCdWZmZXI7Cisg
ICAgdWludDMyX3QgbV9mcm9udEJ1ZmZlclRleHR1cmU7CisgICAgdWludDMyX3QgbV9iYWNrQnVm
ZmVyVGV4dHVyZTsKKyAgICB1aW50NjRfdCBtX3Rva2VuOworfTsKKwordWludDY0X3QgR3JhcGhp
Y3NTdXJmYWNlOjpwbGF0Zm9ybUV4cG9ydCgpCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+dG9r
ZW4oKTsKK30KKwogdWludDMyX3QgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUdldFRleHR1cmVJ
RCgpCiB7Ci0gICAgaWYgKCFtX3RleHR1cmUpCi0gICAgICAgIG1fdGV4dHVyZSA9IGNyZWF0ZVRl
eHR1cmUobV9wbGF0Zm9ybVN1cmZhY2UpOwotICAgIHJldHVybiBtX3RleHR1cmU7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+ZnJvbnRCdWZmZXJUZXh0dXJlSUQoKTsKIH0KIAogdm9pZCBHcmFwaGlj
c1N1cmZhY2U6OnBsYXRmb3JtQ29weVRvR0xUZXh0dXJlKHVpbnQzMl90IHRhcmdldCwgdWludDMy
X3QgaWQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFBvaW50JiBvZmZzZXQp
CiB7CiAgICAgZ2xQdXNoQXR0cmliKEdMX0FMTF9BVFRSSUJfQklUUyk7Ci0gICAgaWYgKCFtX3Rl
eHR1cmUpCi0gICAgICAgIG1fdGV4dHVyZSA9IGNyZWF0ZVRleHR1cmUobV9wbGF0Zm9ybVN1cmZh
Y2UpOwogICAgIGlmICghbV9mYm8pCiAgICAgICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2Zi
byk7CiAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIDApOwpAQCAt
ODUsNyArMjA3LDcgQEAgdm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29weVRvR0xUZXh0
dXJlKHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgaWQsIGNvbnMKICAgICBnbEVuYWJsZSh0YXJn
ZXQpOwogICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCBpZCk7CiAgICAgZ2xCaW5kRnJhbWVidWZm
ZXIoR0xfUkVBRF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJl
MkQoR0xfUkVBRF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVf
UkVDVEFOR0xFX0FSQiwgbV90ZXh0dXJlLCAwKTsKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJE
KEdMX1JFQURfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFX1JF
Q1RBTkdMRV9BUkIsIG1fcHJpdmF0ZS0+ZnJvbnRCdWZmZXJUZXh0dXJlSUQoKSwgMCk7CiAgICAg
Z2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIDAsIHRhcmdldFJlY3QueCgpLCB0YXJnZXRSZWN0
LnkoKSwgb2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRS
ZWN0LmhlaWdodCgpKTsKICAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX1JFQURfRlJBTUVC
VUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIDAs
IDApOwogICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJBTUVCVUZGRVIsIDApOwpAQCAt
MTAxLDE2ICsyMjMsMTUgQEAgdm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29weVRvR0xU
ZXh0dXJlKHVpbnQzMl90IHRhcmdldCwgdWludDMyX3QgaWQsIGNvbnMKIHZvaWQgR3JhcGhpY3NT
dXJmYWNlOjpwbGF0Zm9ybUNvcHlGcm9tRnJhbWVidWZmZXIodWludDMyX3Qgb3JpZ2luRmJvLCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KQogewogICAgIGdsUHVzaEF0dHJpYihHTF9BTExfQVRU
UklCX0JJVFMpOwotICAgIGlmICghbV90ZXh0dXJlKQotICAgICAgICBtX3RleHR1cmUgPSBjcmVh
dGVUZXh0dXJlKG1fcGxhdGZvcm1TdXJmYWNlKTsKICAgICBpZiAoIW1fZmJvKQogICAgICAgICBn
bEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworCiAgICAgR0xpbnQgb2xkRkJPOwogICAgIGds
R2V0SW50ZWdlcnYoR0xfRlJBTUVCVUZGRVJfQklORElORywgJm9sZEZCTyk7CiAgICAgZ2xFbmFi
bGUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCKTsKICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9S
RUFEX0ZSQU1FQlVGRkVSLCBvcmlnaW5GYm8pOwogICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0RS
QVdfRlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0RS
QVdfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFX1JFQ1RBTkdM
RV9BUkIsIG1fdGV4dHVyZSwgMCk7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9EUkFX
X0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV9SRUNUQU5HTEVf
QVJCLCBtX3ByaXZhdGUtPmJhY2tCdWZmZXJUZXh0dXJlSUQoKSwgMCk7CiAgICAgZ2xCbGl0RnJh
bWVidWZmZXIoMCwgMCwgc291cmNlUmVjdC53aWR0aCgpLCBzb3VyY2VSZWN0LmhlaWdodCgpLCAw
LCBzb3VyY2VSZWN0LmhlaWdodCgpLCBzb3VyY2VSZWN0LndpZHRoKCksIDAsIEdMX0NPTE9SX0JV
RkZFUl9CSVQsIEdMX0xJTkVBUik7IC8vIEZsaXAgdGhlIHRleHR1cmUgdXBzaWRlIGRvd24uCiAg
ICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9EUkFXX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9B
VFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCAwLCAwKTsKICAgICBnbEJpbmRG
cmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgb2xkRkJPKTsKQEAgLTEyMCw2NyArMjQxLDQ3IEBA
IHZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlGcm9tRnJhbWVidWZmZXIodWludDMy
X3Qgb3JpZ2luRmJvLCBjb25zdCBJbnRSCiAgICAgZ2xGbHVzaCgpOwogfQogCit1aW50MzJfdCBH
cmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRnJvbnRCdWZmZXIoKSBjb25zdAoreworICAgIHJldHVy
biBJT1N1cmZhY2VHZXRJRChtX3ByaXZhdGUtPmZyb250QnVmZmVyKCkpOworfQorCit1aW50MzJf
dCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtU3dhcEJ1ZmZlcnMoKQoreworICAgIHJldHVybiBt
X3ByaXZhdGUtPnN3YXBCdWZmZXJzKCk7Cit9CisKIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNl
PiBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEZs
YWdzIGZsYWdzKQogewogICAgIC8vIFdlIGN1cnJlbnRseSBkaXNhYmxlIHN1cHBvcnQgZm9yIENv
cHlUb1RleHR1cmUgb24gTWFjLCBiZWNhdXNlIHRoaXMgaXMgdXNlZCBmb3Igc2luZ2xlIGJ1ZmZl
cmVkIFRpbGVzLgogICAgIC8vIFRoZSBzaW5nbGUgYnVmZmVyZWQgbmF0dXJlIG9mIHRoaXMgcmVx
dWlyZXMgYSBjYWxsIHRvIGdsRmx1c2gsIGFzIGRlc2NyaWJlZCBpbiBwbGF0Zm9ybUNvcHlUb1Rl
eHR1cmUuCiAgICAgLy8gVGhpcyBjYWxsIGJsb2NrcyB0aGUgR1BVIGZvciBhYm91dCA0MG1zLCB3
aGljaCBtYWtlcyBzbW9vdGggYW5pbWF0aW9ucyBpbXBvc3NpYmxlLgotICAgIGlmIChmbGFncyAm
IFN1cHBvcnRzQ29weVRvVGV4dHVyZSkKKyAgICBpZiAoZmxhZ3MgJiBTdXBwb3J0c0NvcHlUb1Rl
eHR1cmUgfHwgZmxhZ3MgJiBTdXBwb3J0c1NpbmdsZUJ1ZmZlcmVkKQogICAgICAgICByZXR1cm4g
UGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CiAKLSAgICB1bnNpZ25lZCBwaXhlbEZvcm1h
dCA9ICdCR1JBJzsKLSAgICB1bnNpZ25lZCBieXRlc1BlckVsZW1lbnQgPSA0OwotICAgIGludCB3
aWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKLQot
ICAgIHVuc2lnbmVkIGxvbmcgYnl0ZXNQZXJSb3cgPSBJT1N1cmZhY2VBbGlnblByb3BlcnR5KGtJ
T1N1cmZhY2VCeXRlc1BlclJvdywgd2lkdGggKiBieXRlc1BlckVsZW1lbnQpOwotICAgIGlmICgh
Ynl0ZXNQZXJSb3cpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIGxvbmcg
YWxsb2NTaXplID0gSU9TdXJmYWNlQWxpZ25Qcm9wZXJ0eShrSU9TdXJmYWNlQWxsb2NTaXplLCBo
ZWlnaHQgKiBieXRlc1BlclJvdyk7Ci0gICAgaWYgKCFhbGxvY1NpemUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGNvbnN0IHZvaWQgKmtleXNbN107Ci0gICAgY29uc3Qgdm9pZCAqdmFs
dWVzWzddOwotICAgIGtleXNbMF0gPSBrSU9TdXJmYWNlV2lkdGg7Ci0gICAgdmFsdWVzWzBdID0g
Q0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVySW50VHlwZSwgJndpZHRoKTsKLSAgICBrZXlzWzFd
ID0ga0lPU3VyZmFjZUhlaWdodDsKLSAgICB2YWx1ZXNbMV0gPSBDRk51bWJlckNyZWF0ZSgwLCBr
Q0ZOdW1iZXJJbnRUeXBlLCAmaGVpZ2h0KTsKLSAgICBrZXlzWzJdID0ga0lPU3VyZmFjZVBpeGVs
Rm9ybWF0OwotICAgIHZhbHVlc1syXSA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckludFR5
cGUsICZwaXhlbEZvcm1hdCk7Ci0gICAga2V5c1szXSA9IGtJT1N1cmZhY2VCeXRlc1BlckVsZW1l
bnQ7Ci0gICAgdmFsdWVzWzNdID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVySW50VHlwZSwg
JmJ5dGVzUGVyRWxlbWVudCk7Ci0gICAga2V5c1s0XSA9IGtJT1N1cmZhY2VCeXRlc1BlclJvdzsK
LSAgICB2YWx1ZXNbNF0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJMb25nVHlwZSwgJmJ5
dGVzUGVyUm93KTsKLSAgICBrZXlzWzVdID0ga0lPU3VyZmFjZUFsbG9jU2l6ZTsKLSAgICB2YWx1
ZXNbNV0gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJMb25nVHlwZSwgJmFsbG9jU2l6ZSk7
Ci0gICAga2V5c1s2XSA9IGtJT1N1cmZhY2VJc0dsb2JhbDsKLSAgICB2YWx1ZXNbNl0gPSAoZmxh
Z3MgJiBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZykgPyBrQ0ZCb29sZWFuVHJ1ZSA6
IGtDRkJvb2xlYW5GYWxzZTsKLQotICAgIENGRGljdGlvbmFyeVJlZiBkaWN0ID0gQ0ZEaWN0aW9u
YXJ5Q3JlYXRlKDAsIGtleXMsIHZhbHVlcywgNywgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJh
Y2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDc7IGkrKykKLSAgICAgICAgQ0ZSZWxlYXNlKHZhbHVlc1tpXSk7Ci0KICAg
ICBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRSZWYobmV3IEdyYXBoaWNz
U3VyZmFjZShzaXplLCBmbGFncykpOwotICAgIHN1cmZhY2UtPm1fcGxhdGZvcm1TdXJmYWNlID0g
SU9TdXJmYWNlQ3JlYXRlKGRpY3QpOwotICAgIGlmICghc3VyZmFjZS0+bV9wbGF0Zm9ybVN1cmZh
Y2UpCisgICAgc3VyZmFjZS0+bV9wcml2YXRlID0gbmV3IEdyYXBoaWNzU3VyZmFjZVByaXZhdGUo
c2l6ZSwgZmxhZ3MpOworCisgICAgaWYgKCFzdXJmYWNlLT5tX3ByaXZhdGUtPmZyb250QnVmZmVy
KCkgfHwgIXN1cmZhY2UtPm1fcHJpdmF0ZS0+YmFja0J1ZmZlcigpKQogICAgICAgICByZXR1cm4g
UGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7CisKICAgICByZXR1cm4gc3VyZmFjZTsKIH0K
IAotUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1J
bXBvcnQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MsIHVpbnQzMl90IHRva2VuKQor
UGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1JbXBv
cnQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MsIHVpbnQ2NF90IHRva2VuKQogewog
ICAgIC8vIFdlIGN1cnJlbnRseSBkaXNhYmxlIHN1cHBvcnQgZm9yIENvcHlUb1RleHR1cmUgb24g
TWFjLCBiZWNhdXNlIHRoaXMgaXMgdXNlZCBmb3Igc2luZ2xlIGJ1ZmZlcmVkIFRpbGVzLgogICAg
IC8vIFRoZSBzaW5nbGUgYnVmZmVyZWQgbmF0dXJlIG9mIHRoaXMgcmVxdWlyZXMgYSBjYWxsIHRv
IGdsRmx1c2gsIGFzIGRlc2NyaWJlZCBpbiBwbGF0Zm9ybUNvcHlUb1RleHR1cmUuCiAgICAgLy8g
VGhpcyBjYWxsIGJsb2NrcyB0aGUgR1BVIGZvciBhYm91dCA0MG1zLCB3aGljaCBtYWtlcyBzbW9v
dGggYW5pbWF0aW9ucyBpbXBvc3NpYmxlLgotICAgIGlmIChmbGFncyAmIFN1cHBvcnRzQ29weVRv
VGV4dHVyZSkKKyAgICBpZiAoZmxhZ3MgJiBTdXBwb3J0c0NvcHlUb1RleHR1cmUgfHwgZmxhZ3Mg
JiBTdXBwb3J0c1NpbmdsZUJ1ZmZlcmVkKQogICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxHcmFw
aGljc1N1cmZhY2U+KCk7CiAKICAgICBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlID0g
YWRvcHRSZWYobmV3IEdyYXBoaWNzU3VyZmFjZShzaXplLCBmbGFncykpOwotICAgIHN1cmZhY2Ut
Pm1fcGxhdGZvcm1TdXJmYWNlID0gSU9TdXJmYWNlTG9va3VwKHRva2VuKTsKLSAgICBpZiAoIXN1
cmZhY2UtPm1fcGxhdGZvcm1TdXJmYWNlKQorICAgIHN1cmZhY2UtPm1fcHJpdmF0ZSA9IG5ldyBH
cmFwaGljc1N1cmZhY2VQcml2YXRlKHRva2VuKTsKKworICAgIGlmICghc3VyZmFjZS0+bV9wcml2
YXRlLT5mcm9udEJ1ZmZlcigpIHx8ICFzdXJmYWNlLT5tX3ByaXZhdGUtPmJhY2tCdWZmZXIoKSkK
ICAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPigpOworCiAgICAgcmV0
dXJuIHN1cmZhY2U7CiB9CiAKQEAgLTE5MSwzOCArMjkyLDQyIEBAIHN0YXRpYyBpbnQgaW9TdXJm
YWNlTG9ja09wdGlvbnMoaW50IGxvY2tPcHRpb25zKQogICAgICAgICBvcHRpb25zIHw9IGtJT1N1
cmZhY2VMb2NrUmVhZE9ubHk7CiAgICAgaWYgKCEobG9ja09wdGlvbnMgJiBHcmFwaGljc1N1cmZh
Y2U6OlJldGFpblBpeGVscykpCiAgICAgICAgIG9wdGlvbnMgfD0ga0lPU3VyZmFjZUxvY2tBdm9p
ZFN5bmM7CisKICAgICByZXR1cm4gb3B0aW9uczsKIH0KIAogY2hhciogR3JhcGhpY3NTdXJmYWNl
OjpwbGF0Zm9ybUxvY2soY29uc3QgSW50UmVjdCYgcmVjdCwgaW50KiBvdXRwdXRTdHJpZGUsIExv
Y2tPcHRpb25zIGxvY2tPcHRpb25zKQogeworICAgIC8vIExvY2tpbmcgaXMgb25seSBuZWNlc3Nh
cnkgZm9yIHNpbmdsZSBidWZmZXJlZCB1c2UuCisgICAgLy8gSW4gdGhpcyBjYXNlIHdlIG9ubHkg
aGF2ZSBhIGZyb250IGJ1ZmZlciwgc28gd2Ugb25seSBsb2NrIHRoaXMgb25lLgogICAgIG1fbG9j
a09wdGlvbnMgPSBsb2NrT3B0aW9uczsKLSAgICBJT1JldHVybiBzdGF0dXMgPSBJT1N1cmZhY2VM
b2NrKG1fcGxhdGZvcm1TdXJmYWNlLCBpb1N1cmZhY2VMb2NrT3B0aW9ucyhtX2xvY2tPcHRpb25z
KSwgMCk7CisgICAgSU9SZXR1cm4gc3RhdHVzID0gSU9TdXJmYWNlTG9jayhtX3ByaXZhdGUtPmZy
b250QnVmZmVyKCksIGlvU3VyZmFjZUxvY2tPcHRpb25zKG1fbG9ja09wdGlvbnMpLCAwKTsKICAg
ICBpZiAoc3RhdHVzID09IGtJT1JldHVybkNhbm5vdExvY2spIHsKICAgICAgICAgbV9sb2NrT3B0
aW9ucyB8PSBSZXRhaW5QaXhlbHM7Ci0gICAgICAgIElPU3VyZmFjZUxvY2sobV9wbGF0Zm9ybVN1
cmZhY2UsIGlvU3VyZmFjZUxvY2tPcHRpb25zKG1fbG9ja09wdGlvbnMpLCAwKTsKKyAgICAgICAg
SU9TdXJmYWNlTG9jayhtX3ByaXZhdGUtPmZyb250QnVmZmVyKCksIGlvU3VyZmFjZUxvY2tPcHRp
b25zKG1fbG9ja09wdGlvbnMpLCAwKTsKICAgICB9CiAKLSAgICBpbnQgc3RyaWRlID0gSU9TdXJm
YWNlR2V0Qnl0ZXNQZXJSb3cobV9wbGF0Zm9ybVN1cmZhY2UpOworICAgIGludCBzdHJpZGUgPSBJ
T1N1cmZhY2VHZXRCeXRlc1BlclJvdyhtX3ByaXZhdGUtPmZyb250QnVmZmVyKCkpOwogICAgIGlm
IChvdXRwdXRTdHJpZGUpCiAgICAgICAgICpvdXRwdXRTdHJpZGUgPSBzdHJpZGU7CiAKLSAgICBj
aGFyKiBiYXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KElPU3VyZmFjZUdldEJhc2VBZGRyZXNzKG1f
cGxhdGZvcm1TdXJmYWNlKSk7CisgICAgY2hhciogYmFzZSA9IHN0YXRpY19jYXN0PGNoYXIqPihJ
T1N1cmZhY2VHZXRCYXNlQWRkcmVzcyhtX3ByaXZhdGUtPmZyb250QnVmZmVyKCkpKTsKKwogICAg
IHJldHVybiBiYXNlICsgc3RyaWRlICogcmVjdC55KCkgKyByZWN0LngoKSAqIDQ7CiB9CiAKIHZv
aWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybVVubG9jaygpCiB7Ci0gICAgSU9TdXJmYWNlVW5s
b2NrKG1fcGxhdGZvcm1TdXJmYWNlLCBpb1N1cmZhY2VMb2NrT3B0aW9ucyhtX2xvY2tPcHRpb25z
KSwgMCk7CisgICAgSU9TdXJmYWNlVW5sb2NrKG1fcHJpdmF0ZS0+ZnJvbnRCdWZmZXIoKSwgaW9T
dXJmYWNlTG9ja09wdGlvbnMobV9sb2NrT3B0aW9ucyksIDApOwogfQogCiB2b2lkIEdyYXBoaWNz
U3VyZmFjZTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKICAgICBpZiAobV9mYm8pCiAgICAgICAgIGds
RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0gICAgaWYgKG1fdGV4dHVyZSkKLSAgICAg
ICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICBDRlJlbGVhc2UoSU9TdXJm
YWNlUmVmKG1fcGxhdGZvcm1TdXJmYWNlKSk7CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAg
ZGVsZXRlIG1fcHJpdmF0ZTsKKyAgICBtX3ByaXZhdGUgPSAwOwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9xdC9HcmFwaGljc1N1
cmZhY2VHTFguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
cXQvR3JhcGhpY3NTdXJmYWNlR0xYLmNwcAppbmRleCBhZmMzYTg0Li5lYWJiNTI5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9xdC9HcmFwaGlj
c1N1cmZhY2VHTFguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL3F0L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKQEAgLTYwLDYgKzYwLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgWENoYW5nZVdpbmRvd0F0dHJpYnV0ZXMoZHB5LCB3aW5kb3ctPmhhbmRs
ZSgpLT53aW5JZCgpLCBYMTFPdmVycmlkZVJlZGlyZWN0LCAmYXR0cmlidXRlcyk7CiAgICAgICAg
ICAgICB3aW5kb3ctPnNob3coKTsKICAgICAgICAgfQorCiAgICAgICAgIHJldHVybiB3aW5kb3c7
CiAgICAgfQogCkBAIC0xNzMsNiArMTc0LDEyIEBAIHN0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2
YXRlIHsKIAogICAgIHZvaWQgc3dhcEJ1ZmZlcnMoKQogICAgIHsKKyAgICAgICAgLy8gSWYgdGhl
cmUgaXMgYSB4cGl4bWFwLCB3ZSBhcmUgb24gdGhlIHJlYWRpbmcgc2lkZSBhbmQgZG8gbm90IHdh
bnQgdG8gc3dhcCBhbnkgYnVmZmVycy4KKyAgICAgICAgLy8gVGhlIGJ1ZmZlcnMgYXJlIGJlaW5n
IHN3aXRjaGVkIG9uIHRoZSB3cml0aW5nIHNpZGUsIHRoZSByZWFkaW5nIHNpZGUganVzdCByZWFk
cworICAgICAgICAvLyB3aGF0ZXZlciB0ZXh0dXJlIHRoZSBYV2luZG93IGNvbnRhaW5zLgorICAg
ICAgICBpZiAobV94UGl4bWFwKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIGlmICgh
bV9zdXJmYWNlLT5pc1Zpc2libGUoKSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMTgyLDgg
KzE4OSwxMyBAQCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAgICAgICAgICAgICBR
Q29yZUFwcGxpY2F0aW9uOjpwcm9jZXNzRXZlbnRzKCk7CiAKICAgICAgICAgUU9wZW5HTENvbnRl
eHQqIGdsQ29udGV4dCA9IFFPcGVuR0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgpOwotICAgICAg
ICBpZiAobV9zdXJmYWNlICYmIGdsQ29udGV4dCkKKyAgICAgICAgaWYgKG1fc3VyZmFjZSAmJiBn
bENvbnRleHQpIHsKKyAgICAgICAgICAgIEdMaW50IG9sZEZCTzsKKyAgICAgICAgICAgIGdsR2V0
SW50ZWdlcnYoR0xfRlJBTUVCVUZGRVJfQklORElORywgJm9sZEZCTyk7CisgICAgICAgICAgICBw
R2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGdsQ29udGV4dC0+ZGVmYXVsdEZyYW1l
YnVmZmVyT2JqZWN0KCkpOwogICAgICAgICAgICAgZ2xDb250ZXh0LT5zd2FwQnVmZmVycyhtX3N1
cmZhY2UuZ2V0KCkpOworICAgICAgICAgICAgcEdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVG
RkVSLCBvbGRGQk8pOworICAgICAgICB9CiAgICAgfQogCiAKQEAgLTIyNCwyMiArMjM2LDIyIEBA
IHN0YXRpYyBib29sIHJlc29sdmVHTE1ldGhvZHMoR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSogcCkK
ICAgICByZXR1cm4gcmVzb2x2ZWQ7CiB9CiAKLXVpbnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6cGxh
dGZvcm1FeHBvcnQoKQordWludDY0X3QgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUV4cG9ydCgp
CiB7CiAgICAgcmV0dXJuIG1fcGxhdGZvcm1TdXJmYWNlOwogfQogCiB1aW50MzJfdCBHcmFwaGlj
c1N1cmZhY2U6OnBsYXRmb3JtR2V0VGV4dHVyZUlEKCkKIHsKLSAgICBpZiAoIW1fdGV4dHVyZSkK
KyAgICBpZiAoIW1fdGV4dHVyZSkgewogICAgICAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1
cmUpOwotCi0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAg
IGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdM
X0xJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
TUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7
Ci0gICAgcEdsWEJpbmRUZXhJbWFnZUVYVChtX3ByaXZhdGUtPmRpc3BsYXkoKSwgbV9wcml2YXRl
LT5nbHhQaXhtYXAoKSwgR0xYX0ZST05UX0VYVCwgMCk7CisgICAgICAgIGdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2xU
ZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElO
RUFSKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
V1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAg
cEdsWEJpbmRUZXhJbWFnZUVYVChtX3ByaXZhdGUtPmRpc3BsYXkoKSwgbV9wcml2YXRlLT5nbHhQ
aXhtYXAoKSwgR0xYX0ZST05UX0VYVCwgMCk7CisgICAgfQogCiAgICAgcmV0dXJuIG1fdGV4dHVy
ZTsKIH0KQEAgLTI2MywxNCArMjc1LDI1IEBAIHZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9y
bUNvcHlGcm9tRnJhbWVidWZmZXIodWludDMyX3Qgb3JpZ2luRmJvLCBjb25zdCBJbnRSCiAgICAg
cEdsQmxpdEZyYW1lYnVmZmVyKDAsIDAsIHdpZHRoLCBoZWlnaHQsIDAsIDAsIHdpZHRoLCBoZWln
aHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CiAgICAgcEdsQmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBvbGRGQk8pOwogICAgIGdsUG9wQXR0cmliKCk7Cit9CiAKK3Vp
bnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Gcm9udEJ1ZmZlcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3VpbnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Td2Fw
QnVmZmVycygpCit7CiAgICAgbV9wcml2YXRlLT5zd2FwQnVmZmVycygpOworICAgIHJldHVybiAw
OwogfQogCiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gR3JhcGhpY3NTdXJmYWNlOjpwbGF0
Zm9ybUNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncykKIHsKICAgICAvLyBY
MTEgZG9lcyBub3Qgc3VwcG9ydCBDb3B5VG9UZXh0dXJlLCBzbyB3ZSBkbyBub3QgY3JlYXRlIGEg
R3JhcGhpY3NTdXJmYWNlIGlmIHRoaXMgaXMgcmVxdWVzdGVkLgotICAgIGlmIChmbGFncyAmIFN1
cHBvcnRzQ29weVRvVGV4dHVyZSkKKyAgICAvLyBHcmFwaGljc1N1cmZhY2VHTFggdXNlcyBhbiBY
V2luZG93IGFzIG5hdGl2ZSBzdXJmYWNlLiBUaGlzIG9uZSBhbHdheXMgaGFzIGEgZnJvbnQgYW5k
IGEgYmFjayBidWZmZXIuCisgICAgLy8gVGhlcmVmb3JlIHNpbmdsZSBidWZmZXJlZCBHcmFwaGlj
c1N1cmZhY2VzIGFyZSBub3Qgc3VwcG9ydGVkLgorICAgIGlmIChmbGFncyAmIFN1cHBvcnRzQ29w
eVRvVGV4dHVyZSB8fCBmbGFncyAmIFN1cHBvcnRzU2luZ2xlQnVmZmVyZWQpCiAgICAgICAgIHJl
dHVybiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4oKTsKIAogICAgIFJlZlB0cjxHcmFwaGlj
c1N1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NTdXJmYWNlKHNpemUsIGZs
YWdzKSk7CkBAIC0yODQsMTAgKzMwNywxMiBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4g
R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLAogICAg
IHJldHVybiBzdXJmYWNlOwogfQogCi1QYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gR3JhcGhp
Y3NTdXJmYWNlOjpwbGF0Zm9ybUltcG9ydChjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFn
cywgdWludDMyX3QgdG9rZW4pCitQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gR3JhcGhpY3NT
dXJmYWNlOjpwbGF0Zm9ybUltcG9ydChjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncywg
dWludDY0X3QgdG9rZW4pCiB7CiAgICAgLy8gWDExIGRvZXMgbm90IHN1cHBvcnQgQ29weVRvVGV4
dHVyZSwgc28gd2UgZG8gbm90IGNyZWF0ZSBhIEdyYXBoaWNzU3VyZmFjZSBpZiB0aGlzIGlzIHJl
cXVlc3RlZC4KLSAgICBpZiAoZmxhZ3MgJiBTdXBwb3J0c0NvcHlUb1RleHR1cmUpCisgICAgLy8g
R3JhcGhpY3NTdXJmYWNlR0xYIHVzZXMgYW4gWFdpbmRvdyBhcyBuYXRpdmUgc3VyZmFjZS4gVGhp
cyBvbmUgYWx3YXlzIGhhcyBhIGZyb250IGFuZCBhIGJhY2sgYnVmZmVyLgorICAgIC8vIFRoZXJl
Zm9yZSBzaW5nbGUgYnVmZmVyZWQgR3JhcGhpY3NTdXJmYWNlcyBhcmUgbm90IHN1cHBvcnRlZC4K
KyAgICBpZiAoZmxhZ3MgJiBTdXBwb3J0c0NvcHlUb1RleHR1cmUgfHwgZmxhZ3MgJiBTdXBwb3J0
c1NpbmdsZUJ1ZmZlcmVkKQogICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZh
Y2U+KCk7CiAKICAgICBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRSZWYo
bmV3IEdyYXBoaWNzU3VyZmFjZShzaXplLCBmbGFncykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDhkNjBjN2IuLjZkNmYxYzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2lu
Z1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAKQEAgLTM0LDE2ICszNCwxOSBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi12b2lkIFRleHR1cmVN
YXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlOjpzZXRHcmFwaGljc1N1cmZhY2UodWludDMyX3QgZ3Jh
cGhpY3NTdXJmYWNlVG9rZW4sIGNvbnN0IEludFNpemUmIHN1cmZhY2VTaXplKQordm9pZCBUZXh0
dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6c2V0R3JhcGhpY3NTdXJmYWNlKHVpbnQ2NF90
IGdyYXBoaWNzU3VyZmFjZVRva2VuLCBjb25zdCBJbnRTaXplJiBzdXJmYWNlU2l6ZSwgdWludDMy
X3QgZnJvbnRCdWZmZXIpCiB7Ci0gICAgaWYgKGdyYXBoaWNzU3VyZmFjZVRva2VuICE9IG1fYmFj
a0J1ZmZlckdyYXBoaWNzU3VyZmFjZURhdGEubV9ncmFwaGljc1N1cmZhY2VUb2tlbikgeworICAg
IGlmIChncmFwaGljc1N1cmZhY2VUb2tlbiAhPSBtX2dyYXBoaWNzU3VyZmFjZVRva2VuKSB7CiAg
ICAgICAgIEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3Mgc3VyZmFjZUZsYWdzID0gR3JhcGhpY3NTdXJm
YWNlOjpTdXBwb3J0c1RleHR1cmVUYXJnZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZzsKLSAgICAg
ICAgbV9iYWNrQnVmZmVyR3JhcGhpY3NTdXJmYWNlRGF0YS5zZXRTdXJmYWNlKEdyYXBoaWNzU3Vy
ZmFjZTo6Y3JlYXRlKHN1cmZhY2VTaXplLCBzdXJmYWNlRmxhZ3MsIGdyYXBoaWNzU3VyZmFjZVRv
a2VuKSk7CisgICAgICAgIHNldFN1cmZhY2UoR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoc3VyZmFj
ZVNpemUsIHN1cmZhY2VGbGFncywgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pKTsKICAgICAgICAgbV9n
cmFwaGljc1N1cmZhY2VTaXplID0gc3VyZmFjZVNpemU7CiAgICAgfQogCi0gICAgc3RkOjpzd2Fw
KG1fYmFja0J1ZmZlckdyYXBoaWNzU3VyZmFjZURhdGEsIG1fZnJvbnRCdWZmZXJHcmFwaGljc1N1
cmZhY2VEYXRhKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNl
ID0gZ3JhcGhpY3NTdXJmYWNlKCk7CisgICAgaWYgKHN1cmZhY2UtPmZyb250QnVmZmVyKCkgIT0g
ZnJvbnRCdWZmZXIpCisgICAgICAgIHN1cmZhY2UtPnN3YXBCdWZmZXJzKCk7CisKIH0KIAogUGFz
c1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6
dGV4dHVyZSgpIGNvbnN0CkBAIC01OSwxMyArNjIsMjIgQEAgdm9pZCBUZXh0dXJlTWFwcGVyU3Vy
ZmFjZUJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4
dHUKICAgICBhZGp1c3RlZFRyYW5zZm9ybS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
cmVjdFRvUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBtX2dyYXBoaWNzU3VyZmFj
ZVNpemUpLCB0YXJnZXRSZWN0KSk7CiAjaWYgT1MoREFSV0lOKQogICAgIC8vIFRoaXMgaXMgc3Bl
Y2lmaWMgdG8gdGhlIE1hYyBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc1N1cmZhY2UuIElPU3Vy
ZmFjZSByZXF1aXJlcyBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIgdG8gYmUgdXNlZC4KLSAgICBz
dGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPih0ZXh0dXJlTWFwcGVyKS0+ZHJhd1RleHR1cmVS
ZWN0YW5nbGVBUkIobV9mcm9udEJ1ZmZlckdyYXBoaWNzU3VyZmFjZURhdGEubV90ZXh0dXJlSUQs
IDAsIG1fZ3JhcGhpY3NTdXJmYWNlU2l6ZSwgdGFyZ2V0UmVjdCwgYWRqdXN0ZWRUcmFuc2Zvcm0s
IG9wYWNpdHksIG1hc2spOworICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KHRleHR1
cmVNYXBwZXIpLT5kcmF3VGV4dHVyZVJlY3RhbmdsZUFSQihtX2dyYXBoaWNzU3VyZmFjZS0+Z2V0
VGV4dHVyZUlEKCksIDAsIG1fZ3JhcGhpY3NTdXJmYWNlU2l6ZSwgdGFyZ2V0UmVjdCwgYWRqdXN0
ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIG1hc2spOwogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odGV4
dHVyZU1hcHBlcik7Ci0gICAgVU5VU0VEX1BBUkFNKG9wYWNpdHkpOwotICAgIFVOVVNFRF9QQVJB
TShtYXNrKTsKKyAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPih0ZXh0dXJlTWFwcGVy
KS0+ZHJhd1RleHR1cmUobV9ncmFwaGljc1N1cmZhY2UtPmdldFRleHR1cmVJRCgpLCAwLCBtX2dy
YXBoaWNzU3VyZmFjZVNpemUsIHRhcmdldFJlY3QsIGFkanVzdGVkVHJhbnNmb3JtLCBvcGFjaXR5
LCBtYXNrKTsKICNlbmRpZgogfQorCit2b2lkIFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0
b3JlOjpzZXRTdXJmYWNlKFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlKQorewor
ICAgIGlmIChzdXJmYWNlKSB7CisgICAgICAgIG1fZ3JhcGhpY3NTdXJmYWNlID0gc3VyZmFjZTsK
KyAgICAgICAgbV9ncmFwaGljc1N1cmZhY2VUb2tlbiA9IG1fZ3JhcGhpY3NTdXJmYWNlLT5leHBv
cnRUb2tlbigpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZ3JhcGhpY3NTdXJmYWNlID0gUmVm
UHRyPEdyYXBoaWNzU3VyZmFjZT4oKTsKKyAgICAgICAgbV9ncmFwaGljc1N1cmZhY2VUb2tlbiA9
IDA7CisgICAgfQorfQogI2VuZGlmCiAKIHZvaWQgVGV4dHVyZU1hcHBlclRpbGU6OnVwZGF0ZUNv
bnRlbnRzKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEltYWdlKiBpbWFnZSwgY29uc3Qg
SW50UmVjdCYgZGlydHlSZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgK
aW5kZXggNDEyMzA2Ni4uOWQwMDJiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdT
dG9yZS5oCkBAIC00NywzNSArNDcsMjcgQEAgcHJvdGVjdGVkOgogfTsKIAogI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQotc3RydWN0IEdyYXBoaWNzU3VyZmFjZURhdGEgewotICAgIHZvaWQgc2V0
U3VyZmFjZShQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSkKLSAgICB7Ci0gICAg
ICAgIG1fZ3JhcGhpY3NTdXJmYWNlID0gc3VyZmFjZTsKLSAgICAgICAgbV9ncmFwaGljc1N1cmZh
Y2VUb2tlbiA9IG1fZ3JhcGhpY3NTdXJmYWNlLT5leHBvcnRUb2tlbigpOwotICAgICAgICBtX3Rl
eHR1cmVJRCA9IG1fZ3JhcGhpY3NTdXJmYWNlLT5nZXRUZXh0dXJlSUQoKTsKLSAgICB9Ci0KLSAg
ICBHcmFwaGljc1N1cmZhY2VEYXRhKCkKLSAgICAgICAgOiBtX3RleHR1cmVJRCgwKQotICAgICAg
ICAsIG1fZ3JhcGhpY3NTdXJmYWNlVG9rZW4oMCkKLSAgICB7IH0KLQotICAgIHVpbnQzMl90IG1f
dGV4dHVyZUlEOwotICAgIHVpbnQzMl90IG1fZ3JhcGhpY3NTdXJmYWNlVG9rZW47Ci0gICAgUmVm
UHRyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZT4gbV9ncmFwaGljc1N1cmZhY2U7Ci19OwotCiBj
bGFzcyBUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZSA6IHB1YmxpYyBUZXh0dXJlTWFw
cGVyQmFja2luZ1N0b3JlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJl
TWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlKTsgfQotICAgIHZvaWQgc2V0R3JhcGhp
Y3NTdXJmYWNlKHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuLCBjb25zdCBJbnRTaXplJiBz
dXJmYWNlU2l6ZSk7CisgICAgdm9pZCBzZXRHcmFwaGljc1N1cmZhY2UodWludDY0X3QgZ3JhcGhp
Y3NTdXJmYWNlVG9rZW4sIGNvbnN0IEludFNpemUmIHN1cmZhY2VTaXplLCB1aW50MzJfdCBmcm9u
dEJ1ZmZlcik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U+IGdyYXBo
aWNzU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhcGhpY3NTdXJmYWNlOyB9CiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUoKSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIEJpdG1hcFRleHR1cmUq
KTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZSgpIHsgfQor
Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBzZXRTdXJmYWNlKFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJm
YWNlPik7CisKIHByaXZhdGU6CisgICAgVGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmUo
KQorICAgICAgICA6IFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUoKQorICAgICAgICAsIG1fZ3Jh
cGhpY3NTdXJmYWNlVG9rZW4oMCkKKyAgICAgICAgeyB9CisKKyAgICB1aW50NjRfdCBtX2dyYXBo
aWNzU3VyZmFjZVRva2VuOworICAgIFJlZlB0cjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U+IG1f
Z3JhcGhpY3NTdXJmYWNlOwogICAgIEludFNpemUgbV9ncmFwaGljc1N1cmZhY2VTaXplOwotICAg
IEdyYXBoaWNzU3VyZmFjZURhdGEgbV9mcm9udEJ1ZmZlckdyYXBoaWNzU3VyZmFjZURhdGE7Ci0g
ICAgR3JhcGhpY3NTdXJmYWNlRGF0YSBtX2JhY2tCdWZmZXJHcmFwaGljc1N1cmZhY2VEYXRhOwog
fTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCmluZGV4
IDk2MTRjODkuLjIyOTJmNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ci5oCkBAIC0zNCw2ICszNCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3dhcEJ1ZmZl
cnMoKSB7IH0KICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKICAgICB2aXJ0dWFsIHVpbnQzMl90
IGNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHVpbnQ2
NF90IGdyYXBoaWNzU3VyZmFjZVRva2VuKCkgY29uc3QgeyByZXR1cm4gMDsgfQogI2VuZGlmCiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKaW5kZXggZTk4YzYxMy4uOGI2NDFhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDQwIEBACisyMDEyLTA4LTA4ICBaZW5vIEFsYmlzc2VyICA8emVub0B3ZWJraXQub3JnPgorCisg
ICAgICAgIE1ha2UgR3JhcGhpY3NTdXJmYWNlIGRvdWJsZSBidWZmZXJlZCBieSBkZWZhdWx0Lgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTMyNTIKKwor
ICAgICAgICBDcmVhdGUgb25seSBhIHNpbmdsZSBHcmFwaGljc1N1cmZhY2UgcGVyIGNhbnZhcwor
ICAgICAgICBvbiBib3RoIHN1cHBvcnRlZCBwbGF0Zm9ybXMgTWFjL0xpbnV4LgorICAgICAgICBU
aGUgR3JhcGhpY3NTdXJmYWNlIG9uIE1hYyBpbnRlcm5hbGx5IHVzZXMgdHdvIElPU3VyZmFjZQor
ICAgICAgICB0byBwcm92aWRlIGEgZnJvbnQgYW5kIGEgYmFjayBidWZmZXIuCisgICAgICAgIFRo
ZSBHTFggaW1wbGVtZW50YXRpb24gb2YgR3JhcGhpY3NTdXJmYWNlIHVzZXMKKyAgICAgICAgYW4g
WFdpbmRvdyB3aGljaCBhbHJlYWR5IHByb3ZpZGVzIGEgZnJvbnQgYW5kIGEgYmFjayBidWZmZXIu
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFy
ZWQvU2hhcmVhYmxlU3VyZmFjZS5oOgorICAgICAgICAoSGFuZGxlKToKKyAgICAgICAgICAgIENo
YW5nZSB0aGUgdHlwZSBvZiBHcmFwaGljc1N1cmZhY2UgdG9rZW4gdG8gdWludDY0X3QuCisgICAg
ICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnN5
bmNDYW52YXMpOgorICAgICAgICAgICAgQWRkIGEgcGFyYW1ldGVyIHRoYXQgZGVub3RlcyB0aGUg
Y3VycmVudCBmcm9udCBidWZmZXIgb2YgdGhlCisgICAgICAgICAgICBHcmFwaGljc1N1cmZhY2Uu
CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eS5oOgorICAgICAgICAoTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVSZW5kZXJlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRl
cmVyOjpzeW5jQ2FudmFzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVSZW5kZXJlci5oOgorICAgICAgICAoTGF5ZXJUcmVlUmVuZGVyZXIpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnN5bmNDYW52YXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oOgorICAgICAgICAoQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jQ2FudmFzKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5o
OgorICAgICAgICAoTGF5ZXJUcmVlQ29vcmRpbmF0b3IpOgorCiAyMDEyLTA4LTA4ICBBbmRyYXMg
QmVjc2kgIDxhbmRyYXMuYmVjc2lAbm9raWEuY29tPgogCiAgICAgICAgIFtRdF1bV0syXSBTZXQg
dGhlIGZpeGVkIGxheW91dCBzZXR0aW5nIGJlZm9yZSBjcmVhdGluZyB0aGUgcGFnZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVN1cmZhY2UuaCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVTdXJmYWNlLmgKaW5kZXggZmI3NGI2MS4uNmNkNzM2OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVN1cmZhY2UuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlU3VyZmFjZS5oCkBAIC02Miw3ICs2Miw3
IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIFNoYXJlYWJsZVN1cmZhY2U7CiAgICAg
ICAgIG11dGFibGUgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgbV9iaXRtYXBIYW5kbGU7CiAjaWYg
VVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgICAgIHVpbnQzMl90IG1fZ3JhcGhpY3NTdXJmYWNl
VG9rZW47CisgICAgICAgIHVpbnQ2NF90IG1fZ3JhcGhpY3NTdXJmYWNlVG9rZW47CiAjZW5kaWYK
ICAgICAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7CiAgICAgICAgIFNoYXJlYWJsZUJpdG1h
cDo6RmxhZ3MgbV9mbGFnczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eS5jcHAKaW5kZXggZWY5NzJmMy4uNmIwZGU3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTE3NCw5ICsxNzQsOSBAQCB2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0
IEludFBvaW50JiBwb3NpdGlvbgogICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJl
bmRlcmVyOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbiwgbV9yZW5kZXJlci5nZXQoKSwgcG9zaXRp
b24pKTsKIH0KIAotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzeW5jQ2FudmFzKHVp
bnQzMl90IGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1
cmZhY2VUb2tlbikKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c3luY0NhbnZhcyh1
aW50MzJfdCBpZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDY0X3QgZ3JhcGhpY3NT
dXJmYWNlVG9rZW4sIHVpbnQzMl90IGZyb250QnVmZmVyKQogewotICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzLCBtX3JlbmRlcmVyLmdldCgpLCBp
ZCwgY2FudmFzU2l6ZSwgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pKTsKKyAgICBkaXNwYXRjaFVwZGF0
ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c3luY0NhbnZhcywgbV9yZW5kZXJlci5nZXQoKSwg
aWQsIGNhbnZhc1NpemUsIGdyYXBoaWNzU3VyZmFjZVRva2VuLCBmcm9udEJ1ZmZlcikpOwogfQog
CiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnB1cmdlQmFja2luZ1N0b3JlcygpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmgKaW5kZXggZjYwM2Nk
MC4uZWQ3MWRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkuaApAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgp
OwogICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CiAgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQ
b3NpdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24pOwotICAgIHZvaWQgc3lu
Y0NhbnZhcyh1aW50MzJfdCBpZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwg
dWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pOworICAgIHZvaWQgc3luY0NhbnZhcyh1aW50
MzJfdCBpZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDY0X3QgZ3Jh
cGhpY3NTdXJmYWNlVG9rZW4sIHVpbnQzMl90IGZyb250QnVmZmVyKTsKICAgICB2b2lkIHB1cmdl
QmFja2luZ1N0b3JlcygpOwogICAgIExheWVyVHJlZVJlbmRlcmVyKiBsYXllclRyZWVSZW5kZXJl
cigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXIuZ2V0KCk7IH0KICAgICB2b2lkIHNldExheWVy
QW5pbWF0ZWRPcGFjaXR5KHVpbnQzMl90LCBmbG9hdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclBy
b3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgppbmRleCBkMjQzOGYx
Li4yMzg2OTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkubWVzc2FnZXMuaW4KQEAgLTMzLDcgKzMzLDcgQEAgbWVzc2FnZXMgLT4gTGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSB7CiAgICAgRGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZElt
YWdlKGludDY0X3Qga2V5KQogICAgIERpZFJlbmRlckZyYW1lKCkKICAgICBEaWRDaGFuZ2VTY3Jv
bGxQb3NpdGlvbihXZWJDb3JlOjpJbnRQb2ludCBwb3NpdGlvbikKLSAgICBTeW5jQ2FudmFzKHVp
bnQzMl90IGlkLCBXZWJDb3JlOjpJbnRTaXplIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNz
U3VyZmFjZVRva2VuKQorICAgIFN5bmNDYW52YXModWludDMyX3QgaWQsIFdlYkNvcmU6OkludFNp
emUgY2FudmFzU2l6ZSwgdWludDY0X3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4sIHVpbnQzMl90IGZy
b250QnVmZmVyKQogICAgIFNldExheWVyQW5pbWF0ZWRPcGFjaXR5KHVpbnQzMl90IGlkLCBmbG9h
dCBvcGFjaXR5KQogICAgIFNldExheWVyQW5pbWF0ZWRUcmFuc2Zvcm0odWludDMyX3QgaWQsIFdl
YkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSkKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRl
cmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZVJlbmRlcmVyLmNwcAppbmRleCBlZDBiZTNjLi40ODFiOWY3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5k
ZXJlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBMYXllclRy
ZWVSZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHBvc2l0
aW9uKQogICAgIG1fcGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9IHBvc2l0
aW9uOwogfQogCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzKFdlYkxheWVySUQg
aWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNz
U3VyZmFjZVRva2VuKQordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c3luY0NhbnZhcyhXZWJMYXll
cklEIGlkLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjYW52YXNTaXplLCB1aW50NjRfdCBncmFw
aGljc1N1cmZhY2VUb2tlbiwgdWludDMyX3QgZnJvbnRCdWZmZXIpCiB7CiAgICAgaWYgKGNhbnZh
c1NpemUuaXNFbXB0eSgpIHx8ICFtX3RleHR1cmVNYXBwZXIpCiAgICAgICAgIHJldHVybjsKQEAg
LTIwOCw3ICsyMDgsNyBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzKFdlYkxh
eWVySUQgaWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhcwogICAgIH0gZWxzZQogICAg
ICAgICBjYW52YXNCYWNraW5nU3RvcmUgPSBpdC0+c2Vjb25kOwogCi0gICAgY2FudmFzQmFja2lu
Z1N0b3JlLT5zZXRHcmFwaGljc1N1cmZhY2UoZ3JhcGhpY3NTdXJmYWNlVG9rZW4sIGNhbnZhc1Np
emUpOworICAgIGNhbnZhc0JhY2tpbmdTdG9yZS0+c2V0R3JhcGhpY3NTdXJmYWNlKGdyYXBoaWNz
U3VyZmFjZVRva2VuLCBjYW52YXNTaXplLCBmcm9udEJ1ZmZlcik7CiAgICAgbGF5ZXItPnNldENv
bnRlbnRzVG9NZWRpYShjYW52YXNCYWNraW5nU3RvcmUuZ2V0KCkpOwogI2VuZGlmCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVSZW5kZXJlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaAppbmRleCA2NDAzYjVkLi41NzA2YTRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVSZW5kZXJlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmgKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwogICAgIHZv
aWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKICAg
ICB2b2lkIGRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBw
b3NpdGlvbik7Ci0gICAgdm9pZCBzeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbik7Cisg
ICAgdm9pZCBzeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBj
YW52YXNTaXplLCB1aW50NjRfdCBncmFwaGljc1N1cmZhY2VUb2tlbiwgdWludDMyX3QgZnJvbnRC
dWZmZXIpOwogCiAgICAgdm9pZCBkZXRhY2goKTsKICAgICB2b2lkIGFwcGVuZFVwZGF0ZShjb25z
dCBGdW5jdGlvbjx2b2lkKCk+Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAppbmRleCBkNTBjZTFjLi41ZDJlNDFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5jcHAKQEAgLTUyNyw4ICs1MjcsMTAgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnN5bmNDYW52YXMoKQogICAgICAgICByZXR1cm47CiAKICNpZiBVU0UoR1JBUEhJQ1Nf
U1VSRkFDRSkKLSAgICB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbiA9IG1fY2FudmFzUGxh
dGZvcm1MYXllci0+Y29weVRvR3JhcGhpY3NTdXJmYWNlKCk7Ci0gICAgbV9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJDbGllbnQtPnN5bmNDYW52YXMobV9pZCwgSW50U2l6ZShzaXplKCkud2lkdGgo
KSwgc2l6ZSgpLmhlaWdodCgpKSwgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pOworICAgIHVpbnQzMl90
IGZyb250QnVmZmVyID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5jb3B5VG9HcmFwaGljc1N1cmZh
Y2UoKTsKKyAgICB1aW50NjRfdCB0b2tlbiA9IG1fY2FudmFzUGxhdGZvcm1MYXllci0+Z3JhcGhp
Y3NTdXJmYWNlVG9rZW4oKTsKKworICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50
LT5zeW5jQ2FudmFzKG1faWQsIEludFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQo
KSksIHRva2VuLCBmcm9udEJ1ZmZlcik7CiAjZW5kaWYKICAgICBtX2NhbnZhc05lZWRzRGlzcGxh
eSA9IGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIuaAppbmRleCAyNWNjZDk0Li5mNGVhMmZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaApAQCAt
NjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMo
V2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpID0gMDsKICNlbmRp
ZgogI2lmIFBMQVRGT1JNKFFUKQotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKFdlYkxheWVy
SUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNz
U3VyZmFjZVRva2VuKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMoV2ViTGF5ZXJJ
RCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDY0X3QgZ3JhcGhpY3NT
dXJmYWNlVG9rZW4sIHVpbnQzMl90IGZyb250QnVmZmVyKSA9IDA7CiAjZW5kaWYKIAogICAgIHZp
cnR1YWwgdm9pZCBzZXRMYXllckFuaW1hdGVkT3BhY2l0eShXZWJMYXllcklELCBmbG9hdCkgPSAw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3Iu
Y3BwCmluZGV4IDlkNTk4ZGIuLjlhOGM2NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAKQEAgLTI3OSwxMCArMjc5LDEwIEBAIHZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNMYXllckNoaWxkcmVuKFdlYkxheWVySUQgaWQs
IGNvbnN0IFZlY3RvcjxXZWJMYXllCiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oaWQsIGNo
aWxkcmVuKSk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNDYW52YXMoV2Vi
TGF5ZXJJRCBpZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NT
dXJmYWNlVG9rZW4pCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jQ2FudmFzKFdlYkxh
eWVySUQgaWQsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIHVpbnQ2NF90IGdyYXBoaWNzU3Vy
ZmFjZVRva2VuLCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKIHsKICAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OjpTeW5jQ2FudmFzKGlkLCBjYW52YXNTaXplLCBncmFwaGljc1N1cmZhY2VUb2tl
bikpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTo6U3luY0NhbnZhcyhpZCwgY2FudmFzU2l6ZSwgZ3JhcGhpY3NTdXJmYWNlVG9rZW4sIGZy
b250QnVmZmVyKSk7CiB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAppbmRleCA4MmUwYzcxLi4z
NWE5Y2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3Jk
aW5hdG9yLmgKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKICAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhXZWJMYXllcklELCBjb25zdCBX
ZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7CiAjZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgc3lu
Y0NhbnZhcyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjYW52YXNTaXplLCB1
aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHN5bmNDYW52YXMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6
ZSwgdWludDY0X3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4sIHVpbnQzMl90IGZyb250QnVmZmVyKSBP
VkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRM
YXllcnMoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>