<?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>212385</bug_id>
          
          <creation_ts>2020-05-26 13:59:16 -0700</creation_ts>
          <short_desc>Add some new emitters to the X86_64 and ARM64 MacroAssemblers.</short_desc>
          <delta_ts>2020-05-26 16:38:13 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1656167</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-26 13:59:16 -0700</bug_when>
    <thetext>Specifically, these:
    clearBit64
    clearBits64WithMask
    countTrailingZeros64WithoutNullCheck

clearBit64 provides a faster way to clear a bit without having to a shift to make a mask first.
clearBits64WithMask does the equivalent of and64 with the 1&apos;s complement of the provided mask.
countTrailingZeros64WithoutNullCheck does the same thing as countTrailingZeros64, except that it assumes that the word in the register it is processing will never be null, and therefore skips the null check.  This is useful in code that already does a null check ahead of time.  So, there&apos;s no need to do a redundant null check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656181</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-26 14:33:32 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #0)
&gt; clearBit64 provides a faster way to clear a bit without having to a shift to
&gt; make a mask first.

Correction: clearBit64 will emit the shift to make the mask.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656184</commentid>
    <comment_count>2</comment_count>
      <attachid>400277</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-26 14:38:54 -0700</bug_when>
    <thetext>Created attachment 400277
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656185</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-26 14:40:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/63642626&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656187</commentid>
    <comment_count>4</comment_count>
      <attachid>400277</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-05-26 14:47:33 -0700</bug_when>
    <thetext>Comment on attachment 400277
proposed patch.

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

&gt; Source/JavaScriptCore/ChangeLog:16
&gt; +        clearBits64WithMask does the equivalent of and64 with the 1&apos;s complement of the
&gt; +        provided mask.

feels weird to call this a &quot;mask&quot; when we&apos;re really using ~mask</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656196</commentid>
    <comment_count>5</comment_count>
      <attachid>400277</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-26 15:02:35 -0700</bug_when>
    <thetext>Comment on attachment 400277
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:16
&gt;&gt; +        provided mask.
&gt; 
&gt; feels weird to call this a &quot;mask&quot; when we&apos;re really using ~mask

It is a mask: one that defines the bits to clear instead of the bits to keep (as is the case with and64).  I&apos;m open to an alternate term if you can think of anything better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656198</commentid>
    <comment_count>6</comment_count>
      <attachid>400277</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2020-05-26 15:06:29 -0700</bug_when>
    <thetext>Comment on attachment 400277
proposed patch.

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:22
&gt; +        redundant null check.

Do we have any way of easily inserting an assert in the generated code when in debug? It could be useful for these kind of things.

