<?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>227013</bug_id>
          
          <creation_ts>2021-06-14 22:41:20 -0700</creation_ts>
          <short_desc>Move setting of scratch buffer active lengths to the runtime functions.</short_desc>
          <delta_ts>2021-07-04 00:15:52 -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>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=227670</see_also>
          <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>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1769699</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-06-14 22:41:20 -0700</bug_when>
    <thetext>We previously emit JIT&apos;ed code to set and unset the ScratchBuffer active length around calls into C++ runtime functions.  This was needed because the runtime functions may allow GC to run, and GC needs to be able to scan the values stored in the ScratchBuffer.

Instead of emitting JIT code to set and unset the active length, we can do it in the runtime function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769700</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-14 22:41:49 -0700</bug_when>
    <thetext>&lt;rdar://problem/79325068&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769701</commentid>
    <comment_count>2</comment_count>
      <attachid>431404</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-06-14 22:46:23 -0700</bug_when>
    <thetext>Created attachment 431404
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769807</commentid>
    <comment_count>3</comment_count>
      <attachid>431404</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-06-15 08:34:13 -0700</bug_when>
    <thetext>Comment on attachment 431404
proposed patch.

r=me. How do we get the scratch register buffer when writing to it in C++? If it’s not via the m_scratchBuffer member maybe we should have an assert that it’s set?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769808</commentid>
    <comment_count>4</comment_count>
      <attachid>431404</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-06-15 08:34:27 -0700</bug_when>
    <thetext>Comment on attachment 431404
proposed patch.

r=me. How do we get the scratch register buffer when writing to it in C++? If it’s not via the m_scratchBuffer member maybe we should have an assert that it’s set?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769822</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-06-15 09:04:17 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #4)
&gt; Comment on attachment 431404 [details]
&gt; proposed patch.
&gt; 
&gt; r=me. 

Thanks.

&gt; How do we get the scratch register buffer when writing to it in C++?
&gt; If it’s not via the m_scratchBuffer member maybe we should have an assert
&gt; that it’s set?

```
inline ActiveScratchBufferScope::ActiveScratchBufferScope(VM&amp; vm, size_t activeScratchBufferSizeInJSValues)
    : m_scratchBuffer(vm.scratchBufferForSize(activeScratchBufferSizeInJSValues * sizeof(EncodedJSValue)))
{
    // Tell GC mark phase how much of the scratch buffer is active during the call operation this scope is used in.
    if (m_scratchBuffer)
        m_scratchBuffer-&gt;u.m_activeLength = activeScratchBufferSizeInJSValues * sizeof(EncodedJSValue);
}
```

We call vm.scratchBufferForSize() with the exact same size that the JIT calls it with.  Hence, we&apos;ll always get the same ScratchBuffer.

As for accesses to the scratch buffer, if the C++ runtime used to write stuff to the ScratchBuffer, it does so the same way as before i.e. the JIT code would have passed in the buffer as a pointer.  I&apos;m not changing anything there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769826</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-06-15 09:10:02 -0700</bug_when>
    <thetext>Landed in r278875: &lt;http://trac.webkit.org/r278875&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431404</attachid>
            <date>2021-06-14 22:46:23 -0700</date>
            <delta_ts>2021-06-15 08:34:27 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-227013.patch</filename>
            <type>text/plain</type>
            <size>32279</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4ODU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MyBA
