<?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>90992</bug_id>
          
          <creation_ts>2012-07-11 10:43:38 -0700</creation_ts>
          <short_desc>Rename HitTestPoint and pointInContainer</short_desc>
          <delta_ts>2012-08-28 02:41:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>420+</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Allan Sandfeld Jensen">allan.jensen</reporter>
          <assigned_to name="Allan Sandfeld Jensen">allan.jensen</assigned_to>
          <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>mifenton</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tkent</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>666863</commentid>
    <comment_count>0</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-11 10:43:38 -0700</bug_when>
    <thetext>The implementations of the hit-testing function called nodeAtPoint make consistent used of a parameter called pointInContainer of type HitTestPoint. This value is not necessarly a single point however, but can be an area from a rect-based hit test.

To make the code clearer, these values and classes should be renamed to something indicating that they are often more than a point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666877</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-07-11 11:02:36 -0700</bug_when>
    <thetext>And How!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679160</commentid>
    <comment_count>2</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-26 04:47:04 -0700</bug_when>
    <thetext>I am currently thinking of renaming HitTestPoint to HitTestLocation, since location is more ambigiously either a point or an area.

At the same time I would rename isRectBased to isAreaBased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679286</commentid>
    <comment_count>3</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-07-26 07:04:37 -0700</bug_when>
    <thetext>Does the term &quot;target&quot; apply well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680322</commentid>
    <comment_count>4</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-27 02:08:27 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Does the term &quot;target&quot; apply well?

Yes, that is perhaps an even better name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681825</commentid>
    <comment_count>5</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-30 03:11:17 -0700</bug_when>
    <thetext>Okay, I have started a rename for HitTestPoint to HitTestTarget, but should nodeAtPoint be renamed as well, and in that case: To what?

Neither nodeAtTarget, nor nodesAtTarget really cover all cases. So perhaps a return to hitTest? So far I am leaving it unchanged in the first patch. A better rename can be delayed until we succesfully join nodeAtPoint and nodeAtFloatPoint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681828</commentid>
    <comment_count>6</comment_count>
      <attachid>155243</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-30 03:30:06 -0700</bug_when>
    <thetext>Created attachment 155243
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681835</commentid>
    <comment_count>7</comment_count>
      <attachid>155246</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-30 03:38:29 -0700</bug_when>
    <thetext>Created attachment 155246
Patch

Also rename isRectBased to isAreaBased as promised</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682031</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-07-30 08:20:25 -0700</bug_when>
    <thetext>Target sounds too much like an event target; it sounds like you&apos;ve already computed what&apos;s getting hit (the target).

How about HitTestArea? I&apos;m OK with HitTestLocation too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682046</commentid>
    <comment_count>9</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-30 08:43:22 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Target sounds too much like an event target; it sounds like you&apos;ve already computed what&apos;s getting hit (the target).
&gt; 
Right, the target could sound like the result, not the query.

&gt; How about HitTestArea? I&apos;m OK with HitTestLocation too.

I try to avoid hit-test area because it doesn&apos;t sound like it can be a single point. Also the term is already used in RenderLayer for the clipping area of the hit-test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683993</commentid>
    <comment_count>10</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-01 01:58:59 -0700</bug_when>
    <thetext>The recent quadroanual ring-themed sporting event, had me look up what shooting and archery sports call it. Apparently, they talk about where the &apos;hit&apos; is in the &apos;target&apos;, so target is what they aim for and &apos;hit&apos; is where they hit it. So if we were to follow that terminology, it would be just HitTestHit (or just Hit), nodeAtHit and hitInContainer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703992</commentid>
    <comment_count>11</comment_count>
      <attachid>160395</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-24 04:41:08 -0700</bug_when>
    <thetext>Created attachment 160395
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705644</commentid>
    <comment_count>12</comment_count>
      <attachid>160395</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-27 13:56:47 -0700</bug_when>
    <thetext>Comment on attachment 160395
Patch

Seems reasonable, and seems Simon agrees.  r=me.  I would also be fine with HitLocation or HitArea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706196</commentid>
    <comment_count>13</comment_count>
      <attachid>160395</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-28 02:41:33 -0700</bug_when>
    <thetext>Comment on attachment 160395
Patch

Clearing flags on attachment: 160395

Committed r126859: &lt;http://trac.webkit.org/changeset/126859&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706197</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-28 02:41:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155243</attachid>
            <date>2012-07-30 03:30:06 -0700</date>
            <delta_ts>2012-07-30 03:38:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90992-20120730122950.patch</filename>
            <type>text/plain</type>
            <size>138891</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmNmNzAwZWUwZDI5NTZk
ZGNlMWE3MmY1ZWZmOTU0OTdiM2VmNWZiMC4uOWE3N2NjYmZmMzQ5ZjdjMTEyNTRiZjVkNjZhYzZm
OTQ0NmIzMDI0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2NiBAQAorMjAxMi0wNy0zMCAgQWxs
YW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KKworICAgICAgICBS
ZW5hbWUgSGl0VGVzdFBvaW50IGFuZCBwb2ludEluQ29udGFpbmVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDk5MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBmb3JtZXIgaGl0VGVzdFBvaW50IGlz
IG5vdCBqdXN0IGEgcG9pbnQuIEl0IGNhbiBiZSBlaXRoZXIgYSBwb2ludCBvciBhbiBhcmVhIGJl
aW5nCisgICAgICAgIGhpdCB0ZXN0ZWQuIFRoaXMgcGF0Y2hlcyByZW5hbWVzICdwb2ludCcgdG8g
J3RhcmdldCcgdG8gbWFrZSBpdCBtb3JlIG9idmlvdXMgdGhhdCB0aGUKKyAgICAgICAgY29kZSBk
b2VzIG5vdCBvbmx5IGhhbmRsZSBwb2ludHMuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGZ1bmN0
aW9uYWxpdHkuIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9FbGxpcHNpc0Jv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9FbGxpcHNpc0JveC5oOgorICAgICAgICAoRWxsaXBzaXNCb3gpOgor
ICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhpdFRlc3RUYXJnZXQ6OkhpdFRlc3RUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVz
dFRhcmdldDo6fkhpdFRlc3RUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFRhcmdl
dDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RUYXJnZXQ6Om1vdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFRhcmdldDo6aW50ZXJzZWN0c1JlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SGl0VGVzdFRhcmdldDo6aW50ZXJzZWN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpIaXRUZXN0VGFyZ2V0OjpyZWN0Rm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVz
dFJlc3VsdDo6SGl0VGVzdFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0
OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRv
UmVjdEJhc2VkVGVzdFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojpk
aWN0YXRpb25BbHRlcm5hdGl2ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0
Lmg6CisgICAgICAgIChIaXRUZXN0VGFyZ2V0KToKKyAgICAgICAgKEhpdFRlc3RSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6dGFyZ2V0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvSW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6bm9kZUF0
UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3guaDoKKyAgICAgICAgKElubGlu
ZUJveCk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9JbmxpbmVGbG93Qm94Lmg6CisgICAgICAgIChJbmxpbmVGbG93Qm94KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0
Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDoK
KyAgICAgICAgKElubGluZVRleHRCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aXNQb2ludEluT3ZlcmZsb3dD
b250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpub2RlQXRQb2ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGl0VGVzdEZsb2F0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6aGl0VGVzdENvbHVtbnMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmFkanVzdEZvckNvbHVtblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmhpdFRlc3RDb250ZW50cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmg6CisgICAgICAgIChSZW5kZXJCbG9jayk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om5vZGVBdFBvaW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgIChSZW5kZXJCb3gpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oOgorICAgICAgICAoUmVuZGVyRW1iZWRkZWRPYmpl
Y3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmhpdFRlc3RSZWdpb24pOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZy
YW1lU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYW1lU2V0Ojpub2RlQXRQb2lu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0Lmg6CisgICAgICAgIChSZW5k
ZXJGcmFtZVNldCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckltYWdlLmg6CisgICAgICAgIChSZW5kZXJJbWFnZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlcklubGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6
Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAg
ICAgIChSZW5kZXJJbmxpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDbGlwUmVjdDo6aW50ZXJzZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6Y3JlYXRlTG9jYWxUcmFuc2Zvcm1TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRU
ZXN0Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RMaXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0UGFnaW5hdGVkQ2hpbGRM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxkTGF5ZXJD
b2x1bW5zKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKENs
aXBSZWN0KToKKyAgICAgICAgKFJlbmRlckxheWVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGluZUJveExpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUJveExpc3Q6
OmhpdFRlc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5oOgorICAg
ICAgICAoUmVuZGVyTGluZUJveExpc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmlzUG9pbnRJbk92ZXJm
bG93Q29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2lu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaDoKKyAgICAgICAgKFJlbmRl
ckxpc3RCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpoaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaDoKKyAgICAgICAgKFJlbmRlck9iamVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clJlZ2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246Om5vZGVBdFBvaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmg6CisgICAgICAgIChSZW5kZXJS
ZWdpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZS5oOgorICAgICAgICAoUmVuZGVyVGFibGUpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUYWJsZVJvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6
bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oOgorICAg
ICAgICAoUmVuZGVyVGFibGVSb3cpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNl
Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQ
b2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oOgorICAgICAg
ICAoUmVuZGVyVGFibGVTZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6aGl0SW5uZXJUZXh0RWxlbWVudCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmg6CisgICAgICAgIChSZW5kZXJUZXh0Q29u
dHJvbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpub2RlQXRQ
b2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmg6
CisgICAgICAgIChSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZSk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmg6CisgICAgICAgIChSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0Ojpub2RlQXRQb2ludCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oOgorICAgICAgICAoUmVuZGVyV2lkZ2V0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
b290SW5saW5lQm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guaDoKKyAgICAgICAgKFJvb3RJbmxpbmVCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdGb3JlaWduT2JqZWN0Ojpub2RlQXRGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR0ZvcmVpZ25PYmplY3Q6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaDoKKyAgICAgICAgKFJlbmRlclNWR0ZvcmVpZ25P
YmplY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om5vZGVBdFBvaW50KToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0Lmg6CisgICAgICAg
IChSZW5kZXJTVkdNb2RlbE9iamVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaDoKKyAgICAgICAgKFJl
bmRlclNWR1Jvb3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0Ojpub2RlQXRGbG9hdFBvaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaDoKKyAgICAgICAgKFJlbmRlclNWR1RleHQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgIChTVkdJbmxpbmVUZXh0Qm94KToK
KwogMjAxMi0wNy0zMCAgSGF5YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmVtb3ZlIHVubmVjZXNzYXJ5IGNvZGUgd2hpY2ggc2V0IGV2ZW50J3MgdGFyZ2V0IGZyb20g
RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
bGxpcHNpc0JveC5jcHAKaW5kZXggOGMwMGZjYTc1Y2IyY2VmOTY3ZTEyZDUzMmM3N2Q1YWVmN2Q2
NGE5OS4uYjIwNGIxMTU5MmM3MDg5MDg4MTMxZjY1OWQ5ZGM4ZWU5Y2E2OTYwMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCkBAIC0xMDQsNyArMTA0LDcgQEAgdm9p
ZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBMYXlvdXRQb2ludCYgcGEKICAgICBjb250ZXh0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChm
b250LCBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihyZW5kZXJlcigpLCBmb250LCBtX3N0
ciwgc3R5bGUsIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24pLCByb3VuZGVkSW50UG9p
bnQoTGF5b3V0UG9pbnQoeCgpICsgcGFpbnRPZmZzZXQueCgpLCB5KCkgKyBwYWludE9mZnNldC55
KCkgKyB0b3ApKSwgaCwgYywgc3R5bGUtPmNvbG9yU3BhY2UoKSk7CiB9CiAKLWJvb2wgRWxsaXBz
aXNCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEhpdFRlc3RQb2ludCYsIGNvbnN0IExheW91dFBvaW50JiwgTGF5b3V0VW5pdCwgTGF5
b3V0VW5pdCkKK2Jvb2wgRWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RUYXJnZXQmLCBjb25zdCBMYXlvdXRQ
b2ludCYsIExheW91dFVuaXQsIExheW91dFVuaXQpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaAppbmRleCAzNWQ2MzRkN2Q4OTgwZGYz
YTYyMmFkZmMxNzg5YzI0YmRiNTM0MTZjLi4wNWQyZDBjNGU3OTkwZmU3NzUyNjFhYjUxNWVjM2Q5
MTVmZDcwMGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNC
b3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaApAQCAtNDAs
NyArNDAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0
IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBs
aW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBIaXRUZXN0VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRv
bSkgT1ZFUlJJREU7CiAgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShSZW5kZXJPYmplY3Q6OlNl
bGVjdGlvblN0YXRlIHMpIHsgbV9zZWxlY3Rpb25TdGF0ZSA9IHM7IH0KICAgICBJbnRSZWN0IHNl
bGVjdGlvblJlY3QoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQu
Y3BwCmluZGV4IDBmNmU0YjkxNjZhOGNlMTI5MzQyYjU1M2UwZjQ2ZWM1YTEyZWVjNmEuLmU3Njlh
OWNhZDRlZjdlNzM5OGU1ZTI5YzU5ODMzMjQ3ZDlhYzI0ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTQ4LDE0ICs0OCwxNCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhpdFRlc3RQb2ludDo6
SGl0VGVzdFBvaW50KCkKK0hpdFRlc3RUYXJnZXQ6OkhpdFRlc3RUYXJnZXQoKQogICAgIDogbV9y
ZWdpb24oMCkKICAgICAsIG1faXNSZWN0QmFzZWQoZmFsc2UpCiAgICAgLCBtX2lzUmVjdGlsaW5l
YXIodHJ1ZSkKIHsKIH0KIAotSGl0VGVzdFBvaW50OjpIaXRUZXN0UG9pbnQoY29uc3QgTGF5b3V0
UG9pbnQmIHBvaW50KQorSGl0VGVzdFRhcmdldDo6SGl0VGVzdFRhcmdldChjb25zdCBMYXlvdXRQ
b2ludCYgcG9pbnQpCiAgICAgOiBtX3BvaW50KHBvaW50KQogICAgICwgbV9ib3VuZGluZ0JveChy
ZWN0Rm9yUG9pbnQocG9pbnQsIDAsIDAsIDAsIDApKQogICAgICwgbV90cmFuc2Zvcm1lZFBvaW50
KHBvaW50KQpAQCAtNjYsNyArNjYsNyBAQCBIaXRUZXN0UG9pbnQ6OkhpdFRlc3RQb2ludChjb25z
dCBMYXlvdXRQb2ludCYgcG9pbnQpCiB7CiB9CiAKLUhpdFRlc3RQb2ludDo6SGl0VGVzdFBvaW50
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorSGl0VGVzdFRhcmdldDo6SGl0VGVzdFRhcmdldChj
b25zdCBGbG9hdFBvaW50JiBwb2ludCkKICAgICA6IG1fcG9pbnQocm91bmRlZExheW91dFBvaW50
KHBvaW50KSkKICAgICAsIG1fYm91bmRpbmdCb3gocmVjdEZvclBvaW50KG1fcG9pbnQsIDAsIDAs
IDAsIDApKQogICAgICwgbV90cmFuc2Zvcm1lZFBvaW50KHBvaW50KQpAQCAtNzcsNyArNzcsNyBA
QCBIaXRUZXN0UG9pbnQ6OkhpdFRlc3RQb2ludChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsK
IH0KIAotSGl0VGVzdFBvaW50OjpIaXRUZXN0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKK0hpdFRlc3RUYXJnZXQ6OkhpdFRlc3RUYXJnZXQoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKICAgICA6IG1fdHJh
bnNmb3JtZWRQb2ludChwb2ludCkKICAgICAsIG1fdHJhbnNmb3JtZWRSZWN0KHF1YWQpCiAgICAg
LCBtX3JlZ2lvbigwKQpAQCAtODgsNyArODgsNyBAQCBIaXRUZXN0UG9pbnQ6OkhpdFRlc3RQb2lu
dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkKQogICAgIG1f
aXNSZWN0aWxpbmVhciA9IHF1YWQuaXNSZWN0aWxpbmVhcigpOwogfQogCi1IaXRUZXN0UG9pbnQ6
OkhpdFRlc3RQb2ludChjb25zdCBMYXlvdXRQb2ludCYgY2VudGVyUG9pbnQsIHVuc2lnbmVkIHRv
cFBhZGRpbmcsIHVuc2lnbmVkIHJpZ2h0UGFkZGluZywgdW5zaWduZWQgYm90dG9tUGFkZGluZywg
dW5zaWduZWQgbGVmdFBhZGRpbmcpCitIaXRUZXN0VGFyZ2V0OjpIaXRUZXN0VGFyZ2V0KGNvbnN0
IExheW91dFBvaW50JiBjZW50ZXJQb2ludCwgdW5zaWduZWQgdG9wUGFkZGluZywgdW5zaWduZWQg
cmlnaHRQYWRkaW5nLCB1bnNpZ25lZCBib3R0b21QYWRkaW5nLCB1bnNpZ25lZCBsZWZ0UGFkZGlu
ZykKICAgICA6IG1fcG9pbnQoY2VudGVyUG9pbnQpCiAgICAgLCBtX2JvdW5kaW5nQm94KHJlY3RG
b3JQb2ludChjZW50ZXJQb2ludCwgdG9wUGFkZGluZywgcmlnaHRQYWRkaW5nLCBib3R0b21QYWRk
aW5nLCBsZWZ0UGFkZGluZykpCiAgICAgLCBtX3RyYW5zZm9ybWVkUG9pbnQoY2VudGVyUG9pbnQp
CkBAIC05OSw3ICs5OSw3IEBAIEhpdFRlc3RQb2ludDo6SGl0VGVzdFBvaW50KGNvbnN0IExheW91
dFBvaW50JiBjZW50ZXJQb2ludCwgdW5zaWduZWQgdG9wUGFkZGluZywKICAgICBtX3RyYW5zZm9y
bWVkUmVjdCA9IEZsb2F0UXVhZChtX2JvdW5kaW5nQm94KTsKIH0KIAotSGl0VGVzdFBvaW50OjpI
aXRUZXN0UG9pbnQoY29uc3QgSGl0VGVzdFBvaW50JiBvdGhlciwgY29uc3QgTGF5b3V0U2l6ZSYg
b2Zmc2V0LCBSZW5kZXJSZWdpb24qIHJlZ2lvbikKK0hpdFRlc3RUYXJnZXQ6OkhpdFRlc3RUYXJn
ZXQoY29uc3QgSGl0VGVzdFRhcmdldCYgb3RoZXIsIGNvbnN0IExheW91dFNpemUmIG9mZnNldCwg
UmVuZGVyUmVnaW9uKiByZWdpb24pCiAgICAgOiBtX3BvaW50KG90aGVyLm1fcG9pbnQpCiAgICAg
LCBtX2JvdW5kaW5nQm94KG90aGVyLm1fYm91bmRpbmdCb3gpCiAgICAgLCBtX3RyYW5zZm9ybWVk
UG9pbnQob3RoZXIubV90cmFuc2Zvcm1lZFBvaW50KQpAQCAtMTExLDcgKzExMSw3IEBAIEhpdFRl
c3RQb2ludDo6SGl0VGVzdFBvaW50KGNvbnN0IEhpdFRlc3RQb2ludCYgb3RoZXIsIGNvbnN0IExh
eW91dFNpemUmIG9mZnNldCwKICAgICBtb3ZlKG9mZnNldCk7CiB9CiAKLUhpdFRlc3RQb2ludDo6
SGl0VGVzdFBvaW50KGNvbnN0IEhpdFRlc3RQb2ludCYgb3RoZXIpCitIaXRUZXN0VGFyZ2V0OjpI
aXRUZXN0VGFyZ2V0KGNvbnN0IEhpdFRlc3RUYXJnZXQmIG90aGVyKQogICAgIDogbV9wb2ludChv
dGhlci5tX3BvaW50KQogICAgICwgbV9ib3VuZGluZ0JveChvdGhlci5tX2JvdW5kaW5nQm94KQog
ICAgICwgbV90cmFuc2Zvcm1lZFBvaW50KG90aGVyLm1fdHJhbnNmb3JtZWRQb2ludCkKQEAgLTEy
MiwxMSArMTIyLDExIEBAIEhpdFRlc3RQb2ludDo6SGl0VGVzdFBvaW50KGNvbnN0IEhpdFRlc3RQ
b2ludCYgb3RoZXIpCiB7CiB9CiAKLUhpdFRlc3RQb2ludDo6fkhpdFRlc3RQb2ludCgpCitIaXRU
ZXN0VGFyZ2V0Ojp+SGl0VGVzdFRhcmdldCgpCiB7CiB9CiAKLUhpdFRlc3RQb2ludCYgSGl0VGVz
dFBvaW50OjpvcGVyYXRvcj0oY29uc3QgSGl0VGVzdFBvaW50JiBvdGhlcikKK0hpdFRlc3RUYXJn
ZXQmIEhpdFRlc3RUYXJnZXQ6Om9wZXJhdG9yPShjb25zdCBIaXRUZXN0VGFyZ2V0JiBvdGhlcikK
IHsKICAgICBtX3BvaW50ID0gb3RoZXIubV9wb2ludDsKICAgICBtX2JvdW5kaW5nQm94ID0gb3Ro
ZXIubV9ib3VuZGluZ0JveDsKQEAgLTEzOSw3ICsxMzksNyBAQCBIaXRUZXN0UG9pbnQmIEhpdFRl
c3RQb2ludDo6b3BlcmF0b3I9KGNvbnN0IEhpdFRlc3RQb2ludCYgb3RoZXIpCiAgICAgcmV0dXJu
ICp0aGlzOwogfQogCi12b2lkIEhpdFRlc3RQb2ludDo6bW92ZShjb25zdCBMYXlvdXRTaXplJiBv
ZmZzZXQpCit2b2lkIEhpdFRlc3RUYXJnZXQ6Om1vdmUoY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0
KQogewogICAgIG1fcG9pbnQubW92ZShvZmZzZXQpOwogICAgIG1fdHJhbnNmb3JtZWRQb2ludC5t
b3ZlKG9mZnNldCk7CkBAIC0xNDgsNyArMTQ4LDcgQEAgdm9pZCBIaXRUZXN0UG9pbnQ6Om1vdmUo
Y29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0KQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBSZWN0VHlw
ZT4KLWJvb2wgSGl0VGVzdFBvaW50OjppbnRlcnNlY3RzUmVjdChjb25zdCBSZWN0VHlwZSYgcmVj
dCkgY29uc3QKK2Jvb2wgSGl0VGVzdFRhcmdldDo6aW50ZXJzZWN0c1JlY3QoY29uc3QgUmVjdFR5
cGUmIHJlY3QpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGhpdCB0ZXN0IGlzIG5v
dCByZWN0IGJhc2VkIHdlIHNob3VsZCB1c2UgcmVjdC5jb250YWlucyhtX3BvaW50KS4KICAgICAv
LyBUaGF0IGRvZXMgY2hhbmdlIHNvbWUgY29ybmVyIGNhc2UgdGVzdHMgdGhvdWdoLgpAQCAtMTY5
LDE3ICsxNjksMTcgQEAgYm9vbCBIaXRUZXN0UG9pbnQ6OmludGVyc2VjdHNSZWN0KGNvbnN0IFJl
Y3RUeXBlJiByZWN0KSBjb25zdAogICAgIHJldHVybiBtX3RyYW5zZm9ybWVkUmVjdC5pbnRlcnNl
Y3RzUmVjdChyZWN0KTsKIH0KIAotYm9vbCBIaXRUZXN0UG9pbnQ6OmludGVyc2VjdHMoY29uc3Qg
TGF5b3V0UmVjdCYgcmVjdCkgY29uc3QKK2Jvb2wgSGl0VGVzdFRhcmdldDo6aW50ZXJzZWN0cyhj
b25zdCBMYXlvdXRSZWN0JiByZWN0KSBjb25zdAogewogICAgIHJldHVybiBpbnRlcnNlY3RzUmVj
dChyZWN0KTsKIH0KIAotYm9vbCBIaXRUZXN0UG9pbnQ6OmludGVyc2VjdHMoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KSBjb25zdAorYm9vbCBIaXRUZXN0VGFyZ2V0OjppbnRlcnNlY3RzKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gaW50ZXJzZWN0c1JlY3QocmVjdCk7
CiB9CiAKLUludFJlY3QgSGl0VGVzdFBvaW50OjpyZWN0Rm9yUG9pbnQoY29uc3QgTGF5b3V0UG9p
bnQmIHBvaW50LCB1bnNpZ25lZCB0b3BQYWRkaW5nLCB1bnNpZ25lZCByaWdodFBhZGRpbmcsIHVu
c2lnbmVkIGJvdHRvbVBhZGRpbmcsIHVuc2lnbmVkIGxlZnRQYWRkaW5nKQorSW50UmVjdCBIaXRU
ZXN0VGFyZ2V0OjpyZWN0Rm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50LCB1bnNpZ25l
ZCB0b3BQYWRkaW5nLCB1bnNpZ25lZCByaWdodFBhZGRpbmcsIHVuc2lnbmVkIGJvdHRvbVBhZGRp
bmcsIHVuc2lnbmVkIGxlZnRQYWRkaW5nKQogewogICAgIEludFBvaW50IGFjdHVhbFBvaW50KHJv
dW5kZWRJbnRQb2ludChwb2ludCkpOwogICAgIGFjdHVhbFBvaW50IC09IEludFNpemUobGVmdFBh
ZGRpbmcsIHRvcFBhZGRpbmcpOwpAQCAtMTkyLDM0ICsxOTIsMzQgQEAgSW50UmVjdCBIaXRUZXN0
UG9pbnQ6OnJlY3RGb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIHRv
cFBhZGRpbmcKICAgICByZXR1cm4gSW50UmVjdChhY3R1YWxQb2ludCwgYWN0dWFsUGFkZGluZyk7
CiB9CiAKLUhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoKSA6IEhpdFRlc3RQb2ludCgpCitI
aXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KCkgOiBIaXRUZXN0VGFyZ2V0KCkKICAgICAsIG1f
aXNPdmVyV2lkZ2V0KGZhbHNlKQogICAgICwgbV9zaGFkb3dDb250ZW50RmlsdGVyUG9saWN5KERv
Tm90QWxsb3dTaGFkb3dDb250ZW50KQogewogfQogCi1IaXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVz
dWx0KGNvbnN0IExheW91dFBvaW50JiBwb2ludCkgOiBIaXRUZXN0UG9pbnQocG9pbnQpCitIaXRU
ZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KGNvbnN0IExheW91dFBvaW50JiBwb2ludCkgOiBIaXRU
ZXN0VGFyZ2V0KHBvaW50KQogICAgICwgbV9pc092ZXJXaWRnZXQoZmFsc2UpCiAgICAgLCBtX3No
YWRvd0NvbnRlbnRGaWx0ZXJQb2xpY3koRG9Ob3RBbGxvd1NoYWRvd0NvbnRlbnQpCiB7CiB9CiAK
IEhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgTGF5b3V0UG9pbnQmIGNlbnRlclBv
aW50LCB1bnNpZ25lZCB0b3BQYWRkaW5nLCB1bnNpZ25lZCByaWdodFBhZGRpbmcsIHVuc2lnbmVk
IGJvdHRvbVBhZGRpbmcsIHVuc2lnbmVkIGxlZnRQYWRkaW5nLCBTaGFkb3dDb250ZW50RmlsdGVy
UG9saWN5IGFsbG93U2hhZG93Q29udGVudCkKLSAgICA6IEhpdFRlc3RQb2ludChjZW50ZXJQb2lu
dCwgdG9wUGFkZGluZywgcmlnaHRQYWRkaW5nLCBib3R0b21QYWRkaW5nLCBsZWZ0UGFkZGluZykK
KyAgICA6IEhpdFRlc3RUYXJnZXQoY2VudGVyUG9pbnQsIHRvcFBhZGRpbmcsIHJpZ2h0UGFkZGlu
ZywgYm90dG9tUGFkZGluZywgbGVmdFBhZGRpbmcpCiAgICAgLCBtX2lzT3ZlcldpZGdldChmYWxz
ZSkKICAgICAsIG1fc2hhZG93Q29udGVudEZpbHRlclBvbGljeShhbGxvd1NoYWRvd0NvbnRlbnQp
CiB7CiB9CiAKLUhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFBvaW50
JiBvdGhlciwgU2hhZG93Q29udGVudEZpbHRlclBvbGljeSBhbGxvd1NoYWRvd0NvbnRlbnQpCi0g
ICAgOiBIaXRUZXN0UG9pbnQob3RoZXIpCitIaXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KGNv
bnN0IEhpdFRlc3RUYXJnZXQmIG90aGVyLCBTaGFkb3dDb250ZW50RmlsdGVyUG9saWN5IGFsbG93
U2hhZG93Q29udGVudCkKKyAgICA6IEhpdFRlc3RUYXJnZXQob3RoZXIpCiAgICAgLCBtX2lzT3Zl
cldpZGdldChmYWxzZSkKICAgICAsIG1fc2hhZG93Q29udGVudEZpbHRlclBvbGljeShhbGxvd1No
YWRvd0NvbnRlbnQpCiB7CiB9CiAKIEhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3Qg
SGl0VGVzdFJlc3VsdCYgb3RoZXIpCi0gICAgOiBIaXRUZXN0UG9pbnQob3RoZXIpCisgICAgOiBI
aXRUZXN0VGFyZ2V0KG90aGVyKQogICAgICwgbV9pbm5lck5vZGUob3RoZXIuaW5uZXJOb2RlKCkp
CiAgICAgLCBtX2lubmVyTm9uU2hhcmVkTm9kZShvdGhlci5pbm5lck5vblNoYXJlZE5vZGUoKSkK
ICAgICAsIG1fbG9jYWxQb2ludChvdGhlci5sb2NhbFBvaW50KCkpCkBAIC0yMzgsNyArMjM4LDcg
QEAgSGl0VGVzdFJlc3VsdDo6fkhpdFRlc3RSZXN1bHQoKQogCiBIaXRUZXN0UmVzdWx0JiBIaXRU
ZXN0UmVzdWx0OjpvcGVyYXRvcj0oY29uc3QgSGl0VGVzdFJlc3VsdCYgb3RoZXIpCiB7Ci0gICAg
SGl0VGVzdFBvaW50OjpvcGVyYXRvcj0ob3RoZXIpOworICAgIEhpdFRlc3RUYXJnZXQ6Om9wZXJh
dG9yPShvdGhlcik7CiAgICAgbV9pbm5lck5vZGUgPSBvdGhlci5pbm5lck5vZGUoKTsKICAgICBt
X2lubmVyTm9uU2hhcmVkTm9kZSA9IG90aGVyLmlubmVyTm9uU2hhcmVkTm9kZSgpOwogICAgIG1f
bG9jYWxQb2ludCA9IG90aGVyLmxvY2FsUG9pbnQoKTsKQEAgLTY3NCw3ICs2NzQsNyBAQCBib29s
IEhpdFRlc3RSZXN1bHQ6OmlzQ29udGVudEVkaXRhYmxlKCkgY29uc3QKICAgICByZXR1cm4gbV9p
bm5lck5vblNoYXJlZE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpOwogfQogCi1ib29sIEhpdFRl
c3RSZXN1bHQ6OmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSogbm9kZSwgY29uc3Qg
SGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KQor
Ym9vbCBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqIG5v
ZGUsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRS
ZWN0JiByZWN0KQogewogICAgIC8vIElmIGl0IGlzIG5vdCBhIHJlY3QtYmFzZWQgaGl0IHRlc3Qs
IHRoaXMgbWV0aG9kIGhhcyB0byBiZSBuby1vcC4KICAgICAvLyBSZXR1cm4gZmFsc2UsIHNvIHRo
ZSBoaXQgdGVzdCBzdG9wcy4KQEAgLTY5MCw3ICs2OTAsNyBAQCBib29sIEhpdFRlc3RSZXN1bHQ6
OmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSogbm9kZSwgY29uc3QgSGl0VGVzdFBv
aW50JgogCiAgICAgbXV0YWJsZVJlY3RCYXNlZFRlc3RSZXN1bHQoKS5hZGQobm9kZSk7CiAKLSAg
ICBib29sIHJlZ2lvbkZpbGxlZCA9IHJlY3QuY29udGFpbnMocG9pbnRJbkNvbnRhaW5lci5ib3Vu
ZGluZ0JveCgpKTsKKyAgICBib29sIHJlZ2lvbkZpbGxlZCA9IHJlY3QuY29udGFpbnModGFyZ2V0
SW5Db250YWluZXIuYm91bmRpbmdCb3goKSk7CiAgICAgLy8gRklYTUU6IFRoaXMgY29kZSAoaW5j
b3JyZWN0bHkpIGF0dGVtcHRzIHRvIGNvcnJlY3QgZm9yIGN1bGxlZCBpbmxpbmUgbm9kZXMuIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODU4NDkuCiAgICAgaWYg
KG5vZGUtPnJlbmRlcmVyKCktPmlzSW5saW5lKCkgJiYgIXJlZ2lvbkZpbGxlZCkgewogICAgICAg
ICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IG5vZGUtPnJlbmRlcmVyKCktPnBhcmVudCgpOyBj
dXJyOyBjdXJyID0gY3Vyci0+cGFyZW50KCkpIHsKQEAgLTcwOSw3ICs3MDksNyBAQCBib29sIEhp
dFRlc3RSZXN1bHQ6OmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSogbm9kZSwgY29u
c3QgSGl0VGVzdFBvaW50JgogICAgIHJldHVybiAhcmVnaW9uRmlsbGVkOwogfQogCi1ib29sIEhp
dFRlc3RSZXN1bHQ6OmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSogbm9kZSwgY29u
c3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Citib29sIEhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSog
bm9kZSwgY29uc3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKICAgICAvLyBJZiBpdCBpcyBub3QgYSByZWN0LWJhc2VkIGhpdCB0ZXN0
LCB0aGlzIG1ldGhvZCBoYXMgdG8gYmUgbm8tb3AuCiAgICAgLy8gUmV0dXJuIGZhbHNlLCBzbyB0
aGUgaGl0IHRlc3Qgc3RvcHMuCkBAIC03MjUsNyArNzI1LDcgQEAgYm9vbCBIaXRUZXN0UmVzdWx0
OjphZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqIG5vZGUsIGNvbnN0IEhpdFRlc3RQ
b2ludCYKIAogICAgIG11dGFibGVSZWN0QmFzZWRUZXN0UmVzdWx0KCkuYWRkKG5vZGUpOwogCi0g
ICAgYm9vbCByZWdpb25GaWxsZWQgPSByZWN0LmNvbnRhaW5zKHBvaW50SW5Db250YWluZXIuYm91
bmRpbmdCb3goKSk7CisgICAgYm9vbCByZWdpb25GaWxsZWQgPSByZWN0LmNvbnRhaW5zKHRhcmdl
dEluQ29udGFpbmVyLmJvdW5kaW5nQm94KCkpOwogICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgKGlu
Y29ycmVjdGx5KSBhdHRlbXB0cyB0byBjb3JyZWN0IGZvciBjdWxsZWQgaW5saW5lIG5vZGVzLiBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1ODQ5LgogICAgIGlm
IChub2RlLT5yZW5kZXJlcigpLT5pc0lubGluZSgpICYmICFyZWdpb25GaWxsZWQpIHsKICAgICAg
ICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBub2RlLT5yZW5kZXJlcigpLT5wYXJlbnQoKTsg
Y3VycjsgY3VyciA9IGN1cnItPnBhcmVudCgpKSB7CkBAIC03ODQsNyArNzg0LDcgQEAgVmVjdG9y
PFN0cmluZz4gSGl0VGVzdFJlc3VsdDo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzKCkgY29uc3QKICAg
ICBpZiAoIW1faW5uZXJOb25TaGFyZWROb2RlKQogICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmlu
Zz4oKTsKIAotICAgIERvY3VtZW50TWFya2VyKiBtYXJrZXIgPSBtX2lubmVyTm9uU2hhcmVkTm9k
ZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5tYXJrZXJDb250YWluaW5nUG9pbnQoaGl0VGVzdFBv
aW50KCkucG9pbnQoKSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcyk7Cisg
ICAgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IG1faW5uZXJOb25TaGFyZWROb2RlLT5kb2N1bWVu
dCgpLT5tYXJrZXJzKCktPm1hcmtlckNvbnRhaW5pbmdQb2ludCh0YXJnZXQoKS5wb2ludCgpLCBE
b2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKICAgICBpZiAoIW1hcmtlcikK
ICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSGl0VGVzdFJlc3VsdC5oCmluZGV4IDA1Y2E5MGRjMTUyYzM4ZDU4OWEwZTIyNTUzODZiNDQx
NGZjNmZiNGUuLjFhYWE5ZGI5OTEyNTkxZWRlOTJlZmRkMzgyYmI1YjEyMGZkOTg4ZjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaApAQCAtNDcsMjAgKzQ3LDIwIEBA
IGNsYXNzIFNjcm9sbGJhcjsKIAogZW51bSBTaGFkb3dDb250ZW50RmlsdGVyUG9saWN5IHsgRG9O
b3RBbGxvd1NoYWRvd0NvbnRlbnQsIEFsbG93U2hhZG93Q29udGVudCB9OwogCi1jbGFzcyBIaXRU
ZXN0UG9pbnQgeworY2xhc3MgSGl0VGVzdFRhcmdldCB7CiBwdWJsaWM6CiAKLSAgICBIaXRUZXN0
UG9pbnQoKTsKLSAgICBIaXRUZXN0UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICBIaXRU
ZXN0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYpOwotICAgIEhpdFRlc3RQb2ludChjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgRmxvYXRRdWFkJik7CisgICAgSGl0VGVzdFRhcmdldCgpOworICAgIEhp
dFRlc3RUYXJnZXQoY29uc3QgTGF5b3V0UG9pbnQmKTsKKyAgICBIaXRUZXN0VGFyZ2V0KGNvbnN0
IEZsb2F0UG9pbnQmKTsKKyAgICBIaXRUZXN0VGFyZ2V0KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFF1YWQmKTsKICAgICAvLyBQYXNzIG5vbi16ZXJvIHBhZGRpbmcgdmFsdWVzIHRvIHBl
cmZvcm0gYSByZWN0LWJhc2VkIGhpdCB0ZXN0LgotICAgIEhpdFRlc3RQb2ludChjb25zdCBMYXlv
dXRQb2ludCYgY2VudGVyUG9pbnQsIHVuc2lnbmVkIHRvcFBhZGRpbmcsIHVuc2lnbmVkIHJpZ2h0
UGFkZGluZywgdW5zaWduZWQgYm90dG9tUGFkZGluZywgdW5zaWduZWQgbGVmdFBhZGRpbmcpOwot
ICAgIC8vIE1ha2UgYSBjb3B5IHRoZSBIaXRUZXN0UG9pbnQgaW4gYSBuZXcgcmVnaW9uIGJ5IGFw
cGx5aW5nIGdpdmVuIG9mZnNldCB0byBpbnRlcm5hbCBwb2ludCBhbmQgYXJlYS4KLSAgICBIaXRU
ZXN0UG9pbnQoY29uc3QgSGl0VGVzdFBvaW50JiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0LCBS
ZW5kZXJSZWdpb24qKTsKLSAgICBIaXRUZXN0UG9pbnQoY29uc3QgSGl0VGVzdFBvaW50Jik7Ci0g
ICAgfkhpdFRlc3RQb2ludCgpOwotICAgIEhpdFRlc3RQb2ludCYgb3BlcmF0b3I9KGNvbnN0IEhp
dFRlc3RQb2ludCYpOworICAgIEhpdFRlc3RUYXJnZXQoY29uc3QgTGF5b3V0UG9pbnQmIGNlbnRl
clBvaW50LCB1bnNpZ25lZCB0b3BQYWRkaW5nLCB1bnNpZ25lZCByaWdodFBhZGRpbmcsIHVuc2ln
bmVkIGJvdHRvbVBhZGRpbmcsIHVuc2lnbmVkIGxlZnRQYWRkaW5nKTsKKyAgICAvLyBNYWtlIGEg
Y29weSB0aGUgSGl0VGVzdFRhcmdldCBpbiBhIG5ldyByZWdpb24gYnkgYXBwbHlpbmcgZ2l2ZW4g
b2Zmc2V0IHRvIGludGVybmFsIHBvaW50IGFuZCBhcmVhLgorICAgIEhpdFRlc3RUYXJnZXQoY29u
c3QgSGl0VGVzdFRhcmdldCYsIGNvbnN0IExheW91dFNpemUmIG9mZnNldCwgUmVuZGVyUmVnaW9u
Kik7CisgICAgSGl0VGVzdFRhcmdldChjb25zdCBIaXRUZXN0VGFyZ2V0Jik7CisgICAgfkhpdFRl
c3RUYXJnZXQoKTsKKyAgICBIaXRUZXN0VGFyZ2V0JiBvcGVyYXRvcj0oY29uc3QgSGl0VGVzdFRh
cmdldCYpOwogCiAgICAgTGF5b3V0UG9pbnQgcG9pbnQoKSBjb25zdCB7IHJldHVybiBtX3BvaW50
OyB9CiAgICAgSW50UG9pbnQgcm91bmRlZFBvaW50KCkgY29uc3QgeyByZXR1cm4gcm91bmRlZElu
dFBvaW50KG1fcG9pbnQpOyB9CkBAIC0xMDIsNyArMTAyLDcgQEAgcHJpdmF0ZToKICAgICBib29s
IG1faXNSZWN0aWxpbmVhcjsKIH07CiAKLWNsYXNzIEhpdFRlc3RSZXN1bHQgOiBwdWJsaWMgSGl0
VGVzdFBvaW50IHsKK2NsYXNzIEhpdFRlc3RSZXN1bHQgOiBwdWJsaWMgSGl0VGVzdFRhcmdldCB7
CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPiBOb2RlU2V0
OwogCkBAIC0xMTAsNyArMTEwLDcgQEAgcHVibGljOgogICAgIEhpdFRlc3RSZXN1bHQoY29uc3Qg
TGF5b3V0UG9pbnQmKTsKICAgICAvLyBQYXNzIG5vbi1uZWdhdGl2ZSBwYWRkaW5nIHZhbHVlcyB0
byBwZXJmb3JtIGEgcmVjdC1iYXNlZCBoaXQgdGVzdC4KICAgICBIaXRUZXN0UmVzdWx0KGNvbnN0
IExheW91dFBvaW50JiBjZW50ZXJQb2ludCwgdW5zaWduZWQgdG9wUGFkZGluZywgdW5zaWduZWQg
cmlnaHRQYWRkaW5nLCB1bnNpZ25lZCBib3R0b21QYWRkaW5nLCB1bnNpZ25lZCBsZWZ0UGFkZGlu
ZywgU2hhZG93Q29udGVudEZpbHRlclBvbGljeSk7Ci0gICAgSGl0VGVzdFJlc3VsdChjb25zdCBI
aXRUZXN0UG9pbnQmLCBTaGFkb3dDb250ZW50RmlsdGVyUG9saWN5KTsKKyAgICBIaXRUZXN0UmVz
dWx0KGNvbnN0IEhpdFRlc3RUYXJnZXQmLCBTaGFkb3dDb250ZW50RmlsdGVyUG9saWN5KTsKICAg
ICBIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKICAgICB+SGl0VGVzdFJlc3Vs
dCgpOwogICAgIEhpdFRlc3RSZXN1bHQmIG9wZXJhdG9yPShjb25zdCBIaXRUZXN0UmVzdWx0Jik7
CkBAIC0xMjQsNyArMTI0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRUb05vblNoYWRvd0Fu
Y2VzdG9yKCk7CiAKLSAgICBjb25zdCBIaXRUZXN0UG9pbnQmIGhpdFRlc3RQb2ludCgpIGNvbnN0
IHsgcmV0dXJuICp0aGlzOyB9CisgICAgY29uc3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0KCkgY29u
c3QgeyByZXR1cm4gKnRoaXM7IH0KICAgICBTaGFkb3dDb250ZW50RmlsdGVyUG9saWN5IHNoYWRv
d0NvbnRlbnRGaWx0ZXJQb2xpY3koKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd0NvbnRlbnRGaWx0
ZXJQb2xpY3k7IH0KIAogICAgIHZvaWQgc2V0SW5uZXJOb2RlKE5vZGUqKTsKQEAgLTE2Niw4ICsx
NjYsOCBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgaXMgcmVjdC1iYXNl
ZCBoaXQgdGVzdCBhbmQgbmVlZHMgdG8gY29udGludWUgdW50aWwgdGhlIHJlY3QgaXMgZnVsbHkK
ICAgICAvLyBlbmNsb3NlZCBieSB0aGUgYm91bmRhcmllcyBvZiBhIG5vZGUuCi0gICAgYm9vbCBh
ZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBv
aW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFJlY3QmID0gTGF5b3V0UmVjdCgpKTsKLSAgICBi
b29sIGFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSosIGNvbnN0IEhpdFRlc3RQb2lu
dCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgYm9vbCBhZGROb2Rl
VG9SZWN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqLCBjb25zdCBIaXRUZXN0VGFyZ2V0JiB0YXJnZXRJ
bkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UmVjdCYgPSBMYXlvdXRSZWN0KCkpOworICAgIGJvb2wg
YWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChOb2RlKiwgY29uc3QgSGl0VGVzdFRhcmdldCYg
dGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQgYXBwZW5kKGNv
bnN0IEhpdFRlc3RSZXN1bHQmKTsKIAogICAgIC8vIElmIG1fcmVjdEJhc2VkVGVzdFJlc3VsdCBp
cyAwIHRoZW4gc2V0IGl0IHRvIGEgbmV3IE5vZGVTZXQuIFJldHVybiAqbV9yZWN0QmFzZWRUZXN0
UmVzdWx0LiBMYXp5IGFsbG9jYXRpb24gbWFrZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUJveC5jcHAKaW5kZXggMDhiZmQ2OTcwMzJhNmM1ZjdjOGVhOWVlYTQ1YjkzNzczN2IzNWVlNi4u
NDE0ZTQ5YWY4MDY0ZGEwODRjMDVlMzk5ZmFhMDM0ZDRmODk5YzRjMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUJveC5jcHAKQEAgLTI0MiwxMiArMjQyLDEyIEBAIHZvaWQgSW5saW5l
Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50
T2Zmc2V0LCBMYXlvCiAgICAgfQogfQogCi1ib29sIElubGluZUJveDo6bm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3Qg
SGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgLyogbGluZVRvcCAqLywgTGF5b3V0VW5pdCAvKmxpbmVC
b3R0b20qLykKK2Jvb2wgSW5saW5lQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0VGFyZ2V0JiB0
YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBM
YXlvdXRVbml0IC8qIGxpbmVUb3AgKi8sIExheW91dFVuaXQgLypsaW5lQm90dG9tKi8pCiB7CiAg
ICAgLy8gSGl0IHRlc3QgYWxsIHBoYXNlcyBvZiByZXBsYWNlZCBlbGVtZW50cyBhdG9taWNhbGx5
LCBhcyB0aG91Z2ggdGhlIHJlcGxhY2VkIGVsZW1lbnQgZXN0YWJsaXNoZWQgaXRzCiAgICAgLy8g
b3duIHN0YWNraW5nIGNvbnRleHQuICAoU2VlIEFwcGVuZGl4IEUuMiwgc2VjdGlvbiA2LjQgb24g
aW5saW5lIGJsb2NrL3RhYmxlIGVsZW1lbnRzIGluIHRoZSBDU1MyLjEKICAgICAvLyBzcGVjaWZp
Y2F0aW9uLikKLSAgICByZXR1cm4gcmVuZGVyZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQs
IHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0KTsKKyAgICByZXR1cm4gcmVuZGVy
ZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLCBhY2N1bXVs
YXRlZE9mZnNldCk7CiB9CiAKIGNvbnN0IFJvb3RJbmxpbmVCb3gqIElubGluZUJveDo6cm9vdCgp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKaW5kZXggMGVkYWIyYzMzZjNh
M2VhOTBmOGVlYWRkZDBiMWRiZDI0ZTQzMTlmNS4uYzQzNjE4MTU2ODNkOTM5ZDhmOGE1MTNjNmNl
ZDc4NDJkODM0MjhhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaApAQCAtOTUs
NyArOTUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0
IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBs
aW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0
VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSk7CiAKICAg
ICAvLyBPdmVybG9hZGVkIG5ldyBvcGVyYXRvci4KICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6
ZV90LCBSZW5kZXJBcmVuYSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZUZsb3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dC
b3guY3BwCmluZGV4IGE5NmY2MTIyNTg0M2E5NzBmMmZmNmJiNzk0NGJkOWNlZjkxNmE5YjYuLjU0
OWM0OGVjN2I1MTBkNmViZTc4MTNiMTA4ZDhlMmMxMDcyZTYwOGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKQEAgLTk3MCwxOCArOTcwLDE4IEBAIHZvaWQg
SW5saW5lRmxvd0JveDo6c2V0T3ZlcmZsb3dGcm9tTG9naWNhbFJlY3RzKGNvbnN0IExheW91dFJl
Y3QmIGxvZ2ljYWxMYXlvdXRPCiAgICAgc2V0VmlzdWFsT3ZlcmZsb3codmlzdWFsT3ZlcmZsb3cs
IGxpbmVUb3AsIGxpbmVCb3R0b20pOwogfQogCi1ib29sIElubGluZUZsb3dCb3g6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJv
dHRvbSkKK2Jvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdFRhcmdldCYg
dGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwg
TGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pCiB7CiAgICAgTGF5b3V0
UmVjdCBvdmVyZmxvd1JlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KGxpbmVUb3AsIGxpbmVCb3R0b20p
KTsKICAgICBmbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKICAgICBvdmVyZmxvd1Jl
Y3QubW92ZUJ5KGFjY3VtdWxhdGVkT2Zmc2V0KTsKLSAgICBpZiAoIXBvaW50SW5Db250YWluZXIu
aW50ZXJzZWN0cyhvdmVyZmxvd1JlY3QpKQorICAgIGlmICghdGFyZ2V0SW5Db250YWluZXIuaW50
ZXJzZWN0cyhvdmVyZmxvd1JlY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBD
aGVjayBjaGlsZHJlbiBmaXJzdC4KICAgICBmb3IgKElubGluZUJveCogY3VyciA9IGxhc3RDaGls
ZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldk9uTGluZSgpKSB7Ci0gICAgICAgIGlmICgoY3Vy
ci0+cmVuZGVyZXIoKS0+aXNUZXh0KCkgfHwgIWN1cnItPmJveE1vZGVsT2JqZWN0KCktPmhhc1Nl
bGZQYWludGluZ0xheWVyKCkpICYmIGN1cnItPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwg
cG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGxpbmVUb3AsIGxpbmVCb3R0b20p
KSB7Ci0gICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwg
cG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0
KSk7CisgICAgICAgIGlmICgoY3Vyci0+cmVuZGVyZXIoKS0+aXNUZXh0KCkgfHwgIWN1cnItPmJv
eE1vZGVsT2JqZWN0KCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkpICYmIGN1cnItPm5vZGVBdFBv
aW50KHJlcXVlc3QsIHJlc3VsdCwgdGFyZ2V0SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0
LCBsaW5lVG9wLCBsaW5lQm90dG9tKSkgeworICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRl
SGl0VGVzdFJlc3VsdChyZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91
dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMTAwOSw5ICsxMDA5LDkgQEAgYm9vbCBJbmxpbmVGbG93Qm94Ojpu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmUKICAgICBmbGlwRm9yV3JpdGluZ01vZGUocmVjdCk7CiAgICAgcmVjdC5tb3ZlQnkoYWNjdW11
bGF0ZWRPZmZzZXQpOwogCi0gICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBwb2ludElu
Q29udGFpbmVyLmludGVyc2VjdHMocmVjdCkpIHsKLSAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRl
SGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShwb2ludEluQ29udGFpbmVy
LnBvaW50KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7IC8vIERvbid0IGFk
ZCBpbiBtX3ggb3IgbV95IGhlcmUsIHdlIHdhbnQgY29vcmRzIGluIHRoZSBjb250YWluaW5nIGJs
b2NrJ3Mgc3BhY2UuCi0gICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RS
ZXN1bHQocmVuZGVyZXIoKS0+bm9kZSgpLCBwb2ludEluQ29udGFpbmVyLCByZWN0KSkKKyAgICBp
ZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIHRhcmdldEluQ29udGFpbmVyLmludGVyc2VjdHMo
cmVjdCkpIHsKKyAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IGZsaXBGb3JXcml0aW5nTW9kZSh0YXJnZXRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRT
aXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOyAvLyBEb24ndCBhZGQgaW4gbV94IG9yIG1feSBoZXJl
LCB3ZSB3YW50IGNvb3JkcyBpbiB0aGUgY29udGFpbmluZyBibG9jaydzIHNwYWNlLgorICAgICAg
ICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KHJlbmRlcmVyKCktPm5v
ZGUoKSwgdGFyZ2V0SW5Db250YWluZXIsIHJlY3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAppbmRleCAy
MGY1OWQ3MjNjYzA4NDM0ZmJlMDQzYmMxYzQ4MjhkNjVlMDc2ZjRkLi40ZjAwNGFiM2ExYTU5MzNh
ZTgzYzg3ZjMyNWJiNmY3OTZmYTNjYzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVGbG93Qm94LmgKQEAgLTExMyw3ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludEZp
bGxMYXllcihjb25zdCBQYWludEluZm8mLCBjb25zdCBDb2xvciYsIGNvbnN0IEZpbGxMYXllcios
IGNvbnN0IExheW91dFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92
ZXIpOwogICAgIHZvaWQgcGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiwgUmVuZGVyU3R5
bGUqLCBTaGFkb3dTdHlsZSwgY29uc3QgTGF5b3V0UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBw
YWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYsIExheW91dFVuaXQgbGluZVRvcCwg
TGF5b3V0VW5pdCBsaW5lQm90dG9tKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiBw
b2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExh
eW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0
IGxpbmVCb3R0b20pIE9WRVJSSURFOwogCiAgICAgYm9vbCBib3hTaGFkb3dDYW5CZUFwcGxpZWRU
b0JhY2tncm91bmQoY29uc3QgRmlsbExheWVyJikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCA3ZDYzMDMxZGFkODU5NzRhNjA3NjQyNjE2
MjI3NDA2MWY4OGE3YTQwLi4xMDZlMzIxMWU2ZjZiNzRkYmI3OTUwMGVmNTJiMzRmNjZjNGU2OWI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCkBAIC0zNDks
NyArMzQ5LDcgQEAgYm9vbCBJbmxpbmVUZXh0Qm94Ojppc0xpbmVCcmVhaygpIGNvbnN0CiAgICAg
cmV0dXJuIHJlbmRlcmVyKCktPmlzQlIoKSB8fCAocmVuZGVyZXIoKS0+c3R5bGUoKS0+cHJlc2Vy
dmVOZXdsaW5lKCkgJiYgbGVuKCkgPT0gMSAmJiAoKnRleHRSZW5kZXJlcigpLT50ZXh0KCkpW3N0
YXJ0KCldID09ICdcbicpOwogfQogCi1ib29sIElubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgTGF5b3V0VW5pdCAvKiBsaW5lVG9wICovLCBMYXlvdXRVbml0IC8qbGluZUJvdHRvbSov
KQorYm9vbCBJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCAv
KiBsaW5lVG9wICovLCBMYXlvdXRVbml0IC8qbGluZUJvdHRvbSovKQogewogICAgIGlmIChpc0xp
bmVCcmVhaygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNTcsOSArMzU3LDkgQEAgYm9v
bCBJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgY28KICAgICBGbG9hdFBvaW50IGJveE9yaWdpbiA9IGxvY2F0aW9u
SW5jbHVkaW5nRmxpcHBpbmcoKTsKICAgICBib3hPcmlnaW4ubW92ZUJ5KGFjY3VtdWxhdGVkT2Zm
c2V0KTsKICAgICBGbG9hdFJlY3QgcmVjdChib3hPcmlnaW4sIHNpemUoKSk7Ci0gICAgaWYgKG1f
dHJ1bmNhdGlvbiAhPSBjRnVsbFRydW5jYXRpb24gJiYgdmlzaWJsZVRvSGl0VGVzdGluZygpICYm
IHBvaW50SW5Db250YWluZXIuaW50ZXJzZWN0cyhyZWN0KSkgewotICAgICAgICByZW5kZXJlcigp
LT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKHBvaW50SW5D
b250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsKLSAg
ICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigp
LT5ub2RlKCksIHBvaW50SW5Db250YWluZXIsIHJlY3QpKQorICAgIGlmIChtX3RydW5jYXRpb24g
IT0gY0Z1bGxUcnVuY2F0aW9uICYmIHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiB0YXJnZXRJbkNv
bnRhaW5lci5pbnRlcnNlY3RzKHJlY3QpKSB7CisgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhp
dFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUodGFyZ2V0SW5Db250YWluZXIu
cG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsKKyAgICAgICAgaWYg
KCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLT5ub2RlKCks
IHRhcmdldEluQ29udGFpbmVyLCByZWN0KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guaAppbmRleCBhM2U3NjMwZTZhZTQ1YTFkNzIyNzdkYzhiZGZhMTU2YzkyNGRiYzE1Li4xYmI4
ZDYzYTczMDdkOTI0YjM2NzEyODE2ODFlYzQ0ZjI1MzZjNmFiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKQEAgLTExNSw3ICsxMTUsNyBAQCBwdWJsaWM6CiAKIHBy
b3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0
UG9pbnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSk7Ci0gICAg
dmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQg
bGluZUJvdHRvbSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRh
cmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExh
eW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBPVkVSUklERTsKIAogcHVi
bGljOgogICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlcigpIGNvbnN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggMGU0YTc3YTc4Y2NmZGIxMTI2MWI3NTlk
M2UxOWVhMGE0ZDhiNjUxMS4uYWJlYzE2YjFlMjBkNmQ1YmI2YTMyYWQxMWUyYjAzZmFiNWVmMzg0
OCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC00NjQwLDE1
ICs0NjQwLDE1IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmdldENsZWFyRGVsdGEoUmVuZGVy
Qm94KiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLWJvb2wgUmVuZGVyQmxvY2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChIaXRUZXN0UmVz
dWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpCitib29sIFJlbmRlckJsb2NrOjppc1BvaW50
SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2lu
dCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCkKIHsKICAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICByZXR1cm4gbGF5ZXIoKS0+aGl0VGVzdE92ZXJmbG93Q29udHJvbHMocmVzdWx0LCBy
b3VuZGVkSW50UG9pbnQocG9pbnRJbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRl
ZE9mZnNldCkpKTsKKyAgICByZXR1cm4gbGF5ZXIoKS0+aGl0VGVzdE92ZXJmbG93Q29udHJvbHMo
cmVzdWx0LCByb3VuZGVkSW50UG9pbnQodGFyZ2V0SW5Db250YWluZXIgLSB0b0xheW91dFNpemUo
YWNjdW11bGF0ZWRPZmZzZXQpKSk7CiB9CiAKLWJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNv
bnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRl
ckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwg
Y29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRl
c3RBY3Rpb24pCiB7CiAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbihhY2N1bXVsYXRl
ZE9mZnNldCArIGxvY2F0aW9uKCkpOwogICAgIExheW91dFNpemUgbG9jYWxPZmZzZXQgPSB0b0xh
eW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbik7CkBAIC00NjU4LDIxICs0NjU4LDIxIEBAIGJvb2wg
UmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1CiAgICAgICAgIExheW91dFJlY3Qgb3ZlcmZsb3dCb3ggPSB2aXN1
YWxPdmVyZmxvd1JlY3QoKTsKICAgICAgICAgZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93Qm94
KTsKICAgICAgICAgb3ZlcmZsb3dCb3gubW92ZUJ5KGFkanVzdGVkTG9jYXRpb24pOwotICAgICAg
ICBpZiAoIXBvaW50SW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxvd0JveCkpCisgICAgICAg
IGlmICghdGFyZ2V0SW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxvd0JveCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKChoaXRUZXN0QWN0aW9uID09IEhp
dFRlc3RCbG9ja0JhY2tncm91bmQgfHwgaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9j
a0JhY2tncm91bmQpICYmIGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChyZXN1bHQsIHBvaW50SW5D
b250YWluZXIucG9pbnQoKSwgYWRqdXN0ZWRMb2NhdGlvbikpIHsKLSAgICAgICAgdXBkYXRlSGl0
VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIGxvY2FsT2Zmc2V0
KTsKKyAgICBpZiAoKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBo
aXRUZXN0QWN0aW9uID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgaXNQb2ludElu
T3ZlcmZsb3dDb250cm9sKHJlc3VsdCwgdGFyZ2V0SW5Db250YWluZXIucG9pbnQoKSwgYWRqdXN0
ZWRMb2NhdGlvbikpIHsKKyAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRhcmdl
dEluQ29udGFpbmVyLnBvaW50KCkgLSBsb2NhbE9mZnNldCk7CiAgICAgICAgIC8vIEZJWE1FOiBp
c1BvaW50SW5PdmVyZmxvd0NvbnRyb2woKSBkb2Vzbid0IGhhbmRsZSByZWN0LWJhc2VkIHRlc3Rz
IHlldC4KLSAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChu
b2RlKCksIHBvaW50SW5Db250YWluZXIpKQorICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9S
ZWN0QmFzZWRUZXN0UmVzdWx0KG5vZGUoKSwgdGFyZ2V0SW5Db250YWluZXIpKQogICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBJZiB3ZSBoYXZlIGNsaXBwaW5nLCB0aGVu
IHdlIGNhbid0IGhhdmUgYW55IHNwaWxsb3V0LgogICAgIGJvb2wgdXNlT3ZlcmZsb3dDbGlwID0g
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIWhhc1NlbGZQYWludGluZ0xheWVyKCk7CiAgICAgYm9vbCB1
c2VDbGlwID0gKGhhc0NvbnRyb2xDbGlwKCkgfHwgdXNlT3ZlcmZsb3dDbGlwKTsKLSAgICBib29s
IGNoZWNrQ2hpbGRyZW4gPSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJvbENsaXAoKSA/IHBvaW50SW5D
b250YWluZXIuaW50ZXJzZWN0cyhjb250cm9sQ2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbikpIDog
cG9pbnRJbkNvbnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2Nh
dGlvbiwgcG9pbnRJbkNvbnRhaW5lci5yZWdpb24oKSwgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJT
aXplKSkpOworICAgIGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlwIHx8IChoYXNDb250cm9s
Q2xpcCgpID8gdGFyZ2V0SW5Db250YWluZXIuaW50ZXJzZWN0cyhjb250cm9sQ2xpcFJlY3QoYWRq
dXN0ZWRMb2NhdGlvbikpIDogdGFyZ2V0SW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxvd0Ns
aXBSZWN0KGFkanVzdGVkTG9jYXRpb24sIHRhcmdldEluQ29udGFpbmVyLnJlZ2lvbigpLCBJbmNs
dWRlT3ZlcmxheVNjcm9sbGJhclNpemUpKSk7CiAgICAgaWYgKGNoZWNrQ2hpbGRyZW4pIHsKICAg
ICAgICAgLy8gSGl0IHRlc3QgZGVzY2VuZGFudHMgZmlyc3QuCiAgICAgICAgIExheW91dFNpemUg
c2Nyb2xsZWRPZmZzZXQobG9jYWxPZmZzZXQpOwpAQCAtNDY4MSwxNCArNDY4MSwxNCBAQCBib29s
IFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlc3VsdCYgcmVzdQogCiAgICAgICAgIC8vIEhpdCB0ZXN0IGNvbnRlbnRzIGlmIHdl
IGRvbid0IGhhdmUgY29sdW1ucy4KICAgICAgICAgaWYgKCFoYXNDb2x1bW5zKCkpIHsKLSAgICAg
ICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFp
bmVyLCB0b0xheW91dFBvaW50KHNjcm9sbGVkT2Zmc2V0KSwgaGl0VGVzdEFjdGlvbikpIHsKLSAg
ICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5l
ci5wb2ludCgpIC0gbG9jYWxPZmZzZXQpOworICAgICAgICAgICAgaWYgKGhpdFRlc3RDb250ZW50
cyhyZXF1ZXN0LCByZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLCB0b0xheW91dFBvaW50KHNjcm9s
bGVkT2Zmc2V0KSwgaGl0VGVzdEFjdGlvbikpIHsKKyAgICAgICAgICAgICAgICB1cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgdGFyZ2V0SW5Db250YWluZXIucG9pbnQoKSAtIGxvY2FsT2Zmc2V0
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RGbG9hdCAmJiBoaXRUZXN0RmxvYXRzKHJl
cXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdG9MYXlvdXRQb2ludChzY3JvbGxlZE9m
ZnNldCkpKQorICAgICAgICAgICAgaWYgKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEZsb2F0ICYm
IGhpdFRlc3RGbG9hdHMocmVxdWVzdCwgcmVzdWx0LCB0YXJnZXRJbkNvbnRhaW5lciwgdG9MYXlv
dXRQb2ludChzY3JvbGxlZE9mZnNldCkpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9IGVsc2UgaWYgKGhpdFRlc3RDb2x1bW5zKHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJ
bkNvbnRhaW5lciwgdG9MYXlvdXRQb2ludChzY3JvbGxlZE9mZnNldCksIGhpdFRlc3RBY3Rpb24p
KSB7Ci0gICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRp
bmdNb2RlKHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIGxvY2FsT2Zmc2V0KSk7CisgICAgICAg
IH0gZWxzZSBpZiAoaGl0VGVzdENvbHVtbnMocmVxdWVzdCwgcmVzdWx0LCB0YXJnZXRJbkNvbnRh
aW5lciwgdG9MYXlvdXRQb2ludChzY3JvbGxlZE9mZnNldCksIGhpdFRlc3RBY3Rpb24pKSB7Cisg
ICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2Rl
KHRhcmdldEluQ29udGFpbmVyLnBvaW50KCkgLSBsb2NhbE9mZnNldCkpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC00Njk2LDkgKzQ2OTYsOSBAQCBib29s
IFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlc3VsdCYgcmVzdQogICAgIC8vIE5vdyBoaXQgdGVzdCBvdXIgYmFja2dyb3VuZAog
ICAgIGlmIChoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgaGl0VGVz
dEFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpIHsKICAgICAgICAgTGF5b3V0
UmVjdCBib3VuZHNSZWN0KGFkanVzdGVkTG9jYXRpb24sIHNpemUoKSk7Ci0gICAgICAgIGlmICh2
aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcG9pbnRJbkNvbnRhaW5lci5pbnRlcnNlY3RzKGJvdW5k
c1JlY3QpKSB7Ci0gICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZv
cldyaXRpbmdNb2RlKHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIGxvY2FsT2Zmc2V0KSk7Ci0g
ICAgICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5vZGUo
KSwgcG9pbnRJbkNvbnRhaW5lciwgYm91bmRzUmVjdCkpCisgICAgICAgIGlmICh2aXNpYmxlVG9I
aXRUZXN0aW5nKCkgJiYgdGFyZ2V0SW5Db250YWluZXIuaW50ZXJzZWN0cyhib3VuZHNSZWN0KSkg
eworICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5n
TW9kZSh0YXJnZXRJbkNvbnRhaW5lci5wb2ludCgpIC0gbG9jYWxPZmZzZXQpKTsKKyAgICAgICAg
ICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCB0YXJn
ZXRJbkNvbnRhaW5lciwgYm91bmRzUmVjdCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICB9CkBAIC00NzA2LDcgKzQ3MDYsNyBAQCBib29sIFJlbmRlckJsb2Nr
Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
dCYgcmVzdQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJCbG9jazo6aGl0VGVz
dEZsb2F0cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBv
aW50JiBhY2N1bXVsYXRlZE9mZnNldCkKK2Jvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RGbG9hdHMo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCkKIHsKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC00NzI1LDggKzQ3MjUsOCBAQCBib29sIFJlbmRlckJsb2NrOjpo
aXRUZXN0RmxvYXRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0
JiByZQogICAgICAgICAgICAgTGF5b3V0VW5pdCB4T2Zmc2V0ID0geFBvc2l0aW9uRm9yRmxvYXRJ
bmNsdWRpbmdNYXJnaW4oZmxvYXRpbmdPYmplY3QpIC0gZmxvYXRpbmdPYmplY3QtPm1fcmVuZGVy
ZXItPngoKTsKICAgICAgICAgICAgIExheW91dFVuaXQgeU9mZnNldCA9IHlQb3NpdGlvbkZvckZs
b2F0SW5jbHVkaW5nTWFyZ2luKGZsb2F0aW5nT2JqZWN0KSAtIGZsb2F0aW5nT2JqZWN0LT5tX3Jl
bmRlcmVyLT55KCk7CiAgICAgICAgICAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZs
b2F0Rm9yV3JpdGluZ01vZGVGb3JDaGlsZChmbG9hdGluZ09iamVjdCwgYWRqdXN0ZWRMb2NhdGlv
biArIExheW91dFNpemUoeE9mZnNldCwgeU9mZnNldCkpOwotICAgICAgICAgICAgaWYgKGZsb2F0
aW5nT2JqZWN0LT5tX3JlbmRlcmVyLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNv
bnRhaW5lciwgY2hpbGRQb2ludCkpIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVz
dWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGNoaWxk
UG9pbnQpKTsKKyAgICAgICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+bV9yZW5kZXJlci0+aGl0
VGVzdChyZXF1ZXN0LCByZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLCBjaGlsZFBvaW50KSkgewor
ICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCB0YXJnZXRJbkNvbnRh
aW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGNoaWxkUG9pbnQpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDc5NCw0OCArNDc5
NCw0OCBAQCBwcml2YXRlOgogICAgIExheW91dFJlY3QgbV9jb2xSZWN0OwogfTsKIAotYm9vbCBS
ZW5kZXJCbG9jazo6aGl0VGVzdENvbHVtbnMoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFp
bmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24g
aGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RDb2x1bW5zKGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRl
c3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKICAgICAvLyBXZSBuZWVk
IHRvIGRvIG11bHRpcGxlIHBhc3NlcywgYnJlYWtpbmcgdXAgb3VyIGhpdCB0ZXN0aW5nIGludG8g
c3RyaXBzLgogICAgIGlmICghaGFzQ29sdW1ucygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBmb3IgKENvbHVtblJlY3RJdGVyYXRvciBpdCgqdGhpcyk7IGl0Lmhhc01vcmUoKTsgaXQu
YWR2YW5jZSgpKSB7Ci0gICAgICAgIExheW91dFJlY3QgaGl0UmVjdCA9IHBvaW50SW5Db250YWlu
ZXIuYm91bmRpbmdCb3goKTsKKyAgICAgICAgTGF5b3V0UmVjdCBoaXRSZWN0ID0gdGFyZ2V0SW5D
b250YWluZXIuYm91bmRpbmdCb3goKTsKICAgICAgICAgTGF5b3V0UmVjdCBjb2xSZWN0ID0gaXQu
Y29sdW1uUmVjdCgpOwogICAgICAgICBjb2xSZWN0Lm1vdmVCeShhY2N1bXVsYXRlZE9mZnNldCk7
Ci0gICAgICAgIGlmIChwb2ludEluQ29udGFpbmVyLmludGVyc2VjdHMoY29sUmVjdCkpIHsKKyAg
ICAgICAgaWYgKHRhcmdldEluQ29udGFpbmVyLmludGVyc2VjdHMoY29sUmVjdCkpIHsKICAgICAg
ICAgICAgIC8vIFRoZSBwb2ludCBpcyBpbnNpZGUgdGhpcyBjb2x1bW4uCiAgICAgICAgICAgICAv
LyBBZGp1c3QgYWNjdW11bGF0ZWRPZmZzZXQgdG8gY2hhbmdlIHdoZXJlIHdlIGhpdCB0ZXN0Lgog
ICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQ7CiAgICAgICAgICAgICBpdC5hZGp1c3Qob2Zm
c2V0KTsKICAgICAgICAgICAgIExheW91dFBvaW50IGZpbmFsTG9jYXRpb24gPSBhY2N1bXVsYXRl
ZE9mZnNldCArIG9mZnNldDsKICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzUmVjdEJhc2VkVGVz
dCgpIHx8IGNvbFJlY3QuY29udGFpbnMoaGl0UmVjdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGZpbmFs
TG9jYXRpb24sIGhpdFRlc3RBY3Rpb24pIHx8IChoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RGbG9h
dCAmJiBoaXRUZXN0RmxvYXRzKHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgZmlu
YWxMb2NhdGlvbikpOworICAgICAgICAgICAgICAgIHJldHVybiBoaXRUZXN0Q29udGVudHMocmVx
dWVzdCwgcmVzdWx0LCB0YXJnZXRJbkNvbnRhaW5lciwgZmluYWxMb2NhdGlvbiwgaGl0VGVzdEFj
dGlvbikgfHwgKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEZsb2F0ICYmIGhpdFRlc3RGbG9hdHMo
cmVxdWVzdCwgcmVzdWx0LCB0YXJnZXRJbkNvbnRhaW5lciwgZmluYWxMb2NhdGlvbikpOwogCi0g
ICAgICAgICAgICBoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFp
bmVyLCBmaW5hbExvY2F0aW9uLCBoaXRUZXN0QWN0aW9uKTsKKyAgICAgICAgICAgIGhpdFRlc3RD
b250ZW50cyhyZXF1ZXN0LCByZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLCBmaW5hbExvY2F0aW9u
LCBoaXRUZXN0QWN0aW9uKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQ29sdW1uUmVjdChMYXlvdXRTaXplJiBv
ZmZzZXQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyKSBjb25zdAordm9pZCBS
ZW5kZXJCbG9jazo6YWRqdXN0Rm9yQ29sdW1uUmVjdChMYXlvdXRTaXplJiBvZmZzZXQsIGNvbnN0
IExheW91dFBvaW50JiB0YXJnZXRJbkNvbnRhaW5lcikgY29uc3QKIHsKICAgICBmb3IgKENvbHVt
blJlY3RJdGVyYXRvciBpdCgqdGhpcyk7IGl0Lmhhc01vcmUoKTsgaXQuYWR2YW5jZSgpKSB7CiAg
ICAgICAgIExheW91dFJlY3QgY29sUmVjdCA9IGl0LmNvbHVtblJlY3QoKTsKLSAgICAgICAgaWYg
KGNvbFJlY3QuY29udGFpbnMocG9pbnRJbkNvbnRhaW5lcikpIHsKKyAgICAgICAgaWYgKGNvbFJl
Y3QuY29udGFpbnModGFyZ2V0SW5Db250YWluZXIpKSB7CiAgICAgICAgICAgICBpdC5hZGp1c3Qo
b2Zmc2V0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIH0KIAotYm9v
bCBSZW5kZXJCbG9jazo6aGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNv
bnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0
aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlckJsb2NrOjpoaXRUZXN0Q29udGVudHMoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3Qg
SGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewogICAgIGlmIChj
aGlsZHJlbklubGluZSgpICYmICFpc1RhYmxlKCkpIHsKICAgICAgICAgLy8gV2UgaGF2ZSB0byBo
aXQtdGVzdCBvdXIgbGluZSBib3hlcy4KLSAgICAgICAgaWYgKG1fbGluZUJveGVzLmhpdFRlc3Qo
dGhpcywgcmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNl
dCwgaGl0VGVzdEFjdGlvbikpCisgICAgICAgIGlmIChtX2xpbmVCb3hlcy5oaXRUZXN0KHRoaXMs
IHJlcXVlc3QsIHJlc3VsdCwgdGFyZ2V0SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBo
aXRUZXN0QWN0aW9uKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIC8vIEhpdCB0ZXN0IG91ciBjaGlsZHJlbi4KQEAgLTQ4NDQsNyArNDg0NCw3IEBAIGJv
b2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RDb250ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYKICAgICAgICAgICAgIGNoaWxkSGl0VGVzdCA9IEhpdFRlc3RD
aGlsZEJsb2NrQmFja2dyb3VuZDsKICAgICAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gbGFz
dENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmdCb3goKSkg
ewogICAgICAgICAgICAgTGF5b3V0UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9k
ZUZvckNoaWxkKGNoaWxkLCBhY2N1bXVsYXRlZE9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoIWNo
aWxkLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmICFjaGlsZC0+aXNGbG9hdGluZygpICYmIGNo
aWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNoaWxk
UG9pbnQsIGNoaWxkSGl0VGVzdCkpCisgICAgICAgICAgICBpZiAoIWNoaWxkLT5oYXNTZWxmUGFp
bnRpbmdMYXllcigpICYmICFjaGlsZC0+aXNGbG9hdGluZygpICYmIGNoaWxkLT5ub2RlQXRQb2lu
dChyZXF1ZXN0LCByZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLCBjaGlsZFBvaW50LCBjaGlsZEhp
dFRlc3QpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCA1M2ExZjIwMmM0YWJhZDYy
YmVjOGFiN2ViNWMwYjQ2ZWRlMjE1ZmM0Li5jMjcwYmFkNjU2MTc2YTM2ZTBiMjI1NjczNGE5YjRj
YTRjMmViOTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtMjIz
LDcgKzIyMyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRqdXN0UmVjdEZvckNvbHVtbnMoTGF5
b3V0UmVjdCYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RGb3JDb2x1bW5zKExheW91
dFNpemUmLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0Rm9yQ29s
dW1uUmVjdChMYXlvdXRTaXplJiBvZmZzZXQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29u
dGFpbmVyKSBjb25zdDsKKyAgICB2b2lkIGFkanVzdEZvckNvbHVtblJlY3QoTGF5b3V0U2l6ZSYg
b2Zmc2V0LCBjb25zdCBMYXlvdXRQb2ludCYgdGFyZ2V0SW5Db250YWluZXIpIGNvbnN0OwogCiAg
ICAgdm9pZCBhZGRDb250aW51YXRpb25XaXRoT3V0bGluZShSZW5kZXJJbmxpbmUqKTsKICAgICBi
b29sIHBhaW50c0NvbnRpbnVhdGlvbk91dGxpbmUoUmVuZGVySW5saW5lKik7CkBAIC00MjMsNyAr
NDIzLDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgRVRleHRBbGlnbiB0ZXh0QWxpZ25tZW50
Rm9yTGluZShib29sIGVuZHNXaXRoU29mdEJyZWFrKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0SW5saW5lRGlyZWN0aW9uTGluZUJvdW5kcyhpbnQgLyogZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudCAqLywgZmxvYXQmIC8qIGxvZ2ljYWxMZWZ0ICovLCBmbG9hdCYgLyogbG9naWNhbFdp
ZHRoICovKSBjb25zdCB7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50
SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVz
dEFjdGlvbikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdl
dEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRl
c3RBY3Rpb24pIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzKCk7CiAKQEAgLTc2MCwxMSArNzYwLDExIEBAIHByaXZhdGU6CiAgICAgTGF5
b3V0VW5pdCBsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oRmxvYXRpbmdPYmplY3Q6OlR5cGUgPSBG
bG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0UmlnaHQpIGNvbnN0OyAKICAgICBMYXlvdXRVbml0IG5l
eHRGbG9hdExvZ2ljYWxCb3R0b21CZWxvdyhMYXlvdXRVbml0KSBjb25zdDsKICAgICAKLSAgICB2
aXJ0dWFsIGJvb2wgaGl0VGVzdENvbHVtbnMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwotICAgIHZpcnR1YWwg
Ym9vbCBoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwotICAgIGJvb2wgaGl0VGVzdEZs
b2F0cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCk7CisgICAgdmlydHVhbCBib29sIGhpdFRlc3RDb2x1bW5zKGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFp
bmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24p
OworICAgIHZpcnR1YWwgYm9vbCBoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7Cisg
ICAgYm9vbCBoaXRUZXN0RmxvYXRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOwogCi0gICAgdmlydHVhbCBib29sIGlzUG9pbnRJbk92
ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5D
b250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCk7CisgICAgdmly
dHVhbCBib29sIGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
TGF5b3V0UG9pbnQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQpOwogCiAgICAgdm9pZCBjb21wdXRlSW5saW5lUHJlZmVycmVkTG9naWNhbFdp
ZHRocygpOwogICAgIHZvaWQgY29tcHV0ZUJsb2NrUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCA5YjNiN2RlODYxNzY0M2My
MDNmYjRmNzUyNzlhZDk3ZTcyOTU1N2E2Li4xYWIzZWU2ZTMzMGU1Y2VlMGNmNGU3YzU5MmNjNDM0
NjI1MzBlMTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtNzQz
LDI1ICs3NDMsMjUgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbXB1dGVDb250ZW50Qm94TG9n
aWNhbEhlaWdodChMYXlvdXRVbml0IGhlaWdodCkgY29uc3QKIH0KIAogLy8gSGl0IFRlc3RpbmcK
LWJvb2wgUmVuZGVyQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlv
biBhY3Rpb24pCitib29sIFJlbmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdFRhcmdldCYg
dGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwg
SGl0VGVzdEFjdGlvbiBhY3Rpb24pCiB7CiAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2NhdGlv
biA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKIAogICAgIC8vIENoZWNrIGtpZHMg
Zmlyc3QuCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBpZiAoIWNoaWxk
LT5oYXNMYXllcigpICYmIGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50
SW5Db250YWluZXIsIGFkanVzdGVkTG9jYXRpb24sIGFjdGlvbikpIHsKLSAgICAgICAgICAgIHVw
ZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xh
eW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOworICAgICAgICBpZiAoIWNoaWxkLT5oYXNMYXll
cigpICYmIGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHRhcmdldEluQ29udGFp
bmVyLCBhZGp1c3RlZExvY2F0aW9uLCBhY3Rpb24pKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgdGFyZ2V0SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6
ZShhZGp1c3RlZExvY2F0aW9uKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgIH0KIAogICAgIC8vIENoZWNrIG91ciBib3VuZHMgbmV4dC4gRm9yIHRoaXMgcHVycG9z
ZSBhbHdheXMgYXNzdW1lIHRoYXQgd2UgY2FuIG9ubHkgYmUgaGl0IGluIHRoZQogICAgIC8vIGZv
cmVncm91bmQgcGhhc2UgKHdoaWNoIGlzIHRydWUgZm9yIHJlcGxhY2VkIGVsZW1lbnRzIGxpa2Ug
aW1hZ2VzKS4KLSAgICBMYXlvdXRSZWN0IGJvdW5kc1JlY3QgPSBib3JkZXJCb3hSZWN0SW5SZWdp
b24ocG9pbnRJbkNvbnRhaW5lci5yZWdpb24oKSk7CisgICAgTGF5b3V0UmVjdCBib3VuZHNSZWN0
ID0gYm9yZGVyQm94UmVjdEluUmVnaW9uKHRhcmdldEluQ29udGFpbmVyLnJlZ2lvbigpKTsKICAg
ICBib3VuZHNSZWN0Lm1vdmVCeShhZGp1c3RlZExvY2F0aW9uKTsKLSAgICBpZiAodmlzaWJsZVRv
SGl0VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3VuZCAmJiBwb2ludEluQ29u
dGFpbmVyLmludGVyc2VjdHMoYm91bmRzUmVjdCkpIHsKLSAgICAgICAgdXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhZGp1
c3RlZExvY2F0aW9uKSk7Ci0gICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRl
c3RSZXN1bHQobm9kZSgpLCBwb2ludEluQ29udGFpbmVyLCBib3VuZHNSZWN0KSkKKyAgICBpZiAo
dmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3VuZCAmJiB0
YXJnZXRJbkNvbnRhaW5lci5pbnRlcnNlY3RzKGJvdW5kc1JlY3QpKSB7CisgICAgICAgIHVwZGF0
ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCB0YXJnZXRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlv
dXRTaXplKGFkanVzdGVkTG9jYXRpb24pKTsKKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRv
UmVjdEJhc2VkVGVzdFJlc3VsdChub2RlKCksIHRhcmdldEluQ29udGFpbmVyLCBib3VuZHNSZWN0
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5oCmluZGV4IGJiYjAzNDQ1MTI2ZDg2NjQxMjdkN2FhMjRjOGUzMTE2Y2YwYjBl
NjkuLjU1ZDNkNTFiMTE5MDIwNjY3ODQ5ZWY5MDY2NDZjNTRjMmRhYWMzMTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTI2Myw3ICsyNjMsNyBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5m
byYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBI
aXRUZXN0QWN0aW9uKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFRhcmdldCYg
dGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwg
SGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIExheW91dFVuaXQgbWluUHJl
ZmVycmVkTG9naWNhbFdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IG1heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKaW5kZXggYTM2NTdmYWUzYTk0YWI0ZTVkMmUy
ZWQ1NDhhNDY4YzdlM2JlNTIxNC4uMTQ2MDQwN2VmMjE0OTBmODhlM2E2NmY4MDg2MDU1OTc1NGFl
ZjgzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVk
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRP
YmplY3QuY3BwCkBAIC0yNjMsMTYgKzI2MywxNiBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0
Ojp2aWV3Q2xlYXJlZCgpCiAgICAgfQogfQogCi1ib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojpu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQor
Ym9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdFRhcmdldCYg
dGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwg
SGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewotICAgIGlmICghUmVuZGVyUGFydDo6bm9k
ZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9m
ZnNldCwgaGl0VGVzdEFjdGlvbikpCisgICAgaWYgKCFSZW5kZXJQYXJ0Ojpub2RlQXRQb2ludChy
ZXF1ZXN0LCByZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0
VGVzdEFjdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghd2lkZ2V0KCkg
fHwgIXdpZGdldCgpLT5pc1BsdWdpblZpZXdCYXNlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
CiAgICAgUGx1Z2luVmlld0Jhc2UqIHZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3QmFzZSo+
KHdpZGdldCgpKTsKLSAgICBJbnRQb2ludCByb3VuZGVkUG9pbnQgPSBwb2ludEluQ29udGFpbmVy
LnJvdW5kZWRQb2ludCgpOworICAgIEludFBvaW50IHJvdW5kZWRQb2ludCA9IHRhcmdldEluQ29u
dGFpbmVyLnJvdW5kZWRQb2ludCgpOwogCiAgICAgaWYgKFNjcm9sbGJhciogaG9yaXpvbnRhbFNj
cm9sbGJhciA9IHZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKSkgewogICAgICAgICBpZiAoaG9y
aXpvbnRhbFNjcm9sbGJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSAmJiBob3Jp
em9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250YWlucyhyb3VuZGVkUG9pbnQpKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCmluZGV4
IGZkNDRlMDgwZmQzNWUyN2ExZDkxNTdlNTQzMzIzM2UzODlhZjNiNWUuLjMzZGQ3YjI2Y2Y3MGZj
NDg4Y2Q1NDMwOGY1ZTYyM2EzMTkxNzg5MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCkBAIC02OSw3ICs2OSw3IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCB2aWV3Q2xlYXJlZCgp
OwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNv
bnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJ
REU7CiAKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKiBzdG9wTm9kZSk7CiAgICAgdmlydHVh
bCBib29sIGxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKiBzdG9wTm9kZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKaW5kZXggMWIwOWNiYjhkMGYxZTEx
MDIxZjQ1NGFkYTkyYTdmMmM2ZmYwMzc5MS4uMDkxZTViMmIwMWMxMGY0ODRhMzcyY2NhZTBhMDU2
OGVlMzIxNmE1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
b3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhy
ZWFkLmNwcApAQCAtMjk5LDEyICsyOTksMTIgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpwYWlu
dEludG9SZWdpb24oUGFpbnRJbmZvJiBwYWludEluZm8sIFJlbmRlclJlZ2lvbiogcmVnaW8KICAg
ICB9CiB9CiAKLWJvb2wgUmVuZGVyRmxvd1RocmVhZDo6aGl0VGVzdFJlZ2lvbihSZW5kZXJSZWdp
b24qIHJlZ2lvbiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpCitib29sIFJlbmRlckZsb3dUaHJlYWQ6OmhpdFRl
c3RSZWdpb24oUmVuZGVyUmVnaW9uKiByZWdpb24sIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldElu
Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpCiB7CiAgICAg
TGF5b3V0UmVjdCByZWdpb25SZWN0KHJlZ2lvbi0+cmVnaW9uUmVjdCgpKTsKICAgICBMYXlvdXRS
ZWN0IHJlZ2lvbk92ZXJmbG93UmVjdCA9IHJlZ2lvbi0+cmVnaW9uT3ZlcmZsb3dSZWN0KCk7CiAg
ICAgTGF5b3V0UmVjdCByZWdpb25DbGlwcGluZ1JlY3QoYWNjdW11bGF0ZWRPZmZzZXQgKyAocmVn
aW9uT3ZlcmZsb3dSZWN0LmxvY2F0aW9uKCkgLSByZWdpb25SZWN0LmxvY2F0aW9uKCkpLCByZWdp
b25PdmVyZmxvd1JlY3Quc2l6ZSgpKTsKLSAgICBpZiAoIXJlZ2lvbkNsaXBwaW5nUmVjdC5jb250
YWlucyhwb2ludEluQ29udGFpbmVyLnBvaW50KCkpKQorICAgIGlmICghcmVnaW9uQ2xpcHBpbmdS
ZWN0LmNvbnRhaW5zKHRhcmdldEluQ29udGFpbmVyLnBvaW50KCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBMYXlvdXRTaXplIHJlbmRlckZsb3dUaHJlYWRPZmZzZXQ7CkBAIC0zMTgs
MTAgKzMxOCwxMCBAQCBib29sIFJlbmRlckZsb3dUaHJlYWQ6OmhpdFRlc3RSZWdpb24oUmVuZGVy
UmVnaW9uKiByZWdpb24sIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JgogICAgIC8vIEFsd2F5cyBpZ25v
cmUgY2xpcHBpbmcsIHNpbmNlIHRoZSBSZW5kZXJGbG93VGhyZWFkIGhhcyBub3RoaW5nIHRvIGRv
IHdpdGggdGhlIGJvdW5kcyBvZiB0aGUgRnJhbWVWaWV3LgogICAgIEhpdFRlc3RSZXF1ZXN0IG5l
d1JlcXVlc3QocmVxdWVzdC50eXBlKCkgfCBIaXRUZXN0UmVxdWVzdDo6SWdub3JlQ2xpcHBpbmcp
OwogCi0gICAgLy8gTWFrZSBhIG5ldyB0ZW1wb3JhcnkgaGl0VGVzdFBvaW50IGluIHRoZSBuZXcg
cmVnaW9uLgotICAgIEhpdFRlc3RQb2ludCBuZXdIaXRUZXN0UG9pbnQocG9pbnRJbkNvbnRhaW5l
ciwgLXJlbmRlckZsb3dUaHJlYWRPZmZzZXQsIHJlZ2lvbik7CisgICAgLy8gTWFrZSBhIG5ldyB0
ZW1wb3JhcnkgaGl0VGVzdFRhcmdldCBpbiB0aGUgbmV3IHJlZ2lvbi4KKyAgICBIaXRUZXN0VGFy
Z2V0IG5ld0hpdFRlc3RUYXJnZXQodGFyZ2V0SW5Db250YWluZXIsIC1yZW5kZXJGbG93VGhyZWFk
T2Zmc2V0LCByZWdpb24pOwogCi0gICAgYm9vbCBpc1BvaW50SW5zaWRlRmxvd1RocmVhZCA9IGxh
eWVyKCktPmhpdFRlc3QobmV3UmVxdWVzdCwgbmV3SGl0VGVzdFBvaW50LCByZXN1bHQpOworICAg
IGJvb2wgaXNQb2ludEluc2lkZUZsb3dUaHJlYWQgPSBsYXllcigpLT5oaXRUZXN0KG5ld1JlcXVl
c3QsIG5ld0hpdFRlc3RUYXJnZXQsIHJlc3VsdCk7CiAKICAgICAvLyBGSVhNRTogU2hvdWxkIHdl
IHNldCByZXN1bHQubV9sb2NhbFBvaW50IGJhY2sgdG8gdGhlIFJlbmRlclJlZ2lvbidzIGNvb3Jk
aW5hdGUgc3BhY2Ugb3IgbGVhdmUgaXQgaW4gdGhlIFJlbmRlckZsb3dUaHJlYWQncyBjb29yZGlu
YXRlCiAgICAgLy8gc3BhY2U/IFJpZ2h0IG5vdyBpdCdzIHN0YXlpbmcgaW4gdGhlIFJlbmRlckZs
b3dUaHJlYWQncyBjb29yZGluYXRlIHNwYWNlLCB3aGljaCBtYXkgZW5kIHVwIGJlaW5nIG9rLiBX
ZSB3aWxsIGtub3cgbW9yZSB3aGVuIHdlIGdldCBhcm91bmQgdG8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCmluZGV4IGM3NmVlMDg3MGYyZTY5MGM0NTFhYjI5
ZWJjY2RmYzAyOTlmMWU0ODkuLmY5OTU0NjBmMjIxYzQ5MzBjMmE4YTBlNjMzY2IyOGY3OTkwNjI1
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFk
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaApAQCAt
NzcsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21wdXRlTG9naWNhbEhlaWdodCgpOwog
CiAgICAgdm9pZCBwYWludEludG9SZWdpb24oUGFpbnRJbmZvJiwgUmVuZGVyUmVnaW9uKiwgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKLSAgICBib29sIGhpdFRlc3RSZWdpb24oUmVu
ZGVyUmVnaW9uKiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQpOworICAgIGJvb2wgaGl0VGVzdFJlZ2lvbihSZW5kZXJSZWdpb24qLCBjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0VGFyZ2V0JiBw
b2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOwog
CiAgICAgYm9vbCBoYXNSZWdpb25zKCkgY29uc3QgeyByZXR1cm4gbV9yZWdpb25MaXN0LnNpemUo
KTsgfQogICAgIGJvb2wgaGFzVmFsaWRSZWdpb25zKCkgY29uc3QgeyBBU1NFUlQoIW1fcmVnaW9u
c0ludmFsaWRhdGVkKTsgcmV0dXJuIG1faGFzVmFsaWRSZWdpb25zOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAppbmRleCBjODk1NDc4NjMxMTUyYjAwYjE4
NGZiZjI0ZTIxNGQ1ODg4ZDBkYmIzLi42Y2QxMWI2YmVkYTdjMjE3YjA2MzlhZmU5MjI3ZjZlOWQ0
Njk4OTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVT
ZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAK
QEAgLTE1OCwxMiArMTU4LDEyIEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB9CiAKIGJvb2wg
UmVuZGVyRnJhbWVTZXQ6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCi0gICAgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RB
Y3Rpb24gYWN0aW9uKQorICAgIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVy
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0
aW9uKQogewogICAgIGlmIChhY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGJvb2wgaW5zaWRlID0gUmVuZGVyQm94Ojpub2RlQXRQb2ludChy
ZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBhY3Rp
b24pCisgICAgYm9vbCBpbnNpZGUgPSBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJl
c3VsdCwgdGFyZ2V0SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBhY3Rpb24pCiAgICAg
ICAgIHx8IG1faXNSZXNpemluZzsKIAogICAgIGlmIChpbnNpZGUgJiYgZnJhbWVTZXQoKS0+bm9S
ZXNpemUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1l
U2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuaAppbmRleCA3
ZDY5NzcwZTczNTc2MWM4NjY3YzMzZjA0YjkxZmNhZTFiNTQ2ZjMwLi5mNTE3MDE0YzFmNDU3ODE2
MjdlNzFlZWQ2MWMxMGU4NjIxYjZiMTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRnJhbWVTZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRnJhbWVTZXQuaApAQCAtOTYsNyArOTYsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9v
bCBpc0ZyYW1lU2V0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lk
IGxheW91dCgpOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWlu
ZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFp
bmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24p
IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlv
dXRQb2ludCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0NoaWxkQWxsb3dlZChSZW5kZXJPYmplY3Qq
LCBSZW5kZXJTdHlsZSopIGNvbnN0OwogICAgIHZpcnR1YWwgQ3Vyc29yRGlyZWN0aXZlIGdldEN1
cnNvcihjb25zdCBMYXlvdXRQb2ludCYsIEN1cnNvciYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKaW5kZXggNDhlYTA1NDcwZGRmMDRiZDEwNDJkNWViMzBj
MTZiZmNlNzhkM2IxNC4uOWYxYTBkM2JhNGI3NGZmZmYxMWM4ZTAxZDZlYmZlOTMxMDAxYzhhOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCkBAIC00OTgsMTYgKzQ5
OCwxNiBAQCBIVE1MTWFwRWxlbWVudCogUmVuZGVySW1hZ2U6OmltYWdlTWFwKCkgY29uc3QKICAg
ICByZXR1cm4gaSA/IGktPnRyZWVTY29wZSgpLT5nZXRJbWFnZU1hcChpLT5mYXN0R2V0QXR0cmli
dXRlKHVzZW1hcEF0dHIpKSA6IDA7CiB9CiAKLWJvb2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNv
bnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRl
ckltYWdlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwg
Y29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRl
c3RBY3Rpb24pCiB7Ci0gICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0
UG9pbnQoKSwgcmVzdWx0LnNoYWRvd0NvbnRlbnRGaWx0ZXJQb2xpY3koKSk7Ci0gICAgYm9vbCBp
bnNpZGUgPSBSZW5kZXJSZXBsYWNlZDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgdGVtcFJlc3VsdCwg
cG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pOworICAg
IEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQudGFyZ2V0KCksIHJlc3VsdC5zaGFkb3dD
b250ZW50RmlsdGVyUG9saWN5KCkpOworICAgIGJvb2wgaW5zaWRlID0gUmVuZGVyUmVwbGFjZWQ6
Om5vZGVBdFBvaW50KHJlcXVlc3QsIHRlbXBSZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLCBhY2N1
bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlvbik7CiAKICAgICBpZiAodGVtcFJlc3VsdC5pbm5l
ck5vZGUoKSAmJiBub2RlKCkpIHsKICAgICAgICAgaWYgKEhUTUxNYXBFbGVtZW50KiBtYXAgPSBp
bWFnZU1hcCgpKSB7CiAgICAgICAgICAgICBMYXlvdXRSZWN0IGNvbnRlbnRCb3ggPSBjb250ZW50
Qm94UmVjdCgpOwogICAgICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxIC8gc3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICAgICAgTGF5b3V0UG9pbnQgbWFwTG9jYXRpb24gPSBw
b2ludEluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQp
IC0gbG9jYXRpb25PZmZzZXQoKSAtIHRvTGF5b3V0U2l6ZShjb250ZW50Qm94LmxvY2F0aW9uKCkp
OworICAgICAgICAgICAgTGF5b3V0UG9pbnQgbWFwTG9jYXRpb24gPSB0YXJnZXRJbkNvbnRhaW5l
ci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSAtIGxvY2F0aW9uT2Zm
c2V0KCkgLSB0b0xheW91dFNpemUoY29udGVudEJveC5sb2NhdGlvbigpKTsKICAgICAgICAgICAg
IG1hcExvY2F0aW9uLnNjYWxlKHNjYWxlRmFjdG9yLCBzY2FsZUZhY3Rvcik7CiAKICAgICAgICAg
ICAgIGlmIChtYXAtPm1hcE1vdXNlRXZlbnQobWFwTG9jYXRpb24sIGNvbnRlbnRCb3guc2l6ZSgp
LCB0ZW1wUmVzdWx0KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmgKaW5kZXgg
NmJkZGIwYTU4ZGFmZmI0NzlmZDNiZThhNzc1NTdiZjdhOGIyYzFlMy4uMjJhNTg5M2M3MjJiODQ4
NzA1MmY5YjIxNzcyMGNkMzBmNjJjZTJjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckltYWdlLmgKQEAgLTkyLDcgKzkyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGludCBtaW5p
bXVtUmVwbGFjZWRIZWlnaHQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5p
c2hlZChDYWNoZWRSZXNvdXJjZSopOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBv
aW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0
VGVzdEFjdGlvbikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRh
cmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhp
dFRlc3RBY3Rpb24pIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBib29sIGJveFNoYWRvd1Nob3Vs
ZEJlQXBwbGllZFRvQmFja2dyb3VuZChCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UsIElubGluZUZs
b3dCb3gqKSBjb25zdCBPVkVSUklERTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcklubGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW5saW5lLmNwcAppbmRleCA3YjlmYzJlZmI4YTEwN2U0OTM0ZTUzZDZmYjlhYTc3ZjQ3ZDI2MDAz
Li40M2NmYzU0NDQ4YmJlOGUwMmQzYjA3MTFlZmZmZDE1ODE4MWU5MGExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcApAQCAtNzU2LDkgKzc1Niw5IEBAIGNvbnN0
IGNoYXIqIFJlbmRlcklubGluZTo6cmVuZGVyTmFtZSgpIGNvbnN0CiB9CiAKIGJvb2wgUmVuZGVy
SW5saW5lOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBI
aXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwg
Y29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRl
c3RBY3Rpb24pCiB7Ci0gICAgcmV0dXJuIG1fbGluZUJveGVzLmhpdFRlc3QodGhpcywgcmVxdWVz
dCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFj
dGlvbik7CisgICAgcmV0dXJuIG1fbGluZUJveGVzLmhpdFRlc3QodGhpcywgcmVxdWVzdCwgcmVz
dWx0LCB0YXJnZXRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24p
OwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVySW5saW5lOjpwb3NpdGlvbkZvclBvaW50KGNv
bnN0IExheW91dFBvaW50JiBwb2ludCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbmxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuaAppbmRleCBhOGNjMmYxYmU1MDU3MzgwMmVjNjk3ZWUzMTM0NDIzYTZkYzBkZDcxLi41ZDFm
OTcxYjI4Y2I4NzA5Y2I3ZWVmYTIxZWFkYTUzNzE0NmFiODFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcklubGluZS5oCkBAIC0xMjIsNyArMTIyLDcgQEAgcHJpdmF0ZToKIAogICAg
IHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCi0g
ICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExh
eW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGlzUmVsUG9z
aXRpb25lZCgpIHx8IGlzVHJhbnNwYXJlbnQoKSB8fCBoYXNNYXNrKCkgfHwgaGFzRmlsdGVyKCk7
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggNzRiMGY1
YTY3MDE2ZWZhZWYwOTUwZDMzYjM5ZmMzYjE1MzhmYTM4OS4uYWYxMjBkM2QwNzk2ODFkMzYxOTk4
ZWZmZDBmYjBiNTljYTllMTE1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCkBAIC0xMjYsOSArMTI2LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIGNv
bnN0IGludCBNaW5pbXVtV2lkdGhXaGlsZVJlc2l6aW5nID0gMTAwOwogY29uc3QgaW50IE1pbmlt
dW1IZWlnaHRXaGlsZVJlc2l6aW5nID0gNDA7CiAKLWJvb2wgQ2xpcFJlY3Q6OmludGVyc2VjdHMo
Y29uc3QgSGl0VGVzdFBvaW50JiBoaXRUZXN0UG9pbnQpCitib29sIENsaXBSZWN0OjppbnRlcnNl
Y3RzKGNvbnN0IEhpdFRlc3RUYXJnZXQmIGhpdFRlc3RUYXJnZXQpCiB7Ci0gICAgcmV0dXJuIGhp
dFRlc3RQb2ludC5pbnRlcnNlY3RzKG1fcmVjdCk7CisgICAgcmV0dXJuIGhpdFRlc3RUYXJnZXQu
aW50ZXJzZWN0cyhtX3JlY3QpOwogfQogCiBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVy
Qm94TW9kZWxPYmplY3QqIHJlbmRlcmVyKQpAQCAtMzM4OSwxMCArMzM4OSwxMCBAQCBzdGF0aWMg
aW5saW5lIExheW91dFJlY3QgZnJhbWVWaXNpYmxlUmVjdChSZW5kZXJPYmplY3QqIHJlbmRlcmVy
KQogCiBib29sIFJlbmRlckxheWVyOjpoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCiB7Ci0gICAgcmV0dXJuIGhpdFRlc3QocmVxdWVz
dCwgcmVzdWx0LmhpdFRlc3RQb2ludCgpLCByZXN1bHQpOworICAgIHJldHVybiBoaXRUZXN0KHJl
cXVlc3QsIHJlc3VsdC50YXJnZXQoKSwgcmVzdWx0KTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6
aGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSGl0VGVzdFBvaW50
JiBoaXRUZXN0UG9pbnQsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKK2Jvb2wgUmVuZGVyTGF5ZXI6
OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RUYXJn
ZXQmIGhpdFRlc3RUYXJnZXQsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKIHsKICAgICByZW5kZXJl
cigpLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKICAgICAKQEAgLTM0MDAsNyArMzQwMCw3
IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIGNvbnN0IEhpdFRlc3RQb2ludCYgaGl0CiAgICAgaWYgKCFyZXF1ZXN0Lmlnbm9yZUNsaXBw
aW5nKCkpCiAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChmcmFtZVZpc2libGVSZWN0KHJl
bmRlcmVyKCkpKTsKIAotICAgIFJlbmRlckxheWVyKiBpbnNpZGVMYXllciA9IGhpdFRlc3RMYXll
cih0aGlzLCAwLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RBcmVhLCBoaXRUZXN0UG9pbnQsIGZh
bHNlKTsKKyAgICBSZW5kZXJMYXllciogaW5zaWRlTGF5ZXIgPSBoaXRUZXN0TGF5ZXIodGhpcywg
MCwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0QXJlYSwgaGl0VGVzdFRhcmdldCwgZmFsc2UpOwog
ICAgIGlmICghaW5zaWRlTGF5ZXIpIHsKICAgICAgICAgLy8gV2UgZGlkbid0IGhpdCBhbnkgbGF5
ZXIuIElmIHdlIGFyZSB0aGUgcm9vdCBsYXllciBhbmQgdGhlIG1vdXNlIGlzIC0tIG9yIGp1c3Qg
d2FzIC0tIGRvd24sIAogICAgICAgICAvLyByZXR1cm4gb3Vyc2VsdmVzLiBXZSBkbyB0aGlzIHNv
IG1vdXNlIGV2ZW50cyBjb250aW51ZSBnZXR0aW5nIGRlbGl2ZXJlZCBhZnRlciBhIGRyYWcgaGFz
IApAQCAtMzQ1Miw3ICszNDUyLDcgQEAgc3RhdGljIGRvdWJsZSBjb21wdXRlWk9mZnNldChjb25z
dCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlKQogfQogCiBQYXNzUmVm
UHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gUmVuZGVyTGF5ZXI6OmNyZWF0ZUxvY2FsVHJh
bnNmb3JtU3RhdGUoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5l
ckxheWVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExh
eW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0UG9pbnQmIGhpdFRlc3RQb2ludCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0
JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdFRhcmdldCYgaGl0VGVzdFRhcmdldCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNm
b3JtU3RhdGUqIGNvbnRhaW5lclRyYW5zZm9ybVN0YXRlKSBjb25zdAogewogICAgIFJlZlB0cjxI
aXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU+IHRyYW5zZm9ybVN0YXRlOwpAQCAtMzQ2Miw5ICszNDYy
LDkgQEAgUGFzc1JlZlB0cjxIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU+IFJlbmRlckxheWVyOjpj
cmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKFJlbmQKICAgICAgICAgdHJhbnNmb3JtU3RhdGUgPSBI
aXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6OmNyZWF0ZSgqY29udGFpbmVyVHJhbnNmb3JtU3RhdGUp
OwogICAgICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhjb250YWluZXJMYXllciwgb2Zmc2V0KTsK
ICAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIG5l
ZWQgdG8gbWFrZSB0cmFuc2Zvcm0gc3RhdGUsIHRoZW4gYmFzZSBpdCBvZmYgb2YgaGl0VGVzdFBv
aW50LAorICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIG5lZWQgdG8gbWFr
ZSB0cmFuc2Zvcm0gc3RhdGUsIHRoZW4gYmFzZSBpdCBvZmYgb2YgaGl0VGVzdFRhcmdldCwKICAg
ICAgICAgLy8gd2hpY2ggaXMgcmVsYXRpdmUgdG8gcm9vdExheWVyLgotICAgICAgICB0cmFuc2Zv
cm1TdGF0ZSA9IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTo6Y3JlYXRlKGhpdFRlc3RQb2ludC50
cmFuc2Zvcm1lZFBvaW50KCksIGhpdFRlc3RQb2ludC50cmFuc2Zvcm1lZFJlY3QoKSwgRmxvYXRR
dWFkKGhpdFRlc3RSZWN0KSk7CisgICAgICAgIHRyYW5zZm9ybVN0YXRlID0gSGl0VGVzdGluZ1Ry
YW5zZm9ybVN0YXRlOjpjcmVhdGUoaGl0VGVzdFRhcmdldC50cmFuc2Zvcm1lZFBvaW50KCksIGhp
dFRlc3RUYXJnZXQudHJhbnNmb3JtZWRSZWN0KCksIEZsb2F0UXVhZChoaXRUZXN0UmVjdCkpOwog
ICAgICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIG9mZnNldCk7CiAgICAgfQog
ICAgIApAQCAtMzUwNSwxNiArMzUwNSwxNiBAQCBzdGF0aWMgYm9vbCBpc0hpdENhbmRpZGF0ZShj
b25zdCBSZW5kZXJMYXllciogaGl0TGF5ZXIsIGJvb2wgY2FuRGVwdGhTb3J0LCBkb3VibAogICAg
IHJldHVybiB0cnVlOwogfQogCi0vLyBoaXRUZXN0UG9pbnQgYW5kIGhpdFRlc3RSZWN0IGFyZSBy
ZWxhdGl2ZSB0byByb290TGF5ZXIuCisvLyBoaXRUZXN0VGFyZ2V0IGFuZCBoaXRUZXN0UmVjdCBh
cmUgcmVsYXRpdmUgdG8gcm9vdExheWVyLgogLy8gQSAnZmxhdHRlbmluZycgbGF5ZXIgaXMgb25l
IHByZXNlcnZlczNEKCkgPT0gZmFsc2UuCiAvLyB0cmFuc2Zvcm1TdGF0ZS5tX2FjY3VtdWxhdGVk
VHJhbnNmb3JtIGhvbGRzIHRoZSB0cmFuc2Zvcm0gZnJvbSB0aGUgY29udGFpbmluZyBmbGF0dGVu
aW5nIGxheWVyLgotLy8gdHJhbnNmb3JtU3RhdGUubV9sYXN0UGxhbmFyUG9pbnQgaXMgdGhlIGhp
dFRlc3RQb2ludCBpbiB0aGUgcGxhbmUgb2YgdGhlIGNvbnRhaW5pbmcgZmxhdHRlbmluZyBsYXll
ci4KKy8vIHRyYW5zZm9ybVN0YXRlLm1fbGFzdFBsYW5hclBvaW50IGlzIHRoZSBoaXRUZXN0VGFy
Z2V0IGluIHRoZSBwbGFuZSBvZiB0aGUgY29udGFpbmluZyBmbGF0dGVuaW5nIGxheWVyLgogLy8g
dHJhbnNmb3JtU3RhdGUubV9sYXN0UGxhbmFyUXVhZCBpcyB0aGUgaGl0VGVzdFJlY3QgYXMgYSBx
dWFkIGluIHRoZSBwbGFuZSBvZiB0aGUgY29udGFpbmluZyBmbGF0dGVuaW5nIGxheWVyLgogLy8g
CiAvLyBJZiB6T2Zmc2V0IGlzIG5vbi1udWxsICh3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2Fs
bGVyIHdhbnRzIHogb2Zmc2V0IGluZm9ybWF0aW9uKSwgCiAvLyAgKnpPZmZzZXQgb24gcmV0dXJu
IGlzIHRoZSB6IG9mZnNldCBvZiB0aGUgaGl0IHBvaW50IHJlbGF0aXZlIHRvIHRoZSBjb250YWlu
aW5nIGZsYXR0ZW5pbmcgbGF5ZXIuCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RM
YXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIs
IGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBo
aXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdFBvaW50JiBoaXRUZXN0UG9pbnQsIGJvb2wgYXBwbGll
ZFRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0VGFyZ2V0JiBoaXRUZXN0VGFy
Z2V0LCBib29sIGFwcGxpZWRUcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHRyYW5zZm9ybVN0YXRl
LCBkb3VibGUqIHpPZmZzZXQpCiB7CiAgICAgLy8gVGhlIG5hdHVyYWwgdGhpbmcgd291bGQgYmUg
dG8ga2VlcCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUgb24gdGhlIHN0YWNrLCBidXQgaXQncyBi
aWcsIHNvIHdlIGhlYXAtYWxsb2NhdGUuCkBAIC0zNTI1LDE0ICszNTI1LDE0IEBAIFJlbmRlckxh
eWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJl
bmRlckxheWVyKiBjb250CiAgICAgaWYgKHRyYW5zZm9ybSgpICYmICFhcHBsaWVkVHJhbnNmb3Jt
KSB7CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcGFyZW50J3MgY2xpcCByZWN0cyBoYXZlIGJl
ZW4gY2FsY3VsYXRlZC4KICAgICAgICAgaWYgKHBhcmVudCgpKSB7Ci0gICAgICAgICAgICBDbGlw
UmVjdCBjbGlwUmVjdCA9IGJhY2tncm91bmRDbGlwUmVjdChyb290TGF5ZXIsIGhpdFRlc3RQb2lu
dC5yZWdpb24oKSwgdXNlVGVtcG9yYXJ5Q2xpcFJlY3RzID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDog
Um9vdFJlbGF0aXZlQ2xpcFJlY3RzLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUpOworICAg
ICAgICAgICAgQ2xpcFJlY3QgY2xpcFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJlY3Qocm9vdExheWVy
LCBoaXRUZXN0VGFyZ2V0LnJlZ2lvbigpLCB1c2VUZW1wb3JhcnlDbGlwUmVjdHMgPyBUZW1wb3Jh
cnlDbGlwUmVjdHMgOiBSb290UmVsYXRpdmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xs
YmFyU2l6ZSk7CiAgICAgICAgICAgICAvLyBHbyBhaGVhZCBhbmQgdGVzdCB0aGUgZW5jbG9zaW5n
IGNsaXAgbm93LgotICAgICAgICAgICAgaWYgKCFjbGlwUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RQ
b2ludCkpCisgICAgICAgICAgICBpZiAoIWNsaXBSZWN0LmludGVyc2VjdHMoaGl0VGVzdFRhcmdl
dCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBD
cmVhdGUgYSB0cmFuc2Zvcm0gc3RhdGUgdG8gYWNjdW11bGF0ZSB0aGlzIHRyYW5zZm9ybS4KLSAg
ICAgICAgUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gbmV3VHJhbnNmb3JtU3RhdGUg
PSBjcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKHJvb3RMYXllciwgY29udGFpbmVyTGF5ZXIsIGhp
dFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQsIHRyYW5zZm9ybVN0YXRlKTsKKyAgICAgICAgUmVmUHRy
PEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gbmV3VHJhbnNmb3JtU3RhdGUgPSBjcmVhdGVMb2Nh
bFRyYW5zZm9ybVN0YXRlKHJvb3RMYXllciwgY29udGFpbmVyTGF5ZXIsIGhpdFRlc3RSZWN0LCBo
aXRUZXN0VGFyZ2V0LCB0cmFuc2Zvcm1TdGF0ZSk7CiAKICAgICAgICAgLy8gSWYgdGhlIHRyYW5z
Zm9ybSBjYW4ndCBiZSBpbnZlcnRlZCwgdGhlbiBkb24ndCBoaXQgdGVzdCB0aGlzIGxheWVyIGF0
IGFsbC4KICAgICAgICAgaWYgKCFuZXdUcmFuc2Zvcm1TdGF0ZS0+bV9hY2N1bXVsYXRlZFRyYW5z
Zm9ybS5pc0ludmVydGlibGUoKSkKQEAgLTM1NDIsMTkgKzM1NDIsMTkgQEAgUmVuZGVyTGF5ZXIq
IFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVy
TGF5ZXIqIGNvbnQKICAgICAgICAgLy8gZnJvbSB0aGUgdHJhbnNmb3JtU3RhdGUsIHdoaWNoIHN0
b3JlIHRoZSBwb2ludCBhbmQgcXVhZCBpbiB0aGUgY29vcmRzIG9mIHRoZSBsYXN0IGZsYXR0ZW5l
ZAogICAgICAgICAvLyBsYXllciwgYW5kIHRoZSBhY2N1bXVsYXRlZCB0cmFuc2Zvcm0gd2hpY2gg
bGV0cyB1cCBtYXAgdGhyb3VnaCBwcmVzZXJ2ZS0zZCBsYXllcnMuCiAgICAgICAgIC8vCi0gICAg
ICAgIC8vIFdlIGNhbid0IGp1c3QgbWFwIGhpdFRlc3RQb2ludCBhbmQgaGl0VGVzdFJlY3QgYmVj
YXVzZSB0aGV5IG1heSBoYXZlIGJlZW4gZmxhdHRlbmVkIChsb3NpbmcgeikKKyAgICAgICAgLy8g
V2UgY2FuJ3QganVzdCBtYXAgaGl0VGVzdFRhcmdldCBhbmQgaGl0VGVzdFJlY3QgYmVjYXVzZSB0
aGV5IG1heSBoYXZlIGJlZW4gZmxhdHRlbmVkIChsb3NpbmcgeikKICAgICAgICAgLy8gYnkgb3Vy
IGNvbnRhaW5lci4KICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbmV3VHJhbnNmb3Jt
U3RhdGUtPm1hcHBlZFBvaW50KCk7CiAgICAgICAgIEZsb2F0UXVhZCBsb2NhbFBvaW50UXVhZCA9
IG5ld1RyYW5zZm9ybVN0YXRlLT5tYXBwZWRRdWFkKCk7CiAgICAgICAgIExheW91dFJlY3QgbG9j
YWxIaXRUZXN0UmVjdCA9IG5ld1RyYW5zZm9ybVN0YXRlLT5ib3VuZHNPZk1hcHBlZEFyZWEoKTsK
LSAgICAgICAgSGl0VGVzdFBvaW50IG5ld0hpdFRlc3RQb2ludDsKLSAgICAgICAgaWYgKGhpdFRl
c3RQb2ludC5pc1JlY3RCYXNlZFRlc3QoKSkKLSAgICAgICAgICAgIG5ld0hpdFRlc3RQb2ludCA9
IEhpdFRlc3RQb2ludChsb2NhbFBvaW50LCBsb2NhbFBvaW50UXVhZCk7CisgICAgICAgIEhpdFRl
c3RUYXJnZXQgbmV3SGl0VGVzdFRhcmdldDsKKyAgICAgICAgaWYgKGhpdFRlc3RUYXJnZXQuaXNS
ZWN0QmFzZWRUZXN0KCkpCisgICAgICAgICAgICBuZXdIaXRUZXN0VGFyZ2V0ID0gSGl0VGVzdFRh
cmdldChsb2NhbFBvaW50LCBsb2NhbFBvaW50UXVhZCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG5ld0hpdFRlc3RQb2ludCA9IEhpdFRlc3RQb2ludChsb2NhbFBvaW50KTsKKyAgICAgICAg
ICAgIG5ld0hpdFRlc3RUYXJnZXQgPSBIaXRUZXN0VGFyZ2V0KGxvY2FsUG9pbnQpOwogCiAgICAg
ICAgIC8vIE5vdyBkbyBhIGhpdCB0ZXN0IHdpdGggdGhlIHJvb3QgbGF5ZXIgc2hpZnRlZCB0byBi
ZSB1cy4KLSAgICAgICAgcmV0dXJuIGhpdFRlc3RMYXllcih0aGlzLCBjb250YWluZXJMYXllciwg
cmVxdWVzdCwgcmVzdWx0LCBsb2NhbEhpdFRlc3RSZWN0LCBuZXdIaXRUZXN0UG9pbnQsIHRydWUs
IG5ld1RyYW5zZm9ybVN0YXRlLmdldCgpLCB6T2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGhpdFRl
c3RMYXllcih0aGlzLCBjb250YWluZXJMYXllciwgcmVxdWVzdCwgcmVzdWx0LCBsb2NhbEhpdFRl
c3RSZWN0LCBuZXdIaXRUZXN0VGFyZ2V0LCB0cnVlLCBuZXdUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwg
ek9mZnNldCk7CiAgICAgfQogCiAgICAgLy8gRW5zdXJlIG91ciBsaXN0cyBhbmQgM2Qgc3RhdHVz
IGFyZSB1cC10by1kYXRlLgpAQCAtMzU2OCw3ICszNTY4LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRl
ckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIq
IGNvbnQKICAgICAgICAgbG9jYWxUcmFuc2Zvcm1TdGF0ZSA9IGNvbnN0X2Nhc3Q8SGl0VGVzdGlu
Z1RyYW5zZm9ybVN0YXRlKj4odHJhbnNmb3JtU3RhdGUpOwogICAgIH0gZWxzZSBpZiAodHJhbnNm
b3JtU3RhdGUgfHwgbV9oYXMzRFRyYW5zZm9ybWVkRGVzY2VuZGFudCB8fCBwcmVzZXJ2ZXMzRCgp
KSB7CiAgICAgICAgIC8vIFdlIG5lZWQgdHJhbnNmb3JtIHN0YXRlIGZvciB0aGUgZmlyc3QgdGlt
ZSwgb3IgdG8gb2Zmc2V0IHRoZSBjb250YWluZXIgc3RhdGUsIHNvIGNyZWF0ZSBpdCBoZXJlLgot
ICAgICAgICBsb2NhbFRyYW5zZm9ybVN0YXRlID0gY3JlYXRlTG9jYWxUcmFuc2Zvcm1TdGF0ZShy
b290TGF5ZXIsIGNvbnRhaW5lckxheWVyLCBoaXRUZXN0UmVjdCwgaGl0VGVzdFBvaW50LCB0cmFu
c2Zvcm1TdGF0ZSk7CisgICAgICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUgPSBjcmVhdGVMb2NhbFRy
YW5zZm9ybVN0YXRlKHJvb3RMYXllciwgY29udGFpbmVyTGF5ZXIsIGhpdFRlc3RSZWN0LCBoaXRU
ZXN0VGFyZ2V0LCB0cmFuc2Zvcm1TdGF0ZSk7CiAgICAgfQogCiAgICAgLy8gQ2hlY2sgZm9yIGhp
dCB0ZXN0IG9uIGJhY2tmYWNlIGlmIGJhY2tmYWNlLXZpc2liaWxpdHkgaXMgJ2hpZGRlbicKQEAg
LTM1OTIsNyArMzU5Miw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVy
KFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAgQ2xpcFJlY3Qg
YmdSZWN0OwogICAgIENsaXBSZWN0IGZnUmVjdDsKICAgICBDbGlwUmVjdCBvdXRsaW5lUmVjdDsK
LSAgICBjYWxjdWxhdGVSZWN0cyhyb290TGF5ZXIsIGhpdFRlc3RQb2ludC5yZWdpb24oKSwgdXNl
VGVtcG9yYXJ5Q2xpcFJlY3RzID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUm9vdFJlbGF0aXZlQ2xp
cFJlY3RzLCBoaXRUZXN0UmVjdCwgbGF5ZXJCb3VuZHMsIGJnUmVjdCwgZmdSZWN0LCBvdXRsaW5l
UmVjdCwgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKKyAgICBjYWxjdWxhdGVSZWN0cyhy
b290TGF5ZXIsIGhpdFRlc3RUYXJnZXQucmVnaW9uKCksIHVzZVRlbXBvcmFyeUNsaXBSZWN0cyA/
IFRlbXBvcmFyeUNsaXBSZWN0cyA6IFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywgaGl0VGVzdFJlY3Qs
IGxheWVyQm91bmRzLCBiZ1JlY3QsIGZnUmVjdCwgb3V0bGluZVJlY3QsIEluY2x1ZGVPdmVybGF5
U2Nyb2xsYmFyU2l6ZSk7CiAgICAgCiAgICAgLy8gVGhlIGZvbGxvd2luZyBhcmUgdXNlZCBmb3Ig
a2VlcGluZyB0cmFjayBvZiB0aGUgei1kZXB0aCBvZiB0aGUgaGl0IHBvaW50IG9mIDNkLXRyYW5z
Zm9ybWVkCiAgICAgLy8gZGVzY2VuZGFudHMuCkBAIC0zNjIxLDcgKzM2MjEsNyBAQCBSZW5kZXJM
YXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBS
ZW5kZXJMYXllciogY29udAogICAgIFJlbmRlckxheWVyKiBjYW5kaWRhdGVMYXllciA9IDA7CiAK
ICAgICAvLyBCZWdpbiBieSB3YWxraW5nIG91ciBsaXN0IG9mIHBvc2l0aXZlIGxheWVycyBmcm9t
IGhpZ2hlc3Qgei1pbmRleCBkb3duIHRvIHRoZSBsb3dlc3Qgei1pbmRleC4KLSAgICBSZW5kZXJM
YXllciogaGl0TGF5ZXIgPSBoaXRUZXN0TGlzdChwb3NaT3JkZXJMaXN0KCksIHJvb3RMYXllciwg
cmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdFBvaW50LAorICAgIFJlbmRlckxh
eWVyKiBoaXRMYXllciA9IGhpdFRlc3RMaXN0KHBvc1pPcmRlckxpc3QoKSwgcm9vdExheWVyLCBy
ZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0VGFyZ2V0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpP
ZmZzZXRGb3JEZXNjZW5kYW50c1B0ciwgek9mZnNldCwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0
ZS5nZXQoKSwgZGVwdGhTb3J0RGVzY2VuZGFudHMpOwogICAgIGlmIChoaXRMYXllcikgewogICAg
ICAgICBpZiAoIWRlcHRoU29ydERlc2NlbmRhbnRzKQpAQCAtMzYzMCw3ICszNjMwLDcgQEAgUmVu
ZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXll
ciwgUmVuZGVyTGF5ZXIqIGNvbnQKICAgICB9CiAKICAgICAvLyBOb3cgY2hlY2sgb3VyIG92ZXJm
bG93IG9iamVjdHMuCi0gICAgaGl0TGF5ZXIgPSBoaXRUZXN0TGlzdChtX25vcm1hbEZsb3dMaXN0
LCByb290TGF5ZXIsIHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdFJlY3QsIGhpdFRlc3RQb2ludCwK
KyAgICBoaXRMYXllciA9IGhpdFRlc3RMaXN0KG1fbm9ybWFsRmxvd0xpc3QsIHJvb3RMYXllciwg
cmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdFRhcmdldCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpPZmZzZXRGb3JEZXNj
ZW5kYW50c1B0ciwgek9mZnNldCwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgZGVw
dGhTb3J0RGVzY2VuZGFudHMpOwogICAgIGlmIChoaXRMYXllcikgewogICAgICAgICBpZiAoIWRl
cHRoU29ydERlc2NlbmRhbnRzKQpAQCAtMzYzOSwxMSArMzYzOSwxMSBAQCBSZW5kZXJMYXllciog
UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJM
YXllciogY29udAogICAgIH0KIAogICAgIC8vIE5leHQgd2Ugd2FudCB0byBzZWUgaWYgdGhlIG1v
dXNlIHBvcyBpcyBpbnNpZGUgdGhlIGNoaWxkIFJlbmRlck9iamVjdHMgb2YgdGhlIGxheWVyLgot
ICAgIGlmIChmZ1JlY3QuaW50ZXJzZWN0cyhoaXRUZXN0UG9pbnQpICYmIGlzU2VsZlBhaW50aW5n
TGF5ZXIoKSkgeworICAgIGlmIChmZ1JlY3QuaW50ZXJzZWN0cyhoaXRUZXN0VGFyZ2V0KSAmJiBp
c1NlbGZQYWludGluZ0xheWVyKCkpIHsKICAgICAgICAgLy8gSGl0IHRlc3Qgd2l0aCBhIHRlbXBv
cmFyeSBIaXRUZXN0UmVzdWx0LCBiZWNhdXNlIHdlIG9ubHkgd2FudCB0byBjb21taXQgdG8gJ3Jl
c3VsdCcgaWYgd2Uga25vdyB3ZSdyZSBmcm9udG1vc3QuCi0gICAgICAgIEhpdFRlc3RSZXN1bHQg
dGVtcFJlc3VsdChyZXN1bHQuaGl0VGVzdFBvaW50KCksIHJlc3VsdC5zaGFkb3dDb250ZW50Rmls
dGVyUG9saWN5KCkpOwotICAgICAgICBpZiAoaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHRlbXBS
ZXN1bHQsIGxheWVyQm91bmRzLCBoaXRUZXN0UG9pbnQsIEhpdFRlc3REZXNjZW5kYW50cykgJiYK
LSAgICAgICAgICAgIGlzSGl0Q2FuZGlkYXRlKHRoaXMsIGZhbHNlLCB6T2Zmc2V0Rm9yQ29udGVu
dHNQdHIsIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUuZ2V0KCkpKSB7CisgICAgICAgIEhpdFRl
c3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQudGFyZ2V0KCksIHJlc3VsdC5zaGFkb3dDb250ZW50
RmlsdGVyUG9saWN5KCkpOworICAgICAgICBpZiAoaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHRl
bXBSZXN1bHQsIGxheWVyQm91bmRzLCBoaXRUZXN0VGFyZ2V0LCBIaXRUZXN0RGVzY2VuZGFudHMp
CisgICAgICAgICAgICAmJiBpc0hpdENhbmRpZGF0ZSh0aGlzLCBmYWxzZSwgek9mZnNldEZvckNv
bnRlbnRzUHRyLCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpKSkgewogICAgICAgICAg
ICAgaWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKICAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHRlbXBSZXN1bHQpOwogICAgICAgICAgICAgZWxzZQpAQCAtMzY1Nyw3ICszNjU3LDcg
QEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJv
b3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKICAgICB9CiAKICAgICAvLyBOb3cgY2hlY2sgb3Vy
IG5lZ2F0aXZlIHotaW5kZXggY2hpbGRyZW4uCi0gICAgaGl0TGF5ZXIgPSBoaXRUZXN0TGlzdChu
ZWdaT3JkZXJMaXN0KCksIHJvb3RMYXllciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UmVjdCwg
aGl0VGVzdFBvaW50LAorICAgIGhpdExheWVyID0gaGl0VGVzdExpc3QobmVnWk9yZGVyTGlzdCgp
LCByb290TGF5ZXIsIHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdFJlY3QsIGhpdFRlc3RUYXJnZXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm1T
dGF0ZS5nZXQoKSwgek9mZnNldEZvckRlc2NlbmRhbnRzUHRyLCB6T2Zmc2V0LCB1bmZsYXR0ZW5l
ZFRyYW5zZm9ybVN0YXRlLmdldCgpLCBkZXB0aFNvcnREZXNjZW5kYW50cyk7CiAgICAgaWYgKGhp
dExheWVyKSB7CiAgICAgICAgIGlmICghZGVwdGhTb3J0RGVzY2VuZGFudHMpCkBAIC0zNjY5LDI1
ICszNjY5LDI2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJlbmRl
ckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAgaWYgKGNhbmRpZGF0ZUxh
eWVyKQogICAgICAgICByZXR1cm4gY2FuZGlkYXRlTGF5ZXI7CiAKLSAgICBpZiAoYmdSZWN0Lmlu
dGVyc2VjdHMoaGl0VGVzdFBvaW50KSAmJiBpc1NlbGZQYWludGluZ0xheWVyKCkpIHsKLSAgICAg
ICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0UG9pbnQoKSwgcmVzdWx0
LnNoYWRvd0NvbnRlbnRGaWx0ZXJQb2xpY3koKSk7Ci0gICAgICAgIGlmIChoaXRUZXN0Q29udGVu
dHMocmVxdWVzdCwgdGVtcFJlc3VsdCwgbGF5ZXJCb3VuZHMsIGhpdFRlc3RQb2ludCwgSGl0VGVz
dFNlbGYpICYmCi0gICAgICAgICAgICBpc0hpdENhbmRpZGF0ZSh0aGlzLCBmYWxzZSwgek9mZnNl
dEZvckNvbnRlbnRzUHRyLCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpKSkgeworICAg
IGlmIChiZ1JlY3QuaW50ZXJzZWN0cyhoaXRUZXN0VGFyZ2V0KSAmJiBpc1NlbGZQYWludGluZ0xh
eWVyKCkpIHsKKyAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC50YXJnZXQo
KSwgcmVzdWx0LnNoYWRvd0NvbnRlbnRGaWx0ZXJQb2xpY3koKSk7CisgICAgICAgIGlmIChoaXRU
ZXN0Q29udGVudHMocmVxdWVzdCwgdGVtcFJlc3VsdCwgbGF5ZXJCb3VuZHMsIGhpdFRlc3RUYXJn
ZXQsIEhpdFRlc3RTZWxmKQorICAgICAgICAgICAgJiYgaXNIaXRDYW5kaWRhdGUodGhpcywgZmFs
c2UsIHpPZmZzZXRGb3JDb250ZW50c1B0ciwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQo
KSkpIHsKICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCiAgICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OwogICAgICAgICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAg
ICB9CisgICAgICAgIGlmIChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCiAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOwogICAgIH0KIAogICAgIHJldHVybiAwOwogfQogCi1i
b29sIFJlbmRlckxheWVyOjpoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3Vu
ZHMsIGNvbnN0IEhpdFRlc3RQb2ludCYgaGl0VGVzdFBvaW50LCBIaXRUZXN0RmlsdGVyIGhpdFRl
c3RGaWx0ZXIpIGNvbnN0Citib29sIFJlbmRlckxheWVyOjpoaXRUZXN0Q29udGVudHMoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5
b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIGhpdFRlc3RUYXJnZXQs
IEhpdFRlc3RGaWx0ZXIgaGl0VGVzdEZpbHRlcikgY29uc3QKIHsKLSAgICBpZiAoIXJlbmRlcmVy
KCktPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UG9pbnQsCisgICAgaWYgKCFyZW5k
ZXJlcigpLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdFRhcmdldCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b0xheW91dFBvaW50KGxheWVyQm91bmRzLmxvY2F0aW9uKCkg
LSByZW5kZXJCb3hMb2NhdGlvbigpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaXRU
ZXN0RmlsdGVyKSkgewogICAgICAgICAvLyBJdCdzIHdyb25nIHRvIHNldCBpbm5lck5vZGUsIGJ1
dCB0aGVuIGNsYWltIHRoYXQgeW91IGRpZG4ndCBoaXQgYW55dGhpbmcsIHVubGVzcyBpdCBpcwpA
QCAtMzcxMyw3ICszNzE0LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzKGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JgogCiBSZW5kZXJMYXll
ciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMaXN0KFZlY3RvcjxSZW5kZXJMYXllcio+KiBsaXN0LCBS
ZW5kZXJMYXllciogcm9vdExheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0
JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdFBvaW50JiBoaXRUZXN0UG9pbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RS
ZWN0LCBjb25zdCBIaXRUZXN0VGFyZ2V0JiBoaXRUZXN0VGFyZ2V0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHRy
YW5zZm9ybVN0YXRlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91
YmxlKiB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMsIGRvdWJsZSogek9mZnNldCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRl
KiB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLApAQCAtMzcyNiwxMSArMzcyNywxMSBAQCBSZW5k
ZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMaXN0KFZlY3RvcjxSZW5kZXJMYXllcio+KiBs
aXN0LCBSZW5kZXJMYXllciogcgogICAgIGZvciAoaW50IGkgPSBsaXN0LT5zaXplKCkgLSAxOyBp
ID49IDA7IC0taSkgewogICAgICAgICBSZW5kZXJMYXllciogY2hpbGRMYXllciA9IGxpc3QtPmF0
KGkpOwogICAgICAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIgPSAwOwotICAgICAgICBIaXRUZXN0
UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LmhpdFRlc3RQb2ludCgpLCByZXN1bHQuc2hhZG93Q29u
dGVudEZpbHRlclBvbGljeSgpKTsKKyAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJl
c3VsdC50YXJnZXQoKSwgcmVzdWx0LnNoYWRvd0NvbnRlbnRGaWx0ZXJQb2xpY3koKSk7CiAgICAg
ICAgIGlmIChjaGlsZExheWVyLT5pc1BhZ2luYXRlZCgpKQotICAgICAgICAgICAgaGl0TGF5ZXIg
PSBoaXRUZXN0UGFnaW5hdGVkQ2hpbGRMYXllcihjaGlsZExheWVyLCByb290TGF5ZXIsIHJlcXVl
c3QsIHRlbXBSZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQsIHRyYW5zZm9ybVN0YXRl
LCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMpOworICAgICAgICAgICAgaGl0TGF5ZXIgPSBoaXRUZXN0
UGFnaW5hdGVkQ2hpbGRMYXllcihjaGlsZExheWVyLCByb290TGF5ZXIsIHJlcXVlc3QsIHRlbXBS
ZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0VGFyZ2V0LCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNl
dEZvckRlc2NlbmRhbnRzKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgaGl0TGF5ZXIgPSBj
aGlsZExheWVyLT5oaXRUZXN0TGF5ZXIocm9vdExheWVyLCB0aGlzLCByZXF1ZXN0LCB0ZW1wUmVz
dWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdFBvaW50LCBmYWxzZSwgdHJhbnNmb3JtU3RhdGUsIHpP
ZmZzZXRGb3JEZXNjZW5kYW50cyk7CisgICAgICAgICAgICBoaXRMYXllciA9IGNoaWxkTGF5ZXIt
PmhpdFRlc3RMYXllcihyb290TGF5ZXIsIHRoaXMsIHJlcXVlc3QsIHRlbXBSZXN1bHQsIGhpdFRl
c3RSZWN0LCBoaXRUZXN0VGFyZ2V0LCBmYWxzZSwgdHJhbnNmb3JtU3RhdGUsIHpPZmZzZXRGb3JE
ZXNjZW5kYW50cyk7CiAKICAgICAgICAgLy8gSWYgaXQgYSByZWN0LWJhc2VkIHRlc3QsIHdlIGNh
biBzYWZlbHkgYXBwZW5kIHRoZSB0ZW1wb3JhcnkgcmVzdWx0IHNpbmNlIGl0IG1pZ2h0IGhhZCBo
aXQKICAgICAgICAgLy8gbm9kZXMgYnV0IG5vdCBuZWNlc3NlcmlseSBoYWQgaGl0TGF5ZXIgc2V0
LgpAQCAtMzc1MCw3ICszNzUxLDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0
TGlzdChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbGlzdCwgUmVuZGVyTGF5ZXIqIHIKIH0KIAogUmVu
ZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0UGFnaW5hdGVkQ2hpbGRMYXllcihSZW5kZXJM
YXllciogY2hpbGRMYXllciwgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0
VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RQb2ludCYgaGl0VGVzdFBvaW50LCBjb25zdCBIaXRUZXN0
aW5nVHJhbnNmb3JtU3RhdGUqIHRyYW5zZm9ybVN0YXRlLCBkb3VibGUqIHpPZmZzZXQpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExh
eW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0VGFyZ2V0JiBoaXRUZXN0VGFyZ2V0
LCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHRyYW5zZm9ybVN0YXRlLCBkb3VibGUq
IHpPZmZzZXQpCiB7CiAgICAgVmVjdG9yPFJlbmRlckxheWVyKj4gY29sdW1uTGF5ZXJzOwogICAg
IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyID0gaXNOb3JtYWxGbG93T25seSgpID8gcGFyZW50
KCkgOiBzdGFja2luZ0NvbnRleHQoKTsKQEAgLTM3NjIsMTIgKzM3NjMsMTIgQEAgUmVuZGVyTGF5
ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0UGFnaW5hdGVkQ2hpbGRMYXllcihSZW5kZXJMYXllciog
Y2hpbGRMYXllciwgUmUKICAgICB9CiAKICAgICBBU1NFUlQoY29sdW1uTGF5ZXJzLnNpemUoKSk7
Ci0gICAgcmV0dXJuIGhpdFRlc3RDaGlsZExheWVyQ29sdW1ucyhjaGlsZExheWVyLCByb290TGF5
ZXIsIHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdFJlY3QsIGhpdFRlc3RQb2ludCwgdHJhbnNmb3Jt
U3RhdGUsIHpPZmZzZXQsCisgICAgcmV0dXJuIGhpdFRlc3RDaGlsZExheWVyQ29sdW1ucyhjaGls
ZExheWVyLCByb290TGF5ZXIsIHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdFJlY3QsIGhpdFRlc3RU
YXJnZXQsIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29sdW1uTGF5ZXJzLCBjb2x1bW5MYXllcnMuc2l6ZSgpIC0gMSk7CiB9CiAK
IFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxkTGF5ZXJDb2x1bW5zKFJlbmRl
ckxheWVyKiBjaGlsZExheWVyLCBSZW5kZXJMYXllciogcm9vdExheWVyLCBjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0
VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RQb2ludCYgaGl0VGVzdFBvaW50LCBjb25zdCBIaXRUZXN0
aW5nVHJhbnNmb3JtU3RhdGUqIHRyYW5zZm9ybVN0YXRlLCBkb3VibGUqIHpPZmZzZXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlv
dXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdFRhcmdldCYgaGl0VGVzdFRhcmdldCwg
Y29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6
T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVmVjdG9yPFJlbmRlckxheWVyKj4mIGNvbHVtbkxheWVycywgc2l6ZV90IGNvbHVt
bkluZGV4KQogewogICAgIFJlbmRlckJsb2NrKiBjb2x1bW5CbG9jayA9IHRvUmVuZGVyQmxvY2so
Y29sdW1uTGF5ZXJzW2NvbHVtbkluZGV4XS0+cmVuZGVyZXIoKSk7CkBAIC0zODI0LDcgKzM4MjUs
NyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RDaGlsZExheWVyQ29sdW1ucyhS
ZW5kZXJMYXllciogY2hpbGRMYXllciwgUmVuZAogICAgICAgICBMYXlvdXRSZWN0IGxvY2FsQ2xp
cFJlY3QoaGl0VGVzdFJlY3QpOwogICAgICAgICBsb2NhbENsaXBSZWN0LmludGVyc2VjdChjb2xS
ZWN0KTsKIAotICAgICAgICBpZiAoIWxvY2FsQ2xpcFJlY3QuaXNFbXB0eSgpICYmIGhpdFRlc3RQ
b2ludC5pbnRlcnNlY3RzKGxvY2FsQ2xpcFJlY3QpKSB7CisgICAgICAgIGlmICghbG9jYWxDbGlw
UmVjdC5pc0VtcHR5KCkgJiYgaGl0VGVzdFRhcmdldC5pbnRlcnNlY3RzKGxvY2FsQ2xpcFJlY3Qp
KSB7CiAgICAgICAgICAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIgPSAwOwogICAgICAgICAgICAg
aWYgKCFjb2x1bW5JbmRleCkgewogICAgICAgICAgICAgICAgIC8vIEFwcGx5IGEgdHJhbnNsYXRp
b24gdHJhbnNmb3JtIHRvIGNoYW5nZSB3aGVyZSB0aGUgbGF5ZXIgcGFpbnRzLgpAQCAtMzgzNiw3
ICszODM3LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0Q2hpbGRMYXllckNv
bHVtbnMoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIFJlbmQKICAgICAgICAgICAgICAgICBuZXdU
cmFuc2Zvcm0udHJhbnNsYXRlUmlnaHQob2Zmc2V0LndpZHRoKCksIG9mZnNldC5oZWlnaHQoKSk7
CiAKICAgICAgICAgICAgICAgICBjaGlsZExheWVyLT5tX3RyYW5zZm9ybSA9IGFkb3B0UHRyKG5l
dyBUcmFuc2Zvcm1hdGlvbk1hdHJpeChuZXdUcmFuc2Zvcm0pKTsKLSAgICAgICAgICAgICAgICBo
aXRMYXllciA9IGNoaWxkTGF5ZXItPmhpdFRlc3RMYXllcihyb290TGF5ZXIsIGNvbHVtbkxheWVy
c1swXSwgcmVxdWVzdCwgcmVzdWx0LCBsb2NhbENsaXBSZWN0LCBoaXRUZXN0UG9pbnQsIGZhbHNl
LCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldCk7CisgICAgICAgICAgICAgICAgaGl0TGF5ZXIgPSBj
aGlsZExheWVyLT5oaXRUZXN0TGF5ZXIocm9vdExheWVyLCBjb2x1bW5MYXllcnNbMF0sIHJlcXVl
c3QsIHJlc3VsdCwgbG9jYWxDbGlwUmVjdCwgaGl0VGVzdFRhcmdldCwgZmFsc2UsIHRyYW5zZm9y
bVN0YXRlLCB6T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBpZiAob2xkSGFzVHJhbnNmb3JtKQog
ICAgICAgICAgICAgICAgICAgICBjaGlsZExheWVyLT5tX3RyYW5zZm9ybSA9IGFkb3B0UHRyKG5l
dyBUcmFuc2Zvcm1hdGlvbk1hdHJpeChvbGRUcmFuc2Zvcm0pKTsKICAgICAgICAgICAgICAgICBl
bHNlCkBAIC0zODQ1LDE5ICszODQ2LDE5IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0
VGVzdENoaWxkTGF5ZXJDb2x1bW5zKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBSZW5kCiAgICAg
ICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSB0cmFuc2Zvcm0gc3VjaCB0aGF0IHRoZSByZW5kZXJl
cidzIHVwcGVyIGxlZnQgY29ybmVyIHdpbGwgYmUgYXQgKDAsMCkgaW4gdXNlciBzcGFjZS4KICAg
ICAgICAgICAgICAgICAvLyBUaGlzIGludm9sdmVzIHN1YnRyYWN0aW5nIG91dCB0aGUgcG9zaXRp
b24gb2YgdGhlIGxheWVyIGluIG91ciBjdXJyZW50IGNvb3JkaW5hdGUgc3BhY2UuCiAgICAgICAg
ICAgICAgICAgUmVuZGVyTGF5ZXIqIG5leHRMYXllciA9IGNvbHVtbkxheWVyc1tjb2x1bW5JbmRl
eCAtIDFdOwotICAgICAgICAgICAgICAgIFJlZlB0cjxIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU+
IG5ld1RyYW5zZm9ybVN0YXRlID0gbmV4dExheWVyLT5jcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRl
KHJvb3RMYXllciwgbmV4dExheWVyLCBsb2NhbENsaXBSZWN0LCBoaXRUZXN0UG9pbnQsIHRyYW5z
Zm9ybVN0YXRlKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8SGl0VGVzdGluZ1RyYW5zZm9ybVN0
YXRlPiBuZXdUcmFuc2Zvcm1TdGF0ZSA9IG5leHRMYXllci0+Y3JlYXRlTG9jYWxUcmFuc2Zvcm1T
dGF0ZShyb290TGF5ZXIsIG5leHRMYXllciwgbG9jYWxDbGlwUmVjdCwgaGl0VGVzdFRhcmdldCwg
dHJhbnNmb3JtU3RhdGUpOwogICAgICAgICAgICAgICAgIG5ld1RyYW5zZm9ybVN0YXRlLT50cmFu
c2xhdGUob2Zmc2V0LndpZHRoKCksIG9mZnNldC5oZWlnaHQoKSwgSGl0VGVzdGluZ1RyYW5zZm9y
bVN0YXRlOjpBY2N1bXVsYXRlVHJhbnNmb3JtKTsKICAgICAgICAgICAgICAgICBGbG9hdFBvaW50
IGxvY2FsUG9pbnQgPSBuZXdUcmFuc2Zvcm1TdGF0ZS0+bWFwcGVkUG9pbnQoKTsKICAgICAgICAg
ICAgICAgICBGbG9hdFF1YWQgbG9jYWxQb2ludFF1YWQgPSBuZXdUcmFuc2Zvcm1TdGF0ZS0+bWFw
cGVkUXVhZCgpOwogICAgICAgICAgICAgICAgIExheW91dFJlY3QgbG9jYWxIaXRUZXN0UmVjdCA9
IG5ld1RyYW5zZm9ybVN0YXRlLT5tYXBwZWRBcmVhKCkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsK
LSAgICAgICAgICAgICAgICBIaXRUZXN0UG9pbnQgbmV3SGl0VGVzdFBvaW50OwotICAgICAgICAg
ICAgICAgIGlmIChoaXRUZXN0UG9pbnQuaXNSZWN0QmFzZWRUZXN0KCkpCi0gICAgICAgICAgICAg
ICAgICAgIG5ld0hpdFRlc3RQb2ludCA9IEhpdFRlc3RQb2ludChsb2NhbFBvaW50LCBsb2NhbFBv
aW50UXVhZCk7CisgICAgICAgICAgICAgICAgSGl0VGVzdFRhcmdldCBuZXdIaXRUZXN0VGFyZ2V0
OworICAgICAgICAgICAgICAgIGlmIChoaXRUZXN0VGFyZ2V0LmlzUmVjdEJhc2VkVGVzdCgpKQor
ICAgICAgICAgICAgICAgICAgICBuZXdIaXRUZXN0VGFyZ2V0ID0gSGl0VGVzdFRhcmdldChsb2Nh
bFBvaW50LCBsb2NhbFBvaW50UXVhZCk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBuZXdIaXRUZXN0UG9pbnQgPSBIaXRUZXN0UG9pbnQobG9jYWxQb2ludCk7Cisg
ICAgICAgICAgICAgICAgICAgIG5ld0hpdFRlc3RUYXJnZXQgPSBIaXRUZXN0VGFyZ2V0KGxvY2Fs
UG9pbnQpOwogICAgICAgICAgICAgICAgIG5ld1RyYW5zZm9ybVN0YXRlLT5mbGF0dGVuKCk7CiAK
LSAgICAgICAgICAgICAgICBoaXRMYXllciA9IGhpdFRlc3RDaGlsZExheWVyQ29sdW1ucyhjaGls
ZExheWVyLCBjb2x1bW5MYXllcnNbY29sdW1uSW5kZXggLSAxXSwgcmVxdWVzdCwgcmVzdWx0LCBs
b2NhbEhpdFRlc3RSZWN0LCBuZXdIaXRUZXN0UG9pbnQsCisgICAgICAgICAgICAgICAgaGl0TGF5
ZXIgPSBoaXRUZXN0Q2hpbGRMYXllckNvbHVtbnMoY2hpbGRMYXllciwgY29sdW1uTGF5ZXJzW2Nv
bHVtbkluZGV4IC0gMV0sIHJlcXVlc3QsIHJlc3VsdCwgbG9jYWxIaXRUZXN0UmVjdCwgbmV3SGl0
VGVzdFRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXdUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgek9mZnNldCwgY29sdW1uTGF5ZXJzLCBj
b2x1bW5JbmRleCAtIDEpOwogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5oCmluZGV4IGJlOTQ1NzA3YTg0Y2FmZTE4NmY4NzUwN2Y3MjhlODc4YmYwMTI4
NDAuLjQwNTgwOTNmNjdlOTFmYTE3Y2U5YThlZWQzN2U0MzkzNThkZjdkOTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC0xMTUsNyArMTE1LDcgQEAgcHVibGljOgog
CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LmlzRW1wdHkoKTsgfQog
ICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBMYXlvdXRSZWN0JiByZWN0KSB7IHJldHVybiBtX3Jl
Y3QuaW50ZXJzZWN0cyhyZWN0KTsgfQotICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBIaXRUZXN0
UG9pbnQmKTsKKyAgICBib29sIGludGVyc2VjdHMoY29uc3QgSGl0VGVzdFRhcmdldCYpOwogCiBw
cml2YXRlOgogICAgIExheW91dFJlY3QgbV9yZWN0OwpAQCAtNTEyLDcgKzUxMiw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFJlY3QmIGRh
bWFnZVJlY3QsIFBhaW50QmVoYXZpb3IgPSBQYWludEJlaGF2aW9yTm9ybWFsLCBSZW5kZXJPYmpl
Y3QqIHBhaW50aW5nUm9vdCA9IDAsCiAgICAgICAgIFJlbmRlclJlZ2lvbiogPSAwLCBQYWludExh
eWVyRmxhZ3MgPSAwKTsKICAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0Jik7Ci0gICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
Y29uc3QgSGl0VGVzdFBvaW50JiwgSGl0VGVzdFJlc3VsdCYpOworICAgIGJvb2wgaGl0VGVzdChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIGNvbnN0IEhpdFRlc3RUYXJnZXQmLCBIaXRUZXN0UmVzdWx0
Jik7CiAgICAgdm9pZCBwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIFBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCog
cGFpbnRpbmdSb290KTsKIAogICAgIC8vIFRoaXMgbWV0aG9kIGZpZ3VyZXMgb3V0IG91ciBsYXll
ckJvdW5kcyBpbiBjb29yZGluYXRlcyByZWxhdGl2ZSB0bwpAQCAtNzMyLDI1ICs3MzIsMjUgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhaW50TGF5ZXJG
bGFncywgY29uc3QgVmVjdG9yPFJlbmRlckxheWVyKj4mIGNvbHVtbkxheWVycywgc2l6ZV90IGNv
bHVtbkluZGV4KTsKIAogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIq
IHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RQ
b2ludCYsIGJvb2wgYXBwbGllZFRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0VGFyZ2V0Jiwg
Ym9vbCBhcHBsaWVkVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSA9IDAsIGRvdWJsZSog
ek9mZnNldCA9IDApOwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0TGlzdChWZWN0b3I8UmVuZGVy
TGF5ZXIqPiosIFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0UG9pbnQmLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVj
dCwgY29uc3QgSGl0VGVzdFRhcmdldCYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9m
ZnNldEZvckRlc2NlbmRhbnRzLCBkb3VibGUqIHpPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdW5mbGF0dGVuZWRUcmFu
c2Zvcm1TdGF0ZSwgYm9vbCBkZXB0aFNvcnREZXNjZW5kYW50cyk7CiAgICAgUmVuZGVyTGF5ZXIq
IGhpdFRlc3RQYWdpbmF0ZWRDaGlsZExheWVyKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBSZW5k
ZXJMYXllciogcm9vdExheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdFBvaW50JiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0
UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RUYXJnZXQmLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3Rh
dGUqIHRyYW5zZm9ybVN0YXRlLCBkb3VibGUqIHpPZmZzZXQpOwogICAgIFJlbmRlckxheWVyKiBo
aXRUZXN0Q2hpbGRMYXllckNvbHVtbnMoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIFJlbmRlckxh
eWVyKiByb290TGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdFBvaW50JiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhp
dFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0VGFyZ2V0JiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNm
b3JtU3RhdGUsIGRvdWJsZSogek9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxSZW5kZXJMYXllcio+JiBjb2x1bW5MYXllcnMsIHNp
emVfdCBjb2x1bW5JbmRleCk7CiAKICAgICBQYXNzUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1T
dGF0ZT4gY3JlYXRlTG9jYWxUcmFuc2Zvcm1TdGF0ZShSZW5kZXJMYXllciogcm9vdExheWVyLCBS
ZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RQb2ludCYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNv
bnN0IEhpdFRlc3RUYXJnZXQmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhp
dFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogY29udGFpbmVyVHJhbnNmb3JtU3RhdGUpIGNvbnN0Owog
ICAgIAotICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBIaXRUZXN0
UG9pbnQmLCBIaXRUZXN0RmlsdGVyKSBjb25zdDsKKyAgICBib29sIGhpdFRlc3RDb250ZW50cyhj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRSZWN0JiBs
YXllckJvdW5kcywgY29uc3QgSGl0VGVzdFRhcmdldCYsIEhpdFRlc3RGaWx0ZXIpIGNvbnN0Owog
CiAgICAgdm9pZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwogICAgIGJvb2wgaGFzSG9yaXpv
bnRhbE92ZXJmbG93KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGluZUJveExpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpbmVCb3hMaXN0LmNwcAppbmRleCBkYmI1ODYxYzhkM2RmMWM1ODg5ZTQ2NmJlYjY4YTBhMWYx
OWIzMTZkLi41NzA3YjBkOTVjZjM5MjM0Y2UxNmI5ZDBlZTA3ZjI4ZmQzOTQwNDNkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKQEAgLTI3Myw3
ICsyNzMsNyBAQCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpwYWludChSZW5kZXJCb3hNb2RlbE9i
amVjdCogcmVuZGVyZXIsIFBhaW50SW5mbyYgcGFpbnRJbgogICAgIH0KIH0KIAotYm9vbCBSZW5k
ZXJMaW5lQm94TGlzdDo6aGl0VGVzdChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIsIGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pIGNvbnN0Citib29sIFJl
bmRlckxpbmVCb3hMaXN0OjpoaXRUZXN0KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciwg
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKSBjb25zdAogewog
ICAgIGlmIChoaXRUZXN0QWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0yODQsMTAgKzI4NCwxMCBAQCBib29sIFJlbmRlckxpbmVCb3hMaXN0Ojpo
aXRUZXN0KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSGl0VGVzdFJlcQog
ICAgIGlmICghZmlyc3RMaW5lQm94KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIExh
eW91dFBvaW50IHBvaW50ID0gcG9pbnRJbkNvbnRhaW5lci5wb2ludCgpOworICAgIExheW91dFBv
aW50IHBvaW50ID0gdGFyZ2V0SW5Db250YWluZXIucG9pbnQoKTsKICAgICBMYXlvdXRSZWN0IHJl
Y3QgPSBmaXJzdExpbmVCb3goKS0+aXNIb3Jpem9udGFsKCkgPwotICAgICAgICBJbnRSZWN0KHBv
aW50LngoKSwgcG9pbnQueSgpIC0gcG9pbnRJbkNvbnRhaW5lci50b3BQYWRkaW5nKCksIDEsIHBv
aW50SW5Db250YWluZXIudG9wUGFkZGluZygpICsgcG9pbnRJbkNvbnRhaW5lci5ib3R0b21QYWRk
aW5nKCkgKyAxKSA6Ci0gICAgICAgIEludFJlY3QocG9pbnQueCgpIC0gcG9pbnRJbkNvbnRhaW5l
ci5sZWZ0UGFkZGluZygpLCBwb2ludC55KCksIHBvaW50SW5Db250YWluZXIucmlnaHRQYWRkaW5n
KCkgKyBwb2ludEluQ29udGFpbmVyLmxlZnRQYWRkaW5nKCkgKyAxLCAxKTsKKyAgICAgICAgSW50
UmVjdChwb2ludC54KCksIHBvaW50LnkoKSAtIHRhcmdldEluQ29udGFpbmVyLnRvcFBhZGRpbmco
KSwgMSwgdGFyZ2V0SW5Db250YWluZXIudG9wUGFkZGluZygpICsgdGFyZ2V0SW5Db250YWluZXIu
Ym90dG9tUGFkZGluZygpICsgMSkgOgorICAgICAgICBJbnRSZWN0KHBvaW50LngoKSAtIHRhcmdl
dEluQ29udGFpbmVyLmxlZnRQYWRkaW5nKCksIHBvaW50LnkoKSwgdGFyZ2V0SW5Db250YWluZXIu
cmlnaHRQYWRkaW5nKCkgKyB0YXJnZXRJbkNvbnRhaW5lci5sZWZ0UGFkZGluZygpICsgMSwgMSk7
CiAKICAgICBpZiAoIWFueUxpbmVJbnRlcnNlY3RzUmVjdChyZW5kZXJlciwgcmVjdCwgYWNjdW11
bGF0ZWRPZmZzZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yOTgsOSArMjk4LDkgQEAg
Ym9vbCBSZW5kZXJMaW5lQm94TGlzdDo6aGl0VGVzdChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVu
ZGVyZXIsIGNvbnN0IEhpdFRlc3RSZXEKICAgICBmb3IgKElubGluZUZsb3dCb3gqIGN1cnIgPSBs
YXN0TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldkxpbmVCb3goKSkgewogICAgICAg
ICBSb290SW5saW5lQm94KiByb290ID0gY3Vyci0+cm9vdCgpOwogICAgICAgICBpZiAocmFuZ2VJ
bnRlcnNlY3RzUmVjdChyZW5kZXJlciwgY3Vyci0+bG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KHJv
b3QtPmxpbmVUb3AoKSksIGN1cnItPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyhyb290LT5s
aW5lQm90dG9tKCkpLCByZWN0LCBhY2N1bXVsYXRlZE9mZnNldCkpIHsKLSAgICAgICAgICAgIGJv
b2wgaW5zaWRlID0gY3Vyci0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29u
dGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgcm9vdC0+bGluZVRvcCgpLCByb290LT5saW5lQm90
dG9tKCkpOworICAgICAgICAgICAgYm9vbCBpbnNpZGUgPSBjdXJyLT5ub2RlQXRQb2ludChyZXF1
ZXN0LCByZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgcm9vdC0+
bGluZVRvcCgpLCByb290LT5saW5lQm90dG9tKCkpOwogICAgICAgICAgICAgaWYgKGluc2lkZSkg
ewotICAgICAgICAgICAgICAgIHJlbmRlcmVyLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwg
cG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0
KSk7CisgICAgICAgICAgICAgICAgcmVuZGVyZXItPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0
LCB0YXJnZXRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zm
c2V0KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94
TGlzdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmgKaW5k
ZXggMmMyMDM4Mjk1OWE5ODRhMGM3ZDRhYzhiMjFkZmMyYTUwM2Q3YzA5Ny4uMTQ3Mjk5YWYzY2Vl
OWExYjE0OGFlMWEzMDM3Yjk0NjI4ZGQ0ZWMzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpbmVCb3hMaXN0LmgKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHZv
aWQgZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQoUmVuZGVyT2JqZWN0KiBwYXJlbnQsIFJlbmRl
ck9iamVjdCogY2hpbGQpOwogCiAgICAgdm9pZCBwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCos
IFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7Ci0gICAgYm9vbCBoaXRUZXN0
KFJlbmRlckJveE1vZGVsT2JqZWN0KiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIGNvbnN0OworICAgIGJvb2wg
aGl0VGVzdChSZW5kZXJCb3hNb2RlbE9iamVjdCosIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIGNvbnN0Owog
CiBwcml2YXRlOgogICAgIGJvb2wgYW55TGluZUludGVyc2VjdHNSZWN0KFJlbmRlckJveE1vZGVs
T2JqZWN0KiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IExheW91dFBvaW50JiwgYm9vbCB1c2VQ
cmludFJlY3QgPSBmYWxzZSwgTGF5b3V0VW5pdCBvdXRsaW5lU2l6ZSA9IDApIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCmluZGV4IDQwYjVmNThmZDY0
MmI1NDI2Yzg2MzhhYWZhZmQxOGZkNTA3ZjI0MWIuLjgzM2FjNzQwZGVhNmJjNWI3MDYyZWY2MThh
ZDFlYTdkZmYwYzY5YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAKQEAgLTQ0Nyw3ICs0NDcsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUJh
Y2tncm91bmQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JgogICAgIH0K
IH0KIAotYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KQorYm9vbCBSZW5kZXJMaXN0Qm94Ojpp
c1BvaW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlv
dXRQb2ludCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCkKIHsKICAgICBpZiAoIW1fdkJhciB8fCAhbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0
ZUluSGl0VGVzdGluZygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NTcsNyArNDU3LDcg
QEAgYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXQKICAgICAgICAgICAgICAgICAgICAgICAgIG1fdkJh
ci0+d2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0gYm9yZGVyVG9w
KCkgLSBib3JkZXJCb3R0b20oKSk7CiAKLSAgICBpZiAodmVydFJlY3QuY29udGFpbnMocG9pbnRJ
bkNvbnRhaW5lcikpIHsKKyAgICBpZiAodmVydFJlY3QuY29udGFpbnModGFyZ2V0SW5Db250YWlu
ZXIpKSB7CiAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNjc3LDIxICs2NzcsMjEgQEAgdm9pZCBSZW5kZXJM
aXN0Qm94OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCkKICAgICBzY3JvbGxUb09mZnNldFdpdGhv
dXRBbmltYXRpb24oVmVydGljYWxTY3JvbGxiYXIsIGluZGV4KTsKIH0KIAotYm9vbCBSZW5kZXJM
aXN0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNv
bnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0
QWN0aW9uKQorYm9vbCBSZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0VGFyZ2V0
JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0gICAgaWYgKCFSZW5kZXJCbG9jazo6
bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRl
ZE9mZnNldCwgaGl0VGVzdEFjdGlvbikpCisgICAgaWYgKCFSZW5kZXJCbG9jazo6bm9kZUF0UG9p
bnQocmVxdWVzdCwgcmVzdWx0LCB0YXJnZXRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQs
IGhpdFRlc3RBY3Rpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY29uc3QgVmVjdG9y
PEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHRvSFRNTFNlbGVjdEVsZW1lbnQobm9kZSgpKS0+
bGlzdEl0ZW1zKCk7CiAgICAgaW50IHNpemUgPSBudW1JdGVtcygpOwogICAgIExheW91dFBvaW50
IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCk7CiAKICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAoaXRlbUJvdW5k
aW5nQm94UmVjdChhZGp1c3RlZExvY2F0aW9uLCBpKS5jb250YWlucyhwb2ludEluQ29udGFpbmVy
LnBvaW50KCkpKSB7CisgICAgICAgIGlmIChpdGVtQm91bmRpbmdCb3hSZWN0KGFkanVzdGVkTG9j
YXRpb24sIGkpLmNvbnRhaW5zKHRhcmdldEluQ29udGFpbmVyLnBvaW50KCkpKSB7CiAgICAgICAg
ICAgICBpZiAoRWxlbWVudCogbm9kZSA9IGxpc3RJdGVtc1tpXSkgewogICAgICAgICAgICAgICAg
IHJlc3VsdC5zZXRJbm5lck5vZGUobm9kZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQu
aW5uZXJOb25TaGFyZWROb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zZXRJbm5l
ck5vblNoYXJlZE5vZGUobm9kZSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnNldExvY2FsUG9p
bnQocG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRp
b24pKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuc2V0TG9jYWxQb2ludCh0YXJnZXRJbkNvbnRh
aW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24pKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKaW5kZXggMTBiMTk0NWMyMjg3NzE3YmU4NzVhMWYyMDY5
NWJkZWE1MmNkNTEyOC4uNzk1MzYxNjEyYTk2YjQ5ZWFmY2M3ZTE2NDg4NjdiYTk3OGQ0NDcxMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCkBAIC02Niw3ICs2Niw3
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50T2JqZWN0KFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50Jik7CiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbnRyb2xDbGlwUmVj
dChjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIGlzUG9pbnRJ
bk92ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50
SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCk7CisgICAg
dmlydHVhbCBib29sIGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiwgY29u
c3QgTGF5b3V0UG9pbnQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQpOwogCiAgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rp
b24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSwgTm9kZSoqIHN0b3BO
b2RlID0gMCk7CiAgICAgdmlydHVhbCBib29sIGxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERp
cmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLCBOb2RlKiog
c3RvcE5vZGUgPSAwKTsKQEAgLTk0LDcgKzk0LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZv
aWQgc2V0U2Nyb2xsTGVmdChpbnQpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxUb3AoaW50
KTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNv
bnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJS
SURFOwogCiAgICAgLy8gU2Nyb2xsYWJsZUFyZWEgaW50ZXJmYWNlLgogICAgIHZpcnR1YWwgaW50
IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24pIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA2MzkxMzM0ZWZjNDJkMDIwZTM3ODBiNjc1
NDQyOTQzODU3NTNmZGVhLi5jOGUwNTlmYThjYzE0NWUyYTE4YzI2NzhkNzJhYmQyMjA2MWU4NTM1
IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMjQyMywy
NSArMjQyMywyNSBAQCBib29sIFJlbmRlck9iamVjdDo6aXNDb21wb3NpdGVkKCkgY29uc3QKICAg
ICByZXR1cm4gaGFzTGF5ZXIoKSAmJiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHRoaXMpLT5sYXll
cigpLT5pc0NvbXBvc2l0ZWQoKTsKIH0KIAotYm9vbCBSZW5kZXJPYmplY3Q6OmhpdFRlc3QoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3Qg
SGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQsIEhpdFRlc3RGaWx0ZXIgaGl0VGVzdEZpbHRlcikKK2Jvb2wgUmVuZGVyT2Jq
ZWN0OjpoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RGaWx0ZXIgaGl0VGVzdEZpbHRl
cikKIHsKICAgICBib29sIGluc2lkZSA9IGZhbHNlOwogICAgIGlmIChoaXRUZXN0RmlsdGVyICE9
IEhpdFRlc3RTZWxmKSB7CiAgICAgICAgIC8vIEZpcnN0IHRlc3QgdGhlIGZvcmVncm91bmQgbGF5
ZXIgKGxpbmVzIGFuZCBpbmxpbmVzKS4KLSAgICAgICAgaW5zaWRlID0gbm9kZUF0UG9pbnQocmVx
dWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVz
dEZvcmVncm91bmQpOworICAgICAgICBpbnNpZGUgPSBub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1
bHQsIHRhcmdldEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEZvcmVncm91
bmQpOwogCiAgICAgICAgIC8vIFRlc3QgZmxvYXRzIG5leHQuCiAgICAgICAgIGlmICghaW5zaWRl
KQotICAgICAgICAgICAgaW5zaWRlID0gbm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2lu
dEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEZsb2F0KTsKKyAgICAgICAg
ICAgIGluc2lkZSA9IG5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgdGFyZ2V0SW5Db250YWlu
ZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0RmxvYXQpOwogCiAgICAgICAgIC8vIEZpbmFs
bHkgdGVzdCB0byBzZWUgaWYgdGhlIG1vdXNlIGlzIGluIHRoZSBiYWNrZ3JvdW5kICh3aXRoaW4g
YSBjaGlsZCBibG9jaydzIGJhY2tncm91bmQpLgogICAgICAgICBpZiAoIWluc2lkZSkKLSAgICAg
ICAgICAgIGluc2lkZSA9IG5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRh
aW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZHMpOwor
ICAgICAgICAgICAgaW5zaWRlID0gbm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB0YXJnZXRJ
bkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3Vu
ZHMpOwogICAgIH0KIAogICAgIC8vIFNlZSBpZiB0aGUgbW91c2UgaXMgaW5zaWRlIHVzIGJ1dCBu
b3QgYW55IG9mIG91ciBkZXNjZW5kYW50cwogICAgIGlmIChoaXRUZXN0RmlsdGVyICE9IEhpdFRl
c3REZXNjZW5kYW50cyAmJiAhaW5zaWRlKQotICAgICAgICBpbnNpZGUgPSBub2RlQXRQb2ludChy
ZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRU
ZXN0QmxvY2tCYWNrZ3JvdW5kKTsKKyAgICAgICAgaW5zaWRlID0gbm9kZUF0UG9pbnQocmVxdWVz
dCwgcmVzdWx0LCB0YXJnZXRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RC
bG9ja0JhY2tncm91bmQpOwogCiAgICAgcmV0dXJuIGluc2lkZTsKIH0KQEAgLTI0NjAsNyArMjQ2
MCw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp1cGRhdGVIaXRUZXN0UmVzdWx0KEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmCiAgICAgfQogfQogCi1ib29sIFJlbmRlck9i
amVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSGl0VGVzdFBvaW50JiAvKnBvaW50SW5Db250YWluZXIqLywgY29uc3QgTGF5b3V0UG9p
bnQmIC8qYWNjdW11bGF0ZWRPZmZzZXQqLywgSGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyT2Jq
ZWN0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBIaXRUZXN0VGFyZ2V0JiAvKnRhcmdldEluQ29udGFpbmVyKi8sIGNvbnN0IExheW91dFBv
aW50JiAvKmFjY3VtdWxhdGVkT2Zmc2V0Ki8sIEhpdFRlc3RBY3Rpb24pCiB7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IDJk
Y2Q2MmU1ZGJmMGJlMTEzMzIxZGE3ODRmMjc3OTk3NGNkZjA0YjMuLjJmNmExYzI4YmUwMzc4NDc3
MTIzZWJiYTYxYzFhYmRjNzRmMmI2YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmgKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQWZm
aW5lVHJhbnNmb3JtOwogY2xhc3MgQW5pbWF0aW9uQ29udHJvbGxlcjsKIGNsYXNzIEN1cnNvcjsK
LWNsYXNzIEhpdFRlc3RQb2ludDsKK2NsYXNzIEhpdFRlc3RUYXJnZXQ7CiBjbGFzcyBIaXRUZXN0
UmVzdWx0OwogY2xhc3MgSW5saW5lQm94OwogY2xhc3MgSW5saW5lRmxvd0JveDsKQEAgLTY0Myw5
ICs2NDMsOSBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzQ29tcG9zaXRlZCgpIGNvbnN0OwogCi0g
ICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0RmlsdGVyID0gSGl0VGVzdEFsbCk7CisgICAgYm9vbCBo
aXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRl
c3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEhpdFRlc3RGaWx0ZXIgPSBIaXRUZXN0QWxsKTsKICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlSGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsK
LSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBIaXRUZXN0VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHZpcnR1YWwgVmlz
aWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICBW
aXNpYmxlUG9zaXRpb24gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKGludCBvZmZzZXQsIEVBZmZpbml0
eSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCmluZGV4IDUzNjI4
MzZhNDRmOTI4MzFjYzA0NmE3MTg1MjkzNTg1MDMwYWY1MDYuLjNhNjc3YjBlMGVhZDVhZjI5MTVj
M2ZmYTI1ZmU3MDAzMTgzNGVmYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZWdpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJS
ZWdpb24uY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBSZW5kZXJSZWdpb246OnBhaW50UmVw
bGFjZWQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE8KIH0K
IAogLy8gSGl0IFRlc3RpbmcKLWJvb2wgUmVuZGVyUmVnaW9uOjpub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRU
ZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlclJlZ2lvbjo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgY29uc3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBv
aW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCiB7CiAgICAgaWYg
KCFpc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyNywxNCArMTI3LDE0IEBA
IGJvb2wgUmVuZGVyUmVnaW9uOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzCiAKICAgICAvLyBDaGVjayBvdXIgYm91bmRzIG5leHQu
IEZvciB0aGlzIHB1cnBvc2UgYWx3YXlzIGFzc3VtZSB0aGF0IHdlIGNhbiBvbmx5IGJlIGhpdCBp
biB0aGUKICAgICAvLyBmb3JlZ3JvdW5kIHBoYXNlICh3aGljaCBpcyB0cnVlIGZvciByZXBsYWNl
ZCBlbGVtZW50cyBsaWtlIGltYWdlcykuCi0gICAgTGF5b3V0UmVjdCBib3VuZHNSZWN0ID0gYm9y
ZGVyQm94UmVjdEluUmVnaW9uKHBvaW50SW5Db250YWluZXIucmVnaW9uKCkpOworICAgIExheW91
dFJlY3QgYm91bmRzUmVjdCA9IGJvcmRlckJveFJlY3RJblJlZ2lvbih0YXJnZXRJbkNvbnRhaW5l
ci5yZWdpb24oKSk7CiAgICAgYm91bmRzUmVjdC5tb3ZlQnkoYWRqdXN0ZWRMb2NhdGlvbik7Ci0g
ICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZvcmVncm91
bmQgJiYgcG9pbnRJbkNvbnRhaW5lci5pbnRlcnNlY3RzKGJvdW5kc1JlY3QpKSB7CisgICAgaWYg
KHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZvcmVncm91bmQgJiYg
dGFyZ2V0SW5Db250YWluZXIuaW50ZXJzZWN0cyhib3VuZHNSZWN0KSkgewogICAgICAgICAvLyBD
aGVjayB0aGUgY29udGVudHMgb2YgdGhlIFJlbmRlckZsb3dUaHJlYWQuCi0gICAgICAgIGlmICht
X2Zsb3dUaHJlYWQgJiYgbV9mbG93VGhyZWFkLT5oaXRUZXN0UmVnaW9uKHRoaXMsIHJlcXVlc3Qs
IHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgTGF5b3V0UG9pbnQoYWRqdXN0ZWRMb2NhdGlvbi54
KCkgKyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpLCBhZGp1c3RlZExvY2F0aW9uLnkoKSAr
IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpKSkpCisgICAgICAgIGlmIChtX2Zsb3dUaHJlYWQg
JiYgbV9mbG93VGhyZWFkLT5oaXRUZXN0UmVnaW9uKHRoaXMsIHJlcXVlc3QsIHJlc3VsdCwgdGFy
Z2V0SW5Db250YWluZXIsIExheW91dFBvaW50KGFkanVzdGVkTG9jYXRpb24ueCgpICsgYm9yZGVy
TGVmdCgpICsgcGFkZGluZ0xlZnQoKSwgYWRqdXN0ZWRMb2NhdGlvbi55KCkgKyBib3JkZXJUb3Ao
KSArIHBhZGRpbmdUb3AoKSkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHVw
ZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xh
eW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOwotICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2Rl
VG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5vZGUoKSwgcG9pbnRJbkNvbnRhaW5lciwgYm91bmRzUmVj
dCkpCisgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCB0YXJnZXRJbkNvbnRhaW5l
ci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24pKTsKKyAgICAgICAgaWYg
KCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChub2RlKCksIHRhcmdldEluQ29u
dGFpbmVyLCBib3VuZHNSZWN0KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oCmluZGV4IDgyNmU5ODA3MjI2YjFi
MzRlOWI0MDU4NDJhNGU5NWNjYjg2MDczZTMuLjc5YzNiMGMzMzBlMWFkMzZlYTk2YTdiNjkzMGQy
NDNhYjg0MzAyYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJS
ZWdpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgKQEAg
LTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclJlZ2lvbigp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYWludFJlcGxhY2Vk
KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAgdmlydHVhbCBib29sIG5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRl
c3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVz
dFRhcmdldCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgdm9pZCBzdHls
ZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCmluZGV4IGU5MzkwMDRk
YjhkNjkzODc0ZWM2YjI0YzlhOTRkMjdmNzkzMTM1OGMuLjhkNzA4NmRkYmQwNDQ4ODU5ODM5ZjA2
MmI5NTFkOWE2OGQ1ZGYyYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmNwcApAQCAtMTI2NiwxNyArMTI2NiwxNyBAQCBMYXlvdXRSZWN0IFJlbmRlclRhYmxlOjpvdmVy
Zmxvd0NsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyUmVnaQogICAg
IHJldHVybiByZWN0OwogfQogCi1ib29sIFJlbmRlclRhYmxlOjpub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRU
ZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlclRhYmxlOjpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBIaXRUZXN0VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKIHsKICAgICBMYXlv
dXRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigp
OwogCiAgICAgLy8gQ2hlY2sga2lkcyBmaXJzdC4KLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgp
IHx8IHBvaW50SW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxvd0NsaXBSZWN0KGFkanVzdGVk
TG9jYXRpb24sIHBvaW50SW5Db250YWluZXIucmVnaW9uKCkpKSkgeworICAgIGlmICghaGFzT3Zl
cmZsb3dDbGlwKCkgfHwgdGFyZ2V0SW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxvd0NsaXBS
ZWN0KGFkanVzdGVkTG9jYXRpb24sIHRhcmdldEluQ29udGFpbmVyLnJlZ2lvbigpKSkpIHsKICAg
ICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYgKGNoaWxkLT5p
c0JveCgpICYmICF0b1JlbmRlckJveChjaGlsZCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkgJiYg
KGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpIHx8IGNoaWxkLT5pc1RhYmxlQ2FwdGlvbigpKSkgewog
ICAgICAgICAgICAgICAgIExheW91dFBvaW50IGNoaWxkUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01v
ZGVGb3JDaGlsZCh0b1JlbmRlckJveChjaGlsZCksIGFkanVzdGVkTG9jYXRpb24pOwotICAgICAg
ICAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludElu
Q29udGFpbmVyLCBjaGlsZFBvaW50LCBhY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVw
ZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCB0b0xheW91dFBvaW50KHBvaW50SW5Db250YWluZXIu
cG9pbnQoKSAtIGNoaWxkUG9pbnQpKTsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm5vZGVB
dFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgdGFyZ2V0SW5Db250YWluZXIsIGNoaWxkUG9pbnQsIGFj
dGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IHRvTGF5b3V0UG9pbnQodGFyZ2V0SW5Db250YWluZXIucG9pbnQoKSAtIGNoaWxkUG9pbnQpKTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpAQCAtMTI4NSw5ICsxMjg1LDkgQEAgYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UK
IAogICAgIC8vIENoZWNrIG91ciBib3VuZHMgbmV4dC4KICAgICBMYXlvdXRSZWN0IGJvdW5kc1Jl
Y3QoYWRqdXN0ZWRMb2NhdGlvbiwgc2l6ZSgpKTsKLSAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGlu
ZygpICYmIChhY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBhY3Rpb24gPT0gSGl0
VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBwb2ludEluQ29udGFpbmVyLmludGVyc2VjdHMo
Ym91bmRzUmVjdCkpIHsKLSAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBG
b3JXcml0aW5nTW9kZShwb2ludEluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWRq
dXN0ZWRMb2NhdGlvbikpKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2Vk
VGVzdFJlc3VsdChub2RlKCksIHBvaW50SW5Db250YWluZXIsIGJvdW5kc1JlY3QpKQorICAgIGlm
ICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgKGFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3Jv
dW5kIHx8IGFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIHRhcmdldElu
Q29udGFpbmVyLmludGVyc2VjdHMoYm91bmRzUmVjdCkpIHsKKyAgICAgICAgdXBkYXRlSGl0VGVz
dFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZSh0YXJnZXRJbkNvbnRhaW5lci5wb2lu
dCgpIC0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24pKSk7CisgICAgICAgIGlmICghcmVz
dWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCB0YXJnZXRJbkNvbnRhaW5l
ciwgYm91bmRzUmVjdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKaW5kZXggODc0MThmMDY4YzYwOGM1YzE4NDVi
N2VlMjMyMTA2MWZhOTMzZTFjZi4uYjgyNTNlNTU0YmMwMTk0NDQ5ZWQ1M2ZhYzkxN2FmNTlkZGJm
Y2Y0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKQEAgLTI0OSw3ICsy
NDksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwYWludE1hc2soUGFpbnRJbmZvJiwg
Y29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmly
dHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7Ci0gICAgdmlydHVhbCBi
b29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJv
b2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFs
IExheW91dFVuaXQgZmlyc3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdCBPVkVSUklERTsKICAgICB2
aXJ0dWFsIExheW91dFVuaXQgbGFzdExpbmVCb3hCYXNlbGluZSgpIGNvbnN0IE9WRVJSSURFOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAKaW5kZXggN2NhMzNh
ZDYxMjU5NDMxMDg4ZTkzMWMzODRlMmJiYjYwNmE0YTZiMS4uZTUzYjhkMTA1Yzk5NGU3ZTA0MDIw
YTQ2NDE2MTIzZTA0MWMxN2M1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlUm93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVSb3cuY3BwCkBAIC0xOTQsNyArMTk0LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJUYWJsZVJv
dzo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHIK
IH0KIAogLy8gSGl0IFRlc3RpbmcKLWJvb2wgUmVuZGVyVGFibGVSb3c6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKK2Jvb2wgUmVuZGVyVGFibGVSb3c6
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewog
ICAgIC8vIFRhYmxlIHJvd3MgY2Fubm90IGV2ZXIgYmUgaGl0IHRlc3RlZC4gIEVmZmVjdGl2ZWx5
IHRoZXkgZG8gbm90IGV4aXN0LgogICAgIC8vIEp1c3QgZm9yd2FyZCB0byBvdXIgY2hpbGRyZW4g
YWx3YXlzLgpAQCAtMjA1LDggKzIwNSw4IEBAIGJvb2wgUmVuZGVyVGFibGVSb3c6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByCiAgICAg
ICAgIC8vIHRoZW4gd2UgY2FuIHJlbW92ZSB0aGlzIGNoZWNrLgogICAgICAgICBpZiAoY2hpbGQt
PmlzVGFibGVDZWxsKCkgJiYgIXRvUmVuZGVyQm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5
ZXIoKSkgewogICAgICAgICAgICAgTGF5b3V0UG9pbnQgY2VsbFBvaW50ID0gZmxpcEZvcldyaXRp
bmdNb2RlRm9yQ2hpbGQodG9SZW5kZXJUYWJsZUNlbGwoY2hpbGQpLCBhY2N1bXVsYXRlZE9mZnNl
dCk7Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwg
cG9pbnRJbkNvbnRhaW5lciwgY2VsbFBvaW50LCBhY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAg
dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIHRv
TGF5b3V0U2l6ZShjZWxsUG9pbnQpKTsKKyAgICAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9p
bnQocmVxdWVzdCwgcmVzdWx0LCB0YXJnZXRJbkNvbnRhaW5lciwgY2VsbFBvaW50LCBhY3Rpb24p
KSB7CisgICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRhcmdldElu
Q29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoY2VsbFBvaW50KSk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgKaW5kZXggYWZhODM4YzEyNTQ2MWJlNWZjMzU1
ZDAyNjVkY2QzMWNlZjZhMmMzMS4uOWNjMWY4ZmNjM2E5ZDY1NDBjZjFiMGIyYWQ2OWI2YWI5NDNk
OWRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgKQEAgLTk1
LDcgKzk1LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOwogICAgIHZpcnR1YWwg
dm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVj
dEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURF
OwogCiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBpc1RyYW5zcGFyZW50KCkgfHwgaGFzT3ZlcmZsb3dDbGlwKCkgfHwgaGFzVHJhbnNmb3Jt
KCkgfHwgaGFzSGlkZGVuQmFja2ZhY2UoKSB8fCBoYXNNYXNrKCkgfHwgaGFzRmlsdGVyKCk7IH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApp
bmRleCAxZjEzNzllNDhkNjU1MzJjNDRmZjYyNGQyNjlkMTQyMmM0OWEzYmQ3Li4yMTJlZGIxZGE5
MDk3OTQwNTIxNzA5ODM4YWQ1NzI2YWM1OGZmZWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApAQCAtMTM2OSw3ICsxMzY5LDcgQEAgdm9p
ZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNwbGl0Q29sdW1uKHVuc2lnbmVkIHBvcywgdW5zaWduZWQg
Zmlyc3QpCiB9CiAKIC8vIEhpdCBUZXN0aW5nCi1ib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5k
ZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29u
dGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rp
b24gYWN0aW9uKQogewogICAgIC8vIElmIHdlIGhhdmUgbm8gY2hpbGRyZW4gdGhlbiB3ZSBoYXZl
IG5vdGhpbmcgdG8gZG8uCiAgICAgaWYgKCFmaXJzdENoaWxkKCkpCkBAIC0xMzc5LDcgKzEzNzks
NyBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bAogICAgIC8vIEp1c3QgZm9yd2FyZCB0byBvdXIg
Y2hpbGRyZW4gYWx3YXlzLgogICAgIExheW91dFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1
bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCk7CiAKLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkg
JiYgIXBvaW50SW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxvd0NsaXBSZWN0KGFkanVzdGVk
TG9jYXRpb24sIHBvaW50SW5Db250YWluZXIucmVnaW9uKCkpKSkKKyAgICBpZiAoaGFzT3ZlcmZs
b3dDbGlwKCkgJiYgIXRhcmdldEluQ29udGFpbmVyLmludGVyc2VjdHMob3ZlcmZsb3dDbGlwUmVj
dChhZGp1c3RlZExvY2F0aW9uLCB0YXJnZXRJbkNvbnRhaW5lci5yZWdpb24oKSkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaGFzT3ZlcmZsb3dpbmdDZWxsKCkpIHsKQEAgLTEz
OTAsOCArMTM5MCw4IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsCiAgICAgICAgICAgICAvLyB0
aGVuIHdlIGNhbiByZW1vdmUgdGhpcyBjaGVjay4KICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNC
b3goKSAmJiAhdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CiAg
ICAgICAgICAgICAgICAgTGF5b3V0UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9k
ZUZvckNoaWxkKHRvUmVuZGVyQm94KGNoaWxkKSwgYWRqdXN0ZWRMb2NhdGlvbik7Ci0gICAgICAg
ICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5D
b250YWluZXIsIGNoaWxkUG9pbnQsIGFjdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgdXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRvTGF5b3V0UG9pbnQocG9pbnRJbkNvbnRhaW5lci5w
b2ludCgpIC0gY2hpbGRQb2ludCkpOworICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0
UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB0YXJnZXRJbkNvbnRhaW5lciwgY2hpbGRQb2ludCwgYWN0
aW9uKSkgeworICAgICAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwg
dG9MYXlvdXRQb2ludCh0YXJnZXRJbkNvbnRhaW5lci5wb2ludCgpIC0gY2hpbGRQb2ludCkpOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CkBAIC0xNDAxLDcgKzE0MDEsNyBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bAog
CiAgICAgcmVjYWxjQ2VsbHNJZk5lZWRlZCgpOwogCi0gICAgTGF5b3V0UmVjdCBoaXRUZXN0UmVj
dCA9IHBvaW50SW5Db250YWluZXIuYm91bmRpbmdCb3goKTsKKyAgICBMYXlvdXRSZWN0IGhpdFRl
c3RSZWN0ID0gdGFyZ2V0SW5Db250YWluZXIuYm91bmRpbmdCb3goKTsKICAgICBoaXRUZXN0UmVj
dC5tb3ZlQnkoLWFkanVzdGVkTG9jYXRpb24pOwogCiAgICAgTGF5b3V0UmVjdCB0YWJsZUFsaWdu
ZWRSZWN0ID0gbG9naWNhbFJlY3RGb3JXcml0aW5nTW9kZUFuZERpcmVjdGlvbihoaXRUZXN0UmVj
dCk7CkBAIC0xNDIxLDggKzE0MjEsOCBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bAogICAgICAg
ICAgICAgICAgIC0taTsKICAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBj
dXJyZW50LmNlbGxzW2ldOwogICAgICAgICAgICAgICAgIExheW91dFBvaW50IGNlbGxQb2ludCA9
IGZsaXBGb3JXcml0aW5nTW9kZUZvckNoaWxkKGNlbGwsIGFkanVzdGVkTG9jYXRpb24pOwotICAg
ICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxSZW5kZXJPYmplY3QqPihjZWxsKS0+bm9kZUF0
UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBjZWxsUG9pbnQsIGFjdGlv
bikpIHsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBv
aW50SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShjZWxsUG9pbnQpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY2VsbCktPm5vZGVBdFBv
aW50KHJlcXVlc3QsIHJlc3VsdCwgdGFyZ2V0SW5Db250YWluZXIsIGNlbGxQb2ludCwgYWN0aW9u
KSkgeworICAgICAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdGFy
Z2V0SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShjZWxsUG9pbnQpKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCmlu
ZGV4IDg5MTAzOGUxNDg0NDI2ZmE3OTJlYjE5ODUyMTcyYmFmZDcwOWY3OTcuLjE5NzIxZTc3MmZh
NTcyOGQ3MGZiMDZlMjgwNzBkNGYyNzdkNGU4NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKQEAgLTIxNyw3ICsyMTcsNyBAQCBwcml2YXRlOgog
CiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IElu
dFJlY3QqID0gMCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29u
dGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rp
b24pIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0VGFyZ2V0JiB0YXJnZXRJbkNv
bnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0
aW9uKSBPVkVSUklERTsKIAogICAgIHZvaWQgZW5zdXJlUm93cyh1bnNpZ25lZCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCmluZGV4IGI5NmVjYTczZjM2YzE1ZmY2MjI1ZTk5
OGEzOTExMDU1NjcxN2Y0NGEuLjU1YTEwOTI5NGEyMmNhMzVkMzhkZDAxZTVhZTA4ZGQ3ZTU1YjAx
M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaApAQCAtMTU2LDcgKzE1Niw3
IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3Qg
TGF5b3V0UG9pbnQmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lk
IGxheW91dCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgbm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0
VGVzdFBvaW50JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERSB7
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SGl0VGVzdFRhcmdldCYsIGNvbnN0IExheW91dFBvaW50JiwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJ
REUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2b2lkIGRl
bGV0ZVRleHRCb3hlcygpOwogICAgIGJvb2wgY29udGFpbnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZCBsZW4pIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKaW5kZXggOGIxMzgzNTJlNDY4MmI0NWZiY2VlMjRkZTY3
YjdjYWY3MWI1NWU5NC4uOWE3MjU4YTJmNTczYmZkMDcxYzJkNGMyNTgyOTc3YjEwNWY0OGJlMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCkBA
IC0xNTMsMTMgKzE1MywxMyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpjb21wdXRlTG9naWNh
bEhlaWdodCgpCiAgICAgUmVuZGVyQmxvY2s6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KCk7CiB9CiAK
LXZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmhpdElubmVyVGV4dEVsZW1lbnQoSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KQordm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6aGl0
SW5uZXJUZXh0RWxlbWVudChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50
JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
KQogewogICAgIExheW91dFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNl
dCArIGxvY2F0aW9uKCk7CiAgICAgSFRNTEVsZW1lbnQqIGlubmVyVGV4dCA9IGlubmVyVGV4dEVs
ZW1lbnQoKTsKICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKGlubmVyVGV4dCk7CiAgICAgcmVzdWx0
LnNldElubmVyTm9uU2hhcmVkTm9kZShpbm5lclRleHQpOwotICAgIHJlc3VsdC5zZXRMb2NhbFBv
aW50KHBvaW50SW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbiArIGlu
bmVyVGV4dC0+cmVuZGVyQm94KCktPmxvY2F0aW9uKCkpKTsKKyAgICByZXN1bHQuc2V0TG9jYWxQ
b2ludCh0YXJnZXRJbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9uICsg
aW5uZXJUZXh0LT5yZW5kZXJCb3goKS0+bG9jYXRpb24oKSkpOwogfQogCiBzdGF0aWMgY29uc3Qg
Y2hhciogZm9udEZhbWlsaWVzV2l0aEludmFsaWRDaGFyV2lkdGhbXSA9IHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgKaW5kZXggMWE0OGY1ZGJlNjk2MGY1
YTNhNGIyMTFkNTA3NDA3MmVmMmZhYWZhNy4uZmRiZDQxYWFhMGNiNzgyMjExMjFlNTExYzBkMjk4
NjAwZmU3MzM2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIHN0
eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
KTsKIAotICAgIHZvaWQgaGl0SW5uZXJUZXh0RWxlbWVudChIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
TGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCk7CisgICAgdm9pZCBoaXRJbm5lclRleHRFbGVtZW50KEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBMYXlvdXRQb2ludCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCk7CiAKICAgICBpbnQgdGV4dEJsb2NrV2lkdGgoKSBjb25zdDsK
ICAgICBpbnQgdGV4dEJsb2NrSGVpZ2h0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAppbmRleCBhNDYz
MjdlNjVlYTkyMjQ4OWFkZjdhMjljMGI1MmYzMTU0OGFhYTY0Li4xNWRiZGE1MWM5NDM2Nzg0ZTM4
MWY2YjM3ZTc3MWE3ZThmZGI0N2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAKQEAgLTQyLDEzICs0MiwxMyBA
QCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6flJlbmRlclRleHRDb250cm9sTXVsdGlMaW5l
KCkKICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudCo+KG5vZGUoKSktPnJl
bmRlcmVyV2lsbEJlRGVzdHJveWVkKCk7CiB9CiAKLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xNdWx0
aUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RB
Y3Rpb24pCitib29sIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBI
aXRUZXN0VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0gICAgaWYgKCFS
ZW5kZXJUZXh0Q29udHJvbDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29u
dGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlvbikpCisgICAgaWYgKCFSZW5k
ZXJUZXh0Q29udHJvbDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB0YXJnZXRJbkNvbnRh
aW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBpZiAocmVzdWx0LmlubmVyTm9kZSgpID09IG5vZGUoKSB8fCByZXN1bHQu
aW5uZXJOb2RlKCkgPT0gaW5uZXJUZXh0RWxlbWVudCgpKQotICAgICAgICBoaXRJbm5lclRleHRF
bGVtZW50KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lci5wb2ludCgpLCBhY2N1bXVsYXRlZE9mZnNl
dCk7CisgICAgICAgIGhpdElubmVyVGV4dEVsZW1lbnQocmVzdWx0LCB0YXJnZXRJbkNvbnRhaW5l
ci5wb2ludCgpLCBhY2N1bXVsYXRlZE9mZnNldCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRp
TGluZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlM
aW5lLmgKaW5kZXggNWM4NGE1OTEwNWVjYTc3YjEzMWFiMGM1NDRlZjJjNzUwZjU5OWQ3My4uMDY4
MWQxZDZmNzFiN2RmZDNmZmQ5ZTlhNzJhMDliYjlmNGIzNmMxMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmgKQEAgLTM0
LDcgKzM0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0QXJl
YSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9p
bnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RUYXJn
ZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBmbG9hdCBnZXRBdmdD
aGFyV2lkdGgoQXRvbWljU3RyaW5nIGZhbWlseSk7CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IHBy
ZWZlcnJlZENvbnRlbnRXaWR0aChmbG9hdCBjaGFyV2lkdGgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNw
cAppbmRleCAwYjYzMjQ1ZTUyODlmOTQwNjk2NGQ2ZDRlYTE3ZmUyMWFkNTEzMmRhLi5iOGFhOGUy
YmQ3ZTA4MDhhYWNjZmFkMTAwMTI0NGZhMTE1ZjQxMWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcApAQCAt
MjA5LDkgKzIwOSw5IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQo
KQogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdFRhcmdldCYg
dGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwg
SGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewotICAgIGlmICghUmVuZGVyVGV4dENvbnRy
b2w6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11
bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pKQorICAgIGlmICghUmVuZGVyVGV4dENvbnRyb2w6
Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgdGFyZ2V0SW5Db250YWluZXIsIGFjY3VtdWxh
dGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Ly8gU2F5IHRoYXQgd2UgaGl0IHRoZSBpbm5lciB0ZXh0IGVsZW1lbnQgaWYKQEAgLTIyMCw3ICsy
MjAsNyBAQCBib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdAogICAgIC8vICAtIHdlIGhpdCByZWdpb25z
IG5vdCBpbiBhbnkgZGVjb3JhdGlvbiBidXR0b25zLgogICAgIEhUTUxFbGVtZW50KiBjb250YWlu
ZXIgPSBjb250YWluZXJFbGVtZW50KCk7CiAgICAgaWYgKHJlc3VsdC5pbm5lck5vZGUoKS0+aXNE
ZXNjZW5kYW50T2YoaW5uZXJUZXh0RWxlbWVudCgpKSB8fCByZXN1bHQuaW5uZXJOb2RlKCkgPT0g
bm9kZSgpIHx8IChjb250YWluZXIgJiYgY29udGFpbmVyID09IHJlc3VsdC5pbm5lck5vZGUoKSkp
IHsKLSAgICAgICAgTGF5b3V0UG9pbnQgcG9pbnRJblBhcmVudCA9IHBvaW50SW5Db250YWluZXIu
cG9pbnQoKTsKKyAgICAgICAgTGF5b3V0UG9pbnQgcG9pbnRJblBhcmVudCA9IHRhcmdldEluQ29u
dGFpbmVyLnBvaW50KCk7CiAgICAgICAgIGlmIChjb250YWluZXIgJiYgaW5uZXJCbG9ja0VsZW1l
bnQoKSkgewogICAgICAgICAgICAgaWYgKGlubmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJveCgp
KQogICAgICAgICAgICAgICAgIHBvaW50SW5QYXJlbnQgLT0gdG9MYXlvdXRTaXplKGlubmVyQmxv
Y2tFbGVtZW50KCktPnJlbmRlckJveCgpLT5sb2NhdGlvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAppbmRleCAx
MTVjNDgzMDg5NDk2Zjk1OWMyMzY5OTEyNTI2Nzk4ZjljNjNiOTI1Li5iYWZiNjIwOGJjN2RiYzE2
NzFjNGM5ZDVkMzIyNWIxYjY3ZDE2MTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCkBAIC01Niw3ICs1Niw3IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91
dFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCi0gICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIHZv
aWQgYXV0b3Njcm9sbCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyV2lkZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQu
Y3BwCmluZGV4IDNhMzAyNjBmODlkY2M4ZWRiZWVkNmY5NmQ4ZWMwYzNjNDI2NTE5NDcuLjYwNWMw
M2I5Y2ZiNDI2MTI2ZWE0NWI4ZjkzODk0MDFlMDI3ZGJmOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCkBAIC0zODUsMTAgKzM4NSwxMCBAQCBSZW5kZXJXaWRn
ZXQqIFJlbmRlcldpZGdldDo6ZmluZChjb25zdCBXaWRnZXQqIHdpZGdldCkKICAgICByZXR1cm4g
d2lkZ2V0UmVuZGVyZXJNYXAoKS5nZXQod2lkZ2V0KTsKIH0KIAotYm9vbCBSZW5kZXJXaWRnZXQ6
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKK2Jvb2wg
UmVuZGVyV2lkZ2V0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0VGFyZ2V0JiB0YXJnZXRJbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9u
IGFjdGlvbikKIHsKICAgICBib29sIGhhZFJlc3VsdCA9IHJlc3VsdC5pbm5lck5vZGUoKTsKLSAg
ICBib29sIGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1
bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBhY3Rpb24pOworICAgIGJv
b2wgaW5zaWRlID0gUmVuZGVyUmVwbGFjZWQ6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwg
dGFyZ2V0SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBhY3Rpb24pOwogCiAgICAgLy8g
Q2hlY2sgdG8gc2VlIGlmIHdlIGFyZSByZWFsbHkgb3ZlciB0aGUgd2lkZ2V0IGl0c2VsZiAoYW5k
IG5vdCBqdXN0IGluIHRoZSBib3JkZXIvcGFkZGluZyBhcmVhKS4KICAgICBpZiAoKGluc2lkZSB8
fCByZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpICYmICFoYWRSZXN1bHQgJiYgcmVzdWx0LmlubmVy
Tm9kZSgpID09IG5vZGUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJXaWRnZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaApp
bmRleCBiOTNhZTdiNWE1NWE2ODYzOTk1YWRkMDMxYmM5YzYxNTJmODA2NjViLi5mZmYwYmE1Yzg1
ZTlhOWUxNDA1NDZmZDAyNTM3OWE4YmZlNmQxOGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcldpZGdldC5oCkBAIC02MCw3ICs2MCw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0
IExheW91dFBvaW50Jik7CiAgICAgdmlydHVhbCBDdXJzb3JEaXJlY3RpdmUgZ2V0Q3Vyc29yKGNv
bnN0IExheW91dFBvaW50JiwgQ3Vyc29yJikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIG5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRl
c3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVz
dFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CiAKIHByaXZhdGU6CiAgICAgdmlydHVh
bCBib29sIGlzV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCmluZGV4IDQzMTNmYTczNWExNmFjNjliOTE1YzEy
ZTBhMzNlMmVhNTlhNjQ0MmQuLmE0ODljYTk0MDgyMmU2NjM1Mzc5NjM5MjEzNTY3ZWVlOWE0MmNm
OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKQEAgLTIx
NywxNSArMjE3LDE1IEBAIHZvaWQgUm9vdElubGluZUJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwKICNlbmRpZgogfQogCi1ib29s
IFJvb3RJbmxpbmVCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxp
bmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkKK2Jvb2wgUm9vdElubGluZUJveDo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgY29uc3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBv
aW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxp
bmVCb3R0b20pCiB7CiAgICAgaWYgKGhhc0VsbGlwc2lzQm94KCkgJiYgdmlzaWJsZVRvSGl0VGVz
dGluZygpKSB7Ci0gICAgICAgIGlmIChlbGxpcHNpc0JveCgpLT5ub2RlQXRQb2ludChyZXF1ZXN0
LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBsaW5lVG9wLCBs
aW5lQm90dG9tKSkgewotICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhY2N1bXVs
YXRlZE9mZnNldCkpOworICAgICAgICBpZiAoZWxsaXBzaXNCb3goKS0+bm9kZUF0UG9pbnQocmVx
dWVzdCwgcmVzdWx0LCB0YXJnZXRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGxpbmVU
b3AsIGxpbmVCb3R0b20pKSB7CisgICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgdGFyZ2V0SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShh
Y2N1bXVsYXRlZE9mZnNldCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgcmV0dXJuIElubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJl
c3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGxpbmVUb3AsIGxpbmVC
b3R0b20pOworICAgIHJldHVybiBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChyZXF1ZXN0LCBy
ZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgbGluZVRvcCwgbGlu
ZUJvdHRvbSk7CiB9CiAKIHZvaWQgUm9vdElubGluZUJveDo6YWRqdXN0UG9zaXRpb24oZmxvYXQg
ZHgsIGZsb2F0IGR5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJ
bmxpbmVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKaW5k
ZXggMjdjMWFmY2VhODBmMDgwODNjZDI1NzkzM2NiYWE0OTgwMjFhZTY0Zi4uNDg2OTYwYTdkOTJi
M2EwNTdjMjcwYjFmMDg2ZTZhNDUwODUzMTIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Um9vdElubGluZUJveC5oCkBAIC0xMTgsNyArMTE4LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlv
dXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSk7Ci0gICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFp
bmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGlu
ZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBPVkVSUklERTsKIAogICAgIHVzaW5nIElubGlu
ZUJveDo6aGFzU2VsZWN0ZWRDaGlsZHJlbjsKICAgICB1c2luZyBJbmxpbmVCb3g6OnNldEhhc1Nl
bGVjdGVkQ2hpbGRyZW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcAppbmRleCBkNjYwNTY2MTUwNzlhZWNmNzY3Y2Nj
Yjk3NDllMTVjNjFhODViZmNmLi5lY2NkOWNkMzUwNWIyZDhjMjk2N2U0NTMxMzMxMmYzM2VhZTdm
ZjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Zv
cmVpZ25PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHRm9yZWlnbk9iamVjdC5jcHAKQEAgLTE3OCwxMyArMTc4LDEzIEBAIGJvb2wgUmVuZGVyU1ZH
Rm9yZWlnbk9iamVjdDo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEZPcyBlc3RhYmxpc2gg
YSBzdGFja2luZyBjb250ZXh0LCBzbyB3ZSBuZWVkIHRvIGhpdC10ZXN0IGFsbCBsYXllcnMuCi0g
ICAgSGl0VGVzdFBvaW50IGhpdFRlc3RQb2ludChyb3VuZGVkTGF5b3V0UG9pbnQobG9jYWxQb2lu
dCkpOwotICAgIHJldHVybiBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0
LCBoaXRUZXN0UG9pbnQsIExheW91dFBvaW50KCksIEhpdFRlc3RGb3JlZ3JvdW5kKQotICAgICAg
ICB8fCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UG9p
bnQsIExheW91dFBvaW50KCksIEhpdFRlc3RGbG9hdCkKLSAgICAgICAgfHwgUmVuZGVyQmxvY2s6
Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdFBvaW50LCBMYXlvdXRQb2ludCgp
LCBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmRzKTsKKyAgICBIaXRUZXN0VGFyZ2V0IGhpdFRl
c3RUYXJnZXQocm91bmRlZExheW91dFBvaW50KGxvY2FsUG9pbnQpKTsKKyAgICByZXR1cm4gUmVu
ZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdFRhcmdldCwgTGF5
b3V0UG9pbnQoKSwgSGl0VGVzdEZvcmVncm91bmQpCisgICAgICAgIHx8IFJlbmRlckJsb2NrOjpu
b2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RUYXJnZXQsIExheW91dFBvaW50KCks
IEhpdFRlc3RGbG9hdCkKKyAgICAgICAgfHwgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVl
c3QsIHJlc3VsdCwgaGl0VGVzdFRhcmdldCwgTGF5b3V0UG9pbnQoKSwgSGl0VGVzdENoaWxkQmxv
Y2tCYWNrZ3JvdW5kcyk7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHRm9yZWlnbk9iamVjdDo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVz
dFBvaW50JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBIaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJT
VkdGb3JlaWduT2JqZWN0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0VGFyZ2V0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBIaXRU
ZXN0QWN0aW9uKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxz
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9y
ZWlnbk9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3Jl
aWduT2JqZWN0LmgKaW5kZXggODBkZGZkNjMwOGRkOGY2MzlhMTQ1ZDJkMDUzM2YwMjRiNmYyYmNj
Yy4uODczYTgyOGM4ODc1YWY4YzJmYjBjMmFjZTJiMjk1MmJiZTkwMWZmYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmgK
QEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgbV92aWV3cG9ydC5zaXplKCkpOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0Rmxv
YXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKLSAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBI
aXRUZXN0VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wg
aXNTVkdGb3JlaWduT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVh
bCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRD
b250YWluZXIsIGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcywgVHJhbnNmb3JtU3RhdGUm
LCBBcHBseUNvbnRhaW5lckZsaXBPck5vdCA9IEFwcGx5Q29udGFpbmVyRmxpcCwgYm9vbCogd2Fz
Rml4ZWQgPSAwKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKaW5kZXggMThlN2VjYWNlN2EzYTNjNjhkOGY1ZjQw
NDg4ZjJmNmQ5MmI1NGUxNS4uMzljYmE1ZDM5YzViYmQ1ODk5YjRiNTBiYmY4ZTZmZjkxNTkzMGI5
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2Rl
bE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFJlbmRlclNWR01vZGVsT2Jq
ZWN0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5
bAogICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRTdHlsZUNoYW5nZWQodGhpcywgZGlmZiwg
c3R5bGUoKSk7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYs
IGNvbnN0IExheW91dFBvaW50JiwgSGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyU1ZHTW9kZWxP
YmplY3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEhpdFRlc3RUYXJnZXQmLCBjb25zdCBMYXlvdXRQb2ludCYsIEhpdFRlc3RBY3Rpb24p
CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCmlu
ZGV4IDBkODE5MjYwOTNmNmJmNzRlZGMwOGM0OGMyODc5Nzc0YTQ0YjJkNjAuLmU5N2VkOWMxZmQ1
ZjJkMmUxNGQ3NTIzNDAwOTJlNWUwMjBkOTMwOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgKQEAgLTcxLDcgKzcxLDcgQEAg
cHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIC8vIFRoaXMgbWV0aG9kIHNob3VsZCBuZXZlciBi
ZSBjYWxsZWQsIFNWRyB1c2VzIGEgZGlmZmVyZW50IG5vZGVBdFBvaW50IG1ldGhvZAotICAgIGJv
b2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOworICAgIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVz
dFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAppbmRleCA3MDdkYTg4NmUyY2E5
OGExYjY5NmVlYzRiMjYwMjhmNjY2NmZmZDVlLi4zZWMwMzc5NzcyZGE5OTU1YmUwYjE2MjMyMTgz
NDUxZDQ2YmI1YTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jvb3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUm9vdC5jcHAKQEAgLTQxNSw5ICs0MTUsOSBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OnVwZGF0
ZUNhY2hlZEJvdW5kYXJpZXMoKQogICAgIG1fcmVwYWludEJvdW5kaW5nQm94LmluZmxhdGUoYm9y
ZGVyQW5kUGFkZGluZ1dpZHRoKCkpOwogfQogCi1ib29sIFJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJl
bmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFp
bmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24g
aGl0VGVzdEFjdGlvbikKIHsKLSAgICBMYXlvdXRQb2ludCBwb2ludEluUGFyZW50ID0gcG9pbnRJ
bkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KTsKKyAg
ICBMYXlvdXRQb2ludCBwb2ludEluUGFyZW50ID0gdGFyZ2V0SW5Db250YWluZXIucG9pbnQoKSAt
IHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCk7CiAgICAgTGF5b3V0UG9pbnQgcG9pbnRJ
bkJvcmRlckJveCA9IHBvaW50SW5QYXJlbnQgLSB0b0xheW91dFNpemUobG9jYXRpb24oKSk7CiAK
ICAgICAvLyBPbmx5IHRlc3QgU1ZHIGNvbnRlbnQgaWYgdGhlIHBvaW50IGlzIGluIG91ciBjb250
ZW50IGJveC4KQEAgLTQyOSw3ICs0MjksNyBAQCBib29sIFJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZQogICAg
ICAgICAgICAgLy8gRklYTUU6IG5vZGVBdEZsb2F0UG9pbnQoKSBkb2Vzbid0IGhhbmRsZSByZWN0
LWJhc2VkIGhpdCB0ZXN0cyB5ZXQuCiAgICAgICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdEZsb2F0
UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhbFBvaW50LCBoaXRUZXN0QWN0aW9uKSkgewogICAg
ICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQm9yZGVyQm94
KTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVz
dWx0KGNoaWxkLT5ub2RlKCksIHBvaW50SW5Db250YWluZXIpKQorICAgICAgICAgICAgICAgIGlm
ICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoY2hpbGQtPm5vZGUoKSwgdGFy
Z2V0SW5Db250YWluZXIpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtNDQyLDkgKzQ0Miw5IEBAIGJvb2wgUmVuZGVyU1ZHUm9v
dDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1
bHQmIHJlCiAgICAgICAgIC8vIHRvIGJlIGFibGUgdG8gZGV0ZWN0IGhpdHMgb24gdGhlIGJhY2tn
cm91bmQgb2YgYSA8ZGl2PiBlbGVtZW50LiBJZiB3ZSdkIHJldHVybiB0cnVlIGhlcmUgaW4gdGhl
ICdGb3JlZ3JvdW5kJyBwaGFzZSwgd2UgYXJlIG5vdCBhYmxlIAogICAgICAgICAvLyB0byBkZXRl
Y3QgdGhlc2UgaGl0cyBhbnltb3JlLgogICAgICAgICBMYXlvdXRSZWN0IGJvdW5kc1JlY3QoYWNj
dW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpLCBzaXplKCkpOwotICAgICAgICBpZiAocG9pbnRJ
bkNvbnRhaW5lci5pbnRlcnNlY3RzKGJvdW5kc1JlY3QpKSB7CisgICAgICAgIGlmICh0YXJnZXRJ
bkNvbnRhaW5lci5pbnRlcnNlY3RzKGJvdW5kc1JlY3QpKSB7CiAgICAgICAgICAgICB1cGRhdGVI
aXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkJvcmRlckJveCk7Ci0gICAgICAgICAgICBpZiAo
IXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5vZGUoKSwgcG9pbnRJbkNvbnRh
aW5lciwgYm91bmRzUmVjdCkpCisgICAgICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0
QmFzZWRUZXN0UmVzdWx0KG5vZGUoKSwgdGFyZ2V0SW5Db250YWluZXIsIGJvdW5kc1JlY3QpKQog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAppbmRleCA5YWE3ZTdjMTg2YWU0
ODc2OTBjNDBhYWM5MDVmZjVjYzBkMDIzNzQ0Li5hYTUxYzU5MmM5NjQ2ZTMzNDhlYWI1ZGM2YTY2
MjYxNDBlNDVlMWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jvb3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jvb3QuaApAQCAtOTAsNyArOTAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgRmxvYXRSZWN0
IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsg
fQogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KIAotICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBM
YXlvdXRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiByZXBhaW50Q29udGFpbmVyKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUZs
b2F0UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIs
IEZsb2F0UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4ZWQpIGNvbnN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKaW5kZXggZDMwYmExY2Q2MTU3
NzVmZDUzMGY3YmZjMTNhNmU2ZmZiMjQxOTc1MS4uNGNmY2Q5ZjJmNGMzZmE3ZDZhNTFiZmRmN2E4
YmY4NjcwMjY3OGQ2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1RleHQuY3BwCkBAIC00NTEsMTUgKzQ1MSwxNSBAQCBib29sIFJlbmRlclNWR1RleHQ6Om5v
ZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1
bAogICAgICAgICAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVh
KHRoaXMsIGxvY2FsUG9pbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAg
CiAKLSAgICAgICAgICAgIEhpdFRlc3RQb2ludCBoaXRUZXN0UG9pbnQoTGF5b3V0UG9pbnQoZmxv
b3JlZEludFBvaW50KGxvY2FsUG9pbnQpKSk7Ci0gICAgICAgICAgICByZXR1cm4gUmVuZGVyQmxv
Y2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdFBvaW50LCBMYXlvdXRQb2lu
dCgpLCBoaXRUZXN0QWN0aW9uKTsKKyAgICAgICAgICAgIEhpdFRlc3RUYXJnZXQgaGl0VGVzdFRh
cmdldChMYXlvdXRQb2ludChmbG9vcmVkSW50UG9pbnQobG9jYWxQb2ludCkpKTsKKyAgICAgICAg
ICAgIHJldHVybiBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBoaXRU
ZXN0VGFyZ2V0LCBMYXlvdXRQb2ludCgpLCBoaXRUZXN0QWN0aW9uKTsKICAgICAgICAgfQogICAg
IH0KIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0
UG9pbnQmLCBjb25zdCBMYXlvdXRQb2ludCYsIEhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlclNW
R1RleHQ6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEhpdFRlc3RUYXJnZXQmLCBjb25zdCBMYXlvdXRQb2ludCYsIEhpdFRlc3RBY3Rpb24p
CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaAppbmRleCA5M2NiNjRmOGZi
MmU3NGVlYjI4NmFlYmI0NjJkNzlmMmYxYmNkNmRkLi44YTgxZGQ1YzkyNDRiNjk1ODFjMjc2OWE2
NDNkMzFmZmViYzFhYjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1RleHQuaApAQCAtNjIsNyArNjIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBp
c1NWR1RleHQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0
VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRU
ZXN0VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgbm9k
ZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFs
IFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50Jik7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJv
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3Bw
CmluZGV4IDQ3YmI2M2RlMjFiZTNmNjRiM2JhNjFmMDI5ZWU0YjlkNzdkOTc1NWQuLmUzZTM0YWEw
NzQzYzQ5NmFhN2U2YzBhZTM2NDk2ZmZjOGQxMmUzNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcApAQCAtNzAxLDcgKzcwMSw3IEBA
IEZsb2F0UmVjdCBTVkdJbmxpbmVUZXh0Qm94OjpjYWxjdWxhdGVCb3VuZGFyaWVzKCkgY29uc3QK
ICAgICByZXR1cm4gdGV4dFJlY3Q7CiB9CiAKLWJvb2wgU1ZHSW5saW5lVGV4dEJveDo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQsIExheW91dFVuaXQpCitib29sIFNWR0lu
bGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFp
bmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQsIExh
eW91dFVuaXQpCiB7CiAgICAgLy8gRklYTUU6IGludGVncmF0ZSB3aXRoIElubGluZVRleHRCb3g6
Om5vZGVBdFBvaW50IGJldHRlci4KICAgICBBU1NFUlQoIWlzTGluZUJyZWFrKCkpOwpAQCAtNzE0
LDkgKzcxNCw5IEBAIGJvb2wgU1ZHSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmCiAgICAgICAgICAgICBGbG9hdFBv
aW50IGJveE9yaWdpbih4KCksIHkoKSk7CiAgICAgICAgICAgICBib3hPcmlnaW4ubW92ZUJ5KGFj
Y3VtdWxhdGVkT2Zmc2V0KTsKICAgICAgICAgICAgIEZsb2F0UmVjdCByZWN0KGJveE9yaWdpbiwg
c2l6ZSgpKTsKLSAgICAgICAgICAgIGlmIChwb2ludEluQ29udGFpbmVyLmludGVyc2VjdHMocmVj
dCkpIHsKLSAgICAgICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJl
c3VsdCwgcG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVk
T2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2Vk
VGVzdFJlc3VsdChyZW5kZXJlcigpLT5ub2RlKCksIHBvaW50SW5Db250YWluZXIsIHJlY3QpKQor
ICAgICAgICAgICAgaWYgKHRhcmdldEluQ29udGFpbmVyLmludGVyc2VjdHMocmVjdCkpIHsKKyAg
ICAgICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdGFy
Z2V0SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkp
OworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1
bHQocmVuZGVyZXIoKS0+bm9kZSgpLCB0YXJnZXRJbkNvbnRhaW5lciwgcmVjdCkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAppbmRleCBh
NGUwM2Q4MjgxYzRlODU1YzAyMTY3MGUwNzJiZGRiNWFiOGJlYzg0Li44YmRjMDY4YTAxZmJmY2M2
NzYzZWIzMzFhMzdiZWFmMjU2YWZjNWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR0lubGluZVRleHRCb3guaApAQCAtNzksNyArNzksNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVyU3R5bGUq
LCBUZXh0UnVuJiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50IHN0YXJ0UG9zaXRpb24sIGlu
dCBlbmRQb3NpdGlvbik7CiAgICAgdm9pZCBwYWludFRleHQoR3JhcGhpY3NDb250ZXh0KiwgUmVu
ZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUsIGNvbnN0IFNWR1RleHRGcmFn
bWVudCYsIGJvb2wgaGFzU2VsZWN0aW9uLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSk7CiAK
LSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0
VW5pdCBsaW5lQm90dG9tKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFRhcmdl
dCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIE9WRVJSSURFOwog
CiBwcml2YXRlOgogICAgIGZsb2F0IG1fbG9naWNhbEhlaWdodDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155246</attachid>
            <date>2012-07-30 03:38:29 -0700</date>
            <delta_ts>2012-08-24 04:41:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90992-20120730123814.patch</filename>
            <type>text/plain</type>
            <size>143071</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmNmNzAwZWUwZDI5NTZk
ZGNlMWE3MmY1ZWZmOTU0OTdiM2VmNWZiMC4uM2U0OWQxZTRiNTM1NTcwYjdiZjk1NzdkMTFmMjc1
ZGUzZWI0MWVkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MSBAQAorMjAxMi0wNy0zMCAgQWxs
YW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KKworICAgICAgICBS
ZW5hbWUgSGl0VGVzdFBvaW50IGFuZCBwb2ludEluQ29udGFpbmVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDk5MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBmb3JtZXIgaGl0VGVzdFBvaW50IGlz
IG5vdCBqdXN0IGEgcG9pbnQuIEl0IGNhbiBiZSBlaXRoZXIgYSBwb2ludCBvciBhbiBhcmVhIGJl
aW5nCisgICAgICAgIGhpdCB0ZXN0ZWQuIFRoaXMgcGF0Y2hlcyByZW5hbWVzICdwb2ludCcgdG8g
J3RhcmdldCcgdG8gbWFrZSBpdCBtb3JlIG9idmlvdXMgdGhhdCB0aGUKKyAgICAgICAgY29kZSBk
b2VzIG5vdCBvbmx5IGhhbmRsZSBwb2ludHMuCisKKyAgICAgICAgVGhpcyBwYXRjaCB0YWtlcyB0
aGUgb3Bwb3J0dW5pdHkgdG8gYWxzbyByZW5hbWUgaXNSZWN0QmFzZWQgdG8gaXNBcmVhQmFzZWQg
aW4gaGl0IHRlc3QKKyAgICAgICAgdGFyZ2V0LCBzaW5jZSB0aGUgdGFyZ2V0IGlzIG5vIGxvbmdl
ciByZXN0cmljdGVkIHRvIG9ubHkgYmVpbmcgYSBwb2ludCBvciBhIHJlY3QuCisKKyAgICAgICAg
Tm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHkuIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIHJl
bmRlcmluZy9FbGxpcHNpc0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6
bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9FbGxpcHNpc0JveC5oOgorICAgICAg
ICAoRWxsaXBzaXNCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RUYXJnZXQ6OkhpdFRlc3RUYXJnZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6SGl0VGVzdFRhcmdldDo6fkhpdFRlc3RUYXJnZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SGl0VGVzdFRhcmdldDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRl
c3RUYXJnZXQ6Om1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFRhcmdldDo6aW50ZXJz
ZWN0c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFRhcmdldDo6aW50ZXJzZWN0cyk6
CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0VGFyZ2V0OjpyZWN0Rm9yUG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdCk6CisgICAgICAgIChXZWJD
b3JlOjpIaXRUZXN0UmVzdWx0OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVz
dFJlc3VsdDo6YWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdCk6CisgICAgICAgIChXZWJDb3Jl
OjpIaXRUZXN0UmVzdWx0OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3Vs
dDo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5oOgorICAgICAgICAoSGl0VGVzdFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRU
ZXN0VGFyZ2V0Ojppc0FyZWFCYXNlZFRlc3QpOgorICAgICAgICAoSGl0VGVzdFJlc3VsdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Ojp0YXJnZXQpOgorICAgICAgICAqIHJlbmRl
cmluZy9JbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94Ojpub2RlQXRQ
b2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUJveC5oOgorICAgICAgICAoSW5saW5l
Qm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5n
L0lubGluZUZsb3dCb3guaDoKKyAgICAgICAgKElubGluZUZsb3dCb3gpOgorICAgICAgICAqIHJl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRC
b3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oOgor
ICAgICAgICAoSW5saW5lVGV4dEJveCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0Nv
bnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0RmxvYXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0Q29sdW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6YWRqdXN0Rm9yQ29sdW1uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6aGl0VGVzdENvbnRlbnRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaDoKKyAgICAgICAgKFJlbmRlckJsb2NrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bm9kZUF0UG9pbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKFJlbmRlckJveCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0Lmg6CisgICAgICAgIChSZW5kZXJFbWJlZGRlZE9iamVj
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6aGl0VGVzdFJlZ2lvbik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJh
bWVTZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWVTZXQ6Om5vZGVBdFBvaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuaDoKKyAgICAgICAgKFJlbmRl
ckZyYW1lU2V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVySW1hZ2UuaDoKKyAgICAgICAgKFJlbmRlckltYWdlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6
bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDoKKyAgICAg
ICAgKFJlbmRlcklubGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNsaXBSZWN0OjppbnRlcnNlY3RzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpoaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpjcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpoaXRUZXN0TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRl
c3RDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExpc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RQYWdpbmF0ZWRDaGlsZExh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0Q2hpbGRMYXllckNv
bHVtbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAoQ2xp
cFJlY3QpOgorICAgICAgICAoUmVuZGVyTGF5ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMaW5lQm94TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaW5lQm94TGlzdDo6
aGl0VGVzdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0Lmg6CisgICAg
ICAgIChSZW5kZXJMaW5lQm94TGlzdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6aXNQb2ludEluT3ZlcmZs
b3dDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6Om5vZGVBdFBvaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oOgorICAgICAgICAoUmVuZGVy
TGlzdEJveCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmhpdFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oOgorICAgICAgICAoUmVuZGVyT2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
UmVnaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6bm9kZUF0UG9pbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZWdpb24uaDoKKyAgICAgICAgKFJlbmRlclJl
Z2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRhYmxlLmg6CisgICAgICAgIChSZW5kZXJUYWJsZSk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRhYmxlUm93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlUm93Ojpu
b2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93Lmg6CisgICAg
ICAgIChSZW5kZXJUYWJsZVJvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBv
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmg6CisgICAgICAg
IChSZW5kZXJUYWJsZVNlY3Rpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpoaXRJbm5lclRleHRFbGVtZW50KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaDoKKyAgICAgICAgKFJlbmRlclRleHRDb250
cm9sKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6Om5vZGVBdFBv
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaDoK
KyAgICAgICAgKFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaDoKKyAgICAgICAgKFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6Om5vZGVBdFBvaW50KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0Lmg6CisgICAgICAgIChSZW5kZXJXaWRnZXQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJv
b3RJbmxpbmVCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGlu
ZUJveC5oOgorICAgICAgICAoUm9vdElubGluZUJveCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R0ZvcmVpZ25PYmplY3Q6Om5vZGVBdEZsb2F0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHRm9yZWlnbk9iamVjdDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oOgorICAgICAgICAoUmVuZGVyU1ZHRm9yZWlnbk9i
amVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdNb2RlbE9iamVjdDo6bm9kZUF0UG9pbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaDoKKyAgICAgICAg
KFJlbmRlclNWR01vZGVsT2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6bm9kZUF0UG9pbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oOgorICAgICAgICAoUmVu
ZGVyU1ZHUm9vdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6Om5vZGVBdEZsb2F0UG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oOgorICAgICAgICAoUmVuZGVyU1ZHVGV4dCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0lubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1NWR0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKFNWR0lubGluZVRleHRCb3gpOgor
CiAyMDEyLTA3LTMwICBIYXlhdG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZW1vdmUgdW5uZWNlc3NhcnkgY29kZSB3aGljaCBzZXQgZXZlbnQncyB0YXJnZXQgZnJvbSBF
dmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Vs
bGlwc2lzQm94LmNwcAppbmRleCA4YzAwZmNhNzVjYjJjZWY5NjdlMTJkNTMyYzc3ZDVhZWY3ZDY0
YTk5Li5iMjA0YjExNTkyYzcwODkwODgxMzFmNjU5ZDlkYzhlZTljYTY5NjAzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lk
IEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IExheW91dFBvaW50JiBwYQogICAgIGNvbnRleHQtPmRyYXdIaWdobGlnaHRGb3JUZXh0KGZv
bnQsIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHJlbmRlcmVyKCksIGZvbnQsIG1fc3Ry
LCBzdHlsZSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiksIHJvdW5kZWRJbnRQb2lu
dChMYXlvdXRQb2ludCh4KCkgKyBwYWludE9mZnNldC54KCksIHkoKSArIHBhaW50T2Zmc2V0Lnko
KSArIHRvcCkpLCBoLCBjLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKIH0KIAotYm9vbCBFbGxpcHNp
c0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSGl0VGVzdFBvaW50JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlvdXRVbml0LCBMYXlv
dXRVbml0KQorYm9vbCBFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFRhcmdldCYsIGNvbnN0IExheW91dFBv
aW50JiwgTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCmluZGV4IDM1ZDYzNGQ3ZDg5ODBkZjNh
NjIyYWRmYzE3ODljMjRiZGI1MzQxNmMuLjA1ZDJkMGM0ZTc5OTBmZTc3NTI2MWFiNTE1ZWMzZDkx
NWZkNzAwZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0Jv
eC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCkBAIC00MCw3
ICs0MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJ
bmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQg
bGluZUJvdHRvbSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxp
bmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9t
KSBPVkVSUklERTsKICAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFJlbmRlck9iamVjdDo6U2Vs
ZWN0aW9uU3RhdGUgcykgeyBtX3NlbGVjdGlvblN0YXRlID0gczsgfQogICAgIEludFJlY3Qgc2Vs
ZWN0aW9uUmVjdCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0
VGVzdFJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5j
cHAKaW5kZXggMGY2ZTRiOTE2NmE4Y2UxMjkzNDJiNTUzZTBmNDZlYzVhMTJlZWM2YS4uMmUxMzFj
NDY3ODA4OWU1MmM1ZGE0NmI1YzMxYjVjOWMwYzMzYTkxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcApAQCAtNDgsOTggKzQ4LDk4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSGl0VGVzdFBvaW50OjpI
aXRUZXN0UG9pbnQoKQorSGl0VGVzdFRhcmdldDo6SGl0VGVzdFRhcmdldCgpCiAgICAgOiBtX3Jl
Z2lvbigwKQotICAgICwgbV9pc1JlY3RCYXNlZChmYWxzZSkKKyAgICAsIG1faXNBcmVhQmFzZWQo
ZmFsc2UpCiAgICAgLCBtX2lzUmVjdGlsaW5lYXIodHJ1ZSkKIHsKIH0KIAotSGl0VGVzdFBvaW50
OjpIaXRUZXN0UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQorSGl0VGVzdFRhcmdldDo6
SGl0VGVzdFRhcmdldChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCiAgICAgOiBtX3BvaW50KHBv
aW50KQogICAgICwgbV9ib3VuZGluZ0JveChyZWN0Rm9yUG9pbnQocG9pbnQsIDAsIDAsIDAsIDAp
KQogICAgICwgbV90cmFuc2Zvcm1lZFBvaW50KHBvaW50KQogICAgICwgbV90cmFuc2Zvcm1lZFJl
Y3QobV9ib3VuZGluZ0JveCkKICAgICAsIG1fcmVnaW9uKDApCi0gICAgLCBtX2lzUmVjdEJhc2Vk
KGZhbHNlKQorICAgICwgbV9pc0FyZWFCYXNlZChmYWxzZSkKICAgICAsIG1faXNSZWN0aWxpbmVh
cih0cnVlKQogewogfQogCi1IaXRUZXN0UG9pbnQ6OkhpdFRlc3RQb2ludChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCkKK0hpdFRlc3RUYXJnZXQ6OkhpdFRlc3RUYXJnZXQoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpCiAgICAgOiBtX3BvaW50KHJvdW5kZWRMYXlvdXRQb2ludChwb2ludCkpCiAgICAg
LCBtX2JvdW5kaW5nQm94KHJlY3RGb3JQb2ludChtX3BvaW50LCAwLCAwLCAwLCAwKSkKICAgICAs
IG1fdHJhbnNmb3JtZWRQb2ludChwb2ludCkKICAgICAsIG1fdHJhbnNmb3JtZWRSZWN0KG1fYm91
bmRpbmdCb3gpCiAgICAgLCBtX3JlZ2lvbigwKQotICAgICwgbV9pc1JlY3RCYXNlZChmYWxzZSkK
KyAgICAsIG1faXNBcmVhQmFzZWQoZmFsc2UpCiAgICAgLCBtX2lzUmVjdGlsaW5lYXIodHJ1ZSkK
IHsKIH0KIAotSGl0VGVzdFBvaW50OjpIaXRUZXN0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKK0hpdFRlc3RUYXJnZXQ6OkhpdFRlc3RUYXJnZXQo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKICAgICA6IG1f
dHJhbnNmb3JtZWRQb2ludChwb2ludCkKICAgICAsIG1fdHJhbnNmb3JtZWRSZWN0KHF1YWQpCiAg
ICAgLCBtX3JlZ2lvbigwKQotICAgICwgbV9pc1JlY3RCYXNlZCh0cnVlKQorICAgICwgbV9pc0Fy
ZWFCYXNlZCh0cnVlKQogewogICAgIG1fcG9pbnQgPSByb3VuZGVkTGF5b3V0UG9pbnQocG9pbnQp
OwogICAgIG1fYm91bmRpbmdCb3ggPSBlbmNsb3NpbmdJbnRSZWN0KHF1YWQuYm91bmRpbmdCb3go
KSk7CiAgICAgbV9pc1JlY3RpbGluZWFyID0gcXVhZC5pc1JlY3RpbGluZWFyKCk7CiB9CiAKLUhp
dFRlc3RQb2ludDo6SGl0VGVzdFBvaW50KGNvbnN0IExheW91dFBvaW50JiBjZW50ZXJQb2ludCwg
dW5zaWduZWQgdG9wUGFkZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLCB1bnNpZ25lZCBib3R0
b21QYWRkaW5nLCB1bnNpZ25lZCBsZWZ0UGFkZGluZykKK0hpdFRlc3RUYXJnZXQ6OkhpdFRlc3RU
YXJnZXQoY29uc3QgTGF5b3V0UG9pbnQmIGNlbnRlclBvaW50LCB1bnNpZ25lZCB0b3BQYWRkaW5n
LCB1bnNpZ25lZCByaWdodFBhZGRpbmcsIHVuc2lnbmVkIGJvdHRvbVBhZGRpbmcsIHVuc2lnbmVk
IGxlZnRQYWRkaW5nKQogICAgIDogbV9wb2ludChjZW50ZXJQb2ludCkKICAgICAsIG1fYm91bmRp
bmdCb3gocmVjdEZvclBvaW50KGNlbnRlclBvaW50LCB0b3BQYWRkaW5nLCByaWdodFBhZGRpbmcs
IGJvdHRvbVBhZGRpbmcsIGxlZnRQYWRkaW5nKSkKICAgICAsIG1fdHJhbnNmb3JtZWRQb2ludChj
ZW50ZXJQb2ludCkKICAgICAsIG1fcmVnaW9uKDApCi0gICAgLCBtX2lzUmVjdEJhc2VkKHRvcFBh
ZGRpbmcgfHwgcmlnaHRQYWRkaW5nIHx8IGJvdHRvbVBhZGRpbmcgfHwgbGVmdFBhZGRpbmcpCisg
ICAgLCBtX2lzQXJlYUJhc2VkKHRvcFBhZGRpbmcgfHwgcmlnaHRQYWRkaW5nIHx8IGJvdHRvbVBh
ZGRpbmcgfHwgbGVmdFBhZGRpbmcpCiAgICAgLCBtX2lzUmVjdGlsaW5lYXIodHJ1ZSkKIHsKICAg
ICBtX3RyYW5zZm9ybWVkUmVjdCA9IEZsb2F0UXVhZChtX2JvdW5kaW5nQm94KTsKIH0KIAotSGl0
VGVzdFBvaW50OjpIaXRUZXN0UG9pbnQoY29uc3QgSGl0VGVzdFBvaW50JiBvdGhlciwgY29uc3Qg
TGF5b3V0U2l6ZSYgb2Zmc2V0LCBSZW5kZXJSZWdpb24qIHJlZ2lvbikKK0hpdFRlc3RUYXJnZXQ6
OkhpdFRlc3RUYXJnZXQoY29uc3QgSGl0VGVzdFRhcmdldCYgb3RoZXIsIGNvbnN0IExheW91dFNp
emUmIG9mZnNldCwgUmVuZGVyUmVnaW9uKiByZWdpb24pCiAgICAgOiBtX3BvaW50KG90aGVyLm1f
cG9pbnQpCiAgICAgLCBtX2JvdW5kaW5nQm94KG90aGVyLm1fYm91bmRpbmdCb3gpCiAgICAgLCBt
X3RyYW5zZm9ybWVkUG9pbnQob3RoZXIubV90cmFuc2Zvcm1lZFBvaW50KQogICAgICwgbV90cmFu
c2Zvcm1lZFJlY3Qob3RoZXIubV90cmFuc2Zvcm1lZFJlY3QpCiAgICAgLCBtX3JlZ2lvbihyZWdp
b24pCi0gICAgLCBtX2lzUmVjdEJhc2VkKG90aGVyLm1faXNSZWN0QmFzZWQpCisgICAgLCBtX2lz
QXJlYUJhc2VkKG90aGVyLm1faXNBcmVhQmFzZWQpCiAgICAgLCBtX2lzUmVjdGlsaW5lYXIob3Ro
ZXIubV9pc1JlY3RpbGluZWFyKQogewogICAgIG1vdmUob2Zmc2V0KTsKIH0KIAotSGl0VGVzdFBv
aW50OjpIaXRUZXN0UG9pbnQoY29uc3QgSGl0VGVzdFBvaW50JiBvdGhlcikKK0hpdFRlc3RUYXJn
ZXQ6OkhpdFRlc3RUYXJnZXQoY29uc3QgSGl0VGVzdFRhcmdldCYgb3RoZXIpCiAgICAgOiBtX3Bv
aW50KG90aGVyLm1fcG9pbnQpCiAgICAgLCBtX2JvdW5kaW5nQm94KG90aGVyLm1fYm91bmRpbmdC
b3gpCiAgICAgLCBtX3RyYW5zZm9ybWVkUG9pbnQob3RoZXIubV90cmFuc2Zvcm1lZFBvaW50KQog
ICAgICwgbV90cmFuc2Zvcm1lZFJlY3Qob3RoZXIubV90cmFuc2Zvcm1lZFJlY3QpCiAgICAgLCBt
X3JlZ2lvbihvdGhlci5tX3JlZ2lvbikKLSAgICAsIG1faXNSZWN0QmFzZWQob3RoZXIubV9pc1Jl
Y3RCYXNlZCkKKyAgICAsIG1faXNBcmVhQmFzZWQob3RoZXIubV9pc0FyZWFCYXNlZCkKICAgICAs
IG1faXNSZWN0aWxpbmVhcihvdGhlci5tX2lzUmVjdGlsaW5lYXIpCiB7CiB9CiAKLUhpdFRlc3RQ
b2ludDo6fkhpdFRlc3RQb2ludCgpCitIaXRUZXN0VGFyZ2V0Ojp+SGl0VGVzdFRhcmdldCgpCiB7
CiB9CiAKLUhpdFRlc3RQb2ludCYgSGl0VGVzdFBvaW50OjpvcGVyYXRvcj0oY29uc3QgSGl0VGVz
dFBvaW50JiBvdGhlcikKK0hpdFRlc3RUYXJnZXQmIEhpdFRlc3RUYXJnZXQ6Om9wZXJhdG9yPShj
b25zdCBIaXRUZXN0VGFyZ2V0JiBvdGhlcikKIHsKICAgICBtX3BvaW50ID0gb3RoZXIubV9wb2lu
dDsKICAgICBtX2JvdW5kaW5nQm94ID0gb3RoZXIubV9ib3VuZGluZ0JveDsKICAgICBtX3RyYW5z
Zm9ybWVkUG9pbnQgPSBvdGhlci5tX3RyYW5zZm9ybWVkUG9pbnQ7CiAgICAgbV90cmFuc2Zvcm1l
ZFJlY3QgPSBvdGhlci5tX3RyYW5zZm9ybWVkUmVjdDsKICAgICBtX3JlZ2lvbiA9IG90aGVyLm1f
cmVnaW9uOwotICAgIG1faXNSZWN0QmFzZWQgPSBvdGhlci5tX2lzUmVjdEJhc2VkOworICAgIG1f
aXNBcmVhQmFzZWQgPSBvdGhlci5tX2lzQXJlYUJhc2VkOwogICAgIG1faXNSZWN0aWxpbmVhciA9
IG90aGVyLm1faXNSZWN0aWxpbmVhcjsKIAogICAgIHJldHVybiAqdGhpczsKIH0KIAotdm9pZCBI
aXRUZXN0UG9pbnQ6Om1vdmUoY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0KQordm9pZCBIaXRUZXN0
VGFyZ2V0Ojptb3ZlKGNvbnN0IExheW91dFNpemUmIG9mZnNldCkKIHsKICAgICBtX3BvaW50Lm1v
dmUob2Zmc2V0KTsKICAgICBtX3RyYW5zZm9ybWVkUG9pbnQubW92ZShvZmZzZXQpOwpAQCAtMTQ4
LDcgKzE0OCw3IEBAIHZvaWQgSGl0VGVzdFBvaW50Ojptb3ZlKGNvbnN0IExheW91dFNpemUmIG9m
ZnNldCkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgUmVjdFR5cGU+Ci1ib29sIEhpdFRlc3RQb2lu
dDo6aW50ZXJzZWN0c1JlY3QoY29uc3QgUmVjdFR5cGUmIHJlY3QpIGNvbnN0Citib29sIEhpdFRl
c3RUYXJnZXQ6OmludGVyc2VjdHNSZWN0KGNvbnN0IFJlY3RUeXBlJiByZWN0KSBjb25zdAogewog
ICAgIC8vIEZJWE1FOiBXaGVuIHRoZSBoaXQgdGVzdCBpcyBub3QgcmVjdCBiYXNlZCB3ZSBzaG91
bGQgdXNlIHJlY3QuY29udGFpbnMobV9wb2ludCkuCiAgICAgLy8gVGhhdCBkb2VzIGNoYW5nZSBz
b21lIGNvcm5lciBjYXNlIHRlc3RzIHRob3VnaC4KQEAgLTE2OSwxNyArMTY5LDE3IEBAIGJvb2wg
SGl0VGVzdFBvaW50OjppbnRlcnNlY3RzUmVjdChjb25zdCBSZWN0VHlwZSYgcmVjdCkgY29uc3QK
ICAgICByZXR1cm4gbV90cmFuc2Zvcm1lZFJlY3QuaW50ZXJzZWN0c1JlY3QocmVjdCk7CiB9CiAK
LWJvb2wgSGl0VGVzdFBvaW50OjppbnRlcnNlY3RzKGNvbnN0IExheW91dFJlY3QmIHJlY3QpIGNv
bnN0Citib29sIEhpdFRlc3RUYXJnZXQ6OmludGVyc2VjdHMoY29uc3QgTGF5b3V0UmVjdCYgcmVj
dCkgY29uc3QKIHsKICAgICByZXR1cm4gaW50ZXJzZWN0c1JlY3QocmVjdCk7CiB9CiAKLWJvb2wg
SGl0VGVzdFBvaW50OjppbnRlcnNlY3RzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKK2Jv
b2wgSGl0VGVzdFRhcmdldDo6aW50ZXJzZWN0cyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGludGVyc2VjdHNSZWN0KHJlY3QpOwogfQogCi1JbnRSZWN0IEhpdFRl
c3RQb2ludDo6cmVjdEZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgdW5zaWduZWQg
dG9wUGFkZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLCB1bnNpZ25lZCBib3R0b21QYWRkaW5n
LCB1bnNpZ25lZCBsZWZ0UGFkZGluZykKK0ludFJlY3QgSGl0VGVzdFRhcmdldDo6cmVjdEZvclBv
aW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgdW5zaWduZWQgdG9wUGFkZGluZywgdW5zaWdu
ZWQgcmlnaHRQYWRkaW5nLCB1bnNpZ25lZCBib3R0b21QYWRkaW5nLCB1bnNpZ25lZCBsZWZ0UGFk
ZGluZykKIHsKICAgICBJbnRQb2ludCBhY3R1YWxQb2ludChyb3VuZGVkSW50UG9pbnQocG9pbnQp
KTsKICAgICBhY3R1YWxQb2ludCAtPSBJbnRTaXplKGxlZnRQYWRkaW5nLCB0b3BQYWRkaW5nKTsK
QEAgLTE5MiwzNCArMTkyLDM0IEBAIEludFJlY3QgSGl0VGVzdFBvaW50OjpyZWN0Rm9yUG9pbnQo
Y29uc3QgTGF5b3V0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCB0b3BQYWRkaW5nCiAgICAgcmV0dXJu
IEludFJlY3QoYWN0dWFsUG9pbnQsIGFjdHVhbFBhZGRpbmcpOwogfQogCi1IaXRUZXN0UmVzdWx0
OjpIaXRUZXN0UmVzdWx0KCkgOiBIaXRUZXN0UG9pbnQoKQorSGl0VGVzdFJlc3VsdDo6SGl0VGVz
dFJlc3VsdCgpIDogSGl0VGVzdFRhcmdldCgpCiAgICAgLCBtX2lzT3ZlcldpZGdldChmYWxzZSkK
ICAgICAsIG1fc2hhZG93Q29udGVudEZpbHRlclBvbGljeShEb05vdEFsbG93U2hhZG93Q29udGVu
dCkKIHsKIH0KIAotSGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdChjb25zdCBMYXlvdXRQb2lu
dCYgcG9pbnQpIDogSGl0VGVzdFBvaW50KHBvaW50KQorSGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJl
c3VsdChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpIDogSGl0VGVzdFRhcmdldChwb2ludCkKICAg
ICAsIG1faXNPdmVyV2lkZ2V0KGZhbHNlKQogICAgICwgbV9zaGFkb3dDb250ZW50RmlsdGVyUG9s
aWN5KERvTm90QWxsb3dTaGFkb3dDb250ZW50KQogewogfQogCiBIaXRUZXN0UmVzdWx0OjpIaXRU
ZXN0UmVzdWx0KGNvbnN0IExheW91dFBvaW50JiBjZW50ZXJQb2ludCwgdW5zaWduZWQgdG9wUGFk
ZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLCB1bnNpZ25lZCBib3R0b21QYWRkaW5nLCB1bnNp
Z25lZCBsZWZ0UGFkZGluZywgU2hhZG93Q29udGVudEZpbHRlclBvbGljeSBhbGxvd1NoYWRvd0Nv
bnRlbnQpCi0gICAgOiBIaXRUZXN0UG9pbnQoY2VudGVyUG9pbnQsIHRvcFBhZGRpbmcsIHJpZ2h0
UGFkZGluZywgYm90dG9tUGFkZGluZywgbGVmdFBhZGRpbmcpCisgICAgOiBIaXRUZXN0VGFyZ2V0
KGNlbnRlclBvaW50LCB0b3BQYWRkaW5nLCByaWdodFBhZGRpbmcsIGJvdHRvbVBhZGRpbmcsIGxl
ZnRQYWRkaW5nKQogICAgICwgbV9pc092ZXJXaWRnZXQoZmFsc2UpCiAgICAgLCBtX3NoYWRvd0Nv
bnRlbnRGaWx0ZXJQb2xpY3koYWxsb3dTaGFkb3dDb250ZW50KQogewogfQogCi1IaXRUZXN0UmVz
dWx0OjpIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RQb2ludCYgb3RoZXIsIFNoYWRvd0NvbnRl
bnRGaWx0ZXJQb2xpY3kgYWxsb3dTaGFkb3dDb250ZW50KQotICAgIDogSGl0VGVzdFBvaW50KG90
aGVyKQorSGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0VGFyZ2V0JiBv
dGhlciwgU2hhZG93Q29udGVudEZpbHRlclBvbGljeSBhbGxvd1NoYWRvd0NvbnRlbnQpCisgICAg
OiBIaXRUZXN0VGFyZ2V0KG90aGVyKQogICAgICwgbV9pc092ZXJXaWRnZXQoZmFsc2UpCiAgICAg
LCBtX3NoYWRvd0NvbnRlbnRGaWx0ZXJQb2xpY3koYWxsb3dTaGFkb3dDb250ZW50KQogewogfQog
CiBIaXRUZXN0UmVzdWx0OjpIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIG90aGVy
KQotICAgIDogSGl0VGVzdFBvaW50KG90aGVyKQorICAgIDogSGl0VGVzdFRhcmdldChvdGhlcikK
ICAgICAsIG1faW5uZXJOb2RlKG90aGVyLmlubmVyTm9kZSgpKQogICAgICwgbV9pbm5lck5vblNo
YXJlZE5vZGUob3RoZXIuaW5uZXJOb25TaGFyZWROb2RlKCkpCiAgICAgLCBtX2xvY2FsUG9pbnQo
b3RoZXIubG9jYWxQb2ludCgpKQpAQCAtMjM4LDcgKzIzOCw3IEBAIEhpdFRlc3RSZXN1bHQ6On5I
aXRUZXN0UmVzdWx0KCkKIAogSGl0VGVzdFJlc3VsdCYgSGl0VGVzdFJlc3VsdDo6b3BlcmF0b3I9
KGNvbnN0IEhpdFRlc3RSZXN1bHQmIG90aGVyKQogewotICAgIEhpdFRlc3RQb2ludDo6b3BlcmF0
b3I9KG90aGVyKTsKKyAgICBIaXRUZXN0VGFyZ2V0OjpvcGVyYXRvcj0ob3RoZXIpOwogICAgIG1f
aW5uZXJOb2RlID0gb3RoZXIuaW5uZXJOb2RlKCk7CiAgICAgbV9pbm5lck5vblNoYXJlZE5vZGUg
PSBvdGhlci5pbm5lck5vblNoYXJlZE5vZGUoKTsKICAgICBtX2xvY2FsUG9pbnQgPSBvdGhlci5s
b2NhbFBvaW50KCk7CkBAIC02NzQsMTEgKzY3NCwxMSBAQCBib29sIEhpdFRlc3RSZXN1bHQ6Omlz
Q29udGVudEVkaXRhYmxlKCkgY29uc3QKICAgICByZXR1cm4gbV9pbm5lck5vblNoYXJlZE5vZGUt
PnJlbmRlcmVySXNFZGl0YWJsZSgpOwogfQogCi1ib29sIEhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVU
b1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSogbm9kZSwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2lu
dEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KQorYm9vbCBIaXRUZXN0UmVzdWx0
OjphZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqIG5vZGUsIGNvbnN0IEhpdFRlc3RU
YXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KQogewogICAg
IC8vIElmIGl0IGlzIG5vdCBhIHJlY3QtYmFzZWQgaGl0IHRlc3QsIHRoaXMgbWV0aG9kIGhhcyB0
byBiZSBuby1vcC4KICAgICAvLyBSZXR1cm4gZmFsc2UsIHNvIHRoZSBoaXQgdGVzdCBzdG9wcy4K
LSAgICBpZiAoIWlzUmVjdEJhc2VkVGVzdCgpKQorICAgIGlmICghaXNBcmVhQmFzZWRUZXN0KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIElmIG5vZGUgaXMgbnVsbCwgcmV0dXJu
IHRydWUgc28gdGhlIGhpdCB0ZXN0IGNhbiBjb250aW51ZS4KQEAgLTY5MCw3ICs2OTAsNyBAQCBi
b29sIEhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSogbm9k
ZSwgY29uc3QgSGl0VGVzdFBvaW50JgogCiAgICAgbXV0YWJsZVJlY3RCYXNlZFRlc3RSZXN1bHQo
KS5hZGQobm9kZSk7CiAKLSAgICBib29sIHJlZ2lvbkZpbGxlZCA9IHJlY3QuY29udGFpbnMocG9p
bnRJbkNvbnRhaW5lci5ib3VuZGluZ0JveCgpKTsKKyAgICBib29sIHJlZ2lvbkZpbGxlZCA9IHJl
Y3QuY29udGFpbnModGFyZ2V0SW5Db250YWluZXIuYm91bmRpbmdCb3goKSk7CiAgICAgLy8gRklY
TUU6IFRoaXMgY29kZSAoaW5jb3JyZWN0bHkpIGF0dGVtcHRzIHRvIGNvcnJlY3QgZm9yIGN1bGxl
ZCBpbmxpbmUgbm9kZXMuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODU4NDkuCiAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCktPmlzSW5saW5lKCkgJiYgIXJlZ2lv
bkZpbGxlZCkgewogICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IG5vZGUtPnJlbmRl
cmVyKCktPnBhcmVudCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cGFyZW50KCkpIHsKQEAgLTcwOSwx
MSArNzA5LDExIEBAIGJvb2wgSGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJl
c3VsdChOb2RlKiBub2RlLCBjb25zdCBIaXRUZXN0UG9pbnQmCiAgICAgcmV0dXJuICFyZWdpb25G
aWxsZWQ7CiB9CiAKLWJvb2wgSGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJl
c3VsdChOb2RlKiBub2RlLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK2Jvb2wgSGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRvUmVjdEJh
c2VkVGVzdFJlc3VsdChOb2RlKiBub2RlLCBjb25zdCBIaXRUZXN0VGFyZ2V0JiB0YXJnZXRJbkNv
bnRhaW5lciwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIC8vIElmIGl0IGlzIG5vdCBh
IHJlY3QtYmFzZWQgaGl0IHRlc3QsIHRoaXMgbWV0aG9kIGhhcyB0byBiZSBuby1vcC4KICAgICAv
LyBSZXR1cm4gZmFsc2UsIHNvIHRoZSBoaXQgdGVzdCBzdG9wcy4KLSAgICBpZiAoIWlzUmVjdEJh
c2VkVGVzdCgpKQorICAgIGlmICghaXNBcmVhQmFzZWRUZXN0KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIElmIG5vZGUgaXMgbnVsbCwgcmV0dXJuIHRydWUgc28gdGhlIGhpdCB0
ZXN0IGNhbiBjb250aW51ZS4KQEAgLTcyNSw3ICs3MjUsNyBAQCBib29sIEhpdFRlc3RSZXN1bHQ6
OmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSogbm9kZSwgY29uc3QgSGl0VGVzdFBv
aW50JgogCiAgICAgbXV0YWJsZVJlY3RCYXNlZFRlc3RSZXN1bHQoKS5hZGQobm9kZSk7CiAKLSAg
ICBib29sIHJlZ2lvbkZpbGxlZCA9IHJlY3QuY29udGFpbnMocG9pbnRJbkNvbnRhaW5lci5ib3Vu
ZGluZ0JveCgpKTsKKyAgICBib29sIHJlZ2lvbkZpbGxlZCA9IHJlY3QuY29udGFpbnModGFyZ2V0
SW5Db250YWluZXIuYm91bmRpbmdCb3goKSk7CiAgICAgLy8gRklYTUU6IFRoaXMgY29kZSAoaW5j
b3JyZWN0bHkpIGF0dGVtcHRzIHRvIGNvcnJlY3QgZm9yIGN1bGxlZCBpbmxpbmUgbm9kZXMuIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODU4NDkuCiAgICAgaWYg
KG5vZGUtPnJlbmRlcmVyKCktPmlzSW5saW5lKCkgJiYgIXJlZ2lvbkZpbGxlZCkgewogICAgICAg
ICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IG5vZGUtPnJlbmRlcmVyKCktPnBhcmVudCgpOyBj
dXJyOyBjdXJyID0gY3Vyci0+cGFyZW50KCkpIHsKQEAgLTc0Niw3ICs3NDYsNyBAQCBib29sIEhp
dFRlc3RSZXN1bHQ6OmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSogbm9kZSwgY29u
c3QgSGl0VGVzdFBvaW50JgogCiB2b2lkIEhpdFRlc3RSZXN1bHQ6OmFwcGVuZChjb25zdCBIaXRU
ZXN0UmVzdWx0JiBvdGhlcikKIHsKLSAgICBBU1NFUlQoaXNSZWN0QmFzZWRUZXN0KCkgJiYgb3Ro
ZXIuaXNSZWN0QmFzZWRUZXN0KCkpOworICAgIEFTU0VSVChpc0FyZWFCYXNlZFRlc3QoKSAmJiBv
dGhlci5pc0FyZWFCYXNlZFRlc3QoKSk7CiAKICAgICBpZiAoIW1faW5uZXJOb2RlICYmIG90aGVy
LmlubmVyTm9kZSgpKSB7CiAgICAgICAgIG1faW5uZXJOb2RlID0gb3RoZXIuaW5uZXJOb2RlKCk7
CkBAIC03ODQsNyArNzg0LDcgQEAgVmVjdG9yPFN0cmluZz4gSGl0VGVzdFJlc3VsdDo6ZGljdGF0
aW9uQWx0ZXJuYXRpdmVzKCkgY29uc3QKICAgICBpZiAoIW1faW5uZXJOb25TaGFyZWROb2RlKQog
ICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKIAotICAgIERvY3VtZW50TWFya2VyKiBt
YXJrZXIgPSBtX2lubmVyTm9uU2hhcmVkTm9kZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5tYXJr
ZXJDb250YWluaW5nUG9pbnQoaGl0VGVzdFBvaW50KCkucG9pbnQoKSwgRG9jdW1lbnRNYXJrZXI6
OkRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CisgICAgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IG1f
aW5uZXJOb25TaGFyZWROb2RlLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPm1hcmtlckNvbnRhaW5p
bmdQb2ludCh0YXJnZXQoKS5wb2ludCgpLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJu
YXRpdmVzKTsKICAgICBpZiAoIW1hcmtlcikKICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCmluZGV4IDA1Y2E5
MGRjMTUyYzM4ZDU4OWEwZTIyNTUzODZiNDQxNGZjNmZiNGUuLjc5YzU5ZjY5NjA5Mjc2NjM3NzE3
Yjc1NzM0OGI2YmY5MmI2OGZmYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9IaXRUZXN0UmVzdWx0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RS
ZXN1bHQuaApAQCAtNDcsMjggKzQ3LDI4IEBAIGNsYXNzIFNjcm9sbGJhcjsKIAogZW51bSBTaGFk
b3dDb250ZW50RmlsdGVyUG9saWN5IHsgRG9Ob3RBbGxvd1NoYWRvd0NvbnRlbnQsIEFsbG93U2hh
ZG93Q29udGVudCB9OwogCi1jbGFzcyBIaXRUZXN0UG9pbnQgeworY2xhc3MgSGl0VGVzdFRhcmdl
dCB7CiBwdWJsaWM6CiAKLSAgICBIaXRUZXN0UG9pbnQoKTsKLSAgICBIaXRUZXN0UG9pbnQoY29u
c3QgTGF5b3V0UG9pbnQmKTsKLSAgICBIaXRUZXN0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYpOwot
ICAgIEhpdFRlc3RQb2ludChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRRdWFkJik7Cisg
ICAgSGl0VGVzdFRhcmdldCgpOworICAgIEhpdFRlc3RUYXJnZXQoY29uc3QgTGF5b3V0UG9pbnQm
KTsKKyAgICBIaXRUZXN0VGFyZ2V0KGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICBIaXRUZXN0VGFy
Z2V0KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFF1YWQmKTsKICAgICAvLyBQYXNzIG5v
bi16ZXJvIHBhZGRpbmcgdmFsdWVzIHRvIHBlcmZvcm0gYSByZWN0LWJhc2VkIGhpdCB0ZXN0Lgot
ICAgIEhpdFRlc3RQb2ludChjb25zdCBMYXlvdXRQb2ludCYgY2VudGVyUG9pbnQsIHVuc2lnbmVk
IHRvcFBhZGRpbmcsIHVuc2lnbmVkIHJpZ2h0UGFkZGluZywgdW5zaWduZWQgYm90dG9tUGFkZGlu
ZywgdW5zaWduZWQgbGVmdFBhZGRpbmcpOwotICAgIC8vIE1ha2UgYSBjb3B5IHRoZSBIaXRUZXN0
UG9pbnQgaW4gYSBuZXcgcmVnaW9uIGJ5IGFwcGx5aW5nIGdpdmVuIG9mZnNldCB0byBpbnRlcm5h
bCBwb2ludCBhbmQgYXJlYS4KLSAgICBIaXRUZXN0UG9pbnQoY29uc3QgSGl0VGVzdFBvaW50Jiwg
Y29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0LCBSZW5kZXJSZWdpb24qKTsKLSAgICBIaXRUZXN0UG9p
bnQoY29uc3QgSGl0VGVzdFBvaW50Jik7Ci0gICAgfkhpdFRlc3RQb2ludCgpOwotICAgIEhpdFRl
c3RQb2ludCYgb3BlcmF0b3I9KGNvbnN0IEhpdFRlc3RQb2ludCYpOworICAgIEhpdFRlc3RUYXJn
ZXQoY29uc3QgTGF5b3V0UG9pbnQmIGNlbnRlclBvaW50LCB1bnNpZ25lZCB0b3BQYWRkaW5nLCB1
bnNpZ25lZCByaWdodFBhZGRpbmcsIHVuc2lnbmVkIGJvdHRvbVBhZGRpbmcsIHVuc2lnbmVkIGxl
ZnRQYWRkaW5nKTsKKyAgICAvLyBNYWtlIGEgY29weSB0aGUgSGl0VGVzdFRhcmdldCBpbiBhIG5l
dyByZWdpb24gYnkgYXBwbHlpbmcgZ2l2ZW4gb2Zmc2V0IHRvIGludGVybmFsIHBvaW50IGFuZCBh
cmVhLgorICAgIEhpdFRlc3RUYXJnZXQoY29uc3QgSGl0VGVzdFRhcmdldCYsIGNvbnN0IExheW91
dFNpemUmIG9mZnNldCwgUmVuZGVyUmVnaW9uKik7CisgICAgSGl0VGVzdFRhcmdldChjb25zdCBI
aXRUZXN0VGFyZ2V0Jik7CisgICAgfkhpdFRlc3RUYXJnZXQoKTsKKyAgICBIaXRUZXN0VGFyZ2V0
JiBvcGVyYXRvcj0oY29uc3QgSGl0VGVzdFRhcmdldCYpOwogCiAgICAgTGF5b3V0UG9pbnQgcG9p
bnQoKSBjb25zdCB7IHJldHVybiBtX3BvaW50OyB9CiAgICAgSW50UG9pbnQgcm91bmRlZFBvaW50
KCkgY29uc3QgeyByZXR1cm4gcm91bmRlZEludFBvaW50KG1fcG9pbnQpOyB9CiAKICAgICBSZW5k
ZXJSZWdpb24qIHJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaW9uOyB9CiAKLSAgICAvLyBS
ZWN0LWJhc2VkIGhpdCB0ZXN0IHJlbGF0ZWQgbWV0aG9kcy4KLSAgICBib29sIGlzUmVjdEJhc2Vk
VGVzdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNSZWN0QmFzZWQ7IH0KKyAgICAvLyBBcmVhLWJhc2Vk
IGhpdCB0ZXN0IHJlbGF0ZWQgbWV0aG9kcy4KKyAgICBib29sIGlzQXJlYUJhc2VkVGVzdCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNBcmVhQmFzZWQ7IH0KICAgICBib29sIGlzUmVjdGlsaW5lYXIoKSBj
b25zdCB7IHJldHVybiBtX2lzUmVjdGlsaW5lYXI7IH0KICAgICBJbnRSZWN0IGJvdW5kaW5nQm94
KCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZGluZ0JveDsgfQogCkBAIC05OCwxMSArOTgsMTEgQEAg
cHJpdmF0ZToKIAogICAgIFJlbmRlclJlZ2lvbiogbV9yZWdpb247IC8vIFRoZSByZWdpb24gd2Un
cmUgaW5zaWRlLgogCi0gICAgYm9vbCBtX2lzUmVjdEJhc2VkOworICAgIGJvb2wgbV9pc0FyZWFC
YXNlZDsKICAgICBib29sIG1faXNSZWN0aWxpbmVhcjsKIH07CiAKLWNsYXNzIEhpdFRlc3RSZXN1
bHQgOiBwdWJsaWMgSGl0VGVzdFBvaW50IHsKK2NsYXNzIEhpdFRlc3RSZXN1bHQgOiBwdWJsaWMg
SGl0VGVzdFRhcmdldCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQdHI8
Tm9kZT4gPiBOb2RlU2V0OwogCkBAIC0xMTAsNyArMTEwLDcgQEAgcHVibGljOgogICAgIEhpdFRl
c3RSZXN1bHQoY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICAvLyBQYXNzIG5vbi1uZWdhdGl2ZSBw
YWRkaW5nIHZhbHVlcyB0byBwZXJmb3JtIGEgcmVjdC1iYXNlZCBoaXQgdGVzdC4KICAgICBIaXRU
ZXN0UmVzdWx0KGNvbnN0IExheW91dFBvaW50JiBjZW50ZXJQb2ludCwgdW5zaWduZWQgdG9wUGFk
ZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLCB1bnNpZ25lZCBib3R0b21QYWRkaW5nLCB1bnNp
Z25lZCBsZWZ0UGFkZGluZywgU2hhZG93Q29udGVudEZpbHRlclBvbGljeSk7Ci0gICAgSGl0VGVz
dFJlc3VsdChjb25zdCBIaXRUZXN0UG9pbnQmLCBTaGFkb3dDb250ZW50RmlsdGVyUG9saWN5KTsK
KyAgICBIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RUYXJnZXQmLCBTaGFkb3dDb250ZW50Rmls
dGVyUG9saWN5KTsKICAgICBIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKICAg
ICB+SGl0VGVzdFJlc3VsdCgpOwogICAgIEhpdFRlc3RSZXN1bHQmIG9wZXJhdG9yPShjb25zdCBI
aXRUZXN0UmVzdWx0Jik7CkBAIC0xMjQsNyArMTI0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBz
ZXRUb05vblNoYWRvd0FuY2VzdG9yKCk7CiAKLSAgICBjb25zdCBIaXRUZXN0UG9pbnQmIGhpdFRl
c3RQb2ludCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgY29uc3QgSGl0VGVzdFRhcmdl
dCYgdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KICAgICBTaGFkb3dDb250ZW50Rmls
dGVyUG9saWN5IHNoYWRvd0NvbnRlbnRGaWx0ZXJQb2xpY3koKSBjb25zdCB7IHJldHVybiBtX3No
YWRvd0NvbnRlbnRGaWx0ZXJQb2xpY3k7IH0KIAogICAgIHZvaWQgc2V0SW5uZXJOb2RlKE5vZGUq
KTsKQEAgLTE2Niw4ICsxNjYsOCBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
aXQgaXMgcmVjdC1iYXNlZCBoaXQgdGVzdCBhbmQgbmVlZHMgdG8gY29udGludWUgdW50aWwgdGhl
IHJlY3QgaXMgZnVsbHkKICAgICAvLyBlbmNsb3NlZCBieSB0aGUgYm91bmRhcmllcyBvZiBhIG5v
ZGUuCi0gICAgYm9vbCBhZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqLCBjb25zdCBI
aXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFJlY3QmID0gTGF5b3V0
UmVjdCgpKTsKLSAgICBib29sIGFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSosIGNv
bnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgRmxvYXRSZWN0Jik7Cisg
ICAgYm9vbCBhZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqLCBjb25zdCBIaXRUZXN0
VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UmVjdCYgPSBMYXlvdXRSZWN0
KCkpOworICAgIGJvb2wgYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChOb2RlKiwgY29uc3Qg
SGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IEZsb2F0UmVjdCYpOwogICAg
IHZvaWQgYXBwZW5kKGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKIAogICAgIC8vIElmIG1fcmVjdEJh
c2VkVGVzdFJlc3VsdCBpcyAwIHRoZW4gc2V0IGl0IHRvIGEgbmV3IE5vZGVTZXQuIFJldHVybiAq
bV9yZWN0QmFzZWRUZXN0UmVzdWx0LiBMYXp5IGFsbG9jYXRpb24gbWFrZXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUJveC5jcHAKaW5kZXggMDhiZmQ2OTcwMzJhNmM1ZjdjOGVhOWVlYTQ1
YjkzNzczN2IzNWVlNi4uNDE0ZTQ5YWY4MDY0ZGEwODRjMDVlMzk5ZmFhMDM0ZDRmODk5YzRjMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAKQEAgLTI0MiwxMiArMjQyLDEy
IEBAIHZvaWQgSW5saW5lQm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5
b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBMYXlvCiAgICAgfQogfQogCi1ib29sIElubGluZUJveDo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgLyogbGluZVRvcCAqLywgTGF5
b3V0VW5pdCAvKmxpbmVCb3R0b20qLykKK2Jvb2wgSW5saW5lQm94Ojpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBI
aXRUZXN0VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IC8qIGxpbmVUb3AgKi8sIExheW91dFVuaXQgLypsaW5l
Qm90dG9tKi8pCiB7CiAgICAgLy8gSGl0IHRlc3QgYWxsIHBoYXNlcyBvZiByZXBsYWNlZCBlbGVt
ZW50cyBhdG9taWNhbGx5LCBhcyB0aG91Z2ggdGhlIHJlcGxhY2VkIGVsZW1lbnQgZXN0YWJsaXNo
ZWQgaXRzCiAgICAgLy8gb3duIHN0YWNraW5nIGNvbnRleHQuICAoU2VlIEFwcGVuZGl4IEUuMiwg
c2VjdGlvbiA2LjQgb24gaW5saW5lIGJsb2NrL3RhYmxlIGVsZW1lbnRzIGluIHRoZSBDU1MyLjEK
ICAgICAvLyBzcGVjaWZpY2F0aW9uLikKLSAgICByZXR1cm4gcmVuZGVyZXIoKS0+aGl0VGVzdChy
ZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0KTsKKyAg
ICByZXR1cm4gcmVuZGVyZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIHRhcmdldEluQ29u
dGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCk7CiB9CiAKIGNvbnN0IFJvb3RJbmxpbmVCb3gqIElu
bGluZUJveDo6cm9vdCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKaW5k
ZXggMGVkYWIyYzMzZjNhM2VhOTBmOGVlYWRkZDBiMWRiZDI0ZTQzMTlmNS4uYzQzNjE4MTU2ODNk
OTM5ZDhmOGE1MTNjNmNlZDc4NDJkODM0MjhhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVCb3guaApAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCB2
b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5l
VG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9p
bnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pOworICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBIaXRUZXN0VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGlu
ZUJvdHRvbSk7CiAKICAgICAvLyBPdmVybG9hZGVkIG5ldyBvcGVyYXRvci4KICAgICB2b2lkKiBv
cGVyYXRvciBuZXcoc2l6ZV90LCBSZW5kZXJBcmVuYSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guY3BwCmluZGV4IGE5NmY2MTIyNTg0M2E5NzBmMmZmNmJiNzk0NGJk
OWNlZjkxNmE5YjYuLjU0OWM0OGVjN2I1MTBkNmViZTc4MTNiMTA4ZDhlMmMxMDcyZTYwOGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKQEAgLTk3MCwxOCAr
OTcwLDE4IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6c2V0T3ZlcmZsb3dGcm9tTG9naWNhbFJlY3Rz
KGNvbnN0IExheW91dFJlY3QmIGxvZ2ljYWxMYXlvdXRPCiAgICAgc2V0VmlzdWFsT3ZlcmZsb3co
dmlzdWFsT3ZlcmZsb3csIGxpbmVUb3AsIGxpbmVCb3R0b20pOwogfQogCi1ib29sIElubGluZUZs
b3dCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExh
eW91dFVuaXQgbGluZUJvdHRvbSkKK2Jvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3Qg
SGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20p
CiB7CiAgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KGxpbmVU
b3AsIGxpbmVCb3R0b20pKTsKICAgICBmbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsK
ICAgICBvdmVyZmxvd1JlY3QubW92ZUJ5KGFjY3VtdWxhdGVkT2Zmc2V0KTsKLSAgICBpZiAoIXBv
aW50SW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxvd1JlY3QpKQorICAgIGlmICghdGFyZ2V0
SW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxvd1JlY3QpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAvLyBDaGVjayBjaGlsZHJlbiBmaXJzdC4KICAgICBmb3IgKElubGluZUJveCog
Y3VyciA9IGxhc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldk9uTGluZSgpKSB7Ci0g
ICAgICAgIGlmICgoY3Vyci0+cmVuZGVyZXIoKS0+aXNUZXh0KCkgfHwgIWN1cnItPmJveE1vZGVs
T2JqZWN0KCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkpICYmIGN1cnItPm5vZGVBdFBvaW50KHJl
cXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGxpbmVU
b3AsIGxpbmVCb3R0b20pKSB7Ci0gICAgICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFj
Y3VtdWxhdGVkT2Zmc2V0KSk7CisgICAgICAgIGlmICgoY3Vyci0+cmVuZGVyZXIoKS0+aXNUZXh0
KCkgfHwgIWN1cnItPmJveE1vZGVsT2JqZWN0KCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkpICYm
IGN1cnItPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgdGFyZ2V0SW5Db250YWluZXIsIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBsaW5lVG9wLCBsaW5lQm90dG9tKSkgeworICAgICAgICAgICAgcmVu
ZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLnBv
aW50KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtMTAwOSw5ICsxMDA5LDkgQEAgYm9vbCBJ
bmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlc3VsdCYgcmUKICAgICBmbGlwRm9yV3JpdGluZ01vZGUocmVjdCk7CiAgICAgcmVj
dC5tb3ZlQnkoYWNjdW11bGF0ZWRPZmZzZXQpOwogCi0gICAgaWYgKHZpc2libGVUb0hpdFRlc3Rp
bmcoKSAmJiBwb2ludEluQ29udGFpbmVyLmludGVyc2VjdHMocmVjdCkpIHsKLSAgICAgICAgcmVu
ZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShw
b2ludEluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQp
KSk7IC8vIERvbid0IGFkZCBpbiBtX3ggb3IgbV95IGhlcmUsIHdlIHdhbnQgY29vcmRzIGluIHRo
ZSBjb250YWluaW5nIGJsb2NrJ3Mgc3BhY2UuCi0gICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVU
b1JlY3RCYXNlZFRlc3RSZXN1bHQocmVuZGVyZXIoKS0+bm9kZSgpLCBwb2ludEluQ29udGFpbmVy
LCByZWN0KSkKKyAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIHRhcmdldEluQ29udGFp
bmVyLmludGVyc2VjdHMocmVjdCkpIHsKKyAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVz
dFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZSh0YXJnZXRJbkNvbnRhaW5lci5wb2lu
dCgpIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOyAvLyBEb24ndCBhZGQgaW4g
bV94IG9yIG1feSBoZXJlLCB3ZSB3YW50IGNvb3JkcyBpbiB0aGUgY29udGFpbmluZyBibG9jaydz
IHNwYWNlLgorICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0
KHJlbmRlcmVyKCktPm5vZGUoKSwgdGFyZ2V0SW5Db250YWluZXIsIHJlY3QpKQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZs
b3dCb3guaAppbmRleCAyMGY1OWQ3MjNjYzA4NDM0ZmJlMDQzYmMxYzQ4MjhkNjVlMDc2ZjRkLi40
ZjAwNGFiM2ExYTU5MzNhZTgzYzg3ZjMyNWJiNmY3OTZmYTNjYzRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgKQEAgLTExMyw3ICsxMTMsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBwYWludEZpbGxMYXllcihjb25zdCBQYWludEluZm8mLCBjb25zdCBDb2xvciYsIGNv
bnN0IEZpbGxMYXllciosIGNvbnN0IExheW91dFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvciA9IENv
bXBvc2l0ZVNvdXJjZU92ZXIpOwogICAgIHZvaWQgcGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJ
bmZvJiwgUmVuZGVyU3R5bGUqLCBTaGFkb3dTdHlsZSwgY29uc3QgTGF5b3V0UmVjdCYpOwogICAg
IHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYsIExheW91
dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKTsKLSAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWlu
ZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5l
VG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIE9WRVJSSURFOwogCiAgICAgYm9vbCBib3hTaGFk
b3dDYW5CZUFwcGxpZWRUb0JhY2tncm91bmQoY29uc3QgRmlsbExheWVyJikgY29uc3Q7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCA3ZDYzMDMxZGFk
ODU5NzRhNjA3NjQyNjE2MjI3NDA2MWY4OGE3YTQwLi4xMDZlMzIxMWU2ZjZiNzRkYmI3OTUwMGVm
NTJiMzRmNjZjNGU2OWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCkBAIC0zNDksNyArMzQ5LDcgQEAgYm9vbCBJbmxpbmVUZXh0Qm94Ojppc0xpbmVCcmVh
aygpIGNvbnN0CiAgICAgcmV0dXJuIHJlbmRlcmVyKCktPmlzQlIoKSB8fCAocmVuZGVyZXIoKS0+
c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkgJiYgbGVuKCkgPT0gMSAmJiAoKnRleHRSZW5kZXJl
cigpLT50ZXh0KCkpW3N0YXJ0KCldID09ICdcbicpOwogfQogCi1ib29sIElubGluZVRleHRCb3g6
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCAvKiBsaW5lVG9wICovLCBMYXlvdXRVbml0
IC8qbGluZUJvdHRvbSovKQorYm9vbCBJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdFRhcmdl
dCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCwgTGF5b3V0VW5pdCAvKiBsaW5lVG9wICovLCBMYXlvdXRVbml0IC8qbGluZUJvdHRvbSovKQog
ewogICAgIGlmIChpc0xpbmVCcmVhaygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNTcs
OSArMzU3LDkgQEAgYm9vbCBJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY28KICAgICBGbG9hdFBvaW50IGJveE9y
aWdpbiA9IGxvY2F0aW9uSW5jbHVkaW5nRmxpcHBpbmcoKTsKICAgICBib3hPcmlnaW4ubW92ZUJ5
KGFjY3VtdWxhdGVkT2Zmc2V0KTsKICAgICBGbG9hdFJlY3QgcmVjdChib3hPcmlnaW4sIHNpemUo
KSk7Ci0gICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjRnVsbFRydW5jYXRpb24gJiYgdmlzaWJsZVRv
SGl0VGVzdGluZygpICYmIHBvaW50SW5Db250YWluZXIuaW50ZXJzZWN0cyhyZWN0KSkgewotICAg
ICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRp
bmdNb2RlKHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRl
ZE9mZnNldCkpKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJl
c3VsdChyZW5kZXJlcigpLT5ub2RlKCksIHBvaW50SW5Db250YWluZXIsIHJlY3QpKQorICAgIGlm
IChtX3RydW5jYXRpb24gIT0gY0Z1bGxUcnVuY2F0aW9uICYmIHZpc2libGVUb0hpdFRlc3Rpbmco
KSAmJiB0YXJnZXRJbkNvbnRhaW5lci5pbnRlcnNlY3RzKHJlY3QpKSB7CisgICAgICAgIHJlbmRl
cmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUodGFy
Z2V0SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkp
KTsKKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5k
ZXJlcigpLT5ub2RlKCksIHRhcmdldEluQ29udGFpbmVyLCByZWN0KSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guaAppbmRleCBhM2U3NjMwZTZhZTQ1YTFkNzIyNzdkYzhiZGZhMTU2
YzkyNGRiYzE1Li4xYmI4ZDYzYTczMDdkOTI0YjM2NzEyODE2ODFlYzQ0ZjI1MzZjNmFiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKQEAgLTExNSw3ICsxMTUsNyBA
QCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGlu
ZUJvdHRvbSk7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVU
b3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhp
dFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBP
VkVSUklERTsKIAogcHVibGljOgogICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlcigpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggMGU0YTc3YTc4
Y2NmZGIxMTI2MWI3NTlkM2UxOWVhMGE0ZDhiNjUxMS4uNGRlYmQyZTMzYTQ0MjYzNzI5ZDNlZjhi
ZjMxM2M4ODdmYWYzMGNmMCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCkBAIC00NjQwLDE1ICs0NjQwLDE1IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmdldENs
ZWFyRGVsdGEoUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgUmVuZGVyQmxvY2s6OmlzUG9pbnRJbk92ZXJmbG93Q29u
dHJvbChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29u
dGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpCitib29sIFJlbmRl
ckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBMYXlvdXRQb2ludCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCkKIHsKICAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbGF5ZXIoKS0+aGl0VGVzdE92ZXJmbG93Q29u
dHJvbHMocmVzdWx0LCByb3VuZGVkSW50UG9pbnQocG9pbnRJbkNvbnRhaW5lciAtIHRvTGF5b3V0
U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsKKyAgICByZXR1cm4gbGF5ZXIoKS0+aGl0VGVzdE92
ZXJmbG93Q29udHJvbHMocmVzdWx0LCByb3VuZGVkSW50UG9pbnQodGFyZ2V0SW5Db250YWluZXIg
LSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7CiB9CiAKLWJvb2wgUmVuZGVyQmxv
Y2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3Qg
TGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rp
b24pCitib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0VGFyZ2V0JiB0YXJn
ZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRU
ZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CiAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2Nh
dGlvbihhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCkpOwogICAgIExheW91dFNpemUgbG9j
YWxPZmZzZXQgPSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbik7CkBAIC00NjU4LDIxICs0
NjU4LDIxIEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgICAgIExheW91dFJlY3Qgb3Zl
cmZsb3dCb3ggPSB2aXN1YWxPdmVyZmxvd1JlY3QoKTsKICAgICAgICAgZmxpcEZvcldyaXRpbmdN
b2RlKG92ZXJmbG93Qm94KTsKICAgICAgICAgb3ZlcmZsb3dCb3gubW92ZUJ5KGFkanVzdGVkTG9j
YXRpb24pOwotICAgICAgICBpZiAoIXBvaW50SW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxv
d0JveCkpCisgICAgICAgIGlmICghdGFyZ2V0SW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxv
d0JveCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKChoaXRU
ZXN0QWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgaGl0VGVzdEFjdGlvbiA9PSBI
aXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChy
ZXN1bHQsIHBvaW50SW5Db250YWluZXIucG9pbnQoKSwgYWRqdXN0ZWRMb2NhdGlvbikpIHsKLSAg
ICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIucG9pbnQo
KSAtIGxvY2FsT2Zmc2V0KTsKKyAgICBpZiAoKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEJsb2Nr
QmFja2dyb3VuZCB8fCBoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3Vu
ZCkgJiYgaXNQb2ludEluT3ZlcmZsb3dDb250cm9sKHJlc3VsdCwgdGFyZ2V0SW5Db250YWluZXIu
cG9pbnQoKSwgYWRqdXN0ZWRMb2NhdGlvbikpIHsKKyAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLnBvaW50KCkgLSBsb2NhbE9mZnNldCk7CiAgICAg
ICAgIC8vIEZJWE1FOiBpc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woKSBkb2Vzbid0IGhhbmRsZSBy
ZWN0LWJhc2VkIHRlc3RzIHlldC4KLSAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJh
c2VkVGVzdFJlc3VsdChub2RlKCksIHBvaW50SW5Db250YWluZXIpKQorICAgICAgICBpZiAoIXJl
c3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5vZGUoKSwgdGFyZ2V0SW5Db250YWlu
ZXIpKQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBJZiB3ZSBoYXZl
IGNsaXBwaW5nLCB0aGVuIHdlIGNhbid0IGhhdmUgYW55IHNwaWxsb3V0LgogICAgIGJvb2wgdXNl
T3ZlcmZsb3dDbGlwID0gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIWhhc1NlbGZQYWludGluZ0xheWVy
KCk7CiAgICAgYm9vbCB1c2VDbGlwID0gKGhhc0NvbnRyb2xDbGlwKCkgfHwgdXNlT3ZlcmZsb3dD
bGlwKTsKLSAgICBib29sIGNoZWNrQ2hpbGRyZW4gPSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJvbENs
aXAoKSA/IHBvaW50SW5Db250YWluZXIuaW50ZXJzZWN0cyhjb250cm9sQ2xpcFJlY3QoYWRqdXN0
ZWRMb2NhdGlvbikpIDogcG9pbnRJbkNvbnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJl
Y3QoYWRqdXN0ZWRMb2NhdGlvbiwgcG9pbnRJbkNvbnRhaW5lci5yZWdpb24oKSwgSW5jbHVkZU92
ZXJsYXlTY3JvbGxiYXJTaXplKSkpOworICAgIGJvb2wgY2hlY2tDaGlsZHJlbiA9ICF1c2VDbGlw
IHx8IChoYXNDb250cm9sQ2xpcCgpID8gdGFyZ2V0SW5Db250YWluZXIuaW50ZXJzZWN0cyhjb250
cm9sQ2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbikpIDogdGFyZ2V0SW5Db250YWluZXIuaW50ZXJz
ZWN0cyhvdmVyZmxvd0NsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24sIHRhcmdldEluQ29udGFpbmVy
LnJlZ2lvbigpLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUpKSk7CiAgICAgaWYgKGNoZWNr
Q2hpbGRyZW4pIHsKICAgICAgICAgLy8gSGl0IHRlc3QgZGVzY2VuZGFudHMgZmlyc3QuCiAgICAg
ICAgIExheW91dFNpemUgc2Nyb2xsZWRPZmZzZXQobG9jYWxPZmZzZXQpOwpAQCAtNDY4MSwxNCAr
NDY4MSwxNCBAQCBib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdQogCiAgICAgICAgIC8vIEhpdCB0ZXN0
IGNvbnRlbnRzIGlmIHdlIGRvbid0IGhhdmUgY29sdW1ucy4KICAgICAgICAgaWYgKCFoYXNDb2x1
bW5zKCkpIHsKLSAgICAgICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0
LCBwb2ludEluQ29udGFpbmVyLCB0b0xheW91dFBvaW50KHNjcm9sbGVkT2Zmc2V0KSwgaGl0VGVz
dEFjdGlvbikpIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwg
cG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gbG9jYWxPZmZzZXQpOworICAgICAgICAgICAgaWYg
KGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCByZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLCB0b0xh
eW91dFBvaW50KHNjcm9sbGVkT2Zmc2V0KSwgaGl0VGVzdEFjdGlvbikpIHsKKyAgICAgICAgICAg
ICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdGFyZ2V0SW5Db250YWluZXIucG9pbnQo
KSAtIGxvY2FsT2Zmc2V0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RGbG9hdCAmJiBo
aXRUZXN0RmxvYXRzKHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdG9MYXlvdXRQ
b2ludChzY3JvbGxlZE9mZnNldCkpKQorICAgICAgICAgICAgaWYgKGhpdFRlc3RBY3Rpb24gPT0g
SGl0VGVzdEZsb2F0ICYmIGhpdFRlc3RGbG9hdHMocmVxdWVzdCwgcmVzdWx0LCB0YXJnZXRJbkNv
bnRhaW5lciwgdG9MYXlvdXRQb2ludChzY3JvbGxlZE9mZnNldCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGhpdFRlc3RDb2x1bW5zKHJlcXVlc3Qs
IHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdG9MYXlvdXRQb2ludChzY3JvbGxlZE9mZnNldCks
IGhpdFRlc3RBY3Rpb24pKSB7Ci0gICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3Vs
dCwgZmxpcEZvcldyaXRpbmdNb2RlKHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIGxvY2FsT2Zm
c2V0KSk7CisgICAgICAgIH0gZWxzZSBpZiAoaGl0VGVzdENvbHVtbnMocmVxdWVzdCwgcmVzdWx0
LCB0YXJnZXRJbkNvbnRhaW5lciwgdG9MYXlvdXRQb2ludChzY3JvbGxlZE9mZnNldCksIGhpdFRl
c3RBY3Rpb24pKSB7CisgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxp
cEZvcldyaXRpbmdNb2RlKHRhcmdldEluQ29udGFpbmVyLnBvaW50KCkgLSBsb2NhbE9mZnNldCkp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC00Njk2LDkg
KzQ2OTYsOSBAQCBib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdQogICAgIC8vIE5vdyBoaXQgdGVzdCBv
dXIgYmFja2dyb3VuZAogICAgIGlmIChoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tn
cm91bmQgfHwgaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpIHsK
ICAgICAgICAgTGF5b3V0UmVjdCBib3VuZHNSZWN0KGFkanVzdGVkTG9jYXRpb24sIHNpemUoKSk7
Ci0gICAgICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcG9pbnRJbkNvbnRhaW5lci5p
bnRlcnNlY3RzKGJvdW5kc1JlY3QpKSB7Ci0gICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0
KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIGxv
Y2FsT2Zmc2V0KSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRU
ZXN0UmVzdWx0KG5vZGUoKSwgcG9pbnRJbkNvbnRhaW5lciwgYm91bmRzUmVjdCkpCisgICAgICAg
IGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgdGFyZ2V0SW5Db250YWluZXIuaW50ZXJzZWN0
cyhib3VuZHNSZWN0KSkgeworICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IGZsaXBGb3JXcml0aW5nTW9kZSh0YXJnZXRJbkNvbnRhaW5lci5wb2ludCgpIC0gbG9jYWxPZmZz
ZXQpKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1
bHQobm9kZSgpLCB0YXJnZXRJbkNvbnRhaW5lciwgYm91bmRzUmVjdCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC00NzA2LDcgKzQ3MDYsNyBAQCBi
b29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5k
ZXJCbG9jazo6aGl0VGVzdEZsb2F0cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkKK2Jvb2wgUmVuZGVyQmxvY2s6
OmhpdFRlc3RGbG9hdHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkKIHsKICAgICBpZiAoIW1fZmxvYXRpbmdP
YmplY3RzKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NzI1LDggKzQ3MjUsOCBAQCBib29s
IFJlbmRlckJsb2NrOjpoaXRUZXN0RmxvYXRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZQogICAgICAgICAgICAgTGF5b3V0VW5pdCB4T2Zmc2V0ID0geFBv
c2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oZmxvYXRpbmdPYmplY3QpIC0gZmxvYXRpbmdP
YmplY3QtPm1fcmVuZGVyZXItPngoKTsKICAgICAgICAgICAgIExheW91dFVuaXQgeU9mZnNldCA9
IHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKGZsb2F0aW5nT2JqZWN0KSAtIGZsb2F0
aW5nT2JqZWN0LT5tX3JlbmRlcmVyLT55KCk7CiAgICAgICAgICAgICBMYXlvdXRQb2ludCBjaGls
ZFBvaW50ID0gZmxpcEZsb2F0Rm9yV3JpdGluZ01vZGVGb3JDaGlsZChmbG9hdGluZ09iamVjdCwg
YWRqdXN0ZWRMb2NhdGlvbiArIExheW91dFNpemUoeE9mZnNldCwgeU9mZnNldCkpOwotICAgICAg
ICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5tX3JlbmRlcmVyLT5oaXRUZXN0KHJlcXVlc3QsIHJl
c3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgY2hpbGRQb2ludCkpIHsKLSAgICAgICAgICAgICAgICB1
cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9M
YXlvdXRTaXplKGNoaWxkUG9pbnQpKTsKKyAgICAgICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+
bV9yZW5kZXJlci0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLCBj
aGlsZFBvaW50KSkgeworICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0
LCB0YXJnZXRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGNoaWxkUG9pbnQpKTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtNDc5NCw0OCArNDc5NCw0OCBAQCBwcml2YXRlOgogICAgIExheW91dFJlY3QgbV9jb2xSZWN0
OwogfTsKIAotYm9vbCBSZW5kZXJCbG9jazo6aGl0VGVzdENvbHVtbnMoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQs
IEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RD
b2x1bW5zKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsK
ICAgICAvLyBXZSBuZWVkIHRvIGRvIG11bHRpcGxlIHBhc3NlcywgYnJlYWtpbmcgdXAgb3VyIGhp
dCB0ZXN0aW5nIGludG8gc3RyaXBzLgogICAgIGlmICghaGFzQ29sdW1ucygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBmb3IgKENvbHVtblJlY3RJdGVyYXRvciBpdCgqdGhpcyk7IGl0
Lmhhc01vcmUoKTsgaXQuYWR2YW5jZSgpKSB7Ci0gICAgICAgIExheW91dFJlY3QgaGl0UmVjdCA9
IHBvaW50SW5Db250YWluZXIuYm91bmRpbmdCb3goKTsKKyAgICAgICAgTGF5b3V0UmVjdCBoaXRS
ZWN0ID0gdGFyZ2V0SW5Db250YWluZXIuYm91bmRpbmdCb3goKTsKICAgICAgICAgTGF5b3V0UmVj
dCBjb2xSZWN0ID0gaXQuY29sdW1uUmVjdCgpOwogICAgICAgICBjb2xSZWN0Lm1vdmVCeShhY2N1
bXVsYXRlZE9mZnNldCk7Ci0gICAgICAgIGlmIChwb2ludEluQ29udGFpbmVyLmludGVyc2VjdHMo
Y29sUmVjdCkpIHsKKyAgICAgICAgaWYgKHRhcmdldEluQ29udGFpbmVyLmludGVyc2VjdHMoY29s
UmVjdCkpIHsKICAgICAgICAgICAgIC8vIFRoZSBwb2ludCBpcyBpbnNpZGUgdGhpcyBjb2x1bW4u
CiAgICAgICAgICAgICAvLyBBZGp1c3QgYWNjdW11bGF0ZWRPZmZzZXQgdG8gY2hhbmdlIHdoZXJl
IHdlIGhpdCB0ZXN0LgogICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQ7CiAgICAgICAgICAg
ICBpdC5hZGp1c3Qob2Zmc2V0KTsKICAgICAgICAgICAgIExheW91dFBvaW50IGZpbmFsTG9jYXRp
b24gPSBhY2N1bXVsYXRlZE9mZnNldCArIG9mZnNldDsKLSAgICAgICAgICAgIGlmICghcmVzdWx0
LmlzUmVjdEJhc2VkVGVzdCgpIHx8IGNvbFJlY3QuY29udGFpbnMoaGl0UmVjdCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5D
b250YWluZXIsIGZpbmFsTG9jYXRpb24sIGhpdFRlc3RBY3Rpb24pIHx8IChoaXRUZXN0QWN0aW9u
ID09IEhpdFRlc3RGbG9hdCAmJiBoaXRUZXN0RmxvYXRzKHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJ
bkNvbnRhaW5lciwgZmluYWxMb2NhdGlvbikpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNB
cmVhQmFzZWRUZXN0KCkgfHwgY29sUmVjdC5jb250YWlucyhoaXRSZWN0KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHJlc3VsdCwgdGFyZ2V0SW5Db250
YWluZXIsIGZpbmFsTG9jYXRpb24sIGhpdFRlc3RBY3Rpb24pIHx8IChoaXRUZXN0QWN0aW9uID09
IEhpdFRlc3RGbG9hdCAmJiBoaXRUZXN0RmxvYXRzKHJlcXVlc3QsIHJlc3VsdCwgdGFyZ2V0SW5D
b250YWluZXIsIGZpbmFsTG9jYXRpb24pKTsKIAotICAgICAgICAgICAgaGl0VGVzdENvbnRlbnRz
KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgZmluYWxMb2NhdGlvbiwgaGl0VGVz
dEFjdGlvbik7CisgICAgICAgICAgICBoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0LCB0
YXJnZXRJbkNvbnRhaW5lciwgZmluYWxMb2NhdGlvbiwgaGl0VGVzdEFjdGlvbik7CiAgICAgICAg
IH0KICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmFk
anVzdEZvckNvbHVtblJlY3QoTGF5b3V0U2l6ZSYgb2Zmc2V0LCBjb25zdCBMYXlvdXRQb2ludCYg
cG9pbnRJbkNvbnRhaW5lcikgY29uc3QKK3ZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdEZvckNvbHVt
blJlY3QoTGF5b3V0U2l6ZSYgb2Zmc2V0LCBjb25zdCBMYXlvdXRQb2ludCYgdGFyZ2V0SW5Db250
YWluZXIpIGNvbnN0CiB7CiAgICAgZm9yIChDb2x1bW5SZWN0SXRlcmF0b3IgaXQoKnRoaXMpOyBp
dC5oYXNNb3JlKCk7IGl0LmFkdmFuY2UoKSkgewogICAgICAgICBMYXlvdXRSZWN0IGNvbFJlY3Qg
PSBpdC5jb2x1bW5SZWN0KCk7Ci0gICAgICAgIGlmIChjb2xSZWN0LmNvbnRhaW5zKHBvaW50SW5D
b250YWluZXIpKSB7CisgICAgICAgIGlmIChjb2xSZWN0LmNvbnRhaW5zKHRhcmdldEluQ29udGFp
bmVyKSkgewogICAgICAgICAgICAgaXQuYWRqdXN0KG9mZnNldCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RDb250
ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBS
ZW5kZXJCbG9jazo6aGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29u
dGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rp
b24gaGl0VGVzdEFjdGlvbikKIHsKICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSAmJiAhaXNUYWJs
ZSgpKSB7CiAgICAgICAgIC8vIFdlIGhhdmUgdG8gaGl0LXRlc3Qgb3VyIGxpbmUgYm94ZXMuCi0g
ICAgICAgIGlmIChtX2xpbmVCb3hlcy5oaXRUZXN0KHRoaXMsIHJlcXVlc3QsIHJlc3VsdCwgcG9p
bnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pKQorICAgICAg
ICBpZiAobV9saW5lQm94ZXMuaGl0VGVzdCh0aGlzLCByZXF1ZXN0LCByZXN1bHQsIHRhcmdldElu
Q29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlvbikpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBIaXQgdGVzdCBvdXIgY2hp
bGRyZW4uCkBAIC00ODQ0LDcgKzQ4NDQsNyBAQCBib29sIFJlbmRlckJsb2NrOjpoaXRUZXN0Q29u
dGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmCiAgICAg
ICAgICAgICBjaGlsZEhpdFRlc3QgPSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQ7CiAgICAg
ICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGxhc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nQm94KCkpIHsKICAgICAgICAgICAgIExheW91dFBvaW50
IGNoaWxkUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGVGb3JDaGlsZChjaGlsZCwgYWNjdW11bGF0
ZWRPZmZzZXQpOwotICAgICAgICAgICAgaWYgKCFjaGlsZC0+aGFzU2VsZlBhaW50aW5nTGF5ZXIo
KSAmJiAhY2hpbGQtPmlzRmxvYXRpbmcoKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwg
cmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBjaGlsZFBvaW50LCBjaGlsZEhpdFRlc3QpKQorICAg
ICAgICAgICAgaWYgKCFjaGlsZC0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAhY2hpbGQtPmlz
RmxvYXRpbmcoKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB0YXJnZXRJ
bkNvbnRhaW5lciwgY2hpbGRQb2ludCwgY2hpbGRIaXRUZXN0KSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgKaW5kZXggNTNhMWYyMDJjNGFiYWQ2MmJlYzhhYjdlYjVjMGI0NmVkZTIxNWZjNC4u
YzI3MGJhZDY1NjE3NmEzNmUwYjIyNTY3MzRhOWI0Y2E0YzJlYjkzOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAgLTIyMyw3ICsyMjMsNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGFkanVzdFJlY3RGb3JDb2x1bW5zKExheW91dFJlY3QmKSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0Rm9yQ29sdW1ucyhMYXlvdXRTaXplJiwgY29uc3QgTGF5b3V0UG9pbnQm
KSBjb25zdDsKLSAgICB2b2lkIGFkanVzdEZvckNvbHVtblJlY3QoTGF5b3V0U2l6ZSYgb2Zmc2V0
LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lcikgY29uc3Q7CisgICAgdm9pZCBh
ZGp1c3RGb3JDb2x1bW5SZWN0KExheW91dFNpemUmIG9mZnNldCwgY29uc3QgTGF5b3V0UG9pbnQm
IHRhcmdldEluQ29udGFpbmVyKSBjb25zdDsKIAogICAgIHZvaWQgYWRkQ29udGludWF0aW9uV2l0
aE91dGxpbmUoUmVuZGVySW5saW5lKik7CiAgICAgYm9vbCBwYWludHNDb250aW51YXRpb25PdXRs
aW5lKFJlbmRlcklubGluZSopOwpAQCAtNDIzLDcgKzQyMyw3IEBAIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIEVUZXh0QWxpZ24gdGV4dEFsaWdubWVudEZvckxpbmUoYm9vbCBlbmRzV2l0aFNvZnRC
cmVhaykgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdElubGluZURpcmVjdGlvbkxpbmVC
b3VuZHMoaW50IC8qIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgKi8sIGZsb2F0JiAvKiBsb2dp
Y2FsTGVmdCAqLywgZmxvYXQmIC8qIGxvZ2ljYWxXaWR0aCAqLykgY29uc3QgeyB9CiAKLSAgICB2
aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOworICAgIHZp
cnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBjb25zdCBIaXRUZXN0VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKIAogICAg
IHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogCkBAIC03NjAs
MTEgKzc2MCwxMSBAQCBwcml2YXRlOgogICAgIExheW91dFVuaXQgbG93ZXN0RmxvYXRMb2dpY2Fs
Qm90dG9tKEZsb2F0aW5nT2JqZWN0OjpUeXBlID0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdFJp
Z2h0KSBjb25zdDsgCiAgICAgTGF5b3V0VW5pdCBuZXh0RmxvYXRMb2dpY2FsQm90dG9tQmVsb3co
TGF5b3V0VW5pdCkgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCBib29sIGhpdFRlc3RDb2x1bW5z
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2lu
dCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBIaXRUZXN0QWN0aW9uKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9p
bnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRU
ZXN0QWN0aW9uKTsKLSAgICBib29sIGhpdFRlc3RGbG9hdHMoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOworICAgIHZpcnR1YWwgYm9vbCBo
aXRUZXN0Q29sdW1ucyhjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBIaXRUZXN0VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGl0VGVz
dENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhp
dFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAgIGJvb2wgaGl0VGVzdEZsb2F0cyhjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0VGFyZ2V0JiB0
YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsK
IAotICAgIHZpcnR1YWwgYm9vbCBpc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQpOworICAgIHZpcnR1YWwgYm9vbCBpc1BvaW50SW5PdmVyZmxv
d0NvbnRyb2woSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiB0YXJnZXRJbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsKIAogICAgIHZvaWQg
Y29tcHV0ZUlubGluZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAgICB2b2lkIGNvbXB1dGVC
bG9ja1ByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAKaW5kZXggOWIzYjdkZTg2MTc2NDNjMjAzZmI0Zjc1Mjc5YWQ5N2U3Mjk1NTdhNi4u
MWFiM2VlNmUzMzBlNWNlZTBjZjRlN2M1OTJjYzQzNDYyNTMwZTEyOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTc0MywyNSArNzQzLDI1IEBAIExheW91dFVuaXQg
UmVuZGVyQm94Ojpjb21wdXRlQ29udGVudEJveExvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBoZWln
aHQpIGNvbnN0CiB9CiAKIC8vIEhpdCBUZXN0aW5nCi1ib29sIFJlbmRlckJveDo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5kZXJCb3g6
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewog
ICAgIExheW91dFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxv
Y2F0aW9uKCk7CiAKICAgICAvLyBDaGVjayBraWRzIGZpcnN0LgogICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNT
aWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKCFjaGlsZC0+aGFzTGF5ZXIoKSAmJiBjaGlsZC0+bm9k
ZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhZGp1c3RlZExvY2F0
aW9uLCBhY3Rpb24pKSB7Ci0gICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwg
cG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24p
KTsKKyAgICAgICAgaWYgKCFjaGlsZC0+aGFzTGF5ZXIoKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQo
cmVxdWVzdCwgcmVzdWx0LCB0YXJnZXRJbkNvbnRhaW5lciwgYWRqdXN0ZWRMb2NhdGlvbiwgYWN0
aW9uKSkgeworICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRhcmdldElu
Q29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBDaGVjayBv
dXIgYm91bmRzIG5leHQuIEZvciB0aGlzIHB1cnBvc2UgYWx3YXlzIGFzc3VtZSB0aGF0IHdlIGNh
biBvbmx5IGJlIGhpdCBpbiB0aGUKICAgICAvLyBmb3JlZ3JvdW5kIHBoYXNlICh3aGljaCBpcyB0
cnVlIGZvciByZXBsYWNlZCBlbGVtZW50cyBsaWtlIGltYWdlcykuCi0gICAgTGF5b3V0UmVjdCBi
b3VuZHNSZWN0ID0gYm9yZGVyQm94UmVjdEluUmVnaW9uKHBvaW50SW5Db250YWluZXIucmVnaW9u
KCkpOworICAgIExheW91dFJlY3QgYm91bmRzUmVjdCA9IGJvcmRlckJveFJlY3RJblJlZ2lvbih0
YXJnZXRJbkNvbnRhaW5lci5yZWdpb24oKSk7CiAgICAgYm91bmRzUmVjdC5tb3ZlQnkoYWRqdXN0
ZWRMb2NhdGlvbik7Ci0gICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0g
SGl0VGVzdEZvcmVncm91bmQgJiYgcG9pbnRJbkNvbnRhaW5lci5pbnRlcnNlY3RzKGJvdW5kc1Jl
Y3QpKSB7Ci0gICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFp
bmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOwotICAgICAgICBp
ZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5vZGUoKSwgcG9pbnRJbkNv
bnRhaW5lciwgYm91bmRzUmVjdCkpCisgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBh
Y3Rpb24gPT0gSGl0VGVzdEZvcmVncm91bmQgJiYgdGFyZ2V0SW5Db250YWluZXIuaW50ZXJzZWN0
cyhib3VuZHNSZWN0KSkgeworICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdGFy
Z2V0SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9uKSk7
CisgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgp
LCB0YXJnZXRJbkNvbnRhaW5lciwgYm91bmRzUmVjdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRleCBiYmIwMzQ0
NTEyNmQ4NjY0MTI3ZDdhYTI0YzhlMzExNmNmMGIwZTY5Li41NWQzZDUxYjExOTAyMDY2Nzg0OWVm
OTA2NjQ2YzU0YzJkYWFjMzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCkBA
IC0yNjMsNyArMjYzLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwog
ICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwot
ICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExh
eW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOwog
CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBtYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9i
amVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3Qu
Y3BwCmluZGV4IGEzNjU3ZmFlM2E5NGFiNGU1ZDJlMmVkNTQ4YTQ2OGM3ZTNiZTUyMTQuLjE0NjA0
MDdlZjIxNDkwZjg4ZTNhNjZmODA4NjA1NTk3NTRhZWY4MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcApAQCAtMjYzLDE2ICsyNjMs
MTYgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6dmlld0NsZWFyZWQoKQogICAgIH0KIH0K
IAotYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQs
IEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlv
bikKIHsKLSAgICBpZiAoIVJlbmRlclBhcnQ6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwg
cG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pKQorICAg
IGlmICghUmVuZGVyUGFydDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB0YXJnZXRJbkNv
bnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBpZiAoIXdpZGdldCgpIHx8ICF3aWRnZXQoKS0+aXNQbHVnaW5WaWV3
QmFzZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIFBsdWdpblZpZXdCYXNlKiB2aWV3
ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlld0Jhc2UqPih3aWRnZXQoKSk7Ci0gICAgSW50UG9pbnQg
cm91bmRlZFBvaW50ID0gcG9pbnRJbkNvbnRhaW5lci5yb3VuZGVkUG9pbnQoKTsKKyAgICBJbnRQ
b2ludCByb3VuZGVkUG9pbnQgPSB0YXJnZXRJbkNvbnRhaW5lci5yb3VuZGVkUG9pbnQoKTsKIAog
ICAgIGlmIChTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIgPSB2aWV3LT5ob3Jpem9udGFs
U2Nyb2xsYmFyKCkpIHsKICAgICAgICAgaWYgKGhvcml6b250YWxTY3JvbGxiYXItPnNob3VsZFBh
cnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkgJiYgaG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0
KCkuY29udGFpbnMocm91bmRlZFBvaW50KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAppbmRleCBmZDQ0ZTA4MGZkMzVlMjdhMWQ5MTU3ZTU0
MzMyMzNlMzg5YWYzYjVlLi4zM2RkN2IyNmNmNzBmYzQ4OGNkNTQzMDhmNWU2MjNhMzE5MTc4OTI4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmpl
Y3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3Qu
aApAQCAtNjksNyArNjksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgdmlld0NsZWFyZWQoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRU
ZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIG5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRl
c3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBib29sIHNj
cm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVy
LCBOb2RlKiogc3RvcE5vZGUpOwogICAgIHZpcnR1YWwgYm9vbCBsb2dpY2FsU2Nyb2xsKFNjcm9s
bExvZ2ljYWxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBO
b2RlKiogc3RvcE5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZsb3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dU
aHJlYWQuY3BwCmluZGV4IDFiMDljYmI4ZDBmMWUxMTAyMWY0NTRhZGE5MmE3ZjJjNmZmMDM3OTEu
LjA5MWU1YjJiMDFjMTBmNDg0YTM3MmNjYWUwYTA1NjhlZTMyMTZhNTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKQEAgLTI5OSwxMiArMjk5LDEy
IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6cGFpbnRJbnRvUmVnaW9uKFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBSZW5kZXJSZWdpb24qIHJlZ2lvCiAgICAgfQogfQogCi1ib29sIFJlbmRlckZsb3dU
aHJlYWQ6OmhpdFRlc3RSZWdpb24oUmVuZGVyUmVnaW9uKiByZWdpb24sIGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2lu
dCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
KQorYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpoaXRUZXN0UmVnaW9uKFJlbmRlclJlZ2lvbiogcmVn
aW9uLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBIaXRUZXN0VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0KQogewogICAgIExheW91dFJlY3QgcmVnaW9uUmVjdChyZWdp
b24tPnJlZ2lvblJlY3QoKSk7CiAgICAgTGF5b3V0UmVjdCByZWdpb25PdmVyZmxvd1JlY3QgPSBy
ZWdpb24tPnJlZ2lvbk92ZXJmbG93UmVjdCgpOwogICAgIExheW91dFJlY3QgcmVnaW9uQ2xpcHBp
bmdSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0ICsgKHJlZ2lvbk92ZXJmbG93UmVjdC5sb2NhdGlvbigp
IC0gcmVnaW9uUmVjdC5sb2NhdGlvbigpKSwgcmVnaW9uT3ZlcmZsb3dSZWN0LnNpemUoKSk7Ci0g
ICAgaWYgKCFyZWdpb25DbGlwcGluZ1JlY3QuY29udGFpbnMocG9pbnRJbkNvbnRhaW5lci5wb2lu
dCgpKSkKKyAgICBpZiAoIXJlZ2lvbkNsaXBwaW5nUmVjdC5jb250YWlucyh0YXJnZXRJbkNvbnRh
aW5lci5wb2ludCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTGF5b3V0U2l6ZSBy
ZW5kZXJGbG93VGhyZWFkT2Zmc2V0OwpAQCAtMzE4LDEwICszMTgsMTAgQEAgYm9vbCBSZW5kZXJG
bG93VGhyZWFkOjpoaXRUZXN0UmVnaW9uKFJlbmRlclJlZ2lvbiogcmVnaW9uLCBjb25zdCBIaXRU
ZXN0UmVxdWVzdCYKICAgICAvLyBBbHdheXMgaWdub3JlIGNsaXBwaW5nLCBzaW5jZSB0aGUgUmVu
ZGVyRmxvd1RocmVhZCBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBib3VuZHMgb2YgdGhlIEZy
YW1lVmlldy4KICAgICBIaXRUZXN0UmVxdWVzdCBuZXdSZXF1ZXN0KHJlcXVlc3QudHlwZSgpIHwg
SGl0VGVzdFJlcXVlc3Q6Oklnbm9yZUNsaXBwaW5nKTsKIAotICAgIC8vIE1ha2UgYSBuZXcgdGVt
cG9yYXJ5IGhpdFRlc3RQb2ludCBpbiB0aGUgbmV3IHJlZ2lvbi4KLSAgICBIaXRUZXN0UG9pbnQg
bmV3SGl0VGVzdFBvaW50KHBvaW50SW5Db250YWluZXIsIC1yZW5kZXJGbG93VGhyZWFkT2Zmc2V0
LCByZWdpb24pOworICAgIC8vIE1ha2UgYSBuZXcgdGVtcG9yYXJ5IGhpdFRlc3RUYXJnZXQgaW4g
dGhlIG5ldyByZWdpb24uCisgICAgSGl0VGVzdFRhcmdldCBuZXdIaXRUZXN0VGFyZ2V0KHRhcmdl
dEluQ29udGFpbmVyLCAtcmVuZGVyRmxvd1RocmVhZE9mZnNldCwgcmVnaW9uKTsKIAotICAgIGJv
b2wgaXNQb2ludEluc2lkZUZsb3dUaHJlYWQgPSBsYXllcigpLT5oaXRUZXN0KG5ld1JlcXVlc3Qs
IG5ld0hpdFRlc3RQb2ludCwgcmVzdWx0KTsKKyAgICBib29sIGlzUG9pbnRJbnNpZGVGbG93VGhy
ZWFkID0gbGF5ZXIoKS0+aGl0VGVzdChuZXdSZXF1ZXN0LCBuZXdIaXRUZXN0VGFyZ2V0LCByZXN1
bHQpOwogCiAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBzZXQgcmVzdWx0Lm1fbG9jYWxQb2ludCBi
YWNrIHRvIHRoZSBSZW5kZXJSZWdpb24ncyBjb29yZGluYXRlIHNwYWNlIG9yIGxlYXZlIGl0IGlu
IHRoZSBSZW5kZXJGbG93VGhyZWFkJ3MgY29vcmRpbmF0ZQogICAgIC8vIHNwYWNlPyBSaWdodCBu
b3cgaXQncyBzdGF5aW5nIGluIHRoZSBSZW5kZXJGbG93VGhyZWFkJ3MgY29vcmRpbmF0ZSBzcGFj
ZSwgd2hpY2ggbWF5IGVuZCB1cCBiZWluZyBvay4gV2Ugd2lsbCBrbm93IG1vcmUgd2hlbiB3ZSBn
ZXQgYXJvdW5kIHRvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Rmxvd1RocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQu
aAppbmRleCBjNzZlZTA4NzBmMmU2OTBjNDUxYWIyOWViY2NkZmMwMjk5ZjFlNDg5Li5mOTk1NDYw
ZjIyMWM0OTMwYzJhOGEwZTYzM2NiMjhmNzk5MDYyNTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAg
IHZvaWQgY29tcHV0ZUxvZ2ljYWxIZWlnaHQoKTsKIAogICAgIHZvaWQgcGFpbnRJbnRvUmVnaW9u
KFBhaW50SW5mbyYsIFJlbmRlclJlZ2lvbiosIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNl
dCk7Ci0gICAgYm9vbCBoaXRUZXN0UmVnaW9uKFJlbmRlclJlZ2lvbiosIGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsKKyAgICBib29sIGhp
dFRlc3RSZWdpb24oUmVuZGVyUmVnaW9uKiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSGl0VGVzdFRhcmdldCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsKIAogICAgIGJvb2wgaGFzUmVnaW9ucygpIGNv
bnN0IHsgcmV0dXJuIG1fcmVnaW9uTGlzdC5zaXplKCk7IH0KICAgICBib29sIGhhc1ZhbGlkUmVn
aW9ucygpIGNvbnN0IHsgQVNTRVJUKCFtX3JlZ2lvbnNJbnZhbGlkYXRlZCk7IHJldHVybiBtX2hh
c1ZhbGlkUmVnaW9uczsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZyYW1lU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNl
dC5jcHAKaW5kZXggYzg5NTQ3ODYzMTE1MmIwMGIxODRmYmYyNGUyMTRkNTg4OGQwZGJiMy4uNmNk
MTFiNmJlZGE3YzIxN2IwNjM5YWZlOTIyN2Y2ZTlkNDY5ODk2MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCkBAIC0xNTgsMTIgKzE1OCwxMiBAQCB2b2lk
IFJlbmRlckZyYW1lU2V0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0KQogfQogCiBib29sIFJlbmRlckZyYW1lU2V0Ojpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAot
ICAgIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKKyAgICBjb25zdCBI
aXRUZXN0VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKIHsKICAgICBpZiAoYWN0aW9uICE9
IEhpdFRlc3RGb3JlZ3JvdW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBib29sIGlu
c2lkZSA9IFJlbmRlckJveDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29u
dGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgYWN0aW9uKQorICAgIGJvb2wgaW5zaWRlID0gUmVu
ZGVyQm94Ojpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLCBh
Y2N1bXVsYXRlZE9mZnNldCwgYWN0aW9uKQogICAgICAgICB8fCBtX2lzUmVzaXppbmc7CiAKICAg
ICBpZiAoaW5zaWRlICYmIGZyYW1lU2V0KCktPm5vUmVzaXplKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZyYW1lU2V0LmgKaW5kZXggN2Q2OTc3MGU3MzU3NjFjODY2N2MzM2YwNGI5
MWZjYWUxYjU0NmYzMC4uZjUxNzAxNGMxZjQ1NzgxNjI3ZTcxZWVkNjFjMTBlODYyMWI2YjE2YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmgKQEAgLTk2LDcgKzk2
LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNGcmFtZVNldCgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLSAgICB2aXJ0dWFsIGJv
b2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBIaXRUZXN0VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICB2aXJ0dWFsIGJv
b2wgaXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqKSBjb25zdDsKICAg
ICB2aXJ0dWFsIEN1cnNvckRpcmVjdGl2ZSBnZXRDdXJzb3IoY29uc3QgTGF5b3V0UG9pbnQmLCBD
dXJzb3ImKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCmlu
ZGV4IDQ4ZWEwNTQ3MGRkZjA0YmQxMDQyZDVlYjMwYzE2YmZjZTc4ZDNiMTQuLjAyMzE2MmY3ODBk
YzllYzRlMWNjYjMxMmFiYmE2OTg4M2IyNTVmMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckltYWdlLmNwcApAQCAtNDk4LDE2ICs0OTgsMTYgQEAgSFRNTE1hcEVsZW1lbnQqIFJl
bmRlckltYWdlOjppbWFnZU1hcCgpIGNvbnN0CiAgICAgcmV0dXJuIGkgPyBpLT50cmVlU2NvcGUo
KS0+Z2V0SW1hZ2VNYXAoaS0+ZmFzdEdldEF0dHJpYnV0ZSh1c2VtYXBBdHRyKSkgOiAwOwogfQog
Ci1ib29sIFJlbmRlckltYWdlOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5D
b250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFj
dGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0
VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewotICAgIEhpdFRlc3RS
ZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQuaGl0VGVzdFBvaW50KCksIHJlc3VsdC5zaGFkb3dDb250
ZW50RmlsdGVyUG9saWN5KCkpOwotICAgIGJvb2wgaW5zaWRlID0gUmVuZGVyUmVwbGFjZWQ6Om5v
ZGVBdFBvaW50KHJlcXVlc3QsIHRlbXBSZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxh
dGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKTsKKyAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQo
cmVzdWx0LnRhcmdldCgpLCByZXN1bHQuc2hhZG93Q29udGVudEZpbHRlclBvbGljeSgpKTsKKyAg
ICBib29sIGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChyZXF1ZXN0LCB0ZW1w
UmVzdWx0LCB0YXJnZXRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rp
b24pOwogCiAgICAgaWYgKHRlbXBSZXN1bHQuaW5uZXJOb2RlKCkgJiYgbm9kZSgpKSB7CiAgICAg
ICAgIGlmIChIVE1MTWFwRWxlbWVudCogbWFwID0gaW1hZ2VNYXAoKSkgewogICAgICAgICAgICAg
TGF5b3V0UmVjdCBjb250ZW50Qm94ID0gY29udGVudEJveFJlY3QoKTsKICAgICAgICAgICAgIGZs
b2F0IHNjYWxlRmFjdG9yID0gMSAvIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLSAgICAgICAg
ICAgIExheW91dFBvaW50IG1hcExvY2F0aW9uID0gcG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0g
dG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSAtIGxvY2F0aW9uT2Zmc2V0KCkgLSB0b0xh
eW91dFNpemUoY29udGVudEJveC5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgIExheW91dFBvaW50
IG1hcExvY2F0aW9uID0gdGFyZ2V0SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShh
Y2N1bXVsYXRlZE9mZnNldCkgLSBsb2NhdGlvbk9mZnNldCgpIC0gdG9MYXlvdXRTaXplKGNvbnRl
bnRCb3gubG9jYXRpb24oKSk7CiAgICAgICAgICAgICBtYXBMb2NhdGlvbi5zY2FsZShzY2FsZUZh
Y3Rvciwgc2NhbGVGYWN0b3IpOwogCiAgICAgICAgICAgICBpZiAobWFwLT5tYXBNb3VzZUV2ZW50
KG1hcExvY2F0aW9uLCBjb250ZW50Qm94LnNpemUoKSwgdGVtcFJlc3VsdCkpCkBAIC01MTUsNyAr
NTE1LDcgQEAgYm9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICAgICAgfQogICAgIH0KIAotICAg
IGlmICghaW5zaWRlICYmIHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkKKyAgICBpZiAoIWluc2lk
ZSAmJiByZXN1bHQuaXNBcmVhQmFzZWRUZXN0KCkpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQodGVt
cFJlc3VsdCk7CiAgICAgaWYgKGluc2lkZSkKICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmgKaW5kZXggNmJkZGIwYTU4ZGFmZmI0
NzlmZDNiZThhNzc1NTdiZjdhOGIyYzFlMy4uMjJhNTg5M2M3MjJiODQ4NzA1MmY5YjIxNzcyMGNk
MzBmNjJjZTJjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklt
YWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmgKQEAgLTky
LDcgKzkyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGludCBtaW5pbXVtUmVwbGFjZWRIZWln
aHQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNv
dXJjZSopOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVy
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9W
RVJSSURFOwogCiAgICAgdmlydHVhbCBib29sIGJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFj
a2dyb3VuZChCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UsIElubGluZUZsb3dCb3gqKSBjb25zdCBP
VkVSUklERTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklu
bGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAppbmRl
eCA3YjlmYzJlZmI4YTEwN2U0OTM0ZTUzZDZmYjlhYTc3ZjQ3ZDI2MDAzLi40M2NmYzU0NDQ4YmJl
OGUwMmQzYjA3MTFlZmZmZDE1ODE4MWU5MGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW5saW5lLmNwcApAQCAtNzU2LDkgKzc1Niw5IEBAIGNvbnN0IGNoYXIqIFJlbmRlcklu
bGluZTo6cmVuZGVyTmFtZSgpIGNvbnN0CiB9CiAKIGJvb2wgUmVuZGVySW5saW5lOjpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0UG9pbnQmIHBv
aW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0
VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBIaXRUZXN0VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0g
ICAgcmV0dXJuIG1fbGluZUJveGVzLmhpdFRlc3QodGhpcywgcmVxdWVzdCwgcmVzdWx0LCBwb2lu
dEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlvbik7CisgICAgcmV0
dXJuIG1fbGluZUJveGVzLmhpdFRlc3QodGhpcywgcmVxdWVzdCwgcmVzdWx0LCB0YXJnZXRJbkNv
bnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pOwogfQogCiBWaXNpYmxl
UG9zaXRpb24gUmVuZGVySW5saW5lOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50
JiBwb2ludCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAppbmRleCBhOGNj
MmYxYmU1MDU3MzgwMmVjNjk3ZWUzMTM0NDIzYTZkYzBkZDcxLi41ZDFmOTcxYjI4Y2I4NzA5Y2I3
ZWVmYTIxZWFkYTUzNzE0NmFiODFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklu
bGluZS5oCkBAIC0xMjIsNyArMTIyLDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBw
YWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCi0gICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIGJv
b2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGlzUmVsUG9zaXRpb25lZCgpIHx8IGlz
VHJhbnNwYXJlbnQoKSB8fCBoYXNNYXNrKCkgfHwgaGFzRmlsdGVyKCk7IH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggNzRiMGY1YTY3MDE2ZWZhZWYwOTUw
ZDMzYjM5ZmMzYjE1MzhmYTM4OS4uZmMyY2RkMGM2NWJhOTA2MTc4YjFkZTQwOGYxYWY3N2Q3Y2M1
NWVlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0xMjYs
OSArMTI2LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIGNvbnN0IGludCBNaW5pbXVt
V2lkdGhXaGlsZVJlc2l6aW5nID0gMTAwOwogY29uc3QgaW50IE1pbmltdW1IZWlnaHRXaGlsZVJl
c2l6aW5nID0gNDA7CiAKLWJvb2wgQ2xpcFJlY3Q6OmludGVyc2VjdHMoY29uc3QgSGl0VGVzdFBv
aW50JiBoaXRUZXN0UG9pbnQpCitib29sIENsaXBSZWN0OjppbnRlcnNlY3RzKGNvbnN0IEhpdFRl
c3RUYXJnZXQmIGhpdFRlc3RUYXJnZXQpCiB7Ci0gICAgcmV0dXJuIGhpdFRlc3RQb2ludC5pbnRl
cnNlY3RzKG1fcmVjdCk7CisgICAgcmV0dXJuIGhpdFRlc3RUYXJnZXQuaW50ZXJzZWN0cyhtX3Jl
Y3QpOwogfQogCiBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlbmRlcmVyKQpAQCAtMzM4OSwxMCArMzM4OSwxMCBAQCBzdGF0aWMgaW5saW5lIExheW91dFJl
Y3QgZnJhbWVWaXNpYmxlUmVjdChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogCiBib29sIFJlbmRl
ckxheWVyOjpoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQpCiB7Ci0gICAgcmV0dXJuIGhpdFRlc3QocmVxdWVzdCwgcmVzdWx0LmhpdFRl
c3RQb2ludCgpLCByZXN1bHQpOworICAgIHJldHVybiBoaXRUZXN0KHJlcXVlc3QsIHJlc3VsdC50
YXJnZXQoKSwgcmVzdWx0KTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdChjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSGl0VGVzdFBvaW50JiBoaXRUZXN0UG9pbnQs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKK2Jvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIGhpdFRlc3RUYXJn
ZXQsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKIHsKICAgICByZW5kZXJlcigpLT5kb2N1bWVudCgp
LT51cGRhdGVMYXlvdXQoKTsKICAgICAKQEAgLTM0MDAsNyArMzQwMCw3IEBAIGJvb2wgUmVuZGVy
TGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRl
c3RQb2ludCYgaGl0CiAgICAgaWYgKCFyZXF1ZXN0Lmlnbm9yZUNsaXBwaW5nKCkpCiAgICAgICAg
IGhpdFRlc3RBcmVhLmludGVyc2VjdChmcmFtZVZpc2libGVSZWN0KHJlbmRlcmVyKCkpKTsKIAot
ICAgIFJlbmRlckxheWVyKiBpbnNpZGVMYXllciA9IGhpdFRlc3RMYXllcih0aGlzLCAwLCByZXF1
ZXN0LCByZXN1bHQsIGhpdFRlc3RBcmVhLCBoaXRUZXN0UG9pbnQsIGZhbHNlKTsKKyAgICBSZW5k
ZXJMYXllciogaW5zaWRlTGF5ZXIgPSBoaXRUZXN0TGF5ZXIodGhpcywgMCwgcmVxdWVzdCwgcmVz
dWx0LCBoaXRUZXN0QXJlYSwgaGl0VGVzdFRhcmdldCwgZmFsc2UpOwogICAgIGlmICghaW5zaWRl
TGF5ZXIpIHsKICAgICAgICAgLy8gV2UgZGlkbid0IGhpdCBhbnkgbGF5ZXIuIElmIHdlIGFyZSB0
aGUgcm9vdCBsYXllciBhbmQgdGhlIG1vdXNlIGlzIC0tIG9yIGp1c3Qgd2FzIC0tIGRvd24sIAog
ICAgICAgICAvLyByZXR1cm4gb3Vyc2VsdmVzLiBXZSBkbyB0aGlzIHNvIG1vdXNlIGV2ZW50cyBj
b250aW51ZSBnZXR0aW5nIGRlbGl2ZXJlZCBhZnRlciBhIGRyYWcgaGFzIApAQCAtMzQ1Miw3ICsz
NDUyLDcgQEAgc3RhdGljIGRvdWJsZSBjb21wdXRlWk9mZnNldChjb25zdCBIaXRUZXN0aW5nVHJh
bnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlKQogfQogCiBQYXNzUmVmUHRyPEhpdFRlc3RpbmdU
cmFuc2Zvcm1TdGF0ZT4gUmVuZGVyTGF5ZXI6OmNyZWF0ZUxvY2FsVHJhbnNmb3JtU3RhdGUoUmVu
ZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRl
c3RSZWN0LCBjb25zdCBIaXRUZXN0UG9pbnQmIGhpdFRlc3RQb2ludCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwg
Y29uc3QgSGl0VGVzdFRhcmdldCYgaGl0VGVzdFRhcmdldCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIGNvbnRh
aW5lclRyYW5zZm9ybVN0YXRlKSBjb25zdAogewogICAgIFJlZlB0cjxIaXRUZXN0aW5nVHJhbnNm
b3JtU3RhdGU+IHRyYW5zZm9ybVN0YXRlOwpAQCAtMzQ2Miw5ICszNDYyLDkgQEAgUGFzc1JlZlB0
cjxIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU+IFJlbmRlckxheWVyOjpjcmVhdGVMb2NhbFRyYW5z
Zm9ybVN0YXRlKFJlbmQKICAgICAgICAgdHJhbnNmb3JtU3RhdGUgPSBIaXRUZXN0aW5nVHJhbnNm
b3JtU3RhdGU6OmNyZWF0ZSgqY29udGFpbmVyVHJhbnNmb3JtU3RhdGUpOwogICAgICAgICBjb252
ZXJ0VG9MYXllckNvb3Jkcyhjb250YWluZXJMYXllciwgb2Zmc2V0KTsKICAgICB9IGVsc2Ugewot
ICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIG5lZWQgdG8gbWFrZSB0cmFu
c2Zvcm0gc3RhdGUsIHRoZW4gYmFzZSBpdCBvZmYgb2YgaGl0VGVzdFBvaW50LAorICAgICAgICAv
LyBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIG5lZWQgdG8gbWFrZSB0cmFuc2Zvcm0gc3Rh
dGUsIHRoZW4gYmFzZSBpdCBvZmYgb2YgaGl0VGVzdFRhcmdldCwKICAgICAgICAgLy8gd2hpY2gg
aXMgcmVsYXRpdmUgdG8gcm9vdExheWVyLgotICAgICAgICB0cmFuc2Zvcm1TdGF0ZSA9IEhpdFRl
c3RpbmdUcmFuc2Zvcm1TdGF0ZTo6Y3JlYXRlKGhpdFRlc3RQb2ludC50cmFuc2Zvcm1lZFBvaW50
KCksIGhpdFRlc3RQb2ludC50cmFuc2Zvcm1lZFJlY3QoKSwgRmxvYXRRdWFkKGhpdFRlc3RSZWN0
KSk7CisgICAgICAgIHRyYW5zZm9ybVN0YXRlID0gSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjpj
cmVhdGUoaGl0VGVzdFRhcmdldC50cmFuc2Zvcm1lZFBvaW50KCksIGhpdFRlc3RUYXJnZXQudHJh
bnNmb3JtZWRSZWN0KCksIEZsb2F0UXVhZChoaXRUZXN0UmVjdCkpOwogICAgICAgICBjb252ZXJ0
VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIG9mZnNldCk7CiAgICAgfQogICAgIApAQCAtMzUwNSwx
NiArMzUwNSwxNiBAQCBzdGF0aWMgYm9vbCBpc0hpdENhbmRpZGF0ZShjb25zdCBSZW5kZXJMYXll
ciogaGl0TGF5ZXIsIGJvb2wgY2FuRGVwdGhTb3J0LCBkb3VibAogICAgIHJldHVybiB0cnVlOwog
fQogCi0vLyBoaXRUZXN0UG9pbnQgYW5kIGhpdFRlc3RSZWN0IGFyZSByZWxhdGl2ZSB0byByb290
TGF5ZXIuCisvLyBoaXRUZXN0VGFyZ2V0IGFuZCBoaXRUZXN0UmVjdCBhcmUgcmVsYXRpdmUgdG8g
cm9vdExheWVyLgogLy8gQSAnZmxhdHRlbmluZycgbGF5ZXIgaXMgb25lIHByZXNlcnZlczNEKCkg
PT0gZmFsc2UuCiAvLyB0cmFuc2Zvcm1TdGF0ZS5tX2FjY3VtdWxhdGVkVHJhbnNmb3JtIGhvbGRz
IHRoZSB0cmFuc2Zvcm0gZnJvbSB0aGUgY29udGFpbmluZyBmbGF0dGVuaW5nIGxheWVyLgotLy8g
dHJhbnNmb3JtU3RhdGUubV9sYXN0UGxhbmFyUG9pbnQgaXMgdGhlIGhpdFRlc3RQb2ludCBpbiB0
aGUgcGxhbmUgb2YgdGhlIGNvbnRhaW5pbmcgZmxhdHRlbmluZyBsYXllci4KKy8vIHRyYW5zZm9y
bVN0YXRlLm1fbGFzdFBsYW5hclBvaW50IGlzIHRoZSBoaXRUZXN0VGFyZ2V0IGluIHRoZSBwbGFu
ZSBvZiB0aGUgY29udGFpbmluZyBmbGF0dGVuaW5nIGxheWVyLgogLy8gdHJhbnNmb3JtU3RhdGUu
bV9sYXN0UGxhbmFyUXVhZCBpcyB0aGUgaGl0VGVzdFJlY3QgYXMgYSBxdWFkIGluIHRoZSBwbGFu
ZSBvZiB0aGUgY29udGFpbmluZyBmbGF0dGVuaW5nIGxheWVyLgogLy8gCiAvLyBJZiB6T2Zmc2V0
IGlzIG5vbi1udWxsICh3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2FsbGVyIHdhbnRzIHogb2Zm
c2V0IGluZm9ybWF0aW9uKSwgCiAvLyAgKnpPZmZzZXQgb24gcmV0dXJuIGlzIHRoZSB6IG9mZnNl
dCBvZiB0aGUgaGl0IHBvaW50IHJlbGF0aXZlIHRvIHRoZSBjb250YWluaW5nIGZsYXR0ZW5pbmcg
bGF5ZXIuCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXll
ciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29u
c3QgSGl0VGVzdFBvaW50JiBoaXRUZXN0UG9pbnQsIGJvb2wgYXBwbGllZFRyYW5zZm9ybSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhp
dFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0VGFyZ2V0JiBoaXRUZXN0VGFyZ2V0LCBib29sIGFwcGxp
ZWRUcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHRyYW5zZm9ybVN0YXRlLCBkb3VibGUqIHpPZmZz
ZXQpCiB7CiAgICAgLy8gVGhlIG5hdHVyYWwgdGhpbmcgd291bGQgYmUgdG8ga2VlcCBIaXRUZXN0
aW5nVHJhbnNmb3JtU3RhdGUgb24gdGhlIHN0YWNrLCBidXQgaXQncyBiaWcsIHNvIHdlIGhlYXAt
YWxsb2NhdGUuCkBAIC0zNTI1LDE0ICszNTI1LDE0IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXll
cjo6aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250
CiAgICAgaWYgKHRyYW5zZm9ybSgpICYmICFhcHBsaWVkVHJhbnNmb3JtKSB7CiAgICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGUgcGFyZW50J3MgY2xpcCByZWN0cyBoYXZlIGJlZW4gY2FsY3VsYXRlZC4K
ICAgICAgICAgaWYgKHBhcmVudCgpKSB7Ci0gICAgICAgICAgICBDbGlwUmVjdCBjbGlwUmVjdCA9
IGJhY2tncm91bmRDbGlwUmVjdChyb290TGF5ZXIsIGhpdFRlc3RQb2ludC5yZWdpb24oKSwgdXNl
VGVtcG9yYXJ5Q2xpcFJlY3RzID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUm9vdFJlbGF0aXZlQ2xp
cFJlY3RzLCBJbmNsdWRlT3ZlcmxheVNjcm9sbGJhclNpemUpOworICAgICAgICAgICAgQ2xpcFJl
Y3QgY2xpcFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJlY3Qocm9vdExheWVyLCBoaXRUZXN0VGFyZ2V0
LnJlZ2lvbigpLCB1c2VUZW1wb3JhcnlDbGlwUmVjdHMgPyBUZW1wb3JhcnlDbGlwUmVjdHMgOiBS
b290UmVsYXRpdmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CiAgICAg
ICAgICAgICAvLyBHbyBhaGVhZCBhbmQgdGVzdCB0aGUgZW5jbG9zaW5nIGNsaXAgbm93LgotICAg
ICAgICAgICAgaWYgKCFjbGlwUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RQb2ludCkpCisgICAgICAg
ICAgICBpZiAoIWNsaXBSZWN0LmludGVyc2VjdHMoaGl0VGVzdFRhcmdldCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBDcmVhdGUgYSB0cmFuc2Zv
cm0gc3RhdGUgdG8gYWNjdW11bGF0ZSB0aGlzIHRyYW5zZm9ybS4KLSAgICAgICAgUmVmUHRyPEhp
dFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gbmV3VHJhbnNmb3JtU3RhdGUgPSBjcmVhdGVMb2NhbFRy
YW5zZm9ybVN0YXRlKHJvb3RMYXllciwgY29udGFpbmVyTGF5ZXIsIGhpdFRlc3RSZWN0LCBoaXRU
ZXN0UG9pbnQsIHRyYW5zZm9ybVN0YXRlKTsKKyAgICAgICAgUmVmUHRyPEhpdFRlc3RpbmdUcmFu
c2Zvcm1TdGF0ZT4gbmV3VHJhbnNmb3JtU3RhdGUgPSBjcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRl
KHJvb3RMYXllciwgY29udGFpbmVyTGF5ZXIsIGhpdFRlc3RSZWN0LCBoaXRUZXN0VGFyZ2V0LCB0
cmFuc2Zvcm1TdGF0ZSk7CiAKICAgICAgICAgLy8gSWYgdGhlIHRyYW5zZm9ybSBjYW4ndCBiZSBp
bnZlcnRlZCwgdGhlbiBkb24ndCBoaXQgdGVzdCB0aGlzIGxheWVyIGF0IGFsbC4KICAgICAgICAg
aWYgKCFuZXdUcmFuc2Zvcm1TdGF0ZS0+bV9hY2N1bXVsYXRlZFRyYW5zZm9ybS5pc0ludmVydGli
bGUoKSkKQEAgLTM1NDIsMTkgKzM1NDIsMTkgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpo
aXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKICAg
ICAgICAgLy8gZnJvbSB0aGUgdHJhbnNmb3JtU3RhdGUsIHdoaWNoIHN0b3JlIHRoZSBwb2ludCBh
bmQgcXVhZCBpbiB0aGUgY29vcmRzIG9mIHRoZSBsYXN0IGZsYXR0ZW5lZAogICAgICAgICAvLyBs
YXllciwgYW5kIHRoZSBhY2N1bXVsYXRlZCB0cmFuc2Zvcm0gd2hpY2ggbGV0cyB1cCBtYXAgdGhy
b3VnaCBwcmVzZXJ2ZS0zZCBsYXllcnMuCiAgICAgICAgIC8vCi0gICAgICAgIC8vIFdlIGNhbid0
IGp1c3QgbWFwIGhpdFRlc3RQb2ludCBhbmQgaGl0VGVzdFJlY3QgYmVjYXVzZSB0aGV5IG1heSBo
YXZlIGJlZW4gZmxhdHRlbmVkIChsb3NpbmcgeikKKyAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBt
YXAgaGl0VGVzdFRhcmdldCBhbmQgaGl0VGVzdFJlY3QgYmVjYXVzZSB0aGV5IG1heSBoYXZlIGJl
ZW4gZmxhdHRlbmVkIChsb3NpbmcgeikKICAgICAgICAgLy8gYnkgb3VyIGNvbnRhaW5lci4KICAg
ICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbmV3VHJhbnNmb3JtU3RhdGUtPm1hcHBlZFBv
aW50KCk7CiAgICAgICAgIEZsb2F0UXVhZCBsb2NhbFBvaW50UXVhZCA9IG5ld1RyYW5zZm9ybVN0
YXRlLT5tYXBwZWRRdWFkKCk7CiAgICAgICAgIExheW91dFJlY3QgbG9jYWxIaXRUZXN0UmVjdCA9
IG5ld1RyYW5zZm9ybVN0YXRlLT5ib3VuZHNPZk1hcHBlZEFyZWEoKTsKLSAgICAgICAgSGl0VGVz
dFBvaW50IG5ld0hpdFRlc3RQb2ludDsKLSAgICAgICAgaWYgKGhpdFRlc3RQb2ludC5pc1JlY3RC
YXNlZFRlc3QoKSkKLSAgICAgICAgICAgIG5ld0hpdFRlc3RQb2ludCA9IEhpdFRlc3RQb2ludChs
b2NhbFBvaW50LCBsb2NhbFBvaW50UXVhZCk7CisgICAgICAgIEhpdFRlc3RUYXJnZXQgbmV3SGl0
VGVzdFRhcmdldDsKKyAgICAgICAgaWYgKGhpdFRlc3RUYXJnZXQuaXNBcmVhQmFzZWRUZXN0KCkp
CisgICAgICAgICAgICBuZXdIaXRUZXN0VGFyZ2V0ID0gSGl0VGVzdFRhcmdldChsb2NhbFBvaW50
LCBsb2NhbFBvaW50UXVhZCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ld0hpdFRlc3RQ
b2ludCA9IEhpdFRlc3RQb2ludChsb2NhbFBvaW50KTsKKyAgICAgICAgICAgIG5ld0hpdFRlc3RU
YXJnZXQgPSBIaXRUZXN0VGFyZ2V0KGxvY2FsUG9pbnQpOwogCiAgICAgICAgIC8vIE5vdyBkbyBh
IGhpdCB0ZXN0IHdpdGggdGhlIHJvb3QgbGF5ZXIgc2hpZnRlZCB0byBiZSB1cy4KLSAgICAgICAg
cmV0dXJuIGhpdFRlc3RMYXllcih0aGlzLCBjb250YWluZXJMYXllciwgcmVxdWVzdCwgcmVzdWx0
LCBsb2NhbEhpdFRlc3RSZWN0LCBuZXdIaXRUZXN0UG9pbnQsIHRydWUsIG5ld1RyYW5zZm9ybVN0
YXRlLmdldCgpLCB6T2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGhpdFRlc3RMYXllcih0aGlzLCBj
b250YWluZXJMYXllciwgcmVxdWVzdCwgcmVzdWx0LCBsb2NhbEhpdFRlc3RSZWN0LCBuZXdIaXRU
ZXN0VGFyZ2V0LCB0cnVlLCBuZXdUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgek9mZnNldCk7CiAgICAg
fQogCiAgICAgLy8gRW5zdXJlIG91ciBsaXN0cyBhbmQgM2Qgc3RhdHVzIGFyZSB1cC10by1kYXRl
LgpAQCAtMzU2OCw3ICszNTY4LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0
TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKICAgICAgICAg
bG9jYWxUcmFuc2Zvcm1TdGF0ZSA9IGNvbnN0X2Nhc3Q8SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRl
Kj4odHJhbnNmb3JtU3RhdGUpOwogICAgIH0gZWxzZSBpZiAodHJhbnNmb3JtU3RhdGUgfHwgbV9o
YXMzRFRyYW5zZm9ybWVkRGVzY2VuZGFudCB8fCBwcmVzZXJ2ZXMzRCgpKSB7CiAgICAgICAgIC8v
IFdlIG5lZWQgdHJhbnNmb3JtIHN0YXRlIGZvciB0aGUgZmlyc3QgdGltZSwgb3IgdG8gb2Zmc2V0
IHRoZSBjb250YWluZXIgc3RhdGUsIHNvIGNyZWF0ZSBpdCBoZXJlLgotICAgICAgICBsb2NhbFRy
YW5zZm9ybVN0YXRlID0gY3JlYXRlTG9jYWxUcmFuc2Zvcm1TdGF0ZShyb290TGF5ZXIsIGNvbnRh
aW5lckxheWVyLCBoaXRUZXN0UmVjdCwgaGl0VGVzdFBvaW50LCB0cmFuc2Zvcm1TdGF0ZSk7Cisg
ICAgICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUgPSBjcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKHJv
b3RMYXllciwgY29udGFpbmVyTGF5ZXIsIGhpdFRlc3RSZWN0LCBoaXRUZXN0VGFyZ2V0LCB0cmFu
c2Zvcm1TdGF0ZSk7CiAgICAgfQogCiAgICAgLy8gQ2hlY2sgZm9yIGhpdCB0ZXN0IG9uIGJhY2tm
YWNlIGlmIGJhY2tmYWNlLXZpc2liaWxpdHkgaXMgJ2hpZGRlbicKQEAgLTM1OTIsNyArMzU5Miw3
IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiBy
b290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAgQ2xpcFJlY3QgYmdSZWN0OwogICAgIENs
aXBSZWN0IGZnUmVjdDsKICAgICBDbGlwUmVjdCBvdXRsaW5lUmVjdDsKLSAgICBjYWxjdWxhdGVS
ZWN0cyhyb290TGF5ZXIsIGhpdFRlc3RQb2ludC5yZWdpb24oKSwgdXNlVGVtcG9yYXJ5Q2xpcFJl
Y3RzID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUm9vdFJlbGF0aXZlQ2xpcFJlY3RzLCBoaXRUZXN0
UmVjdCwgbGF5ZXJCb3VuZHMsIGJnUmVjdCwgZmdSZWN0LCBvdXRsaW5lUmVjdCwgSW5jbHVkZU92
ZXJsYXlTY3JvbGxiYXJTaXplKTsKKyAgICBjYWxjdWxhdGVSZWN0cyhyb290TGF5ZXIsIGhpdFRl
c3RUYXJnZXQucmVnaW9uKCksIHVzZVRlbXBvcmFyeUNsaXBSZWN0cyA/IFRlbXBvcmFyeUNsaXBS
ZWN0cyA6IFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywgaGl0VGVzdFJlY3QsIGxheWVyQm91bmRzLCBi
Z1JlY3QsIGZnUmVjdCwgb3V0bGluZVJlY3QsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7
CiAgICAgCiAgICAgLy8gVGhlIGZvbGxvd2luZyBhcmUgdXNlZCBmb3Iga2VlcGluZyB0cmFjayBv
ZiB0aGUgei1kZXB0aCBvZiB0aGUgaGl0IHBvaW50IG9mIDNkLXRyYW5zZm9ybWVkCiAgICAgLy8g
ZGVzY2VuZGFudHMuCkBAIC0zNjIxLDcgKzM2MjEsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5
ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29u
dAogICAgIFJlbmRlckxheWVyKiBjYW5kaWRhdGVMYXllciA9IDA7CiAKICAgICAvLyBCZWdpbiBi
eSB3YWxraW5nIG91ciBsaXN0IG9mIHBvc2l0aXZlIGxheWVycyBmcm9tIGhpZ2hlc3Qgei1pbmRl
eCBkb3duIHRvIHRoZSBsb3dlc3Qgei1pbmRleC4KLSAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIg
PSBoaXRUZXN0TGlzdChwb3NaT3JkZXJMaXN0KCksIHJvb3RMYXllciwgcmVxdWVzdCwgcmVzdWx0
LCBoaXRUZXN0UmVjdCwgaGl0VGVzdFBvaW50LAorICAgIFJlbmRlckxheWVyKiBoaXRMYXllciA9
IGhpdFRlc3RMaXN0KHBvc1pPcmRlckxpc3QoKSwgcm9vdExheWVyLCByZXF1ZXN0LCByZXN1bHQs
IGhpdFRlc3RSZWN0LCBoaXRUZXN0VGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpPZmZzZXRGb3JEZXNjZW5k
YW50c1B0ciwgek9mZnNldCwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgZGVwdGhT
b3J0RGVzY2VuZGFudHMpOwogICAgIGlmIChoaXRMYXllcikgewogICAgICAgICBpZiAoIWRlcHRo
U29ydERlc2NlbmRhbnRzKQpAQCAtMzYzMCw3ICszNjMwLDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRl
ckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIq
IGNvbnQKICAgICB9CiAKICAgICAvLyBOb3cgY2hlY2sgb3VyIG92ZXJmbG93IG9iamVjdHMuCi0g
ICAgaGl0TGF5ZXIgPSBoaXRUZXN0TGlzdChtX25vcm1hbEZsb3dMaXN0LCByb290TGF5ZXIsIHJl
cXVlc3QsIHJlc3VsdCwgaGl0VGVzdFJlY3QsIGhpdFRlc3RQb2ludCwKKyAgICBoaXRMYXllciA9
IGhpdFRlc3RMaXN0KG1fbm9ybWFsRmxvd0xpc3QsIHJvb3RMYXllciwgcmVxdWVzdCwgcmVzdWx0
LCBoaXRUZXN0UmVjdCwgaGl0VGVzdFRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxvY2FsVHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpPZmZzZXRGb3JEZXNjZW5kYW50c1B0ciwgek9m
ZnNldCwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgZGVwdGhTb3J0RGVzY2VuZGFu
dHMpOwogICAgIGlmIChoaXRMYXllcikgewogICAgICAgICBpZiAoIWRlcHRoU29ydERlc2NlbmRh
bnRzKQpAQCAtMzYzOSwxMiArMzYzOSwxMiBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6Omhp
dFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogICAg
IH0KIAogICAgIC8vIE5leHQgd2Ugd2FudCB0byBzZWUgaWYgdGhlIG1vdXNlIHBvcyBpcyBpbnNp
ZGUgdGhlIGNoaWxkIFJlbmRlck9iamVjdHMgb2YgdGhlIGxheWVyLgotICAgIGlmIChmZ1JlY3Qu
aW50ZXJzZWN0cyhoaXRUZXN0UG9pbnQpICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSkgeworICAg
IGlmIChmZ1JlY3QuaW50ZXJzZWN0cyhoaXRUZXN0VGFyZ2V0KSAmJiBpc1NlbGZQYWludGluZ0xh
eWVyKCkpIHsKICAgICAgICAgLy8gSGl0IHRlc3Qgd2l0aCBhIHRlbXBvcmFyeSBIaXRUZXN0UmVz
dWx0LCBiZWNhdXNlIHdlIG9ubHkgd2FudCB0byBjb21taXQgdG8gJ3Jlc3VsdCcgaWYgd2Uga25v
dyB3ZSdyZSBmcm9udG1vc3QuCi0gICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1
bHQuaGl0VGVzdFBvaW50KCksIHJlc3VsdC5zaGFkb3dDb250ZW50RmlsdGVyUG9saWN5KCkpOwot
ICAgICAgICBpZiAoaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHRlbXBSZXN1bHQsIGxheWVyQm91
bmRzLCBoaXRUZXN0UG9pbnQsIEhpdFRlc3REZXNjZW5kYW50cykgJiYKLSAgICAgICAgICAgIGlz
SGl0Q2FuZGlkYXRlKHRoaXMsIGZhbHNlLCB6T2Zmc2V0Rm9yQ29udGVudHNQdHIsIHVuZmxhdHRl
bmVkVHJhbnNmb3JtU3RhdGUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBpZiAocmVzdWx0LmlzUmVj
dEJhc2VkVGVzdCgpKQorICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LnRh
cmdldCgpLCByZXN1bHQuc2hhZG93Q29udGVudEZpbHRlclBvbGljeSgpKTsKKyAgICAgICAgaWYg
KGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCB0ZW1wUmVzdWx0LCBsYXllckJvdW5kcywgaGl0VGVz
dFRhcmdldCwgSGl0VGVzdERlc2NlbmRhbnRzKQorICAgICAgICAgICAgJiYgaXNIaXRDYW5kaWRh
dGUodGhpcywgZmFsc2UsIHpPZmZzZXRGb3JDb250ZW50c1B0ciwgdW5mbGF0dGVuZWRUcmFuc2Zv
cm1TdGF0ZS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaXNBcmVhQmFzZWRUZXN0
KCkpCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0KTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OwpAQCAtMzY1Miwx
MiArMzY1MiwxMiBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5k
ZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOwogICAgICAgICAgICAgLy8gRm9yZWdyb3VuZCBjYW4gZGVwdGgtc29ydCB3aXRo
IGRlc2NlbmRhbnQgbGF5ZXJzLCBzbyBrZWVwIHRoaXMgYXMgYSBjYW5kaWRhdGUuCiAgICAgICAg
ICAgICBjYW5kaWRhdGVMYXllciA9IHRoaXM7Ci0gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lmlz
UmVjdEJhc2VkVGVzdCgpKQorICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5pc0FyZWFCYXNlZFRl
c3QoKSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGVtcFJlc3VsdCk7CiAgICAgfQogCiAg
ICAgLy8gTm93IGNoZWNrIG91ciBuZWdhdGl2ZSB6LWluZGV4IGNoaWxkcmVuLgotICAgIGhpdExh
eWVyID0gaGl0VGVzdExpc3QobmVnWk9yZGVyTGlzdCgpLCByb290TGF5ZXIsIHJlcXVlc3QsIHJl
c3VsdCwgaGl0VGVzdFJlY3QsIGhpdFRlc3RQb2ludCwKKyAgICBoaXRMYXllciA9IGhpdFRlc3RM
aXN0KG5lZ1pPcmRlckxpc3QoKSwgcm9vdExheWVyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RS
ZWN0LCBoaXRUZXN0VGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpPZmZzZXRGb3JEZXNjZW5kYW50c1B0ciwg
ek9mZnNldCwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgZGVwdGhTb3J0RGVzY2Vu
ZGFudHMpOwogICAgIGlmIChoaXRMYXllcikgewogICAgICAgICBpZiAoIWRlcHRoU29ydERlc2Nl
bmRhbnRzKQpAQCAtMzY2OSwzMCArMzY2OSwzMSBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6
OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAog
ICAgIGlmIChjYW5kaWRhdGVMYXllcikKICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZUxheWVyOwog
Ci0gICAgaWYgKGJnUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RQb2ludCkgJiYgaXNTZWxmUGFpbnRp
bmdMYXllcigpKSB7Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQuaGl0
VGVzdFBvaW50KCksIHJlc3VsdC5zaGFkb3dDb250ZW50RmlsdGVyUG9saWN5KCkpOwotICAgICAg
ICBpZiAoaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHRlbXBSZXN1bHQsIGxheWVyQm91bmRzLCBo
aXRUZXN0UG9pbnQsIEhpdFRlc3RTZWxmKSAmJgotICAgICAgICAgICAgaXNIaXRDYW5kaWRhdGUo
dGhpcywgZmFsc2UsIHpPZmZzZXRGb3JDb250ZW50c1B0ciwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1T
dGF0ZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIGlmIChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkp
CisgICAgaWYgKGJnUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RUYXJnZXQpICYmIGlzU2VsZlBhaW50
aW5nTGF5ZXIoKSkgeworICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LnRh
cmdldCgpLCByZXN1bHQuc2hhZG93Q29udGVudEZpbHRlclBvbGljeSgpKTsKKyAgICAgICAgaWYg
KGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCB0ZW1wUmVzdWx0LCBsYXllckJvdW5kcywgaGl0VGVz
dFRhcmdldCwgSGl0VGVzdFNlbGYpCisgICAgICAgICAgICAmJiBpc0hpdENhbmRpZGF0ZSh0aGlz
LCBmYWxzZSwgek9mZnNldEZvckNvbnRlbnRzUHRyLCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRl
LmdldCgpKSkgeworICAgICAgICAgICAgaWYgKHJlc3VsdC5pc0FyZWFCYXNlZFRlc3QoKSkKICAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOwogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQ7CiAgICAgICAgICAgICByZXR1
cm4gdGhpczsKLSAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5pc0FyZWFCYXNlZFRlc3QoKSkKICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQodGVtcFJlc3VsdCk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CiB9
CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXll
ckJvdW5kcywgY29uc3QgSGl0VGVzdFBvaW50JiBoaXRUZXN0UG9pbnQsIEhpdFRlc3RGaWx0ZXIg
aGl0VGVzdEZpbHRlcikgY29uc3QKK2Jvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50cyhj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBMYXlvdXRSZWN0JiBsYXllckJvdW5kcywgY29uc3QgSGl0VGVzdFRhcmdldCYgaGl0VGVzdFRh
cmdldCwgSGl0VGVzdEZpbHRlciBoaXRUZXN0RmlsdGVyKSBjb25zdAogewotICAgIGlmICghcmVu
ZGVyZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RQb2ludCwKKyAgICBpZiAo
IXJlbmRlcmVyKCktPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0VGFyZ2V0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRvTGF5b3V0UG9pbnQobGF5ZXJCb3VuZHMubG9jYXRp
b24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhpdFRlc3RGaWx0ZXIpKSB7CiAgICAgICAgIC8vIEl0J3Mgd3JvbmcgdG8gc2V0IGlubmVyTm9k
ZSwgYnV0IHRoZW4gY2xhaW0gdGhhdCB5b3UgZGlkbid0IGhpdCBhbnl0aGluZywgdW5sZXNzIGl0
IGlzCiAgICAgICAgIC8vIGEgcmVjdC1iYXNlZCB0ZXN0LgotICAgICAgICBBU1NFUlQoIXJlc3Vs
dC5pbm5lck5vZGUoKSB8fCAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpICYmIHJlc3VsdC5yZWN0
QmFzZWRUZXN0UmVzdWx0KCkuc2l6ZSgpKSk7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmlubmVy
Tm9kZSgpIHx8IChyZXN1bHQuaXNBcmVhQmFzZWRUZXN0KCkgJiYgcmVzdWx0LnJlY3RCYXNlZFRl
c3RSZXN1bHQoKS5zaXplKCkpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAt
MzcxMyw3ICszNzE0LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzKGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JgogCiBSZW5kZXJMYXllciog
UmVuZGVyTGF5ZXI6OmhpdFRlc3RMaXN0KFZlY3RvcjxSZW5kZXJMYXllcio+KiBsaXN0LCBSZW5k
ZXJMYXllciogcm9vdExheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBo
aXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdFBvaW50JiBoaXRUZXN0UG9pbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0
LCBjb25zdCBIaXRUZXN0VGFyZ2V0JiBoaXRUZXN0VGFyZ2V0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHRyYW5z
Zm9ybVN0YXRlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl
KiB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMsIGRvdWJsZSogek9mZnNldCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB1
bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLApAQCAtMzcyNiwyMCArMzcyNywyMCBAQCBSZW5kZXJM
YXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMaXN0KFZlY3RvcjxSZW5kZXJMYXllcio+KiBsaXN0
LCBSZW5kZXJMYXllciogcgogICAgIGZvciAoaW50IGkgPSBsaXN0LT5zaXplKCkgLSAxOyBpID49
IDA7IC0taSkgewogICAgICAgICBSZW5kZXJMYXllciogY2hpbGRMYXllciA9IGxpc3QtPmF0KGkp
OwogICAgICAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIgPSAwOwotICAgICAgICBIaXRUZXN0UmVz
dWx0IHRlbXBSZXN1bHQocmVzdWx0LmhpdFRlc3RQb2ludCgpLCByZXN1bHQuc2hhZG93Q29udGVu
dEZpbHRlclBvbGljeSgpKTsKKyAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3Vs
dC50YXJnZXQoKSwgcmVzdWx0LnNoYWRvd0NvbnRlbnRGaWx0ZXJQb2xpY3koKSk7CiAgICAgICAg
IGlmIChjaGlsZExheWVyLT5pc1BhZ2luYXRlZCgpKQotICAgICAgICAgICAgaGl0TGF5ZXIgPSBo
aXRUZXN0UGFnaW5hdGVkQ2hpbGRMYXllcihjaGlsZExheWVyLCByb290TGF5ZXIsIHJlcXVlc3Qs
IHRlbXBSZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQsIHRyYW5zZm9ybVN0YXRlLCB6
T2Zmc2V0Rm9yRGVzY2VuZGFudHMpOworICAgICAgICAgICAgaGl0TGF5ZXIgPSBoaXRUZXN0UGFn
aW5hdGVkQ2hpbGRMYXllcihjaGlsZExheWVyLCByb290TGF5ZXIsIHJlcXVlc3QsIHRlbXBSZXN1
bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0VGFyZ2V0LCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldEZv
ckRlc2NlbmRhbnRzKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgaGl0TGF5ZXIgPSBjaGls
ZExheWVyLT5oaXRUZXN0TGF5ZXIocm9vdExheWVyLCB0aGlzLCByZXF1ZXN0LCB0ZW1wUmVzdWx0
LCBoaXRUZXN0UmVjdCwgaGl0VGVzdFBvaW50LCBmYWxzZSwgdHJhbnNmb3JtU3RhdGUsIHpPZmZz
ZXRGb3JEZXNjZW5kYW50cyk7CisgICAgICAgICAgICBoaXRMYXllciA9IGNoaWxkTGF5ZXItPmhp
dFRlc3RMYXllcihyb290TGF5ZXIsIHRoaXMsIHJlcXVlc3QsIHRlbXBSZXN1bHQsIGhpdFRlc3RS
ZWN0LCBoaXRUZXN0VGFyZ2V0LCBmYWxzZSwgdHJhbnNmb3JtU3RhdGUsIHpPZmZzZXRGb3JEZXNj
ZW5kYW50cyk7CiAKICAgICAgICAgLy8gSWYgaXQgYSByZWN0LWJhc2VkIHRlc3QsIHdlIGNhbiBz
YWZlbHkgYXBwZW5kIHRoZSB0ZW1wb3JhcnkgcmVzdWx0IHNpbmNlIGl0IG1pZ2h0IGhhZCBoaXQK
ICAgICAgICAgLy8gbm9kZXMgYnV0IG5vdCBuZWNlc3NlcmlseSBoYWQgaGl0TGF5ZXIgc2V0Lgot
ICAgICAgICBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAgICBpZiAocmVzdWx0
LmlzQXJlYUJhc2VkVGVzdCgpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0
KTsKIAogICAgICAgICBpZiAoaXNIaXRDYW5kaWRhdGUoaGl0TGF5ZXIsIGRlcHRoU29ydERlc2Nl
bmRhbnRzLCB6T2Zmc2V0LCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlKSkgewogICAgICAgICAg
ICAgcmVzdWx0TGF5ZXIgPSBoaXRMYXllcjsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LmlzUmVj
dEJhc2VkVGVzdCgpKQorICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNBcmVhQmFzZWRUZXN0KCkp
CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKICAgICAgICAgICAgIGlmICgh
ZGVwdGhTb3J0RGVzY2VuZGFudHMpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zNzUwLDcg
KzM3NTEsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMaXN0KFZlY3RvcjxS
ZW5kZXJMYXllcio+KiBsaXN0LCBSZW5kZXJMYXllciogcgogfQogCiBSZW5kZXJMYXllciogUmVu
ZGVyTGF5ZXI6OmhpdFRlc3RQYWdpbmF0ZWRDaGlsZExheWVyKFJlbmRlckxheWVyKiBjaGlsZExh
eWVyLCBSZW5kZXJMYXllciogcm9vdExheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29u
c3QgSGl0VGVzdFBvaW50JiBoaXRUZXN0UG9pbnQsIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1T
dGF0ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9mZnNldCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0
VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIGhpdFRlc3RUYXJnZXQsIGNvbnN0IEhpdFRl
c3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9mZnNldCkKIHsK
ICAgICBWZWN0b3I8UmVuZGVyTGF5ZXIqPiBjb2x1bW5MYXllcnM7CiAgICAgUmVuZGVyTGF5ZXIq
IGFuY2VzdG9yTGF5ZXIgPSBpc05vcm1hbEZsb3dPbmx5KCkgPyBwYXJlbnQoKSA6IHN0YWNraW5n
Q29udGV4dCgpOwpAQCAtMzc2MiwxMiArMzc2MywxMiBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5
ZXI6OmhpdFRlc3RQYWdpbmF0ZWRDaGlsZExheWVyKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBS
ZQogICAgIH0KIAogICAgIEFTU0VSVChjb2x1bW5MYXllcnMuc2l6ZSgpKTsKLSAgICByZXR1cm4g
aGl0VGVzdENoaWxkTGF5ZXJDb2x1bW5zKGNoaWxkTGF5ZXIsIHJvb3RMYXllciwgcmVxdWVzdCwg
cmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdFBvaW50LCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNl
dCwKKyAgICByZXR1cm4gaGl0VGVzdENoaWxkTGF5ZXJDb2x1bW5zKGNoaWxkTGF5ZXIsIHJvb3RM
YXllciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdFRhcmdldCwgdHJhbnNm
b3JtU3RhdGUsIHpPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b2x1bW5MYXllcnMsIGNvbHVtbkxheWVycy5zaXplKCkgLSAxKTsKIH0KIAogUmVuZGVyTGF5ZXIq
IFJlbmRlckxheWVyOjpoaXRUZXN0Q2hpbGRMYXllckNvbHVtbnMoUmVuZGVyTGF5ZXIqIGNoaWxk
TGF5ZXIsIFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29u
c3QgSGl0VGVzdFBvaW50JiBoaXRUZXN0UG9pbnQsIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1T
dGF0ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9mZnNldCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRl
c3RSZWN0LCBjb25zdCBIaXRUZXN0VGFyZ2V0JiBoaXRUZXN0VGFyZ2V0LCBjb25zdCBIaXRUZXN0
aW5nVHJhbnNmb3JtU3RhdGUqIHRyYW5zZm9ybVN0YXRlLCBkb3VibGUqIHpPZmZzZXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0
b3I8UmVuZGVyTGF5ZXIqPiYgY29sdW1uTGF5ZXJzLCBzaXplX3QgY29sdW1uSW5kZXgpCiB7CiAg
ICAgUmVuZGVyQmxvY2sqIGNvbHVtbkJsb2NrID0gdG9SZW5kZXJCbG9jayhjb2x1bW5MYXllcnNb
Y29sdW1uSW5kZXhdLT5yZW5kZXJlcigpKTsKQEAgLTM4MjQsNyArMzgyNSw3IEBAIFJlbmRlckxh
eWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxkTGF5ZXJDb2x1bW5zKFJlbmRlckxheWVyKiBj
aGlsZExheWVyLCBSZW5kCiAgICAgICAgIExheW91dFJlY3QgbG9jYWxDbGlwUmVjdChoaXRUZXN0
UmVjdCk7CiAgICAgICAgIGxvY2FsQ2xpcFJlY3QuaW50ZXJzZWN0KGNvbFJlY3QpOwogCi0gICAg
ICAgIGlmICghbG9jYWxDbGlwUmVjdC5pc0VtcHR5KCkgJiYgaGl0VGVzdFBvaW50LmludGVyc2Vj
dHMobG9jYWxDbGlwUmVjdCkpIHsKKyAgICAgICAgaWYgKCFsb2NhbENsaXBSZWN0LmlzRW1wdHko
KSAmJiBoaXRUZXN0VGFyZ2V0LmludGVyc2VjdHMobG9jYWxDbGlwUmVjdCkpIHsKICAgICAgICAg
ICAgIFJlbmRlckxheWVyKiBoaXRMYXllciA9IDA7CiAgICAgICAgICAgICBpZiAoIWNvbHVtbklu
ZGV4KSB7CiAgICAgICAgICAgICAgICAgLy8gQXBwbHkgYSB0cmFuc2xhdGlvbiB0cmFuc2Zvcm0g
dG8gY2hhbmdlIHdoZXJlIHRoZSBsYXllciBwYWludHMuCkBAIC0zODM2LDcgKzM4MzcsNyBAQCBS
ZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RDaGlsZExheWVyQ29sdW1ucyhSZW5kZXJM
YXllciogY2hpbGRMYXllciwgUmVuZAogICAgICAgICAgICAgICAgIG5ld1RyYW5zZm9ybS50cmFu
c2xhdGVSaWdodChvZmZzZXQud2lkdGgoKSwgb2Zmc2V0LmhlaWdodCgpKTsKIAogICAgICAgICAg
ICAgICAgIGNoaWxkTGF5ZXItPm1fdHJhbnNmb3JtID0gYWRvcHRQdHIobmV3IFRyYW5zZm9ybWF0
aW9uTWF0cml4KG5ld1RyYW5zZm9ybSkpOwotICAgICAgICAgICAgICAgIGhpdExheWVyID0gY2hp
bGRMYXllci0+aGl0VGVzdExheWVyKHJvb3RMYXllciwgY29sdW1uTGF5ZXJzWzBdLCByZXF1ZXN0
LCByZXN1bHQsIGxvY2FsQ2xpcFJlY3QsIGhpdFRlc3RQb2ludCwgZmFsc2UsIHRyYW5zZm9ybVN0
YXRlLCB6T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBoaXRMYXllciA9IGNoaWxkTGF5ZXItPmhp
dFRlc3RMYXllcihyb290TGF5ZXIsIGNvbHVtbkxheWVyc1swXSwgcmVxdWVzdCwgcmVzdWx0LCBs
b2NhbENsaXBSZWN0LCBoaXRUZXN0VGFyZ2V0LCBmYWxzZSwgdHJhbnNmb3JtU3RhdGUsIHpPZmZz
ZXQpOwogICAgICAgICAgICAgICAgIGlmIChvbGRIYXNUcmFuc2Zvcm0pCiAgICAgICAgICAgICAg
ICAgICAgIGNoaWxkTGF5ZXItPm1fdHJhbnNmb3JtID0gYWRvcHRQdHIobmV3IFRyYW5zZm9ybWF0
aW9uTWF0cml4KG9sZFRyYW5zZm9ybSkpOwogICAgICAgICAgICAgICAgIGVsc2UKQEAgLTM4NDUs
MTkgKzM4NDYsMTkgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0Q2hpbGRMYXll
ckNvbHVtbnMoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIFJlbmQKICAgICAgICAgICAgICAgICAv
LyBBZGp1c3QgdGhlIHRyYW5zZm9ybSBzdWNoIHRoYXQgdGhlIHJlbmRlcmVyJ3MgdXBwZXIgbGVm
dCBjb3JuZXIgd2lsbCBiZSBhdCAoMCwwKSBpbiB1c2VyIHNwYWNlLgogICAgICAgICAgICAgICAg
IC8vIFRoaXMgaW52b2x2ZXMgc3VidHJhY3Rpbmcgb3V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgbGF5
ZXIgaW4gb3VyIGN1cnJlbnQgY29vcmRpbmF0ZSBzcGFjZS4KICAgICAgICAgICAgICAgICBSZW5k
ZXJMYXllciogbmV4dExheWVyID0gY29sdW1uTGF5ZXJzW2NvbHVtbkluZGV4IC0gMV07Ci0gICAg
ICAgICAgICAgICAgUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gbmV3VHJhbnNmb3Jt
U3RhdGUgPSBuZXh0TGF5ZXItPmNyZWF0ZUxvY2FsVHJhbnNmb3JtU3RhdGUocm9vdExheWVyLCBu
ZXh0TGF5ZXIsIGxvY2FsQ2xpcFJlY3QsIGhpdFRlc3RQb2ludCwgdHJhbnNmb3JtU3RhdGUpOwor
ICAgICAgICAgICAgICAgIFJlZlB0cjxIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU+IG5ld1RyYW5z
Zm9ybVN0YXRlID0gbmV4dExheWVyLT5jcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKHJvb3RMYXll
ciwgbmV4dExheWVyLCBsb2NhbENsaXBSZWN0LCBoaXRUZXN0VGFyZ2V0LCB0cmFuc2Zvcm1TdGF0
ZSk7CiAgICAgICAgICAgICAgICAgbmV3VHJhbnNmb3JtU3RhdGUtPnRyYW5zbGF0ZShvZmZzZXQu
d2lkdGgoKSwgb2Zmc2V0LmhlaWdodCgpLCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6OkFjY3Vt
dWxhdGVUcmFuc2Zvcm0pOwogICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9
IG5ld1RyYW5zZm9ybVN0YXRlLT5tYXBwZWRQb2ludCgpOwogICAgICAgICAgICAgICAgIEZsb2F0
UXVhZCBsb2NhbFBvaW50UXVhZCA9IG5ld1RyYW5zZm9ybVN0YXRlLT5tYXBwZWRRdWFkKCk7CiAg
ICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBsb2NhbEhpdFRlc3RSZWN0ID0gbmV3VHJhbnNmb3Jt
U3RhdGUtPm1hcHBlZEFyZWEoKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwotICAgICAgICAgICAg
ICAgIEhpdFRlc3RQb2ludCBuZXdIaXRUZXN0UG9pbnQ7Ci0gICAgICAgICAgICAgICAgaWYgKGhp
dFRlc3RQb2ludC5pc1JlY3RCYXNlZFRlc3QoKSkKLSAgICAgICAgICAgICAgICAgICAgbmV3SGl0
VGVzdFBvaW50ID0gSGl0VGVzdFBvaW50KGxvY2FsUG9pbnQsIGxvY2FsUG9pbnRRdWFkKTsKKyAg
ICAgICAgICAgICAgICBIaXRUZXN0VGFyZ2V0IG5ld0hpdFRlc3RUYXJnZXQ7CisgICAgICAgICAg
ICAgICAgaWYgKGhpdFRlc3RUYXJnZXQuaXNBcmVhQmFzZWRUZXN0KCkpCisgICAgICAgICAgICAg
ICAgICAgIG5ld0hpdFRlc3RUYXJnZXQgPSBIaXRUZXN0VGFyZ2V0KGxvY2FsUG9pbnQsIGxvY2Fs
UG9pbnRRdWFkKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG5l
d0hpdFRlc3RQb2ludCA9IEhpdFRlc3RQb2ludChsb2NhbFBvaW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgbmV3SGl0VGVzdFRhcmdldCA9IEhpdFRlc3RUYXJnZXQobG9jYWxQb2ludCk7CiAgICAg
ICAgICAgICAgICAgbmV3VHJhbnNmb3JtU3RhdGUtPmZsYXR0ZW4oKTsKIAotICAgICAgICAgICAg
ICAgIGhpdExheWVyID0gaGl0VGVzdENoaWxkTGF5ZXJDb2x1bW5zKGNoaWxkTGF5ZXIsIGNvbHVt
bkxheWVyc1tjb2x1bW5JbmRleCAtIDFdLCByZXF1ZXN0LCByZXN1bHQsIGxvY2FsSGl0VGVzdFJl
Y3QsIG5ld0hpdFRlc3RQb2ludCwKKyAgICAgICAgICAgICAgICBoaXRMYXllciA9IGhpdFRlc3RD
aGlsZExheWVyQ29sdW1ucyhjaGlsZExheWVyLCBjb2x1bW5MYXllcnNbY29sdW1uSW5kZXggLSAx
XSwgcmVxdWVzdCwgcmVzdWx0LCBsb2NhbEhpdFRlc3RSZWN0LCBuZXdIaXRUZXN0VGFyZ2V0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Ry
YW5zZm9ybVN0YXRlLmdldCgpLCB6T2Zmc2V0LCBjb2x1bW5MYXllcnMsIGNvbHVtbkluZGV4IC0g
MSk7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgK
aW5kZXggYmU5NDU3MDdhODRjYWZlMTg2Zjg3NTA3ZjcyOGU4NzhiZjAxMjg0MC4uNDA1ODA5M2Y2
N2U5MWZhMTdjZTlhOGVlZDM3ZTQzOTM1OGRmN2Q5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmgKQEAgLTExNSw3ICsxMTUsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3JlY3QuaXNFbXB0eSgpOyB9CiAgICAgYm9vbCBpbnRl
cnNlY3RzKGNvbnN0IExheW91dFJlY3QmIHJlY3QpIHsgcmV0dXJuIG1fcmVjdC5pbnRlcnNlY3Rz
KHJlY3QpOyB9Ci0gICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IEhpdFRlc3RQb2ludCYpOworICAg
IGJvb2wgaW50ZXJzZWN0cyhjb25zdCBIaXRUZXN0VGFyZ2V0Jik7CiAKIHByaXZhdGU6CiAgICAg
TGF5b3V0UmVjdCBtX3JlY3Q7CkBAIC01MTIsNyArNTEyLDcgQEAgcHVibGljOgogICAgIHZvaWQg
cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgUGFp
bnRCZWhhdmlvciA9IFBhaW50QmVoYXZpb3JOb3JtYWwsIFJlbmRlck9iamVjdCogcGFpbnRpbmdS
b290ID0gMCwKICAgICAgICAgUmVuZGVyUmVnaW9uKiA9IDAsIFBhaW50TGF5ZXJGbGFncyA9IDAp
OwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
KTsKLSAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRUZXN0
UG9pbnQmLCBIaXRUZXN0UmVzdWx0Jik7CisgICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgY29uc3QgSGl0VGVzdFRhcmdldCYsIEhpdFRlc3RSZXN1bHQmKTsKICAgICB2b2lk
IHBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UmVj
dCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3Qp
OwogCiAgICAgLy8gVGhpcyBtZXRob2QgZmlndXJlcyBvdXQgb3VyIGxheWVyQm91bmRzIGluIGNv
b3JkaW5hdGVzIHJlbGF0aXZlIHRvCkBAIC03MzIsMjUgKzczMiwyNSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFpbnRMYXllckZsYWdzLCBjb25zdCBW
ZWN0b3I8UmVuZGVyTGF5ZXIqPiYgY29sdW1uTGF5ZXJzLCBzaXplX3QgY29sdW1uSW5kZXgpOwog
CiAgICAgUmVuZGVyTGF5ZXIqIGhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBS
ZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdFBvaW50JiwgYm9vbCBh
cHBsaWVkVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5
b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RUYXJnZXQmLCBib29sIGFwcGxpZWRU
cmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5n
VHJhbnNmb3JtU3RhdGUqIHRyYW5zZm9ybVN0YXRlID0gMCwgZG91YmxlKiB6T2Zmc2V0ID0gMCk7
CiAgICAgUmVuZGVyTGF5ZXIqIGhpdFRlc3RMaXN0KFZlY3RvcjxSZW5kZXJMYXllcio+KiwgUmVu
ZGVyTGF5ZXIqIHJvb3RMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5
b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RQb2ludCYsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRU
ZXN0VGFyZ2V0JiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGlu
Z1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0Rm9yRGVzY2Vu
ZGFudHMsIGRvdWJsZSogek9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLCBi
b29sIGRlcHRoU29ydERlc2NlbmRhbnRzKTsKICAgICBSZW5kZXJMYXllciogaGl0VGVzdFBhZ2lu
YXRlZENoaWxkTGF5ZXIoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIFJlbmRlckxheWVyKiByb290
TGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExh
eW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0UG9pbnQmLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0
UmVjdCwgY29uc3QgSGl0VGVzdFRhcmdldCYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3Jt
U3RhdGUsIGRvdWJsZSogek9mZnNldCk7CiAgICAgUmVuZGVyTGF5ZXIqIGhpdFRlc3RDaGlsZExh
eWVyQ29sdW1ucyhSZW5kZXJMYXllciogY2hpbGRMYXllciwgUmVuZGVyTGF5ZXIqIHJvb3RMYXll
ciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJl
Y3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0UG9pbnQmLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNv
bnN0IEhpdFRlc3RUYXJnZXQmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91
YmxlKiB6T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVmVjdG9yPFJlbmRlckxheWVyKj4mIGNvbHVtbkxheWVycywgc2l6ZV90IGNvbHVtbklu
ZGV4KTsKIAogICAgIFBhc3NSZWZQdHI8SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlPiBjcmVhdGVM
b2NhbFRyYW5zZm9ybVN0YXRlKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBj
b250YWluZXJMYXllciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRS
ZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdFBvaW50JiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdFRh
cmdldCYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5z
Zm9ybVN0YXRlKiBjb250YWluZXJUcmFuc2Zvcm1TdGF0ZSkgY29uc3Q7CiAgICAgCi0gICAgYm9v
bCBoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRlc3RQb2ludCYsIEhpdFRl
c3RGaWx0ZXIpIGNvbnN0OworICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBj
b25zdCBIaXRUZXN0VGFyZ2V0JiwgSGl0VGVzdEZpbHRlcikgY29uc3Q7CiAKICAgICB2b2lkIGNv
bXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CiAgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3co
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5l
Qm94TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3Qu
Y3BwCmluZGV4IGRiYjU4NjFjOGQzZGYxYzU4ODllNDY2YmViNjhhMGExZjE5YjMxNmQuLjU3MDdi
MGQ5NWNmMzkyMzRjZTE2YjlkMGVlMDdmMjhmZDM5NDA0M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcApAQCAtMjczLDcgKzI3Myw3IEBAIHZv
aWQgUmVuZGVyTGluZUJveExpc3Q6OnBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJl
ciwgUGFpbnRJbmZvJiBwYWludEluCiAgICAgfQogfQogCi1ib29sIFJlbmRlckxpbmVCb3hMaXN0
OjpoaXRUZXN0KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQs
IEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikgY29uc3QKK2Jvb2wgUmVuZGVyTGluZUJveExp
c3Q6OmhpdFRlc3QoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0VGFy
Z2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pIGNvbnN0CiB7CiAgICAgaWYgKGhpdFRl
c3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTI4NCwxMCArMjg0LDEwIEBAIGJvb2wgUmVuZGVyTGluZUJveExpc3Q6OmhpdFRlc3QoUmVuZGVy
Qm94TW9kZWxPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBIaXRUZXN0UmVxCiAgICAgaWYgKCFmaXJz
dExpbmVCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTGF5b3V0UG9pbnQgcG9p
bnQgPSBwb2ludEluQ29udGFpbmVyLnBvaW50KCk7CisgICAgTGF5b3V0UG9pbnQgcG9pbnQgPSB0
YXJnZXRJbkNvbnRhaW5lci5wb2ludCgpOwogICAgIExheW91dFJlY3QgcmVjdCA9IGZpcnN0TGlu
ZUJveCgpLT5pc0hvcml6b250YWwoKSA/Ci0gICAgICAgIEludFJlY3QocG9pbnQueCgpLCBwb2lu
dC55KCkgLSBwb2ludEluQ29udGFpbmVyLnRvcFBhZGRpbmcoKSwgMSwgcG9pbnRJbkNvbnRhaW5l
ci50b3BQYWRkaW5nKCkgKyBwb2ludEluQ29udGFpbmVyLmJvdHRvbVBhZGRpbmcoKSArIDEpIDoK
LSAgICAgICAgSW50UmVjdChwb2ludC54KCkgLSBwb2ludEluQ29udGFpbmVyLmxlZnRQYWRkaW5n
KCksIHBvaW50LnkoKSwgcG9pbnRJbkNvbnRhaW5lci5yaWdodFBhZGRpbmcoKSArIHBvaW50SW5D
b250YWluZXIubGVmdFBhZGRpbmcoKSArIDEsIDEpOworICAgICAgICBJbnRSZWN0KHBvaW50Lngo
KSwgcG9pbnQueSgpIC0gdGFyZ2V0SW5Db250YWluZXIudG9wUGFkZGluZygpLCAxLCB0YXJnZXRJ
bkNvbnRhaW5lci50b3BQYWRkaW5nKCkgKyB0YXJnZXRJbkNvbnRhaW5lci5ib3R0b21QYWRkaW5n
KCkgKyAxKSA6CisgICAgICAgIEludFJlY3QocG9pbnQueCgpIC0gdGFyZ2V0SW5Db250YWluZXIu
bGVmdFBhZGRpbmcoKSwgcG9pbnQueSgpLCB0YXJnZXRJbkNvbnRhaW5lci5yaWdodFBhZGRpbmco
KSArIHRhcmdldEluQ29udGFpbmVyLmxlZnRQYWRkaW5nKCkgKyAxLCAxKTsKIAogICAgIGlmICgh
YW55TGluZUludGVyc2VjdHNSZWN0KHJlbmRlcmVyLCByZWN0LCBhY2N1bXVsYXRlZE9mZnNldCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI5OCw5ICsyOTgsOSBAQCBib29sIFJlbmRlckxp
bmVCb3hMaXN0OjpoaXRUZXN0KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciwgY29uc3Qg
SGl0VGVzdFJlcQogICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IGxhc3RMaW5lQm94KCk7
IGN1cnI7IGN1cnIgPSBjdXJyLT5wcmV2TGluZUJveCgpKSB7CiAgICAgICAgIFJvb3RJbmxpbmVC
b3gqIHJvb3QgPSBjdXJyLT5yb290KCk7CiAgICAgICAgIGlmIChyYW5nZUludGVyc2VjdHNSZWN0
KHJlbmRlcmVyLCBjdXJyLT5sb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3cocm9vdC0+bGluZVRvcCgp
KSwgY3Vyci0+bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KHJvb3QtPmxpbmVCb3R0b20oKSks
IHJlY3QsIGFjY3VtdWxhdGVkT2Zmc2V0KSkgewotICAgICAgICAgICAgYm9vbCBpbnNpZGUgPSBj
dXJyLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3Vt
dWxhdGVkT2Zmc2V0LCByb290LT5saW5lVG9wKCksIHJvb3QtPmxpbmVCb3R0b20oKSk7CisgICAg
ICAgICAgICBib29sIGluc2lkZSA9IGN1cnItPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwg
dGFyZ2V0SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCByb290LT5saW5lVG9wKCksIHJv
b3QtPmxpbmVCb3R0b20oKSk7CiAgICAgICAgICAgICBpZiAoaW5zaWRlKSB7Ci0gICAgICAgICAg
ICAgICAgcmVuZGVyZXItPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFp
bmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKKyAgICAgICAg
ICAgICAgICByZW5kZXJlci0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRhcmdldEluQ29u
dGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuaAppbmRleCAyYzIwMzgyOTU5
YTk4NGEwYzdkNGFjOGIyMWRmYzJhNTAzZDdjMDk3Li4xNDcyOTlhZjNjZWU5YTFiMTQ4YWUxYTMw
MzdiOTQ2MjhkZDRlYzM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGluZUJveExpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlu
ZUJveExpc3QuaApAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXJ0eUxpbmVz
RnJvbUNoYW5nZWRDaGlsZChSZW5kZXJPYmplY3QqIHBhcmVudCwgUmVuZGVyT2JqZWN0KiBjaGls
ZCk7CiAKICAgICB2b2lkIHBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiwgUGFpbnRJbmZvJiwg
Y29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKLSAgICBib29sIGhpdFRlc3QoUmVuZGVyQm94TW9k
ZWxPYmplY3QqLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBI
aXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgY29uc3Q7CisgICAgYm9vbCBoaXRUZXN0KFJlbmRl
ckJveE1vZGVsT2JqZWN0KiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgY29uc3Q7CiAKIHByaXZhdGU6CiAg
ICAgYm9vbCBhbnlMaW5lSW50ZXJzZWN0c1JlY3QoUmVuZGVyQm94TW9kZWxPYmplY3QqLCBjb25z
dCBMYXlvdXRSZWN0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBib29sIHVzZVByaW50UmVjdCA9IGZh
bHNlLCBMYXlvdXRVbml0IG91dGxpbmVTaXplID0gMCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKaW5kZXggNDBiNWY1OGZkNjQyYjU0MjZjODYzOGFh
ZmFmZDE4ZmQ1MDdmMjQxYi4uODMzYWM3NDBkZWE2YmM1YjcwNjJlZjYxOGFkMWVhN2RmZjBjNjlj
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcApAQCAtNDQ3
LDcgKzQ0Nyw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmCiAgICAgfQogfQogCi1ib29sIFJl
bmRlckxpc3RCb3g6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQpCitib29sIFJlbmRlckxpc3RCb3g6OmlzUG9pbnRJbk92ZXJm
bG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiB0YXJn
ZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KQogewog
ICAgIGlmICghbV92QmFyIHx8ICFtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5n
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ1Nyw3ICs0NTcsNyBAQCBib29sIFJlbmRl
ckxpc3RCb3g6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGNvbnN0IExheW91dAogICAgICAgICAgICAgICAgICAgICAgICAgbV92QmFyLT53aWR0aCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJv
dHRvbSgpKTsKIAotICAgIGlmICh2ZXJ0UmVjdC5jb250YWlucyhwb2ludEluQ29udGFpbmVyKSkg
eworICAgIGlmICh2ZXJ0UmVjdC5jb250YWlucyh0YXJnZXRJbkNvbnRhaW5lcikpIHsKICAgICAg
ICAgcmVzdWx0LnNldFNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CkBAIC02NzcsMjEgKzY3NywyMSBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnNldFNj
cm9sbFRvcChpbnQgbmV3VG9wKQogICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihW
ZXJ0aWNhbFNjcm9sbGJhciwgaW5kZXgpOwogfQogCi1ib29sIFJlbmRlckxpc3RCb3g6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29s
IFJlbmRlckxpc3RCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29u
dGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rp
b24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICBpZiAoIVJlbmRlckJsb2NrOjpub2RlQXRQb2ludChy
ZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRU
ZXN0QWN0aW9uKSkKKyAgICBpZiAoIVJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCBy
ZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlv
bikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQq
PiYgbGlzdEl0ZW1zID0gdG9IVE1MU2VsZWN0RWxlbWVudChub2RlKCkpLT5saXN0SXRlbXMoKTsK
ICAgICBpbnQgc2l6ZSA9IG51bUl0ZW1zKCk7CiAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2Nh
dGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKIAogICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChpdGVtQm91bmRpbmdCb3hSZWN0KGFk
anVzdGVkTG9jYXRpb24sIGkpLmNvbnRhaW5zKHBvaW50SW5Db250YWluZXIucG9pbnQoKSkpIHsK
KyAgICAgICAgaWYgKGl0ZW1Cb3VuZGluZ0JveFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgaSkuY29u
dGFpbnModGFyZ2V0SW5Db250YWluZXIucG9pbnQoKSkpIHsKICAgICAgICAgICAgIGlmIChFbGVt
ZW50KiBub2RlID0gbGlzdEl0ZW1zW2ldKSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0LnNldElu
bmVyTm9kZShub2RlKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pbm5lck5vblNoYXJl
ZE5vZGUoKSkKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldElubmVyTm9uU2hhcmVkTm9k
ZShub2RlKTsKLSAgICAgICAgICAgICAgICByZXN1bHQuc2V0TG9jYWxQb2ludChwb2ludEluQ29u
dGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOworICAgICAg
ICAgICAgICAgIHJlc3VsdC5zZXRMb2NhbFBvaW50KHRhcmdldEluQ29udGFpbmVyLnBvaW50KCkg
LSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guaAppbmRleCAxMGIxOTQ1YzIyODc3MTdiZTg3NWExZjIwNjk1YmRlYTUyY2Q1MTI4
Li43OTUzNjE2MTJhOTZiNDllYWZjYzdlMTY0ODg2N2JhOTc4ZDQ0NzEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9p
bnQmKTsKICAgICB2aXJ0dWFsIExheW91dFJlY3QgY29udHJvbENsaXBSZWN0KGNvbnN0IExheW91
dFBvaW50JikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNQb2ludEluT3ZlcmZsb3dDb250
cm9sKEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwg
Y29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNQb2ludEluT3ZlcmZsb3dDb250cm9sKEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2lu
dCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKICAg
ICB2aXJ0dWFsIGJvb2wgbG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEsIE5vZGUqKiBzdG9wTm9kZSA9IDAp
OwpAQCAtOTQsNyArOTQsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxM
ZWZ0KGludCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRvcChpbnQpOwogCi0gICAgdmly
dHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBv
aW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CiAKICAgICAv
LyBTY3JvbGxhYmxlQXJlYSBpbnRlcmZhY2UuCiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShT
Y3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCmluZGV4IDYzOTEzMzRlZmM0MmQwMjBlMzc4MGI2NzU0NDI5NDM4NTc1M2Zk
ZWEuLmM4ZTA1OWZhOGNjMTQ1ZTJhMThjMjY3OGQ3MmFiZDIyMDYxZTg1MzUgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0yNDIzLDI1ICsyNDIzLDI1IEBA
IGJvb2wgUmVuZGVyT2JqZWN0Ojppc0NvbXBvc2l0ZWQoKSBjb25zdAogICAgIHJldHVybiBoYXNM
YXllcigpICYmIHRvUmVuZGVyQm94TW9kZWxPYmplY3QodGhpcyktPmxheWVyKCktPmlzQ29tcG9z
aXRlZCgpOwogfQogCi1ib29sIFJlbmRlck9iamVjdDo6aGl0VGVzdChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0UG9pbnQm
IHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwg
SGl0VGVzdEZpbHRlciBoaXRUZXN0RmlsdGVyKQorYm9vbCBSZW5kZXJPYmplY3Q6OmhpdFRlc3Qo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEZpbHRlciBoaXRUZXN0RmlsdGVyKQogewogICAgIGJv
b2wgaW5zaWRlID0gZmFsc2U7CiAgICAgaWYgKGhpdFRlc3RGaWx0ZXIgIT0gSGl0VGVzdFNlbGYp
IHsKICAgICAgICAgLy8gRmlyc3QgdGVzdCB0aGUgZm9yZWdyb3VuZCBsYXllciAobGluZXMgYW5k
IGlubGluZXMpLgotICAgICAgICBpbnNpZGUgPSBub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQs
IHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0Rm9yZWdyb3VuZCk7
CisgICAgICAgIGluc2lkZSA9IG5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgdGFyZ2V0SW5D
b250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0Rm9yZWdyb3VuZCk7CiAKICAgICAg
ICAgLy8gVGVzdCBmbG9hdHMgbmV4dC4KICAgICAgICAgaWYgKCFpbnNpZGUpCi0gICAgICAgICAg
ICBpbnNpZGUgPSBub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIs
IGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0RmxvYXQpOworICAgICAgICAgICAgaW5zaWRlID0g
bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB0YXJnZXRJbkNvbnRhaW5lciwgYWNjdW11bGF0
ZWRPZmZzZXQsIEhpdFRlc3RGbG9hdCk7CiAKICAgICAgICAgLy8gRmluYWxseSB0ZXN0IHRvIHNl
ZSBpZiB0aGUgbW91c2UgaXMgaW4gdGhlIGJhY2tncm91bmQgKHdpdGhpbiBhIGNoaWxkIGJsb2Nr
J3MgYmFja2dyb3VuZCkuCiAgICAgICAgIGlmICghaW5zaWRlKQotICAgICAgICAgICAgaW5zaWRl
ID0gbm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVs
YXRlZE9mZnNldCwgSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kcyk7CisgICAgICAgICAgICBp
bnNpZGUgPSBub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLCBh
Y2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kcyk7CiAgICAgfQog
CiAgICAgLy8gU2VlIGlmIHRoZSBtb3VzZSBpcyBpbnNpZGUgdXMgYnV0IG5vdCBhbnkgb2Ygb3Vy
IGRlc2NlbmRhbnRzCiAgICAgaWYgKGhpdFRlc3RGaWx0ZXIgIT0gSGl0VGVzdERlc2NlbmRhbnRz
ICYmICFpbnNpZGUpCi0gICAgICAgIGluc2lkZSA9IG5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3Vs
dCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RCbG9ja0JhY2tn
cm91bmQpOworICAgICAgICBpbnNpZGUgPSBub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHRh
cmdldEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEJsb2NrQmFja2dyb3Vu
ZCk7CiAKICAgICByZXR1cm4gaW5zaWRlOwogfQpAQCAtMjQ2MCw3ICsyNDYwLDcgQEAgdm9pZCBS
ZW5kZXJPYmplY3Q6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBMYXlvdXRQb2ludCYKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyT2JqZWN0Ojpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0
UG9pbnQmIC8qcG9pbnRJbkNvbnRhaW5lciovLCBjb25zdCBMYXlvdXRQb2ludCYgLyphY2N1bXVs
YXRlZE9mZnNldCovLCBIaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJPYmplY3Q6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RU
YXJnZXQmIC8qdGFyZ2V0SW5Db250YWluZXIqLywgY29uc3QgTGF5b3V0UG9pbnQmIC8qYWNjdW11
bGF0ZWRPZmZzZXQqLywgSGl0VGVzdEFjdGlvbikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggMmRjZDYyZTVkYmYwYmUx
MTMzMjFkYTc4NGYyNzc5OTc0Y2RmMDRiMy4uMmY2YTFjMjhiZTAzNzg0NzcxMjNlYmJhNjFjMWFi
ZGM3NGYyYjZhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAt
NDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07
CiBjbGFzcyBBbmltYXRpb25Db250cm9sbGVyOwogY2xhc3MgQ3Vyc29yOwotY2xhc3MgSGl0VGVz
dFBvaW50OworY2xhc3MgSGl0VGVzdFRhcmdldDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFz
cyBJbmxpbmVCb3g7CiBjbGFzcyBJbmxpbmVGbG93Qm94OwpAQCAtNjQzLDkgKzY0Myw5IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgaXNDb21wb3NpdGVkKCkgY29uc3Q7CiAKLSAgICBib29sIGhpdFRl
c3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIEhpdFRlc3RGaWx0ZXIgPSBIaXRUZXN0QWxsKTsKKyAgICBib29sIGhpdFRlc3QoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFRhcmdldCYgdGFy
Z2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0
VGVzdEZpbHRlciA9IEhpdFRlc3RBbGwpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVIaXRUZXN0
UmVzdWx0KEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYpOwotICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRl
c3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24g
cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYpOwogICAgIFZpc2libGVQb3NpdGlv
biBjcmVhdGVWaXNpYmxlUG9zaXRpb24oaW50IG9mZnNldCwgRUFmZmluaXR5KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKaW5kZXggNTM2MjgzNmE0NGY5MjgzMWNj
MDQ2YTcxODUyOTM1ODUwMzBhZjUwNi4uM2E2NzdiMGUwZWFkNWFmMjkxNWMzZmZhMjVmZTcwMDMx
ODM0ZWZiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKQEAg
LTExOCw3ICsxMTgsNyBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6cGFpbnRSZXBsYWNlZChQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50TwogfQogCiAvLyBIaXQgVGVz
dGluZwotYm9vbCBSZW5kZXJSZWdpb246Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9p
bnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRU
ZXN0QWN0aW9uIGFjdGlvbikKK2Jvb2wgUmVuZGVyUmVnaW9uOjpub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRU
ZXN0VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI3LDE0ICsxMjcsMTQgQEAgYm9vbCBSZW5kZXJS
ZWdpb246Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXMKIAogICAgIC8vIENoZWNrIG91ciBib3VuZHMgbmV4dC4gRm9yIHRoaXMgcHVy
cG9zZSBhbHdheXMgYXNzdW1lIHRoYXQgd2UgY2FuIG9ubHkgYmUgaGl0IGluIHRoZQogICAgIC8v
IGZvcmVncm91bmQgcGhhc2UgKHdoaWNoIGlzIHRydWUgZm9yIHJlcGxhY2VkIGVsZW1lbnRzIGxp
a2UgaW1hZ2VzKS4KLSAgICBMYXlvdXRSZWN0IGJvdW5kc1JlY3QgPSBib3JkZXJCb3hSZWN0SW5S
ZWdpb24ocG9pbnRJbkNvbnRhaW5lci5yZWdpb24oKSk7CisgICAgTGF5b3V0UmVjdCBib3VuZHNS
ZWN0ID0gYm9yZGVyQm94UmVjdEluUmVnaW9uKHRhcmdldEluQ29udGFpbmVyLnJlZ2lvbigpKTsK
ICAgICBib3VuZHNSZWN0Lm1vdmVCeShhZGp1c3RlZExvY2F0aW9uKTsKLSAgICBpZiAodmlzaWJs
ZVRvSGl0VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3VuZCAmJiBwb2ludElu
Q29udGFpbmVyLmludGVyc2VjdHMoYm91bmRzUmVjdCkpIHsKKyAgICBpZiAodmlzaWJsZVRvSGl0
VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3VuZCAmJiB0YXJnZXRJbkNvbnRh
aW5lci5pbnRlcnNlY3RzKGJvdW5kc1JlY3QpKSB7CiAgICAgICAgIC8vIENoZWNrIHRoZSBjb250
ZW50cyBvZiB0aGUgUmVuZGVyRmxvd1RocmVhZC4KLSAgICAgICAgaWYgKG1fZmxvd1RocmVhZCAm
JiBtX2Zsb3dUaHJlYWQtPmhpdFRlc3RSZWdpb24odGhpcywgcmVxdWVzdCwgcmVzdWx0LCBwb2lu
dEluQ29udGFpbmVyLCBMYXlvdXRQb2ludChhZGp1c3RlZExvY2F0aW9uLngoKSArIGJvcmRlckxl
ZnQoKSArIHBhZGRpbmdMZWZ0KCksIGFkanVzdGVkTG9jYXRpb24ueSgpICsgYm9yZGVyVG9wKCkg
KyBwYWRkaW5nVG9wKCkpKSkKKyAgICAgICAgaWYgKG1fZmxvd1RocmVhZCAmJiBtX2Zsb3dUaHJl
YWQtPmhpdFRlc3RSZWdpb24odGhpcywgcmVxdWVzdCwgcmVzdWx0LCB0YXJnZXRJbkNvbnRhaW5l
ciwgTGF5b3V0UG9pbnQoYWRqdXN0ZWRMb2NhdGlvbi54KCkgKyBib3JkZXJMZWZ0KCkgKyBwYWRk
aW5nTGVmdCgpLCBhZGp1c3RlZExvY2F0aW9uLnkoKSArIGJvcmRlclRvcCgpICsgcGFkZGluZ1Rv
cCgpKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgdXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhZGp1
c3RlZExvY2F0aW9uKSk7Ci0gICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRl
c3RSZXN1bHQobm9kZSgpLCBwb2ludEluQ29udGFpbmVyLCBib3VuZHNSZWN0KSkKKyAgICAgICAg
dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLnBvaW50KCkgLSB0
b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOworICAgICAgICBpZiAoIXJlc3VsdC5hZGRO
b2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5vZGUoKSwgdGFyZ2V0SW5Db250YWluZXIsIGJvdW5k
c1JlY3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgKaW5kZXggODI2ZTk4MDcyMjZiMWIzNGU5YjQwNTg0MmE0
ZTk1Y2NiODYwNzNlMy4uNzljM2IwYzMzMGUxYWQzNmVhOTZhN2I2OTMwZDI0M2FiODQzMDJjMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uaApAQCAtNDYsNyArNDYsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyUmVnaW9uKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiwg
Y29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2lu
dEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRl
c3RBY3Rpb24pIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0VGFyZ2V0JiBwb2lu
dEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRl
c3RBY3Rpb24pIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0
eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKaW5kZXggZTkzOTAwNGRiOGQ2OTM4NzRlYzZi
MjRjOWE5NGQyN2Y3OTMxMzU4Yy4uOGQ3MDg2ZGRiZDA0NDg4NTk4MzlmMDYyYjk1MWQ5YTY4ZDVk
ZjJhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCkBAIC0xMjY2
LDE3ICsxMjY2LDE3IEBAIExheW91dFJlY3QgUmVuZGVyVGFibGU6Om92ZXJmbG93Q2xpcFJlY3Qo
Y29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJSZWdpCiAgICAgcmV0dXJuIHJlY3Q7
CiB9CiAKLWJvb2wgUmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9p
bnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRU
ZXN0QWN0aW9uIGFjdGlvbikKK2Jvb2wgUmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRl
c3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewogICAgIExheW91dFBvaW50IGFkanVz
dGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCk7CiAKICAgICAvLyBD
aGVjayBraWRzIGZpcnN0LgotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgcG9pbnRJbkNv
bnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgcG9p
bnRJbkNvbnRhaW5lci5yZWdpb24oKSkpKSB7CisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8
fCB0YXJnZXRJbkNvbnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRM
b2NhdGlvbiwgdGFyZ2V0SW5Db250YWluZXIucmVnaW9uKCkpKSkgewogICAgICAgICBmb3IgKFJl
bmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnBy
ZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzQm94KCkgJiYgIXRv
UmVuZGVyQm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAoY2hpbGQtPmlzVGFi
bGVTZWN0aW9uKCkgfHwgY2hpbGQtPmlzVGFibGVDYXB0aW9uKCkpKSB7CiAgICAgICAgICAgICAg
ICAgTGF5b3V0UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZUZvckNoaWxkKHRv
UmVuZGVyQm94KGNoaWxkKSwgYWRqdXN0ZWRMb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgaWYg
KGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNo
aWxkUG9pbnQsIGFjdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIHRvTGF5b3V0UG9pbnQocG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gY2hp
bGRQb2ludCkpOworICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVz
dCwgcmVzdWx0LCB0YXJnZXRJbkNvbnRhaW5lciwgY2hpbGRQb2ludCwgYWN0aW9uKSkgeworICAg
ICAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdG9MYXlvdXRQb2lu
dCh0YXJnZXRJbkNvbnRhaW5lci5wb2ludCgpIC0gY2hpbGRQb2ludCkpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBA
IC0xMjg1LDkgKzEyODUsOSBAQCBib29sIFJlbmRlclRhYmxlOjpub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdQogCiAgICAgLy8gQ2hl
Y2sgb3VyIGJvdW5kcyBuZXh0LgogICAgIExheW91dFJlY3QgYm91bmRzUmVjdChhZGp1c3RlZExv
Y2F0aW9uLCBzaXplKCkpOwotICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgKGFjdGlv
biA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9j
a0JhY2tncm91bmQpICYmIHBvaW50SW5Db250YWluZXIuaW50ZXJzZWN0cyhib3VuZHNSZWN0KSkg
ewotICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2Rl
KHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9u
KSkpOwotICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5v
ZGUoKSwgcG9pbnRJbkNvbnRhaW5lciwgYm91bmRzUmVjdCkpCisgICAgaWYgKHZpc2libGVUb0hp
dFRlc3RpbmcoKSAmJiAoYWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgYWN0aW9u
ID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgdGFyZ2V0SW5Db250YWluZXIuaW50
ZXJzZWN0cyhib3VuZHNSZWN0KSkgeworICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3Vs
dCwgZmxpcEZvcldyaXRpbmdNb2RlKHRhcmdldEluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91
dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpKTsKKyAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRv
UmVjdEJhc2VkVGVzdFJlc3VsdChub2RlKCksIHRhcmdldEluQ29udGFpbmVyLCBib3VuZHNSZWN0
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGUuaAppbmRleCA4NzQxOGYwNjhjNjA4YzVjMTg0NWI3ZWUyMzIxMDYxZmE5
MzNlMWNmLi5iODI1M2U1NTRiYzAxOTQ0NDllZDUzZmFjOTE3YWY1OWRkYmZjZjQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaApAQCAtMjQ5LDcgKzI0OSw3IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50TWFzayhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQ
b2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29t
cHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0VGFy
Z2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBm
aXJzdExpbmVCb3hCYXNlbGluZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgTGF5b3V0
VW5pdCBsYXN0TGluZUJveEJhc2VsaW5lKCkgY29uc3QgT1ZFUlJJREU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAppbmRleCA3Y2EzM2FkNjEyNTk0MzEwODhl
OTMxYzM4NGUyYmJiNjA2YTRhNmIxLi5lNTNiOGQxMDVjOTk0ZTdlMDQwMjBhNDY0MTYxMjNlMDQx
YzE3YzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVS
b3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAK
QEAgLTE5NCw3ICsxOTQsNyBAQCBMYXlvdXRSZWN0IFJlbmRlclRhYmxlUm93OjpjbGlwcGVkT3Zl
cmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcgogfQogCiAvLyBIaXQg
VGVzdGluZwotYm9vbCBSZW5kZXJUYWJsZVJvdzo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQs
IEhpdFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5kZXJUYWJsZVJvdzo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCiB7CiAgICAgLy8gVGFibGUg
cm93cyBjYW5ub3QgZXZlciBiZSBoaXQgdGVzdGVkLiAgRWZmZWN0aXZlbHkgdGhleSBkbyBub3Qg
ZXhpc3QuCiAgICAgLy8gSnVzdCBmb3J3YXJkIHRvIG91ciBjaGlsZHJlbiBhbHdheXMuCkBAIC0y
MDUsOCArMjA1LDggQEAgYm9vbCBSZW5kZXJUYWJsZVJvdzo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHIKICAgICAgICAgLy8gdGhlbiB3
ZSBjYW4gcmVtb3ZlIHRoaXMgY2hlY2suCiAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZUNlbGwo
KSAmJiAhdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CiAgICAg
ICAgICAgICBMYXlvdXRQb2ludCBjZWxsUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGVGb3JDaGls
ZCh0b1JlbmRlclRhYmxlQ2VsbChjaGlsZCksIGFjY3VtdWxhdGVkT2Zmc2V0KTsKLSAgICAgICAg
ICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFp
bmVyLCBjZWxsUG9pbnQsIGFjdGlvbikpIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGNl
bGxQb2ludCkpOworICAgICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCBy
ZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLCBjZWxsUG9pbnQsIGFjdGlvbikpIHsKKyAgICAgICAg
ICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdGFyZ2V0SW5Db250YWluZXIucG9p
bnQoKSAtIHRvTGF5b3V0U2l6ZShjZWxsUG9pbnQpKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVSb3cuaAppbmRleCBhZmE4MzhjMTI1NDYxYmU1ZmMzNTVkMDI2NWRjZDMxY2Vm
NmEyYzMxLi45Y2MxZjhmY2MzYTlkNjU0MGNmMWIwYjJhZDY5YjZhYjk0M2Q5ZGE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaApAQCAtOTUsNyArOTUsNyBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgp
OwogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChS
ZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CiAKICAgICB2aXJ0
dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGlzVHJhbnNw
YXJlbnQoKSB8fCBoYXNPdmVyZmxvd0NsaXAoKSB8fCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNIaWRk
ZW5CYWNrZmFjZSgpIHx8IGhhc01hc2soKSB8fCBoYXNGaWx0ZXIoKTsgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCmluZGV4IDFmMTM3OWU0
OGQ2NTUzMmM0NGZmNjI0ZDI2OWQxNDIyYzQ5YTNiZDcuLjliMTE3M2FhMDA3NTQ2NTg1NDdkOWFm
MmVkYzgyZTA0OGRjZWIwNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uY3BwCkBAIC0xMzY5LDcgKzEzNjksNyBAQCB2b2lkIFJlbmRlclRhYmxl
U2VjdGlvbjo6c3BsaXRDb2x1bW4odW5zaWduZWQgcG9zLCB1bnNpZ25lZCBmaXJzdCkKIH0KIAog
Ly8gSGl0IFRlc3RpbmcKLWJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBI
aXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlclRhYmxlU2VjdGlv
bjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCiB7
CiAgICAgLy8gSWYgd2UgaGF2ZSBubyBjaGlsZHJlbiB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBk
by4KICAgICBpZiAoIWZpcnN0Q2hpbGQoKSkKQEAgLTEzNzksNyArMTM3OSw3IEBAIGJvb2wgUmVu
ZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsCiAgICAgLy8gSnVzdCBmb3J3YXJkIHRvIG91ciBjaGlsZHJlbiBhbHdh
eXMuCiAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0
ICsgbG9jYXRpb24oKTsKIAotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAhcG9pbnRJbkNv
bnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgcG9p
bnRJbkNvbnRhaW5lci5yZWdpb24oKSkpKQorICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAh
dGFyZ2V0SW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxvd0NsaXBSZWN0KGFkanVzdGVkTG9j
YXRpb24sIHRhcmdldEluQ29udGFpbmVyLnJlZ2lvbigpKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGlmIChoYXNPdmVyZmxvd2luZ0NlbGwoKSkgewpAQCAtMTM5MCw4ICsxMzkwLDgg
QEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWwKICAgICAgICAgICAgIC8vIHRoZW4gd2UgY2FuIHJl
bW92ZSB0aGlzIGNoZWNrLgogICAgICAgICAgICAgaWYgKGNoaWxkLT5pc0JveCgpICYmICF0b1Jl
bmRlckJveChjaGlsZCktPmhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsKICAgICAgICAgICAgICAg
ICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2RlRm9yQ2hpbGQodG9S
ZW5kZXJCb3goY2hpbGQpLCBhZGp1c3RlZExvY2F0aW9uKTsKLSAgICAgICAgICAgICAgICBpZiAo
Y2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgY2hp
bGRQb2ludCwgYWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVz
dWx0KHJlc3VsdCwgdG9MYXlvdXRQb2ludChwb2ludEluQ29udGFpbmVyLnBvaW50KCkgLSBjaGls
ZFBvaW50KSk7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0
LCByZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLCBjaGlsZFBvaW50LCBhY3Rpb24pKSB7CisgICAg
ICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCB0b0xheW91dFBvaW50
KHRhcmdldEluQ29udGFpbmVyLnBvaW50KCkgLSBjaGlsZFBvaW50KSk7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAg
LTE0MDEsNyArMTQwMSw3IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsCiAKICAgICByZWNhbGND
ZWxsc0lmTmVlZGVkKCk7CiAKLSAgICBMYXlvdXRSZWN0IGhpdFRlc3RSZWN0ID0gcG9pbnRJbkNv
bnRhaW5lci5ib3VuZGluZ0JveCgpOworICAgIExheW91dFJlY3QgaGl0VGVzdFJlY3QgPSB0YXJn
ZXRJbkNvbnRhaW5lci5ib3VuZGluZ0JveCgpOwogICAgIGhpdFRlc3RSZWN0Lm1vdmVCeSgtYWRq
dXN0ZWRMb2NhdGlvbik7CiAKICAgICBMYXlvdXRSZWN0IHRhYmxlQWxpZ25lZFJlY3QgPSBsb2dp
Y2FsUmVjdEZvcldyaXRpbmdNb2RlQW5kRGlyZWN0aW9uKGhpdFRlc3RSZWN0KTsKQEAgLTE0MjEs
MTUgKzE0MjEsMTUgQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWwKICAgICAgICAgICAgICAgICAt
LWk7CiAgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0gY3VycmVudC5jZWxs
c1tpXTsKICAgICAgICAgICAgICAgICBMYXlvdXRQb2ludCBjZWxsUG9pbnQgPSBmbGlwRm9yV3Jp
dGluZ01vZGVGb3JDaGlsZChjZWxsLCBhZGp1c3RlZExvY2F0aW9uKTsKLSAgICAgICAgICAgICAg
ICBpZiAoc3RhdGljX2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oY2VsbCktPm5vZGVBdFBvaW50KHJlcXVl
c3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgY2VsbFBvaW50LCBhY3Rpb24pKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFp
bmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoY2VsbFBvaW50KSk7CisgICAgICAgICAgICAgICAg
aWYgKHN0YXRpY19jYXN0PFJlbmRlck9iamVjdCo+KGNlbGwpLT5ub2RlQXRQb2ludChyZXF1ZXN0
LCByZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLCBjZWxsUG9pbnQsIGFjdGlvbikpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRhcmdldEluQ29udGFp
bmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoY2VsbFBvaW50KSk7CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmICghcmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAgICAgICAgaWYgKCFy
ZXN1bHQuaXNBcmVhQmFzZWRUZXN0KCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKCFyZXN1bHQuaXNSZWN0QmFzZWRUZXN0KCkpCisgICAgICAgIGlmICgh
cmVzdWx0LmlzQXJlYUJhc2VkVGVzdCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKaW5kZXggODkx
MDM4ZTE0ODQ0MjZmYTc5MmViMTk4NTIxNzJiYWZkNzA5Zjc5Ny4uMTk3MjFlNzcyZmE1NzI4ZDcw
ZmIwNmUyODA3MGQ0ZjI3N2Q0ZTg0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uaApAQCAtMjE3LDcgKzIxNyw3IEBAIHByaXZhdGU6CiAKICAgICB2
aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgSW50UmVjdCog
PSAwKTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVy
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9W
RVJSSURFOwogCiAgICAgdm9pZCBlbnN1cmVSb3dzKHVuc2lnbmVkKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmgKaW5kZXggYjk2ZWNhNzNmMzZjMTVmZjYyMjVlOTk4YTM5MTEw
NTU2NzE3ZjQ0YS4uNTVhMTA5Mjk0YTIyY2EzNWQzOGRkMDFlNWFlMDhkZDdlNTViMDEzYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCkBAIC0xNTYsNyArMTU2LDcgQEAgcHJp
dmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQ
b2ludCYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0
KCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9p
bnQmLCBjb25zdCBMYXlvdXRQb2ludCYsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0
VGFyZ2V0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERSB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZvaWQgZGVsZXRlVGV4
dEJveGVzKCk7CiAgICAgYm9vbCBjb250YWluc09ubHlXaGl0ZXNwYWNlKHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIGxlbikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sLmNwcAppbmRleCA4YjEzODM1MmU0NjgyYjQ1ZmJjZWUyNGRlNjdiN2NhZjcx
YjU1ZTk0Li45YTcyNThhMmY1NzNiZmQwNzFjMmQ0YzI1ODI5NzdiMTA1ZjQ4YmUzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKQEAgLTE1Mywx
MyArMTUzLDEzIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0
KCkKICAgICBSZW5kZXJCbG9jazo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoKTsKIH0KIAotdm9pZCBS
ZW5kZXJUZXh0Q29udHJvbDo6aGl0SW5uZXJUZXh0RWxlbWVudChIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQpCit2b2lkIFJlbmRlclRleHRDb250cm9sOjpoaXRJbm5lclRl
eHRFbGVtZW50KEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHRhcmdl
dEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpCiB7CiAg
ICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9j
YXRpb24oKTsKICAgICBIVE1MRWxlbWVudCogaW5uZXJUZXh0ID0gaW5uZXJUZXh0RWxlbWVudCgp
OwogICAgIHJlc3VsdC5zZXRJbm5lck5vZGUoaW5uZXJUZXh0KTsKICAgICByZXN1bHQuc2V0SW5u
ZXJOb25TaGFyZWROb2RlKGlubmVyVGV4dCk7Ci0gICAgcmVzdWx0LnNldExvY2FsUG9pbnQocG9p
bnRJbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9uICsgaW5uZXJUZXh0
LT5yZW5kZXJCb3goKS0+bG9jYXRpb24oKSkpOworICAgIHJlc3VsdC5zZXRMb2NhbFBvaW50KHRh
cmdldEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24gKyBpbm5lclRl
eHQtPnJlbmRlckJveCgpLT5sb2NhdGlvbigpKSk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBm
b250RmFtaWxpZXNXaXRoSW52YWxpZENoYXJXaWR0aFtdID0gewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaAppbmRleCAxYTQ4ZjVkYmU2OTYwZjVhM2E0YjIx
MWQ1MDc0MDcyZWYyZmFhZmE3Li5mZGJkNDFhYWEwY2I3ODIyMTEyMWU1MTFjMGQyOTg2MDBmZTcz
MzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaApA
QCAtNDgsNyArNDgsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRD
aGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCi0g
ICAgdm9pZCBoaXRJbm5lclRleHRFbGVtZW50KEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQ
b2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0KTsKKyAgICB2b2lkIGhpdElubmVyVGV4dEVsZW1lbnQoSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IExheW91dFBvaW50JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0KTsKIAogICAgIGludCB0ZXh0QmxvY2tXaWR0aCgpIGNvbnN0OwogICAgIGlu
dCB0ZXh0QmxvY2tIZWlnaHQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCmluZGV4IGE0NjMyN2U2NWVh
OTIyNDg5YWRmN2EyOWMwYjUyZjMxNTQ4YWFhNjQuLjE1ZGJkYTUxYzk0MzY3ODRlMzgxZjZiMzdl
NzcxYTdlOGZkYjQ3YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcApAQCAtNDIsMTMgKzQyLDEzIEBAIFJlbmRl
clRleHRDb250cm9sTXVsdGlMaW5lOjp+UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUoKQogICAg
ICAgICBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Kj4obm9kZSgpKS0+cmVuZGVyZXJX
aWxsQmVEZXN0cm95ZWQoKTsKIH0KIAotYm9vbCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikK
K2Jvb2wgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RU
YXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICBpZiAoIVJlbmRlclRl
eHRDb250cm9sOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIs
IGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkKKyAgICBpZiAoIVJlbmRlclRleHRD
b250cm9sOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLCBh
Y2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGlmIChyZXN1bHQuaW5uZXJOb2RlKCkgPT0gbm9kZSgpIHx8IHJlc3VsdC5pbm5lck5v
ZGUoKSA9PSBpbm5lclRleHRFbGVtZW50KCkpCi0gICAgICAgIGhpdElubmVyVGV4dEVsZW1lbnQo
cmVzdWx0LCBwb2ludEluQ29udGFpbmVyLnBvaW50KCksIGFjY3VtdWxhdGVkT2Zmc2V0KTsKKyAg
ICAgICAgaGl0SW5uZXJUZXh0RWxlbWVudChyZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLnBvaW50
KCksIGFjY3VtdWxhdGVkT2Zmc2V0KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaApp
bmRleCA1Yzg0YTU5MTA1ZWNhNzdiMTMxYWIwYzU0NGVmMmM3NTBmNTk5ZDczLi4wNjgxZDFkNmY3
MWI3ZGZkM2ZmZDllOWE3MmEwOWJiOWY0YjM2YzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaApAQCAtMzQsNyArMzQs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1RleHRBcmVhKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9p
bnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRU
ZXN0QWN0aW9uKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFRhcmdldCYgdGFy
Z2V0SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0
VGVzdEFjdGlvbikgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIGZsb2F0IGdldEF2Z0NoYXJXaWR0
aChBdG9taWNTdHJpbmcgZmFtaWx5KTsKICAgICB2aXJ0dWFsIExheW91dFVuaXQgcHJlZmVycmVk
Q29udGVudFdpZHRoKGZsb2F0IGNoYXJXaWR0aCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCmluZGV4
IDBiNjMyNDVlNTI4OWY5NDA2OTY0ZDZkNGVhMTdmZTIxYWQ1MTMyZGEuLmI4YWE4ZTJiZDdlMDgw
OGFhY2NmYWQxMDAxMjQ0ZmExMTVmNDExYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCkBAIC0yMDksOSAr
MjA5LDkgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxheW91dCgpCiAgICAg
fQogfQogCi1ib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3Qg
SGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0VGFyZ2V0JiB0YXJnZXRJ
bkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0
QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0gICAgaWYgKCFSZW5kZXJUZXh0Q29udHJvbDo6bm9k
ZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9m
ZnNldCwgaGl0VGVzdEFjdGlvbikpCisgICAgaWYgKCFSZW5kZXJUZXh0Q29udHJvbDo6bm9kZUF0
UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB0YXJnZXRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZz
ZXQsIGhpdFRlc3RBY3Rpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBTYXkg
dGhhdCB3ZSBoaXQgdGhlIGlubmVyIHRleHQgZWxlbWVudCBpZgpAQCAtMjIwLDcgKzIyMCw3IEBA
IGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0CiAgICAgLy8gIC0gd2UgaGl0IHJlZ2lvbnMgbm90IGlu
IGFueSBkZWNvcmF0aW9uIGJ1dHRvbnMuCiAgICAgSFRNTEVsZW1lbnQqIGNvbnRhaW5lciA9IGNv
bnRhaW5lckVsZW1lbnQoKTsKICAgICBpZiAocmVzdWx0LmlubmVyTm9kZSgpLT5pc0Rlc2NlbmRh
bnRPZihpbm5lclRleHRFbGVtZW50KCkpIHx8IHJlc3VsdC5pbm5lck5vZGUoKSA9PSBub2RlKCkg
fHwgKGNvbnRhaW5lciAmJiBjb250YWluZXIgPT0gcmVzdWx0LmlubmVyTm9kZSgpKSkgewotICAg
ICAgICBMYXlvdXRQb2ludCBwb2ludEluUGFyZW50ID0gcG9pbnRJbkNvbnRhaW5lci5wb2ludCgp
OworICAgICAgICBMYXlvdXRQb2ludCBwb2ludEluUGFyZW50ID0gdGFyZ2V0SW5Db250YWluZXIu
cG9pbnQoKTsKICAgICAgICAgaWYgKGNvbnRhaW5lciAmJiBpbm5lckJsb2NrRWxlbWVudCgpKSB7
CiAgICAgICAgICAgICBpZiAoaW5uZXJCbG9ja0VsZW1lbnQoKS0+cmVuZGVyQm94KCkpCiAgICAg
ICAgICAgICAgICAgcG9pbnRJblBhcmVudCAtPSB0b0xheW91dFNpemUoaW5uZXJCbG9ja0VsZW1l
bnQoKS0+cmVuZGVyQm94KCktPmxvY2F0aW9uKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCmluZGV4IDExNWM0ODMw
ODk0OTZmOTU5YzIzNjk5MTI1MjY3OThmOWM2M2I5MjUuLmJhZmI2MjA4YmM3ZGJjMTY3MWM0Yzlk
NWQzMjI1YjFiNjdkMTYxMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQm
KTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVz
dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0
VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgdm9pZCBhdXRv
c2Nyb2xsKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJX
aWRnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKaW5k
ZXggM2EzMDI2MGY4OWRjYzhlZGJlZWQ2Zjk2ZDhlYzBjM2M0MjY1MTk0Ny4uNDhmNzNmMTUyOTU2
YWQyOGQ4NjliYmI0MDdjZDc3NzUwNTBiNGZlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcldpZGdldC5jcHAKQEAgLTM4NSwxMyArMzg1LDEzIEBAIFJlbmRlcldpZGdldCogUmVu
ZGVyV2lkZ2V0OjpmaW5kKGNvbnN0IFdpZGdldCogd2lkZ2V0KQogICAgIHJldHVybiB3aWRnZXRS
ZW5kZXJlck1hcCgpLmdldCh3aWRnZXQpOwogfQogCi1ib29sIFJlbmRlcldpZGdldDo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5kZXJX
aWRnZXQ6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9u
KQogewogICAgIGJvb2wgaGFkUmVzdWx0ID0gcmVzdWx0LmlubmVyTm9kZSgpOwotICAgIGJvb2wg
aW5zaWRlID0gUmVuZGVyUmVwbGFjZWQ6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9p
bnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGFjdGlvbik7CisgICAgYm9vbCBpbnNp
ZGUgPSBSZW5kZXJSZXBsYWNlZDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB0YXJnZXRJ
bkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGFjdGlvbik7CiAKICAgICAvLyBDaGVjayB0
byBzZWUgaWYgd2UgYXJlIHJlYWxseSBvdmVyIHRoZSB3aWRnZXQgaXRzZWxmIChhbmQgbm90IGp1
c3QgaW4gdGhlIGJvcmRlci9wYWRkaW5nIGFyZWEpLgotICAgIGlmICgoaW5zaWRlIHx8IHJlc3Vs
dC5pc1JlY3RCYXNlZFRlc3QoKSkgJiYgIWhhZFJlc3VsdCAmJiByZXN1bHQuaW5uZXJOb2RlKCkg
PT0gbm9kZSgpKQorICAgIGlmICgoaW5zaWRlIHx8IHJlc3VsdC5pc0FyZWFCYXNlZFRlc3QoKSkg
JiYgIWhhZFJlc3VsdCAmJiByZXN1bHQuaW5uZXJOb2RlKCkgPT0gbm9kZSgpKQogICAgICAgICBy
ZXN1bHQuc2V0SXNPdmVyV2lkZ2V0KGNvbnRlbnRCb3hSZWN0KCkuY29udGFpbnMocmVzdWx0Lmxv
Y2FsUG9pbnQoKSkpOwogICAgIHJldHVybiBpbnNpZGU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyV2lkZ2V0LmgKaW5kZXggYjkzYWU3YjVhNTVhNjg2Mzk5NWFkZDAzMWJjOWM2MTUy
ZjgwNjY1Yi4uZmZmMGJhNWM4NWU5YTllMTQwNTQ2ZmQwMjUzNzlhOGJmZTZkMThmMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaApAQCAtNjAsNyArNjAsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogICAgIHZpcnR1YWwgQ3Vyc29yRGly
ZWN0aXZlIGdldEN1cnNvcihjb25zdCBMYXlvdXRQb2ludCYsIEN1cnNvciYpIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RS
ZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOwogCiBw
cml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1dpZGdldCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAppbmRleCA0MzEz
ZmE3MzVhMTZhYzY5YjkxNWMxMmUwYTMzZTJlYTU5YTY0NDJkLi5hNDg5Y2E5NDA4MjJlNjYzNTM3
OTYzOTIxMzU2N2VlZTlhNDJjZjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUm9vdElubGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJ
bmxpbmVCb3guY3BwCkBAIC0yMTcsMTUgKzIxNywxNSBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQs
CiAjZW5kaWYKIH0KIAotYm9vbCBSb290SW5saW5lQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pCitib29sIFJv
b3RJbmxpbmVCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFp
bmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGlu
ZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKQogewogICAgIGlmIChoYXNFbGxpcHNpc0JveCgp
ICYmIHZpc2libGVUb0hpdFRlc3RpbmcoKSkgewotICAgICAgICBpZiAoZWxsaXBzaXNCb3goKS0+
bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRl
ZE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSkpIHsKLSAgICAgICAgICAgIHJlbmRlcmVyKCkt
PnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyLnBvaW50KCkgLSB0
b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKKyAgICAgICAgaWYgKGVsbGlwc2lzQm94
KCktPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgdGFyZ2V0SW5Db250YWluZXIsIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBsaW5lVG9wLCBsaW5lQm90dG9tKSkgeworICAgICAgICAgICAgcmVuZGVy
ZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLnBvaW50
KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBJbmxpbmVGbG93Qm94Ojpub2Rl
QXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zm
c2V0LCBsaW5lVG9wLCBsaW5lQm90dG9tKTsKKyAgICByZXR1cm4gSW5saW5lRmxvd0JveDo6bm9k
ZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB0YXJnZXRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRP
ZmZzZXQsIGxpbmVUb3AsIGxpbmVCb3R0b20pOwogfQogCiB2b2lkIFJvb3RJbmxpbmVCb3g6OmFk
anVzdFBvc2l0aW9uKGZsb2F0IGR4LCBmbG9hdCBkeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Um9vdElubGluZUJveC5oCmluZGV4IDI3YzFhZmNlYTgwZjA4MDgzY2QyNTc5MzNjYmFhNDk4MDIx
YWU2NGYuLjQ4Njk2MGE3ZDkyYjNhMDU3YzI3MGIxZjA4NmU2YTQ1MDg1MzEyM2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaApAQCAtMTE4LDcgKzExOCw3IEBAIHB1
YmxpYzoKICNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0
IExheW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20p
OwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlv
dXRVbml0IGxpbmVCb3R0b20pIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0VGFy
Z2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgT1ZFUlJJREU7
CiAKICAgICB1c2luZyBJbmxpbmVCb3g6Omhhc1NlbGVjdGVkQ2hpbGRyZW47CiAgICAgdXNpbmcg
SW5saW5lQm94OjpzZXRIYXNTZWxlY3RlZENoaWxkcmVuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAKaW5kZXggZDY2
MDU2NjE1MDc5YWVjZjc2N2NjY2I5NzQ5ZTE1YzYxYTg1YmZjZi4uZWNjZDljZDM1MDViMmQ4YzI5
NjdlNDUzMTMzMTJmMzNlYWU3ZmY2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCkBAIC0xNzgsMTMgKzE3OCwx
MyBAQCBib29sIFJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAvLyBGT3MgZXN0YWJsaXNoIGEgc3RhY2tpbmcgY29udGV4dCwgc28gd2UgbmVlZCB0byBoaXQt
dGVzdCBhbGwgbGF5ZXJzLgotICAgIEhpdFRlc3RQb2ludCBoaXRUZXN0UG9pbnQocm91bmRlZExh
eW91dFBvaW50KGxvY2FsUG9pbnQpKTsKLSAgICByZXR1cm4gUmVuZGVyQmxvY2s6Om5vZGVBdFBv
aW50KHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdFBvaW50LCBMYXlvdXRQb2ludCgpLCBIaXRUZXN0
Rm9yZWdyb3VuZCkKLSAgICAgICAgfHwgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3Qs
IHJlc3VsdCwgaGl0VGVzdFBvaW50LCBMYXlvdXRQb2ludCgpLCBIaXRUZXN0RmxvYXQpCi0gICAg
ICAgIHx8IFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RQ
b2ludCwgTGF5b3V0UG9pbnQoKSwgSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kcyk7CisgICAg
SGl0VGVzdFRhcmdldCBoaXRUZXN0VGFyZ2V0KHJvdW5kZWRMYXlvdXRQb2ludChsb2NhbFBvaW50
KSk7CisgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQs
IGhpdFRlc3RUYXJnZXQsIExheW91dFBvaW50KCksIEhpdFRlc3RGb3JlZ3JvdW5kKQorICAgICAg
ICB8fCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0VGFy
Z2V0LCBMYXlvdXRQb2ludCgpLCBIaXRUZXN0RmxvYXQpCisgICAgICAgIHx8IFJlbmRlckJsb2Nr
Ojpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RUYXJnZXQsIExheW91dFBvaW50
KCksIEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZHMpOwogfQogCi1ib29sIFJlbmRlclNWR0Zv
cmVpZ25PYmplY3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYsIGNvbnN0IExheW91dFBvaW50JiwgSGl0VGVzdEFj
dGlvbikKK2Jvb2wgUmVuZGVyU1ZHRm9yZWlnbk9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFRhcmdldCYsIGNvbnN0
IExheW91dFBvaW50JiwgSGl0VGVzdEFjdGlvbikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oCmluZGV4IDgwZGRmZDYzMDhkZDhmNjM5YTE0
NWQyZDA1MzNmMDI0YjZmMmJjY2MuLjg3M2E4MjhjODg3NWFmOGMyZmIwYzJhY2UyYjI5NTJiYmU5
MDFmZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Rm9yZWlnbk9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHRm9yZWlnbk9iamVjdC5oCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJu
IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fdmlld3BvcnQuc2l6ZSgpKTsgfQogCiAgICAgdmly
dHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7
Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3Qg
TGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7
CiAgICAgdmlydHVhbCBib29sIGlzU1ZHRm9yZWlnbk9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1v
ZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9y
bXMsIFRyYW5zZm9ybVN0YXRlJiwgQXBwbHlDb250YWluZXJGbGlwT3JOb3QgPSBBcHBseUNvbnRh
aW5lckZsaXAsIGJvb2wqIHdhc0ZpeGVkID0gMCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCmluZGV4IDE4ZTdl
Y2FjZTdhM2EzYzY4ZDhmNWY0MDQ4OGYyZjZkOTJiNTRlMTUuLjM5Y2JhNWQzOWM1YmJkNTg5OWI0
YjUwYmJmOGU2ZmY5MTU5MzBiOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgdm9p
ZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRp
ZmYsIGNvbnN0IFJlbmRlclN0eWwKICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVD
aGFuZ2VkKHRoaXMsIGRpZmYsIHN0eWxlKCkpOwogfQogCi1ib29sIFJlbmRlclNWR01vZGVsT2Jq
ZWN0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBIaXRUZXN0UG9pbnQmLCBjb25zdCBMYXlvdXRQb2ludCYsIEhpdFRlc3RBY3Rpb24pCiti
b29sIFJlbmRlclNWR01vZGVsT2JqZWN0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0VGFyZ2V0JiwgY29uc3QgTGF5b3V0UG9p
bnQmLCBIaXRUZXN0QWN0aW9uKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJl
dHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHTW9kZWxPYmplY3QuaAppbmRleCAwZDgxOTI2MDkzZjZiZjc0ZWRjMDhjNDhjMjg3OTc3NGE0
NGIyZDYwLi5lOTdlZDljMWZkNWYyZDJlMTRkNzUyMzQwMDkyZTVlMDIwZDkzMDk5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5o
CkBAIC03MSw3ICs3MSw3IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICAvLyBUaGlzIG1l
dGhvZCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkLCBTVkcgdXNlcyBhIGRpZmZlcmVudCBub2RlQXRQ
b2ludCBtZXRob2QKLSAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklE
RTsKKyAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOwogfTsK
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
b290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAK
aW5kZXggNzA3ZGE4ODZlMmNhOThhMWI2OTZlZWM0YjI2MDI4ZjY2NjZmZmQ1ZS4uM2VjMDM3OTc3
MmRhOTk1NWJlMGIxNjIzMjE4MzQ1MWQ0NmJiNWE2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCkBAIC00MTUsOSArNDE1LDkgQEAgdm9pZCBS
ZW5kZXJTVkdSb290Ojp1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCkKICAgICBtX3JlcGFpbnRCb3Vu
ZGluZ0JveC5pbmZsYXRlKGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpKTsKIH0KIAotYm9vbCBSZW5k
ZXJTVkdSb290Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRU
ZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0VGFy
Z2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0gICAgTGF5b3V0UG9pbnQgcG9p
bnRJblBhcmVudCA9IHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhY2N1
bXVsYXRlZE9mZnNldCk7CisgICAgTGF5b3V0UG9pbnQgcG9pbnRJblBhcmVudCA9IHRhcmdldElu
Q29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpOwogICAg
IExheW91dFBvaW50IHBvaW50SW5Cb3JkZXJCb3ggPSBwb2ludEluUGFyZW50IC0gdG9MYXlvdXRT
aXplKGxvY2F0aW9uKCkpOwogCiAgICAgLy8gT25seSB0ZXN0IFNWRyBjb250ZW50IGlmIHRoZSBw
b2ludCBpcyBpbiBvdXIgY29udGVudCBib3guCkBAIC00MjksNyArNDI5LDcgQEAgYm9vbCBSZW5k
ZXJTVkdSb290Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmUKICAgICAgICAgICAgIC8vIEZJWE1FOiBub2RlQXRGbG9hdFBvaW50KCkg
ZG9lc24ndCBoYW5kbGUgcmVjdC1iYXNlZCBoaXQgdGVzdHMgeWV0LgogICAgICAgICAgICAgaWYg
KGNoaWxkLT5ub2RlQXRGbG9hdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYWxQb2ludCwgaGl0
VGVzdEFjdGlvbikpIHsKICAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3Vs
dCwgcG9pbnRJbkJvcmRlckJveCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9k
ZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChjaGlsZC0+bm9kZSgpLCBwb2ludEluQ29udGFpbmVyKSkK
KyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0
KGNoaWxkLT5ub2RlKCksIHRhcmdldEluQ29udGFpbmVyKSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQ0Miw5ICs0NDIsOSBA
QCBib29sIFJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZQogICAgICAgICAvLyB0byBiZSBhYmxlIHRvIGRldGVj
dCBoaXRzIG9uIHRoZSBiYWNrZ3JvdW5kIG9mIGEgPGRpdj4gZWxlbWVudC4gSWYgd2UnZCByZXR1
cm4gdHJ1ZSBoZXJlIGluIHRoZSAnRm9yZWdyb3VuZCcgcGhhc2UsIHdlIGFyZSBub3QgYWJsZSAK
ICAgICAgICAgLy8gdG8gZGV0ZWN0IHRoZXNlIGhpdHMgYW55bW9yZS4KICAgICAgICAgTGF5b3V0
UmVjdCBib3VuZHNSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKSwgc2l6ZSgpKTsK
LSAgICAgICAgaWYgKHBvaW50SW5Db250YWluZXIuaW50ZXJzZWN0cyhib3VuZHNSZWN0KSkgewor
ICAgICAgICBpZiAodGFyZ2V0SW5Db250YWluZXIuaW50ZXJzZWN0cyhib3VuZHNSZWN0KSkgewog
ICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Cb3JkZXJCb3gp
OwotICAgICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChu
b2RlKCksIHBvaW50SW5Db250YWluZXIsIGJvdW5kc1JlY3QpKQorICAgICAgICAgICAgaWYgKCFy
ZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChub2RlKCksIHRhcmdldEluQ29udGFp
bmVyLCBib3VuZHNSZWN0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUm9vdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgK
aW5kZXggOWFhN2U3YzE4NmFlNDg3NjkwYzQwYWFjOTA1ZmY1Y2MwZDAyMzc0NC4uYWE1MWM1OTJj
OTY0NmUzMzQ4ZWFiNWRjNmE2NjI2MTQwZTQ1ZTFkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgKQEAgLTkwLDcgKzkwLDcgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3Ryb2tlQm91bmRpbmdCb3g7IH0KICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9
CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURF
OworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0VGFyZ2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklE
RTsKIAogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWlu
dChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikgY29uc3Q7CiAgICAgdmly
dHVhbCB2b2lkIGNvbXB1dGVGbG9hdFJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0
KiByZXBhaW50Q29udGFpbmVyLCBGbG9hdFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGZpeGVkKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
VGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3Bw
CmluZGV4IGQzMGJhMWNkNjE1Nzc1ZmQ1MzBmN2JmYzEzYTZlNmZmYjI0MTk3NTEuLjRjZmNkOWYy
ZjRjM2ZhN2Q2YTUxYmZkZjdhOGJmODY3MDI2NzhkNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcApAQCAtNDUxLDE1ICs0NTEsMTUgQEAgYm9v
bCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWwKICAgICAgICAgICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6
cG9pbnRJbkNsaXBwaW5nQXJlYSh0aGlzLCBsb2NhbFBvaW50KSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7ICAgICAgIAogCi0gICAgICAgICAgICBIaXRUZXN0UG9pbnQgaGl0VGVzdFBv
aW50KExheW91dFBvaW50KGZsb29yZWRJbnRQb2ludChsb2NhbFBvaW50KSkpOwotICAgICAgICAg
ICAgcmV0dXJuIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGhpdFRl
c3RQb2ludCwgTGF5b3V0UG9pbnQoKSwgaGl0VGVzdEFjdGlvbik7CisgICAgICAgICAgICBIaXRU
ZXN0VGFyZ2V0IGhpdFRlc3RUYXJnZXQoTGF5b3V0UG9pbnQoZmxvb3JlZEludFBvaW50KGxvY2Fs
UG9pbnQpKSk7CisgICAgICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJl
cXVlc3QsIHJlc3VsdCwgaGl0VGVzdFRhcmdldCwgTGF5b3V0UG9pbnQoKSwgaGl0VGVzdEFjdGlv
bik7CiAgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVu
ZGVyU1ZHVGV4dDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBIaXRUZXN0QWN0
aW9uKQorYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0VGFyZ2V0JiwgY29uc3QgTGF5b3V0UG9p
bnQmLCBIaXRUZXN0QWN0aW9uKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJl
dHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0
LmgKaW5kZXggOTNjYjY0ZjhmYjJlNzRlZWIyODZhZWJiNDYyZDc5ZjJmMWJjZDZkZC4uOGE4MWRk
NWM5MjQ0YjY5NTgxYzI3NjlhNjQzZDMxZmZlYmMxYWIxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgKQEAgLTYyLDcgKzYyLDcgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdUZXh0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAg
ICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0g
ICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSGl0VGVzdFRhcmdldCYgdGFyZ2V0SW5Db250YWluZXIsIGNvbnN0IExh
eW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFj
dGlvbik7CiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25z
dCBMYXlvdXRQb2ludCYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdJbmxpbmVUZXh0Qm94LmNwcAppbmRleCA0N2JiNjNkZTIxYmUzZjY0YjNiYTYxZjAyOWVlNGI5
ZDc3ZDk3NTVkLi5lM2UzNGFhMDc0M2M0OTZhYTdlNmMwYWUzNjQ5NmZmYzhkMTJlMzQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAK
QEAgLTcwMSw3ICs3MDEsNyBAQCBGbG9hdFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6Y2FsY3VsYXRl
Qm91bmRhcmllcygpIGNvbnN0CiAgICAgcmV0dXJuIHRleHRSZWN0OwogfQogCi1ib29sIFNWR0lu
bGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0LCBMYXlv
dXRVbml0KQorYm9vbCBTVkdJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0VGFy
Z2V0JiB0YXJnZXRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBMYXlvdXRVbml0LCBMYXlvdXRVbml0KQogewogICAgIC8vIEZJWE1FOiBpbnRlZ3JhdGUg
d2l0aCBJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludCBiZXR0ZXIuCiAgICAgQVNTRVJUKCFpc0xp
bmVCcmVhaygpKTsKQEAgLTcxNCw5ICs3MTQsOSBAQCBib29sIFNWR0lubGluZVRleHRCb3g6Om5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0Jgog
ICAgICAgICAgICAgRmxvYXRQb2ludCBib3hPcmlnaW4oeCgpLCB5KCkpOwogICAgICAgICAgICAg
Ym94T3JpZ2luLm1vdmVCeShhY2N1bXVsYXRlZE9mZnNldCk7CiAgICAgICAgICAgICBGbG9hdFJl
Y3QgcmVjdChib3hPcmlnaW4sIHNpemUoKSk7Ci0gICAgICAgICAgICBpZiAocG9pbnRJbkNvbnRh
aW5lci5pbnRlcnNlY3RzKHJlY3QpKSB7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5
b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpOwotICAgICAgICAgICAgICAgIGlmICghcmVzdWx0
LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQocmVuZGVyZXIoKS0+bm9kZSgpLCBwb2ludElu
Q29udGFpbmVyLCByZWN0KSkKKyAgICAgICAgICAgIGlmICh0YXJnZXRJbkNvbnRhaW5lci5pbnRl
cnNlY3RzKHJlY3QpKSB7CisgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVz
dFJlc3VsdChyZXN1bHQsIHRhcmdldEluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUo
YWNjdW11bGF0ZWRPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2Rl
VG9SZWN0QmFzZWRUZXN0UmVzdWx0KHJlbmRlcmVyKCktPm5vZGUoKSwgdGFyZ2V0SW5Db250YWlu
ZXIsIHJlY3QpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHSW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxp
bmVUZXh0Qm94LmgKaW5kZXggYTRlMDNkODI4MWM0ZTg1NWMwMjE2NzBlMDcyYmRkYjVhYjhiZWM4
NC4uOGJkYzA2OGEwMWZiZmNjNjc2M2ViMzMxYTM3YmVhZjI1NmFmYzVlMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKQEAgLTc5LDcgKzc5
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29u
dGV4dCosIFJlbmRlclN0eWxlKiwgVGV4dFJ1biYsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGlu
dCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24pOwogICAgIHZvaWQgcGFpbnRUZXh0KEdy
YXBoaWNzQ29udGV4dCosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHNlbGVjdGlvblN0eWxl
LCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBib29sIGhhc1NlbGVjdGlvbiwgYm9vbCBwYWludFNl
bGVjdGVkVGV4dE9ubHkpOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJ
bkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRV
bml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEhpdFRlc3RUYXJnZXQmIHRhcmdldEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5l
Qm90dG9tKSBPVkVSUklERTsKIAogcHJpdmF0ZToKICAgICBmbG9hdCBtX2xvZ2ljYWxIZWlnaHQ7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160395</attachid>
            <date>2012-08-24 04:41:08 -0700</date>
            <delta_ts>2012-08-28 02:41:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90992-20120824134057.patch</filename>
            <type>text/plain</type>
            <size>137616</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2NTY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTkxOWIyZDU3YzNlZTM1
OWYzOGZhZjEyYWY4NmYxZGRhMzc2ZjE1Ny4uM2Y2MDYzMWYxYmE5MWNhMzM4ZWUxMWQ3YWY0NTk0
MTdjZjQ4NjBhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MCBAQAorMjAxMi0wOC0yNCAgQWxs
YW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KKworICAgICAgICBS
ZW5hbWUgSGl0VGVzdFBvaW50IGFuZCBwb2ludEluQ29udGFpbmVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDk5MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBmb3JtZXIgaGl0VGVzdFBvaW50IGlz
IG5vdCBqdXN0IGEgcG9pbnQuIEl0IGNhbiBiZSBlaXRoZXIgYSBwb2ludCBvciBhbiBhcmVhIGJl
aW5nCisgICAgICAgIGhpdCB0ZXN0ZWQuIFRoaXMgcGF0Y2hlcyByZW5hbWVzICdwb2ludCcgdG8g
J2xvY2F0aW9uJyB0byBtYWtlIGl0IG1vcmUgb2J2aW91cyB0aGF0IHRoZQorICAgICAgICBjb2Rl
IGRvZXMgbm90IG9ubHkgaGFuZGxlIHBvaW50cy4KKworICAgICAgICAqIHJlbmRlcmluZy9FbGxp
cHNpc0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9FbGxpcHNpc0JveC5oOgorICAgICAgICAoRWxsaXBzaXNC
b3gpOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhpdFRlc3RMb2NhdGlvbjo6SGl0VGVzdExvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkhpdFRlc3RMb2NhdGlvbjo6fkhpdFRlc3RMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpIaXRUZXN0TG9jYXRpb246Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0
TG9jYXRpb246Om1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdExvY2F0aW9uOjppbnRl
cnNlY3RzUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0TG9jYXRpb246OmludGVyc2Vj
dHMpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdExvY2F0aW9uOjpyZWN0Rm9yUG9pbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdCk6CisgICAgICAg
IChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6
SGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdCk6CisgICAgICAgIChX
ZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpkaWN0YXRpb25BbHRlcm5hdGl2ZXMpOgorICAgICAgICAq
IHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0Lmg6CisgICAgICAgIChIaXRUZXN0TG9jYXRpb24pOgor
ICAgICAgICAoSGl0VGVzdFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0
OjpoaXRUZXN0TG9jYXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVu
ZGVyaW5nL0lubGluZUJveC5oOgorICAgICAgICAoSW5saW5lQm94KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94
Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaDoKKyAg
ICAgICAgKElubGluZUZsb3dCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oOgorICAgICAgICAoSW5saW5lVGV4dEJv
eCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2wpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpoaXRUZXN0RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpo
aXRUZXN0Q29sdW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRqdXN0Rm9y
Q29sdW1uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGl0VGVzdENvbnRl
bnRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFJlbmRl
ckJsb2NrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCb3guaDoKKyAgICAgICAgKFJlbmRlckJveCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckVtYmVkZGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2Jq
ZWN0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0Lmg6CisgICAgICAgIChSZW5kZXJFbWJlZGRlZE9iamVjdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1Ro
cmVhZDo6aGl0VGVzdFJlZ2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJl
YWQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRnJhbWVTZXQ6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyRnJhbWVTZXQuaDoKKyAgICAgICAgKFJlbmRlckZyYW1lU2V0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1h
Z2U6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuaDoKKyAg
ICAgICAgKFJlbmRlckltYWdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6bm9kZUF0UG9pbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKFJlbmRlcklubGluZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNs
aXBSZWN0OjppbnRlcnNlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRU
ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjcmVhdGVMb2NhbFRyYW5zZm9y
bVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmhpdFRlc3RQYWdpbmF0ZWRDaGlsZExheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpoaXRUZXN0Q2hpbGRMYXllckNvbHVtbnMpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAoQ2xpcFJlY3QpOgorICAgICAgICAoUmVu
ZGVyTGF5ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaW5lQm94TGlzdDo6aGl0VGVzdCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0Lmg6CisgICAgICAgIChSZW5kZXJMaW5lQm94TGlz
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGlzdEJveDo6aXNQb2ludEluT3ZlcmZsb3dDb250cm9sKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5oOgorICAgICAgICAoUmVuZGVyTGlzdEJveCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmpl
Y3Q6OmhpdFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpub2RlQXRQb2lu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoUmVuZGVy
T2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJSZWdpb24uaDoKKyAgICAgICAgKFJlbmRlclJlZ2lvbik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpu
b2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmg6CisgICAgICAg
IChSZW5kZXJUYWJsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlUm93Ojpub2RlQXRQb2ludCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93Lmg6CisgICAgICAgIChSZW5kZXJUYWJsZVJvdyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmg6CisgICAgICAgIChSZW5kZXJUYWJsZVNlY3Rpb24p
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHRDb250cm9sTXVsdGlMaW5lOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmg6CisgICAgICAgIChSZW5kZXJUZXh0Q29udHJv
bE11bHRpTGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmg6CisgICAgICAgIChSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
V2lkZ2V0Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5o
OgorICAgICAgICAoUmVuZGVyV2lkZ2V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGlu
ZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94Ojpub2RlQXRQb2ludCk6
CisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaDoKKyAgICAgICAgKFJvb3RJbmxp
bmVCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojpub2RlQXRGbG9h
dFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6Om5vZGVB
dFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3Qu
aDoKKyAgICAgICAgKFJlbmRlclNWR0ZvcmVpZ25PYmplY3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHTW9kZWxPYmplY3Q6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR01vZGVsT2JqZWN0Lmg6CisgICAgICAgIChSZW5kZXJTVkdNb2RlbE9iamVjdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jvb3QuaDoKKyAgICAgICAgKFJlbmRlclNWR1Jvb3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdUZXh0Ojpub2RlQXRGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Rl
eHQ6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQu
aDoKKyAgICAgICAgKFJlbmRlclNWR1RleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZH
SW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94Ojpu
b2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94Lmg6
CisgICAgICAgIChTVkdJbmxpbmVUZXh0Qm94KToKKwogMjAxMi0wOC0yNCAgS2VudGFybyBIYXJh
ICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3ZlIFJlZlB0ciBmcm9tIEhU
TUxUZXh0QXJlYUVsZW1lbnQ6Om1fcGxhY2Vob2xkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RWxsaXBzaXNCb3guY3BwCmluZGV4IGMyNTY3M2Q5MzdmZTJkYzY3NDY5ODVkZTZiZjU4ZDMyN2Jm
YzNmOGIuLjkwMmRmMmIwYThiZmExNmZjMWI2Yzg1ODJmMGMzMjdiMDc2MGE2ZDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcApAQCAtMTIxLDcgKzEyMSw3IEBAIHZv
aWQgRWxsaXBzaXNCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhCiAgICAgY29udGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQo
Zm9udCwgUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4ocmVuZGVyZXIoKSwgZm9udCwgbV9z
dHIsIHN0eWxlLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKSwgcm91bmRlZEludFBv
aW50KExheW91dFBvaW50KHgoKSArIHBhaW50T2Zmc2V0LngoKSwgeSgpICsgcGFpbnRPZmZzZXQu
eSgpICsgdG9wKSksIGgsIGMsIHN0eWxlLT5jb2xvclNwYWNlKCkpOwogfQogCi1ib29sIEVsbGlw
c2lzQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBIaXRUZXN0UG9pbnQmLCBjb25zdCBMYXlvdXRQb2ludCYsIExheW91dFVuaXQsIExh
eW91dFVuaXQpCitib29sIEVsbGlwc2lzQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBMYXlv
dXRQb2ludCYsIExheW91dFVuaXQsIExheW91dFVuaXQpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaAppbmRleCBjNzU5YTM5N2ViNjUy
ZWNhMjAwM2I4Yzk0ZjgzZWUyYjkxZDIwM2YxLi42OTk3Njc4NDdlNjA2ZjRmOTY4OGE2MTg1MTQy
Y2IxOTllZDhhNTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBz
aXNCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaApAQCAt
NDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBh
aW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRV
bml0IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5D
b250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5p
dCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIE9WRVJSSURFOworICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBv
aW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxp
bmVCb3R0b20pIE9WRVJSSURFOwogICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoUmVuZGVyT2Jq
ZWN0OjpTZWxlY3Rpb25TdGF0ZSBzKSB7IG1fc2VsZWN0aW9uU3RhdGUgPSBzOyB9CiAgICAgSW50
UmVjdCBzZWxlY3Rpb25SZWN0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9IaXRUZXN0UmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0
UmVzdWx0LmNwcAppbmRleCAwNzQ1NzYzZDE1NDhhOGU2ZDljMzA5NjFjMzkyOWIxZDNhMDc3ZDk5
Li5mNzgyMjYzYWU2MTAxMWZhYjRkODE4ZGU0NGM2MTQ3MDE0NmY0MTJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCkBAIC00OCwxNCArNDgsMTQgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IaXRUZXN0
UG9pbnQ6OkhpdFRlc3RQb2ludCgpCitIaXRUZXN0TG9jYXRpb246OkhpdFRlc3RMb2NhdGlvbigp
CiAgICAgOiBtX3JlZ2lvbigwKQogICAgICwgbV9pc1JlY3RCYXNlZChmYWxzZSkKICAgICAsIG1f
aXNSZWN0aWxpbmVhcih0cnVlKQogewogfQogCi1IaXRUZXN0UG9pbnQ6OkhpdFRlc3RQb2ludChj
b25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCitIaXRUZXN0TG9jYXRpb246OkhpdFRlc3RMb2NhdGlv
bihjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCiAgICAgOiBtX3BvaW50KHBvaW50KQogICAgICwg
bV9ib3VuZGluZ0JveChyZWN0Rm9yUG9pbnQocG9pbnQsIDAsIDAsIDAsIDApKQogICAgICwgbV90
cmFuc2Zvcm1lZFBvaW50KHBvaW50KQpAQCAtNjYsNyArNjYsNyBAQCBIaXRUZXN0UG9pbnQ6Okhp
dFRlc3RQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCiB7CiB9CiAKLUhpdFRlc3RQb2lu
dDo6SGl0VGVzdFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorSGl0VGVzdExvY2F0aW9u
OjpIaXRUZXN0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiAgICAgOiBtX3BvaW50
KGZsb29yZWRMYXlvdXRQb2ludChwb2ludCkpCiAgICAgLCBtX2JvdW5kaW5nQm94KHJlY3RGb3JQ
b2ludChtX3BvaW50LCAwLCAwLCAwLCAwKSkKICAgICAsIG1fdHJhbnNmb3JtZWRQb2ludChwb2lu
dCkKQEAgLTc3LDcgKzc3LDcgQEAgSGl0VGVzdFBvaW50OjpIaXRUZXN0UG9pbnQoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQpCiB7CiB9CiAKLUhpdFRlc3RQb2ludDo6SGl0VGVzdFBvaW50KGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQpCitIaXRUZXN0TG9jYXRp
b246OkhpdFRlc3RMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRmxvYXRR
dWFkJiBxdWFkKQogICAgIDogbV90cmFuc2Zvcm1lZFBvaW50KHBvaW50KQogICAgICwgbV90cmFu
c2Zvcm1lZFJlY3QocXVhZCkKICAgICAsIG1fcmVnaW9uKDApCkBAIC04OCw3ICs4OCw3IEBAIEhp
dFRlc3RQb2ludDo6SGl0VGVzdFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBG
bG9hdFF1YWQmIHF1YWQpCiAgICAgbV9pc1JlY3RpbGluZWFyID0gcXVhZC5pc1JlY3RpbGluZWFy
KCk7CiB9CiAKLUhpdFRlc3RQb2ludDo6SGl0VGVzdFBvaW50KGNvbnN0IExheW91dFBvaW50JiBj
ZW50ZXJQb2ludCwgdW5zaWduZWQgdG9wUGFkZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLCB1
bnNpZ25lZCBib3R0b21QYWRkaW5nLCB1bnNpZ25lZCBsZWZ0UGFkZGluZykKK0hpdFRlc3RMb2Nh
dGlvbjo6SGl0VGVzdExvY2F0aW9uKGNvbnN0IExheW91dFBvaW50JiBjZW50ZXJQb2ludCwgdW5z
aWduZWQgdG9wUGFkZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLCB1bnNpZ25lZCBib3R0b21Q
YWRkaW5nLCB1bnNpZ25lZCBsZWZ0UGFkZGluZykKICAgICA6IG1fcG9pbnQoY2VudGVyUG9pbnQp
CiAgICAgLCBtX2JvdW5kaW5nQm94KHJlY3RGb3JQb2ludChjZW50ZXJQb2ludCwgdG9wUGFkZGlu
ZywgcmlnaHRQYWRkaW5nLCBib3R0b21QYWRkaW5nLCBsZWZ0UGFkZGluZykpCiAgICAgLCBtX3Ry
YW5zZm9ybWVkUG9pbnQoY2VudGVyUG9pbnQpCkBAIC05OSw3ICs5OSw3IEBAIEhpdFRlc3RQb2lu
dDo6SGl0VGVzdFBvaW50KGNvbnN0IExheW91dFBvaW50JiBjZW50ZXJQb2ludCwgdW5zaWduZWQg
dG9wUGFkZGluZywKICAgICBtX3RyYW5zZm9ybWVkUmVjdCA9IEZsb2F0UXVhZChtX2JvdW5kaW5n
Qm94KTsKIH0KIAotSGl0VGVzdFBvaW50OjpIaXRUZXN0UG9pbnQoY29uc3QgSGl0VGVzdFBvaW50
JiBvdGhlciwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0LCBSZW5kZXJSZWdpb24qIHJlZ2lvbikK
K0hpdFRlc3RMb2NhdGlvbjo6SGl0VGVzdExvY2F0aW9uKGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYg
b3RoZXIsIGNvbnN0IExheW91dFNpemUmIG9mZnNldCwgUmVuZGVyUmVnaW9uKiByZWdpb24pCiAg
ICAgOiBtX3BvaW50KG90aGVyLm1fcG9pbnQpCiAgICAgLCBtX2JvdW5kaW5nQm94KG90aGVyLm1f
Ym91bmRpbmdCb3gpCiAgICAgLCBtX3RyYW5zZm9ybWVkUG9pbnQob3RoZXIubV90cmFuc2Zvcm1l
ZFBvaW50KQpAQCAtMTExLDcgKzExMSw3IEBAIEhpdFRlc3RQb2ludDo6SGl0VGVzdFBvaW50KGNv
bnN0IEhpdFRlc3RQb2ludCYgb3RoZXIsIGNvbnN0IExheW91dFNpemUmIG9mZnNldCwKICAgICBt
b3ZlKG9mZnNldCk7CiB9CiAKLUhpdFRlc3RQb2ludDo6SGl0VGVzdFBvaW50KGNvbnN0IEhpdFRl
c3RQb2ludCYgb3RoZXIpCitIaXRUZXN0TG9jYXRpb246OkhpdFRlc3RMb2NhdGlvbihjb25zdCBI
aXRUZXN0TG9jYXRpb24mIG90aGVyKQogICAgIDogbV9wb2ludChvdGhlci5tX3BvaW50KQogICAg
ICwgbV9ib3VuZGluZ0JveChvdGhlci5tX2JvdW5kaW5nQm94KQogICAgICwgbV90cmFuc2Zvcm1l
ZFBvaW50KG90aGVyLm1fdHJhbnNmb3JtZWRQb2ludCkKQEAgLTEyMiwxMSArMTIyLDExIEBAIEhp
dFRlc3RQb2ludDo6SGl0VGVzdFBvaW50KGNvbnN0IEhpdFRlc3RQb2ludCYgb3RoZXIpCiB7CiB9
CiAKLUhpdFRlc3RQb2ludDo6fkhpdFRlc3RQb2ludCgpCitIaXRUZXN0TG9jYXRpb246On5IaXRU
ZXN0TG9jYXRpb24oKQogewogfQogCi1IaXRUZXN0UG9pbnQmIEhpdFRlc3RQb2ludDo6b3BlcmF0
b3I9KGNvbnN0IEhpdFRlc3RQb2ludCYgb3RoZXIpCitIaXRUZXN0TG9jYXRpb24mIEhpdFRlc3RM
b2NhdGlvbjo6b3BlcmF0b3I9KGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgb3RoZXIpCiB7CiAgICAg
bV9wb2ludCA9IG90aGVyLm1fcG9pbnQ7CiAgICAgbV9ib3VuZGluZ0JveCA9IG90aGVyLm1fYm91
bmRpbmdCb3g7CkBAIC0xMzksNyArMTM5LDcgQEAgSGl0VGVzdFBvaW50JiBIaXRUZXN0UG9pbnQ6
Om9wZXJhdG9yPShjb25zdCBIaXRUZXN0UG9pbnQmIG90aGVyKQogICAgIHJldHVybiAqdGhpczsK
IH0KIAotdm9pZCBIaXRUZXN0UG9pbnQ6Om1vdmUoY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0KQor
dm9pZCBIaXRUZXN0TG9jYXRpb246Om1vdmUoY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0KQogewog
ICAgIG1fcG9pbnQubW92ZShvZmZzZXQpOwogICAgIG1fdHJhbnNmb3JtZWRQb2ludC5tb3ZlKG9m
ZnNldCk7CkBAIC0xNDgsNyArMTQ4LDcgQEAgdm9pZCBIaXRUZXN0UG9pbnQ6Om1vdmUoY29uc3Qg
TGF5b3V0U2l6ZSYgb2Zmc2V0KQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBSZWN0VHlwZT4KLWJv
b2wgSGl0VGVzdFBvaW50OjppbnRlcnNlY3RzUmVjdChjb25zdCBSZWN0VHlwZSYgcmVjdCkgY29u
c3QKK2Jvb2wgSGl0VGVzdExvY2F0aW9uOjppbnRlcnNlY3RzUmVjdChjb25zdCBSZWN0VHlwZSYg
cmVjdCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogV2hlbiB0aGUgaGl0IHRlc3QgaXMgbm90IHJl
Y3QgYmFzZWQgd2Ugc2hvdWxkIHVzZSByZWN0LmNvbnRhaW5zKG1fcG9pbnQpLgogICAgIC8vIFRo
YXQgZG9lcyBjaGFuZ2Ugc29tZSBjb3JuZXIgY2FzZSB0ZXN0cyB0aG91Z2guCkBAIC0xNjksMTcg
KzE2OSwxNyBAQCBib29sIEhpdFRlc3RQb2ludDo6aW50ZXJzZWN0c1JlY3QoY29uc3QgUmVjdFR5
cGUmIHJlY3QpIGNvbnN0CiAgICAgcmV0dXJuIG1fdHJhbnNmb3JtZWRSZWN0LmludGVyc2VjdHNS
ZWN0KHJlY3QpOwogfQogCi1ib29sIEhpdFRlc3RQb2ludDo6aW50ZXJzZWN0cyhjb25zdCBMYXlv
dXRSZWN0JiByZWN0KSBjb25zdAorYm9vbCBIaXRUZXN0TG9jYXRpb246OmludGVyc2VjdHMoY29u
c3QgTGF5b3V0UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gaW50ZXJzZWN0c1JlY3Qo
cmVjdCk7CiB9CiAKLWJvb2wgSGl0VGVzdFBvaW50OjppbnRlcnNlY3RzKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkgY29uc3QKK2Jvb2wgSGl0VGVzdExvY2F0aW9uOjppbnRlcnNlY3RzKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gaW50ZXJzZWN0c1JlY3QocmVjdCk7
CiB9CiAKLUludFJlY3QgSGl0VGVzdFBvaW50OjpyZWN0Rm9yUG9pbnQoY29uc3QgTGF5b3V0UG9p
bnQmIHBvaW50LCB1bnNpZ25lZCB0b3BQYWRkaW5nLCB1bnNpZ25lZCByaWdodFBhZGRpbmcsIHVu
c2lnbmVkIGJvdHRvbVBhZGRpbmcsIHVuc2lnbmVkIGxlZnRQYWRkaW5nKQorSW50UmVjdCBIaXRU
ZXN0TG9jYXRpb246OnJlY3RGb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIHVuc2ln
bmVkIHRvcFBhZGRpbmcsIHVuc2lnbmVkIHJpZ2h0UGFkZGluZywgdW5zaWduZWQgYm90dG9tUGFk
ZGluZywgdW5zaWduZWQgbGVmdFBhZGRpbmcpCiB7CiAgICAgSW50UG9pbnQgYWN0dWFsUG9pbnQo
Zmxvb3JlZEludFBvaW50KHBvaW50KSk7CiAgICAgYWN0dWFsUG9pbnQgLT0gSW50U2l6ZShsZWZ0
UGFkZGluZywgdG9wUGFkZGluZyk7CkBAIC0xOTIsMzQgKzE5MiwzNCBAQCBJbnRSZWN0IEhpdFRl
c3RQb2ludDo6cmVjdEZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgdW5zaWduZWQg
dG9wUGFkZGluZwogICAgIHJldHVybiBJbnRSZWN0KGFjdHVhbFBvaW50LCBhY3R1YWxQYWRkaW5n
KTsKIH0KIAotSGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdCgpIDogSGl0VGVzdFBvaW50KCkK
K0hpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoKSA6IEhpdFRlc3RMb2NhdGlvbigpCiAgICAg
LCBtX2lzT3ZlcldpZGdldChmYWxzZSkKICAgICAsIG1fc2hhZG93Q29udGVudEZpbHRlclBvbGlj
eShEb05vdEFsbG93U2hhZG93Q29udGVudCkKIHsKIH0KIAotSGl0VGVzdFJlc3VsdDo6SGl0VGVz
dFJlc3VsdChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpIDogSGl0VGVzdFBvaW50KHBvaW50KQor
SGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpIDog
SGl0VGVzdExvY2F0aW9uKHBvaW50KQogICAgICwgbV9pc092ZXJXaWRnZXQoZmFsc2UpCiAgICAg
LCBtX3NoYWRvd0NvbnRlbnRGaWx0ZXJQb2xpY3koRG9Ob3RBbGxvd1NoYWRvd0NvbnRlbnQpCiB7
CiB9CiAKIEhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgTGF5b3V0UG9pbnQmIGNl
bnRlclBvaW50LCB1bnNpZ25lZCB0b3BQYWRkaW5nLCB1bnNpZ25lZCByaWdodFBhZGRpbmcsIHVu
c2lnbmVkIGJvdHRvbVBhZGRpbmcsIHVuc2lnbmVkIGxlZnRQYWRkaW5nLCBTaGFkb3dDb250ZW50
RmlsdGVyUG9saWN5IGFsbG93U2hhZG93Q29udGVudCkKLSAgICA6IEhpdFRlc3RQb2ludChjZW50
ZXJQb2ludCwgdG9wUGFkZGluZywgcmlnaHRQYWRkaW5nLCBib3R0b21QYWRkaW5nLCBsZWZ0UGFk
ZGluZykKKyAgICA6IEhpdFRlc3RMb2NhdGlvbihjZW50ZXJQb2ludCwgdG9wUGFkZGluZywgcmln
aHRQYWRkaW5nLCBib3R0b21QYWRkaW5nLCBsZWZ0UGFkZGluZykKICAgICAsIG1faXNPdmVyV2lk
Z2V0KGZhbHNlKQogICAgICwgbV9zaGFkb3dDb250ZW50RmlsdGVyUG9saWN5KGFsbG93U2hhZG93
Q29udGVudCkKIHsKIH0KIAotSGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdChjb25zdCBIaXRU
ZXN0UG9pbnQmIG90aGVyLCBTaGFkb3dDb250ZW50RmlsdGVyUG9saWN5IGFsbG93U2hhZG93Q29u
dGVudCkKLSAgICA6IEhpdFRlc3RQb2ludChvdGhlcikKK0hpdFRlc3RSZXN1bHQ6OkhpdFRlc3RS
ZXN1bHQoY29uc3QgSGl0VGVzdExvY2F0aW9uJiBvdGhlciwgU2hhZG93Q29udGVudEZpbHRlclBv
bGljeSBhbGxvd1NoYWRvd0NvbnRlbnQpCisgICAgOiBIaXRUZXN0TG9jYXRpb24ob3RoZXIpCiAg
ICAgLCBtX2lzT3ZlcldpZGdldChmYWxzZSkKICAgICAsIG1fc2hhZG93Q29udGVudEZpbHRlclBv
bGljeShhbGxvd1NoYWRvd0NvbnRlbnQpCiB7CiB9CiAKIEhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RS
ZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgb3RoZXIpCi0gICAgOiBIaXRUZXN0UG9pbnQob3Ro
ZXIpCisgICAgOiBIaXRUZXN0TG9jYXRpb24ob3RoZXIpCiAgICAgLCBtX2lubmVyTm9kZShvdGhl
ci5pbm5lck5vZGUoKSkKICAgICAsIG1faW5uZXJOb25TaGFyZWROb2RlKG90aGVyLmlubmVyTm9u
U2hhcmVkTm9kZSgpKQogICAgICwgbV9sb2NhbFBvaW50KG90aGVyLmxvY2FsUG9pbnQoKSkKQEAg
LTIzOCw3ICsyMzgsNyBAQCBIaXRUZXN0UmVzdWx0Ojp+SGl0VGVzdFJlc3VsdCgpCiAKIEhpdFRl
c3RSZXN1bHQmIEhpdFRlc3RSZXN1bHQ6Om9wZXJhdG9yPShjb25zdCBIaXRUZXN0UmVzdWx0JiBv
dGhlcikKIHsKLSAgICBIaXRUZXN0UG9pbnQ6Om9wZXJhdG9yPShvdGhlcik7CisgICAgSGl0VGVz
dExvY2F0aW9uOjpvcGVyYXRvcj0ob3RoZXIpOwogICAgIG1faW5uZXJOb2RlID0gb3RoZXIuaW5u
ZXJOb2RlKCk7CiAgICAgbV9pbm5lck5vblNoYXJlZE5vZGUgPSBvdGhlci5pbm5lck5vblNoYXJl
ZE5vZGUoKTsKICAgICBtX2xvY2FsUG9pbnQgPSBvdGhlci5sb2NhbFBvaW50KCk7CkBAIC02NzQs
NyArNjc0LDcgQEAgYm9vbCBIaXRUZXN0UmVzdWx0Ojppc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0
CiAgICAgcmV0dXJuIG1faW5uZXJOb25TaGFyZWROb2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKTsK
IH0KIAotYm9vbCBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KE5v
ZGUqIG5vZGUsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5
b3V0UmVjdCYgcmVjdCkKK2Jvb2wgSGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRvUmVjdEJhc2VkVGVz
dFJlc3VsdChOb2RlKiBub2RlLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250
YWluZXIsIGNvbnN0IExheW91dFJlY3QmIHJlY3QpCiB7CiAgICAgLy8gSWYgaXQgaXMgbm90IGEg
cmVjdC1iYXNlZCBoaXQgdGVzdCwgdGhpcyBtZXRob2QgaGFzIHRvIGJlIG5vLW9wLgogICAgIC8v
IFJldHVybiBmYWxzZSwgc28gdGhlIGhpdCB0ZXN0IHN0b3BzLgpAQCAtNjkwLDcgKzY5MCw3IEBA
IGJvb2wgSGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChOb2RlKiBu
b2RlLCBjb25zdCBIaXRUZXN0UG9pbnQmCiAKICAgICBtdXRhYmxlUmVjdEJhc2VkVGVzdFJlc3Vs
dCgpLmFkZChub2RlKTsKIAotICAgIGJvb2wgcmVnaW9uRmlsbGVkID0gcmVjdC5jb250YWlucyhw
b2ludEluQ29udGFpbmVyLmJvdW5kaW5nQm94KCkpOworICAgIGJvb2wgcmVnaW9uRmlsbGVkID0g
cmVjdC5jb250YWlucyhsb2NhdGlvbkluQ29udGFpbmVyLmJvdW5kaW5nQm94KCkpOwogICAgIC8v
IEZJWE1FOiBUaGlzIGNvZGUgKGluY29ycmVjdGx5KSBhdHRlbXB0cyB0byBjb3JyZWN0IGZvciBj
dWxsZWQgaW5saW5lIG5vZGVzLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg1ODQ5LgogICAgIGlmIChub2RlLT5yZW5kZXJlcigpLT5pc0lubGluZSgpICYmICFy
ZWdpb25GaWxsZWQpIHsKICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBub2RlLT5y
ZW5kZXJlcigpLT5wYXJlbnQoKTsgY3VycjsgY3VyciA9IGN1cnItPnBhcmVudCgpKSB7CkBAIC03
MDksNyArNzA5LDcgQEAgYm9vbCBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9SZWN0QmFzZWRUZXN0
UmVzdWx0KE5vZGUqIG5vZGUsIGNvbnN0IEhpdFRlc3RQb2ludCYKICAgICByZXR1cm4gIXJlZ2lv
bkZpbGxlZDsKIH0KIAotYm9vbCBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9SZWN0QmFzZWRUZXN0
UmVzdWx0KE5vZGUqIG5vZGUsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwg
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQorYm9vbCBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9SZWN0
QmFzZWRUZXN0UmVzdWx0KE5vZGUqIG5vZGUsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRp
b25JbkNvbnRhaW5lciwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIC8vIElmIGl0IGlz
IG5vdCBhIHJlY3QtYmFzZWQgaGl0IHRlc3QsIHRoaXMgbWV0aG9kIGhhcyB0byBiZSBuby1vcC4K
ICAgICAvLyBSZXR1cm4gZmFsc2UsIHNvIHRoZSBoaXQgdGVzdCBzdG9wcy4KQEAgLTcyNSw3ICs3
MjUsNyBAQCBib29sIEhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQo
Tm9kZSogbm9kZSwgY29uc3QgSGl0VGVzdFBvaW50JgogCiAgICAgbXV0YWJsZVJlY3RCYXNlZFRl
c3RSZXN1bHQoKS5hZGQobm9kZSk7CiAKLSAgICBib29sIHJlZ2lvbkZpbGxlZCA9IHJlY3QuY29u
dGFpbnMocG9pbnRJbkNvbnRhaW5lci5ib3VuZGluZ0JveCgpKTsKKyAgICBib29sIHJlZ2lvbkZp
bGxlZCA9IHJlY3QuY29udGFpbnMobG9jYXRpb25JbkNvbnRhaW5lci5ib3VuZGluZ0JveCgpKTsK
ICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIChpbmNvcnJlY3RseSkgYXR0ZW1wdHMgdG8gY29ycmVj
dCBmb3IgY3VsbGVkIGlubGluZSBub2Rlcy4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04NTg0OS4KICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKS0+aXNJbmxpbmUo
KSAmJiAhcmVnaW9uRmlsbGVkKSB7CiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0g
bm9kZS0+cmVuZGVyZXIoKS0+cGFyZW50KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkg
ewpAQCAtNzg0LDcgKzc4NCw3IEBAIFZlY3RvcjxTdHJpbmc+IEhpdFRlc3RSZXN1bHQ6OmRpY3Rh
dGlvbkFsdGVybmF0aXZlcygpIGNvbnN0CiAgICAgaWYgKCFtX2lubmVyTm9uU2hhcmVkTm9kZSkK
ICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKLSAgICBEb2N1bWVudE1hcmtlciog
bWFya2VyID0gbV9pbm5lck5vblNoYXJlZE5vZGUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+bWFy
a2VyQ29udGFpbmluZ1BvaW50KGhpdFRlc3RQb2ludCgpLnBvaW50KCksIERvY3VtZW50TWFya2Vy
OjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOworICAgIERvY3VtZW50TWFya2VyKiBtYXJrZXIgPSBt
X2lubmVyTm9uU2hhcmVkTm9kZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5tYXJrZXJDb250YWlu
aW5nUG9pbnQoaGl0VGVzdExvY2F0aW9uKCkucG9pbnQoKSwgRG9jdW1lbnRNYXJrZXI6OkRpY3Rh
dGlvbkFsdGVybmF0aXZlcyk7CiAgICAgaWYgKCFtYXJrZXIpCiAgICAgICAgIHJldHVybiBWZWN0
b3I8U3RyaW5nPigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0
VGVzdFJlc3VsdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaApp
bmRleCA5ZDE2YmYwNDIwZDc4ZDA3YTYwZjk4ZjIzZTM5ZTU5NjhhOGZlMDY4Li4zYjM0MmZjOTkz
NGZlYTc4NTY5YjhlZTMwMGY4MWRjNDVhZWRkNGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9IaXRUZXN0UmVzdWx0LmgKQEAgLTQ3LDIwICs0NywyMCBAQCBjbGFzcyBTY3JvbGxiYXI7CiAK
IGVudW0gU2hhZG93Q29udGVudEZpbHRlclBvbGljeSB7IERvTm90QWxsb3dTaGFkb3dDb250ZW50
LCBBbGxvd1NoYWRvd0NvbnRlbnQgfTsKIAotY2xhc3MgSGl0VGVzdFBvaW50IHsKK2NsYXNzIEhp
dFRlc3RMb2NhdGlvbiB7CiBwdWJsaWM6CiAKLSAgICBIaXRUZXN0UG9pbnQoKTsKLSAgICBIaXRU
ZXN0UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICBIaXRUZXN0UG9pbnQoY29uc3QgRmxv
YXRQb2ludCYpOwotICAgIEhpdFRlc3RQb2ludChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxv
YXRRdWFkJik7CisgICAgSGl0VGVzdExvY2F0aW9uKCk7CisgICAgSGl0VGVzdExvY2F0aW9uKGNv
bnN0IExheW91dFBvaW50Jik7CisgICAgSGl0VGVzdExvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
KTsKKyAgICBIaXRUZXN0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UXVh
ZCYpOwogICAgIC8vIFBhc3Mgbm9uLXplcm8gcGFkZGluZyB2YWx1ZXMgdG8gcGVyZm9ybSBhIHJl
Y3QtYmFzZWQgaGl0IHRlc3QuCi0gICAgSGl0VGVzdFBvaW50KGNvbnN0IExheW91dFBvaW50JiBj
ZW50ZXJQb2ludCwgdW5zaWduZWQgdG9wUGFkZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLCB1
bnNpZ25lZCBib3R0b21QYWRkaW5nLCB1bnNpZ25lZCBsZWZ0UGFkZGluZyk7Ci0gICAgLy8gTWFr
ZSBhIGNvcHkgdGhlIEhpdFRlc3RQb2ludCBpbiBhIG5ldyByZWdpb24gYnkgYXBwbHlpbmcgZ2l2
ZW4gb2Zmc2V0IHRvIGludGVybmFsIHBvaW50IGFuZCBhcmVhLgotICAgIEhpdFRlc3RQb2ludChj
b25zdCBIaXRUZXN0UG9pbnQmLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXQsIFJlbmRlclJlZ2lv
biopOwotICAgIEhpdFRlc3RQb2ludChjb25zdCBIaXRUZXN0UG9pbnQmKTsKLSAgICB+SGl0VGVz
dFBvaW50KCk7Ci0gICAgSGl0VGVzdFBvaW50JiBvcGVyYXRvcj0oY29uc3QgSGl0VGVzdFBvaW50
Jik7CisgICAgSGl0VGVzdExvY2F0aW9uKGNvbnN0IExheW91dFBvaW50JiBjZW50ZXJQb2ludCwg
dW5zaWduZWQgdG9wUGFkZGluZywgdW5zaWduZWQgcmlnaHRQYWRkaW5nLCB1bnNpZ25lZCBib3R0
b21QYWRkaW5nLCB1bnNpZ25lZCBsZWZ0UGFkZGluZyk7CisgICAgLy8gTWFrZSBhIGNvcHkgdGhl
IEhpdFRlc3RMb2NhdGlvbiBpbiBhIG5ldyByZWdpb24gYnkgYXBwbHlpbmcgZ2l2ZW4gb2Zmc2V0
IHRvIGludGVybmFsIHBvaW50IGFuZCBhcmVhLgorICAgIEhpdFRlc3RMb2NhdGlvbihjb25zdCBI
aXRUZXN0TG9jYXRpb24mLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXQsIFJlbmRlclJlZ2lvbiop
OworICAgIEhpdFRlc3RMb2NhdGlvbihjb25zdCBIaXRUZXN0TG9jYXRpb24mKTsKKyAgICB+SGl0
VGVzdExvY2F0aW9uKCk7CisgICAgSGl0VGVzdExvY2F0aW9uJiBvcGVyYXRvcj0oY29uc3QgSGl0
VGVzdExvY2F0aW9uJik7CiAKICAgICBMYXlvdXRQb2ludCBwb2ludCgpIGNvbnN0IHsgcmV0dXJu
IG1fcG9pbnQ7IH0KICAgICBJbnRQb2ludCByb3VuZGVkUG9pbnQoKSBjb25zdCB7IHJldHVybiBy
b3VuZGVkSW50UG9pbnQobV9wb2ludCk7IH0KQEAgLTEwMiw3ICsxMDIsNyBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9pc1JlY3RpbGluZWFyOwogfTsKIAotY2xhc3MgSGl0VGVzdFJlc3VsdCA6IHB1
YmxpYyBIaXRUZXN0UG9pbnQgeworY2xhc3MgSGl0VGVzdFJlc3VsdCA6IHB1YmxpYyBIaXRUZXN0
TG9jYXRpb24gewogcHVibGljOgogICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+
ID4gTm9kZVNldDsKIApAQCAtMTEwLDcgKzExMCw3IEBAIHB1YmxpYzoKICAgICBIaXRUZXN0UmVz
dWx0KGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgLy8gUGFzcyBub24tbmVnYXRpdmUgcGFkZGlu
ZyB2YWx1ZXMgdG8gcGVyZm9ybSBhIHJlY3QtYmFzZWQgaGl0IHRlc3QuCiAgICAgSGl0VGVzdFJl
c3VsdChjb25zdCBMYXlvdXRQb2ludCYgY2VudGVyUG9pbnQsIHVuc2lnbmVkIHRvcFBhZGRpbmcs
IHVuc2lnbmVkIHJpZ2h0UGFkZGluZywgdW5zaWduZWQgYm90dG9tUGFkZGluZywgdW5zaWduZWQg
bGVmdFBhZGRpbmcsIFNoYWRvd0NvbnRlbnRGaWx0ZXJQb2xpY3kpOwotICAgIEhpdFRlc3RSZXN1
bHQoY29uc3QgSGl0VGVzdFBvaW50JiwgU2hhZG93Q29udGVudEZpbHRlclBvbGljeSk7CisgICAg
SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBTaGFkb3dDb250ZW50RmlsdGVy
UG9saWN5KTsKICAgICBIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKICAgICB+
SGl0VGVzdFJlc3VsdCgpOwogICAgIEhpdFRlc3RSZXN1bHQmIG9wZXJhdG9yPShjb25zdCBIaXRU
ZXN0UmVzdWx0Jik7CkBAIC0xMjQsNyArMTI0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRU
b05vblNoYWRvd0FuY2VzdG9yKCk7CiAKLSAgICBjb25zdCBIaXRUZXN0UG9pbnQmIGhpdFRlc3RQ
b2ludCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgY29uc3QgSGl0VGVzdExvY2F0aW9u
JiBoaXRUZXN0TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQogICAgIFNoYWRvd0Nv
bnRlbnRGaWx0ZXJQb2xpY3kgc2hhZG93Q29udGVudEZpbHRlclBvbGljeSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2hhZG93Q29udGVudEZpbHRlclBvbGljeTsgfQogCiAgICAgdm9pZCBzZXRJbm5lck5v
ZGUoTm9kZSopOwpAQCAtMTY2LDggKzE2Niw4IEBAIHB1YmxpYzoKIAogICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiBpdCBpcyByZWN0LWJhc2VkIGhpdCB0ZXN0IGFuZCBuZWVkcyB0byBjb250aW51ZSB1
bnRpbCB0aGUgcmVjdCBpcyBmdWxseQogICAgIC8vIGVuY2xvc2VkIGJ5IHRoZSBib3VuZGFyaWVz
IG9mIGEgbm9kZS4KLSAgICBib29sIGFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSos
IGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UmVjdCYg
PSBMYXlvdXRSZWN0KCkpOwotICAgIGJvb2wgYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChO
b2RlKiwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBGbG9hdFJl
Y3QmKTsKKyAgICBib29sIGFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSosIGNvbnN0
IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UmVjdCYg
PSBMYXlvdXRSZWN0KCkpOworICAgIGJvb2wgYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChO
b2RlKiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBG
bG9hdFJlY3QmKTsKICAgICB2b2lkIGFwcGVuZChjb25zdCBIaXRUZXN0UmVzdWx0Jik7CiAKICAg
ICAvLyBJZiBtX3JlY3RCYXNlZFRlc3RSZXN1bHQgaXMgMCB0aGVuIHNldCBpdCB0byBhIG5ldyBO
b2RlU2V0LiBSZXR1cm4gKm1fcmVjdEJhc2VkVGVzdFJlc3VsdC4gTGF6eSBhbGxvY2F0aW9uIG1h
a2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCmluZGV4IGJlM2M5YzdjZjQ0
NjQ0N2IwMWE4MjZhZDYyMzFmYzIwZGY2N2RlMjEuLjAxNzQyZTViZmIwMWYzMmEyZGJjYzU5ODIy
ZGYzOWZkMjdjNTM3ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCkBA
IC0yNDMsMTIgKzI0MywxMiBAQCB2b2lkIElubGluZUJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgTGF5bwogICAgIH0KIH0KIAot
Ym9vbCBJbmxpbmVCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IC8q
IGxpbmVUb3AgKi8sIExheW91dFVuaXQgLypsaW5lQm90dG9tKi8pCitib29sIElubGluZUJveDo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgLyogbGluZVRvcCAq
LywgTGF5b3V0VW5pdCAvKmxpbmVCb3R0b20qLykKIHsKICAgICAvLyBIaXQgdGVzdCBhbGwgcGhh
c2VzIG9mIHJlcGxhY2VkIGVsZW1lbnRzIGF0b21pY2FsbHksIGFzIHRob3VnaCB0aGUgcmVwbGFj
ZWQgZWxlbWVudCBlc3RhYmxpc2hlZCBpdHMKICAgICAvLyBvd24gc3RhY2tpbmcgY29udGV4dC4g
IChTZWUgQXBwZW5kaXggRS4yLCBzZWN0aW9uIDYuNCBvbiBpbmxpbmUgYmxvY2svdGFibGUgZWxl
bWVudHMgaW4gdGhlIENTUzIuMQogICAgIC8vIHNwZWNpZmljYXRpb24uKQotICAgIHJldHVybiBy
ZW5kZXJlcigpLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNj
dW11bGF0ZWRPZmZzZXQpOworICAgIHJldHVybiByZW5kZXJlcigpLT5oaXRUZXN0KHJlcXVlc3Qs
IHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQpOwogfQogCiBj
b25zdCBSb290SW5saW5lQm94KiBJbmxpbmVCb3g6OnJvb3QoKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUJveC5oCmluZGV4IDBlZGFiMmMzM2YzYTNlYTkwZjhlZWFkZGQwYjFkYmQy
NGU0MzE5ZjUuLmQ4ZjdlM2MxNzE4MjQyOTViNWI4Njg5ODU1ZjIyMmM5YTIxODA0YTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQ
b2ludCYsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKTsKLSAgICB2
aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBs
aW5lQm90dG9tKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbklu
Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVu
aXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKTsKIAogICAgIC8vIE92ZXJsb2FkZWQg
bmV3IG9wZXJhdG9yLgogICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIFJlbmRlckFyZW5h
Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKaW5kZXggMTI2
ZGIyN2Y5ODExZDE1Yjc5ZTNhODA3Y2JmZjFhZTFjM2E3NGIyMy4uNjE1YTRiMGIxZGVjYjE0MzBh
YmQ5N2Q0YjI4YmQxNGUzY2E0MDI4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVGbG93Qm94LmNwcApAQCAtOTcxLDE4ICs5NzEsMTggQEAgdm9pZCBJbmxpbmVGbG93Qm94Ojpz
ZXRPdmVyZmxvd0Zyb21Mb2dpY2FsUmVjdHMoY29uc3QgTGF5b3V0UmVjdCYgbG9naWNhbExheW91
dE8KICAgICBzZXRWaXN1YWxPdmVyZmxvdyh2aXN1YWxPdmVyZmxvdywgbGluZVRvcCwgbGluZUJv
dHRvbSk7CiB9CiAKLWJvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKQorYm9vbCBJbmxp
bmVGbG93Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBs
aW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pCiB7CiAgICAgTGF5b3V0UmVjdCBvdmVyZmxv
d1JlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KGxpbmVUb3AsIGxpbmVCb3R0b20pKTsKICAgICBmbGlw
Rm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKICAgICBvdmVyZmxvd1JlY3QubW92ZUJ5KGFj
Y3VtdWxhdGVkT2Zmc2V0KTsKLSAgICBpZiAoIXBvaW50SW5Db250YWluZXIuaW50ZXJzZWN0cyhv
dmVyZmxvd1JlY3QpKQorICAgIGlmICghbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKG92
ZXJmbG93UmVjdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIENoZWNrIGNoaWxk
cmVuIGZpcnN0LgogICAgIGZvciAoSW5saW5lQm94KiBjdXJyID0gbGFzdENoaWxkKCk7IGN1cnI7
IGN1cnIgPSBjdXJyLT5wcmV2T25MaW5lKCkpIHsKLSAgICAgICAgaWYgKChjdXJyLT5yZW5kZXJl
cigpLT5pc1RleHQoKSB8fCAhY3Vyci0+Ym94TW9kZWxPYmplY3QoKS0+aGFzU2VsZlBhaW50aW5n
TGF5ZXIoKSkgJiYgY3Vyci0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29u
dGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSkpIHsKLSAgICAg
ICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29u
dGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKKyAgICAg
ICAgaWYgKChjdXJyLT5yZW5kZXJlcigpLT5pc1RleHQoKSB8fCAhY3Vyci0+Ym94TW9kZWxPYmpl
Y3QoKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgJiYgY3Vyci0+bm9kZUF0UG9pbnQocmVxdWVz
dCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgbGluZVRv
cCwgbGluZUJvdHRvbSkpIHsKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RS
ZXN1bHQocmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUo
YWNjdW11bGF0ZWRPZmZzZXQpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAgICAgfQpAQCAtMTAxMCw5ICsxMDEwLDkgQEAgYm9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmUKICAg
ICBmbGlwRm9yV3JpdGluZ01vZGUocmVjdCk7CiAgICAgcmVjdC5tb3ZlQnkoYWNjdW11bGF0ZWRP
ZmZzZXQpOwogCi0gICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBwb2ludEluQ29udGFp
bmVyLmludGVyc2VjdHMocmVjdCkpIHsKLSAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVz
dFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShwb2ludEluQ29udGFpbmVyLnBvaW50
KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7IC8vIERvbid0IGFkZCBpbiBt
X3ggb3IgbV95IGhlcmUsIHdlIHdhbnQgY29vcmRzIGluIHRoZSBjb250YWluaW5nIGJsb2NrJ3Mg
c3BhY2UuCi0gICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQo
cmVuZGVyZXIoKS0+bm9kZSgpLCBwb2ludEluQ29udGFpbmVyLCByZWN0KSkKKyAgICBpZiAodmlz
aWJsZVRvSGl0VGVzdGluZygpICYmIGxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhyZWN0
KSkgeworICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxp
cEZvcldyaXRpbmdNb2RlKGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6
ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsgLy8gRG9uJ3QgYWRkIGluIG1feCBvciBtX3kgaGVyZSwg
d2Ugd2FudCBjb29yZHMgaW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBzcGFjZS4KKyAgICAgICAg
aWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLT5ub2Rl
KCksIGxvY2F0aW9uSW5Db250YWluZXIsIHJlY3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAppbmRleCAz
MjgzOWYxNWY4NzQyZjc4MTEzOTY5ZjM3MmQyZjA5MmI2Nzc3NDQwLi41YTM0ZjZjNjU3OWJhMmEy
YzEzMWY1MWI0YjlkMDhmZTA0Yjc1ZjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVGbG93Qm94LmgKQEAgLTExNiw3ICsxMTYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludEZp
bGxMYXllcihjb25zdCBQYWludEluZm8mLCBjb25zdCBDb2xvciYsIGNvbnN0IEZpbGxMYXllcios
IGNvbnN0IExheW91dFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92
ZXIpOwogICAgIHZvaWQgcGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiwgUmVuZGVyU3R5
bGUqLCBTaGFkb3dTdHlsZSwgY29uc3QgTGF5b3V0UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBw
YWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYsIExheW91dFVuaXQgbGluZVRvcCwg
TGF5b3V0VW5pdCBsaW5lQm90dG9tKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiBw
b2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExh
eW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0
VW5pdCBsaW5lQm90dG9tKSBPVkVSUklERTsKIAogICAgIGJvb2wgYm94U2hhZG93Q2FuQmVBcHBs
aWVkVG9CYWNrZ3JvdW5kKGNvbnN0IEZpbGxMYXllciYpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKaW5kZXggN2Q2MzAzMWRhZDg1OTc0YTYwNzY0
MjYxNjIyNzQwNjFmODhhN2E0MC4uOTJkMDVhMzgyMWEyZmZlOWU4MGQzMzU5N2U1MjQ3ZDRmOGVl
OGJlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApAQCAt
MzQ5LDcgKzM0OSw3IEBAIGJvb2wgSW5saW5lVGV4dEJveDo6aXNMaW5lQnJlYWsoKSBjb25zdAog
ICAgIHJldHVybiByZW5kZXJlcigpLT5pc0JSKCkgfHwgKHJlbmRlcmVyKCktPnN0eWxlKCktPnBy
ZXNlcnZlTmV3bGluZSgpICYmIGxlbigpID09IDEgJiYgKCp0ZXh0UmVuZGVyZXIoKS0+dGV4dCgp
KVtzdGFydCgpXSA9PSAnXG4nKTsKIH0KIAotYm9vbCBJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0
VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIExheW91dFVuaXQgLyogbGluZVRvcCAqLywgTGF5b3V0VW5pdCAvKmxpbmVCb3R0
b20qLykKK2Jvb2wgSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRp
b25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlv
dXRVbml0IC8qIGxpbmVUb3AgKi8sIExheW91dFVuaXQgLypsaW5lQm90dG9tKi8pCiB7CiAgICAg
aWYgKGlzTGluZUJyZWFrKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM1Nyw5ICszNTcs
OSBAQCBib29sIElubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjbwogICAgIEZsb2F0UG9pbnQgYm94T3JpZ2luID0g
bG9jYXRpb25JbmNsdWRpbmdGbGlwcGluZygpOwogICAgIGJveE9yaWdpbi5tb3ZlQnkoYWNjdW11
bGF0ZWRPZmZzZXQpOwogICAgIEZsb2F0UmVjdCByZWN0KGJveE9yaWdpbiwgc2l6ZSgpKTsKLSAg
ICBpZiAobV90cnVuY2F0aW9uICE9IGNGdWxsVHJ1bmNhdGlvbiAmJiB2aXNpYmxlVG9IaXRUZXN0
aW5nKCkgJiYgcG9pbnRJbkNvbnRhaW5lci5pbnRlcnNlY3RzKHJlY3QpKSB7Ci0gICAgICAgIHJl
bmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUo
cG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0
KSkpOwotICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KHJl
bmRlcmVyKCktPm5vZGUoKSwgcG9pbnRJbkNvbnRhaW5lciwgcmVjdCkpCisgICAgaWYgKG1fdHJ1
bmNhdGlvbiAhPSBjRnVsbFRydW5jYXRpb24gJiYgdmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGxv
Y2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhyZWN0KSkgeworICAgICAgICByZW5kZXJlcigp
LT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKGxvY2F0aW9u
SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsK
KyAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJl
cigpLT5ub2RlKCksIGxvY2F0aW9uSW5Db250YWluZXIsIHJlY3QpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5oCmluZGV4IGEzZTc2MzBlNmFlNDVhMWQ3MjI3N2RjOGJkZmExNTZj
OTI0ZGJjMTUuLjA2YmEwNDBmYzg2NTU2NTYwMzE2ZTFiYmU3M2Y4Njg2NWUzYTVjYmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaApAQCAtMTE1LDcgKzExNSw3IEBA
IHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8m
LCBjb25zdCBMYXlvdXRQb2ludCYsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5l
Qm90dG9tKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVy
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRv
cCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0
VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9t
KSBPVkVSUklERTsKIAogcHVibGljOgogICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlcigpIGNv
bnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggMTE5Y2Ji
N2ZkOTA0ODUxMTRjNjRiMjRkZWVlMzE4ODNmOTMxNGY0MC4uOGM2OTgwMTJkYTkxZmM3YTE1Nzkw
ODFjY2IwY2IyNmJkNDUzY2YxZiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCkBAIC00NjQxLDE1ICs0NjQxLDE1IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6Omdl
dENsZWFyRGVsdGEoUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKQogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgUmVuZGVyQmxvY2s6OmlzUG9pbnRJbk92ZXJmbG93
Q29udHJvbChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpCitib29sIFJl
bmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0KQogewogICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBsYXllcigpLT5oaXRUZXN0T3ZlcmZs
b3dDb250cm9scyhyZXN1bHQsIHJvdW5kZWRJbnRQb2ludChwb2ludEluQ29udGFpbmVyIC0gdG9M
YXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOworICAgIHJldHVybiBsYXllcigpLT5oaXRU
ZXN0T3ZlcmZsb3dDb250cm9scyhyZXN1bHQsIHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbkluQ29u
dGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOwogfQogCi1ib29sIFJl
bmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRU
ZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKICAgICBMYXlvdXRQb2ludCBh
ZGp1c3RlZExvY2F0aW9uKGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKSk7CiAgICAgTGF5
b3V0U2l6ZSBsb2NhbE9mZnNldCA9IHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9uKTsKQEAg
LTQ2NTksMjEgKzQ2NTksMjEgQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICAgICAgTGF5
b3V0UmVjdCBvdmVyZmxvd0JveCA9IHZpc3VhbE92ZXJmbG93UmVjdCgpOwogICAgICAgICBmbGlw
Rm9yV3JpdGluZ01vZGUob3ZlcmZsb3dCb3gpOwogICAgICAgICBvdmVyZmxvd0JveC5tb3ZlQnko
YWRqdXN0ZWRMb2NhdGlvbik7Ci0gICAgICAgIGlmICghcG9pbnRJbkNvbnRhaW5lci5pbnRlcnNl
Y3RzKG92ZXJmbG93Qm94KSkKKyAgICAgICAgaWYgKCFsb2NhdGlvbkluQ29udGFpbmVyLmludGVy
c2VjdHMob3ZlcmZsb3dCb3gpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIGlmICgoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kIHx8IGhpdFRl
c3RBY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBpc1BvaW50SW5PdmVy
Zmxvd0NvbnRyb2wocmVzdWx0LCBwb2ludEluQ29udGFpbmVyLnBvaW50KCksIGFkanVzdGVkTG9j
YXRpb24pKSB7Ci0gICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29u
dGFpbmVyLnBvaW50KCkgLSBsb2NhbE9mZnNldCk7CisgICAgaWYgKChoaXRUZXN0QWN0aW9uID09
IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0Q2hpbGRC
bG9ja0JhY2tncm91bmQpICYmIGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChyZXN1bHQsIGxvY2F0
aW9uSW5Db250YWluZXIucG9pbnQoKSwgYWRqdXN0ZWRMb2NhdGlvbikpIHsKKyAgICAgICAgdXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSAtIGxv
Y2FsT2Zmc2V0KTsKICAgICAgICAgLy8gRklYTUU6IGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbCgp
IGRvZXNuJ3QgaGFuZGxlIHJlY3QtYmFzZWQgdGVzdHMgeWV0LgotICAgICAgICBpZiAoIXJlc3Vs
dC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5vZGUoKSwgcG9pbnRJbkNvbnRhaW5lcikp
CisgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgp
LCBsb2NhdGlvbkluQ29udGFpbmVyKSkKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CiAgICAgLy8gSWYgd2UgaGF2ZSBjbGlwcGluZywgdGhlbiB3ZSBjYW4ndCBoYXZlIGFueSBzcGls
bG91dC4KICAgICBib29sIHVzZU92ZXJmbG93Q2xpcCA9IGhhc092ZXJmbG93Q2xpcCgpICYmICFo
YXNTZWxmUGFpbnRpbmdMYXllcigpOwogICAgIGJvb2wgdXNlQ2xpcCA9IChoYXNDb250cm9sQ2xp
cCgpIHx8IHVzZU92ZXJmbG93Q2xpcCk7Ci0gICAgYm9vbCBjaGVja0NoaWxkcmVuID0gIXVzZUNs
aXAgfHwgKGhhc0NvbnRyb2xDbGlwKCkgPyBwb2ludEluQ29udGFpbmVyLmludGVyc2VjdHMoY29u
dHJvbENsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24pKSA6IHBvaW50SW5Db250YWluZXIuaW50ZXJz
ZWN0cyhvdmVyZmxvd0NsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24sIHBvaW50SW5Db250YWluZXIu
cmVnaW9uKCksIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkpKTsKKyAgICBib29sIGNoZWNr
Q2hpbGRyZW4gPSAhdXNlQ2xpcCB8fCAoaGFzQ29udHJvbENsaXAoKSA/IGxvY2F0aW9uSW5Db250
YWluZXIuaW50ZXJzZWN0cyhjb250cm9sQ2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbikpIDogbG9j
YXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2Nh
dGlvbiwgbG9jYXRpb25JbkNvbnRhaW5lci5yZWdpb24oKSwgSW5jbHVkZU92ZXJsYXlTY3JvbGxi
YXJTaXplKSkpOwogICAgIGlmIChjaGVja0NoaWxkcmVuKSB7CiAgICAgICAgIC8vIEhpdCB0ZXN0
IGRlc2NlbmRhbnRzIGZpcnN0LgogICAgICAgICBMYXlvdXRTaXplIHNjcm9sbGVkT2Zmc2V0KGxv
Y2FsT2Zmc2V0KTsKQEAgLTQ2ODIsMTQgKzQ2ODIsMTQgQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJl
c3UKIAogICAgICAgICAvLyBIaXQgdGVzdCBjb250ZW50cyBpZiB3ZSBkb24ndCBoYXZlIGNvbHVt
bnMuCiAgICAgICAgIGlmICghaGFzQ29sdW1ucygpKSB7Ci0gICAgICAgICAgICBpZiAoaGl0VGVz
dENvbnRlbnRzKHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgdG9MYXlvdXRQb2lu
dChzY3JvbGxlZE9mZnNldCksIGhpdFRlc3RBY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgdXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIGxvY2Fs
T2Zmc2V0KTsKKyAgICAgICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0
LCBsb2NhdGlvbkluQ29udGFpbmVyLCB0b0xheW91dFBvaW50KHNjcm9sbGVkT2Zmc2V0KSwgaGl0
VGVzdEFjdGlvbikpIHsKKyAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3Vs
dCwgbG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpIC0gbG9jYWxPZmZzZXQpOwogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGhpdFRl
c3RBY3Rpb24gPT0gSGl0VGVzdEZsb2F0ICYmIGhpdFRlc3RGbG9hdHMocmVxdWVzdCwgcmVzdWx0
LCBwb2ludEluQ29udGFpbmVyLCB0b0xheW91dFBvaW50KHNjcm9sbGVkT2Zmc2V0KSkpCisgICAg
ICAgICAgICBpZiAoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0RmxvYXQgJiYgaGl0VGVzdEZsb2F0
cyhyZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIHRvTGF5b3V0UG9pbnQoc2Ny
b2xsZWRPZmZzZXQpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSBl
bHNlIGlmIChoaXRUZXN0Q29sdW1ucyhyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIs
IHRvTGF5b3V0UG9pbnQoc2Nyb2xsZWRPZmZzZXQpLCBoaXRUZXN0QWN0aW9uKSkgewotICAgICAg
ICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShwb2lu
dEluQ29udGFpbmVyLnBvaW50KCkgLSBsb2NhbE9mZnNldCkpOworICAgICAgICB9IGVsc2UgaWYg
KGhpdFRlc3RDb2x1bW5zKHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgdG9M
YXlvdXRQb2ludChzY3JvbGxlZE9mZnNldCksIGhpdFRlc3RBY3Rpb24pKSB7CisgICAgICAgICAg
ICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKGxvY2F0aW9u
SW5Db250YWluZXIucG9pbnQoKSAtIGxvY2FsT2Zmc2V0KSk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ2OTcsOSArNDY5Nyw5IEBAIGJvb2wgUmVuZGVy
QmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1CiAgICAgLy8gTm93IGhpdCB0ZXN0IG91ciBiYWNrZ3JvdW5kCiAgICAgaWYg
KGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEJsb2NrQmFja2dyb3VuZCB8fCBoaXRUZXN0QWN0aW9u
ID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgewogICAgICAgICBMYXlvdXRSZWN0IGJv
dW5kc1JlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgc2l6ZSgpKTsKLSAgICAgICAgaWYgKHZpc2libGVU
b0hpdFRlc3RpbmcoKSAmJiBwb2ludEluQ29udGFpbmVyLmludGVyc2VjdHMoYm91bmRzUmVjdCkp
IHsKLSAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGlu
Z01vZGUocG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gbG9jYWxPZmZzZXQpKTsKLSAgICAgICAg
ICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCBwb2lu
dEluQ29udGFpbmVyLCBib3VuZHNSZWN0KSkKKyAgICAgICAgaWYgKHZpc2libGVUb0hpdFRlc3Rp
bmcoKSAmJiBsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMoYm91bmRzUmVjdCkpIHsKKyAg
ICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUo
bG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpIC0gbG9jYWxPZmZzZXQpKTsKKyAgICAgICAgICAg
IGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCBsb2NhdGlv
bkluQ29udGFpbmVyLCBib3VuZHNSZWN0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTQ3MDcsNyArNDcwNyw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0
JiByZXN1CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlckJsb2NrOjpoaXRUZXN0
RmxvYXRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0KQorYm9vbCBSZW5kZXJCbG9jazo6aGl0VGVzdEZsb2F0cyhj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCkKIHsKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC00NzI2LDggKzQ3MjYsOCBAQCBib29sIFJlbmRlckJsb2Nr
OjpoaXRUZXN0RmxvYXRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVz
dWx0JiByZQogICAgICAgICAgICAgTGF5b3V0VW5pdCB4T2Zmc2V0ID0geFBvc2l0aW9uRm9yRmxv
YXRJbmNsdWRpbmdNYXJnaW4oZmxvYXRpbmdPYmplY3QpIC0gZmxvYXRpbmdPYmplY3QtPm1fcmVu
ZGVyZXItPngoKTsKICAgICAgICAgICAgIExheW91dFVuaXQgeU9mZnNldCA9IHlQb3NpdGlvbkZv
ckZsb2F0SW5jbHVkaW5nTWFyZ2luKGZsb2F0aW5nT2JqZWN0KSAtIGZsb2F0aW5nT2JqZWN0LT5t
X3JlbmRlcmVyLT55KCk7CiAgICAgICAgICAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0gZmxp
cEZsb2F0Rm9yV3JpdGluZ01vZGVGb3JDaGlsZChmbG9hdGluZ09iamVjdCwgYWRqdXN0ZWRMb2Nh
dGlvbiArIExheW91dFNpemUoeE9mZnNldCwgeU9mZnNldCkpOwotICAgICAgICAgICAgaWYgKGZs
b2F0aW5nT2JqZWN0LT5tX3JlbmRlcmVyLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJ
bkNvbnRhaW5lciwgY2hpbGRQb2ludCkpIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGNo
aWxkUG9pbnQpKTsKKyAgICAgICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+bV9yZW5kZXJlci0+
aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGNoaWxkUG9pbnQp
KSB7CisgICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2F0aW9u
SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShjaGlsZFBvaW50KSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQ3OTUs
NDggKzQ3OTUsNDggQEAgcHJpdmF0ZToKICAgICBMYXlvdXRSZWN0IG1fY29sUmVjdDsKIH07CiAK
LWJvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RDb2x1bW5zKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJ
bkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0
QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlckJsb2NrOjpoaXRUZXN0Q29sdW1ucyhj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewogICAg
IC8vIFdlIG5lZWQgdG8gZG8gbXVsdGlwbGUgcGFzc2VzLCBicmVha2luZyB1cCBvdXIgaGl0IHRl
c3RpbmcgaW50byBzdHJpcHMuCiAgICAgaWYgKCFoYXNDb2x1bW5zKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGZvciAoQ29sdW1uUmVjdEl0ZXJhdG9yIGl0KCp0aGlzKTsgaXQuaGFz
TW9yZSgpOyBpdC5hZHZhbmNlKCkpIHsKLSAgICAgICAgTGF5b3V0UmVjdCBoaXRSZWN0ID0gcG9p
bnRJbkNvbnRhaW5lci5ib3VuZGluZ0JveCgpOworICAgICAgICBMYXlvdXRSZWN0IGhpdFJlY3Qg
PSBsb2NhdGlvbkluQ29udGFpbmVyLmJvdW5kaW5nQm94KCk7CiAgICAgICAgIExheW91dFJlY3Qg
Y29sUmVjdCA9IGl0LmNvbHVtblJlY3QoKTsKICAgICAgICAgY29sUmVjdC5tb3ZlQnkoYWNjdW11
bGF0ZWRPZmZzZXQpOwotICAgICAgICBpZiAocG9pbnRJbkNvbnRhaW5lci5pbnRlcnNlY3RzKGNv
bFJlY3QpKSB7CisgICAgICAgIGlmIChsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMoY29s
UmVjdCkpIHsKICAgICAgICAgICAgIC8vIFRoZSBwb2ludCBpcyBpbnNpZGUgdGhpcyBjb2x1bW4u
CiAgICAgICAgICAgICAvLyBBZGp1c3QgYWNjdW11bGF0ZWRPZmZzZXQgdG8gY2hhbmdlIHdoZXJl
IHdlIGhpdCB0ZXN0LgogICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQ7CiAgICAgICAgICAg
ICBpdC5hZGp1c3Qob2Zmc2V0KTsKICAgICAgICAgICAgIExheW91dFBvaW50IGZpbmFsTG9jYXRp
b24gPSBhY2N1bXVsYXRlZE9mZnNldCArIG9mZnNldDsKICAgICAgICAgICAgIGlmICghcmVzdWx0
LmlzUmVjdEJhc2VkVGVzdCgpIHx8IGNvbFJlY3QuY29udGFpbnMoaGl0UmVjdCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5D
b250YWluZXIsIGZpbmFsTG9jYXRpb24sIGhpdFRlc3RBY3Rpb24pIHx8IChoaXRUZXN0QWN0aW9u
ID09IEhpdFRlc3RGbG9hdCAmJiBoaXRUZXN0RmxvYXRzKHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJ
bkNvbnRhaW5lciwgZmluYWxMb2NhdGlvbikpOworICAgICAgICAgICAgICAgIHJldHVybiBoaXRU
ZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBmaW5hbExv
Y2F0aW9uLCBoaXRUZXN0QWN0aW9uKSB8fCAoaGl0VGVzdEFjdGlvbiA9PSBIaXRUZXN0RmxvYXQg
JiYgaGl0VGVzdEZsb2F0cyhyZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGZp
bmFsTG9jYXRpb24pKTsKIAotICAgICAgICAgICAgaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHJl
c3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgZmluYWxMb2NhdGlvbiwgaGl0VGVzdEFjdGlvbik7Cisg
ICAgICAgICAgICBoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29u
dGFpbmVyLCBmaW5hbExvY2F0aW9uLCBoaXRUZXN0QWN0aW9uKTsKICAgICAgICAgfQogICAgIH0K
IAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQ29s
dW1uUmVjdChMYXlvdXRTaXplJiBvZmZzZXQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29u
dGFpbmVyKSBjb25zdAordm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQ29sdW1uUmVjdChMYXlv
dXRTaXplJiBvZmZzZXQsIGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbkluQ29udGFpbmVyKSBj
b25zdAogewogICAgIGZvciAoQ29sdW1uUmVjdEl0ZXJhdG9yIGl0KCp0aGlzKTsgaXQuaGFzTW9y
ZSgpOyBpdC5hZHZhbmNlKCkpIHsKICAgICAgICAgTGF5b3V0UmVjdCBjb2xSZWN0ID0gaXQuY29s
dW1uUmVjdCgpOwotICAgICAgICBpZiAoY29sUmVjdC5jb250YWlucyhwb2ludEluQ29udGFpbmVy
KSkgeworICAgICAgICBpZiAoY29sUmVjdC5jb250YWlucyhsb2NhdGlvbkluQ29udGFpbmVyKSkg
ewogICAgICAgICAgICAgaXQuYWRqdXN0KG9mZnNldCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RDb250ZW50cyhj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJC
bG9jazo6aGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9u
IGhpdFRlc3RBY3Rpb24pCiB7CiAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkgJiYgIWlzVGFibGUo
KSkgewogICAgICAgICAvLyBXZSBoYXZlIHRvIGhpdC10ZXN0IG91ciBsaW5lIGJveGVzLgotICAg
ICAgICBpZiAobV9saW5lQm94ZXMuaGl0VGVzdCh0aGlzLCByZXF1ZXN0LCByZXN1bHQsIHBvaW50
SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkKKyAgICAgICAg
aWYgKG1fbGluZUJveGVzLmhpdFRlc3QodGhpcywgcmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbklu
Q29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlvbikpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBIaXQgdGVzdCBvdXIgY2hp
bGRyZW4uCkBAIC00ODQ1LDcgKzQ4NDUsNyBAQCBib29sIFJlbmRlckJsb2NrOjpoaXRUZXN0Q29u
dGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmCiAgICAg
ICAgICAgICBjaGlsZEhpdFRlc3QgPSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQ7CiAgICAg
ICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGxhc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nQm94KCkpIHsKICAgICAgICAgICAgIExheW91dFBvaW50
IGNoaWxkUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGVGb3JDaGlsZChjaGlsZCwgYWNjdW11bGF0
ZWRPZmZzZXQpOwotICAgICAgICAgICAgaWYgKCFjaGlsZC0+aGFzU2VsZlBhaW50aW5nTGF5ZXIo
KSAmJiAhY2hpbGQtPmlzRmxvYXRpbmcoKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwg
cmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBjaGlsZFBvaW50LCBjaGlsZEhpdFRlc3QpKQorICAg
ICAgICAgICAgaWYgKCFjaGlsZC0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAhY2hpbGQtPmlz
RmxvYXRpbmcoKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlv
bkluQ29udGFpbmVyLCBjaGlsZFBvaW50LCBjaGlsZEhpdFRlc3QpKQogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAppbmRleCBhMzFiMjZlZDZlOGY0MTA2NmI5MTZlMzkyOWIwYmQ3MzM2MTM0Zjdm
Li4xZjdiNjY0ZTIwODRhODg5MTZiYmFkNTEzNjhkMDlhZDA2MDY4MzNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtMjI5LDcgKzIyOSw3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgYWRqdXN0UmVjdEZvckNvbHVtbnMoTGF5b3V0UmVjdCYpIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RGb3JDb2x1bW5zKExheW91dFNpemUmLCBjb25zdCBMYXlvdXRQb2lu
dCYpIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0Rm9yQ29sdW1uUmVjdChMYXlvdXRTaXplJiBvZmZz
ZXQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyKSBjb25zdDsKKyAgICB2b2lk
IGFkanVzdEZvckNvbHVtblJlY3QoTGF5b3V0U2l6ZSYgb2Zmc2V0LCBjb25zdCBMYXlvdXRQb2lu
dCYgbG9jYXRpb25JbkNvbnRhaW5lcikgY29uc3Q7CiAKICAgICB2b2lkIGFkZENvbnRpbnVhdGlv
bldpdGhPdXRsaW5lKFJlbmRlcklubGluZSopOwogICAgIGJvb2wgcGFpbnRzQ29udGludWF0aW9u
T3V0bGluZShSZW5kZXJJbmxpbmUqKTsKQEAgLTQzMSw3ICs0MzEsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCBFVGV4dEFsaWduIHRleHRBbGlnbm1lbnRGb3JMaW5lKGJvb2wgZW5kc1dpdGhT
b2Z0QnJlYWspIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbmxpbmVEaXJlY3Rpb25M
aW5lQm91bmRzKGludCAvKiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ICovLCBmbG9hdCYgLyog
bG9naWNhbExlZnQgKi8sIGZsb2F0JiAvKiBsb2dpY2FsV2lkdGggKi8pIGNvbnN0IHsgfQogCi0g
ICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURF
OwogCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAK
QEAgLTc3MCwxMSArNzcwLDExIEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBsb3dlc3RGbG9h
dExvZ2ljYWxCb3R0b20oRmxvYXRpbmdPYmplY3Q6OlR5cGUgPSBGbG9hdGluZ09iamVjdDo6Rmxv
YXRMZWZ0UmlnaHQpIGNvbnN0OyAKICAgICBMYXlvdXRVbml0IG5leHRGbG9hdExvZ2ljYWxCb3R0
b21CZWxvdyhMYXlvdXRVbml0KSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaGl0VGVz
dENvbHVtbnMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0
VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwotICAgIHZpcnR1YWwgYm9vbCBoaXRUZXN0Q29udGVu
dHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIEhpdFRlc3RBY3Rpb24pOwotICAgIGJvb2wgaGl0VGVzdEZsb2F0cyhjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCk7CisgICAgdmlydHVh
bCBib29sIGhpdFRlc3RDb2x1bW5zKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFs
IGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKKyAgICBib29sIGhp
dFRlc3RGbG9hdHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQpOwogCi0gICAgdmlydHVhbCBib29sIGlzUG9pbnRJbk92ZXJmbG93
Q29udHJvbChIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWlu
ZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCk7CisgICAgdmlydHVhbCBi
b29sIGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0
UG9pbnQmIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCk7CiAKICAgICB2b2lkIGNvbXB1dGVJbmxpbmVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KCk7CiAgICAgdm9pZCBjb21wdXRlQmxvY2tQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGYxNjQ1N2I1ZTkwZDM5YjBjMDg2
MTYxMDcwMGY2ZGZlNzRjNDYwNzAuLjQ3Mzc4NTE3MDhjZDhiOThkMzU0NmFlMDMyYmViZGYzZWU2
NTk1NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC03NTgsMjUg
Kzc1OCwyNSBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2Fs
SGVpZ2h0KExheW91dFVuaXQgaGVpZ2h0KSBjb25zdAogfQogCiAvLyBIaXQgVGVzdGluZwotYm9v
bCBSZW5kZXJCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFj
dGlvbikKK2Jvb2wgUmVuZGVyQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxv
Y2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwg
SGl0VGVzdEFjdGlvbiBhY3Rpb24pCiB7CiAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2NhdGlv
biA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKIAogICAgIC8vIENoZWNrIGtpZHMg
Zmlyc3QuCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBpZiAoIWNoaWxk
LT5oYXNMYXllcigpICYmIGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50
SW5Db250YWluZXIsIGFkanVzdGVkTG9jYXRpb24sIGFjdGlvbikpIHsKLSAgICAgICAgICAgIHVw
ZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xh
eW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOworICAgICAgICBpZiAoIWNoaWxkLT5oYXNMYXll
cigpICYmIGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250
YWluZXIsIGFkanVzdGVkTG9jYXRpb24sIGFjdGlvbikpIHsKKyAgICAgICAgICAgIHVwZGF0ZUhp
dFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91
dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICAvLyBDaGVjayBvdXIgYm91bmRzIG5leHQuIEZvciB0aGlzIHB1
cnBvc2UgYWx3YXlzIGFzc3VtZSB0aGF0IHdlIGNhbiBvbmx5IGJlIGhpdCBpbiB0aGUKICAgICAv
LyBmb3JlZ3JvdW5kIHBoYXNlICh3aGljaCBpcyB0cnVlIGZvciByZXBsYWNlZCBlbGVtZW50cyBs
aWtlIGltYWdlcykuCi0gICAgTGF5b3V0UmVjdCBib3VuZHNSZWN0ID0gYm9yZGVyQm94UmVjdElu
UmVnaW9uKHBvaW50SW5Db250YWluZXIucmVnaW9uKCkpOworICAgIExheW91dFJlY3QgYm91bmRz
UmVjdCA9IGJvcmRlckJveFJlY3RJblJlZ2lvbihsb2NhdGlvbkluQ29udGFpbmVyLnJlZ2lvbigp
KTsKICAgICBib3VuZHNSZWN0Lm1vdmVCeShhZGp1c3RlZExvY2F0aW9uKTsKLSAgICBpZiAodmlz
aWJsZVRvSGl0VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3VuZCAmJiBwb2lu
dEluQ29udGFpbmVyLmludGVyc2VjdHMoYm91bmRzUmVjdCkpIHsKLSAgICAgICAgdXBkYXRlSGl0
VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6
ZShhZGp1c3RlZExvY2F0aW9uKSk7Ci0gICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1JlY3RC
YXNlZFRlc3RSZXN1bHQobm9kZSgpLCBwb2ludEluQ29udGFpbmVyLCBib3VuZHNSZWN0KSkKKyAg
ICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGFjdGlvbiA9PSBIaXRUZXN0Rm9yZWdyb3Vu
ZCAmJiBsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMoYm91bmRzUmVjdCkpIHsKKyAgICAg
ICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQo
KSAtIHRvTGF5b3V0U2l6ZShhZGp1c3RlZExvY2F0aW9uKSk7CisgICAgICAgIGlmICghcmVzdWx0
LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCBsb2NhdGlvbkluQ29udGFpbmVy
LCBib3VuZHNSZWN0KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmluZGV4IGYwMTE3MTRjYjU0OTQwODk3MjkzNzQxMGFl
ZTYwMTIzMzRlZjllZTIuLjZkNjc5YWY0OGJiZmFiMTdhYjFhZGMyOWNlYzQzNTAzMjFkMzllYTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTI4NCw3ICsyODQsNyBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBh
aW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhp
dFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0
VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBM
YXlvdXRVbml0IG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
TGF5b3V0VW5pdCBtYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCmluZGV4IDEzNTk1
OTQyMGJhZDU5YjBjNGVlZGNmYTFhOThhNWRjMWI3Njg4NzEuLmRjYjNjYzNiMDQ1MzY4NDQ0YTZm
NjVhNjlmZDZkODFmZmVkYTM3MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcApAQCAtMjY1LDE2ICsyNjUsMTYgQEAgdm9pZCBSZW5k
ZXJFbWJlZGRlZE9iamVjdDo6dmlld0NsZWFyZWQoKQogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJF
bWJlZGRlZE9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFp
bmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24g
aGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0gICAg
aWYgKCFSZW5kZXJQYXJ0Ojpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250
YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkKKyAgICBpZiAoIVJlbmRl
clBhcnQ6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwg
YWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAoIXdpZGdldCgpIHx8ICF3aWRnZXQoKS0+aXNQbHVnaW5WaWV3QmFzZSgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIFBsdWdpblZpZXdCYXNlKiB2aWV3ID0gc3RhdGlj
X2Nhc3Q8UGx1Z2luVmlld0Jhc2UqPih3aWRnZXQoKSk7Ci0gICAgSW50UG9pbnQgcm91bmRlZFBv
aW50ID0gcG9pbnRJbkNvbnRhaW5lci5yb3VuZGVkUG9pbnQoKTsKKyAgICBJbnRQb2ludCByb3Vu
ZGVkUG9pbnQgPSBsb2NhdGlvbkluQ29udGFpbmVyLnJvdW5kZWRQb2ludCgpOwogCiAgICAgaWYg
KFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciA9IHZpZXctPmhvcml6b250YWxTY3JvbGxi
YXIoKSkgewogICAgICAgICBpZiAoaG9yaXpvbnRhbFNjcm9sbGJhci0+c2hvdWxkUGFydGljaXBh
dGVJbkhpdFRlc3RpbmcoKSAmJiBob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250
YWlucyhyb3VuZGVkUG9pbnQpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbWJlZGRlZE9iamVjdC5oCmluZGV4IDZlZGM5YmZiN2M0ZWIzZTg4ZmEwYzg0MDQ3ZWJlNGQ5
NTNiOTJjNmEuLjNmMzE4YjE2NzdmNjBiMzVkYzg5NzE2YWEwM2I3ZmU1ODY3MzFlMGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCkBAIC03
MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZp
cnR1YWwgdm9pZCB2aWV3Q2xlYXJlZCgpOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2lu
dCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBib29sIHNjcm9s
bChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBO
b2RlKiogc3RvcE5vZGUpOwogICAgIHZpcnR1YWwgYm9vbCBsb2dpY2FsU2Nyb2xsKFNjcm9sbExv
Z2ljYWxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBOb2Rl
Kiogc3RvcE5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZsb3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJl
YWQuY3BwCmluZGV4IGYzZTQ3ZGY0Nzc0NWE0ZDRjN2RiZGY0ZDU0MmE2MmRlMjZiMDljOGQuLmM5
YmExYTJlNzkyMGJkODc0YmUwZTIyMjc0NzE4M2NiN2ExNzYyYmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKQEAgLTI3MiwxMiArMjcyLDEyIEBA
IHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6cGFpbnRJbnRvUmVnaW9uKFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBSZW5kZXJSZWdpb24qIHJlZ2lvCiAgICAgfQogfQogCi1ib29sIFJlbmRlckZsb3dUaHJl
YWQ6OmhpdFRlc3RSZWdpb24oUmVuZGVyUmVnaW9uKiByZWdpb24sIGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYg
cG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KQor
Ym9vbCBSZW5kZXJGbG93VGhyZWFkOjpoaXRUZXN0UmVnaW9uKFJlbmRlclJlZ2lvbiogcmVnaW9u
LCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBv
aW50JiBhY2N1bXVsYXRlZE9mZnNldCkKIHsKICAgICBMYXlvdXRSZWN0IHJlZ2lvblJlY3QocmVn
aW9uLT5yZWdpb25SZWN0KCkpOwogICAgIExheW91dFJlY3QgcmVnaW9uT3ZlcnNldFJlY3QgPSBy
ZWdpb24tPnJlZ2lvbk92ZXJzZXRSZWN0KCk7CiAgICAgTGF5b3V0UmVjdCByZWdpb25DbGlwcGlu
Z1JlY3QoYWNjdW11bGF0ZWRPZmZzZXQgKyAocmVnaW9uT3ZlcnNldFJlY3QubG9jYXRpb24oKSAt
IHJlZ2lvblJlY3QubG9jYXRpb24oKSksIHJlZ2lvbk92ZXJzZXRSZWN0LnNpemUoKSk7Ci0gICAg
aWYgKCFyZWdpb25DbGlwcGluZ1JlY3QuY29udGFpbnMocG9pbnRJbkNvbnRhaW5lci5wb2ludCgp
KSkKKyAgICBpZiAoIXJlZ2lvbkNsaXBwaW5nUmVjdC5jb250YWlucyhsb2NhdGlvbkluQ29udGFp
bmVyLnBvaW50KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBMYXlvdXRTaXplIHJl
bmRlckZsb3dUaHJlYWRPZmZzZXQ7CkBAIC0yOTEsMTAgKzI5MSwxMCBAQCBib29sIFJlbmRlckZs
b3dUaHJlYWQ6OmhpdFRlc3RSZWdpb24oUmVuZGVyUmVnaW9uKiByZWdpb24sIGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JgogICAgIC8vIEFsd2F5cyBpZ25vcmUgY2xpcHBpbmcsIHNpbmNlIHRoZSBSZW5k
ZXJGbG93VGhyZWFkIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGJvdW5kcyBvZiB0aGUgRnJh
bWVWaWV3LgogICAgIEhpdFRlc3RSZXF1ZXN0IG5ld1JlcXVlc3QocmVxdWVzdC50eXBlKCkgfCBI
aXRUZXN0UmVxdWVzdDo6SWdub3JlQ2xpcHBpbmcpOwogCi0gICAgLy8gTWFrZSBhIG5ldyB0ZW1w
b3JhcnkgaGl0VGVzdFBvaW50IGluIHRoZSBuZXcgcmVnaW9uLgotICAgIEhpdFRlc3RQb2ludCBu
ZXdIaXRUZXN0UG9pbnQocG9pbnRJbkNvbnRhaW5lciwgLXJlbmRlckZsb3dUaHJlYWRPZmZzZXQs
IHJlZ2lvbik7CisgICAgLy8gTWFrZSBhIG5ldyB0ZW1wb3JhcnkgSGl0VGVzdExvY2F0aW9uIGlu
IHRoZSBuZXcgcmVnaW9uLgorICAgIEhpdFRlc3RMb2NhdGlvbiBuZXdIaXRUZXN0TG9jYXRpb24o
bG9jYXRpb25JbkNvbnRhaW5lciwgLXJlbmRlckZsb3dUaHJlYWRPZmZzZXQsIHJlZ2lvbik7CiAK
LSAgICBib29sIGlzUG9pbnRJbnNpZGVGbG93VGhyZWFkID0gbGF5ZXIoKS0+aGl0VGVzdChuZXdS
ZXF1ZXN0LCBuZXdIaXRUZXN0UG9pbnQsIHJlc3VsdCk7CisgICAgYm9vbCBpc1BvaW50SW5zaWRl
Rmxvd1RocmVhZCA9IGxheWVyKCktPmhpdFRlc3QobmV3UmVxdWVzdCwgbmV3SGl0VGVzdExvY2F0
aW9uLCByZXN1bHQpOwogCiAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBzZXQgcmVzdWx0Lm1fbG9j
YWxQb2ludCBiYWNrIHRvIHRoZSBSZW5kZXJSZWdpb24ncyBjb29yZGluYXRlIHNwYWNlIG9yIGxl
YXZlIGl0IGluIHRoZSBSZW5kZXJGbG93VGhyZWFkJ3MgY29vcmRpbmF0ZQogICAgIC8vIHNwYWNl
PyBSaWdodCBub3cgaXQncyBzdGF5aW5nIGluIHRoZSBSZW5kZXJGbG93VGhyZWFkJ3MgY29vcmRp
bmF0ZSBzcGFjZSwgd2hpY2ggbWF5IGVuZCB1cCBiZWluZyBvay4gV2Ugd2lsbCBrbm93IG1vcmUg
d2hlbiB3ZSBnZXQgYXJvdW5kIHRvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmxvd1RocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
b3dUaHJlYWQuaAppbmRleCAzNGRlYzY5ZDgwODMzZjQ5YjVlYzA1NTZjNDg4MDQ4NGVhMmExNmU0
Li5iNWE3MmQ1Mzg0YTJjMDljM2FlNzIzYjM0MWU5NGYxZWE2ZjZmYTA3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgKQEAgLTc3LDcgKzc3LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgY29tcHV0ZUxvZ2ljYWxIZWlnaHQoKTsKIAogICAgIHZvaWQgcGFpbnRJ
bnRvUmVnaW9uKFBhaW50SW5mbyYsIFJlbmRlclJlZ2lvbiosIGNvbnN0IExheW91dFBvaW50JiBw
YWludE9mZnNldCk7Ci0gICAgYm9vbCBoaXRUZXN0UmVnaW9uKFJlbmRlclJlZ2lvbiosIGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9p
bnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsKKyAg
ICBib29sIGhpdFRlc3RSZWdpb24oUmVuZGVyUmVnaW9uKiwgY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFp
bmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOwogCiAgICAgYm9vbCBo
YXNSZWdpb25zKCkgY29uc3QgeyByZXR1cm4gbV9yZWdpb25MaXN0LnNpemUoKTsgfQogICAgIGJv
b2wgaGFzVmFsaWRSZWdpb25zKCkgY29uc3QgeyBBU1NFUlQoIW1fcmVnaW9uc0ludmFsaWRhdGVk
KTsgcmV0dXJuIG1faGFzVmFsaWRSZWdpb25zOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZyYW1lU2V0LmNwcAppbmRleCBjODk1NDc4NjMxMTUyYjAwYjE4NGZiZjI0ZTIxNGQ1
ODg4ZDBkYmIzLi5lNmRmNDBiOWFlNTgwZWZkZTljMmRkOTVkYzc1MzcwOGNjZTUxMjljIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKQEAgLTE1OCwxMiAr
MTU4LDEyIEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB9CiAKIGJvb2wgUmVuZGVyRnJhbWVT
ZXQ6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQsCi0gICAgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9u
KQorICAgIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3Qg
TGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKIHsK
ICAgICBpZiAoYWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBib29sIGluc2lkZSA9IFJlbmRlckJveDo6bm9kZUF0UG9pbnQocmVxdWVzdCwg
cmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgYWN0aW9uKQorICAg
IGJvb2wgaW5zaWRlID0gUmVuZGVyQm94Ojpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGxv
Y2F0aW9uSW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBhY3Rpb24pCiAgICAgICAgIHx8
IG1faXNSZXNpemluZzsKIAogICAgIGlmIChpbnNpZGUgJiYgZnJhbWVTZXQoKS0+bm9SZXNpemUo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuaAppbmRleCA3ZDY5Nzcw
ZTczNTc2MWM4NjY3YzMzZjA0YjkxZmNhZTFiNTQ2ZjMwLi5iNjcwNTc1YzMwMmM3YjlmYTUzNDRi
MDZjYjFiM2E4NDgzYzAzYzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRnJhbWVTZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJh
bWVTZXQuaApAQCAtOTYsNyArOTYsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0Zy
YW1lU2V0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGxheW91
dCgpOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNv
bnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5l
ciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBP
VkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0
UG9pbnQmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0Kiwg
UmVuZGVyU3R5bGUqKSBjb25zdDsKICAgICB2aXJ0dWFsIEN1cnNvckRpcmVjdGl2ZSBnZXRDdXJz
b3IoY29uc3QgTGF5b3V0UG9pbnQmLCBDdXJzb3ImKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuY3BwCmluZGV4IGYzOTlhYmM0ZDMwZjU1ZGIyMDM1Mzc0Nzg5YzUz
Mzc3NTEyYzAzYTQuLjczMTgzN2UxMTdjNTBhNjNhMjcyZjIwY2I3ZmZiOTMxMmJjMWJkZTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcApAQCAtNDk5LDE2ICs0OTks
MTYgQEAgSFRNTE1hcEVsZW1lbnQqIFJlbmRlckltYWdlOjppbWFnZU1hcCgpIGNvbnN0CiAgICAg
cmV0dXJuIGkgPyBpLT50cmVlU2NvcGUoKS0+Z2V0SW1hZ2VNYXAoaS0+ZmFzdEdldEF0dHJpYnV0
ZSh1c2VtYXBBdHRyKSkgOiAwOwogfQogCi1ib29sIFJlbmRlckltYWdlOjpub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJJ
bWFnZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVy
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0
VGVzdEFjdGlvbikKIHsKLSAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LmhpdFRl
c3RQb2ludCgpLCByZXN1bHQuc2hhZG93Q29udGVudEZpbHRlclBvbGljeSgpKTsKLSAgICBib29s
IGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChyZXF1ZXN0LCB0ZW1wUmVzdWx0
LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlvbik7Cisg
ICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0TG9jYXRpb24oKSwgcmVz
dWx0LnNoYWRvd0NvbnRlbnRGaWx0ZXJQb2xpY3koKSk7CisgICAgYm9vbCBpbnNpZGUgPSBSZW5k
ZXJSZXBsYWNlZDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgdGVtcFJlc3VsdCwgbG9jYXRpb25JbkNv
bnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pOwogCiAgICAgaWYgKHRl
bXBSZXN1bHQuaW5uZXJOb2RlKCkgJiYgbm9kZSgpKSB7CiAgICAgICAgIGlmIChIVE1MTWFwRWxl
bWVudCogbWFwID0gaW1hZ2VNYXAoKSkgewogICAgICAgICAgICAgTGF5b3V0UmVjdCBjb250ZW50
Qm94ID0gY29udGVudEJveFJlY3QoKTsKICAgICAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0g
MSAvIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLSAgICAgICAgICAgIExheW91dFBvaW50IG1h
cExvY2F0aW9uID0gcG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFjY3Vt
dWxhdGVkT2Zmc2V0KSAtIGxvY2F0aW9uT2Zmc2V0KCkgLSB0b0xheW91dFNpemUoY29udGVudEJv
eC5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgIExheW91dFBvaW50IG1hcExvY2F0aW9uID0gbG9j
YXRpb25JbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0
KSAtIGxvY2F0aW9uT2Zmc2V0KCkgLSB0b0xheW91dFNpemUoY29udGVudEJveC5sb2NhdGlvbigp
KTsKICAgICAgICAgICAgIG1hcExvY2F0aW9uLnNjYWxlKHNjYWxlRmFjdG9yLCBzY2FsZUZhY3Rv
cik7CiAKICAgICAgICAgICAgIGlmIChtYXAtPm1hcE1vdXNlRXZlbnQobWFwTG9jYXRpb24sIGNv
bnRlbnRCb3guc2l6ZSgpLCB0ZW1wUmVzdWx0KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckltYWdlLmgKaW5kZXggNmJkZGIwYTU4ZGFmZmI0NzlmZDNiZThhNzc1NTdiZjdhOGIyYzFlMy4u
MjM1OGZiMmRiYjdhNjc0ODVkNTc3Y2YwN2FhMmNlNjA5OWVhZGJmZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckltYWdlLmgKQEAgLTkyLDcgKzkyLDcgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIGludCBtaW5pbXVtUmVwbGFjZWRIZWlnaHQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopOwotICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBI
aXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhp
dFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBib3hTaGFkb3dTaG91bGRCZUFwcGxpZWRUb0JhY2tncm91bmQoQmFja2dyb3VuZEJsZWVk
QXZvaWRhbmNlLCBJbmxpbmVGbG93Qm94KikgY29uc3QgT1ZFUlJJREU7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKaW5kZXggYjEzOWJjYjQ0ZGJiMTAzMjQyNWNi
YjJlNGNhMThhYWMxMzcyOTMwNy4uMDczOGJkYWY1ODkzYzMwMjQxYmY2NjIxMTRhYThhMTQzMGFi
NzRlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKQEAgLTc1
OCw5ICs3NTgsOSBAQCBjb25zdCBjaGFyKiBSZW5kZXJJbmxpbmU6OnJlbmRlck5hbWUoKSBjb25z
dAogfQogCiBib29sIFJlbmRlcklubGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlv
bikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdExvY2F0aW9u
JiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICByZXR1cm4gbV9saW5lQm94
ZXMuaGl0VGVzdCh0aGlzLCByZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKTsKKyAgICByZXR1cm4gbV9saW5lQm94ZXMuaGl0
VGVzdCh0aGlzLCByZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGFjY3VtdWxh
dGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIFJlbmRlcklu
bGluZTo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKaW5kZXggOWFkZWM0MmIwYWNjODJmMTEwYjY0
M2JhYzIzNDUyZDkzZDUzYzRlZC4uN2Q4NjBlN2ExZTgzYWQwZjQ4ZTEwNGE1ZWUwOThiOGVlZTdi
YmM2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaApAQCAtMTIyLDcg
KzEyMiw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwg
Y29uc3QgTGF5b3V0UG9pbnQmKTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBv
aW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0
VGVzdEFjdGlvbikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYg
bG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xh
eWVyKCkgY29uc3QgeyByZXR1cm4gaXNJbkZsb3dQb3NpdGlvbmVkKCkgfHwgaXNUcmFuc3BhcmVu
dCgpIHx8IGhhc01hc2soKSB8fCBoYXNGaWx0ZXIoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAppbmRleCBlZGIzY2Y1OGRkMDk4YmI1NmM5YWM1OTQ4MDhlMzcw
NDkwMjE5ODAzLi42ZmFiYTg3YTI0MmRjMGE3ZDlmYzQxZjEyMDFjYzc1N2E0YzZjY2Y3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTEyNiw5ICsxMjYsOSBA
QCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogY29uc3QgaW50IE1pbmltdW1XaWR0aFdoaWxl
UmVzaXppbmcgPSAxMDA7CiBjb25zdCBpbnQgTWluaW11bUhlaWdodFdoaWxlUmVzaXppbmcgPSA0
MDsKIAotYm9vbCBDbGlwUmVjdDo6aW50ZXJzZWN0cyhjb25zdCBIaXRUZXN0UG9pbnQmIGhpdFRl
c3RQb2ludCkKK2Jvb2wgQ2xpcFJlY3Q6OmludGVyc2VjdHMoY29uc3QgSGl0VGVzdExvY2F0aW9u
JiBoaXRUZXN0TG9jYXRpb24pCiB7Ci0gICAgcmV0dXJuIGhpdFRlc3RQb2ludC5pbnRlcnNlY3Rz
KG1fcmVjdCk7CisgICAgcmV0dXJuIGhpdFRlc3RMb2NhdGlvbi5pbnRlcnNlY3RzKG1fcmVjdCk7
CiB9CiAKIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVu
ZGVyZXIpCkBAIC0zNDExLDEwICszNDExLDEwIEBAIHN0YXRpYyBpbmxpbmUgTGF5b3V0UmVjdCBm
cmFtZVZpc2libGVSZWN0KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAKIGJvb2wgUmVuZGVyTGF5
ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCkKIHsKLSAgICByZXR1cm4gaGl0VGVzdChyZXF1ZXN0LCByZXN1bHQuaGl0VGVzdFBv
aW50KCksIHJlc3VsdCk7CisgICAgcmV0dXJuIGhpdFRlc3QocmVxdWVzdCwgcmVzdWx0LmhpdFRl
c3RMb2NhdGlvbigpLCByZXN1bHQpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpoaXRUZXN0KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBIaXRUZXN0UG9pbnQmIGhpdFRlc3RQ
b2ludCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQorYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRU
ZXN0TG9jYXRpb24sIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKIHsKICAgICByZW5kZXJlcigpLT5k
b2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKICAgICAKQEAgLTM0MjIsNyArMzQyMiw3IEBAIGJv
b2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IEhpdFRlc3RQb2ludCYgaGl0CiAgICAgaWYgKCFyZXF1ZXN0Lmlnbm9yZUNsaXBwaW5nKCkp
CiAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChmcmFtZVZpc2libGVSZWN0KHJlbmRlcmVy
KCkpKTsKIAotICAgIFJlbmRlckxheWVyKiBpbnNpZGVMYXllciA9IGhpdFRlc3RMYXllcih0aGlz
LCAwLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RBcmVhLCBoaXRUZXN0UG9pbnQsIGZhbHNlKTsK
KyAgICBSZW5kZXJMYXllciogaW5zaWRlTGF5ZXIgPSBoaXRUZXN0TGF5ZXIodGhpcywgMCwgcmVx
dWVzdCwgcmVzdWx0LCBoaXRUZXN0QXJlYSwgaGl0VGVzdExvY2F0aW9uLCBmYWxzZSk7CiAgICAg
aWYgKCFpbnNpZGVMYXllcikgewogICAgICAgICAvLyBXZSBkaWRuJ3QgaGl0IGFueSBsYXllci4g
SWYgd2UgYXJlIHRoZSByb290IGxheWVyIGFuZCB0aGUgbW91c2UgaXMgLS0gb3IganVzdCB3YXMg
LS0gZG93biwgCiAgICAgICAgIC8vIHJldHVybiBvdXJzZWx2ZXMuIFdlIGRvIHRoaXMgc28gbW91
c2UgZXZlbnRzIGNvbnRpbnVlIGdldHRpbmcgZGVsaXZlcmVkIGFmdGVyIGEgZHJhZyBoYXMgCkBA
IC0zNDc0LDcgKzM0NzQsNyBAQCBzdGF0aWMgZG91YmxlIGNvbXB1dGVaT2Zmc2V0KGNvbnN0IEhp
dFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUpCiB9CiAKIFBhc3NSZWZQdHI8
SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlPiBSZW5kZXJMYXllcjo6Y3JlYXRlTG9jYWxUcmFuc2Zv
cm1TdGF0ZShSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0
UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RQb2ludCYgaGl0VGVzdFBvaW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhp
dFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNm
b3JtU3RhdGUqIGNvbnRhaW5lclRyYW5zZm9ybVN0YXRlKSBjb25zdAogewogICAgIFJlZlB0cjxI
aXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU+IHRyYW5zZm9ybVN0YXRlOwpAQCAtMzQ4NCw5ICszNDg0
LDkgQEAgUGFzc1JlZlB0cjxIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU+IFJlbmRlckxheWVyOjpj
cmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKFJlbmQKICAgICAgICAgdHJhbnNmb3JtU3RhdGUgPSBI
aXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6OmNyZWF0ZSgqY29udGFpbmVyVHJhbnNmb3JtU3RhdGUp
OwogICAgICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhjb250YWluZXJMYXllciwgb2Zmc2V0KTsK
ICAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIG5l
ZWQgdG8gbWFrZSB0cmFuc2Zvcm0gc3RhdGUsIHRoZW4gYmFzZSBpdCBvZmYgb2YgaGl0VGVzdFBv
aW50LAorICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIG5lZWQgdG8gbWFr
ZSB0cmFuc2Zvcm0gc3RhdGUsIHRoZW4gYmFzZSBpdCBvZmYgb2YgaGl0VGVzdExvY2F0aW9uLAog
ICAgICAgICAvLyB3aGljaCBpcyByZWxhdGl2ZSB0byByb290TGF5ZXIuCi0gICAgICAgIHRyYW5z
Zm9ybVN0YXRlID0gSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjpjcmVhdGUoaGl0VGVzdFBvaW50
LnRyYW5zZm9ybWVkUG9pbnQoKSwgaGl0VGVzdFBvaW50LnRyYW5zZm9ybWVkUmVjdCgpLCBGbG9h
dFF1YWQoaGl0VGVzdFJlY3QpKTsKKyAgICAgICAgdHJhbnNmb3JtU3RhdGUgPSBIaXRUZXN0aW5n
VHJhbnNmb3JtU3RhdGU6OmNyZWF0ZShoaXRUZXN0TG9jYXRpb24udHJhbnNmb3JtZWRQb2ludCgp
LCBoaXRUZXN0TG9jYXRpb24udHJhbnNmb3JtZWRSZWN0KCksIEZsb2F0UXVhZChoaXRUZXN0UmVj
dCkpOwogICAgICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIG9mZnNldCk7CiAg
ICAgfQogICAgIApAQCAtMzUyNywxNiArMzUyNywxNiBAQCBzdGF0aWMgYm9vbCBpc0hpdENhbmRp
ZGF0ZShjb25zdCBSZW5kZXJMYXllciogaGl0TGF5ZXIsIGJvb2wgY2FuRGVwdGhTb3J0LCBkb3Vi
bAogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBoaXRUZXN0UG9pbnQgYW5kIGhpdFRlc3RSZWN0
IGFyZSByZWxhdGl2ZSB0byByb290TGF5ZXIuCisvLyBoaXRUZXN0TG9jYXRpb24gYW5kIGhpdFRl
c3RSZWN0IGFyZSByZWxhdGl2ZSB0byByb290TGF5ZXIuCiAvLyBBICdmbGF0dGVuaW5nJyBsYXll
ciBpcyBvbmUgcHJlc2VydmVzM0QoKSA9PSBmYWxzZS4KIC8vIHRyYW5zZm9ybVN0YXRlLm1fYWNj
dW11bGF0ZWRUcmFuc2Zvcm0gaG9sZHMgdGhlIHRyYW5zZm9ybSBmcm9tIHRoZSBjb250YWluaW5n
IGZsYXR0ZW5pbmcgbGF5ZXIuCi0vLyB0cmFuc2Zvcm1TdGF0ZS5tX2xhc3RQbGFuYXJQb2ludCBp
cyB0aGUgaGl0VGVzdFBvaW50IGluIHRoZSBwbGFuZSBvZiB0aGUgY29udGFpbmluZyBmbGF0dGVu
aW5nIGxheWVyLgorLy8gdHJhbnNmb3JtU3RhdGUubV9sYXN0UGxhbmFyUG9pbnQgaXMgdGhlIGhp
dFRlc3RMb2NhdGlvbiBpbiB0aGUgcGxhbmUgb2YgdGhlIGNvbnRhaW5pbmcgZmxhdHRlbmluZyBs
YXllci4KIC8vIHRyYW5zZm9ybVN0YXRlLm1fbGFzdFBsYW5hclF1YWQgaXMgdGhlIGhpdFRlc3RS
ZWN0IGFzIGEgcXVhZCBpbiB0aGUgcGxhbmUgb2YgdGhlIGNvbnRhaW5pbmcgZmxhdHRlbmluZyBs
YXllci4KIC8vIAogLy8gSWYgek9mZnNldCBpcyBub24tbnVsbCAod2hpY2ggaW5kaWNhdGVzIHRo
YXQgdGhlIGNhbGxlciB3YW50cyB6IG9mZnNldCBpbmZvcm1hdGlvbiksIAogLy8gICp6T2Zmc2V0
IG9uIHJldHVybiBpcyB0aGUgeiBvZmZzZXQgb2YgdGhlIGhpdCBwb2ludCByZWxhdGl2ZSB0byB0
aGUgY29udGFpbmluZyBmbGF0dGVuaW5nIGxheWVyLgogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVy
OjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRh
aW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5
b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RQb2ludCYgaGl0VGVzdFBvaW50LCBi
b29sIGFwcGxpZWRUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9u
JiBoaXRUZXN0TG9jYXRpb24sIGJvb2wgYXBwbGllZFRyYW5zZm9ybSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSog
dHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9mZnNldCkKIHsKICAgICAvLyBUaGUgbmF0dXJhbCB0
aGluZyB3b3VsZCBiZSB0byBrZWVwIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSBvbiB0aGUgc3Rh
Y2ssIGJ1dCBpdCdzIGJpZywgc28gd2UgaGVhcC1hbGxvY2F0ZS4KQEAgLTM1NDcsMTQgKzM1NDcs
MTQgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIq
IHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKICAgICBpZiAodHJhbnNmb3JtKCkgJiYgIWFw
cGxpZWRUcmFuc2Zvcm0pIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwYXJlbnQncyBjbGlw
IHJlY3RzIGhhdmUgYmVlbiBjYWxjdWxhdGVkLgogICAgICAgICBpZiAocGFyZW50KCkpIHsKLSAg
ICAgICAgICAgIENsaXBSZWN0IGNsaXBSZWN0ID0gYmFja2dyb3VuZENsaXBSZWN0KHJvb3RMYXll
ciwgaGl0VGVzdFBvaW50LnJlZ2lvbigpLCB1c2VUZW1wb3JhcnlDbGlwUmVjdHMgPyBUZW1wb3Jh
cnlDbGlwUmVjdHMgOiBSb290UmVsYXRpdmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xs
YmFyU2l6ZSk7CisgICAgICAgICAgICBDbGlwUmVjdCBjbGlwUmVjdCA9IGJhY2tncm91bmRDbGlw
UmVjdChyb290TGF5ZXIsIGhpdFRlc3RMb2NhdGlvbi5yZWdpb24oKSwgdXNlVGVtcG9yYXJ5Q2xp
cFJlY3RzID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUm9vdFJlbGF0aXZlQ2xpcFJlY3RzLCBJbmNs
dWRlT3ZlcmxheVNjcm9sbGJhclNpemUpOwogICAgICAgICAgICAgLy8gR28gYWhlYWQgYW5kIHRl
c3QgdGhlIGVuY2xvc2luZyBjbGlwIG5vdy4KLSAgICAgICAgICAgIGlmICghY2xpcFJlY3QuaW50
ZXJzZWN0cyhoaXRUZXN0UG9pbnQpKQorICAgICAgICAgICAgaWYgKCFjbGlwUmVjdC5pbnRlcnNl
Y3RzKGhpdFRlc3RMb2NhdGlvbikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IH0KIAogICAgICAgICAvLyBDcmVhdGUgYSB0cmFuc2Zvcm0gc3RhdGUgdG8gYWNjdW11bGF0ZSB0
aGlzIHRyYW5zZm9ybS4KLSAgICAgICAgUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4g
bmV3VHJhbnNmb3JtU3RhdGUgPSBjcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKHJvb3RMYXllciwg
Y29udGFpbmVyTGF5ZXIsIGhpdFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQsIHRyYW5zZm9ybVN0YXRl
KTsKKyAgICAgICAgUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gbmV3VHJhbnNmb3Jt
U3RhdGUgPSBjcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKHJvb3RMYXllciwgY29udGFpbmVyTGF5
ZXIsIGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRpb24sIHRyYW5zZm9ybVN0YXRlKTsKIAogICAg
ICAgICAvLyBJZiB0aGUgdHJhbnNmb3JtIGNhbid0IGJlIGludmVydGVkLCB0aGVuIGRvbid0IGhp
dCB0ZXN0IHRoaXMgbGF5ZXIgYXQgYWxsLgogICAgICAgICBpZiAoIW5ld1RyYW5zZm9ybVN0YXRl
LT5tX2FjY3VtdWxhdGVkVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQpAQCAtMzU2NCwxOSArMzU2
NCwxOSBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXll
ciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogICAgICAgICAvLyBmcm9tIHRoZSB0cmFu
c2Zvcm1TdGF0ZSwgd2hpY2ggc3RvcmUgdGhlIHBvaW50IGFuZCBxdWFkIGluIHRoZSBjb29yZHMg
b2YgdGhlIGxhc3QgZmxhdHRlbmVkCiAgICAgICAgIC8vIGxheWVyLCBhbmQgdGhlIGFjY3VtdWxh
dGVkIHRyYW5zZm9ybSB3aGljaCBsZXRzIHVwIG1hcCB0aHJvdWdoIHByZXNlcnZlLTNkIGxheWVy
cy4KICAgICAgICAgLy8KLSAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBtYXAgaGl0VGVzdFBvaW50
IGFuZCBoaXRUZXN0UmVjdCBiZWNhdXNlIHRoZXkgbWF5IGhhdmUgYmVlbiBmbGF0dGVuZWQgKGxv
c2luZyB6KQorICAgICAgICAvLyBXZSBjYW4ndCBqdXN0IG1hcCBoaXRUZXN0TG9jYXRpb24gYW5k
IGhpdFRlc3RSZWN0IGJlY2F1c2UgdGhleSBtYXkgaGF2ZSBiZWVuIGZsYXR0ZW5lZCAobG9zaW5n
IHopCiAgICAgICAgIC8vIGJ5IG91ciBjb250YWluZXIuCiAgICAgICAgIEZsb2F0UG9pbnQgbG9j
YWxQb2ludCA9IG5ld1RyYW5zZm9ybVN0YXRlLT5tYXBwZWRQb2ludCgpOwogICAgICAgICBGbG9h
dFF1YWQgbG9jYWxQb2ludFF1YWQgPSBuZXdUcmFuc2Zvcm1TdGF0ZS0+bWFwcGVkUXVhZCgpOwog
ICAgICAgICBMYXlvdXRSZWN0IGxvY2FsSGl0VGVzdFJlY3QgPSBuZXdUcmFuc2Zvcm1TdGF0ZS0+
Ym91bmRzT2ZNYXBwZWRBcmVhKCk7Ci0gICAgICAgIEhpdFRlc3RQb2ludCBuZXdIaXRUZXN0UG9p
bnQ7Ci0gICAgICAgIGlmIChoaXRUZXN0UG9pbnQuaXNSZWN0QmFzZWRUZXN0KCkpCi0gICAgICAg
ICAgICBuZXdIaXRUZXN0UG9pbnQgPSBIaXRUZXN0UG9pbnQobG9jYWxQb2ludCwgbG9jYWxQb2lu
dFF1YWQpOworICAgICAgICBIaXRUZXN0TG9jYXRpb24gbmV3SGl0VGVzdExvY2F0aW9uOworICAg
ICAgICBpZiAoaGl0VGVzdExvY2F0aW9uLmlzUmVjdEJhc2VkVGVzdCgpKQorICAgICAgICAgICAg
bmV3SGl0VGVzdExvY2F0aW9uID0gSGl0VGVzdExvY2F0aW9uKGxvY2FsUG9pbnQsIGxvY2FsUG9p
bnRRdWFkKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbmV3SGl0VGVzdFBvaW50ID0gSGl0
VGVzdFBvaW50KGxvY2FsUG9pbnQpOworICAgICAgICAgICAgbmV3SGl0VGVzdExvY2F0aW9uID0g
SGl0VGVzdExvY2F0aW9uKGxvY2FsUG9pbnQpOwogCiAgICAgICAgIC8vIE5vdyBkbyBhIGhpdCB0
ZXN0IHdpdGggdGhlIHJvb3QgbGF5ZXIgc2hpZnRlZCB0byBiZSB1cy4KLSAgICAgICAgcmV0dXJu
IGhpdFRlc3RMYXllcih0aGlzLCBjb250YWluZXJMYXllciwgcmVxdWVzdCwgcmVzdWx0LCBsb2Nh
bEhpdFRlc3RSZWN0LCBuZXdIaXRUZXN0UG9pbnQsIHRydWUsIG5ld1RyYW5zZm9ybVN0YXRlLmdl
dCgpLCB6T2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGhpdFRlc3RMYXllcih0aGlzLCBjb250YWlu
ZXJMYXllciwgcmVxdWVzdCwgcmVzdWx0LCBsb2NhbEhpdFRlc3RSZWN0LCBuZXdIaXRUZXN0TG9j
YXRpb24sIHRydWUsIG5ld1RyYW5zZm9ybVN0YXRlLmdldCgpLCB6T2Zmc2V0KTsKICAgICB9CiAK
ICAgICAvLyBFbnN1cmUgb3VyIGxpc3RzIGFuZCAzZCBzdGF0dXMgYXJlIHVwLXRvLWRhdGUuCkBA
IC0zNTkwLDcgKzM1OTAsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXll
cihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogICAgICAgICBsb2Nh
bFRyYW5zZm9ybVN0YXRlID0gY29uc3RfY2FzdDxIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqPih0
cmFuc2Zvcm1TdGF0ZSk7CiAgICAgfSBlbHNlIGlmICh0cmFuc2Zvcm1TdGF0ZSB8fCBtX2hhczNE
VHJhbnNmb3JtZWREZXNjZW5kYW50IHx8IHByZXNlcnZlczNEKCkpIHsKICAgICAgICAgLy8gV2Ug
bmVlZCB0cmFuc2Zvcm0gc3RhdGUgZm9yIHRoZSBmaXJzdCB0aW1lLCBvciB0byBvZmZzZXQgdGhl
IGNvbnRhaW5lciBzdGF0ZSwgc28gY3JlYXRlIGl0IGhlcmUuCi0gICAgICAgIGxvY2FsVHJhbnNm
b3JtU3RhdGUgPSBjcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKHJvb3RMYXllciwgY29udGFpbmVy
TGF5ZXIsIGhpdFRlc3RSZWN0LCBoaXRUZXN0UG9pbnQsIHRyYW5zZm9ybVN0YXRlKTsKKyAgICAg
ICAgbG9jYWxUcmFuc2Zvcm1TdGF0ZSA9IGNyZWF0ZUxvY2FsVHJhbnNmb3JtU3RhdGUocm9vdExh
eWVyLCBjb250YWluZXJMYXllciwgaGl0VGVzdFJlY3QsIGhpdFRlc3RMb2NhdGlvbiwgdHJhbnNm
b3JtU3RhdGUpOwogICAgIH0KIAogICAgIC8vIENoZWNrIGZvciBoaXQgdGVzdCBvbiBiYWNrZmFj
ZSBpZiBiYWNrZmFjZS12aXNpYmlsaXR5IGlzICdoaWRkZW4nCkBAIC0zNjE0LDcgKzM2MTQsNyBA
QCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9v
dExheWVyLCBSZW5kZXJMYXllciogY29udAogICAgIENsaXBSZWN0IGJnUmVjdDsKICAgICBDbGlw
UmVjdCBmZ1JlY3Q7CiAgICAgQ2xpcFJlY3Qgb3V0bGluZVJlY3Q7Ci0gICAgY2FsY3VsYXRlUmVj
dHMocm9vdExheWVyLCBoaXRUZXN0UG9pbnQucmVnaW9uKCksIHVzZVRlbXBvcmFyeUNsaXBSZWN0
cyA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6IFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywgaGl0VGVzdFJl
Y3QsIGxheWVyQm91bmRzLCBiZ1JlY3QsIGZnUmVjdCwgb3V0bGluZVJlY3QsIEluY2x1ZGVPdmVy
bGF5U2Nyb2xsYmFyU2l6ZSk7CisgICAgY2FsY3VsYXRlUmVjdHMocm9vdExheWVyLCBoaXRUZXN0
TG9jYXRpb24ucmVnaW9uKCksIHVzZVRlbXBvcmFyeUNsaXBSZWN0cyA/IFRlbXBvcmFyeUNsaXBS
ZWN0cyA6IFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywgaGl0VGVzdFJlY3QsIGxheWVyQm91bmRzLCBi
Z1JlY3QsIGZnUmVjdCwgb3V0bGluZVJlY3QsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7
CiAgICAgCiAgICAgLy8gVGhlIGZvbGxvd2luZyBhcmUgdXNlZCBmb3Iga2VlcGluZyB0cmFjayBv
ZiB0aGUgei1kZXB0aCBvZiB0aGUgaGl0IHBvaW50IG9mIDNkLXRyYW5zZm9ybWVkCiAgICAgLy8g
ZGVzY2VuZGFudHMuCkBAIC0zNjQzLDcgKzM2NDMsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5
ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29u
dAogICAgIFJlbmRlckxheWVyKiBjYW5kaWRhdGVMYXllciA9IDA7CiAKICAgICAvLyBCZWdpbiBi
eSB3YWxraW5nIG91ciBsaXN0IG9mIHBvc2l0aXZlIGxheWVycyBmcm9tIGhpZ2hlc3Qgei1pbmRl
eCBkb3duIHRvIHRoZSBsb3dlc3Qgei1pbmRleC4KLSAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIg
PSBoaXRUZXN0TGlzdChwb3NaT3JkZXJMaXN0KCksIHJvb3RMYXllciwgcmVxdWVzdCwgcmVzdWx0
LCBoaXRUZXN0UmVjdCwgaGl0VGVzdFBvaW50LAorICAgIFJlbmRlckxheWVyKiBoaXRMYXllciA9
IGhpdFRlc3RMaXN0KHBvc1pPcmRlckxpc3QoKSwgcm9vdExheWVyLCByZXF1ZXN0LCByZXN1bHQs
IGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgek9mZnNldEZvckRlc2Nl
bmRhbnRzUHRyLCB6T2Zmc2V0LCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpLCBkZXB0
aFNvcnREZXNjZW5kYW50cyk7CiAgICAgaWYgKGhpdExheWVyKSB7CiAgICAgICAgIGlmICghZGVw
dGhTb3J0RGVzY2VuZGFudHMpCkBAIC0zNjUyLDcgKzM2NTIsNyBAQCBSZW5kZXJMYXllciogUmVu
ZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXll
ciogY29udAogICAgIH0KIAogICAgIC8vIE5vdyBjaGVjayBvdXIgb3ZlcmZsb3cgb2JqZWN0cy4K
LSAgICBoaXRMYXllciA9IGhpdFRlc3RMaXN0KG1fbm9ybWFsRmxvd0xpc3QsIHJvb3RMYXllciwg
cmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdFBvaW50LAorICAgIGhpdExheWVy
ID0gaGl0VGVzdExpc3QobV9ub3JtYWxGbG93TGlzdCwgcm9vdExheWVyLCByZXF1ZXN0LCByZXN1
bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb2NhbFRyYW5zZm9ybVN0YXRlLmdldCgpLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHNQdHIs
IHpPZmZzZXQsIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUuZ2V0KCksIGRlcHRoU29ydERlc2Nl
bmRhbnRzKTsKICAgICBpZiAoaGl0TGF5ZXIpIHsKICAgICAgICAgaWYgKCFkZXB0aFNvcnREZXNj
ZW5kYW50cykKQEAgLTM2NjEsMTEgKzM2NjEsMTEgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVy
OjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQK
ICAgICB9CiAKICAgICAvLyBOZXh0IHdlIHdhbnQgdG8gc2VlIGlmIHRoZSBtb3VzZSBwb3MgaXMg
aW5zaWRlIHRoZSBjaGlsZCBSZW5kZXJPYmplY3RzIG9mIHRoZSBsYXllci4KLSAgICBpZiAoZmdS
ZWN0LmludGVyc2VjdHMoaGl0VGVzdFBvaW50KSAmJiBpc1NlbGZQYWludGluZ0xheWVyKCkpIHsK
KyAgICBpZiAoZmdSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSAmJiBpc1NlbGZQYWlu
dGluZ0xheWVyKCkpIHsKICAgICAgICAgLy8gSGl0IHRlc3Qgd2l0aCBhIHRlbXBvcmFyeSBIaXRU
ZXN0UmVzdWx0LCBiZWNhdXNlIHdlIG9ubHkgd2FudCB0byBjb21taXQgdG8gJ3Jlc3VsdCcgaWYg
d2Uga25vdyB3ZSdyZSBmcm9udG1vc3QuCi0gICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3Vs
dChyZXN1bHQuaGl0VGVzdFBvaW50KCksIHJlc3VsdC5zaGFkb3dDb250ZW50RmlsdGVyUG9saWN5
KCkpOwotICAgICAgICBpZiAoaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHRlbXBSZXN1bHQsIGxh
eWVyQm91bmRzLCBoaXRUZXN0UG9pbnQsIEhpdFRlc3REZXNjZW5kYW50cykgJiYKLSAgICAgICAg
ICAgIGlzSGl0Q2FuZGlkYXRlKHRoaXMsIGZhbHNlLCB6T2Zmc2V0Rm9yQ29udGVudHNQdHIsIHVu
ZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUuZ2V0KCkpKSB7CisgICAgICAgIEhpdFRlc3RSZXN1bHQg
dGVtcFJlc3VsdChyZXN1bHQuaGl0VGVzdExvY2F0aW9uKCksIHJlc3VsdC5zaGFkb3dDb250ZW50
RmlsdGVyUG9saWN5KCkpOworICAgICAgICBpZiAoaGl0VGVzdENvbnRlbnRzKHJlcXVlc3QsIHRl
bXBSZXN1bHQsIGxheWVyQm91bmRzLCBoaXRUZXN0TG9jYXRpb24sIEhpdFRlc3REZXNjZW5kYW50
cykKKyAgICAgICAgICAgICYmIGlzSGl0Q2FuZGlkYXRlKHRoaXMsIGZhbHNlLCB6T2Zmc2V0Rm9y
Q29udGVudHNQdHIsIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUuZ2V0KCkpKSB7CiAgICAgICAg
ICAgICBpZiAocmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpKQogICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQodGVtcFJlc3VsdCk7CiAgICAgICAgICAgICBlbHNlCkBAIC0zNjc5LDcgKzM2Nzks
NyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciog
cm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogICAgIH0KIAogICAgIC8vIE5vdyBjaGVjayBv
dXIgbmVnYXRpdmUgei1pbmRleCBjaGlsZHJlbi4KLSAgICBoaXRMYXllciA9IGhpdFRlc3RMaXN0
KG5lZ1pPcmRlckxpc3QoKSwgcm9vdExheWVyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RSZWN0
LCBoaXRUZXN0UG9pbnQsCisgICAgaGl0TGF5ZXIgPSBoaXRUZXN0TGlzdChuZWdaT3JkZXJMaXN0
KCksIHJvb3RMYXllciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdExvY2F0
aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsVHJhbnNm
b3JtU3RhdGUuZ2V0KCksIHpPZmZzZXRGb3JEZXNjZW5kYW50c1B0ciwgek9mZnNldCwgdW5mbGF0
dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgZGVwdGhTb3J0RGVzY2VuZGFudHMpOwogICAgIGlm
IChoaXRMYXllcikgewogICAgICAgICBpZiAoIWRlcHRoU29ydERlc2NlbmRhbnRzKQpAQCAtMzY5
MSwyNSArMzY5MSwyNiBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihS
ZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogICAgIGlmIChjYW5kaWRh
dGVMYXllcikKICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZUxheWVyOwogCi0gICAgaWYgKGJnUmVj
dC5pbnRlcnNlY3RzKGhpdFRlc3RQb2ludCkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpKSB7Ci0g
ICAgICAgIEhpdFRlc3RSZXN1bHQgdGVtcFJlc3VsdChyZXN1bHQuaGl0VGVzdFBvaW50KCksIHJl
c3VsdC5zaGFkb3dDb250ZW50RmlsdGVyUG9saWN5KCkpOwotICAgICAgICBpZiAoaGl0VGVzdENv
bnRlbnRzKHJlcXVlc3QsIHRlbXBSZXN1bHQsIGxheWVyQm91bmRzLCBoaXRUZXN0UG9pbnQsIEhp
dFRlc3RTZWxmKSAmJgotICAgICAgICAgICAgaXNIaXRDYW5kaWRhdGUodGhpcywgZmFsc2UsIHpP
ZmZzZXRGb3JDb250ZW50c1B0ciwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSkpIHsK
KyAgICBpZiAoYmdSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSAmJiBpc1NlbGZQYWlu
dGluZ0xheWVyKCkpIHsKKyAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5o
aXRUZXN0TG9jYXRpb24oKSwgcmVzdWx0LnNoYWRvd0NvbnRlbnRGaWx0ZXJQb2xpY3koKSk7Cisg
ICAgICAgIGlmIChoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgdGVtcFJlc3VsdCwgbGF5ZXJCb3Vu
ZHMsIGhpdFRlc3RMb2NhdGlvbiwgSGl0VGVzdFNlbGYpCisgICAgICAgICAgICAmJiBpc0hpdENh
bmRpZGF0ZSh0aGlzLCBmYWxzZSwgek9mZnNldEZvckNvbnRlbnRzUHRyLCB1bmZsYXR0ZW5lZFRy
YW5zZm9ybVN0YXRlLmdldCgpKSkgewogICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1JlY3RCYXNl
ZFRlc3QoKSkKICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlbXBSZXN1bHQ7CiAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuaXNSZWN0QmFz
ZWRUZXN0KCkpCisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdC5pc1JlY3RCYXNlZFRlc3Qo
KSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGVtcFJlc3VsdCk7CiAgICAgfQogCiAgICAg
cmV0dXJuIDA7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50cyhjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlv
dXRSZWN0JiBsYXllckJvdW5kcywgY29uc3QgSGl0VGVzdFBvaW50JiBoaXRUZXN0UG9pbnQsIEhp
dFRlc3RGaWx0ZXIgaGl0VGVzdEZpbHRlcikgY29uc3QKK2Jvb2wgUmVuZGVyTGF5ZXI6OmhpdFRl
c3RDb250ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllckJvdW5kcywgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiBoaXRUZXN0TG9jYXRpb24sIEhpdFRlc3RGaWx0ZXIgaGl0VGVzdEZpbHRlcikgY29uc3QK
IHsKLSAgICBpZiAoIXJlbmRlcmVyKCktPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0
UG9pbnQsCisgICAgaWYgKCFyZW5kZXJlcigpLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwgaGl0
VGVzdExvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvTGF5b3V0UG9pbnQo
bGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhpdFRlc3RGaWx0ZXIpKSB7CiAgICAgICAgIC8vIEl0J3Mgd3Jv
bmcgdG8gc2V0IGlubmVyTm9kZSwgYnV0IHRoZW4gY2xhaW0gdGhhdCB5b3UgZGlkbid0IGhpdCBh
bnl0aGluZywgdW5sZXNzIGl0IGlzCkBAIC0zNzM1LDcgKzM3MzYsNyBAQCBib29sIFJlbmRlckxh
eWVyOjpoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmCiAKIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExpc3QoVmVjdG9y
PFJlbmRlckxheWVyKj4qIGxpc3QsIFJlbmRlckxheWVyKiByb290TGF5ZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0UG9pbnQm
IGhpdFRlc3RQb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVz
dExvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBI
aXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHRyYW5zZm9ybVN0YXRlLCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlKiB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMsIGRv
dWJsZSogek9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLApA
QCAtMzc0OCwxMSArMzc0OSwxMSBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RM
aXN0KFZlY3RvcjxSZW5kZXJMYXllcio+KiBsaXN0LCBSZW5kZXJMYXllciogcgogICAgIGZvciAo
aW50IGkgPSBsaXN0LT5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICBSZW5kZXJM
YXllciogY2hpbGRMYXllciA9IGxpc3QtPmF0KGkpOwogICAgICAgICBSZW5kZXJMYXllciogaGl0
TGF5ZXIgPSAwOwotICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBSZXN1bHQocmVzdWx0LmhpdFRl
c3RQb2ludCgpLCByZXN1bHQuc2hhZG93Q29udGVudEZpbHRlclBvbGljeSgpKTsKKyAgICAgICAg
SGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0TG9jYXRpb24oKSwgcmVzdWx0
LnNoYWRvd0NvbnRlbnRGaWx0ZXJQb2xpY3koKSk7CiAgICAgICAgIGlmIChjaGlsZExheWVyLT5p
c1BhZ2luYXRlZCgpKQotICAgICAgICAgICAgaGl0TGF5ZXIgPSBoaXRUZXN0UGFnaW5hdGVkQ2hp
bGRMYXllcihjaGlsZExheWVyLCByb290TGF5ZXIsIHJlcXVlc3QsIHRlbXBSZXN1bHQsIGhpdFRl
c3RSZWN0LCBoaXRUZXN0UG9pbnQsIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9yRGVzY2VuZGFu
dHMpOworICAgICAgICAgICAgaGl0TGF5ZXIgPSBoaXRUZXN0UGFnaW5hdGVkQ2hpbGRMYXllcihj
aGlsZExheWVyLCByb290TGF5ZXIsIHJlcXVlc3QsIHRlbXBSZXN1bHQsIGhpdFRlc3RSZWN0LCBo
aXRUZXN0TG9jYXRpb24sIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBoaXRMYXllciA9IGNoaWxkTGF5ZXItPmhpdFRlc3RM
YXllcihyb290TGF5ZXIsIHRoaXMsIHJlcXVlc3QsIHRlbXBSZXN1bHQsIGhpdFRlc3RSZWN0LCBo
aXRUZXN0UG9pbnQsIGZhbHNlLCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldEZvckRlc2NlbmRhbnRz
KTsKKyAgICAgICAgICAgIGhpdExheWVyID0gY2hpbGRMYXllci0+aGl0VGVzdExheWVyKHJvb3RM
YXllciwgdGhpcywgcmVxdWVzdCwgdGVtcFJlc3VsdCwgaGl0VGVzdFJlY3QsIGhpdFRlc3RMb2Nh
dGlvbiwgZmFsc2UsIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMpOwogCiAg
ICAgICAgIC8vIElmIGl0IGEgcmVjdC1iYXNlZCB0ZXN0LCB3ZSBjYW4gc2FmZWx5IGFwcGVuZCB0
aGUgdGVtcG9yYXJ5IHJlc3VsdCBzaW5jZSBpdCBtaWdodCBoYWQgaGl0CiAgICAgICAgIC8vIG5v
ZGVzIGJ1dCBub3QgbmVjZXNzZXJpbHkgaGFkIGhpdExheWVyIHNldC4KQEAgLTM3NzIsNyArMzc3
Myw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExpc3QoVmVjdG9yPFJlbmRl
ckxheWVyKj4qIGxpc3QsIFJlbmRlckxheWVyKiByCiB9CiAKIFJlbmRlckxheWVyKiBSZW5kZXJM
YXllcjo6aGl0VGVzdFBhZ2luYXRlZENoaWxkTGF5ZXIoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIs
IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBI
aXRUZXN0UG9pbnQmIGhpdFRlc3RQb2ludCwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRl
KiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0
UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIGNvbnN0IEhpdFRl
c3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9mZnNldCkKIHsK
ICAgICBWZWN0b3I8UmVuZGVyTGF5ZXIqPiBjb2x1bW5MYXllcnM7CiAgICAgUmVuZGVyTGF5ZXIq
IGFuY2VzdG9yTGF5ZXIgPSBpc05vcm1hbEZsb3dPbmx5KCkgPyBwYXJlbnQoKSA6IHN0YWNraW5n
Q29udGV4dCgpOwpAQCAtMzc4NCwxMiArMzc4NSwxMiBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5
ZXI6OmhpdFRlc3RQYWdpbmF0ZWRDaGlsZExheWVyKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBS
ZQogICAgIH0KIAogICAgIEFTU0VSVChjb2x1bW5MYXllcnMuc2l6ZSgpKTsKLSAgICByZXR1cm4g
aGl0VGVzdENoaWxkTGF5ZXJDb2x1bW5zKGNoaWxkTGF5ZXIsIHJvb3RMYXllciwgcmVxdWVzdCwg
cmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdFBvaW50LCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNl
dCwKKyAgICByZXR1cm4gaGl0VGVzdENoaWxkTGF5ZXJDb2x1bW5zKGNoaWxkTGF5ZXIsIHJvb3RM
YXllciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0UmVjdCwgaGl0VGVzdExvY2F0aW9uLCB0cmFu
c2Zvcm1TdGF0ZSwgek9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbHVtbkxheWVycywgY29sdW1uTGF5ZXJzLnNpemUoKSAtIDEpOwogfQogCiBSZW5kZXJMYXll
ciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RDaGlsZExheWVyQ29sdW1ucyhSZW5kZXJMYXllciogY2hp
bGRMYXllciwgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBj
b25zdCBIaXRUZXN0UG9pbnQmIGhpdFRlc3RQb2ludCwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9y
bVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0
VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9uLCBjb25zdCBI
aXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHRyYW5zZm9ybVN0YXRlLCBkb3VibGUqIHpPZmZzZXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBWZWN0b3I8UmVuZGVyTGF5ZXIqPiYgY29sdW1uTGF5ZXJzLCBzaXplX3QgY29sdW1uSW5kZXgp
CiB7CiAgICAgUmVuZGVyQmxvY2sqIGNvbHVtbkJsb2NrID0gdG9SZW5kZXJCbG9jayhjb2x1bW5M
YXllcnNbY29sdW1uSW5kZXhdLT5yZW5kZXJlcigpKTsKQEAgLTM4NDYsNyArMzg0Nyw3IEBAIFJl
bmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxkTGF5ZXJDb2x1bW5zKFJlbmRlckxh
eWVyKiBjaGlsZExheWVyLCBSZW5kCiAgICAgICAgIExheW91dFJlY3QgbG9jYWxDbGlwUmVjdCho
aXRUZXN0UmVjdCk7CiAgICAgICAgIGxvY2FsQ2xpcFJlY3QuaW50ZXJzZWN0KGNvbFJlY3QpOwog
Ci0gICAgICAgIGlmICghbG9jYWxDbGlwUmVjdC5pc0VtcHR5KCkgJiYgaGl0VGVzdFBvaW50Lmlu
dGVyc2VjdHMobG9jYWxDbGlwUmVjdCkpIHsKKyAgICAgICAgaWYgKCFsb2NhbENsaXBSZWN0Lmlz
RW1wdHkoKSAmJiBoaXRUZXN0TG9jYXRpb24uaW50ZXJzZWN0cyhsb2NhbENsaXBSZWN0KSkgewog
ICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGhpdExheWVyID0gMDsKICAgICAgICAgICAgIGlmICgh
Y29sdW1uSW5kZXgpIHsKICAgICAgICAgICAgICAgICAvLyBBcHBseSBhIHRyYW5zbGF0aW9uIHRy
YW5zZm9ybSB0byBjaGFuZ2Ugd2hlcmUgdGhlIGxheWVyIHBhaW50cy4KQEAgLTM4NTgsNyArMzg1
OSw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxkTGF5ZXJDb2x1bW5z
KFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBSZW5kCiAgICAgICAgICAgICAgICAgbmV3VHJhbnNm
b3JtLnRyYW5zbGF0ZVJpZ2h0KG9mZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCkpOwogCiAg
ICAgICAgICAgICAgICAgY2hpbGRMYXllci0+bV90cmFuc2Zvcm0gPSBhZG9wdFB0cihuZXcgVHJh
bnNmb3JtYXRpb25NYXRyaXgobmV3VHJhbnNmb3JtKSk7Ci0gICAgICAgICAgICAgICAgaGl0TGF5
ZXIgPSBjaGlsZExheWVyLT5oaXRUZXN0TGF5ZXIocm9vdExheWVyLCBjb2x1bW5MYXllcnNbMF0s
IHJlcXVlc3QsIHJlc3VsdCwgbG9jYWxDbGlwUmVjdCwgaGl0VGVzdFBvaW50LCBmYWxzZSwgdHJh
bnNmb3JtU3RhdGUsIHpPZmZzZXQpOworICAgICAgICAgICAgICAgIGhpdExheWVyID0gY2hpbGRM
YXllci0+aGl0VGVzdExheWVyKHJvb3RMYXllciwgY29sdW1uTGF5ZXJzWzBdLCByZXF1ZXN0LCBy
ZXN1bHQsIGxvY2FsQ2xpcFJlY3QsIGhpdFRlc3RMb2NhdGlvbiwgZmFsc2UsIHRyYW5zZm9ybVN0
YXRlLCB6T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBpZiAob2xkSGFzVHJhbnNmb3JtKQogICAg
ICAgICAgICAgICAgICAgICBjaGlsZExheWVyLT5tX3RyYW5zZm9ybSA9IGFkb3B0UHRyKG5ldyBU
cmFuc2Zvcm1hdGlvbk1hdHJpeChvbGRUcmFuc2Zvcm0pKTsKICAgICAgICAgICAgICAgICBlbHNl
CkBAIC0zODY3LDE5ICszODY4LDE5IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVz
dENoaWxkTGF5ZXJDb2x1bW5zKFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBSZW5kCiAgICAgICAg
ICAgICAgICAgLy8gQWRqdXN0IHRoZSB0cmFuc2Zvcm0gc3VjaCB0aGF0IHRoZSByZW5kZXJlcidz
IHVwcGVyIGxlZnQgY29ybmVyIHdpbGwgYmUgYXQgKDAsMCkgaW4gdXNlciBzcGFjZS4KICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGludm9sdmVzIHN1YnRyYWN0aW5nIG91dCB0aGUgcG9zaXRpb24g
b2YgdGhlIGxheWVyIGluIG91ciBjdXJyZW50IGNvb3JkaW5hdGUgc3BhY2UuCiAgICAgICAgICAg
ICAgICAgUmVuZGVyTGF5ZXIqIG5leHRMYXllciA9IGNvbHVtbkxheWVyc1tjb2x1bW5JbmRleCAt
IDFdOwotICAgICAgICAgICAgICAgIFJlZlB0cjxIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU+IG5l
d1RyYW5zZm9ybVN0YXRlID0gbmV4dExheWVyLT5jcmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKHJv
b3RMYXllciwgbmV4dExheWVyLCBsb2NhbENsaXBSZWN0LCBoaXRUZXN0UG9pbnQsIHRyYW5zZm9y
bVN0YXRlKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRl
PiBuZXdUcmFuc2Zvcm1TdGF0ZSA9IG5leHRMYXllci0+Y3JlYXRlTG9jYWxUcmFuc2Zvcm1TdGF0
ZShyb290TGF5ZXIsIG5leHRMYXllciwgbG9jYWxDbGlwUmVjdCwgaGl0VGVzdExvY2F0aW9uLCB0
cmFuc2Zvcm1TdGF0ZSk7CiAgICAgICAgICAgICAgICAgbmV3VHJhbnNmb3JtU3RhdGUtPnRyYW5z
bGF0ZShvZmZzZXQud2lkdGgoKSwgb2Zmc2V0LmhlaWdodCgpLCBIaXRUZXN0aW5nVHJhbnNmb3Jt
U3RhdGU6OkFjY3VtdWxhdGVUcmFuc2Zvcm0pOwogICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQg
bG9jYWxQb2ludCA9IG5ld1RyYW5zZm9ybVN0YXRlLT5tYXBwZWRQb2ludCgpOwogICAgICAgICAg
ICAgICAgIEZsb2F0UXVhZCBsb2NhbFBvaW50UXVhZCA9IG5ld1RyYW5zZm9ybVN0YXRlLT5tYXBw
ZWRRdWFkKCk7CiAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBsb2NhbEhpdFRlc3RSZWN0ID0g
bmV3VHJhbnNmb3JtU3RhdGUtPm1hcHBlZEFyZWEoKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwot
ICAgICAgICAgICAgICAgIEhpdFRlc3RQb2ludCBuZXdIaXRUZXN0UG9pbnQ7Ci0gICAgICAgICAg
ICAgICAgaWYgKGhpdFRlc3RQb2ludC5pc1JlY3RCYXNlZFRlc3QoKSkKLSAgICAgICAgICAgICAg
ICAgICAgbmV3SGl0VGVzdFBvaW50ID0gSGl0VGVzdFBvaW50KGxvY2FsUG9pbnQsIGxvY2FsUG9p
bnRRdWFkKTsKKyAgICAgICAgICAgICAgICBIaXRUZXN0TG9jYXRpb24gbmV3SGl0VGVzdExvY2F0
aW9uOworICAgICAgICAgICAgICAgIGlmIChoaXRUZXN0TG9jYXRpb24uaXNSZWN0QmFzZWRUZXN0
KCkpCisgICAgICAgICAgICAgICAgICAgIG5ld0hpdFRlc3RMb2NhdGlvbiA9IEhpdFRlc3RMb2Nh
dGlvbihsb2NhbFBvaW50LCBsb2NhbFBvaW50UXVhZCk7CiAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICBuZXdIaXRUZXN0UG9pbnQgPSBIaXRUZXN0UG9pbnQobG9jYWxQ
b2ludCk7CisgICAgICAgICAgICAgICAgICAgIG5ld0hpdFRlc3RMb2NhdGlvbiA9IEhpdFRlc3RM
b2NhdGlvbihsb2NhbFBvaW50KTsKICAgICAgICAgICAgICAgICBuZXdUcmFuc2Zvcm1TdGF0ZS0+
ZmxhdHRlbigpOwogCi0gICAgICAgICAgICAgICAgaGl0TGF5ZXIgPSBoaXRUZXN0Q2hpbGRMYXll
ckNvbHVtbnMoY2hpbGRMYXllciwgY29sdW1uTGF5ZXJzW2NvbHVtbkluZGV4IC0gMV0sIHJlcXVl
c3QsIHJlc3VsdCwgbG9jYWxIaXRUZXN0UmVjdCwgbmV3SGl0VGVzdFBvaW50LAorICAgICAgICAg
ICAgICAgIGhpdExheWVyID0gaGl0VGVzdENoaWxkTGF5ZXJDb2x1bW5zKGNoaWxkTGF5ZXIsIGNv
bHVtbkxheWVyc1tjb2x1bW5JbmRleCAtIDFdLCByZXF1ZXN0LCByZXN1bHQsIGxvY2FsSGl0VGVz
dFJlY3QsIG5ld0hpdFRlc3RMb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXdUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgek9mZnNldCwg
Y29sdW1uTGF5ZXJzLCBjb2x1bW5JbmRleCAtIDEpOwogICAgICAgICAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IGU0Zjc5MGUwNTliNjcxMjJkNDRlMTU5
NjY2N2E5MmE5YmNhOGE3NGYuLjRhNDIxOWY0YWQxNWJlMjk4OTY2NDAyNmFhMWEwZjJjNmI5NTE0
MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC0xMTUsNyArMTE1
LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0
LmlzRW1wdHkoKTsgfQogICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBMYXlvdXRSZWN0JiByZWN0
KSB7IHJldHVybiBtX3JlY3QuaW50ZXJzZWN0cyhyZWN0KTsgfQotICAgIGJvb2wgaW50ZXJzZWN0
cyhjb25zdCBIaXRUZXN0UG9pbnQmKTsKKyAgICBib29sIGludGVyc2VjdHMoY29uc3QgSGl0VGVz
dExvY2F0aW9uJik7CiAKIHByaXZhdGU6CiAgICAgTGF5b3V0UmVjdCBtX3JlY3Q7CkBAIC01MTYs
NyArNTE2LDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhhdmlvciA9IFBhaW50QmVoYXZpb3JO
b3JtYWwsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290ID0gMCwKICAgICAgICAgUmVuZGVyUmVn
aW9uKiA9IDAsIFBhaW50TGF5ZXJGbGFncyA9IDApOwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmKTsKLSAgICBib29sIGhpdFRlc3QoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRUZXN0UG9pbnQmLCBIaXRUZXN0UmVzdWx0Jik7Cisg
ICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiwgSGl0VGVzdFJlc3VsdCYpOwogICAgIHZvaWQgcGFpbnRPdmVybGF5U2Nyb2xsYmFycyhH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBQYWludEJlaGF2
aW9yLCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdCk7CiAKICAgICAvLyBUaGlzIG1ldGhvZCBm
aWd1cmVzIG91dCBvdXIgbGF5ZXJCb3VuZHMgaW4gY29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8KQEAg
LTczNywyNSArNzM3LDI1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQYWludExheWVyRmxhZ3MsIGNvbnN0IFZlY3RvcjxSZW5kZXJMYXllcio+JiBjb2x1
bW5MYXllcnMsIHNpemVfdCBjb2x1bW5JbmRleCk7CiAKICAgICBSZW5kZXJMYXllciogaGl0VGVz
dExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXll
ciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RS
ZWN0LCBjb25zdCBIaXRUZXN0UG9pbnQmLCBib29sIGFwcGxpZWRUcmFuc2Zvcm0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29u
c3QgSGl0VGVzdExvY2F0aW9uJiwgYm9vbCBhcHBsaWVkVHJhbnNmb3JtLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zv
cm1TdGF0ZSA9IDAsIGRvdWJsZSogek9mZnNldCA9IDApOwogICAgIFJlbmRlckxheWVyKiBoaXRU
ZXN0TGlzdChWZWN0b3I8UmVuZGVyTGF5ZXIqPiosIFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBj
b25zdCBIaXRUZXN0UG9pbnQmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBM
YXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFu
c2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMsIGRvdWJsZSogek9mZnNl
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9y
bVN0YXRlKiB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLCBib29sIGRlcHRoU29ydERlc2NlbmRh
bnRzKTsKICAgICBSZW5kZXJMYXllciogaGl0VGVzdFBhZ2luYXRlZENoaWxkTGF5ZXIoUmVuZGVy
TGF5ZXIqIGNoaWxkTGF5ZXIsIFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0
LCBjb25zdCBIaXRUZXN0UG9pbnQmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExv
Y2F0aW9uJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zm
c2V0KTsKICAgICBSZW5kZXJMYXllciogaGl0VGVzdENoaWxkTGF5ZXJDb2x1bW5zKFJlbmRlckxh
eWVyKiBjaGlsZExheWVyLCBSZW5kZXJMYXllciogcm9vdExheWVyLCBjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNv
bnN0IEhpdFRlc3RQb2ludCYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9u
JiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhpdFRl
c3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9mZnNldCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxSZW5k
ZXJMYXllcio+JiBjb2x1bW5MYXllcnMsIHNpemVfdCBjb2x1bW5JbmRleCk7CiAKICAgICBQYXNz
UmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gY3JlYXRlTG9jYWxUcmFuc2Zvcm1TdGF0
ZShSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3Qs
IGNvbnN0IEhpdFRlc3RQb2ludCYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
TGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiBjb250
YWluZXJUcmFuc2Zvcm1TdGF0ZSkgY29uc3Q7CiAgICAgCi0gICAgYm9vbCBoaXRUZXN0Q29udGVu
dHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UmVj
dCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRlc3RQb2ludCYsIEhpdFRlc3RGaWx0ZXIpIGNvbnN0
OworICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mLCBIaXRUZXN0RmlsdGVyKSBjb25zdDsKIAogICAgIHZvaWQgY29tcHV0ZVNjcm9sbERp
bWVuc2lvbnMoKTsKICAgICBib29sIGhhc0hvcml6b250YWxPdmVyZmxvdygpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKaW5kZXggMjcz
OWQ0MTI0NjUxYjIyNjE3NDMxMWM0NzVkNzVhZWE5OTBmNzQwOS4uZWE1MGQ1MmU4ZDdhZmY5NzM5
MGVkYTAzMTZjZmNjZTU2NjYxZGFjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGluZUJveExpc3QuY3BwCkBAIC0yNzMsNyArMjczLDcgQEAgdm9pZCBSZW5kZXJMaW5l
Qm94TGlzdDo6cGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyLCBQYWludEluZm8m
IHBhaW50SW4KICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyTGluZUJveExpc3Q6OmhpdFRlc3QoUmVu
ZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlv
biBoaXRUZXN0QWN0aW9uKSBjb25zdAorYm9vbCBSZW5kZXJMaW5lQm94TGlzdDo6aGl0VGVzdChS
ZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRp
b25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRU
ZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pIGNvbnN0CiB7CiAgICAgaWYgKGhpdFRlc3RBY3Rpb24g
IT0gSGl0VGVzdEZvcmVncm91bmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI4NCwxMCAr
Mjg0LDEwIEBAIGJvb2wgUmVuZGVyTGluZUJveExpc3Q6OmhpdFRlc3QoUmVuZGVyQm94TW9kZWxP
YmplY3QqIHJlbmRlcmVyLCBjb25zdCBIaXRUZXN0UmVxCiAgICAgaWYgKCFmaXJzdExpbmVCb3go
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTGF5b3V0UG9pbnQgcG9pbnQgPSBwb2lu
dEluQ29udGFpbmVyLnBvaW50KCk7CisgICAgTGF5b3V0UG9pbnQgcG9pbnQgPSBsb2NhdGlvbklu
Q29udGFpbmVyLnBvaW50KCk7CiAgICAgTGF5b3V0UmVjdCByZWN0ID0gZmlyc3RMaW5lQm94KCkt
PmlzSG9yaXpvbnRhbCgpID8KLSAgICAgICAgSW50UmVjdChwb2ludC54KCksIHBvaW50LnkoKSAt
IHBvaW50SW5Db250YWluZXIudG9wUGFkZGluZygpLCAxLCBwb2ludEluQ29udGFpbmVyLnRvcFBh
ZGRpbmcoKSArIHBvaW50SW5Db250YWluZXIuYm90dG9tUGFkZGluZygpICsgMSkgOgotICAgICAg
ICBJbnRSZWN0KHBvaW50LngoKSAtIHBvaW50SW5Db250YWluZXIubGVmdFBhZGRpbmcoKSwgcG9p
bnQueSgpLCBwb2ludEluQ29udGFpbmVyLnJpZ2h0UGFkZGluZygpICsgcG9pbnRJbkNvbnRhaW5l
ci5sZWZ0UGFkZGluZygpICsgMSwgMSk7CisgICAgICAgIEludFJlY3QocG9pbnQueCgpLCBwb2lu
dC55KCkgLSBsb2NhdGlvbkluQ29udGFpbmVyLnRvcFBhZGRpbmcoKSwgMSwgbG9jYXRpb25JbkNv
bnRhaW5lci50b3BQYWRkaW5nKCkgKyBsb2NhdGlvbkluQ29udGFpbmVyLmJvdHRvbVBhZGRpbmco
KSArIDEpIDoKKyAgICAgICAgSW50UmVjdChwb2ludC54KCkgLSBsb2NhdGlvbkluQ29udGFpbmVy
LmxlZnRQYWRkaW5nKCksIHBvaW50LnkoKSwgbG9jYXRpb25JbkNvbnRhaW5lci5yaWdodFBhZGRp
bmcoKSArIGxvY2F0aW9uSW5Db250YWluZXIubGVmdFBhZGRpbmcoKSArIDEsIDEpOwogCiAgICAg
aWYgKCFhbnlMaW5lSW50ZXJzZWN0c1JlY3QocmVuZGVyZXIsIHJlY3QsIGFjY3VtdWxhdGVkT2Zm
c2V0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjk4LDkgKzI5OCw5IEBAIGJvb2wgUmVu
ZGVyTGluZUJveExpc3Q6OmhpdFRlc3QoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyLCBj
b25zdCBIaXRUZXN0UmVxCiAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBjdXJyID0gbGFzdExpbmVC
b3goKTsgY3VycjsgY3VyciA9IGN1cnItPnByZXZMaW5lQm94KCkpIHsKICAgICAgICAgUm9vdElu
bGluZUJveCogcm9vdCA9IGN1cnItPnJvb3QoKTsKICAgICAgICAgaWYgKHJhbmdlSW50ZXJzZWN0
c1JlY3QocmVuZGVyZXIsIGN1cnItPmxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdyhyb290LT5saW5l
VG9wKCkpLCBjdXJyLT5sb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3cocm9vdC0+bGluZUJvdHRv
bSgpKSwgcmVjdCwgYWNjdW11bGF0ZWRPZmZzZXQpKSB7Ci0gICAgICAgICAgICBib29sIGluc2lk
ZSA9IGN1cnItPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwg
YWNjdW11bGF0ZWRPZmZzZXQsIHJvb3QtPmxpbmVUb3AoKSwgcm9vdC0+bGluZUJvdHRvbSgpKTsK
KyAgICAgICAgICAgIGJvb2wgaW5zaWRlID0gY3Vyci0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVz
dWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgcm9vdC0+bGluZVRv
cCgpLCByb290LT5saW5lQm90dG9tKCkpOwogICAgICAgICAgICAgaWYgKGluc2lkZSkgewotICAg
ICAgICAgICAgICAgIHJlbmRlcmVyLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJ
bkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSk7Cisg
ICAgICAgICAgICAgICAgcmVuZGVyZXItPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2Nh
dGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQp
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuaAppbmRleCAy
YzIwMzgyOTU5YTk4NGEwYzdkNGFjOGIyMWRmYzJhNTAzZDdjMDk3Li5lMzkxZjI1ZTY0NWViNzM3
YmJiMmNiNTllYzI0MjI2ODQ5ZTkzYmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGluZUJveExpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGluZUJveExpc3QuaApAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
aXJ0eUxpbmVzRnJvbUNoYW5nZWRDaGlsZChSZW5kZXJPYmplY3QqIHBhcmVudCwgUmVuZGVyT2Jq
ZWN0KiBjaGlsZCk7CiAKICAgICB2b2lkIHBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiwgUGFp
bnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKLSAgICBib29sIGhpdFRlc3QoUmVu
ZGVyQm94TW9kZWxPYmplY3QqLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgY29uc3Q7CisgICAgYm9vbCBoaXRU
ZXN0KFJlbmRlckJveE1vZGVsT2JqZWN0KiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIGNvbnN0Owog
CiBwcml2YXRlOgogICAgIGJvb2wgYW55TGluZUludGVyc2VjdHNSZWN0KFJlbmRlckJveE1vZGVs
T2JqZWN0KiwgY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IExheW91dFBvaW50JiwgYm9vbCB1c2VQ
cmludFJlY3QgPSBmYWxzZSwgTGF5b3V0VW5pdCBvdXRsaW5lU2l6ZSA9IDApIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCmluZGV4IDYzNzZiMDk4YmM1
YTFlYTViZWEyOGY0Yzc0ODVkODgyNTBiODE5ZDQuLmRiNzBiMDhhNTE2NzRhNGJlN2IyMzA3Zjcx
NTA1NWEwNzkzNTkyY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAKQEAgLTQ1OSw3ICs0NTksNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUJh
Y2tncm91bmQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JgogICAgIH0K
IH0KIAotYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KQorYm9vbCBSZW5kZXJMaXN0Qm94Ojpp
c1BvaW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlv
dXRQb2ludCYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0KQogewogICAgIGlmICghbV92QmFyIHx8ICFtX3ZCYXItPnNob3VsZFBhcnRpY2lw
YXRlSW5IaXRUZXN0aW5nKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ2OSw3ICs0Njks
NyBAQCBib29sIFJlbmRlckxpc3RCb3g6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dAogICAgICAgICAgICAgICAgICAgICAgICAgbV92
QmFyLT53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSBib3JkZXJU
b3AoKSAtIGJvcmRlckJvdHRvbSgpKTsKIAotICAgIGlmICh2ZXJ0UmVjdC5jb250YWlucyhwb2lu
dEluQ29udGFpbmVyKSkgeworICAgIGlmICh2ZXJ0UmVjdC5jb250YWlucyhsb2NhdGlvbkluQ29u
dGFpbmVyKSkgewogICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTY4OSwyMSArNjg5LDIxIEBAIHZvaWQgUmVu
ZGVyTGlzdEJveDo6c2V0U2Nyb2xsVG9wKGludCBuZXdUb3ApCiAgICAgc2Nyb2xsVG9PZmZzZXRX
aXRob3V0QW5pbWF0aW9uKFZlcnRpY2FsU2Nyb2xsYmFyLCBpbmRleCk7CiB9CiAKLWJvb2wgUmVu
ZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVy
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0
VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdExv
Y2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICBpZiAoIVJlbmRl
ckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkKKyAgICBpZiAoIVJlbmRlckJsb2NrOjpu
b2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGFjY3VtdWxh
dGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNv
bnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50KCktPmxp
c3RJdGVtcygpOwogICAgIGludCBzaXplID0gbnVtSXRlbXMoKTsKICAgICBMYXlvdXRQb2ludCBh
ZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOwogCiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKGl0ZW1Cb3VuZGlu
Z0JveFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgaSkuY29udGFpbnMocG9pbnRJbkNvbnRhaW5lci5w
b2ludCgpKSkgeworICAgICAgICBpZiAoaXRlbUJvdW5kaW5nQm94UmVjdChhZGp1c3RlZExvY2F0
aW9uLCBpKS5jb250YWlucyhsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkpKSB7CiAgICAgICAg
ICAgICBpZiAoRWxlbWVudCogbm9kZSA9IGxpc3RJdGVtc1tpXSkgewogICAgICAgICAgICAgICAg
IHJlc3VsdC5zZXRJbm5lck5vZGUobm9kZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQu
aW5uZXJOb25TaGFyZWROb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zZXRJbm5l
ck5vblNoYXJlZE5vZGUobm9kZSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnNldExvY2FsUG9p
bnQocG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRp
b24pKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuc2V0TG9jYWxQb2ludChsb2NhdGlvbkluQ29u
dGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAppbmRleCA0OTYxOTEyMDZmNjQ5MTFiMmFmOTJlOWVl
YWNiMmI4YTNlZWQ0MzkxLi4xNWM2MjNiYzhlMDhhNzVhN2I0OWUxMzMwMWVkNTgxOWUyZjRiY2Zm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKQEAgLTcwLDcgKzcw
LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwg
Y29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICB2aXJ0dWFsIExheW91dFJlY3QgY29udHJvbENsaXBS
ZWN0KGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNQb2lu
dEluT3ZlcmZsb3dDb250cm9sKEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9p
bnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNQb2ludEluT3ZlcmZsb3dDb250cm9sKEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0KTsKIAogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEsIE5vZGUqKiBz
dG9wTm9kZSA9IDApOwogICAgIHZpcnR1YWwgYm9vbCBsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2lj
YWxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSwgTm9k
ZSoqIHN0b3BOb2RlID0gMCk7CkBAIC05OCw3ICs5OCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCB2b2lkIHNldFNjcm9sbExlZnQoaW50KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsVG9w
KGludCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVy
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9W
RVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlv
bikgT1ZFUlJJREU7CiAKICAgICAvLyBTY3JvbGxhYmxlQXJlYSBpbnRlcmZhY2UuCiAgICAgdmly
dHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3QgT1ZFUlJJREU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDkzM2E1NTlj
NGI4Njg5MTJmODNiMDBjMmQ5NWU2ODJhMDk2NTk4Y2MuLjE1NzJiZjM2MmU1YzAwNDA4MmZlYWUy
MzdiYjI0YzFhMTlkMDJkMDYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCkBAIC0yNTM0LDI1ICsyNTM0LDI1IEBAIGJvb2wgUmVuZGVyT2JqZWN0Ojppc0NvbXBv
c2l0ZWQoKSBjb25zdAogICAgIHJldHVybiBoYXNMYXllcigpICYmIHRvUmVuZGVyQm94TW9kZWxP
YmplY3QodGhpcyktPmxheWVyKCktPmlzQ29tcG9zaXRlZCgpOwogfQogCi1ib29sIFJlbmRlck9i
amVjdDo6aGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExh
eW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEZpbHRlciBoaXRUZXN0RmlsdGVy
KQorYm9vbCBSZW5kZXJPYmplY3Q6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlv
bkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRl
c3RGaWx0ZXIgaGl0VGVzdEZpbHRlcikKIHsKICAgICBib29sIGluc2lkZSA9IGZhbHNlOwogICAg
IGlmIChoaXRUZXN0RmlsdGVyICE9IEhpdFRlc3RTZWxmKSB7CiAgICAgICAgIC8vIEZpcnN0IHRl
c3QgdGhlIGZvcmVncm91bmQgbGF5ZXIgKGxpbmVzIGFuZCBpbmxpbmVzKS4KLSAgICAgICAgaW5z
aWRlID0gbm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1
bXVsYXRlZE9mZnNldCwgSGl0VGVzdEZvcmVncm91bmQpOworICAgICAgICBpbnNpZGUgPSBub2Rl
QXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGFjY3VtdWxhdGVk
T2Zmc2V0LCBIaXRUZXN0Rm9yZWdyb3VuZCk7CiAKICAgICAgICAgLy8gVGVzdCBmbG9hdHMgbmV4
dC4KICAgICAgICAgaWYgKCFpbnNpZGUpCi0gICAgICAgICAgICBpbnNpZGUgPSBub2RlQXRQb2lu
dChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBI
aXRUZXN0RmxvYXQpOworICAgICAgICAgICAgaW5zaWRlID0gbm9kZUF0UG9pbnQocmVxdWVzdCwg
cmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEZs
b2F0KTsKIAogICAgICAgICAvLyBGaW5hbGx5IHRlc3QgdG8gc2VlIGlmIHRoZSBtb3VzZSBpcyBp
biB0aGUgYmFja2dyb3VuZCAod2l0aGluIGEgY2hpbGQgYmxvY2sncyBiYWNrZ3JvdW5kKS4KICAg
ICAgICAgaWYgKCFpbnNpZGUpCi0gICAgICAgICAgICBpbnNpZGUgPSBub2RlQXRQb2ludChyZXF1
ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0
Q2hpbGRCbG9ja0JhY2tncm91bmRzKTsKKyAgICAgICAgICAgIGluc2lkZSA9IG5vZGVBdFBvaW50
KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQs
IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZHMpOwogICAgIH0KIAogICAgIC8vIFNlZSBpZiB0
aGUgbW91c2UgaXMgaW5zaWRlIHVzIGJ1dCBub3QgYW55IG9mIG91ciBkZXNjZW5kYW50cwogICAg
IGlmIChoaXRUZXN0RmlsdGVyICE9IEhpdFRlc3REZXNjZW5kYW50cyAmJiAhaW5zaWRlKQotICAg
ICAgICBpbnNpZGUgPSBub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWlu
ZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QmxvY2tCYWNrZ3JvdW5kKTsKKyAgICAgICAg
aW5zaWRlID0gbm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVy
LCBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEJsb2NrQmFja2dyb3VuZCk7CiAKICAgICByZXR1
cm4gaW5zaWRlOwogfQpAQCAtMjU3MSw3ICsyNTcxLDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnVw
ZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2lu
dCYKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyT2JqZWN0Ojpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIC8qcG9pbnRJ
bkNvbnRhaW5lciovLCBjb25zdCBMYXlvdXRQb2ludCYgLyphY2N1bXVsYXRlZE9mZnNldCovLCBI
aXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJPYmplY3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgLypsb2Nh
dGlvbkluQ29udGFpbmVyKi8sIGNvbnN0IExheW91dFBvaW50JiAvKmFjY3VtdWxhdGVkT2Zmc2V0
Ki8sIEhpdFRlc3RBY3Rpb24pCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IDA1Y2NlYTQ4ZDJiN2QxOTg5NTM5NzQ2MDQ1
ODIwOWQ0NzkwZjllMjYuLjA3ODJjYTRkMDFjZGU2YWI4ZTZmMWRkYmFiYjdhMTdlMTU1NzljYmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTQ2LDcgKzQ2LDcg
QEAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgQW5pbWF0aW9uQ29udHJvbGxlcjsKIGNs
YXNzIEN1cnNvcjsKIGNsYXNzIERvY3VtZW50OwotY2xhc3MgSGl0VGVzdFBvaW50OworY2xhc3Mg
SGl0VGVzdExvY2F0aW9uOwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNzIElubGluZUJveDsK
IGNsYXNzIElubGluZUZsb3dCb3g7CkBAIC02NTcsOSArNjU3LDkgQEAgcHVibGljOgogCiAgICAg
Ym9vbCBpc0NvbXBvc2l0ZWQoKSBjb25zdDsKIAotICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5D
b250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEZp
bHRlciA9IEhpdFRlc3RBbGwpOworICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEZpbHRl
ciA9IEhpdFRlc3RBbGwpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVIaXRUZXN0UmVzdWx0KEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYpOwotICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRU
ZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0
aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICBWaXNpYmxlUG9zaXRpb24gY3Jl
YXRlVmlzaWJsZVBvc2l0aW9uKGludCBvZmZzZXQsIEVBZmZpbml0eSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCmluZGV4IGRiZGJlODNmN2I1YzU4MzFmOGY5NDQx
YmYwMTA1ODQzNjE5YTEzNmYuLmY1NjQzYzc3MTc1YzdmZjE1M2MwZDQxMzE0MjJmMWVjOTMzYzIy
YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCkBAIC0xMTgs
NyArMTE4LDcgQEAgdm9pZCBSZW5kZXJSZWdpb246OnBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE8KIH0KIAogLy8gSGl0IFRlc3RpbmcK
LWJvb2wgUmVuZGVyUmVnaW9uOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5D
b250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFj
dGlvbiBhY3Rpb24pCitib29sIFJlbmRlclJlZ2lvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdExv
Y2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewogICAgIGlmICghaXNWYWxpZCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjcsMTQgKzEyNywxNCBAQCBib29sIFJlbmRlclJl
Z2lvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RS
ZXN1bHQmIHJlcwogCiAgICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0LiBGb3IgdGhpcyBwdXJw
b3NlIGFsd2F5cyBhc3N1bWUgdGhhdCB3ZSBjYW4gb25seSBiZSBoaXQgaW4gdGhlCiAgICAgLy8g
Zm9yZWdyb3VuZCBwaGFzZSAod2hpY2ggaXMgdHJ1ZSBmb3IgcmVwbGFjZWQgZWxlbWVudHMgbGlr
ZSBpbWFnZXMpLgotICAgIExheW91dFJlY3QgYm91bmRzUmVjdCA9IGJvcmRlckJveFJlY3RJblJl
Z2lvbihwb2ludEluQ29udGFpbmVyLnJlZ2lvbigpKTsKKyAgICBMYXlvdXRSZWN0IGJvdW5kc1Jl
Y3QgPSBib3JkZXJCb3hSZWN0SW5SZWdpb24obG9jYXRpb25JbkNvbnRhaW5lci5yZWdpb24oKSk7
CiAgICAgYm91bmRzUmVjdC5tb3ZlQnkoYWRqdXN0ZWRMb2NhdGlvbik7Ci0gICAgaWYgKHZpc2li
bGVUb0hpdFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZvcmVncm91bmQgJiYgcG9pbnRJ
bkNvbnRhaW5lci5pbnRlcnNlY3RzKGJvdW5kc1JlY3QpKSB7CisgICAgaWYgKHZpc2libGVUb0hp
dFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZvcmVncm91bmQgJiYgbG9jYXRpb25JbkNv
bnRhaW5lci5pbnRlcnNlY3RzKGJvdW5kc1JlY3QpKSB7CiAgICAgICAgIC8vIENoZWNrIHRoZSBj
b250ZW50cyBvZiB0aGUgUmVuZGVyRmxvd1RocmVhZC4KLSAgICAgICAgaWYgKG1fZmxvd1RocmVh
ZCAmJiBtX2Zsb3dUaHJlYWQtPmhpdFRlc3RSZWdpb24odGhpcywgcmVxdWVzdCwgcmVzdWx0LCBw
b2ludEluQ29udGFpbmVyLCBMYXlvdXRQb2ludChhZGp1c3RlZExvY2F0aW9uLngoKSArIGJvcmRl
ckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIGFkanVzdGVkTG9jYXRpb24ueSgpICsgYm9yZGVyVG9w
KCkgKyBwYWRkaW5nVG9wKCkpKSkKKyAgICAgICAgaWYgKG1fZmxvd1RocmVhZCAmJiBtX2Zsb3dU
aHJlYWQtPmhpdFRlc3RSZWdpb24odGhpcywgcmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29u
dGFpbmVyLCBMYXlvdXRQb2ludChhZGp1c3RlZExvY2F0aW9uLngoKSArIGJvcmRlckxlZnQoKSAr
IHBhZGRpbmdMZWZ0KCksIGFkanVzdGVkTG9jYXRpb24ueSgpICsgYm9yZGVyVG9wKCkgKyBwYWRk
aW5nVG9wKCkpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB1cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXpl
KGFkanVzdGVkTG9jYXRpb24pKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJh
c2VkVGVzdFJlc3VsdChub2RlKCksIHBvaW50SW5Db250YWluZXIsIGJvdW5kc1JlY3QpKQorICAg
ICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lci5wb2lu
dCgpIC0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24pKTsKKyAgICAgICAgaWYgKCFyZXN1
bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChub2RlKCksIGxvY2F0aW9uSW5Db250YWlu
ZXIsIGJvdW5kc1JlY3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgKaW5kZXggNWYyMmE3NWE3M2MzZjMxYTk3
ZWFmYzA0MjIxOWUzZjVjN2VlOTM3NS4uNjJjMTkyNzgyYjE2ZGU0MTMyZmRkNTk0NmQ2ZjA5ZWRk
ZGU3NDgyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uaApAQCAtNDcs
NyArNDcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyUmVnaW9uKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50UmVwbGFjZWQoUGFp
bnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3R5
bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAppbmRleCBiNWMzMDgz
NzNkZjM2ZDZiMjg3NmM5YWM1MzllN2VkMDBkOTZlNGM3Li45NGU2NGVhMmEzZjVhM2Y1YzcxZjkw
Mjg3MzA2NjIyNmEwMjE1ZDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZS5jcHAKQEAgLTEyNjksMTcgKzEyNjksMTcgQEAgTGF5b3V0UmVjdCBSZW5kZXJUYWJsZTo6b3Zl
cmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlclJlZ2kKICAg
ICByZXR1cm4gcmVjdDsKIH0KIAotYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0
VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewogICAg
IExheW91dFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0
aW9uKCk7CiAKICAgICAvLyBDaGVjayBraWRzIGZpcnN0LgotICAgIGlmICghaGFzT3ZlcmZsb3dD
bGlwKCkgfHwgcG9pbnRJbkNvbnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJlY3QoYWRq
dXN0ZWRMb2NhdGlvbiwgcG9pbnRJbkNvbnRhaW5lci5yZWdpb24oKSkpKSB7CisgICAgaWYgKCFo
YXNPdmVyZmxvd0NsaXAoKSB8fCBsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMob3ZlcmZs
b3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uLCBsb2NhdGlvbkluQ29udGFpbmVyLnJlZ2lvbigp
KSkpIHsKICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYg
KGNoaWxkLT5pc0JveCgpICYmICF0b1JlbmRlckJveChjaGlsZCktPmhhc1NlbGZQYWludGluZ0xh
eWVyKCkgJiYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpIHx8IGNoaWxkLT5pc1RhYmxlQ2FwdGlv
bigpKSkgewogICAgICAgICAgICAgICAgIExheW91dFBvaW50IGNoaWxkUG9pbnQgPSBmbGlwRm9y
V3JpdGluZ01vZGVGb3JDaGlsZCh0b1JlbmRlckJveChjaGlsZCksIGFkanVzdGVkTG9jYXRpb24p
OwotICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0
LCBwb2ludEluQ29udGFpbmVyLCBjaGlsZFBvaW50LCBhY3Rpb24pKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCB0b0xheW91dFBvaW50KHBvaW50SW5D
b250YWluZXIucG9pbnQoKSAtIGNoaWxkUG9pbnQpKTsKKyAgICAgICAgICAgICAgICBpZiAoY2hp
bGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgY2hp
bGRQb2ludCwgYWN0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVz
dWx0KHJlc3VsdCwgdG9MYXlvdXRQb2ludChsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSBj
aGlsZFBvaW50KSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTEyODgsOSArMTI4OCw5IEBAIGJvb2wgUmVuZGVy
VGFibGU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1CiAKICAgICAvLyBDaGVjayBvdXIgYm91bmRzIG5leHQuCiAgICAgTGF5b3V0
UmVjdCBib3VuZHNSZWN0KGFkanVzdGVkTG9jYXRpb24sIHNpemUoKSk7Ci0gICAgaWYgKHZpc2li
bGVUb0hpdFRlc3RpbmcoKSAmJiAoYWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwg
YWN0aW9uID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgcG9pbnRJbkNvbnRhaW5l
ci5pbnRlcnNlY3RzKGJvdW5kc1JlY3QpKSB7Ci0gICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQo
cmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gdG9M
YXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24pKSk7Ci0gICAgICAgIGlmICghcmVzdWx0LmFkZE5v
ZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCBwb2ludEluQ29udGFpbmVyLCBib3VuZHNS
ZWN0KSkKKyAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIChhY3Rpb24gPT0gSGl0VGVz
dEJsb2NrQmFja2dyb3VuZCB8fCBhY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5k
KSAmJiBsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMoYm91bmRzUmVjdCkpIHsKKyAgICAg
ICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShsb2NhdGlv
bkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpKTsK
KyAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChub2RlKCks
IGxvY2F0aW9uSW5Db250YWluZXIsIGJvdW5kc1JlY3QpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCmluZGV4IGJi
YWZkYjcxNmZjZTFiNDZlNzRkYjRmOGY5MmI4NjdlMjEzOThlZGMuLjhlYjJiZTYxNWY2YWRlNWUy
ZDZjNjQxODFlZDA2OWRjYTQxOTJiMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZS5oCkBAIC0yNDksNyArMjQ5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRNYXNrKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lk
IGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRo
cygpOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNv
bnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5l
ciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBP
VkVSUklERTsKIAogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBiYXNlbGluZVBvc2l0aW9uKEZvbnRC
YXNlbGluZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25N
b2RlID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0
dWFsIExheW91dFVuaXQgZmlyc3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdCBPVkVSUklERTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCmluZGV4IDdkYzA1ZmE1
NjdkYjc3ZWZmYmIwNTdkMDA1YjA5MTU0ZDQ2YTdlMzMuLjI1OTE2YjkxN2MzNzdiYzNhOWY3NDky
MjUyNjgyNmUzM2EwZGYyNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVJvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlUm93LmNwcApAQCAtMTk1LDcgKzE5NSw3IEBAIExheW91dFJlY3QgUmVuZGVyVGFibGVSb3c6
OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByCiB9
CiAKIC8vIEhpdCBUZXN0aW5nCi1ib29sIFJlbmRlclRhYmxlUm93Ojpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBI
aXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCitib29sIFJlbmRlclRhYmxlUm93Ojpu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCiB7
CiAgICAgLy8gVGFibGUgcm93cyBjYW5ub3QgZXZlciBiZSBoaXQgdGVzdGVkLiAgRWZmZWN0aXZl
bHkgdGhleSBkbyBub3QgZXhpc3QuCiAgICAgLy8gSnVzdCBmb3J3YXJkIHRvIG91ciBjaGlsZHJl
biBhbHdheXMuCkBAIC0yMDYsOCArMjA2LDggQEAgYm9vbCBSZW5kZXJUYWJsZVJvdzo6bm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHIKICAg
ICAgICAgLy8gdGhlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMgY2hlY2suCiAgICAgICAgIGlmIChjaGls
ZC0+aXNUYWJsZUNlbGwoKSAmJiAhdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdM
YXllcigpKSB7CiAgICAgICAgICAgICBMYXlvdXRQb2ludCBjZWxsUG9pbnQgPSBmbGlwRm9yV3Jp
dGluZ01vZGVGb3JDaGlsZCh0b1JlbmRlclRhYmxlQ2VsbChjaGlsZCksIGFjY3VtdWxhdGVkT2Zm
c2V0KTsKLSAgICAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0
LCBwb2ludEluQ29udGFpbmVyLCBjZWxsUG9pbnQsIGFjdGlvbikpIHsKLSAgICAgICAgICAgICAg
ICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0g
dG9MYXlvdXRTaXplKGNlbGxQb2ludCkpOworICAgICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRQ
b2ludChyZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGNlbGxQb2ludCwgYWN0
aW9uKSkgeworICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2Nh
dGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoY2VsbFBvaW50KSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgKaW5kZXggYWZhODM4YzEyNTQ2MWJl
NWZjMzU1ZDAyNjVkY2QzMWNlZjZhMmMzMS4uMzRjYWZlYjYwNzQ3N2U1NjA1MzI1ZjBlZTZlMmFi
MjVmM2RlZTIyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlUm93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgK
QEAgLTk1LDcgKzk1LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVu
ZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOwogICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIExheW91dFJlY3QgY2xpcHBlZE92ZXJm
bG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9u
KSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gaXNUcmFuc3BhcmVudCgpIHx8IGhhc092ZXJmbG93Q2xpcCgpIHx8IGhh
c1RyYW5zZm9ybSgpIHx8IGhhc0hpZGRlbkJhY2tmYWNlKCkgfHwgaGFzTWFzaygpIHx8IGhhc0Zp
bHRlcigpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5jcHAKaW5kZXggYTkwNmEyZWY4MjY5MWE4YmViOWE2MTE1MTA5NjQwNmQ2MjJkMGJiOC4u
MDQwOGQyMDBkZTQ1ZGE3YzNlZDVlYWQ3MmI0Y2RmM2U1NGZkNmI0MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAgLTEzNjksNyArMTM2
OSw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpzcGxpdENvbHVtbih1bnNpZ25lZCBwb3Ms
IHVuc2lnbmVkIGZpcnN0KQogfQogCiAvLyBIaXQgVGVzdGluZwotYm9vbCBSZW5kZXJUYWJsZVNl
Y3Rpb246Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikK
K2Jvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24m
IGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBubyBjaGlsZHJl
biB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KICAgICBpZiAoIWZpcnN0Q2hpbGQoKSkKQEAg
LTEzNzksNyArMTM3OSw3IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsCiAgICAgLy8gSnVzdCBm
b3J3YXJkIHRvIG91ciBjaGlsZHJlbiBhbHdheXMuCiAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRM
b2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKIAotICAgIGlmIChoYXNP
dmVyZmxvd0NsaXAoKSAmJiAhcG9pbnRJbkNvbnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xp
cFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgcG9pbnRJbkNvbnRhaW5lci5yZWdpb24oKSkpKQorICAg
IGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAhbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3Rz
KG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgbG9jYXRpb25JbkNvbnRhaW5lci5y
ZWdpb24oKSkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaGFzT3ZlcmZsb3dp
bmdDZWxsKCkpIHsKQEAgLTEzOTAsOCArMTM5MCw4IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9u
Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
CiAgICAgICAgICAgICAvLyB0aGVuIHdlIGNhbiByZW1vdmUgdGhpcyBjaGVjay4KICAgICAgICAg
ICAgIGlmIChjaGlsZC0+aXNCb3goKSAmJiAhdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFp
bnRpbmdMYXllcigpKSB7CiAgICAgICAgICAgICAgICAgTGF5b3V0UG9pbnQgY2hpbGRQb2ludCA9
IGZsaXBGb3JXcml0aW5nTW9kZUZvckNoaWxkKHRvUmVuZGVyQm94KGNoaWxkKSwgYWRqdXN0ZWRM
b2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0
LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGNoaWxkUG9pbnQsIGFjdGlvbikpIHsKLSAgICAg
ICAgICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHRvTGF5b3V0UG9pbnQo
cG9pbnRJbkNvbnRhaW5lci5wb2ludCgpIC0gY2hpbGRQb2ludCkpOworICAgICAgICAgICAgICAg
IGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFp
bmVyLCBjaGlsZFBvaW50LCBhY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUhp
dFRlc3RSZXN1bHQocmVzdWx0LCB0b0xheW91dFBvaW50KGxvY2F0aW9uSW5Db250YWluZXIucG9p
bnQoKSAtIGNoaWxkUG9pbnQpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTQwMSw3ICsxNDAxLDcgQEAgYm9v
bCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWwKIAogICAgIHJlY2FsY0NlbGxzSWZOZWVkZWQoKTsKIAotICAg
IExheW91dFJlY3QgaGl0VGVzdFJlY3QgPSBwb2ludEluQ29udGFpbmVyLmJvdW5kaW5nQm94KCk7
CisgICAgTGF5b3V0UmVjdCBoaXRUZXN0UmVjdCA9IGxvY2F0aW9uSW5Db250YWluZXIuYm91bmRp
bmdCb3goKTsKICAgICBoaXRUZXN0UmVjdC5tb3ZlQnkoLWFkanVzdGVkTG9jYXRpb24pOwogCiAg
ICAgTGF5b3V0UmVjdCB0YWJsZUFsaWduZWRSZWN0ID0gbG9naWNhbFJlY3RGb3JXcml0aW5nTW9k
ZUFuZERpcmVjdGlvbihoaXRUZXN0UmVjdCk7CkBAIC0xNDIxLDggKzE0MjEsOCBAQCBib29sIFJl
bmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bAogICAgICAgICAgICAgICAgIC0taTsKICAgICAgICAgICAgICAgICBS
ZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBjdXJyZW50LmNlbGxzW2ldOwogICAgICAgICAgICAgICAg
IExheW91dFBvaW50IGNlbGxQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZUZvckNoaWxkKGNlbGws
IGFkanVzdGVkTG9jYXRpb24pOwotICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxSZW5k
ZXJPYmplY3QqPihjZWxsKS0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29u
dGFpbmVyLCBjZWxsUG9pbnQsIGFjdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRl
SGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0
U2l6ZShjZWxsUG9pbnQpKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8UmVuZGVy
T2JqZWN0Kj4oY2VsbCktPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNv
bnRhaW5lciwgY2VsbFBvaW50LCBhY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0
ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xh
eW91dFNpemUoY2VsbFBvaW50KSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAppbmRleCA4OWJmZjM5YTA4ZjIwMGM1ODQ3MjU3NWEz
YTc1ZGFlODZhMTJiZmEwLi44MmUyOWU3NmMzZDI3MmFhNzZlZmQ1NzdkOWI1ZTRhNTJiNjkxOTMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCkBA
IC0yMTcsNyArMjE3LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5n
ZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KiA9IDApOwogCi0gICAgdmlydHVhbCBi
b29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJv
b2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOwogCiAgICAgdm9p
ZCBlbnN1cmVSb3dzKHVuc2lnbmVkKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmgKaW5kZXggYjk2ZWNhNzNmMzZjMTVmZjYyMjVlOTk4YTM5MTEwNTU2NzE3ZjQ0YS4uY2I4ZjE4
MzEwYTY2YWM1YjM1NDc5MzUyMDI1NTIyY2NmZTkwY2QxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dC5oCkBAIC0xNTYsNyArMTU2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1
YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgeyBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmLCBjb25zdCBMYXlvdXRQ
b2ludCYsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBM
YXlvdXRQb2ludCYsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFIHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdm9pZCBkZWxldGVUZXh0Qm94ZXMoKTsKICAgICBi
b29sIGNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbE11bHRpTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmUuY3BwCmluZGV4IDk2OTk3ZDBlZGQxMGQ2ZjU4MDM0YmI3MDc3NGM1YmNi
ODU2M2I5MzcuLmJlOTFkZTkyN2JkNGY4ODQ3ODA3MTQ0Njg4ZDhiYTllYzc4MjFjYjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGlu
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVs
dGlMaW5lLmNwcApAQCAtNDMsMTMgKzQzLDEzIEBAIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5l
Ojp+UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUoKQogICAgICAgICBzdGF0aWNfY2FzdDxIVE1M
VGV4dEFyZWFFbGVtZW50Kj4obm9kZSgpKS0+cmVuZGVyZXJXaWxsQmVEZXN0cm95ZWQoKTsKIH0K
IAotYm9vbCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVz
dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyVGV4dENvbnRy
b2xNdWx0aUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNv
bnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0
aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0gICAgaWYgKCFSZW5kZXJUZXh0Q29udHJvbDo6bm9kZUF0
UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNl
dCwgaGl0VGVzdEFjdGlvbikpCisgICAgaWYgKCFSZW5kZXJUZXh0Q29udHJvbDo6bm9kZUF0UG9p
bnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNl
dCwgaGl0VGVzdEFjdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChyZXN1
bHQuaW5uZXJOb2RlKCkgPT0gbm9kZSgpIHx8IHJlc3VsdC5pbm5lck5vZGUoKSA9PSBpbm5lclRl
eHRFbGVtZW50KCkpCi0gICAgICAgIGhpdElubmVyVGV4dEVsZW1lbnQocmVzdWx0LCBwb2ludElu
Q29udGFpbmVyLnBvaW50KCksIGFjY3VtdWxhdGVkT2Zmc2V0KTsKKyAgICAgICAgaGl0SW5uZXJU
ZXh0RWxlbWVudChyZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSwgYWNjdW11bGF0
ZWRPZmZzZXQpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oCmluZGV4IDVjODRhNTkx
MDVlY2E3N2IxMzFhYjBjNTQ0ZWYyYzc1MGY1OTlkNzMuLmE0NTM5OTU5YTIyZmVmN2M5NzM5NjNh
OWMwYjQ3ZTBjMDUwMDdjNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzVGV4dEFyZWEoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVy
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9W
RVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlv
bikgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIGZsb2F0IGdldEF2Z0NoYXJXaWR0aChBdG9taWNT
dHJpbmcgZmFtaWx5KTsKICAgICB2aXJ0dWFsIExheW91dFVuaXQgcHJlZmVycmVkQ29udGVudFdp
ZHRoKGZsb2F0IGNoYXJXaWR0aCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCmluZGV4IDY2NWFmMzJi
ZTQxZWVkMDc3YTVmYmUwNjg2Y2YzNGM4M2QxYjE1MWIuLmM4MzBjNjE2ZTM2NDRlMzMwMzUwMDA1
YzFlYWUxMGM3MjYyYTMyZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCkBAIC0xOTIsOSArMTkyLDkgQEAg
dm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxheW91dCgpCiAgICAgfQogfQogCi1i
b29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlv
biBoaXRUZXN0QWN0aW9uKQogewotICAgIGlmICghUmVuZGVyVGV4dENvbnRyb2w6Om5vZGVBdFBv
aW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQs
IGhpdFRlc3RBY3Rpb24pKQorICAgIGlmICghUmVuZGVyVGV4dENvbnRyb2w6Om5vZGVBdFBvaW50
KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQs
IGhpdFRlc3RBY3Rpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBTYXkgdGhh
dCB3ZSBoaXQgdGhlIGlubmVyIHRleHQgZWxlbWVudCBpZgpAQCAtMjAzLDcgKzIwMyw3IEBAIGJv
b2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0CiAgICAgLy8gIC0gd2UgaGl0IHJlZ2lvbnMgbm90IGluIGFu
eSBkZWNvcmF0aW9uIGJ1dHRvbnMuCiAgICAgSFRNTEVsZW1lbnQqIGNvbnRhaW5lciA9IGNvbnRh
aW5lckVsZW1lbnQoKTsKICAgICBpZiAocmVzdWx0LmlubmVyTm9kZSgpLT5pc0Rlc2NlbmRhbnRP
Zihpbm5lclRleHRFbGVtZW50KCkpIHx8IHJlc3VsdC5pbm5lck5vZGUoKSA9PSBub2RlKCkgfHwg
KGNvbnRhaW5lciAmJiBjb250YWluZXIgPT0gcmVzdWx0LmlubmVyTm9kZSgpKSkgewotICAgICAg
ICBMYXlvdXRQb2ludCBwb2ludEluUGFyZW50ID0gcG9pbnRJbkNvbnRhaW5lci5wb2ludCgpOwor
ICAgICAgICBMYXlvdXRQb2ludCBwb2ludEluUGFyZW50ID0gbG9jYXRpb25JbkNvbnRhaW5lci5w
b2ludCgpOwogICAgICAgICBpZiAoY29udGFpbmVyICYmIGlubmVyQmxvY2tFbGVtZW50KCkpIHsK
ICAgICAgICAgICAgIGlmIChpbm5lckJsb2NrRWxlbWVudCgpLT5yZW5kZXJCb3goKSkKICAgICAg
ICAgICAgICAgICBwb2ludEluUGFyZW50IC09IHRvTGF5b3V0U2l6ZShpbm5lckJsb2NrRWxlbWVu
dCgpLT5yZW5kZXJCb3goKS0+bG9jYXRpb24oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKaW5kZXggYzc5ZjNkZmVj
MDU1YWVlNTI4MDJjMTNhNGY1ZGVmNjA0NjI0YmRkZS4uYWYyN2JmNzU4YjQ0MTRjYzEwYmUyMDc0
YjRlMGEyZjZhMzQ1ZmQ4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaApAQCAtNTYsNyArNTYsNyBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYp
OwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RM
b2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgdm9pZCBh
dXRvc2Nyb2xsKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJXaWRnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAK
aW5kZXggZmM0ZjJmMzVhM2U3NzBkMDRhYzRjNmNiMjBhMzMxMjQ4MTNmZDhiNy4uOTUzN2VkZjVk
MjA4N2Q4NWIzNWQ2ZmVjNWVhZmQ3ODZiYmVmMGU1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTM4NSwxMCArMzg1LDEwIEBAIFJlbmRlcldpZGdldCog
UmVuZGVyV2lkZ2V0OjpmaW5kKGNvbnN0IFdpZGdldCogd2lkZ2V0KQogICAgIHJldHVybiB3aWRn
ZXRSZW5kZXJlck1hcCgpLmdldCh3aWRnZXQpOwogfQogCi1ib29sIFJlbmRlcldpZGdldDo6bm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQorYm9vbCBSZW5k
ZXJXaWRnZXQ6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9u
IGFjdGlvbikKIHsKICAgICBib29sIGhhZFJlc3VsdCA9IHJlc3VsdC5pbm5lck5vZGUoKTsKLSAg
ICBib29sIGluc2lkZSA9IFJlbmRlclJlcGxhY2VkOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1
bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBhY3Rpb24pOworICAgIGJv
b2wgaW5zaWRlID0gUmVuZGVyUmVwbGFjZWQ6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwg
bG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGFjdGlvbik7CiAKICAgICAv
LyBDaGVjayB0byBzZWUgaWYgd2UgYXJlIHJlYWxseSBvdmVyIHRoZSB3aWRnZXQgaXRzZWxmIChh
bmQgbm90IGp1c3QgaW4gdGhlIGJvcmRlci9wYWRkaW5nIGFyZWEpLgogICAgIGlmICgoaW5zaWRl
IHx8IHJlc3VsdC5pc1JlY3RCYXNlZFRlc3QoKSkgJiYgIWhhZFJlc3VsdCAmJiByZXN1bHQuaW5u
ZXJOb2RlKCkgPT0gbm9kZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcldpZGdldC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5o
CmluZGV4IGI5M2FlN2I1YTU1YTY4NjM5OTVhZGQwMzFiYzljNjE1MmY4MDY2NWIuLmI3ZGIzYjgw
OWM4NGZjMWJjODc1ZGFiYWQyMzE4ZGRjN2JjYzIwMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyV2lkZ2V0LmgKQEAgLTYwLDcgKzYwLDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29u
c3QgTGF5b3V0UG9pbnQmKTsKICAgICB2aXJ0dWFsIEN1cnNvckRpcmVjdGl2ZSBnZXRDdXJzb3Io
Y29uc3QgTGF5b3V0UG9pbnQmLCBDdXJzb3ImKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgbm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0
VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CiAKIHByaXZhdGU6CiAgICAg
dmlydHVhbCBib29sIGlzV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCmluZGV4IDQzMTNmYTczNWExNmFjNjli
OTE1YzEyZTBhMzNlMmVhNTlhNjQ0MmQuLjkyOGZlNjY3ZTQzM2IyMzcyZmI1YzA3YTRlNzk1OGU3
ZTVjZDMwZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5l
Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAK
QEAgLTIxNywxNSArMjE3LDE1IEBAIHZvaWQgUm9vdElubGluZUJveDo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwKICNlbmRpZgogfQog
Ci1ib29sIFJvb3RJbmxpbmVCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJ
bkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRV
bml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkKK2Jvb2wgUm9vdElubGluZUJveDo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5
b3V0VW5pdCBsaW5lQm90dG9tKQogewogICAgIGlmIChoYXNFbGxpcHNpc0JveCgpICYmIHZpc2li
bGVUb0hpdFRlc3RpbmcoKSkgewotICAgICAgICBpZiAoZWxsaXBzaXNCb3goKS0+bm9kZUF0UG9p
bnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwg
bGluZVRvcCwgbGluZUJvdHRvbSkpIHsKLSAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhp
dFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNp
emUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKKyAgICAgICAgaWYgKGVsbGlwc2lzQm94KCktPm5vZGVB
dFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRP
ZmZzZXQsIGxpbmVUb3AsIGxpbmVCb3R0b20pKSB7CisgICAgICAgICAgICByZW5kZXJlcigpLT51
cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpIC0g
dG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gSW5saW5lRmxvd0JveDo6bm9kZUF0UG9p
bnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwg
bGluZVRvcCwgbGluZUJvdHRvbSk7CisgICAgcmV0dXJuIElubGluZUZsb3dCb3g6Om5vZGVBdFBv
aW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZz
ZXQsIGxpbmVUb3AsIGxpbmVCb3R0b20pOwogfQogCiB2b2lkIFJvb3RJbmxpbmVCb3g6OmFkanVz
dFBvc2l0aW9uKGZsb2F0IGR4LCBmbG9hdCBkeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9Sb290SW5saW5lQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9v
dElubGluZUJveC5oCmluZGV4IDI3YzFhZmNlYTgwZjA4MDgzY2QyNTc5MzNjYmFhNDk4MDIxYWU2
NGYuLjUyNWIyOTUwMzJhNjcxN2E0YjE4ODQ4ODM3YzJhMjVjMjBjMGUyMGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaApAQCAtMTE4LDcgKzExOCw3IEBAIHB1Ymxp
YzoKICNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExh
eW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pOwot
ICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExh
eW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRV
bml0IGxpbmVCb3R0b20pIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRp
b24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIE9WRVJSSURF
OwogCiAgICAgdXNpbmcgSW5saW5lQm94OjpoYXNTZWxlY3RlZENoaWxkcmVuOwogICAgIHVzaW5n
IElubGluZUJveDo6c2V0SGFzU2VsZWN0ZWRDaGlsZHJlbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCmluZGV4IDhm
ODQyZWUyMTUxOWRhYTQxZDA2MGNjY2I2NTU2ZTFkMTcwOTFjY2IuLmFjYzBjNmQzNjVkYzIwYjI4
OWI5MGFkMTJmYjZjYzFlMTkyMzNlYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcApAQCAtMTc4LDEzICsxNzgs
MTMgQEAgYm9vbCBSZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojpub2RlQXRGbG9hdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgLy8gRk9zIGVzdGFibGlzaCBhIHN0YWNraW5nIGNvbnRleHQsIHNvIHdlIG5lZWQgdG8gaGl0
LXRlc3QgYWxsIGxheWVycy4KLSAgICBIaXRUZXN0UG9pbnQgaGl0VGVzdFBvaW50KHJvdW5kZWRM
YXlvdXRQb2ludChsb2NhbFBvaW50KSk7Ci0gICAgcmV0dXJuIFJlbmRlckJsb2NrOjpub2RlQXRQ
b2ludChyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RQb2ludCwgTGF5b3V0UG9pbnQoKSwgSGl0VGVz
dEZvcmVncm91bmQpCi0gICAgICAgIHx8IFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0
LCByZXN1bHQsIGhpdFRlc3RQb2ludCwgTGF5b3V0UG9pbnQoKSwgSGl0VGVzdEZsb2F0KQotICAg
ICAgICB8fCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0
UG9pbnQsIExheW91dFBvaW50KCksIEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZHMpOworICAg
IEhpdFRlc3RMb2NhdGlvbiBoaXRUZXN0TG9jYXRpb24ocm91bmRlZExheW91dFBvaW50KGxvY2Fs
UG9pbnQpKTsKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJl
c3VsdCwgaGl0VGVzdExvY2F0aW9uLCBMYXlvdXRQb2ludCgpLCBIaXRUZXN0Rm9yZWdyb3VuZCkK
KyAgICAgICAgfHwgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgaGl0
VGVzdExvY2F0aW9uLCBMYXlvdXRQb2ludCgpLCBIaXRUZXN0RmxvYXQpCisgICAgICAgIHx8IFJl
bmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RMb2NhdGlvbiwg
TGF5b3V0UG9pbnQoKSwgSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3JvdW5kcyk7CiB9CiAKLWJvb2wg
UmVuZGVyU1ZHRm9yZWlnbk9iamVjdDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiwgY29uc3QgTGF5b3V0UG9pbnQm
LCBIaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mLCBjb25zdCBMYXlvdXRQb2ludCYsIEhpdFRlc3RBY3Rpb24pCiB7CiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaAppbmRleCA3ZTUyZTAw
YzIyNTZkODVjZDg5ZTcyNWUyZTg5MWQwOWZlMzI4MWMwLi5lMjg1MDk5MGJmNzZkNzZkYzA4NjYy
MjNhYjY3MmQ1ZDExNWE1ZDhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBj
b25zdCB7IHJldHVybiBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX3ZpZXdwb3J0LnNpemUoKSk7
IH0KIAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhp
dFRlc3RBY3Rpb24pOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlv
bikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25J
bkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0
QWN0aW9uKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdGb3JlaWduT2JqZWN0KCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250
YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIFRyYW5zZm9ybVN0
YXRlJiwgTWFwTG9jYWxUb0NvbnRhaW5lckZsYWdzIG1vZGUgPSBBcHBseUNvbnRhaW5lckZsaXAg
fCBTbmFwT2Zmc2V0Rm9yVHJhbnNmb3JtcywgYm9vbCogd2FzRml4ZWQgPSAwKSBjb25zdCBPVkVS
UklERTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5jcHAKaW5kZXggMDgyYmY0ODdlNGQ5YjNlYWFhOGQ1NmQxMTg0ZTNkMGE4MTFk
ZDcyZC4uZDQ0YTkzZGE0MjhkZDhmZTNhNzMwZmRhZDZlZmU4NDZlZWE3MmI2MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5j
cHAKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjpzdHlsZURp
ZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bAogICAgIFNWR1Jl
c291cmNlc0NhY2hlOjpjbGllbnRTdHlsZUNoYW5nZWQodGhpcywgZGlmZiwgc3R5bGUoKSk7CiB9
CiAKLWJvb2wgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RQb2ludCYsIGNvbnN0IExheW91
dFBvaW50JiwgSGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRl
c3RMb2NhdGlvbiYsIGNvbnN0IExheW91dFBvaW50JiwgSGl0VGVzdEFjdGlvbikKIHsKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgKaW5kZXggYTI4Mzc2
NjI1YjkwYTc1MGI4MmNjODg2NWY5M2IwZmYzZDg5MzQzMi4uYTk5ZGQ5ZGE3NzY4YzA2NzZlYWEz
MjdlNjYwYjRiMzdkMjJjMjQ3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaApAQCAtNzEsNyArNzEsNyBAQCBwcm90ZWN0ZWQ6
CiAKIHByaXZhdGU6CiAgICAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCwg
U1ZHIHVzZXMgYSBkaWZmZXJlbnQgbm9kZUF0UG9pbnQgbWV0aG9kCi0gICAgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CisgICAgYm9vbCBub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24m
IGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAppbmRleCA1ZDU2YjVjZTc4OTc1ODUxMDM3
ZDExZGIyOGFiNDYyNWQ5MzdmNjhjLi5jOGQyNmY4NDIyOTA4Y2Y5NGE0YTQyN2NiOTM2OWI2MWVi
OTNhNzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jvb3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9v
dC5jcHAKQEAgLTQxNSw5ICs0MTUsOSBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OnVwZGF0ZUNhY2hl
ZEJvdW5kYXJpZXMoKQogICAgIG1fcmVwYWludEJvdW5kaW5nQm94LmluZmxhdGUoYm9yZGVyQW5k
UGFkZGluZ1dpZHRoKCkpOwogfQogCi1ib29sIFJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlclNW
R1Jvb3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5l
ciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhp
dFRlc3RBY3Rpb24pCiB7Ci0gICAgTGF5b3V0UG9pbnQgcG9pbnRJblBhcmVudCA9IHBvaW50SW5D
b250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCk7CisgICAg
TGF5b3V0UG9pbnQgcG9pbnRJblBhcmVudCA9IGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSAt
IHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCk7CiAgICAgTGF5b3V0UG9pbnQgcG9pbnRJ
bkJvcmRlckJveCA9IHBvaW50SW5QYXJlbnQgLSB0b0xheW91dFNpemUobG9jYXRpb24oKSk7CiAK
ICAgICAvLyBPbmx5IHRlc3QgU1ZHIGNvbnRlbnQgaWYgdGhlIHBvaW50IGlzIGluIG91ciBjb250
ZW50IGJveC4KQEAgLTQyOSw3ICs0MjksNyBAQCBib29sIFJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZQogICAg
ICAgICAgICAgLy8gRklYTUU6IG5vZGVBdEZsb2F0UG9pbnQoKSBkb2Vzbid0IGhhbmRsZSByZWN0
LWJhc2VkIGhpdCB0ZXN0cyB5ZXQuCiAgICAgICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdEZsb2F0
UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhbFBvaW50LCBoaXRUZXN0QWN0aW9uKSkgewogICAg
ICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQm9yZGVyQm94
KTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVz
dWx0KGNoaWxkLT5ub2RlKCksIHBvaW50SW5Db250YWluZXIpKQorICAgICAgICAgICAgICAgIGlm
ICghcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoY2hpbGQtPm5vZGUoKSwgbG9j
YXRpb25JbkNvbnRhaW5lcikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC00NDIsOSArNDQyLDkgQEAgYm9vbCBSZW5kZXJTVkdS
b290Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsdCYgcmUKICAgICAgICAgLy8gdG8gYmUgYWJsZSB0byBkZXRlY3QgaGl0cyBvbiB0aGUgYmFj
a2dyb3VuZCBvZiBhIDxkaXY+IGVsZW1lbnQuIElmIHdlJ2QgcmV0dXJuIHRydWUgaGVyZSBpbiB0
aGUgJ0ZvcmVncm91bmQnIHBoYXNlLCB3ZSBhcmUgbm90IGFibGUgCiAgICAgICAgIC8vIHRvIGRl
dGVjdCB0aGVzZSBoaXRzIGFueW1vcmUuCiAgICAgICAgIExheW91dFJlY3QgYm91bmRzUmVjdChh
Y2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCksIHNpemUoKSk7Ci0gICAgICAgIGlmIChwb2lu
dEluQ29udGFpbmVyLmludGVyc2VjdHMoYm91bmRzUmVjdCkpIHsKKyAgICAgICAgaWYgKGxvY2F0
aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhib3VuZHNSZWN0KSkgewogICAgICAgICAgICAgdXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Cb3JkZXJCb3gpOwotICAgICAgICAgICAg
aWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChub2RlKCksIHBvaW50SW5D
b250YWluZXIsIGJvdW5kc1JlY3QpKQorICAgICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRv
UmVjdEJhc2VkVGVzdFJlc3VsdChub2RlKCksIGxvY2F0aW9uSW5Db250YWluZXIsIGJvdW5kc1Jl
Y3QpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAppbmRleCBhMDU2NmIx
MzRhMzcyNmU1NThlMjIyM2VmYWIyZTc3OTUzYWY4MmFjLi5jZGRkMzExZmQ1YzYzYmU2MTc5YTNi
MmM0ZjBlMjMyZjFjZDFmY2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jvb3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jvb3QuaApAQCAtOTAsNyArOTAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgRmxv
YXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VCb3VuZGlu
Z0JveDsgfQogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KIAotICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBIaXRUZXN0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKIAogICAg
IHZpcnR1YWwgTGF5b3V0UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJC
b3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IGNvbXB1dGVGbG9hdFJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyLCBGbG9hdFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGZpeGVkKSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCmluZGV4IGRl
MmYwMTY1Y2E0YWJlYWIxY2NiZmI5YzAzMmFmMGVkMDY5MmY2NjYuLjI5NDVmZTQ4YjcyMzE2NzA5
YmIzN2FiZWMzMzMxMjE2OTc3ZGEyOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUZXh0LmNwcApAQCAtNDUxLDE1ICs0NTEsMTUgQEAgYm9vbCBSZW5kZXJT
VkdUZXh0Ojpub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWwKICAgICAgICAgICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNs
aXBwaW5nQXJlYSh0aGlzLCBsb2NhbFBvaW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7ICAgICAgIAogCi0gICAgICAgICAgICBIaXRUZXN0UG9pbnQgaGl0VGVzdFBvaW50KExheW91
dFBvaW50KGZsb29yZWRJbnRQb2ludChsb2NhbFBvaW50KSkpOwotICAgICAgICAgICAgcmV0dXJu
IFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RQb2ludCwg
TGF5b3V0UG9pbnQoKSwgaGl0VGVzdEFjdGlvbik7CisgICAgICAgICAgICBIaXRUZXN0TG9jYXRp
b24gaGl0VGVzdExvY2F0aW9uKExheW91dFBvaW50KGZsb29yZWRJbnRQb2ludChsb2NhbFBvaW50
KSkpOworICAgICAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0
LCByZXN1bHQsIGhpdFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQoKSwgaGl0VGVzdEFjdGlvbik7
CiAgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVy
U1ZHVGV4dDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSGl0VGVzdFBvaW50JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBIaXRUZXN0QWN0aW9u
KQorYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBMYXlvdXRQb2lu
dCYsIEhpdFRlc3RBY3Rpb24pCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0
dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQu
aAppbmRleCAwYTBjMjg1NmJhYmUwNTk2ODgwOWY0MGMxYzE4ZTNhYmNjZmQ4ZDJmLi5jZDJlMzhm
Nzk2NjA1ZTI3OTBkYjJiY2ZhY2JmOTYwOWRlNTU1OGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaApAQCAtNjIsNyArNjIsNyBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgYm9vbCBpc1NWR1RleHQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSGl0VGVzdFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIE9WRVJSSURFOworICAg
IHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RS
ZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREU7
CiAgICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVz
dEFjdGlvbik7CiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChj
b25zdCBMYXlvdXRQb2ludCYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAppbmRleCA0N2JiNjNkZTIxYmUzZjY0YjNiYTYxZjAyOWVl
NGI5ZDc3ZDk3NTVkLi41YWNmNDdlOTE0N2ZiN2FjNTFhNGQ0MjlkNzdjNDI2MGU2ZDU2YTAwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5j
cHAKQEAgLTcwMSw3ICs3MDEsNyBAQCBGbG9hdFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6Y2FsY3Vs
YXRlQm91bmRhcmllcygpIGNvbnN0CiAgICAgcmV0dXJuIHRleHRSZWN0OwogfQogCi1ib29sIFNW
R0lubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RQb2ludCYgcG9pbnRJbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0LCBM
YXlvdXRVbml0KQorYm9vbCBTVkdJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0
TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCkKIHsKICAgICAvLyBGSVhNRTogaW50
ZWdyYXRlIHdpdGggSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQgYmV0dGVyLgogICAgIEFTU0VS
VCghaXNMaW5lQnJlYWsoKSk7CkBAIC03MTQsOSArNzE0LDkgQEAgYm9vbCBTVkdJbmxpbmVUZXh0
Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsdCYKICAgICAgICAgICAgIEZsb2F0UG9pbnQgYm94T3JpZ2luKHgoKSwgeSgpKTsKICAgICAg
ICAgICAgIGJveE9yaWdpbi5tb3ZlQnkoYWNjdW11bGF0ZWRPZmZzZXQpOwogICAgICAgICAgICAg
RmxvYXRSZWN0IHJlY3QoYm94T3JpZ2luLCBzaXplKCkpOwotICAgICAgICAgICAgaWYgKHBvaW50
SW5Db250YWluZXIuaW50ZXJzZWN0cyhyZWN0KSkgewotICAgICAgICAgICAgICAgIHJlbmRlcmVy
KCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyLnBvaW50KCkg
LSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBpZiAo
IXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KHJlbmRlcmVyKCktPm5vZGUoKSwg
cG9pbnRJbkNvbnRhaW5lciwgcmVjdCkpCisgICAgICAgICAgICBpZiAobG9jYXRpb25JbkNvbnRh
aW5lci5pbnRlcnNlY3RzKHJlY3QpKSB7CisgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSAtIHRv
TGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpOworICAgICAgICAgICAgICAgIGlmICghcmVz
dWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQocmVuZGVyZXIoKS0+bm9kZSgpLCBsb2Nh
dGlvbkluQ29udGFpbmVyLCByZWN0KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCmluZGV4IGE0ZTAzZDgyODFjNGU4NTVjMDIxNjcwZTA3
MmJkZGI1YWI4YmVjODQuLmVmMzk5YzcyNGEyZjI1YjE0NWMxNzU3NGZjMTVkZTFlNDMzYjE0MGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJv
eC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5o
CkBAIC03OSw3ICs3OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludFRleHRXaXRoU2hhZG93
cyhHcmFwaGljc0NvbnRleHQqLCBSZW5kZXJTdHlsZSosIFRleHRSdW4mLCBjb25zdCBTVkdUZXh0
RnJhZ21lbnQmLCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKTsKICAgICB2b2lk
IHBhaW50VGV4dChHcmFwaGljc0NvbnRleHQqLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBz
ZWxlY3Rpb25TdHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgYm9vbCBoYXNTZWxlY3Rpb24s
IGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5KTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIE9WRVJSSURF
OworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9w
LCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIE9WRVJSSURFOwogCiBwcml2YXRlOgogICAgIGZsb2F0
IG1fbG9naWNhbEhlaWdodDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>