&gt; Source/JavaScriptCore/assembler/testmasm.cpp:474
&gt; +    auto test = compile([=] (CCallHelpers&amp; jit) {

what are you capturing by copy and why?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656201</commentid>
    <comment_count>7</comment_count>
      <attachid>400277</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-26 15:15:03 -0700</bug_when>
    <thetext>Comment on attachment 400277
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:22
&gt;&gt; +        redundant null check.
&gt; 
&gt; Do we have any way of easily inserting an assert in the generated code when in debug? It could be useful for these kind of things.

Hmmm,  I&apos;ll see if it&apos;s easy to do.  If not, I&apos;ll do it in another patch.

&gt;&gt; Source/JavaScriptCore/assembler/testmasm.cpp:474
&gt;&gt; +    auto test = compile([=] (CCallHelpers&amp; jit) {
&gt; 
&gt; what are you capturing by copy and why?

Copy paste error.  I&apos;ll remove the &apos;=&apos;.

&gt; Source/JavaScriptCore/assembler/testmasm.cpp:501
&gt; +    auto test = compile([=] (CCallHelpers&amp; jit) {

Ditto.

&gt; Source/JavaScriptCore/assembler/testmasm.cpp:555
&gt; +    auto test = compile([=] (CCallHelpers&amp; jit) {

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656218</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-26 16:16:18 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #7)
&gt; &gt;&gt; Source/JavaScriptCore/ChangeLog:22
&gt; &gt;&gt; +        redundant null check.
&gt; &gt; 
&gt; &gt; Do we have any way of easily inserting an assert in the generated code when in debug? It could be useful for these kind of things.
&gt; 
&gt; Hmmm,  I&apos;ll see if it&apos;s easy to do.  If not, I&apos;ll do it in another patch.

I&apos;ve added an assertion check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656219</commentid>
    <comment_count>9</comment_count>
      <attachid>400284</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-26 16:17:03 -0700</bug_when>
    <thetext>Created attachment 400284
patch for landing.

Thanks for the review.  Here&apos;s the updated patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656220</commentid>
    <comment_count>10</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2020-05-26 16:18:32 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #8)
&gt; (In reply to Mark Lam from comment #7)
&gt; &gt; &gt;&gt; Source/JavaScriptCore/ChangeLog:22
&gt; &gt; &gt;&gt; +        redundant null check.
&gt; &gt; &gt; 
&gt; &gt; &gt; Do we have any way of easily inserting an assert in the generated code when in debug? It could be useful for these kind of things.
&gt; &gt; 
&gt; &gt; Hmmm,  I&apos;ll see if it&apos;s easy to do.  If not, I&apos;ll do it in another patch.
&gt; 
&gt; I&apos;ve added an assertion check.

Great, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656221</commentid>
    <comment_count>11</comment_count>
      <attachid>400285</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-26 16:23:50 -0700</bug_when>
    <thetext>Created attachment 400285
patch for landing.

Also added the assertion to MacroAssemblerARM64 as well.  ARM64 doesn&apos;t really need the check because it&apos;s implementation will always have correctly even if the word is 0.  However, it&apos;s good to have the assertion consistently to help catch logic errors in the client that break this invariant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656227</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-26 16:38:13 -0700</bug_when>
    <thetext>Landed in r262168: &lt;http://trac.webkit.org/r262168&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400277</attachid>
            <date>2020-05-26 14:38:54 -0700</date>
            <delta_ts>2020-05-26 16:17:03 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-212385.patch</filename>
            <type>text/plain</type>
            <size>14681</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYyMTYwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBA
CisyMDIwLTA1LTI2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgc29tZSBuZXcgZW1pdHRlcnMgdG8gdGhlIFg4Nl82NCBhbmQgQVJNNjQgTWFjcm9Bc3NlbWJs
ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEy
Mzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBhZGRzIHRoZXNlIE1hY3JvQXNzZW1ibGVyIGVtaXR0ZXJzOiAKKyAgICAgICAgICAg
IGNsZWFyQml0NjQKKyAgICAgICAgICAgIGNsZWFyQml0czY0V2l0aE1hc2sKKyAgICAgICAgICAg
IGNvdW50VHJhaWxpbmdaZXJvczY0V2l0aG91dE51bGxDaGVjaworCisgICAgICAgIGNsZWFyQml0
NjQgY2xlYXJzIGEgYml0LgorCisgICAgICAgIGNsZWFyQml0czY0V2l0aE1hc2sgZG9lcyB0aGUg
ZXF1aXZhbGVudCBvZiBhbmQ2NCB3aXRoIHRoZSAxJ3MgY29tcGxlbWVudCBvZiB0aGUKKyAgICAg
ICAgcHJvdmlkZWQgbWFzay4KKworICAgICAgICBjb3VudFRyYWlsaW5nWmVyb3M2NFdpdGhvdXRO
dWxsQ2hlY2sgZG9lcyB0aGUgc2FtZSB0aGluZyBhcyBjb3VudFRyYWlsaW5nWmVyb3M2NCwKKyAg
ICAgICAgZXhjZXB0IHRoYXQgaXQgYXNzdW1lcyB0aGF0IHRoZSB3b3JkIGluIHRoZSByZWdpc3Rl
ciBpdCBpcyBwcm9jZXNzaW5nIHdpbGwgbmV2ZXIKKyAgICAgICAgYmUgbnVsbCwgYW5kIHRoZXJl
Zm9yZSBza2lwcyB0aGUgbnVsbCBjaGVjay4gIFRoaXMgaXMgdXNlZnVsIGluIGNvZGUgZ2VuZXJh
dGlvbgorICAgICAgICB0aGF0IGFscmVhZHkgZG9lcyBhIG51bGwgY2hlY2sgYWhlYWQgb2YgdGlt
ZS4gIFNvLCB0aGVyZSdzIG5vIG5lZWQgdG8gZG8gYQorICAgICAgICByZWR1bmRhbnQgbnVsbCBj
aGVjay4KKworICAgICAgICBBbHNvIGFkZGVkIHRlc3RtYXNtIHRlc3RzIGZvciB0aGVzZSBlbWl0
dGVycy4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0Lmg6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmNsZWFyQml0NjQpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpjbGVhckJpdHM2NFdpdGhNYXNrKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6Y291bnRUcmFpbGluZ1plcm9zNjRXaXRob3V0TnVsbENo
ZWNrKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmNvdW50VHJhaWxpbmdaZXJvczY0V2l0aG91
dE51bGxDaGVjayk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpjbGVhckJp
dDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmNsZWFyQml0czY0V2l0
aE1hc2spOgorICAgICAgICAqIGFzc2VtYmxlci9YODZBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpT
Qzo6WDg2QXNzZW1ibGVyOjpidHJxX3JyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvdGVzdG1hc20u
Y3BwOgorICAgICAgICAoSlNDOjp0ZXN0Q2xlYXJCaXQ2NCk6CisgICAgICAgIChKU0M6OnRlc3RD
bGVhckJpdHM2NFdpdGhNYXNrKToKKyAgICAgICAgKEpTQzo6dGVzdENsZWFyQml0czY0V2l0aE1h
c2tUZXJuYXJ5KToKKyAgICAgICAgKEpTQzo6dGVzdENvdW50VHJhaWxpbmdaZXJvczY0SW1wbCk6
CisgICAgICAgIChKU0M6OnRlc3RDb3VudFRyYWlsaW5nWmVyb3M2NCk6CisgICAgICAgIChKU0M6
OnRlc3RDb3VudFRyYWlsaW5nWmVyb3M2NFdpdGhvdXROdWxsQ2hlY2spOgorICAgICAgICAoSlND
OjpydW4pOgorCiAyMDIwLTA1LTI2ICBLZWl0aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4K
IAogICAgICAgICBFbmFibGUgdGhlIHVzZSBvZiBYQ0J1aWxkIGJ5IGRlZmF1bHQgaW4gQXBwbGUg
YnVpbGRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQVJNNjQuaAkocmV2aXNpb24gMjYyMTUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00NSw2ICs0NSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy
SUQgZGF0YVRlbXBSZWdpc3RlciA9IEFSTTY0UmVnaXN0ZXJzOjppcDA7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBSZWdpc3RlcklEIG1lbW9yeVRlbXBSZWdpc3RlciA9IEFSTTY0UmVnaXN0ZXJzOjpp
cDE7CiAKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgSW52YWxpZEdQUlJlZyA9IEFS
TTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnOworCiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVn
aXN0ZXIoKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9hbGxvd1NjcmF0Y2hSZWdp
c3Rlcik7CkBAIC00MzYsNyArNDM4LDMyIEBAIHB1YmxpYzoKICAgICAgICAgbW92ZShpbW0sIGdl
dENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKSk7CiAgICAgICAgIG1fYXNz
ZW1ibGVyLmFuZF88NjQ+KGRlc3QsIGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIpOwogICAgIH0KLSAg
ICAKKworICAgIHZvaWQgY2xlYXJCaXQ2NChSZWdpc3RlcklEIGJpdFRvQ2xlYXIsIFJlZ2lzdGVy
SUQgZGVzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoRm9yTWFzayA9IEludmFsaWRHUFJSZWcpCisgICAg
eworICAgICAgICBpZiAoc2NyYXRjaEZvck1hc2sgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
ICAgIHNjcmF0Y2hGb3JNYXNrID0gc2NyYXRjaFJlZ2lzdGVyKCk7CisKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hGb3JNYXNrKTsKKyAgICAgICAgbHNoaWZ0NjQoYml0VG9D
bGVhciwgc2NyYXRjaEZvck1hc2spOworICAgICAgICBjbGVhckJpdHM2NFdpdGhNYXNrKHNjcmF0
Y2hGb3JNYXNrLCBkZXN0KTsKKyAgICB9CisKKyAgICBlbnVtIGNsYXNzIENsZWFyQml0c0F0dHJp
YnV0ZXMgeworICAgICAgICBPS1RvQ2xvYmJlck1hc2ssCisgICAgICAgIE11c3RQcmVzZXJ2ZU1h
c2sKKyAgICB9OworCisgICAgdm9pZCBjbGVhckJpdHM2NFdpdGhNYXNrKFJlZ2lzdGVySUQgbWFz
aywgUmVnaXN0ZXJJRCBkZXN0LCBDbGVhckJpdHNBdHRyaWJ1dGVzID0gQ2xlYXJCaXRzQXR0cmli
dXRlczo6T0tUb0Nsb2JiZXJNYXNrKQorICAgIHsKKyAgICAgICAgY2xlYXJCaXRzNjRXaXRoTWFz
ayhkZXN0LCBtYXNrLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyQml0czY0V2l0aE1h
c2soUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgbWFzaywgUmVnaXN0ZXJJRCBkZXN0LCBDbGVh
ckJpdHNBdHRyaWJ1dGVzID0gQ2xlYXJCaXRzQXR0cmlidXRlczo6T0tUb0Nsb2JiZXJNYXNrKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYmljPDY0PihkZXN0LCBzcmMsIG1hc2spOworICAg
IH0KKwogICAgIHZvaWQgY291bnRMZWFkaW5nWmVyb3MzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuY2x6PDMyPihkZXN0LCBzcmMp
OwpAQCAtNDYxLDYgKzQ4OCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmNsejw2
ND4oZGVzdCwgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBjb3VudFRyYWlsaW5nWmVyb3M2NFdp
dGhvdXROdWxsQ2hlY2soUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIC8vIEFybSBkaWQgbm90IG5lZWQgYW4gZXhwbGljaXQgbnVsbCBjaGVjayB0byBiZWdp
biB3aXRoLiBTbywgd2UgY2FuIGRvCisgICAgICAgIC8vIGV4YWN0bHkgdGhlIHNhbWUgdGhpbmcg
YXMgaW4gY291bnRUcmFpbGluZ1plcm9zNjQoKS4KKyAgICAgICAgY291bnRUcmFpbGluZ1plcm9z
NjQoc3JjLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lkIGJ5dGVTd2FwMTYoUmVnaXN0ZXJJRCBk
c3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5yZXYxNjwzMj4oZHN0LCBkc3QpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJYODZfNjQuaAkocmV2aXNpb24gMjYyMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIs
NiArNDIsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIGNvbnN0ZXhwciBTY2FsZSBTY2Fs
ZVB0ciA9IFRpbWVzRWlnaHQ7CiAKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgSW52
YWxpZEdQUlJlZyA9IFg4NlJlZ2lzdGVyczo6SW52YWxpZEdQUlJlZzsKKwogICAgIHVzaW5nIE1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uOjphZGQzMjsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4
NkNvbW1vbjo6YW5kMzI7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmJyYW5j
aDMyOwpAQCAtNDk5LDYgKzUwMSwzOSBAQCBwdWJsaWM6CiAgICAgICAgIGN0ekFmdGVyQnNmPDY0
Pihkc3QpOwogICAgIH0KIAorICAgIHZvaWQgY291bnRUcmFpbGluZ1plcm9zNjRXaXRob3V0TnVs
bENoZWNrKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIGlm
IChzdXBwb3J0c0JNSTEoKSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIudHpjbnRxX3JyKHNy
YywgZHN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2Fzc2Vt
Ymxlci5ic2ZxX3JyKHNyYywgZHN0KTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyQml0NjQoUmVn
aXN0ZXJJRCBiaXRUb0NsZWFyLCBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCA9IEludmFsaWRH
UFJSZWcpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5idHJxX3JyKGRzdCwgYml0VG9DbGVh
cik7CisgICAgfQorCisgICAgZW51bSBjbGFzcyBDbGVhckJpdHNBdHRyaWJ1dGVzIHsKKyAgICAg
ICAgT0tUb0Nsb2JiZXJNYXNrLAorICAgICAgICBNdXN0UHJlc2VydmVNYXNrCisgICAgfTsKKwor
ICAgIHZvaWQgY2xlYXJCaXRzNjRXaXRoTWFzayhSZWdpc3RlcklEIG1hc2ssIFJlZ2lzdGVySUQg
ZGVzdCwgQ2xlYXJCaXRzQXR0cmlidXRlcyBtYXNrUHJlc2VydmF0aW9uID0gQ2xlYXJCaXRzQXR0
cmlidXRlczo6T0tUb0Nsb2JiZXJNYXNrKQorICAgIHsKKyAgICAgICAgbm90NjQobWFzayk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmFuZHFfcnIobWFzaywgZGVzdCk7CisgICAgICAgIGlmIChtYXNr
UHJlc2VydmF0aW9uID09IENsZWFyQml0c0F0dHJpYnV0ZXM6Ok11c3RQcmVzZXJ2ZU1hc2spCisg
ICAgICAgICAgICBub3Q2NChtYXNrKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyQml0czY0V2l0
aE1hc2soUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgbWFzaywgUmVnaXN0ZXJJRCBkZXN0LCBD
bGVhckJpdHNBdHRyaWJ1dGVzIG1hc2tQcmVzZXJ2YXRpb24gPSBDbGVhckJpdHNBdHRyaWJ1dGVz
OjpPS1RvQ2xvYmJlck1hc2spCisgICAgeworICAgICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAg
ICAgIGNsZWFyQml0czY0V2l0aE1hc2sobWFzaywgZGVzdCwgbWFza1ByZXNlcnZhdGlvbik7Cisg
ICAgfQorCiAgICAgdm9pZCBjb3VudFBvcHVsYXRpb242NChSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBBU1NFUlQoc3VwcG9ydHNDb3VudFBvcHVsYXRpb24o
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1i
bGVyLmgJKHJldmlzaW9uIDI2MjE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOTIsNiArMjkyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgT1AyX0lNVUxfR3ZFdiAgICAgICA9IDB4QUYsCiAgICAgICAgIE9QMl9D
TVBYQ0hHYiAgICAgICAgPSAweEIwLAogICAgICAgICBPUDJfQ01QWENIRyAgICAgICAgID0gMHhC
MSwKKyAgICAgICAgT1AyX0JUUiAgICAgICAgICAgICA9IDB4QjMsCiAgICAgICAgIE9QMl9NT1Za
WF9HdkViICAgICAgPSAweEI2LAogICAgICAgICBPUDJfUE9QQ05UICAgICAgICAgID0gMHhCOCwK
ICAgICAgICAgT1AyX0dST1VQX0JUX0V2SWIgICA9IDB4QkEsCkBAIC0xNjQ4LDYgKzE2NDksMTMg
QEAgcHVibGljOgogICAgIH0KICNlbmRpZgogCisjaWYgQ1BVKFg4Nl82NCkKKyAgICB2b2lkIGJ0
cnFfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9m
b3JtYXR0ZXIudHdvQnl0ZU9wNjQoT1AyX0JUUiwgZHN0LCBzcmMpOworICAgIH0KKyNlbmRpZgor
CiAgICAgdm9pZCBwb3BjbnRfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogICAg
IHsKICAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9TU0VfRjMpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAJKHJldmlzaW9uIDI2MjE1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTMsNyArMzEzLDcgQEAgc3RhdGljIFZlY3RvcjxpbnQzMl90PiBpbnQz
Mk9wZXJhbmRzKCkKICAgICB9OwogfQogCi0jaWYgQ1BVKFg4Nl82NCkKKyNpZiBDUFUoWDg2XzY0
KSB8fCBDUFUoQVJNNjQpCiBzdGF0aWMgVmVjdG9yPGludDY0X3Q+IGludDY0T3BlcmFuZHMoKQog
ewogICAgIHJldHVybiBWZWN0b3I8aW50NjRfdD4gewpAQCAtNDY4LDYgKzQ2OCwxOTUgQEAgdm9p
ZCB0ZXN0QnJhbmNoVGVzdEJpdDY0QWRkckltbSgpCiAKICNlbmRpZgogCisjaWYgQ1BVKFg4Nl82
NCkgfHwgQ1BVKEFSTTY0KQordm9pZCB0ZXN0Q2xlYXJCaXQ2NCgpCit7CisgICAgYXV0byB0ZXN0
ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgIGVtaXRGdW5jdGlv
blByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjph
cmd1bWVudEdQUjI7CisgICAgICAgIGppdC5jbGVhckJpdDY0KEdQUkluZm86OmFyZ3VtZW50R1BS
MSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0Lm1vdmUo
R1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAg
ICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgaml0LnJldCgpOworICAgIH0p
OworCisgICAgY29uc3RleHByIHVuc2lnbmVkIGJpdHNJbldvcmQgPSBzaXplb2YodWludDY0X3Qp
ICogODsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiaXRzSW5Xb3JkOyArK2kpIHsK
KyAgICAgICAgdWludDY0X3Qgd29yZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+Ojpt
YXgoKTsKKyAgICAgICAgY29uc3RleHByIHVpbnQ2NF90IG9uZSA9IDE7CisgICAgICAgIENIRUNL
X0VRKGludm9rZTx1aW50NjRfdD4odGVzdCwgd29yZCwgaSksICh3b3JkICYgfihvbmUgPDwgaSkp
KTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYml0c0luV29yZDsgKytp
KSB7CisgICAgICAgIHVpbnQ2NF90IHdvcmQgPSAwOworICAgICAgICBDSEVDS19FUShpbnZva2U8
dWludDY0X3Q+KHRlc3QsIHdvcmQsIGkpLCAwKTsKKyAgICB9Cit9CisKK3ZvaWQgdGVzdENsZWFy
Qml0czY0V2l0aE1hc2soKQoreworICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCkgeworICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAg
ICAgIGppdC5jbGVhckJpdHM2NFdpdGhNYXNrKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIw
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoaml0KTsKKyAgICAgICAgaml0LnJldCgpOworICAgIH0pOworCisgICAgZm9yIChhdXRvIHZh
bHVlIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIHVpbnQ2NF90IHdvcmQgPSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTx1
aW50NjRfdD4odGVzdCwgd29yZCwgdmFsdWUpLCAod29yZCAmIH52YWx1ZSkpOworICAgIH0KKwor
ICAgIGZvciAoYXV0byB2YWx1ZSA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICB1aW50NjRf
dCB3b3JkID0gMDsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQ2NF90Pih0ZXN0LCB3b3Jk
LCB2YWx1ZSksIDApOworICAgIH0KKworI2lmIEVOQUJMRShNQVNNX1BST0JFKQorICAgIHVpbnQ2
NF90IHNhdmVkTWFzayA9IDA7CisgICAgYXV0byB0ZXN0MiA9IGNvbXBpbGUoWyZdIChDQ2FsbEhl
bHBlcnMmIGppdCkgeworICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAg
ICAgIGppdC5wcm9iZShbJl0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAg
ICBzYXZlZE1hc2sgPSBjb250ZXh0Lmdwcjx1aW50NjRfdD4oR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaml0LmNsZWFyQml0czY0V2l0aE1hc2soR1BSSW5m
bzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjAsIENDYWxsSGVscGVyczo6Q2xl
YXJCaXRzQXR0cmlidXRlczo6TXVzdFByZXNlcnZlTWFzayk7CisKKyAgICAgICAgaml0LnByb2Jl
KFsmXSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgIENIRUNLX0VRKHNh
dmVkTWFzaywgY29udGV4dC5ncHI8dWludDY0X3Q+KEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOwor
ICAgICAgICB9KTsKKyAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0
KTsKKyAgICAgICAgaml0LnJldCgpOworICAgIH0pOworCisgICAgZm9yIChhdXRvIHZhbHVlIDog
aW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIHVpbnQ2NF90IHdvcmQgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQ2NF90Pjo6bWF4KCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTx1aW50NjRf
dD4odGVzdDIsIHdvcmQsIHZhbHVlKSwgKHdvcmQgJiB+dmFsdWUpKTsKKyAgICB9CisKKyAgICBm
b3IgKGF1dG8gdmFsdWUgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgdWludDY0X3Qgd29y
ZCA9IDA7CisgICAgICAgIENIRUNLX0VRKGludm9rZTx1aW50NjRfdD4odGVzdDIsIHdvcmQsIHZh
bHVlKSwgMCk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQgdGVzdENsZWFyQml0czY0V2l0aE1h
c2tUZXJuYXJ5KCkKK3sKKyAgICBhdXRvIHRlc3QgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQpIHsKKyAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICBq
aXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7Cisg
ICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIzKTsKKyAgICAgICAgaml0LmNsZWFyQml0czY0V2l0aE1hc2soR1BSSW5mbzo6YXJndW1lbnRH
UFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKwor
ICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICBqaXQucmV0KCk7Cisg
ICAgfSk7CisKKyAgICBmb3IgKGF1dG8gdmFsdWUgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAg
ICAgdWludDY0X3Qgd29yZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQ2NF90Pih0ZXN0LCB3b3JkLCB2YWx1ZSksICh3
b3JkICYgfnZhbHVlKSk7CisgICAgfQorCisgICAgZm9yIChhdXRvIHZhbHVlIDogaW50NjRPcGVy
YW5kcygpKSB7CisgICAgICAgIHVpbnQ2NF90IHdvcmQgPSAwOworICAgICAgICBDSEVDS19FUShp
bnZva2U8dWludDY0X3Q+KHRlc3QsIHdvcmQsIHZhbHVlKSwgMCk7CisgICAgfQorCisjaWYgRU5B
QkxFKE1BU01fUFJPQkUpCisgICAgdWludDY0X3Qgc2F2ZWRNYXNrID0gMDsKKyAgICBhdXRvIHRl
c3QyID0gY29tcGlsZShbJl0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgIGVtaXRGdW5j
dGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6YXJndW1lbnRH
UFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICBqaXQubW92ZShHUFJJbmZvOjph
cmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisKKyAgICAgICAgaml0LnByb2Jl
KFsmXSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgIHNhdmVkTWFzayA9
IGNvbnRleHQuZ3ByPHVpbnQ2NF90PihHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICB9
KTsKKworICAgICAgICBqaXQuY2xlYXJCaXRzNjRXaXRoTWFzayhHUFJJbmZvOjphcmd1bWVudEdQ
UjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIENDYWxs
SGVscGVyczo6Q2xlYXJCaXRzQXR0cmlidXRlczo6TXVzdFByZXNlcnZlTWFzayk7CisKKyAgICAg
ICAgaml0LnByb2JlKFsmXSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAg
IENIRUNLX0VRKHNhdmVkTWFzaywgY29udGV4dC5ncHI8dWludDY0X3Q+KEdQUkluZm86OmFyZ3Vt
ZW50R1BSMikpOworICAgICAgICB9KTsKKworICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShq
aXQpOworICAgICAgICBqaXQucmV0KCk7CisgICAgfSk7CisKKyAgICBmb3IgKGF1dG8gdmFsdWUg
OiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgdWludDY0X3Qgd29yZCA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDY0X3Q+OjptYXgoKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQ2
NF90Pih0ZXN0Miwgd29yZCwgdmFsdWUpLCAod29yZCAmIH52YWx1ZSkpOworICAgIH0KKworICAg
IGZvciAoYXV0byB2YWx1ZSA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICB1aW50NjRfdCB3
b3JkID0gMDsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQ2NF90Pih0ZXN0Miwgd29yZCwg
dmFsdWUpLCAwKTsKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgdGVzdENvdW50VHJh
aWxpbmdaZXJvczY0SW1wbChib29sIHdvcmRDYW5CZVplcm8pCit7CisgICAgYXV0byB0ZXN0ID0g
Y29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgIGVtaXRGdW5jdGlvblBy
b2xvZ3VlKGppdCk7CisKKyAgICAgICAgaml0LmNvdW50VHJhaWxpbmdaZXJvczY0KEdQUkluZm86
OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgIGVtaXRG
dW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgIGppdC5yZXQoKTsKKyAgICB9KTsKKworICAg
IGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZCaXRzID0gc2l6ZW9mKHVpbnQ2NF90KSAqIDg7CisK
KyAgICBhdXRvIGV4cGVjdGVkTnVtYmVyT2ZUcmFpbGluZ1plcm9zID0gWz1dICh1aW50NjRfdCB3
b3JkKSAtPiBzaXplX3QgeworICAgICAgICBzaXplX3QgY291bnQgPSAwOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mQml0czsgKytpKSB7CisgICAgICAgICAgICBpZiAo
d29yZCAmIDEpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB3b3JkID4+PSAx
OworICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY291bnQ7
CisgICAgfTsKKworICAgIGZvciAoYXV0byB3b3JkIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAg
ICAgIGlmICghd29yZENhbkJlWmVybyAmJiAhd29yZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBDSEVDS19FUShpbnZva2U8c2l6ZV90Pih0ZXN0LCB3b3JkKSwgZXhwZWN0ZWROdW1i
ZXJPZlRyYWlsaW5nWmVyb3Mod29yZCkpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtYmVyT2ZCaXRzOyArK2kpIHsKKyAgICAgICAgdWludDY0X3Qgb25lID0gMTsKKyAg
ICAgICAgdWludDY0X3Qgd29yZCA9IG9uZSA8PCBpOworICAgICAgICBDSEVDS19FUShpbnZva2U8
c2l6ZV90Pih0ZXN0LCB3b3JkKSwgaSk7CisgICAgfQorfQorCit2b2lkIHRlc3RDb3VudFRyYWls
aW5nWmVyb3M2NCgpCit7CisgICAgYm9vbCB3b3JkQ2FuQmVaZXJvID0gdHJ1ZTsKKyAgICB0ZXN0
Q291bnRUcmFpbGluZ1plcm9zNjRJbXBsKHdvcmRDYW5CZVplcm8pOworfQorCit2b2lkIHRlc3RD
b3VudFRyYWlsaW5nWmVyb3M2NFdpdGhvdXROdWxsQ2hlY2soKQoreworICAgIGJvb2wgd29yZENh
bkJlWmVybyA9IGZhbHNlOworICAgIHRlc3RDb3VudFRyYWlsaW5nWmVyb3M2NEltcGwod29yZENh
bkJlWmVybyk7Cit9CisjZW5kaWYgLy8gQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQorCiB2b2lk
IHRlc3RDb21wYXJlRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gY29uZGl0
aW9uKQogewogICAgIGRvdWJsZSBhcmcxID0gMDsKQEAgLTIzMDEsNiArMjQ5MCwxNCBAQCB2b2lk
IHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RCcmFuY2hUZXN0Qml0NjRBZGRy
SW1tKCkpOwogI2VuZGlmCiAKKyNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCisgICAgUlVO
KHRlc3RDbGVhckJpdDY0KCkpOworICAgIFJVTih0ZXN0Q2xlYXJCaXRzNjRXaXRoTWFzaygpKTsK
KyAgICBSVU4odGVzdENsZWFyQml0czY0V2l0aE1hc2tUZXJuYXJ5KCkpOworICAgIFJVTih0ZXN0
Q291bnRUcmFpbGluZ1plcm9zNjQoKSk7CisgICAgUlVOKHRlc3RDb3VudFRyYWlsaW5nWmVyb3M2
NFdpdGhvdXROdWxsQ2hlY2soKSk7CisjZW5kaWYKKwogI2lmIENQVShBUk02NCkKICAgICBSVU4o
dGVzdE11bDMyU2lnbkV4dGVuZCgpKTsKICNlbmRpZgo=
</data>
<flag name="review"
          id="415683"
          type_id="1"
          status="+"
          setter="rmorisset"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400284</attachid>
            <date>2020-05-26 16:17:03 -0700</date>
            <delta_ts>2020-05-26 16:23:50 -0700</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-212385.patch</filename>
            <type>text/plain</type>
            <size>16042</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYyMTY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBA
CisyMDIwLTA1LTI2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgc29tZSBuZXcgZW1pdHRlcnMgdG8gdGhlIFg4Nl82NCBhbmQgQVJNNjQgTWFjcm9Bc3NlbWJs
ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEy
Mzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUm9iaW4gTW9yaXNzZXQuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBhZGRzIHRoZXNlIE1hY3JvQXNzZW1ibGVyIGVtaXR0ZXJzOiAKKyAgICAgICAgICAg
IGNsZWFyQml0NjQKKyAgICAgICAgICAgIGNsZWFyQml0czY0V2l0aE1hc2sKKyAgICAgICAgICAg
IGNvdW50VHJhaWxpbmdaZXJvczY0V2l0aG91dE51bGxDaGVjaworCisgICAgICAgIGNsZWFyQml0
NjQgY2xlYXJzIGEgYml0LgorCisgICAgICAgIGNsZWFyQml0czY0V2l0aE1hc2sgZG9lcyB0aGUg
ZXF1aXZhbGVudCBvZiBhbmQ2NCB3aXRoIHRoZSAxJ3MgY29tcGxlbWVudCBvZiB0aGUKKyAgICAg
ICAgcHJvdmlkZWQgbWFzay4KKworICAgICAgICBjb3VudFRyYWlsaW5nWmVyb3M2NFdpdGhvdXRO
dWxsQ2hlY2sgZG9lcyB0aGUgc2FtZSB0aGluZyBhcyBjb3VudFRyYWlsaW5nWmVyb3M2NCwKKyAg
ICAgICAgZXhjZXB0IHRoYXQgaXQgYXNzdW1lcyB0aGF0IHRoZSB3b3JkIGluIHRoZSByZWdpc3Rl
ciBpdCBpcyBwcm9jZXNzaW5nIHdpbGwgbmV2ZXIKKyAgICAgICAgYmUgbnVsbCwgYW5kIHRoZXJl
Zm9yZSBza2lwcyB0aGUgbnVsbCBjaGVjay4gIFRoaXMgaXMgdXNlZnVsIGluIGNvZGUgZ2VuZXJh
dGlvbgorICAgICAgICB0aGF0IGFscmVhZHkgZG9lcyBhIG51bGwgY2hlY2sgYWhlYWQgb2YgdGlt
ZS4gIFNvLCB0aGVyZSdzIG5vIG5lZWQgdG8gZG8gYQorICAgICAgICByZWR1bmRhbnQgbnVsbCBj
aGVjay4KKworICAgICAgICBBbHNvIGFkZGVkIHRlc3RtYXNtIHRlc3RzIGZvciB0aGVzZSBlbWl0
dGVycy4KKworICAgICAgICAqIGFzc2VtYmxlci9BYm9ydFJlYXNvbi5oOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNNjQ6OmNsZWFyQml0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0
OjpjbGVhckJpdHM2NFdpdGhNYXNrKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02
NDo6Y291bnRUcmFpbGluZ1plcm9zNjRXaXRob3V0TnVsbENoZWNrKToKKyAgICAgICAgKiBhc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJYODZfNjQ6OmNvdW50VHJhaWxpbmdaZXJvczY0V2l0aG91dE51bGxDaGVjayk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpjbGVhckJpdDY0KToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmNsZWFyQml0czY0V2l0aE1hc2spOgorICAgICAgICAqIGFz
c2VtYmxlci9YODZBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpidHJx
X3JyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvdGVzdG1hc20uY3BwOgorICAgICAgICAoSlNDOjp0
ZXN0Q2xlYXJCaXQ2NCk6CisgICAgICAgIChKU0M6OnRlc3RDbGVhckJpdHM2NFdpdGhNYXNrKToK
KyAgICAgICAgKEpTQzo6dGVzdENsZWFyQml0czY0V2l0aE1hc2tUZXJuYXJ5KToKKyAgICAgICAg
KEpTQzo6dGVzdENvdW50VHJhaWxpbmdaZXJvczY0SW1wbCk6CisgICAgICAgIChKU0M6OnRlc3RD
b3VudFRyYWlsaW5nWmVyb3M2NCk6CisgICAgICAgIChKU0M6OnRlc3RDb3VudFRyYWlsaW5nWmVy
b3M2NFdpdGhvdXROdWxsQ2hlY2spOgorICAgICAgICAoSlNDOjpydW4pOgorCiAyMDIwLTA1LTI2
ICBZb3NoaWFraSBKSVRTVUtBV0EgIDx5b3NoaWFraS5qaXRzdWthd2FAc29ueS5jb20+CiAKICAg
ICAgICAgW1BsYXlTdGF0aW9uXSBFbmFibGUgUmVtb3RlV2ViSW5zcGVjdG9yCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fib3J0UmVhc29uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYm9ydFJlYXNvbi5oCShyZXZpc2lvbiAy
NjIxNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fib3J0UmVhc29uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC02OCw2ICs2OCw3IEBAIGVudW0gQWJvcnRSZWFzb24gewogICAg
IEpJVFVuY291Z2h0RXhjZXB0aW9uQWZ0ZXJDYWxsICAgICAgICAgICAgICAgICAgICAgPSAyNzUs
CiAgICAgSklUVW5leHBlY3RlZENhbGxGcmFtZVNpemUgICAgICAgICAgICAgICAgICAgICAgICA9
IDI3NywKICAgICBKSVRVbnJlYXNvbmFibGVMb29wSGludEp1bXBUYXJnZXQgICAgICAgICAgICAg
ICAgID0gMjgwLAorICAgIE1hY3JvQXNzZW1ibGVyT29wcyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAyODUsCiAgICAgUlBXVW5yZWFzb25hYmxlSnVtcFRhcmdldCAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDI5MCwKICAgICBSZXBhdGNoSW5lZmZlY3RpdmVXYXRjaHBvaW50ICAg
ICAgICAgICAgICAgICAgICAgID0gMzAwLAogICAgIFJlcGF0Y2hJbnNhbmVBcmd1bWVudENvdW50
ICAgICAgICAgICAgICAgICAgICAgICAgPSAzMTAsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkocmV2aXNpb24g
MjYyMTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTTY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw2ICs0NSw4IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgZGF0YVRlbXBSZWdpc3RlciA9IEFSTTY0UmVnaXN0
ZXJzOjppcDA7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIG1lbW9yeVRlbXBSZWdp
c3RlciA9IEFSTTY0UmVnaXN0ZXJzOjppcDE7CiAKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lz
dGVySUQgSW52YWxpZEdQUlJlZyA9IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnOworCiAg
ICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnaXN0ZXIoKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQobV9hbGxvd1NjcmF0Y2hSZWdpc3Rlcik7CkBAIC00MzYsNyArNDM4LDMyIEBAIHB1Ymxp
YzoKICAgICAgICAgbW92ZShpbW0sIGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFuZEludmFs
aWRhdGUoKSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFuZF88NjQ+KGRlc3QsIGRlc3QsIGRhdGFU
ZW1wUmVnaXN0ZXIpOwogICAgIH0KLSAgICAKKworICAgIHZvaWQgY2xlYXJCaXQ2NChSZWdpc3Rl
cklEIGJpdFRvQ2xlYXIsIFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoRm9yTWFz
ayA9IEludmFsaWRHUFJSZWcpCisgICAgeworICAgICAgICBpZiAoc2NyYXRjaEZvck1hc2sgPT0g
SW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHNjcmF0Y2hGb3JNYXNrID0gc2NyYXRjaFJlZ2lz
dGVyKCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hGb3JNYXNrKTsK
KyAgICAgICAgbHNoaWZ0NjQoYml0VG9DbGVhciwgc2NyYXRjaEZvck1hc2spOworICAgICAgICBj
bGVhckJpdHM2NFdpdGhNYXNrKHNjcmF0Y2hGb3JNYXNrLCBkZXN0KTsKKyAgICB9CisKKyAgICBl
bnVtIGNsYXNzIENsZWFyQml0c0F0dHJpYnV0ZXMgeworICAgICAgICBPS1RvQ2xvYmJlck1hc2ss
CisgICAgICAgIE11c3RQcmVzZXJ2ZU1hc2sKKyAgICB9OworCisgICAgdm9pZCBjbGVhckJpdHM2
NFdpdGhNYXNrKFJlZ2lzdGVySUQgbWFzaywgUmVnaXN0ZXJJRCBkZXN0LCBDbGVhckJpdHNBdHRy
aWJ1dGVzID0gQ2xlYXJCaXRzQXR0cmlidXRlczo6T0tUb0Nsb2JiZXJNYXNrKQorICAgIHsKKyAg
ICAgICAgY2xlYXJCaXRzNjRXaXRoTWFzayhkZXN0LCBtYXNrLCBkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIGNsZWFyQml0czY0V2l0aE1hc2soUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgbWFz
aywgUmVnaXN0ZXJJRCBkZXN0LCBDbGVhckJpdHNBdHRyaWJ1dGVzID0gQ2xlYXJCaXRzQXR0cmli
dXRlczo6T0tUb0Nsb2JiZXJNYXNrKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYmljPDY0
PihkZXN0LCBzcmMsIG1hc2spOworICAgIH0KKwogICAgIHZvaWQgY291bnRMZWFkaW5nWmVyb3Mz
MihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3Nl
bWJsZXIuY2x6PDMyPihkZXN0LCBzcmMpOwpAQCAtNDYxLDYgKzQ4OCwxMyBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fYXNzZW1ibGVyLmNsejw2ND4oZGVzdCwgZGVzdCk7CiAgICAgfQogCisgICAgdm9p
ZCBjb3VudFRyYWlsaW5nWmVyb3M2NFdpdGhvdXROdWxsQ2hlY2soUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIC8vIEFybSBkaWQgbm90IG5lZWQgYW4gZXhw
bGljaXQgbnVsbCBjaGVjayB0byBiZWdpbiB3aXRoLiBTbywgd2UgY2FuIGRvCisgICAgICAgIC8v
IGV4YWN0bHkgdGhlIHNhbWUgdGhpbmcgYXMgaW4gY291bnRUcmFpbGluZ1plcm9zNjQoKS4KKyAg
ICAgICAgY291bnRUcmFpbGluZ1plcm9zNjQoc3JjLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lk
IGJ5dGVTd2FwMTYoUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5y
ZXYxNjwzMj4oZHN0LCBkc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNpb24gMjYyMTY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNiArNDIsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBTY2FsZSBTY2FsZVB0ciA9IFRpbWVzRWlnaHQ7CiAKKyAgICBzdGF0aWMg
Y29uc3RleHByIFJlZ2lzdGVySUQgSW52YWxpZEdQUlJlZyA9IFg4NlJlZ2lzdGVyczo6SW52YWxp
ZEdQUlJlZzsKKwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjphZGQzMjsKICAg
ICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YW5kMzI7CiAgICAgdXNpbmcgTWFjcm9B
c3NlbWJsZXJYODZDb21tb246OmJyYW5jaDMyOwpAQCAtNDk5LDYgKzUwMSw0NCBAQCBwdWJsaWM6
CiAgICAgICAgIGN0ekFmdGVyQnNmPDY0Pihkc3QpOwogICAgIH0KIAorICAgIHZvaWQgY291bnRU
cmFpbGluZ1plcm9zNjRXaXRob3V0TnVsbENoZWNrKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgSnVtcCBub3RaZXJvID0g
YnJhbmNoVGVzdDY0KE5vblplcm8sIHNyYyk7CisgICAgICAgIGFib3J0V2l0aFJlYXNvbihNYWNy
b0Fzc2VtYmxlck9vcHMsIF9fTElORV9fKTsKKyAgICAgICAgbm90WmVyby5saW5rKHRoaXMpOwor
I2VuZGlmCisgICAgICAgIGlmIChzdXBwb3J0c0JNSTEoKSkgeworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIudHpjbnRxX3JyKHNyYywgZHN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBtX2Fzc2VtYmxlci5ic2ZxX3JyKHNyYywgZHN0KTsKKyAgICB9CisKKyAgICB2
b2lkIGNsZWFyQml0NjQoUmVnaXN0ZXJJRCBiaXRUb0NsZWFyLCBSZWdpc3RlcklEIGRzdCwgUmVn
aXN0ZXJJRCA9IEludmFsaWRHUFJSZWcpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5idHJx
X3JyKGRzdCwgYml0VG9DbGVhcik7CisgICAgfQorCisgICAgZW51bSBjbGFzcyBDbGVhckJpdHNB
dHRyaWJ1dGVzIHsKKyAgICAgICAgT0tUb0Nsb2JiZXJNYXNrLAorICAgICAgICBNdXN0UHJlc2Vy
dmVNYXNrCisgICAgfTsKKworICAgIHZvaWQgY2xlYXJCaXRzNjRXaXRoTWFzayhSZWdpc3RlcklE
IG1hc2ssIFJlZ2lzdGVySUQgZGVzdCwgQ2xlYXJCaXRzQXR0cmlidXRlcyBtYXNrUHJlc2VydmF0
aW9uID0gQ2xlYXJCaXRzQXR0cmlidXRlczo6T0tUb0Nsb2JiZXJNYXNrKQorICAgIHsKKyAgICAg
ICAgbm90NjQobWFzayk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZHFfcnIobWFzaywgZGVzdCk7
CisgICAgICAgIGlmIChtYXNrUHJlc2VydmF0aW9uID09IENsZWFyQml0c0F0dHJpYnV0ZXM6Ok11
c3RQcmVzZXJ2ZU1hc2spCisgICAgICAgICAgICBub3Q2NChtYXNrKTsKKyAgICB9CisKKyAgICB2
b2lkIGNsZWFyQml0czY0V2l0aE1hc2soUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgbWFzaywg
UmVnaXN0ZXJJRCBkZXN0LCBDbGVhckJpdHNBdHRyaWJ1dGVzIG1hc2tQcmVzZXJ2YXRpb24gPSBD
bGVhckJpdHNBdHRyaWJ1dGVzOjpPS1RvQ2xvYmJlck1hc2spCisgICAgeworICAgICAgICBtb3Zl
KHNyYywgZGVzdCk7CisgICAgICAgIGNsZWFyQml0czY0V2l0aE1hc2sobWFzaywgZGVzdCwgbWFz
a1ByZXNlcnZhdGlvbik7CisgICAgfQorCiAgICAgdm9pZCBjb3VudFBvcHVsYXRpb242NChSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBBU1NFUlQoc3VwcG9y
dHNDb3VudFBvcHVsYXRpb24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDI2MjE2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
OTIsNiArMjkyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgT1AyX0lNVUxfR3ZFdiAgICAgICA9IDB4
QUYsCiAgICAgICAgIE9QMl9DTVBYQ0hHYiAgICAgICAgPSAweEIwLAogICAgICAgICBPUDJfQ01Q
WENIRyAgICAgICAgID0gMHhCMSwKKyAgICAgICAgT1AyX0JUUiAgICAgICAgICAgICA9IDB4QjMs
CiAgICAgICAgIE9QMl9NT1ZaWF9HdkViICAgICAgPSAweEI2LAogICAgICAgICBPUDJfUE9QQ05U
ICAgICAgICAgID0gMHhCOCwKICAgICAgICAgT1AyX0dST1VQX0JUX0V2SWIgICA9IDB4QkEsCkBA
IC0xNjQ4LDYgKzE2NDksMTMgQEAgcHVibGljOgogICAgIH0KICNlbmRpZgogCisjaWYgQ1BVKFg4
Nl82NCkKKyAgICB2b2lkIGJ0cnFfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wNjQoT1AyX0JUUiwgZHN0LCBzcmMp
OworICAgIH0KKyNlbmRpZgorCiAgICAgdm9pZCBwb3BjbnRfcnIoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9TU0Vf
RjMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5j
cHAJKHJldmlzaW9uIDI2MjE2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
dGVzdG1hc20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsNyArMzEzLDcgQEAgc3RhdGljIFZl
Y3RvcjxpbnQzMl90PiBpbnQzMk9wZXJhbmRzKCkKICAgICB9OwogfQogCi0jaWYgQ1BVKFg4Nl82
NCkKKyNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCiBzdGF0aWMgVmVjdG9yPGludDY0X3Q+
IGludDY0T3BlcmFuZHMoKQogewogICAgIHJldHVybiBWZWN0b3I8aW50NjRfdD4gewpAQCAtNDY4
LDYgKzQ2OCwxOTggQEAgdm9pZCB0ZXN0QnJhbmNoVGVzdEJpdDY0QWRkckltbSgpCiAKICNlbmRp
ZgogCisjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQordm9pZCB0ZXN0Q2xlYXJCaXQ2NCgp
Cit7CisgICAgYXV0byB0ZXN0ID0gY29tcGlsZShbXSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAg
ICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICAgICAgaml0LmNsZWFyQml0NjQoR1BS
SW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjAsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKworICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICBq
aXQucmV0KCk7CisgICAgfSk7CisKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgYml0c0luV29yZCA9
IHNpemVvZih1aW50NjRfdCkgKiA4OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJp
dHNJbldvcmQ7ICsraSkgeworICAgICAgICB1aW50NjRfdCB3b3JkID0gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50NjRfdD46Om1heCgpOworICAgICAgICBjb25zdGV4cHIgdWludDY0X3Qgb25lID0g
MTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQ2NF90Pih0ZXN0LCB3b3JkLCBpKSwgKHdv
cmQgJiB+KG9uZSA8PCBpKSkpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBiaXRzSW5Xb3JkOyArK2kpIHsKKyAgICAgICAgdWludDY0X3Qgd29yZCA9IDA7CisgICAgICAg
IENIRUNLX0VRKGludm9rZTx1aW50NjRfdD4odGVzdCwgd29yZCwgaSksIDApOworICAgIH0KK30K
Kwordm9pZCB0ZXN0Q2xlYXJCaXRzNjRXaXRoTWFzaygpCit7CisgICAgYXV0byB0ZXN0ID0gY29t
cGlsZShbXSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoaml0KTsKKworICAgICAgICBqaXQuY2xlYXJCaXRzNjRXaXRoTWFzayhHUFJJbmZvOjphcmd1
bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGppdC5tb3ZlKEdQUklu
Zm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgIGVt
aXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgIGppdC5yZXQoKTsKKyAgICB9KTsKKwor
ICAgIGZvciAoYXV0byB2YWx1ZSA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICB1aW50NjRf
dCB3b3JkID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpOworICAgICAgICBD
SEVDS19FUShpbnZva2U8dWludDY0X3Q+KHRlc3QsIHdvcmQsIHZhbHVlKSwgKHdvcmQgJiB+dmFs
dWUpKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8gdmFsdWUgOiBpbnQ2NE9wZXJhbmRzKCkpIHsK
KyAgICAgICAgdWludDY0X3Qgd29yZCA9IDA7CisgICAgICAgIENIRUNLX0VRKGludm9rZTx1aW50
NjRfdD4odGVzdCwgd29yZCwgdmFsdWUpLCAwKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoTUFTTV9Q
Uk9CRSkKKyAgICB1aW50NjRfdCBzYXZlZE1hc2sgPSAwOworICAgIGF1dG8gdGVzdDIgPSBjb21w
aWxlKFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoaml0KTsKKworICAgICAgICBqaXQucHJvYmUoWyZdIChQcm9iZTo6Q29udGV4dCYgY29udGV4
dCkgeworICAgICAgICAgICAgc2F2ZWRNYXNrID0gY29udGV4dC5ncHI8dWludDY0X3Q+KEdQUklu
Zm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIH0pOworCisgICAgICAgIGppdC5jbGVhckJpdHM2
NFdpdGhNYXNrKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBD
Q2FsbEhlbHBlcnM6OkNsZWFyQml0c0F0dHJpYnV0ZXM6Ok11c3RQcmVzZXJ2ZU1hc2spOworCisg
ICAgICAgIGppdC5wcm9iZShbJl0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAg
ICAgICBDSEVDS19FUShzYXZlZE1hc2ssIGNvbnRleHQuZ3ByPHVpbnQ2NF90PihHUFJJbmZvOjph
cmd1bWVudEdQUjEpKTsKKyAgICAgICAgfSk7CisgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFy
Z3VtZW50R1BSMCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgIGVtaXRGdW5j
dGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgIGppdC5yZXQoKTsKKyAgICB9KTsKKworICAgIGZv
ciAoYXV0byB2YWx1ZSA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICB1aW50NjRfdCB3b3Jk
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpOworICAgICAgICBDSEVDS19F
UShpbnZva2U8dWludDY0X3Q+KHRlc3QyLCB3b3JkLCB2YWx1ZSksICh3b3JkICYgfnZhbHVlKSk7
CisgICAgfQorCisgICAgZm9yIChhdXRvIHZhbHVlIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAg
ICAgIHVpbnQ2NF90IHdvcmQgPSAwOworICAgICAgICBDSEVDS19FUShpbnZva2U8dWludDY0X3Q+
KHRlc3QyLCB3b3JkLCB2YWx1ZSksIDApOworICAgIH0KKyNlbmRpZgorfQorCit2b2lkIHRlc3RD
bGVhckJpdHM2NFdpdGhNYXNrVGVybmFyeSgpCit7CisgICAgYXV0byB0ZXN0ID0gY29tcGlsZShb
XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0
KTsKKworICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFy
Z3VtZW50R1BSMik7CisgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICAgICAgaml0LmNsZWFyQml0czY0V2l0aE1hc2soR1BS
SW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKKworICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAg
ICBqaXQucmV0KCk7CisgICAgfSk7CisKKyAgICBmb3IgKGF1dG8gdmFsdWUgOiBpbnQ2NE9wZXJh
bmRzKCkpIHsKKyAgICAgICAgdWludDY0X3Qgd29yZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDY0X3Q+OjptYXgoKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQ2NF90Pih0ZXN0LCB3
b3JkLCB2YWx1ZSksICh3b3JkICYgfnZhbHVlKSk7CisgICAgfQorCisgICAgZm9yIChhdXRvIHZh
bHVlIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIHVpbnQ2NF90IHdvcmQgPSAwOworICAg
ICAgICBDSEVDS19FUShpbnZva2U8dWludDY0X3Q+KHRlc3QsIHdvcmQsIHZhbHVlKSwgMCk7Cisg
ICAgfQorCisjaWYgRU5BQkxFKE1BU01fUFJPQkUpCisgICAgdWludDY0X3Qgc2F2ZWRNYXNrID0g
MDsKKyAgICBhdXRvIHRlc3QyID0gY29tcGlsZShbJl0gKENDYWxsSGVscGVycyYgaml0KSB7Cisg
ICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgaml0Lm1vdmUoR1BS
SW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICBqaXQu
bW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisKKyAg
ICAgICAgaml0LnByb2JlKFsmXSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAg
ICAgIHNhdmVkTWFzayA9IGNvbnRleHQuZ3ByPHVpbnQ2NF90PihHUFJJbmZvOjphcmd1bWVudEdQ
UjIpOworICAgICAgICB9KTsKKworICAgICAgICBqaXQuY2xlYXJCaXRzNjRXaXRoTWFzayhHUFJJ
bmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMywgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIENDYWxsSGVscGVyczo6Q2xlYXJCaXRzQXR0cmlidXRlczo6TXVzdFByZXNlcnZl
TWFzayk7CisKKyAgICAgICAgaml0LnByb2JlKFsmXSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQp
IHsKKyAgICAgICAgICAgIENIRUNLX0VRKHNhdmVkTWFzaywgY29udGV4dC5ncHI8dWludDY0X3Q+
KEdQUkluZm86OmFyZ3VtZW50R1BSMikpOworICAgICAgICB9KTsKKworICAgICAgICBlbWl0RnVu
Y3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICBqaXQucmV0KCk7CisgICAgfSk7CisKKyAgICBm
b3IgKGF1dG8gdmFsdWUgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgdWludDY0X3Qgd29y
ZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPHVpbnQ2NF90Pih0ZXN0Miwgd29yZCwgdmFsdWUpLCAod29yZCAmIH52YWx1ZSkp
OworICAgIH0KKworICAgIGZvciAoYXV0byB2YWx1ZSA6IGludDY0T3BlcmFuZHMoKSkgeworICAg
ICAgICB1aW50NjRfdCB3b3JkID0gMDsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQ2NF90
Pih0ZXN0Miwgd29yZCwgdmFsdWUpLCAwKTsKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGljIHZv
aWQgdGVzdENvdW50VHJhaWxpbmdaZXJvczY0SW1wbChib29sIHdvcmRDYW5CZVplcm8pCit7Cisg
ICAgYXV0byB0ZXN0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAg
IGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgaWYgKHdvcmRDYW5CZVplcm8p
CisgICAgICAgICAgICBqaXQuY291bnRUcmFpbGluZ1plcm9zNjQoR1BSSW5mbzo6YXJndW1lbnRH
UFIwLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGppdC5jb3VudFRyYWlsaW5nWmVyb3M2NFdpdGhvdXROdWxsQ2hlY2soR1BSSW5mbzo6YXJndW1l
bnRHUFIwLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoaml0KTsKKyAgICAgICAgaml0LnJldCgpOworICAgIH0pOworCisgICAgY29uc3Rl
eHByIHNpemVfdCBudW1iZXJPZkJpdHMgPSBzaXplb2YodWludDY0X3QpICogODsKKworICAgIGF1
dG8gZXhwZWN0ZWROdW1iZXJPZlRyYWlsaW5nWmVyb3MgPSBbPV0gKHVpbnQ2NF90IHdvcmQpIC0+
IHNpemVfdCB7CisgICAgICAgIHNpemVfdCBjb3VudCA9IDA7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtYmVyT2ZCaXRzOyArK2kpIHsKKyAgICAgICAgICAgIGlmICh3b3JkICYg
MSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHdvcmQgPj49IDE7CisgICAg
ICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjb3VudDsKKyAgICB9
OworCisgICAgZm9yIChhdXRvIHdvcmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgaWYg
KCF3b3JkQ2FuQmVaZXJvICYmICF3b3JkKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IENIRUNLX0VRKGludm9rZTxzaXplX3Q+KHRlc3QsIHdvcmQpLCBleHBlY3RlZE51bWJlck9mVHJh
aWxpbmdaZXJvcyh3b3JkKSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1iZXJPZkJpdHM7ICsraSkgeworICAgICAgICB1aW50NjRfdCBvbmUgPSAxOworICAgICAgICB1
aW50NjRfdCB3b3JkID0gb25lIDw8IGk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxzaXplX3Q+
KHRlc3QsIHdvcmQpLCBpKTsKKyAgICB9Cit9CisKK3ZvaWQgdGVzdENvdW50VHJhaWxpbmdaZXJv
czY0KCkKK3sKKyAgICBib29sIHdvcmRDYW5CZVplcm8gPSB0cnVlOworICAgIHRlc3RDb3VudFRy
YWlsaW5nWmVyb3M2NEltcGwod29yZENhbkJlWmVybyk7Cit9CisKK3ZvaWQgdGVzdENvdW50VHJh
aWxpbmdaZXJvczY0V2l0aG91dE51bGxDaGVjaygpCit7CisgICAgYm9vbCB3b3JkQ2FuQmVaZXJv
ID0gZmFsc2U7CisgICAgdGVzdENvdW50VHJhaWxpbmdaZXJvczY0SW1wbCh3b3JkQ2FuQmVaZXJv
KTsKK30KKyNlbmRpZiAvLyBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCisKIHZvaWQgdGVzdENv
bXBhcmVEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24pCiB7
CiAgICAgZG91YmxlIGFyZzEgPSAwOwpAQCAtMjMwMSw2ICsyNDkzLDE0IEBAIHZvaWQgcnVuKGNv
bnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdEJyYW5jaFRlc3RCaXQ2NEFkZHJJbW0oKSk7
CiAjZW5kaWYKIAorI2lmIENQVShYODZfNjQpIHx8IENQVShBUk02NCkKKyAgICBSVU4odGVzdENs
ZWFyQml0NjQoKSk7CisgICAgUlVOKHRlc3RDbGVhckJpdHM2NFdpdGhNYXNrKCkpOworICAgIFJV
Tih0ZXN0Q2xlYXJCaXRzNjRXaXRoTWFza1Rlcm5hcnkoKSk7CisgICAgUlVOKHRlc3RDb3VudFRy
YWlsaW5nWmVyb3M2NCgpKTsKKyAgICBSVU4odGVzdENvdW50VHJhaWxpbmdaZXJvczY0V2l0aG91
dE51bGxDaGVjaygpKTsKKyNlbmRpZgorCiAjaWYgQ1BVKEFSTTY0KQogICAgIFJVTih0ZXN0TXVs
MzJTaWduRXh0ZW5kKCkpOwogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400285</attachid>
            <date>2020-05-26 16:23:50 -0700</date>
            <delta_ts>2020-05-26 16:35:43 -0700</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-212385.patch</filename>
            <type>text/plain</type>
            <size>16207</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYyMTY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBA
CisyMDIwLTA1LTI2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgc29tZSBuZXcgZW1pdHRlcnMgdG8gdGhlIFg4Nl82NCBhbmQgQVJNNjQgTWFjcm9Bc3NlbWJs
ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEy
Mzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUm9iaW4gTW9yaXNzZXQuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBhZGRzIHRoZXNlIE1hY3JvQXNzZW1ibGVyIGVtaXR0ZXJzOiAKKyAgICAgICAgICAg
IGNsZWFyQml0NjQKKyAgICAgICAgICAgIGNsZWFyQml0czY0V2l0aE1hc2sKKyAgICAgICAgICAg
IGNvdW50VHJhaWxpbmdaZXJvczY0V2l0aG91dE51bGxDaGVjaworCisgICAgICAgIGNsZWFyQml0
NjQgY2xlYXJzIGEgYml0LgorCisgICAgICAgIGNsZWFyQml0czY0V2l0aE1hc2sgZG9lcyB0aGUg
ZXF1aXZhbGVudCBvZiBhbmQ2NCB3aXRoIHRoZSAxJ3MgY29tcGxlbWVudCBvZiB0aGUKKyAgICAg
ICAgcHJvdmlkZWQgbWFzay4KKworICAgICAgICBjb3VudFRyYWlsaW5nWmVyb3M2NFdpdGhvdXRO
dWxsQ2hlY2sgZG9lcyB0aGUgc2FtZSB0aGluZyBhcyBjb3VudFRyYWlsaW5nWmVyb3M2NCwKKyAg
ICAgICAgZXhjZXB0IHRoYXQgaXQgYXNzdW1lcyB0aGF0IHRoZSB3b3JkIGluIHRoZSByZWdpc3Rl
ciBpdCBpcyBwcm9jZXNzaW5nIHdpbGwgbmV2ZXIKKyAgICAgICAgYmUgbnVsbCwgYW5kIHRoZXJl
Zm9yZSBza2lwcyB0aGUgbnVsbCBjaGVjay4gIFRoaXMgaXMgdXNlZnVsIGluIGNvZGUgZ2VuZXJh
dGlvbgorICAgICAgICB0aGF0IGFscmVhZHkgZG9lcyBhIG51bGwgY2hlY2sgYWhlYWQgb2YgdGlt
ZS4gIFNvLCB0aGVyZSdzIG5vIG5lZWQgdG8gZG8gYQorICAgICAgICByZWR1bmRhbnQgbnVsbCBj
aGVjay4KKworICAgICAgICBBbHNvIGFkZGVkIHRlc3RtYXNtIHRlc3RzIGZvciB0aGVzZSBlbWl0
dGVycy4KKworICAgICAgICAqIGFzc2VtYmxlci9BYm9ydFJlYXNvbi5oOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNNjQ6OmNsZWFyQml0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0
OjpjbGVhckJpdHM2NFdpdGhNYXNrKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02
NDo6Y291bnRUcmFpbGluZ1plcm9zNjRXaXRob3V0TnVsbENoZWNrKToKKyAgICAgICAgKiBhc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJYODZfNjQ6OmNvdW50VHJhaWxpbmdaZXJvczY0V2l0aG91dE51bGxDaGVjayk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpjbGVhckJpdDY0KToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmNsZWFyQml0czY0V2l0aE1hc2spOgorICAgICAgICAqIGFz
c2VtYmxlci9YODZBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpidHJx
X3JyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvdGVzdG1hc20uY3BwOgorICAgICAgICAoSlNDOjp0
ZXN0Q2xlYXJCaXQ2NCk6CisgICAgICAgIChKU0M6OnRlc3RDbGVhckJpdHM2NFdpdGhNYXNrKToK
KyAgICAgICAgKEpTQzo6dGVzdENsZWFyQml0czY0V2l0aE1hc2tUZXJuYXJ5KToKKyAgICAgICAg
KEpTQzo6dGVzdENvdW50VHJhaWxpbmdaZXJvczY0SW1wbCk6CisgICAgICAgIChKU0M6OnRlc3RD
b3VudFRyYWlsaW5nWmVyb3M2NCk6CisgICAgICAgIChKU0M6OnRlc3RDb3VudFRyYWlsaW5nWmVy
b3M2NFdpdGhvdXROdWxsQ2hlY2spOgorICAgICAgICAoSlNDOjpydW4pOgorCiAyMDIwLTA1LTI2
ICBZb3NoaWFraSBKSVRTVUtBV0EgIDx5b3NoaWFraS5qaXRzdWthd2FAc29ueS5jb20+CiAKICAg
ICAgICAgW1BsYXlTdGF0aW9uXSBFbmFibGUgUmVtb3RlV2ViSW5zcGVjdG9yCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fib3J0UmVhc29uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYm9ydFJlYXNvbi5oCShyZXZpc2lvbiAy
NjIxNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fib3J0UmVhc29uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC02OCw2ICs2OCw3IEBAIGVudW0gQWJvcnRSZWFzb24gewogICAg
IEpJVFVuY291Z2h0RXhjZXB0aW9uQWZ0ZXJDYWxsICAgICAgICAgICAgICAgICAgICAgPSAyNzUs
CiAgICAgSklUVW5leHBlY3RlZENhbGxGcmFtZVNpemUgICAgICAgICAgICAgICAgICAgICAgICA9
IDI3NywKICAgICBKSVRVbnJlYXNvbmFibGVMb29wSGludEp1bXBUYXJnZXQgICAgICAgICAgICAg
ICAgID0gMjgwLAorICAgIE1hY3JvQXNzZW1ibGVyT29wcyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAyODUsCiAgICAgUlBXVW5yZWFzb25hYmxlSnVtcFRhcmdldCAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDI5MCwKICAgICBSZXBhdGNoSW5lZmZlY3RpdmVXYXRjaHBvaW50ICAg
ICAgICAgICAgICAgICAgICAgID0gMzAwLAogICAgIFJlcGF0Y2hJbnNhbmVBcmd1bWVudENvdW50
ICAgICAgICAgICAgICAgICAgICAgICAgPSAzMTAsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkocmV2aXNpb24g
MjYyMTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTTY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw2ICs0NSw4IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgZGF0YVRlbXBSZWdpc3RlciA9IEFSTTY0UmVnaXN0
ZXJzOjppcDA7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIG1lbW9yeVRlbXBSZWdp
c3RlciA9IEFSTTY0UmVnaXN0ZXJzOjppcDE7CiAKKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lz
dGVySUQgSW52YWxpZEdQUlJlZyA9IEFSTTY0UmVnaXN0ZXJzOjpJbnZhbGlkR1BSUmVnOworCiAg
ICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnaXN0ZXIoKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQobV9hbGxvd1NjcmF0Y2hSZWdpc3Rlcik7CkBAIC00MzYsNyArNDM4LDMyIEBAIHB1Ymxp
YzoKICAgICAgICAgbW92ZShpbW0sIGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFuZEludmFs
aWRhdGUoKSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFuZF88NjQ+KGRlc3QsIGRlc3QsIGRhdGFU
ZW1wUmVnaXN0ZXIpOwogICAgIH0KLSAgICAKKworICAgIHZvaWQgY2xlYXJCaXQ2NChSZWdpc3Rl
cklEIGJpdFRvQ2xlYXIsIFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoRm9yTWFz
ayA9IEludmFsaWRHUFJSZWcpCisgICAgeworICAgICAgICBpZiAoc2NyYXRjaEZvck1hc2sgPT0g
SW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHNjcmF0Y2hGb3JNYXNrID0gc2NyYXRjaFJlZ2lz
dGVyKCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hGb3JNYXNrKTsK
KyAgICAgICAgbHNoaWZ0NjQoYml0VG9DbGVhciwgc2NyYXRjaEZvck1hc2spOworICAgICAgICBj
bGVhckJpdHM2NFdpdGhNYXNrKHNjcmF0Y2hGb3JNYXNrLCBkZXN0KTsKKyAgICB9CisKKyAgICBl
bnVtIGNsYXNzIENsZWFyQml0c0F0dHJpYnV0ZXMgeworICAgICAgICBPS1RvQ2xvYmJlck1hc2ss
CisgICAgICAgIE11c3RQcmVzZXJ2ZU1hc2sKKyAgICB9OworCisgICAgdm9pZCBjbGVhckJpdHM2
NFdpdGhNYXNrKFJlZ2lzdGVySUQgbWFzaywgUmVnaXN0ZXJJRCBkZXN0LCBDbGVhckJpdHNBdHRy
aWJ1dGVzID0gQ2xlYXJCaXRzQXR0cmlidXRlczo6T0tUb0Nsb2JiZXJNYXNrKQorICAgIHsKKyAg
ICAgICAgY2xlYXJCaXRzNjRXaXRoTWFzayhkZXN0LCBtYXNrLCBkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIGNsZWFyQml0czY0V2l0aE1hc2soUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgbWFz
aywgUmVnaXN0ZXJJRCBkZXN0LCBDbGVhckJpdHNBdHRyaWJ1dGVzID0gQ2xlYXJCaXRzQXR0cmli
dXRlczo6T0tUb0Nsb2JiZXJNYXNrKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYmljPDY0
PihkZXN0LCBzcmMsIG1hc2spOworICAgIH0KKwogICAgIHZvaWQgY291bnRMZWFkaW5nWmVyb3Mz
MihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3Nl
bWJsZXIuY2x6PDMyPihkZXN0LCBzcmMpOwpAQCAtNDYxLDYgKzQ4OCwxOCBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fYXNzZW1ibGVyLmNsejw2ND4oZGVzdCwgZGVzdCk7CiAgICAgfQogCisgICAgdm9p
ZCBjb3VudFRyYWlsaW5nWmVyb3M2NFdpdGhvdXROdWxsQ2hlY2soUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgSnVtcCBu
b3RaZXJvID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHNyYyk7CisgICAgICAgIGFib3J0V2l0aFJl
YXNvbihNYWNyb0Fzc2VtYmxlck9vcHMsIF9fTElORV9fKTsKKyAgICAgICAgbm90WmVyby5saW5r
KHRoaXMpOworI2VuZGlmCisgICAgICAgIC8vIEFybSBkaWQgbm90IG5lZWQgYW4gZXhwbGljaXQg
bnVsbCBjaGVjayB0byBiZWdpbiB3aXRoLiBTbywgd2UgY2FuIGRvCisgICAgICAgIC8vIGV4YWN0
bHkgdGhlIHNhbWUgdGhpbmcgYXMgaW4gY291bnRUcmFpbGluZ1plcm9zNjQoKS4KKyAgICAgICAg
Y291bnRUcmFpbGluZ1plcm9zNjQoc3JjLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lkIGJ5dGVT
d2FwMTYoUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5yZXYxNjwz
Mj4oZHN0LCBkc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNpb24gMjYyMTY2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDIsNiArNDIsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIGNv
bnN0ZXhwciBTY2FsZSBTY2FsZVB0ciA9IFRpbWVzRWlnaHQ7CiAKKyAgICBzdGF0aWMgY29uc3Rl
eHByIFJlZ2lzdGVySUQgSW52YWxpZEdQUlJlZyA9IFg4NlJlZ2lzdGVyczo6SW52YWxpZEdQUlJl
ZzsKKwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjphZGQzMjsKICAgICB1c2lu
ZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YW5kMzI7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJs
ZXJYODZDb21tb246OmJyYW5jaDMyOwpAQCAtNDk5LDYgKzUwMSw0NCBAQCBwdWJsaWM6CiAgICAg
ICAgIGN0ekFmdGVyQnNmPDY0Pihkc3QpOwogICAgIH0KIAorICAgIHZvaWQgY291bnRUcmFpbGlu
Z1plcm9zNjRXaXRob3V0TnVsbENoZWNrKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkK
KyAgICB7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgSnVtcCBub3RaZXJvID0gYnJhbmNo
VGVzdDY0KE5vblplcm8sIHNyYyk7CisgICAgICAgIGFib3J0V2l0aFJlYXNvbihNYWNyb0Fzc2Vt
Ymxlck9vcHMsIF9fTElORV9fKTsKKyAgICAgICAgbm90WmVyby5saW5rKHRoaXMpOworI2VuZGlm
CisgICAgICAgIGlmIChzdXBwb3J0c0JNSTEoKSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
dHpjbnRxX3JyKHNyYywgZHN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBtX2Fzc2VtYmxlci5ic2ZxX3JyKHNyYywgZHN0KTsKKyAgICB9CisKKyAgICB2b2lkIGNs
ZWFyQml0NjQoUmVnaXN0ZXJJRCBiaXRUb0NsZWFyLCBSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJ
RCA9IEludmFsaWRHUFJSZWcpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5idHJxX3JyKGRz
dCwgYml0VG9DbGVhcik7CisgICAgfQorCisgICAgZW51bSBjbGFzcyBDbGVhckJpdHNBdHRyaWJ1
dGVzIHsKKyAgICAgICAgT0tUb0Nsb2JiZXJNYXNrLAorICAgICAgICBNdXN0UHJlc2VydmVNYXNr
CisgICAgfTsKKworICAgIHZvaWQgY2xlYXJCaXRzNjRXaXRoTWFzayhSZWdpc3RlcklEIG1hc2ss
IFJlZ2lzdGVySUQgZGVzdCwgQ2xlYXJCaXRzQXR0cmlidXRlcyBtYXNrUHJlc2VydmF0aW9uID0g
Q2xlYXJCaXRzQXR0cmlidXRlczo6T0tUb0Nsb2JiZXJNYXNrKQorICAgIHsKKyAgICAgICAgbm90
NjQobWFzayk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZHFfcnIobWFzaywgZGVzdCk7CisgICAg
ICAgIGlmIChtYXNrUHJlc2VydmF0aW9uID09IENsZWFyQml0c0F0dHJpYnV0ZXM6Ok11c3RQcmVz
ZXJ2ZU1hc2spCisgICAgICAgICAgICBub3Q2NChtYXNrKTsKKyAgICB9CisKKyAgICB2b2lkIGNs
ZWFyQml0czY0V2l0aE1hc2soUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgbWFzaywgUmVnaXN0
ZXJJRCBkZXN0LCBDbGVhckJpdHNBdHRyaWJ1dGVzIG1hc2tQcmVzZXJ2YXRpb24gPSBDbGVhckJp
dHNBdHRyaWJ1dGVzOjpPS1RvQ2xvYmJlck1hc2spCisgICAgeworICAgICAgICBtb3ZlKHNyYywg
ZGVzdCk7CisgICAgICAgIGNsZWFyQml0czY0V2l0aE1hc2sobWFzaywgZGVzdCwgbWFza1ByZXNl
cnZhdGlvbik7CisgICAgfQorCiAgICAgdm9pZCBjb3VudFBvcHVsYXRpb242NChSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBBU1NFUlQoc3VwcG9ydHNDb3Vu
dFBvcHVsYXRpb24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4
NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDI2MjE2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOTIsNiAr
MjkyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgT1AyX0lNVUxfR3ZFdiAgICAgICA9IDB4QUYsCiAg
ICAgICAgIE9QMl9DTVBYQ0hHYiAgICAgICAgPSAweEIwLAogICAgICAgICBPUDJfQ01QWENIRyAg
ICAgICAgID0gMHhCMSwKKyAgICAgICAgT1AyX0JUUiAgICAgICAgICAgICA9IDB4QjMsCiAgICAg
ICAgIE9QMl9NT1ZaWF9HdkViICAgICAgPSAweEI2LAogICAgICAgICBPUDJfUE9QQ05UICAgICAg
ICAgID0gMHhCOCwKICAgICAgICAgT1AyX0dST1VQX0JUX0V2SWIgICA9IDB4QkEsCkBAIC0xNjQ4
LDYgKzE2NDksMTMgQEAgcHVibGljOgogICAgIH0KICNlbmRpZgogCisjaWYgQ1BVKFg4Nl82NCkK
KyAgICB2b2lkIGJ0cnFfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wNjQoT1AyX0JUUiwgZHN0LCBzcmMpOworICAg
IH0KKyNlbmRpZgorCiAgICAgdm9pZCBwb3BjbnRfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9TU0VfRjMpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAJKHJl
dmlzaW9uIDI2MjE2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1h
c20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsNyArMzEzLDcgQEAgc3RhdGljIFZlY3Rvcjxp
bnQzMl90PiBpbnQzMk9wZXJhbmRzKCkKICAgICB9OwogfQogCi0jaWYgQ1BVKFg4Nl82NCkKKyNp
ZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCiBzdGF0aWMgVmVjdG9yPGludDY0X3Q+IGludDY0
T3BlcmFuZHMoKQogewogICAgIHJldHVybiBWZWN0b3I8aW50NjRfdD4gewpAQCAtNDY4LDYgKzQ2
OCwxOTggQEAgdm9pZCB0ZXN0QnJhbmNoVGVzdEJpdDY0QWRkckltbSgpCiAKICNlbmRpZgogCisj
aWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQordm9pZCB0ZXN0Q2xlYXJCaXQ2NCgpCit7Cisg
ICAgYXV0byB0ZXN0ID0gY29tcGlsZShbXSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAg
ZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICAgICAgaml0LmNsZWFyQml0NjQoR1BSSW5mbzo6
YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjAsIHNjcmF0Y2hHUFIpOworICAgICAg
ICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKworICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICBqaXQucmV0
KCk7CisgICAgfSk7CisKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgYml0c0luV29yZCA9IHNpemVv
Zih1aW50NjRfdCkgKiA4OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJpdHNJbldv
cmQ7ICsraSkgeworICAgICAgICB1aW50NjRfdCB3b3JkID0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50NjRfdD46Om1heCgpOworICAgICAgICBjb25zdGV4cHIgdWludDY0X3Qgb25lID0gMTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQ2NF90Pih0ZXN0LCB3b3JkLCBpKSwgKHdvcmQgJiB+
KG9uZSA8PCBpKSkpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiaXRz
SW5Xb3JkOyArK2kpIHsKKyAgICAgICAgdWludDY0X3Qgd29yZCA9IDA7CisgICAgICAgIENIRUNL
X0VRKGludm9rZTx1aW50NjRfdD4odGVzdCwgd29yZCwgaSksIDApOworICAgIH0KK30KKwordm9p
ZCB0ZXN0Q2xlYXJCaXRzNjRXaXRoTWFzaygpCit7CisgICAgYXV0byB0ZXN0ID0gY29tcGlsZShb
XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0
KTsKKworICAgICAgICBqaXQuY2xlYXJCaXRzNjRXaXRoTWFzayhHUFJJbmZvOjphcmd1bWVudEdQ
UjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFy
Z3VtZW50R1BSMCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgIGVtaXRGdW5j
dGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgIGppdC5yZXQoKTsKKyAgICB9KTsKKworICAgIGZv
ciAoYXV0byB2YWx1ZSA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICB1aW50NjRfdCB3b3Jk
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpOworICAgICAgICBDSEVDS19F
UShpbnZva2U8dWludDY0X3Q+KHRlc3QsIHdvcmQsIHZhbHVlKSwgKHdvcmQgJiB+dmFsdWUpKTsK
KyAgICB9CisKKyAgICBmb3IgKGF1dG8gdmFsdWUgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAg
ICAgdWludDY0X3Qgd29yZCA9IDA7CisgICAgICAgIENIRUNLX0VRKGludm9rZTx1aW50NjRfdD4o
dGVzdCwgd29yZCwgdmFsdWUpLCAwKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoTUFTTV9QUk9CRSkK
KyAgICB1aW50NjRfdCBzYXZlZE1hc2sgPSAwOworICAgIGF1dG8gdGVzdDIgPSBjb21waWxlKFsm
XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0
KTsKKworICAgICAgICBqaXQucHJvYmUoWyZdIChQcm9iZTo6Q29udGV4dCYgY29udGV4dCkgewor
ICAgICAgICAgICAgc2F2ZWRNYXNrID0gY29udGV4dC5ncHI8dWludDY0X3Q+KEdQUkluZm86OmFy
Z3VtZW50R1BSMSk7CisgICAgICAgIH0pOworCisgICAgICAgIGppdC5jbGVhckJpdHM2NFdpdGhN
YXNrKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDQ2FsbEhl
bHBlcnM6OkNsZWFyQml0c0F0dHJpYnV0ZXM6Ok11c3RQcmVzZXJ2ZU1hc2spOworCisgICAgICAg
IGppdC5wcm9iZShbJl0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICBD
SEVDS19FUShzYXZlZE1hc2ssIGNvbnRleHQuZ3ByPHVpbnQ2NF90PihHUFJJbmZvOjphcmd1bWVu
dEdQUjEpKTsKKyAgICAgICAgfSk7CisgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50
R1BSMCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgIGVtaXRGdW5jdGlvbkVw
aWxvZ3VlKGppdCk7CisgICAgICAgIGppdC5yZXQoKTsKKyAgICB9KTsKKworICAgIGZvciAoYXV0
byB2YWx1ZSA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICB1aW50NjRfdCB3b3JkID0gc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpOworICAgICAgICBDSEVDS19FUShpbnZv
a2U8dWludDY0X3Q+KHRlc3QyLCB3b3JkLCB2YWx1ZSksICh3b3JkICYgfnZhbHVlKSk7CisgICAg
fQorCisgICAgZm9yIChhdXRvIHZhbHVlIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIHVp
bnQ2NF90IHdvcmQgPSAwOworICAgICAgICBDSEVDS19FUShpbnZva2U8dWludDY0X3Q+KHRlc3Qy
LCB3b3JkLCB2YWx1ZSksIDApOworICAgIH0KKyNlbmRpZgorfQorCit2b2lkIHRlc3RDbGVhckJp
dHM2NFdpdGhNYXNrVGVybmFyeSgpCit7CisgICAgYXV0byB0ZXN0ID0gY29tcGlsZShbXSAoQ0Nh
bGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKwor
ICAgICAgICBqaXQubW92ZShHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50
R1BSMik7CisgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIzKTsKKyAgICAgICAgaml0LmNsZWFyQml0czY0V2l0aE1hc2soR1BSSW5mbzo6
YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKKworICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICBqaXQu
cmV0KCk7CisgICAgfSk7CisKKyAgICBmb3IgKGF1dG8gdmFsdWUgOiBpbnQ2NE9wZXJhbmRzKCkp
IHsKKyAgICAgICAgdWludDY0X3Qgd29yZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+
OjptYXgoKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQ2NF90Pih0ZXN0LCB3b3JkLCB2
YWx1ZSksICh3b3JkICYgfnZhbHVlKSk7CisgICAgfQorCisgICAgZm9yIChhdXRvIHZhbHVlIDog
aW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIHVpbnQ2NF90IHdvcmQgPSAwOworICAgICAgICBD
SEVDS19FUShpbnZva2U8dWludDY0X3Q+KHRlc3QsIHdvcmQsIHZhbHVlKSwgMCk7CisgICAgfQor
CisjaWYgRU5BQkxFKE1BU01fUFJPQkUpCisgICAgdWludDY0X3Qgc2F2ZWRNYXNrID0gMDsKKyAg
ICBhdXRvIHRlc3QyID0gY29tcGlsZShbJl0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAg
IGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6
YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICBqaXQubW92ZShH
UFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisKKyAgICAgICAg
aml0LnByb2JlKFsmXSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgIHNh
dmVkTWFzayA9IGNvbnRleHQuZ3ByPHVpbnQ2NF90PihHUFJJbmZvOjphcmd1bWVudEdQUjIpOwor
ICAgICAgICB9KTsKKworICAgICAgICBqaXQuY2xlYXJCaXRzNjRXaXRoTWFzayhHUFJJbmZvOjph
cmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMywgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIENDYWxsSGVscGVyczo6Q2xlYXJCaXRzQXR0cmlidXRlczo6TXVzdFByZXNlcnZlTWFzayk7
CisKKyAgICAgICAgaml0LnByb2JlKFsmXSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAg
ICAgICAgICAgIENIRUNLX0VRKHNhdmVkTWFzaywgY29udGV4dC5ncHI8dWludDY0X3Q+KEdQUklu
Zm86OmFyZ3VtZW50R1BSMikpOworICAgICAgICB9KTsKKworICAgICAgICBlbWl0RnVuY3Rpb25F
cGlsb2d1ZShqaXQpOworICAgICAgICBqaXQucmV0KCk7CisgICAgfSk7CisKKyAgICBmb3IgKGF1
dG8gdmFsdWUgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgdWludDY0X3Qgd29yZCA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52
b2tlPHVpbnQ2NF90Pih0ZXN0Miwgd29yZCwgdmFsdWUpLCAod29yZCAmIH52YWx1ZSkpOworICAg
IH0KKworICAgIGZvciAoYXV0byB2YWx1ZSA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICB1
aW50NjRfdCB3b3JkID0gMDsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQ2NF90Pih0ZXN0
Miwgd29yZCwgdmFsdWUpLCAwKTsKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgdGVz
dENvdW50VHJhaWxpbmdaZXJvczY0SW1wbChib29sIHdvcmRDYW5CZVplcm8pCit7CisgICAgYXV0
byB0ZXN0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgIGVtaXRG
dW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgaWYgKHdvcmRDYW5CZVplcm8pCisgICAg
ICAgICAgICBqaXQuY291bnRUcmFpbGluZ1plcm9zNjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGppdC5j
b3VudFRyYWlsaW5nWmVyb3M2NFdpdGhvdXROdWxsQ2hlY2soR1BSSW5mbzo6YXJndW1lbnRHUFIw
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoaml0KTsKKyAgICAgICAgaml0LnJldCgpOworICAgIH0pOworCisgICAgY29uc3RleHByIHNp
emVfdCBudW1iZXJPZkJpdHMgPSBzaXplb2YodWludDY0X3QpICogODsKKworICAgIGF1dG8gZXhw
ZWN0ZWROdW1iZXJPZlRyYWlsaW5nWmVyb3MgPSBbPV0gKHVpbnQ2NF90IHdvcmQpIC0+IHNpemVf
dCB7CisgICAgICAgIHNpemVfdCBjb3VudCA9IDA7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtYmVyT2ZCaXRzOyArK2kpIHsKKyAgICAgICAgICAgIGlmICh3b3JkICYgMSkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHdvcmQgPj49IDE7CisgICAgICAgICAg
ICBjb3VudCsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjb3VudDsKKyAgICB9OworCisg
ICAgZm9yIChhdXRvIHdvcmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgaWYgKCF3b3Jk
Q2FuQmVaZXJvICYmICF3b3JkKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIENIRUNL
X0VRKGludm9rZTxzaXplX3Q+KHRlc3QsIHdvcmQpLCBleHBlY3RlZE51bWJlck9mVHJhaWxpbmda
ZXJvcyh3b3JkKSk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJP
ZkJpdHM7ICsraSkgeworICAgICAgICB1aW50NjRfdCBvbmUgPSAxOworICAgICAgICB1aW50NjRf
dCB3b3JkID0gb25lIDw8IGk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxzaXplX3Q+KHRlc3Qs
IHdvcmQpLCBpKTsKKyAgICB9Cit9CisKK3ZvaWQgdGVzdENvdW50VHJhaWxpbmdaZXJvczY0KCkK
K3sKKyAgICBib29sIHdvcmRDYW5CZVplcm8gPSB0cnVlOworICAgIHRlc3RDb3VudFRyYWlsaW5n
WmVyb3M2NEltcGwod29yZENhbkJlWmVybyk7Cit9CisKK3ZvaWQgdGVzdENvdW50VHJhaWxpbmda
ZXJvczY0V2l0aG91dE51bGxDaGVjaygpCit7CisgICAgYm9vbCB3b3JkQ2FuQmVaZXJvID0gZmFs
c2U7CisgICAgdGVzdENvdW50VHJhaWxpbmdaZXJvczY0SW1wbCh3b3JkQ2FuQmVaZXJvKTsKK30K
KyNlbmRpZiAvLyBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCisKIHZvaWQgdGVzdENvbXBhcmVE
b3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAg
ZG91YmxlIGFyZzEgPSAwOwpAQCAtMjMwMSw2ICsyNDkzLDE0IEBAIHZvaWQgcnVuKGNvbnN0IGNo
YXIqIGZpbHRlcikKICAgICBSVU4odGVzdEJyYW5jaFRlc3RCaXQ2NEFkZHJJbW0oKSk7CiAjZW5k
aWYKIAorI2lmIENQVShYODZfNjQpIHx8IENQVShBUk02NCkKKyAgICBSVU4odGVzdENsZWFyQml0
NjQoKSk7CisgICAgUlVOKHRlc3RDbGVhckJpdHM2NFdpdGhNYXNrKCkpOworICAgIFJVTih0ZXN0
Q2xlYXJCaXRzNjRXaXRoTWFza1Rlcm5hcnkoKSk7CisgICAgUlVOKHRlc3RDb3VudFRyYWlsaW5n
WmVyb3M2NCgpKTsKKyAgICBSVU4odGVzdENvdW50VHJhaWxpbmdaZXJvczY0V2l0aG91dE51bGxD
aGVjaygpKTsKKyNlbmRpZgorCiAjaWYgQ1BVKEFSTTY0KQogICAgIFJVTih0ZXN0TXVsMzJTaWdu
RXh0ZW5kKCkpOwogI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>