QAorMjAyMS0wNi0xNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
TW92ZSBzZXR0aW5nIG9mIHNjcmF0Y2ggYnVmZmVyIGFjdGl2ZSBsZW5ndGhzIHRvIHRoZSBydW50
aW1lIGZ1bmN0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyNzAxMworICAgICAgICByZGFyOi8vNzkzMjUwNjgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBwcmV2aW91c2x5IGVtaXQgSklUJ2Vk
IGNvZGUgdG8gc2V0IGFuZCB1bnNldCB0aGUgU2NyYXRjaEJ1ZmZlciBhY3RpdmUgbGVuZ3RoCisg
ICAgICAgIGFyb3VuZCBjYWxscyBpbnRvIEMrKyBydW50aW1lIGZ1bmN0aW9ucy4gIFRoaXMgd2Fz
IG5lZWRlZCBiZWNhdXNlIHRoZSBydW50aW1lCisgICAgICAgIGZ1bmN0aW9ucyBtYXkgYWxsb3cg
R0MgdG8gcnVuLCBhbmQgR0MgbmVlZHMgdG8gYmUgYWJsZSB0byBzY2FuIHRoZSB2YWx1ZXMgc3Rv
cmVkCisgICAgICAgIGluIHRoZSBTY3JhdGNoQnVmZmVyLgorCisgICAgICAgIEluIHRoaXMgcGF0
Y2gsIHdlIGNoYW5nZSBpdCBzbyB0aGF0IHRoZSBydW50aW1lIGZ1bmN0aW9ucyB0aGF0IG5lZWQg
aXQgd2lsbAorICAgICAgICBkZWNsYXJlIGFuIEFjdGl2ZVNjcmF0Y2hCdWZmZXJTY29wZSBSQUlJ
IG9iamVjdCB0aGF0IHdpbGwgc2V0IHRoZSBTY3JhdGNoQnVmZmVyCisgICAgICAgIGFjdGl2ZSBs
ZW5ndGgsIGFuZCB1bnNldCBpdCBvbiBleGl0LiAgVGhpcyBhbGxvd3MgdXMgdG86CisKKyAgICAg
ICAgMS4gRW1pdCBsZXNzIEpJVCBjb2RlLiAgVGhlIHJ1bnRpbWUgZnVuY3Rpb24gY2FuIHRha2Ug
Y2FyZSBvZiBpdC4KKyAgICAgICAgMi4gRWxpZGUgc2V0dGluZyB0aGUgU2NyYXRjaEJ1ZmZlciBh
Y3RpdmUgbGVuZ3RoIGlmIG5vdCBuZWVkZWQuICBUaGUgcnVudGltZQorICAgICAgICAgICBmdW5j
dGlvbnMga25vdyB3aGV0aGVyIHRoZXkgY2FuIEdDIG9yIG5vdC4gIFRoZXkgb25seSBuZWVkIHRv
IHNldCB0aGUgYWN0aXZlCisgICAgICAgICAgIGxlbmd0aCBpZiB0aGV5IGNhbiBHQy4KKworICAg
ICAgICBOb3RlIHRoYXQgc2Nhbm5pbmcgb2YgdGhlIGFjdGl2ZSBTY3JhdGNoQnVmZmVyIGlzIGRv
bmUgc3luY2hyb25vdXNseSBvbiB0aGUKKyAgICAgICAgbXV0YXRvciB0aHJlYWQgdmlhIEhlYXA6
OmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cygpLCB3aGljaCBpcyBjYWxsZWQgYXMgcGFydCBvZgor
ICAgICAgICB0aGUgR0MgY29uc2VydmF0aXZlIHJvb3Qgc2Nhbi4gIFRoaXMgbWVhbnMgdGhlcmUg
aXMgbm8gdXJnZW5jeSAvIHNlcXVlbmNpbmcgdGhhdAorICAgICAgICByZXF1aXJlcyB0aGF0IHRo
ZSBhY3RpdmUgbGVuZ3RoIGJlIHNldCBiZWZvcmUgY2FsbGluZyBpbnRvIHRoZSBydW50aW1lIGZ1
bmN0aW9uLgorICAgICAgICBTZXR0aW5nIGl0IGluIHRoZSBydW50aW1lIGZ1bmN0aW9uIGl0c2Vs
ZiBpcyBmaW5lIGFzIGxvbmcgYXMgaXQgaXMgZG9uZSBiZWZvcmUKKyAgICAgICAgdGhlIGZ1bmN0
aW9uIGV4ZWN1dGVzIGFueSBvcGVyYXRpb25zIHRoYXQgY2FuIEdDLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggYWxzbyBtYWRlIHRoZSBmb2xsb3dpbmcgY2hhbmdlczoKKworICAgICAgICAxLiBJbnRy
b2R1Y2UgQWN0aXZlU2NyYXRjaEJ1ZmZlclNjb3BlIFJBSUkgb2JqZWN0IHVzZWQgdG8gc2V0L3Vu
c2V0IHRoZQorICAgICAgICAgICBTY3JhdGNoQnVmZmVyIGxlbmd0aCBpbiB0aGUgcnVudGltZSBm
dW5jdGlvbnMuICBBY3RpdmVTY3JhdGNoQnVmZmVyU2NvcGUgdGFrZXMKKyAgICAgICAgICAgdGhl
IGFjdGl2ZSBsZW5ndGggaW4gdW5pdHMgb2YgbnVtYmVyIG9mIHN0YWNrIHNsb3RzIC8gUmVnaXN0
ZXJzIC8gSlNWYWx1ZXMKKyAgICAgICAgICAgaW5zdGVhZCBvZiBieXRlcy4KKworICAgICAgICAy
LiBEZWxldGVkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVVc2VkUmVnaXN0ZXJz
VG9TY3JhdGNoQnVmZmVyRm9yQ2FsbCgpCisgICAgICAgICAgIGFuZCBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6OnJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hCdWZmZXJGb3JDYWxsKCku
CisgICAgICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdW51c2VkLgorCisgICAgICAgIFRoZSBy
ZWFzb25pbmcgYmVoaW5kIHdoYXQgdmFsdWVzIHRvIHBhc3MgdG8gQWN0aXZlU2NyYXRjaEJ1ZmZl
clNjb3BlLCBpcyBhbnk6CisKKyAgICAgICAgMS4gQXNzZW1ibHlIZWxwZXJzOjpkZWJ1Z0NhbGwo
KSBpbiBBc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAgICBUaGUgU2NyYXRjaEJ1ZmZlciBp
cyBvbmx5IHVzZWQgZm9yIG9wZXJhdGlvbkRlYnVnUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUoKSwK
KyAgICAgICAgICAgd2hpY2ggbm93IGRlY2xhcmVzIGFuIEFjdGl2ZVNjcmF0Y2hCdWZmZXJTY29w
ZS4KKworICAgICAgICAgICBUaGUgYWN0aXZlIGxlbmd0aCBpcyBHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVycyArIEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzLgorICAgICAgICAgICBTZWUgc2Ny
YXRjaFNpemUgaW4gQXNzZW1ibHlIZWxwZXJzOjpkZWJ1Z0NhbGwoKS4KKworICAgICAgICAyLiBn
ZW5lcmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKCkgaW4gRlRMVGh1bmtzLmNwcDoKKyAgICAg
ICAgICAgVGhlIHNjcmF0Y2ggYnVmZmVyIHNpemUgZm9yIGRldGVybWluaW5nIHRoZSBhY3RpdmUg
bGVuZ3RoIGlzCisgICAgICAgICAgIHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVzKCku
ICAKKworICAgICAgICAgICBIb3dldmVyLCBnZW5lcmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9y
KCkgZ2VuZXJhdGVzIGNvZGUgdG8gY2FsbCBlaXRoZXIKKyAgICAgICAgICAgb3BlcmF0aW9uQ29t
cGlsZUZUTE9TUkV4aXQoKSBvciBvcGVyYXRpb25Db21waWxlRlRMTGF6eVNsb3dQYXRoKCkuICBC
b3RoIG9mCisgICAgICAgICAgIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIERlZmVyR0NGb3JBV2hpbGUu
ICBIZW5jZSwgR0MgY2Fubm90IHJ1biwgYW5kIHdlIGRvbid0IG5lZWQKKyAgICAgICAgICAgdG8g
c2V0IHRoZSBhY3RpdmUgbGVuZ3RoIGhlcmUuCisKKyAgICAgICAgMy4gY29tcGlsZUFycmF5UHVz
aCgpIGluIEZUTExvd2VyREZHVG9CMy5jcHA6CisKKyAgICAgICAgICAgQ2FzZXMgQXJyYXk6Oklu
dDMyLCBBcnJheTo6Q29udGlndW91cywgb3IgQXJyYXk6OkRvdWJsZSBjYWxscworICAgICAgICAg
ICBvcGVyYXRpb25BcnJheVB1c2hNdWx0aXBsZSgpIG9yIG9wZXJhdGlvbkFycmF5UHVzaERvdWJs
ZU11bHRpcGxlKCkuCisKKyAgICAgICAgICAgRm9yIG9wZXJhdGlvbkFycmF5UHVzaE11bHRpcGxl
KCksIHRoZSBhY3RpdmUgbGVuZ3RoIGlzIGVsZW1lbnRDb3VudC4gIFNlZQorICAgICAgICAgICBj
b21wdXRhdGlvbiBvZiBzY3JhdGNoU2l6ZS4KKworICAgICAgICAgICBGb3Igb3BlcmF0aW9uQXJy
YXlQdXNoRG91YmxlTXVsdGlwbGUoKSwgd2UgZG9uJ3QgbmVlZCB0byBzZXQgdGhlIGFjdGl2ZSBs
ZW5ndGgKKyAgICAgICAgICAgYmVjYXVzZSB0aGUgU2NyYXRjaEJ1ZmZlciBvbmx5IGNvbnRhaW5z
IGRvdWJsZSB2YWx1ZXMuICBUaGUgR0MgZG9lcyBub3QgbmVlZAorICAgICAgICAgICB0byBzY2Fu
IHRob3NlLgorCisgICAgICAgICAgIENhc2UgQXJyYXk6OkFycmF5U3RvcmFnZSBjYWxscyBvcGVy
YXRpb25BcnJheVB1c2hNdWx0aXBsZSgpLgorICAgICAgICAgICBUaGUgYWN0aXZlIGxlbmd0aCBp
cyBlbGVtZW50Q291bnQuICBTZWUgY29tcHV0YXRpb24gb2Ygc2NyYXRjaFNpemUuCisKKyAgICAg
ICAgICAgY29tcGlsZU5ld0FycmF5KCkgaW4gRlRMTG93ZXJERkdUb0IzLmNwcDoKKworICAgICAg
ICAgICBDYWxscyBvcGVyYXRpb25OZXdBcnJheSgpLiAgQWN0aXZlIGxlbmd0aCBpcyBtX25vZGUt
Pm51bUNoaWxkcmVuKCksIHdoaWNoIGlzCisgICAgICAgICAgIHBhc3NlZCB0byBvcGVyYXRpb25O
ZXdBcnJheSgpIGFzIHRoZSBzaXplIHBhcmFtZXRlci4gIFNlZSBjb21wdXRhdGlvbiBvZgorICAg
ICAgICAgICBzY3JhdGNoU2l6ZS4KKworICAgICAgICAgICBjb21waWxlTmV3QXJyYXlXaXRoU3By
ZWFkKCkgaW4gRlRMTG93ZXJERkdUb0IzLmNwcDoKKworICAgICAgICAgICBDYWxscyBvcGVyYXRp
b25OZXdBcnJheVdpdGhTcHJlYWRTbG93KCkuICBBY3RpdmUgbGVuZ3RoIGlzIG1fbm9kZS0+bnVt
Q2hpbGRyZW4oKSwKKyAgICAgICAgICAgd2hpY2ggaXMgcGFzc2VzIHRvIG9wZXJhdGlvbk5ld0Fy
cmF5V2l0aFNwcmVhZFNsb3coKSBhcyB0aGUgbnVtSXRlbXMgcGFyYW1ldGVyLgorICAgICAgICAg
ICBTZWUgY29tcHV0YXRpb24gb2Ygc2NyYXRjaFNpemUuCisKKyAgICAgICAgNC4gb3NyRXhpdEdl
bmVyYXRpb25UaHVua0dlbmVyYXRvcigpIGluIERGR1RodW5rcy5jcHA6CisKKyAgICAgICAgICAg
Q2FsbHMgb3BlcmF0aW9uQ29tcGlsZU9TUkV4aXQoKS4gIEFjdGl2ZSBsZW5ndGggaXMgR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnMgKworICAgICAgICAgICBGUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVycy4gIFNlZSBjb21wdXRhdGlvbiBvZiBzY3JhdGNoU2l6ZS4KKworICAgICAgICA1LiBjb21w
aWxlTmV3QXJyYXkoKSBpbiBERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisKKyAgICAgICAgICAgQ2Fs
bHMgb3BlcmF0aW9uTmV3QXJyYXkoKS4gIEFjdGl2ZSBsZW5ndGggaXMgbm9kZS0+bnVtQ2hpbGRy
ZW4oKSwgd2hpY2ggaXMKKyAgICAgICAgICAgcGFzc2VkIGluIGFzIHRoZSBzaXplIHBhcmFtZXRl
ci4KKworICAgICAgICAgICBjb21waWxlTmV3QXJyYXlXaXRoU3ByZWFkKCkgaW4gREZHU3BlY3Vs
YXRpdmVKSVQuY3BwOgorCisgICAgICAgICAgIENhbGxzIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNw
cmVhZFNsb3coKS4gIEFjdGl2ZSBsZW5ndGggaXMgbm9kZS0+bnVtQ2hpbGRyZW4oKSwKKyAgICAg
ICAgICAgd2hpY2ggaXMgcGFzc2VkIGluIGFzIHRoZSBudW1JdGVtcyBwYXJhbWV0ZXIuCisKKyAg
ICAgICAgICAgY29tcGlsZUFycmF5UHVzaCgpIGluIERGR1NwZWN1bGF0aXZlSklULmNwcDoKKwor
ICAgICAgICAgICBDYWxscyBvcGVyYXRpb25BcnJheVB1c2hNdWx0aXBsZSgpLiAgQWN0aXZlIGxl
bmd0aCBpcyBlbGVtZW50Q291bnQsIHdoaWNoIGlzCisgICAgICAgICAgIHBhc3NlZCBpbiBhcyB0
aGUgZWxlbWVudENvdW50IHBhcmFtZXRlci4KKworICAgICAgICAgICBDYWxscyBvcGVyYXRpb25B
cnJheVB1c2hEb3VibGVNdWx0aXBsZSgpLiAgQWN0aXZlIGxlbmd0aCBpcyBlbGVtZW50Q291bnQs
IGJ1dAorICAgICAgICAgICB3ZSBkb24ndCBuZWVkIHRvIHNldCBpdCBiZWNhdXNlIHRoZSBTY3Jh
dGNoQnVmZmVyIG9ubHkgY29udGFpbnMgZG91YmxlIHZhbHVlcy4KKworCisgICAgICAgICogZGZn
L0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpTQ19ERUZJTkVfSklUX09QRVJB
VElPTik6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5l
d0FycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Fy
cmF5V2l0aFNwcmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBcnJheVB1c2gpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlND
OjpERkc6Om9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGZ0bC9G
VExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlQXJyYXlQdXNoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y29tcGlsZU5ld0FycmF5KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y29tcGlsZU5ld0FycmF5V2l0aFNwcmVhZCk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRD
b21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KToKKyAgICAgICAgKiBmdGwvRlRMT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBmdGwvRlRMVGh1bmtzLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpnZW5lcmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjpkZWJ1Z0NhbGwpOgorICAgICAgICAqIGppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuY3BwOgorICAgICAgICAoSlNDOjpTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZl
VXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlckZvckNhbGwpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNj
cmF0Y2hCdWZmZXJGb3JDYWxsKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLmg6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAqIHJ1bnRp
bWUvVk1JbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkFjdGl2ZVNjcmF0Y2hCdWZmZXJTY29wZTo6
QWN0aXZlU2NyYXRjaEJ1ZmZlclNjb3BlKToKKyAgICAgICAgKEpTQzo6QWN0aXZlU2NyYXRjaEJ1
ZmZlclNjb3BlOjp+QWN0aXZlU2NyYXRjaEJ1ZmZlclNjb3BlKToKKwogMjAyMS0wNi0xNCAgTWFy
ayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGxkcCBhbmQgc3RwIHN1
cHBvcnQgZm9yIEZQIHJlZ2lzdGVycywgcGx1cyBzb21lIGJ1ZyBmaXhlcy4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24gMjc4ODU2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiT3BlcmFuZHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCisjaW5jbHVk
ZSAiVk1JbmxpbmVzLmgiCiAKICNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KIApAQCAtMTQ0LDYgKzE0
NSw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Db21waWwKIHsKICAgICBW
TSYgdm0gPSBjYWxsRnJhbWUtPmRlcHJlY2F0ZWRWTSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBBY3RpdmVTY3JhdGNoQnVmZmVyU2NvcGUgYWN0aXZl
U2NyYXRjaEJ1ZmZlclNjb3BlKHZtLCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzKTsKIAogICAgIGlmIGNvbnN0ZXhwciAodmFsaWRhdGVERkdE
b2VzR0MpIHsKICAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZXhpdCBvcHRpbWl6ZWQgY29kZS4g
U28sIHRoZXJlJ3Mgbm8gbG9uZ2VyIGFueSBvcHRpbWl6ZWQKQEAgLTg5MCw2ICs4OTIsNyBAQCBK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRGVidWdQCiB7CiAgICAgVk0mIHZtID0g
Y2FsbEZyYW1lLT5kZXByZWNhdGVkVk0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsRnJhbWUpOworICAgIEFjdGl2ZVNjcmF0Y2hCdWZmZXJTY29wZSBhY3RpdmVT
Y3JhdGNoQnVmZmVyU2NvcGUodm0sIEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnMpOwogCiAgICAgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZv
KiBkZWJ1Z0luZm8gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qPihk
ZWJ1Z0luZm9SYXcpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZGVidWdJbmZvLT5jb2Rl
QmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDI3ODg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMzksNiArMTAzOSw3IEBAIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25BcnJheVAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUo
dm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
Y2FsbEZyYW1lKTsKKyAgICBBY3RpdmVTY3JhdGNoQnVmZmVyU2NvcGUgYWN0aXZlU2NyYXRjaEJ1
ZmZlclNjb3BlKHZtLCBlbGVtZW50Q291bnQpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIFdlIGFzc3VtZSB0aGF0IG11bHRpcGxlIEpTQXJyYXk6
OnB1c2ggY2FsbHMgd2l0aCBBcnJheVdpdGhJbnQzMi9BcnJheVdpdGhDb250aWd1b3VzIGRvIG5v
dCBjYXVzZSBKUyB0cmFwcy4KQEAgLTEwNjQsNiArMTA2NSw3IEBAIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25BcnJheVAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKKyAgICAvLyBEb24ndCBuZWVkIGEgQWN0aXZlU2NyYXRjaEJ1ZmZlclNjb3BlIGhlcmUgYmVj
YXVzZSB0aGUgc2NyYXRjaCBidWZmZXIgb25seSBjb250YWlucyBkb3VibGUgdmFsdWVzIGZvciB0
aGlzIGNhbGwuCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgLy8gV2UgYXNzdW1lIHRoYXQgbXVsdGlwbGUgSlNBcnJheTo6cHVzaCBjYWxscyB3aXRoIEFy
cmF5V2l0aERvdWJsZSBkbyBub3QgY2F1c2UgSlMgdHJhcHMuCkBAIC0xNzMyLDcgKzE3MzQsOCBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTmV3QXJyCiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9D
QUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgCisgICAgQWN0aXZlU2NyYXRjaEJ1ZmZlclNjb3Bl
IGFjdGl2ZVNjcmF0Y2hCdWZmZXJTY29wZSh2bSwgc2l6ZSk7CisKICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PGNoYXIqPihjb25zdHJ1Y3RBcnJheShnbG9iYWxPYmplY3QsIGFycmF5U3RydWN0dXJl
LCBzdGF0aWNfY2FzdDxKU1ZhbHVlKj4oYnVmZmVyKSwgc2l6ZSkpOwogfQogCkBAIC0zMDM5LDYg
KzMwNDIsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTmV3QXJyCiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
REVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQWN0aXZlU2NyYXRjaEJ1ZmZlclNj
b3BlIGFjdGl2ZVNjcmF0Y2hCdWZmZXJTY29wZSh2bSwgbnVtSXRlbXMpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEVuY29kZWRKU1ZhbHVlKiB2YWx1
ZXMgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGJ1ZmZlcik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24g
Mjc4ODU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkxNjcsMTQgKzkxNjcsNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlTmV3QXJyYXkoTm9kCiAKICAgICBmbHVzaFJlZ2lzdGVycygpOwogCi0gICAg
aWYgKHNjcmF0Y2hTaXplKSB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwot
Ci0gICAgICAgIC8vIFRlbGwgR0MgbWFyayBwaGFzZSBob3cgbXVjaCBvZiB0aGUgc2NyYXRjaCBi
dWZmZXIgaXMgYWN0aXZlIGR1cmluZyBjYWxsLgotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkpLCBzY3JhdGNoLmdw
cigpKTsKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihzY3JhdGNoU2l6ZSks
IHNjcmF0Y2guZ3ByKCkpOwotICAgIH0KLQogICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3Vs
dCh0aGlzKTsKIAogICAgIGNhbGxPcGVyYXRpb24oCkBAIC05MTgyLDEzICs5MTc0LDYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5KE5vZAogICAgICAgICBzdGF0aWNfY2Fz
dDx2b2lkKj4oYnVmZmVyKSwgc2l6ZV90KG5vZGUtPm51bUNoaWxkcmVuKCkpKTsKICAgICBtX2pp
dC5leGNlcHRpb25DaGVjaygpOwogCi0gICAgaWYgKHNjcmF0Y2hTaXplKSB7Ci0gICAgICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bVB0cihzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZBY3RpdmVMZW5ndGgoKSksIHNjcmF0Y2guZ3By
KCkpOwotICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBzY3Jh
dGNoLmdwcigpKTsKLSAgICB9Ci0KICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwg
VXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKIH0KIApAQCAtOTMzOSwxMiArOTMyNCw2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheVdpdGgKICAgICAgICAgfQogICAg
IH0KIAotICAgIHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZBY3RpdmVM
ZW5ndGgoKSksIHNjcmF0Y2guZ3ByKCkpOwotICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVk
SW1tUHRyKHNjcmF0Y2hTaXplKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaC5ncHIo
KSkpOwotICAgIH0KLQogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAKICAgICBHUFJGbHVzaGVkQ2Fs
bFJlc3VsdCByZXN1bHQodGhpcyk7CkBAIC05MzUyLDExICs5MzMxLDYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5V2l0aAogCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBcnJheVdpdGhTcHJlYWRTbG93LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJ1ZmZlciwgbm9kZS0+bnVtQ2hpbGRyZW4o
KSk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICB7Ci0gICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoc2Ny
YXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkpLCBzY3JhdGNoLmdwcigpKTsKLSAg
ICAgICAgbV9qaXQuc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc2NyYXRjaC5ncHIoKSkpOwotICAgIH0KIAogICAgIGNlbGxSZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKIH0KQEAgLTk4NzUsOCArOTg0OSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcnJheVB1c2goTm8KICAgICAgICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIGVsZW1lbnRDb3VudDsKICAgICAgICAgU2NyYXRjaEJ1ZmZl
ciogc2NyYXRjaEJ1ZmZlciA9IHZtKCkuc2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUp
OwogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpT
VmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpKSwgYnVmZmVyR1BSKTsKLSAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2
ZUxlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIoc2NyYXRjaFNpemUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
TGVuZ3RoR1BSKSk7CiAKICAgICAgICAgc3RvcmFnZURvbmUubGluaygmbV9qaXQpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGVsZW1lbnRJbmRleCA9IDA7IGVsZW1lbnRJbmRleCA8IGVsZW1lbnRD
b3VudDsgKytlbGVtZW50SW5kZXgpIHsKQEAgLTk4OTIsOSArOTg2NCw2IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBcnJheVB1c2goTm8KIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcihzbG93UGF0aENhbGwobV9qaXQuanVtcCgpLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2hN
dWx0aXBsZSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIs
IGJ1ZmZlckdQUiwgVHJ1c3RlZEltbTMyKGVsZW1lbnRDb3VudCkpKTsKIAotICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3Ro
KCkpLCBidWZmZXJHUFIpOwotICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51
bGxwdHIpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhidWZmZXJHUFIpKTsKLQogICAgICAgICBi
YXNlLnVzZSgpOwogICAgICAgICBzdG9yYWdlLnVzZSgpOwogCkBAIC05OTQ5LDggKzk5MTgsNiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlQdXNoKE5vCiAgICAgICAgIHNpemVf
dCBzY3JhdGNoU2l6ZSA9IHNpemVvZihkb3VibGUpICogZWxlbWVudENvdW50OwogICAgICAgICBT
Y3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0oKS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShz
Y3JhdGNoU2l6ZSk7CiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihzdGF0aWNfY2Fz
dDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkpLCBidWZmZXJH
UFIpOwotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRk
cmVzc09mQWN0aXZlTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKLSAgICAgICAgbV9qaXQu
c3RvcmVQdHIoVHJ1c3RlZEltbVB0cihzY3JhdGNoU2l6ZSksIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VMZW5ndGhHUFIpKTsKIAogICAgICAgICBzdG9yYWdlRG9uZS5saW5rKCZtX2pp
dCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgZWxlbWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4
IDwgZWxlbWVudENvdW50OyArK2VsZW1lbnRJbmRleCkgewpAQCAtOTk2Niw5ICs5OTMzLDYgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5UHVzaChObwogCiAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChtX2ppdC5qdW1wKCksIHRoaXMsIG9wZXJhdGlv
bkFycmF5UHVzaERvdWJsZU11bHRpcGxlLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgYmFzZUdQUiwgYnVmZmVyR1BSLCBUcnVzdGVkSW1tMzIoZWxlbWVudENvdW50KSkp
OwogCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hZGRy
ZXNzT2ZBY3RpdmVMZW5ndGgoKSksIGJ1ZmZlckdQUik7Ci0gICAgICAgIG1faml0LnN0b3JlUHRy
KFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1ZmZlckdQ
UikpOwotCiAgICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgIHN0b3JhZ2UudXNlKCk7CiAKQEAg
LTEwMDMwLDggKzk5OTQsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlQdXNo
KE5vCiAgICAgICAgIHNpemVfdCBzY3JhdGNoU2l6ZSA9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkg
KiBlbGVtZW50Q291bnQ7CiAgICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2
bSgpLnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKICAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZl
ci0+ZGF0YUJ1ZmZlcigpKSksIGJ1ZmZlckdQUik7Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZBY3RpdmVMZW5ndGgoKSksIHN0b3JhZ2VM
ZW5ndGhHUFIpOwotICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKHNjcmF0Y2hT
aXplKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUxlbmd0aEdQUikpOwogCiAgICAg
ICAgIHN0b3JhZ2VEb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBlbGVt
ZW50SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCBlbGVtZW50Q291bnQ7ICsrZWxlbWVudEluZGV4
KSB7CkBAIC0xMDA0OCw5ICsxMDAxMCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
cnJheVB1c2goTm8KICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICBz
bG93UGF0aENhbGwobV9qaXQuanVtcCgpLCB0aGlzLCBvcGVyYXRpb25BcnJheVB1c2hNdWx0aXBs
ZSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIGJ1ZmZl
ckdQUiwgVHJ1c3RlZEltbTMyKGVsZW1lbnRDb3VudCkpKTsKIAotICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkpLCBi
dWZmZXJHUFIpOwotICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIp
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhidWZmZXJHUFIpKTsKLQogICAgICAgICBiYXNlLnVz
ZSgpOwogICAgICAgICBzdG9yYWdlLnVzZSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1RodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuY3BwCShyZXZpc2lvbiAyNzg4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSwxMSBA
QAogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNp
bmNsdWRlICJERkdPU1JFeGl0LmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmgiCiAjaW5jbHVkZSAiRlBSSW5mby5oIgogI2luY2x1ZGUgIkdQUkluZm8uaCIKICNpbmNsdWRl
ICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKLSNpbmNsdWRlICJE
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCkBAIC02MiwxOSArNjIsMTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBvcwogICAgICAgICBqaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9SZWdpc3Rlcihp
KSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDApKTsKICAgICB9CiAgICAg
Ci0gICAgLy8gVGVsbCBHQyBtYXJrIHBoYXNlIGhvdyBtdWNoIG9mIHRoZSBzY3JhdGNoIGJ1ZmZl
ciBpcyBhY3RpdmUgZHVyaW5nIGNhbGwuCi0gICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkpLCBHUFJJ
bmZvOjpyZWdUMCk7Ci0gICAgaml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKHNjcmF0Y2hTaXplKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAp
KTsKLQogICAgIC8vIFNldCB1cCBvbmUgYXJndW1lbnQuCiAgICAgaml0Lm1vdmUoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgaml0LnByZXBh
cmVDYWxsT3BlcmF0aW9uKHZtKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1bmN0aW9u
Q2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAKLSAgICBqaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZBY3RpdmVMZW5n
dGgoKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICBqaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QwKSk7Ci0KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7ICsraSkgewogICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihidWZmZXIgKyBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGkpLCBHUFJJ
bmZvOjpyZWdUMCk7CiAgICAgICAgIGppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QwKSwgRlBSSW5mbzo6dG9SZWdpc3RlcihpKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAy
Nzg4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYxNjIsNyArNjE2Miw2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgPT0gc2l6ZW9mKGRvdWJsZSks
ICIiKTsKICAgICAgICAgICAgIEFTU0VSVChzY3JhdGNoU2l6ZSk7CiAgICAgICAgICAgICBTY3Jh
dGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0oKS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3Jh
dGNoU2l6ZSk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cihz
Y3JhdGNoU2l6ZSksIG1fb3V0LmFic29sdXRlKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2
ZUxlbmd0aCgpKSk7CiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnVmZmVyUmVzdWx0
ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50UHRyKHN0YXRpY19jYXN0PEVuY29kZWRKU1Zh
bHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSkpOwogICAgICAgICAgICAgbV9vdXQu
anVtcChzZXR1cCk7CiAKQEAgLTYxOTIsNyArNjE5MSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkRvdWJsZSkKICAgICAg
ICAgICAgICAgICBvcGVyYXRpb24gPSAmb3BlcmF0aW9uQXJyYXlQdXNoRG91YmxlTXVsdGlwbGU7
CiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZt
Q2FsbChJbnQ2NCwgb3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBi
dWZmZXIsIG1fb3V0LmNvbnN0SW50MzIoZWxlbWVudENvdW50KSkpOwotICAgICAgICAgICAgbV9v
dXQuc3RvcmVQdHIobV9vdXQuY29uc3RJbnRQdHIoMCksIG1fb3V0LmFic29sdXRlKHNjcmF0Y2hC
dWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSk7CiAgICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOwpAQCAtNjI2OCw3ICs2MjY2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHNpemVfdCBzY3JhdGNoU2l6ZSA9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBlbGVtZW50Q291
bnQ7CiAgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaFNpemUpOwogICAgICAgICAgICAgU2NyYXRj
aEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtKCkuc2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRj
aFNpemUpOwotICAgICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuY29uc3RJbnRQdHIoc2Ny
YXRjaFNpemUpLCBtX291dC5hYnNvbHV0ZShzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZBY3RpdmVM
ZW5ndGgoKSkpOwogICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0J1ZmZlclJlc3VsdCA9
IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludFB0cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1
ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1
bXAoc2V0dXApOwogCkBAIC02Mjg2LDcgKzYyODMsNiBAQCBwcml2YXRlOgogCiAgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhzbG93Q2FsbFBhdGgsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChJbnQ2NCwg
b3BlcmF0aW9uQXJyYXlQdXNoTXVsdGlwbGUsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJh
c2UsIGJ1ZmZlciwgbV9vdXQuY29uc3RJbnQzMihlbGVtZW50Q291bnQpKSk7Ci0gICAgICAgICAg
ICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cigwKSwgbV9vdXQuYWJzb2x1dGUoc2Ny
YXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CkBAIC03Mjc4LDE3ICs3Mjc0LDEyIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlVG9TdG9yZSwgbV9vdXQu
YWJzb2x1dGUoYnVmZmVyICsgb3BlcmFuZEluZGV4KSk7CiAgICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIG1fb3V0LnN0b3JlUHRyKAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2Ny
YXRjaFNpemUpLCBtX291dC5hYnNvbHV0ZShzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZBY3RpdmVM
ZW5ndGgoKSkpOwotICAgICAgICAKKwogICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKAog
ICAgICAgICAgICAgSW50NjQsIG9wZXJhdGlvbk5ld0FycmF5LCB3ZWFrUG9pbnRlcihnbG9iYWxP
YmplY3QpLAogICAgICAgICAgICAgd2Vha1N0cnVjdHVyZShzdHJ1Y3R1cmUpLCBtX291dC5jb25z
dEludFB0cihidWZmZXIpLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIobV9ub2RlLT5u
dW1DaGlsZHJlbigpKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5p
bnRQdHJaZXJvLCBtX291dC5hYnNvbHV0ZShzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZBY3RpdmVM
ZW5ndGgoKSkpOwotICAgICAgICAKKwogICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAg
fQogCkBAIC03NTI0LDkgKzc1MTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuc3Rv
cmU2NCh2YWx1ZSwgbV9vdXQuYWJzb2x1dGUoJmJ1ZmZlcltpXSkpOwogICAgICAgICB9CiAKLSAg
ICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuY29uc3RJbnRQdHIoc2NyYXRjaFNpemUpLCBtX291
dC5hYnNvbHV0ZShzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZBY3RpdmVMZW5ndGgoKSkpOwogICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKEludDY0LCBvcGVyYXRpb25OZXdBcnJheVdpdGhT
cHJlYWRTbG93LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBtX291dC5jb25zdEludFB0cihi
dWZmZXIpLCBtX291dC5jb25zdEludDMyKG1fbm9kZS0+bnVtQ2hpbGRyZW4oKSkpOwotICAgICAg
ICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cigwKSwgbV9vdXQuYWJzb2x1dGUoc2Ny
YXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkpKTsKIAogICAgICAgICBzZXRKU1Zh
bHVlKHJlc3VsdCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjc4ODU2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MjMsNiArNTIzLDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbXBp
bAogICAgICAgICBkYXRhTG9nKCJDb21waWxpbmcgT1NSIGV4aXQgd2l0aCBleGl0SUQgPSAiLCBl
eGl0SUQsICJcbiIpOwogCiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT5kZXByZWNhdGVkVk0oKTsK
KyAgICAvLyBEb24ndCBuZWVkIGFuIEFjdGl2ZVNjcmF0Y2hCdWZmZXJTY29wZSBoZXJlIGJlY2F1
c2Ugd2UgRGVmZXJHQ0ZvckFXaGlsZSBiZWxvdy4KIAogICAgIGlmIGNvbnN0ZXhwciAodmFsaWRh
dGVERkdEb2VzR0MpIHsKICAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZXhpdCBvcHRpbWl6ZWQg
Y29kZS4gU28sIHRoZXJlJ3Mgbm8gbG9uZ2VyIGFueSBvcHRpbWl6ZWQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjc4ODU2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTczMCw2ICs3MzAsNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uVHlwZU9mCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ29tcGlsZUZUTExh
enlTbG93UGF0aCwgdm9pZCosIChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdW5zaWduZWQgaW5kZXgp
KQogewogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+ZGVwcmVjYXRlZFZNKCk7CisgICAgLy8gRG9u
J3QgbmVlZCBhbiBBY3RpdmVTY3JhdGNoQnVmZmVyU2NvcGUgaGVyZSBiZWNhdXNlIHdlIERlZmVy
R0NGb3JBV2hpbGUuCiAKICAgICAvLyBXZSBjYW5ub3QgR0MuIFdlJ3ZlIGdvdCBwb2ludGVycyBp
biBldmlsIHBsYWNlcy4KICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCShyZXZpc2lvbiAyNzg4
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc2LDEwICs3Niw2IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHIKICAgICBjaGFyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1
ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKICAgICAKICAgICBzYXZlQWxsUmVnaXN0ZXJzKGppdCwgYnVm
ZmVyKTsKLSAgICAKLSAgICAvLyBUZWxsIEdDIG1hcmsgcGhhc2UgaG93IG11Y2ggb2YgdGhlIHNj
cmF0Y2ggYnVmZmVyIGlzIGFjdGl2ZSBkdXJpbmcgY2FsbC4KLSAgICBqaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZBY3RpdmVMZW5n
dGgoKSksIEdQUkluZm86Om5vbkFyZ0dQUjEpOwotICAgIGppdC5zdG9yZVB0cihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihyZXF1aXJlZFNjcmF0Y2hNZW1vcnlTaXplSW5CeXRlcygpKSwg
R1BSSW5mbzo6bm9uQXJnR1BSMSk7CiAKICAgICBqaXQubG9hZFB0cihHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBqaXQucGVlaygKQEAgLTk0
LDExICs5MCw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHIKICAg
ICAvLyByZXR1cm4gYWRkcmVzcyAic2xvdCIgKGJlIGl0IGEgcmVnaXN0ZXIgb3IgdGhlIHN0YWNr
KS4KICAgICAKICAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6
cmVnVDApOwotICAgIAotICAgIC8vIE1ha2Ugc3VyZSB3ZSB0ZWxsIHRoZSBHQyB0aGF0IHdlJ3Jl
IG5vdCB1c2luZyB0aGUgc2NyYXRjaCBidWZmZXIgYW55bW9yZS4KLSAgICBqaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZBY3RpdmVM
ZW5ndGgoKSksIEdQUkluZm86OnJlZ1QxKTsKLSAgICBqaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEdQUkluZm86OnJlZ1QxKTsKLSAgICAKKwogICAg
IC8vIFByZXBhcmUgZm9yIHRhaWwgY2FsbC4KICAgICB3aGlsZSAobnVtYmVyT2ZSZXF1aXJlZFBv
cHMtLSkKICAgICAgICAgaml0LnBvcFRvUmVzdG9yZShHUFJJbmZvOjpyZWdUMSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lv
biAyNzg4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk2NiwxMCArOTY2LDYgQEAgdm9pZCBBc3NlbWJseUhlbHBl
cnM6OmRlYnVnQ2FsbChWTSYgdm0sIAogICAgICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgfQogCi0gICAgLy8gVGVsbCBHQyBtYXJr
IHBoYXNlIGhvdyBtdWNoIG9mIHRoZSBzY3JhdGNoIGJ1ZmZlciBpcyBhY3RpdmUgZHVyaW5nIGNh
bGwuCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2
ZUxlbmd0aCgpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIo
c2NyYXRjaFNpemUpLCBHUFJJbmZvOjpyZWdUMCk7Ci0KICNpZiBDUFUoWDg2XzY0KSB8fCBDUFUo
QVJNX1RIVU1CMikgfHwgQ1BVKEFSTTY0KSB8fCBDUFUoTUlQUykKICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoYnVmZmVyKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoYXJndW1lbnQpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwpAQCAtOTgyLDkgKzk3OCw2
IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpkZWJ1Z0NhbGwoVk0mIHZtLCAKICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oZnVuY3Rpb24pKSwg
c2NyYXRjaCk7CiAgICAgY2FsbChzY3JhdGNoLCBPcGVyYXRpb25QdHJUYWcpOwogCi0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwg
R1BSSW5mbzo6cmVnVDApOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEdQ
UkluZm86OnJlZ1QwKTsKLQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihidWZm
ZXIgKyBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGkpLCBHUFJJbmZvOjpyZWdUMCk7CiAg
ICAgICAgIGxvYWREb3VibGUoR1BSSW5mbzo6cmVnVDAsIEZQUkluZm86OnRvUmVnaXN0ZXIoaSkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjc4ODU2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjEsNzMgKzE2MSw2IEBAIHVuc2lnbmVkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6ZGVz
aXIKICAgICByZXR1cm4gdXNlZFJlZ2lzdGVyc0ZvckNhbGwoKS5udW1iZXJPZlNldFJlZ2lzdGVy
cygpICogc2l6ZW9mKEpTVmFsdWUpOwogfQogCi12b2lkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6cHJlc2VydmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNoQnVmZmVyRm9yQ2FsbChNYWNyb0Fzc2Vt
YmxlciYgaml0LCBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyLCBHUFJSZWcgc2NyYXRjaEdQ
UikKLXsKLSAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyc0ZvckNh
bGwoKTsKLSAgICBpZiAoIXVzZWRSZWdpc3RlcnMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICBmb3IgKEdQ
UlJlZyByZWcgPSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpOyByZWcgPD0gTWFjcm9B
c3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpOyByZWcgPSBNYWNyb0Fzc2VtYmxlcjo6bmV4dFJlZ2lz
dGVyKHJlZykpIHsKLSAgICAgICAgaWYgKHVzZWRSZWdpc3RlcnMuZ2V0KHJlZykpIHsKLSAgICAg
ICAgICAgIGppdC5zdG9yZVB0cihyZWcsIHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2Ny
YXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIGNvdW50KTsKLSAgICAgICAgICAgIGNvdW50Kys7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKEdQUkluZm86OnRvSW5kZXgocmVnKSAhPSBHUFJJbmZv
OjpJbnZhbGlkSW5kZXgKLSAgICAgICAgICAgICYmIHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJl
ZwotICAgICAgICAgICAgJiYgIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChyZWcpICYmICFtX3NjcmF0
Y2hSZWdpc3RlcnMuZ2V0KHJlZykpCi0gICAgICAgICAgICBzY3JhdGNoR1BSID0gcmVnOwotICAg
IH0KLSAgICBSRUxFQVNFX0FTU0VSVChzY3JhdGNoR1BSICE9IEludmFsaWRHUFJSZWcpOwotICAg
IGZvciAoRlBSUmVnIHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKTsgcmVn
IDw9IE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpOyByZWcgPSBNYWNyb0Fzc2VtYmxl
cjo6bmV4dEZQUmVnaXN0ZXIocmVnKSkgewotICAgICAgICBpZiAodXNlZFJlZ2lzdGVycy5nZXQo
cmVnKSkgewotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVy
KCkpICsgY291bnQpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAg
ICAgICBqaXQuc3RvcmVEb3VibGUocmVnLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBSRUxFQVNFX0FTU0VSVChjb3VudCAqIHNpemVvZihKU1ZhbHVlKSA9PSBkZXNpcmVkU2Ny
YXRjaEJ1ZmZlclNpemVGb3JDYWxsKCkpOwotICAgIAotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgp
KSwgc2NyYXRjaEdQUik7Ci0gICAgaml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKHN0YXRpY19jYXN0PHNpemVfdD4oY291bnQgKiBzaXplb2YoSlNWYWx1ZSkpKSwgc2Ny
YXRjaEdQUik7Ci19Ci0KLXZvaWQgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlVXNl
ZFJlZ2lzdGVyc0Zyb21TY3JhdGNoQnVmZmVyRm9yQ2FsbChNYWNyb0Fzc2VtYmxlciYgaml0LCBT
Y3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyLCBHUFJSZWcgc2NyYXRjaEdQUikKLXsKLSAgICBS
ZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyc0ZvckNhbGwoKTsKLSAgICBp
ZiAoIXVzZWRSZWdpc3RlcnMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAg
Ly8gRmluZCBhIHNjcmF0Y2ggcmVnaXN0ZXIuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV9sb2Nr
ZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSB8fCBtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0R1BS
QnlJbmRleChpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHNjcmF0
Y2hHUFIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlQoc2NyYXRjaEdQUiAhPSBJbnZhbGlkR1BS
UmVnKTsKLSAgICAKLSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihz
Y3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZBY3RpdmVMZW5ndGgoKSksIHNjcmF0Y2hHUFIpOwotICAg
IGppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgc2Ny
YXRjaEdQUik7Ci0KLSAgICAvLyBSZXN0b3JlIGRvdWJsZSByZWdpc3RlcnMgZmlyc3QuCi0gICAg
dW5zaWduZWQgY291bnQgPSB1c2VkUmVnaXN0ZXJzLm51bWJlck9mU2V0R1BScygpOwotICAgIGZv
ciAoRlBSUmVnIHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKTsgcmVnIDw9
IE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpOyByZWcgPSBNYWNyb0Fzc2VtYmxlcjo6
bmV4dEZQUmVnaXN0ZXIocmVnKSkgewotICAgICAgICBpZiAodXNlZFJlZ2lzdGVycy5nZXQocmVn
KSkgewotICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
c3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkp
ICsgKGNvdW50KyspKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBqaXQubG9hZERvdWJsZShz
Y3JhdGNoR1BSLCByZWcpOwotICAgICAgICB9Ci0gICAgfQotICAgICAgICAKLSAgICBjb3VudCA9
IDA7Ci0gICAgZm9yIChHUFJSZWcgcmVnID0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIo
KTsgcmVnIDw9IE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKTsgcmVnID0gTWFjcm9Bc3Nl
bWJsZXI6Om5leHRSZWdpc3RlcihyZWcpKSB7Ci0gICAgICAgIGlmICh1c2VkUmVnaXN0ZXJzLmdl
dChyZWcpKQotICAgICAgICAgICAgaml0LmxvYWRQdHIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFs
dWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspLCByZWcpOwotICAg
IH0KLX0KLQogdW5zaWduZWQgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lz
dGVyc1RvU3RhY2tGb3JDYWxsKE1hY3JvQXNzZW1ibGVyJiBqaXQsIGNvbnN0IFJlZ2lzdGVyU2V0
JiB1c2VkUmVnaXN0ZXJzLCB1bnNpZ25lZCBleHRyYUJ5dGVzQXRUb3BPZlN0YWNrKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKGV4dHJhQnl0ZXNBdFRvcE9mU3RhY2sgJSBzaXplb2Yodm9pZCopID09
IDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5oCShyZXZpc2lvbiAyNzg4NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05
MSw5ICs5MSw2IEBAIHB1YmxpYzoKICAgICAKICAgICB1bnNpZ25lZCBkZXNpcmVkU2NyYXRjaEJ1
ZmZlclNpemVGb3JDYWxsKCkgY29uc3Q7CiAgICAgCi0gICAgdm9pZCBwcmVzZXJ2ZVVzZWRSZWdp
c3RlcnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxsKE1hY3JvQXNzZW1ibGVyJiBqaXQsIFNjcmF0Y2hC
dWZmZXIqIHNjcmF0Y2hCdWZmZXIsIEdQUlJlZyBzY3JhdGNoR1BSID0gSW52YWxpZEdQUlJlZyk7
Ci0gICAgdm9pZCByZXN0b3JlVXNlZFJlZ2lzdGVyc0Zyb21TY3JhdGNoQnVmZmVyRm9yQ2FsbChN
YWNyb0Fzc2VtYmxlciYgaml0LCBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyLCBHUFJSZWcg
c2NyYXRjaEdQUiA9IEludmFsaWRHUFJSZWcpOwotCiAgICAgc3RhdGljIHVuc2lnbmVkIHByZXNl
cnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoTWFjcm9Bc3NlbWJsZXImIGppdCwgY29uc3QgUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIHVuc2lnbmVkIGV4dHJhUGFkZGluZ0luQnl0ZXMpOwog
ICAgIHN0YXRpYyB2b2lkIHJlc3RvcmVSZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKE1hY3JvQXNz
ZW1ibGVyJiBqaXQsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBjb25zdCBSZWdp
c3RlclNldCYgaWdub3JlLCB1bnNpZ25lZCBudW1iZXJPZlN0YWNrQnl0ZXNVc2VkRm9yUmVnaXN0
ZXJQcmVzZXJ2YXRpb24sIHVuc2lnbmVkIGV4dHJhUGFkZGluZ0luQnl0ZXMpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDI3ODg1NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4MCw2ICsyODAs
MTUgQEAgc3RydWN0IFNjcmF0Y2hCdWZmZXIgewogI3ByYWdtYSB3YXJuaW5nKHBvcCkKICNlbmRp
ZgogCitjbGFzcyBBY3RpdmVTY3JhdGNoQnVmZmVyU2NvcGUgeworcHVibGljOgorICAgIEFjdGl2
ZVNjcmF0Y2hCdWZmZXJTY29wZShWTSYsIHNpemVfdCBhY3RpdmVTY3JhdGNoQnVmZmVyU2l6ZUlu
SlNWYWx1ZXMpOworICAgIH5BY3RpdmVTY3JhdGNoQnVmZmVyU2NvcGUoKTsKKworcHJpdmF0ZToK
KyAgICBTY3JhdGNoQnVmZmVyKiBtX3NjcmF0Y2hCdWZmZXI7Cit9OworCiBjbGFzcyBWTSA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxWTT4sIHB1YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9k
ZTxWTT4gewogcHVibGljOgogICAgIC8vIFdlYkNvcmUgaGFzIGEgb25lLXRvLW9uZSBtYXBwaW5n
IG9mIHRocmVhZHMgdG8gVk1zOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk1JbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk1JbmxpbmVzLmgJKHJldmlzaW9uIDI3ODg1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsMjIgQEAKICNp
bmNsdWRlICJXYXRjaGRvZy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKLSAgICAKKworaW5saW5lIEFj
dGl2ZVNjcmF0Y2hCdWZmZXJTY29wZTo6QWN0aXZlU2NyYXRjaEJ1ZmZlclNjb3BlKFZNJiB2bSwg
c2l6ZV90IGFjdGl2ZVNjcmF0Y2hCdWZmZXJTaXplSW5KU1ZhbHVlcykKKyAgICA6IG1fc2NyYXRj
aEJ1ZmZlcih2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShhY3RpdmVTY3JhdGNoQnVmZmVyU2l6ZUlu
SlNWYWx1ZXMgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSkKK3sKKyAgICAvLyBUZWxsIEdDIG1h
cmsgcGhhc2UgaG93IG11Y2ggb2YgdGhlIHNjcmF0Y2ggYnVmZmVyIGlzIGFjdGl2ZSBkdXJpbmcg
dGhlIGNhbGwgb3BlcmF0aW9uIHRoaXMgc2NvcGUgaXMgdXNlZCBpbi4KKyAgICBpZiAobV9zY3Jh
dGNoQnVmZmVyKQorICAgICAgICBtX3NjcmF0Y2hCdWZmZXItPnUubV9hY3RpdmVMZW5ndGggPSBh
Y3RpdmVTY3JhdGNoQnVmZmVyU2l6ZUluSlNWYWx1ZXMgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
OworfQorCitpbmxpbmUgQWN0aXZlU2NyYXRjaEJ1ZmZlclNjb3BlOjp+QWN0aXZlU2NyYXRjaEJ1
ZmZlclNjb3BlKCkKK3sKKyAgICAvLyBUZWxsIHRoZSBHQyB0aGF0IHdlJ3JlIG5vdCB1c2luZyB0
aGUgc2NyYXRjaCBidWZmZXIgYW55bW9yZS4KKyAgICBpZiAobV9zY3JhdGNoQnVmZmVyKQorICAg
ICAgICBtX3NjcmF0Y2hCdWZmZXItPnUubV9hY3RpdmVMZW5ndGggPSAwOworfQorCiBib29sIFZN
OjplbnN1cmVTdGFja0NhcGFjaXR5Rm9yKFJlZ2lzdGVyKiBuZXdUb3BPZlN0YWNrKQogewogI2lm
ICFFTkFCTEUoQ19MT09QKQo=
</data>
<flag name="review"
          id="453173"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>