<?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>170185</bug_id>
          
          <creation_ts>2017-03-28 10:50:37 -0700</creation_ts>
          <short_desc>WebAssembly: When Wasm calls to C, it should use Wasm::Context* instead of ExecState* to get VM</short_desc>
          <delta_ts>2017-03-30 18:15:30 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>170135</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1291944</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-28 10:50:37 -0700</bug_when>
    <thetext>....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292641</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-29 17:21:16 -0700</bug_when>
    <thetext>Starting on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293021</commentid>
    <comment_count>2</comment_count>
      <attachid>305924</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-30 16:34:49 -0700</bug_when>
    <thetext>Created attachment 305924
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293026</commentid>
    <comment_count>3</comment_count>
      <attachid>305926</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-30 16:59:35 -0700</bug_when>
    <thetext>Created attachment 305926
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293030</commentid>
    <comment_count>4</comment_count>
      <attachid>305926</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-03-30 17:00:26 -0700</bug_when>
    <thetext>Comment on attachment 305926
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293031</commentid>
    <comment_count>5</comment_count>
      <attachid>305927</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-30 17:04:26 -0700</bug_when>
    <thetext>Created attachment 305927
patch for landing

Fixed CMakeLists</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293056</commentid>
    <comment_count>6</comment_count>
      <attachid>305927</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-30 18:15:29 -0700</bug_when>
    <thetext>Comment on attachment 305927
patch for landing

Clearing flags on attachment: 305927

Committed r214645: &lt;http://trac.webkit.org/changeset/214645&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1293057</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-30 18:15:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305924</attachid>
            <date>2017-03-30 16:34:49 -0700</date>
            <delta_ts>2017-03-30 16:59:35 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>42204</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0NjM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBA
CisyMDE3LTAzLTMwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFdlYkFzc2VtYmx5OiBXaGVuIFdhc20gY2FsbHMgdG8gQywgaXQgc2hvdWxkIHVzZSBXYXNtOjpD
b250ZXh0KiBpbnN0ZWFkIG9mIEV4ZWNTdGF0ZSogdG8gZ2V0IFZNCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAxODUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIG9uZSBtb3JlIHN0ZXAgaW4g
dGhlIGRpcmVjdGlvbiBvZiBQSUMtaWZpZWQgV2FzbS4KKyAgICAgICAgV2hlbiB3ZSBsaWZ0IFdh
c21DYWxsZWUgYWJvdmUgVk0sIHdlIHdpbGwgbm8gbG9uZ2VyIGJlCisgICAgICAgIGFibGUgdG8g
Z2V0IFZNIGZyb20gRXhlY1N0YXRlKi4gVGhpcyBwYXRjaCBlbnN1cmVzIHRoYXQKKyAgICAgICAg
d2UgZG9uJ3QgZG8gdGhhdCBmcm9tIHdpdGhpbiB0aGUgV2FzbSBydW50aW1lLiBJbnN0ZWFkLAor
ICAgICAgICB3ZSB1c2UgdGhlIFdhc206OkNvbnRleHQqIHRvIGdldCB0aGUgVk0uCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBhbHNvIGFkZHMgYSBuZXcgY2xhc3MsIFdhc206OlRodW5rcy4gVGhlcmUK
KyAgICAgICAgaXMgYSBzaW5nbGUgV2FzbTo6VGh1bmtzIHRoYXQgbGl2ZXMgaW4gdGhlIHByb2Nl
c3MuIEl0CisgICAgICAgIGlzIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIGEgdGh1bmsgdGhh
dCBXYXNtIHJlbGllcyBvbi4KKyAgICAgICAgVGhlIG9ubHkgc3VjaCB0aHVuayByaWdodCBub3cg
aXMgdGhlIGV4Y2VwdGlvbiB0aHJvd2luZworICAgICAgICB0aHVuay4KKworICAgICAgICBUaGlz
IHBhdGNoIGFsc28gcmlkcyBXYXNtRmF1bHRTaWduYWxIYW5kbGVyIGZyb20gYW55IGtub3dsZWRn
ZQorICAgICAgICBvZiBWTS4gUHJldmlvdXNseSwgaXQgcmVsaWVkIG9uIFZNIHRvIGdldCB0aGUg
ZXhjZXB0aW9uIGhhbmRsaW5nCisgICAgICAgIHRodW5rLgorCisgICAgICAgIFRoZSBvbmx5IHBh
cnQgb2YgdGhlIFdhc20gcnVudGltZSB0aGF0IHdpbGwgYmUgYWxsb3dlZAorICAgICAgICB0byBn
ZXQgVk0mIGZyb20gRXhlY1N0YXRlIHdpbGwgYmUgV2FzbUJpbmRpbmcuIEluIHRoZQorICAgICAg
ICBmdXR1cmUsIHdlIHBsYW4gdG8ga2VlcCB0aGUgY2FsbHMgb3V0IHRvIEpTIHRvIGtlZXAKKyAg
ICAgICAgYSBKU0NlbGwgYXMgdGhlIGNhbGxlZS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGZ0bC9G
VExPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToK
KyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OlVu
d2luZEZ1bmN0b3I6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y29weUNhbGxlZVNh
dmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKiBqaXQv
VGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tV2Fz
bVRodW5rR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3Jz
Lmg6CisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAg
KEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6Cisg
ICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgIChKU0M6OlZNOjpnZXRBbGxDYWxsZWVTYXZl
UmVnaXN0ZXJPZmZzZXRzKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6
OlZNOjp0b3BWTUVudHJ5RnJhbWVPZmZzZXQpOgorICAgICAgICAoSlNDOjpWTTo6Z2V0QWxsQ2Fs
bGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cyk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRF
eGNlcHRpb25DaGVjayk6CisgICAgICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6dHJhcEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2Fz
bU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRyeUdldEZhc3RNZW1vcnkpOgorICAg
ICAgICAqIHdhc20vV2FzbVRodW5rcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjp0
aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNt
OjpUaHVua3M6OmluaXRpYWxpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUaHVua3M6OnNpbmds
ZXRvbik6CisgICAgICAgIChKU0M6Oldhc206OlRodW5rczo6c3R1Yik6CisgICAgICAgIChKU0M6
Oldhc206OlRodW5rczo6ZXhpc3RpbmdTdHViKToKKyAgICAgICAgKiB3YXNtL1dhc21UaHVua3Mu
aDogQWRkZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlZNKToKKyAgICAgICAgKiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
TWVtb3J5Ojpncm93KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaDoK
KyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcDoKKyAgICAg
ICAgKEpTQzo6d2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNHcm93KToKKwogMjAxNy0wMy0zMCAg
TWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgSW50bE9iamVjdCBzaG91
bGQgbm90IGJlIHVzaW5nIEpTQXJyYXk6OmluaXRpYWxpemVJbmRleCgpLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxNDYxMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzA1LDYgKzEzMDUsOCBAQAogCQk0NDQzQUUzMzE2RTE4OEQ5MDA3NkYxMTAg
LyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5m
cmFtZXdvcmsgKi87IH07CiAJCTQ1MTUzOUI5MTJEQzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NTE1MzlCODEyREM5
OTQ1MDBFRjdBQzQgLyogWWFyci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTQ3M0RBNEE0NzY0QzQ1RkU4NzFCMDQ4NSAvKiBEZWZpbmVQcm9wZXJ0
eUF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE2OTk0OEVERTY4RDQwNTRCMDFFRjc5NyAvKiBEZWZpbmVQcm9wZXJ0eUF0dHJpYnV0ZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MjUw
RDJEMTFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjUwRDJDRjFFOERBMDVBMDAyOUE5MzIgLyog
V2FzbVRodW5rcy5jcHAgKi87IH07CisJCTUyNTBEMkQyMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNt
VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MjUwRDJEMDFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNjc4RjhFMUEwMzEwMDkwMDZBMzA2
RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tM
b2NhdGlvbi5jcHAgKi87IH07CiAJCTUyNjc4RjhGMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Js
b2NrTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUyNjc4RjhEMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MjY3OEY5MTFB
MDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI2NzhGOTAxQTA0MTc3QzAwNkEzMDZEIC8q
IENvbnRyb2xGbG93UHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMzgwMSw2ICszODAzLDggQEAKIAkJNENFOTc4RTM4NUE4NDk4MTk5
MDUyMTUzIC8qIE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5m
cmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEZvdW5kYXRpb24uZnJhbWV3b3JrOyBwYXRoID0g
L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvRm91bmRhdGlvbi5mcmFtZXdvcms7IHNvdXJjZVRy
ZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTUxRjBFQzA3MDVDODZDOUEwMEU2REYxQiAvKiBsaWJv
YmpjLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJvYmpjLmR5bGliOyBwYXRoID0g
L3Vzci9saWIvbGlib2JqYy5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKKwkJ
NTI1MEQyQ0YxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUyNTBEMkQwMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21UaHVua3MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tM
b2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCYXNpY0Js
b2NrTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjY3OEY4RDFB
MDMxMDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEJhc2ljQmxvY2tMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MjY3OEY5MDFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250cm9sRmxvd1Byb2ZpbGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MzA2LDYgKzYzMTAsOCBAQAogCQkJ
CTUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAqLywKIAkJCQlBRDc0
MzhCRTFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5jcHAgKi8sCiAJCQkJQUQ3NDM4
QkYxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCAqLywKKwkJCQk1MjUwRDJDRjFF
OERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8sCisJCQkJNTI1MEQyRDAxRThEQTA1
QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCAqLywKIAkJCQk1M0ZGN0Y5QTFEQkZEMkI5MDBBMjZD
Q0MgLyogV2FzbVZhbGlkYXRlLmNwcCAqLywKIAkJCQk1M0ZGN0Y5ODFEQkZDRDkwMDBBMjZDQ0Mg
LyogV2FzbVZhbGlkYXRlLmggKi8sCiAJCQkJNTMwRkIzMDMxRTdBMTE0NjAwM0MxOUREIC8qIFdh
c21Xb3JrbGlzdC5jcHAgKi8sCkBAIC04NzAzLDYgKzg3MDksNyBAQAogCQkJCTcwQjc5MTk3MUMw
MjRBMjkwMDI0ODFFMiAvKiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNzBCNzkxOTkxQzAyNEEyOTAwMjQ4MUUyIC8qIEdlbmVyYXRvclByb3RvdHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzBCNzkxOUQxQzAyNEE1NjAwMjQ4MUUyIC8qIEdlbmVyYXRv
clByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyNTBEMkQyMUU4REEwNUEwMDI5
QTkzMiAvKiBXYXNtVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxOTFBQTkwOTEx
MDBEMzNCMzMgLyogR2VuZXJpY0FyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUw
MUExQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkUwNTAxQjFBQTkwOTExMDBEMzNCMzMgLyogR2VuZXJpY09mZnNldC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xMDI3Myw2ICsxMDI4MCw3IEBACiAJCQkJMEZEREJGQjUxNjY2RUVE
ODAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEYyQkRDNTExNTIyOEZGRDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDNEExNTIyODA5QTAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxl
RXZlbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTI1MEQyRDExRThEQTA1QTAwMjlB
OTMyIC8qIFdhc21UaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NUYxNEVGOTBC
QjAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkM5N0Y0MTE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENv
bGxlY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkRCMkNFNzE3NDgzMEEyMDA3
QjNDMUIgLyogREZHV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMjE0NjEyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxMiw3ICszMTIsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBD
CiAgICAgLy8gNikgQ29weSBvdXIgY2FsbGVlIHNhdmVzIHRvIGJ1ZmZlci4KICNpZiBOVU1CRVJf
T0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCog
cmVnaXN0ZXJTYXZlTG9jYXRpb25zID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7
Ci0gICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gdm0tPmdldEFsbENh
bGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxs
Q2FsbGVlU2F2ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwogICAg
IFJlZ2lzdGVyU2V0IGRvbnRTYXZlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6
OnN0YWNrUmVnaXN0ZXJzKCksIFJlZ2lzdGVyU2V0OjphbGxGUFJzKCkpOwogCiAgICAgdW5zaWdu
ZWQgcmVnaXN0ZXJDb3VudCA9IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+c2l6ZSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAko
cmV2aXNpb24gMjE0NjEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDksNyArNDA5LDcgQEAgc3RhdGljIHZv
aWQgY29tcGlsZVN0dWIoCiAKICAgICBSZWdpc3RlclNldCBhbGxGVExDYWxsZWVTYXZlcyA9IFJl
Z2lzdGVyU2V0OjpmdGxDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAgICAgUmVnaXN0ZXJBdE9mZnNl
dExpc3QqIGJhc2VsaW5lQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiB2bUNhbGxlZVNhdmVzID0g
dm0tPmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKKyAgICBSZWdpc3RlckF0T2Zm
c2V0TGlzdCogdm1DYWxsZWVTYXZlcyA9IFZNOjpnZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZz
ZXRzKCk7CiAgICAgUmVnaXN0ZXJTZXQgdm1DYWxsZWVTYXZlc1RvU2tpcCA9IFJlZ2lzdGVyU2V0
OjpzdGFja1JlZ2lzdGVycygpOwogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7
CiAgICAgICAgIGppdC5sb2FkUHRyKCZ2bS0+dG9wVk1FbnRyeUZyYW1lLCBHUFJJbmZvOjpyZWdU
MSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAJKHJldmlzaW9uIDIxNDYxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzNSw3ICs2MzUs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIFZNJiB2bSA9IG1f
Y2FsbEZyYW1lLT52bSgpOwotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVl
U2F2ZXMgPSB2bS5nZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7CisgICAgICAgIFJl
Z2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFZNOjpnZXRBbGxDYWxsZWVTYXZl
UmVnaXN0ZXJPZmZzZXRzKCk7CiAgICAgICAgIFJlZ2lzdGVyU2V0IGRvbnRDb3B5UmVnaXN0ZXJz
ID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7CiAgICAgICAgIGludHB0cl90KiBmcmFt
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3QqPihtX2NhbGxGcmFtZS0+cmVnaXN0ZXJzKCkp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
Y3BwCShyZXZpc2lvbiAyMTQ2MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4Miw3ICs1ODIsNyBAQCB2b2lkIEFz
c2VtYmx5SGVscGVyczo6ZW1pdFJhbmRvbVRodW5rKFZNCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6
cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZNJiB2
bSkKIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLSAgICBSZWdp
c3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSB2bS5nZXRBbGxDYWxsZWVTYXZlUmVn
aXN0ZXJPZmZzZXRzKCk7CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVz
ID0gVk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKICAgICBSZWdpc3RlclNl
dCBkb250UmVzdG9yZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwog
ICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+c2l6ZSgpOwogCkBA
IC04NzIsNiArODcyLDI3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpkZWJ1Z0NhbGwoVk0mIHZt
LCAKICAgICB9CiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb1ZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChHUFJSZWcgY2FsbGVlU2F2ZXNCdWZmZXIp
Cit7CisjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihWTUVudHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZz
ZXQoKSksIGNhbGxlZVNhdmVzQnVmZmVyKTsKKworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBh
bGxDYWxsZWVTYXZlcyA9IFZNOjpnZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7Cisg
ICAgUmVnaXN0ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdp
c3RlcnMoKTsKKyAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNp
emUoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsg
aSsrKSB7CisgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+
YXQoaSk7CisgICAgICAgIGlmIChkb250Q29weVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQor
ICAgICAgICAgICAgc3RvcmVQdHIoZW50cnkucmVnKCkuZ3ByKCksIEFkZHJlc3MoY2FsbGVlU2F2
ZXNCdWZmZXIsIGVudHJ5Lm9mZnNldCgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0
b3JlRG91YmxlKGVudHJ5LnJlZygpLmZwcigpLCBBZGRyZXNzKGNhbGxlZVNhdmVzQnVmZmVyLCBl
bnRyeS5vZmZzZXQoKSkpOworICAgIH0KKyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIxNDYxMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzMywyNyAr
MzMzLDIzIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAorICAgIC8vIElmIHlvdSB1c2UgdGhp
cywgYmUgYXdhcmUgdGhhdCB2bUdQUiB3aWxsIGdldCB0cmFzaGVkLgorICAgIHZvaWQgY29weUNh
bGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihHUFJSZWcgdm1HUFIpCisg
ICAgeworI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAorICAgICAgICBs
b2FkUHRyKEFkZHJlc3Modm1HUFIsIFZNOjp0b3BWTUVudHJ5RnJhbWVPZmZzZXQoKSksIHZtR1BS
KTsKKyAgICAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
ckltcGwodm1HUFIpOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKHZtR1BSKTsKKyNlbmRp
ZgorICAgIH0KKwogICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcihWTSYgdm0sIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9
IHsgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0pCiAgICAgewogI2lm
IE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgICAgICBHUFJSZWcgdGVt
cDEgPSB1c2VkUmVnaXN0ZXJzLmdldEZyZWVHUFIoMCk7Ci0KICAgICAgICAgbG9hZFB0cigmdm0u
dG9wVk1FbnRyeUZyYW1lLCB0ZW1wMSk7Ci0gICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoVk1F
bnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCB0ZW1wMSk7Ci0K
LSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gdm0uZ2V0QWxs
Q2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwotICAgICAgICBSZWdpc3RlclNldCBkb250Q29w
eVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwotICAgICAgICB1bnNp
Z25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKLSAgICAgICAgCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAg
ICAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+YXQoaSk7
Ci0gICAgICAgICAgICBpZiAoZG9udENvcHlSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQ
UigpKQotICAgICAgICAgICAgICAgIHN0b3JlUHRyKGVudHJ5LnJlZygpLmdwcigpLCBBZGRyZXNz
KHRlbXAxLCBlbnRyeS5vZmZzZXQoKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHN0b3JlRG91YmxlKGVudHJ5LnJlZygpLmZwcigpLCBBZGRyZXNzKHRlbXAxLCBlbnRyeS5v
ZmZzZXQoKSkpOwotICAgICAgICB9CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKHRlbXAxKTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9Q
QVJBTSh2bSk7CiAgICAgICAgIFVOVVNFRF9QQVJBTSh1c2VkUmVnaXN0ZXJzKTsKQEAgLTM3Niw3
ICszNzIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGxvYWRQdHIoJnZtLnRvcFZNRW50cnlGcmFtZSwg
dGVtcDEpOwogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKFZNRW50cnlGcmFtZTo6Y2FsbGVl
U2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgdGVtcDEpOwogCi0gICAgICAgIFJlZ2lzdGVy
QXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IHZtLmdldEFsbENhbGxlZVNhdmVSZWdpc3Rl
ck9mZnNldHMoKTsKKyAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVz
ID0gVk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKICAgICAgICAgUmVnaXN0
ZXJBdE9mZnNldExpc3QqIGN1cnJlbnRDYWxsZWVTYXZlcyA9IGNvZGVCbG9jaygpLT5jYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CiAgICAgICAgIFJlZ2lzdGVyU2V0IGRvbnRDb3B5UmVnaXN0ZXJzID0g
UmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7CiAgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVy
Q291bnQgPSBhbGxDYWxsZWVTYXZlcy0+c2l6ZSgpOwpAQCAtMTU5MSw2ICsxNTg3LDggQEAgcHVi
bGljOgogI2VuZGlmCiAKIHByb3RlY3RlZDoKKyAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcik7
CisKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIENvZGVCbG9jayogbV9iYXNlbGlu
ZUNvZGVCbG9jazsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtH
ZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjE0NjEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsOSBA
QAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgi
Ci0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgogI2luY2x1ZGUgIk1hdGhD
b21tb24uaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2lu
Y2x1ZGUgIlNwZWNpYWxpemVkVGh1bmtKSVQuaCIKLSNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlw
ZS5oIgogI2luY2x1ZGUgPHd0Zi9JbmxpbmVBU00uaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJp
bnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CkBAIC0xMTMzLDQ3
ICsxMTMwLDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGJvdW5kVGhpc05vQXJnc0Z1bgogICAg
ICAgICBsaW5rQnVmZmVyLCAoIlNwZWNpYWxpemVkIHRodW5rIGZvciBib3VuZCBmdW5jdGlvbiBj
YWxscyB3aXRoIG5vIGFyZ3VtZW50cyIpKTsKIH0KIAotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0
b3IoVk0qIHZtKQotewotICAgIENDYWxsSGVscGVycyBqaXQ7Ci0KLSAgICAvLyBUaGUgdGhpbmcg
dGhhdCBqdW1wcyBoZXJlIG11c3QgbW92ZSBFeGNlcHRpb25UeXBlIGludG8gdGhlIGFyZ3VtZW50
R1BSMSBhbmQganVtcCBoZXJlLgotICAgIC8vIFdlJ3JlIGFsbG93ZWQgdG8gdXNlIHRlbXAgcmVn
aXN0ZXJzIGhlcmUsIGJ1dCBub3QgY2FsbGVlIHNhdmVzLgotICAgIHsKLSAgICAgICAgUmVnaXN0
ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKTsKLSAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsK
LSAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoKnZtLCB1c2VkUmVnaXN0ZXJzKTsKLSAgICB9Ci0KLSAgICBqaXQubW92ZShHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQubG9hZFdh
c21Db250ZXh0KEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGNhbGwgPSBqaXQuY2FsbCgpOwotICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7
Ci0KLSAgICB2b2lkICgqdGhyb3dXYXNtRXhjZXB0aW9uKShFeGVjU3RhdGUqLCBXYXNtOjpFeGNl
cHRpb25UeXBlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMs
IFdhc206OkV4Y2VwdGlvblR5cGUgdHlwZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiB3YXNtQ29u
dGV4dCkgewotICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICAgICAgewotICAgICAgICAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwotICAgICAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHdhc21Db250ZXh0LT5nbG9iYWxPYmplY3Qo
KTsKLQotICAgICAgICAgICAgSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciogZXJyb3IgPSBKU1dl
YkFzc2VtYmx5UnVudGltZUVycm9yOjpjcmVhdGUoZXhlYywgKnZtLCBnbG9iYWxPYmplY3QtPldl
YkFzc2VtYmx5UnVudGltZUVycm9yU3RydWN0dXJlKCksIFdhc206OmVycm9yTWVzc2FnZUZvckV4
Y2VwdGlvblR5cGUodHlwZSkpOwotICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhy
b3dTY29wZSwgZXJyb3IpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwg
ZXhlYyk7Ci0gICAgICAgIEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7Ci0gICAgfTsK
LQotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAg
bGlua0J1ZmZlci5saW5rKGNhbGwsIHRocm93V2FzbUV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUoCi0gICAgICAgIGxpbmtCdWZmZXIsICgiVGhyb3cgZXhjZXB0aW9uIGZyb20g
V2FzbSIpKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KIH0gLy8gbmFtZXNw
YWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gMjE0NjEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
NjQsMTAgKzY0LDUgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJhbmRvbVRodW5rR2VuZXJhdAog
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRydW5jVGh1bmtHZW5lcmF0b3IoVk0qKTsKIAogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSop
OwotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93
RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcihWTSopOwotI2VuZGlmCi0KIH0KICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAJKHJldmlzaW9uIDIxNDYxMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZUlEVGFibGUuaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKKyNpbmNs
dWRlICJXYXNtVGh1bmtzLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8
bXV0ZXg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTcwLDYgKzcxLDEwIEBAIHZv
aWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCiAgICAgICAgIGluaXRpYWxpemVTdXBlclNhbXBsZXIo
KTsKICAgICAgICAgV1RGVGhyZWFkRGF0YSYgdGhyZWFkRGF0YSA9IHd0ZlRocmVhZERhdGEoKTsK
ICAgICAgICAgdGhyZWFkRGF0YS5zZXRTYXZlZExhc3RTdGFja1RvcCh0aHJlYWREYXRhLnN0YWNr
KCkub3JpZ2luKCkpOworCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICBXYXNtOjpU
aHVua3M6OmluaXRpYWxpemUoKTsKKyNlbmRpZgogICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyMTQ2MTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4Myw3ICsyODMs
NiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAKICNpZiBFTkFC
TEUoSklUKQogICAgIGppdFN0dWJzID0gc3RkOjptYWtlX3VuaXF1ZTxKSVRUaHVua3M+KCk7Ci0g
ICAgYWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVnaXN0
ZXJBdE9mZnNldExpc3Q+KFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKSwgUmVn
aXN0ZXJBdE9mZnNldExpc3Q6Olplcm9CYXNlZCk7CiAjZW5kaWYKICAgICBhcml0eUNoZWNrRGF0
YSA9IHN0ZDo6bWFrZV91bmlxdWU8Q29tbW9uU2xvd1BhdGhzOjpBcml0eUNoZWNrRGF0YT4oKTsK
IApAQCAtOTM5LDQgKzkzOCwxOCBAQCB2b2lkIFZNOjp2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJ
c1NhdGlzCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShKSVQpCitSZWdpc3RlckF0T2Zmc2V0TGlz
dCogVk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKQoreworICAgIHN0YXRpYyBS
ZWdpc3RlckF0T2Zmc2V0TGlzdCogcmVzdWx0OworCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IGNhbGxlZVNhdmVzRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShjYWxsZWVTYXZlc0ZsYWcsIFtd
ICgpIHsKKyAgICAgICAgcmVzdWx0ID0gbmV3IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KFJlZ2lzdGVy
U2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKSwgUmVnaXN0ZXJBdE9mZnNldExpc3Q6Olplcm9C
YXNlZCk7CisgICAgfSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmIC8vIEVOQUJM
RShKSVQpCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCShyZXZpc2lvbiAyMTQ2MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NTYsOSArNDU2LDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gaml0U3R1YnMtPmN0aVN0dWIodGhpcywgZ2VuZXJhdG9yKTsKICAgICB9CiAgICAg
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiBhbGxDYWxsZWVTYXZl
UmVnaXN0ZXJPZmZzZXRzOwotICAgIAotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBnZXRBbGxD
YWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCkgeyByZXR1cm4gYWxsQ2FsbGVlU2F2ZVJlZ2lzdGVy
T2Zmc2V0cy5nZXQoKTsgfQorICAgIHN0YXRpYyBSZWdpc3RlckF0T2Zmc2V0TGlzdCogZ2V0QWxs
Q2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q29tbW9uU2xvd1BhdGhzOjpBcml0eUNoZWNrRGF0YT4gYXJpdHlD
aGVja0RhdGE7CkBAIC00ODMsNiArNDgxLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihWTSwgdGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOwogICAgIH0KIAorICAg
IHN0YXRpYyBwdHJkaWZmX3QgdG9wVk1FbnRyeUZyYW1lT2Zmc2V0KCkKKyAgICB7CisgICAgICAg
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVk0sIHRvcFZNRW50cnlGcmFtZSk7CisgICAgfQorCiAg
ICAgdm9pZCByZXN0b3JlUHJldmlvdXNFeGNlcHRpb24oRXhjZXB0aW9uKiBleGNlcHRpb24pIHsg
c2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7IH0KIAogICAgIHZvaWQgY2xlYXJMYXN0RXhjZXB0aW9u
KCkgeyBtX2xhc3RFeGNlcHRpb24gPSBudWxscHRyOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyMTQ2MTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJXYXNtRnVuY3Rpb25QYXJz
ZXIuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbU9wY29kZU9yaWdp
bi5oIgorI2luY2x1ZGUgIldhc21UaHVua3MuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
IAogdm9pZCBkdW1wUHJvY2VkdXJlKHZvaWQqIHB0cikKQEAgLTE2MSw3ICsxNjIsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwK
ICAgICB9IHdoaWxlICgwKQogCi0gICAgQjNJUkdlbmVyYXRvcihWTSYsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgV2FzbUludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlKTsKKyAgICBCM0lSR2VuZXJhdG9yKGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgV2FzbUludGVybmFsRnVuY3Rpb24q
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlKTsKIAogICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1
cmUqKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBl
LCB1aW50MzJfdCk7CkBAIC0yMzIsNyArMjMzLDYgQEAgcHJpdmF0ZToKIAogICAgIE9yaWdpbiBv
cmlnaW4oKTsKIAotICAgIFZNJiBtX3ZtOwogICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0
b3I+KiBtX3BhcnNlcjsKICAgICBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9pbmZvOwogICAg
IE1lbW9yeU1vZGUgbV9tb2RlOwpAQCAtMzAyLDkgKzMwMiw4IEBAIHZvaWQgQjNJUkdlbmVyYXRv
cjo6cmVzdG9yZVdhc21Db250ZXh0KFAKICAgICB9KTsKIH0KIAotQjNJUkdlbmVyYXRvcjo6QjNJ
UkdlbmVyYXRvcihWTSYgdm0sIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1
cmUmIHByb2NlZHVyZSwgV2FzbUludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlN
b2RlIG1vZGUpCi0gICAgOiBtX3ZtKHZtKQotICAgICwgbV9pbmZvKGluZm8pCitCM0lSR2VuZXJh
dG9yOjpCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1
cmUmIHByb2NlZHVyZSwgV2FzbUludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlN
b2RlIG1vZGUpCisgICAgOiBtX2luZm8oaW5mbykKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwg
bV9wcm9jKHByb2NlZHVyZSkKICAgICAsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHModW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMpCkBAIC0zNzYsOSArMzc1LDggQEAgdm9pZCBCM0lSR2VuZXJhdG9y
OjplbWl0RXhjZXB0aW9uQ2hlY2soQwogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90Pih0eXBlKSksIEdQUkluZm86OmFyZ3VtZW50R1BS
MSk7CiAgICAgYXV0byBqdW1wVG9FeGNlcHRpb25TdHViID0gaml0Lmp1bXAoKTsKIAotICAgIFZN
KiB2bSA9ICZtX3ZtOwotICAgIGppdC5hZGRMaW5rVGFzayhbdm0sIGp1bXBUb0V4Y2VwdGlvblN0
dWJdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhq
dW1wVG9FeGNlcHRpb25TdHViLCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+Z2V0Q1RJU3R1Yih0aHJv
d0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIGppdC5hZGRM
aW5rVGFzayhbanVtcFRvRXhjZXB0aW9uU3R1Yl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
KyAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb0V4Y2VwdGlvblN0dWIsIENvZGVMb2NhdGlv
bkxhYmVsKFRodW5rczo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1
bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIH0pOwogfQogCkBAIC00NDMsOCArNDQxLDggQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRVbnJlYWNoYWJsZSgpIC0+IAogCiBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBpbnQzMl90ICgqZ3Jvd01lbW9yeSkg
KEV4ZWNTdGF0ZSosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIGludDMyX3QpID0gW10gKEV4ZWNT
dGF0ZSogZXhlYywgSlNXZWJBc3NlbWJseUluc3RhbmNlKiB3YXNtQ29udGV4dCwgaW50MzJfdCBk
ZWx0YSkgLT4gaW50MzJfdCB7Ci0gICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgaW50
MzJfdCAoKmdyb3dNZW1vcnkpIChDb250ZXh0KiwgaW50MzJfdCkgPSBbXSAoQ29udGV4dCogd2Fz
bUNvbnRleHQsIGludDMyX3QgZGVsdGEpIC0+IGludDMyX3QgeworICAgICAgICBWTSYgdm0gPSAq
d2FzbUNvbnRleHQtPnZtKCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiB3YXNtTWVtb3J5ID0gd2Fz
bUNvbnRleHQtPm1lbW9yeSgpOwpAQCAtNDUzLDcgKzQ1MSw5IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkR3Jvd01lbW9yeShFeHByZXMKICAgICAgICAgICAgIHJldHVybiAtMTsKIAogICAgICAg
ICBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSA9IGZhbHNlOwotICAgICAgICBQ
YWdlQ291bnQgcmVzdWx0ID0gd2FzbU1lbW9yeS0+Z3JvdyhleGVjLCBzdGF0aWNfY2FzdDx1aW50
MzJfdD4oZGVsdGEpLCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpOworICAgICAgICAv
LyBncm93KCkgZG9lcyBub3QgcmVxdWlyZSBFeGVjU3RhdGUqIGlmIGl0IGRvZXNuJ3QgdGhyb3cg
ZXhjZXB0aW9ucy4KKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gbnVsbHB0cjsgCisgICAgICAg
IFBhZ2VDb3VudCByZXN1bHQgPSB3YXNtTWVtb3J5LT5ncm93KHZtLCBleGVjLCBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oZGVsdGEpLCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgICAgICBpZiAoIXJl
c3VsdCkKICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTQ2Myw3ICs0NjMsNyBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzCiAKICAgICByZXN1bHQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAog
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4oZ3Jvd01lbW9yeSkpLAotICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RnJhbWVQb2ludGVy
LCBvcmlnaW4oKSksIG1faW5zdGFuY2VWYWx1ZSwgZGVsdGEpOworICAgICAgICBtX2luc3RhbmNl
VmFsdWUsIGRlbHRhKTsKIAogICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKG1faW5m
by5tZW1vcnksIG1faW5zdGFuY2VWYWx1ZSwgbV9wcm9jLCBtX2N1cnJlbnRCbG9jayk7CiAKQEAg
LTEyNzcsNyArMTI3Nyw3IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxG
dW4KICAgICAgICAgICAgIG91dC5wcmludCgiV2FzbTogIiwgYml0d2lzZV9jYXN0PE9wY29kZU9y
aWdpbj4ob3JpZ2luKSk7CiAgICAgfSk7CiAKLSAgICBCM0lSR2VuZXJhdG9yIGNvbnRleHQodm0s
IGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywg
bW9kZSk7CisgICAgQjNJUkdlbmVyYXRvciBjb250ZXh0KGluZm8sIHByb2NlZHVyZSwgcmVzdWx0
LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSk7CiAgICAgRnVuY3Rpb25QYXJz
ZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKCZ2bSwgY29udGV4dCwgZnVuY3Rpb25TdGFydCwgZnVu
Y3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbywgbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5p
cXVlZFNpZ25hdHVyZUluZGljZXMpOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFy
c2VyLnBhcnNlKCkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1
bHRTaWduYWxIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAkocmV2aXNpb24gMjE0NjEyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldh
c21FeGNlcHRpb25UeXBlLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgIldh
c21UaHVua3MuaCIKIAogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+
CkBAIC00OSw3ICs1MCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZFNpZ0J1c0hhbmRs
ZXIKIHN0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZFNpZ1NlZ3ZIYW5kbGVyOwogc3RhdGljIGJv
b2wgZmFzdEhhbmRsZXJJbnN0YWxsZWQgeyBmYWxzZSB9Owogc3RhdGljIFN0YXRpY0xvY2sgY29k
ZUxvY2F0aW9uc0xvY2s7Ci1zdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8c3RkOjp0
dXBsZTxWTSosIHZvaWQqLCB2b2lkKj4+PiBjb2RlTG9jYXRpb25zOyAvLyAodm0sIHN0YXJ0LCBl
bmQpCitzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8c3RkOjp0dXBsZTx2b2lkKiwg
dm9pZCo+Pj4gY29kZUxvY2F0aW9uczsgLy8gKHN0YXJ0LCBlbmQpCiAKIHN0YXRpYyB2b2lkIHRy
YXBIYW5kbGVyKGludCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQp
CiB7CkBAIC04MSwxNCArODIsMTMgQEAgc3RhdGljIHZvaWQgdHJhcEhhbmRsZXIoaW50IHNpZ25h
bCwgc2lnaQogICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgImZvdW5kIGFjdGl2ZSBm
YXN0IG1lbW9yeSBmb3IgZmF1bHRpbmcgYWRkcmVzcyIpOwogICAgICAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoY29kZUxvY2F0aW9uc0xvY2spOwogICAgICAgICAgICAgZm9yIChhdXRvIHJhbmdl
IDogY29kZUxvY2F0aW9ucy5nZXQoKSkgewotICAgICAgICAgICAgICAgIFZNKiB2bTsKICAgICAg
ICAgICAgICAgICB2b2lkKiBzdGFydDsKICAgICAgICAgICAgICAgICB2b2lkKiBlbmQ7Ci0gICAg
ICAgICAgICAgICAgc3RkOjp0aWUodm0sIHN0YXJ0LCBlbmQpID0gcmFuZ2U7CisgICAgICAgICAg
ICAgICAgc3RkOjp0aWUoc3RhcnQsIGVuZCkgPSByYW5nZTsKICAgICAgICAgICAgICAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAiZnVuY3Rpb24gc3RhcnQ6ICIsIFJhd1BvaW50ZXIoc3RhcnQpLCAi
IGVuZDogIiwgUmF3UG9pbnRlcihlbmQpKTsKICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPD0g
ZmF1bHRpbmdJbnN0cnVjdGlvbiAmJiBmYXVsdGluZ0luc3RydWN0aW9uIDwgZW5kKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJmb3VuZCBtYXRjaCIpOwotICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhjZXB0aW9uU3R1YiA9IHZt
LT5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dl
bmVyYXRvcik7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBleGNl
cHRpb25TdHViID0gVGh1bmtzOjpzaW5nbGV0b24oKS5leGlzdGluZ1N0dWIodGhyb3dFeGNlcHRp
b25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKTsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgZm9y
IHdoYXRldmVyIHJlYXNvbiB3ZSBkb24ndCBoYXZlIGEgc3R1YiB0aGVuIHdlIHNob3VsZCBqdXN0
IHRyZWF0IHRoaXMgbGlrZSBhIHJlZ3VsYXIgY3Jhc2guCiAgICAgICAgICAgICAgICAgICAgIGlm
ICghZXhjZXB0aW9uU3R1YikKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA4
LDIwICsxMDgsMjAgQEAgc3RhdGljIHZvaWQgdHJhcEhhbmRsZXIoaW50IHNpZ25hbCwgc2lnaQog
ICAgICAgICBzaWdhY3Rpb24oc2lnbmFsLCAmb2xkU2lnU2VndkhhbmRsZXIsIG51bGxwdHIpOwog
fQogCi12b2lkIHJlZ2lzdGVyQ29kZShWTSYgdm0sIHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpCit2
b2lkIHJlZ2lzdGVyQ29kZSh2b2lkKiBzdGFydCwgdm9pZCogZW5kKQogewogICAgIGlmICghZmFz
dE1lbW9yeUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIExvY2tIb2xkZXIgbG9ja2Vy
KGNvZGVMb2NhdGlvbnNMb2NrKTsKLSAgICBjb2RlTG9jYXRpb25zLT5hZGQoc3RkOjptYWtlX3R1
cGxlKCZ2bSwgc3RhcnQsIGVuZCkpOworICAgIGNvZGVMb2NhdGlvbnMtPmFkZChzdGQ6Om1ha2Vf
dHVwbGUoc3RhcnQsIGVuZCkpOwogfQogCi12b2lkIHVucmVnaXN0ZXJDb2RlKFZNJiB2bSwgdm9p
ZCogc3RhcnQsIHZvaWQqIGVuZCkKK3ZvaWQgdW5yZWdpc3RlckNvZGUodm9pZCogc3RhcnQsIHZv
aWQqIGVuZCkKIHsKICAgICBpZiAoIWZhc3RNZW1vcnlFbmFibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihjb2RlTG9jYXRpb25zTG9jayk7Ci0gICAgY29kZUxv
Y2F0aW9ucy0+cmVtb3ZlKHN0ZDo6bWFrZV90dXBsZSgmdm0sIHN0YXJ0LCBlbmQpKTsKKyAgICBj
b2RlTG9jYXRpb25zLT5yZW1vdmUoc3RkOjptYWtlX3R1cGxlKHN0YXJ0LCBlbmQpKTsKIH0KIAog
Ym9vbCBmYXN0TWVtb3J5RW5hYmxlZCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oCShyZXZpc2lvbiAyMTQ2MTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAgY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBXYXNt
IHsKIAotdm9pZCByZWdpc3RlckNvZGUoVk0mLCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKLXZv
aWQgdW5yZWdpc3RlckNvZGUoVk0mLCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKK3ZvaWQgcmVn
aXN0ZXJDb2RlKHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpOwordm9pZCB1bnJlZ2lzdGVyQ29kZSh2
b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKIAogYm9vbCBmYXN0TWVtb3J5RW5hYmxlZCgpOwogSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBlbmFibGVGYXN0TWVtb3J5KCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAkocmV2aXNpb24gMjE0NjEyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUZhdWx0U2ln
bmFsSGFuZGxlci5oIgorI2luY2x1ZGUgIldhc21UaHVua3MuaCIKIAogI2luY2x1ZGUgPHd0Zi9I
ZXhOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTEzMSw3ICsx
MzIsNyBAQCBpbmxpbmUgYm9vbCB0cnlHZXRGYXN0TWVtb3J5KFZNJiB2bSwgdm9pCiAgICAgICAg
IHJldHVybiBmYWlsKCk7CiAKICAgICAvLyBXZSBuZWVkIHRvIGJlIHN1cmUgd2UgaGF2ZSBhIHN0
dWIgcHJpb3IgdG8gcnVubmluZyBjb2RlLgotICAgIGlmIChVTkxJS0VMWSghdm0uZ2V0Q1RJU3R1
Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpLnNpemUoKSkpCisgICAgaWYg
KFVOTElLRUxZKCFUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2Fz
bVRodW5rR2VuZXJhdG9yKSkpCiAgICAgICAgIHJldHVybiBmYWlsKCk7CiAKICAgICBBU1NFUlQo
YWxsb2NhdGVkRmFzdE1lbW9yaWVzIDw9IG1heEZhc3RNZW1vcmllcyk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtVGh1bmtzLmgiCisKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRl
ICJGcmFtZVRyYWNlcnMuaCIKKyNpbmNsdWRlICJIZWFwQ2VsbElubGluZXMuaCIKKyNpbmNsdWRl
ICJKSVRFeGNlcHRpb25zLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgorI2luY2x1ZGUgIkxpbmtCdWZm
ZXIuaCIKKyNpbmNsdWRlICJXYXNtQ29udGV4dC5oIgorI2luY2x1ZGUgIldhc21FeGNlcHRpb25U
eXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IoKQoreworICAg
IENDYWxsSGVscGVycyBqaXQ7CisKKyAgICAvLyBUaGUgdGhpbmcgdGhhdCBqdW1wcyBoZXJlIG11
c3QgbW92ZSBFeGNlcHRpb25UeXBlIGludG8gdGhlIGFyZ3VtZW50R1BSMSBiZWZvcmUganVtcGlu
ZyBoZXJlLgorICAgIC8vIFdlJ3JlIGFsbG93ZWQgdG8gdXNlIHRlbXAgcmVnaXN0ZXJzIGhlcmUu
IFdlIGFyZSBub3QgYWxsb3dlZCB0byB1c2UgY2FsbGVlIHNhdmVzLgorICAgIGppdC5sb2FkV2Fz
bUNvbnRleHQoR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBDb250ZXh0OjpvZmZzZXRPZlZN
KCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
aml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOworICAgIGppdC5q
dW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICBqaXQuYnJlYWtwb2ludCgpOyAvLyBX
ZSBzaG91bGQgbm90IHJlYWNoIHRoaXMuCisKKyAgICB2b2lkKiAoKnRocm93V2FzbUV4Y2VwdGlv
bikoRXhlY1N0YXRlKiwgV2FzbTo6RXhjZXB0aW9uVHlwZSwgV2FzbTo6Q29udGV4dCopID0gW10g
KEV4ZWNTdGF0ZSogZXhlYywgV2FzbTo6RXhjZXB0aW9uVHlwZSB0eXBlLCBXYXNtOjpDb250ZXh0
KiB3YXNtQ29udGV4dCkgLT4gdm9pZCogeworICAgICAgICBWTSogdm0gPSB3YXNtQ29udGV4dC0+
dm0oKTsKKyAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisK
KyAgICAgICAgeworICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSgqdm0pOworICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHdh
c21Db250ZXh0LT5nbG9iYWxPYmplY3QoKTsKKworICAgICAgICAgICAgSlNXZWJBc3NlbWJseVJ1
bnRpbWVFcnJvciogZXJyb3IgPSBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yOjpjcmVhdGUoCisg
ICAgICAgICAgICAgICAgZXhlYywgKnZtLCBnbG9iYWxPYmplY3QtPldlYkFzc2VtYmx5UnVudGlt
ZUVycm9yU3RydWN0dXJlKCksIFdhc206OmVycm9yTWVzc2FnZUZvckV4Y2VwdGlvblR5cGUodHlw
ZSkpOworICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgZXJyb3Ip
OworICAgICAgICB9CisKKyAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CisgICAgICAg
IEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgICAgIEFTU0VSVCghIXZtLT50
YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CisgICAgICAgIHJldHVybiB2bS0+dGFyZ2V0TWFjaGlu
ZVBDRm9yVGhyb3c7CisgICAgfTsKKworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCk7CisgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRocm93V2FzbUV4Y2Vw
dGlvbik7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJUaHJvdyBleGNl
cHRpb24gZnJvbSBXYXNtIikpOworfQorCitzdGF0aWMgVGh1bmtzKiB0aHVua3M7Cit2b2lkIFRo
dW5rczo6aW5pdGlhbGl6ZSgpCit7CisgICAgdGh1bmtzID0gbmV3IFRodW5rczsKK30KKworVGh1
bmtzJiBUaHVua3M6OnNpbmdsZXRvbigpCit7CisgICAgQVNTRVJUKHRodW5rcyk7CisgICAgcmV0
dXJuICp0aHVua3M7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBUaHVua3M6OnN0dWIoVGh1
bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9s
b2NrKTsKKworICAgIEFTU0VSVCghIWdlbmVyYXRvcik7CisgICAgYXV0byBhZGRSZXN1bHQgPSBt
X3N0dWJzLmFkZChnZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpKTsKKyAgICBpZiAo
YWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBnZW5lcmF0b3IoKTsKKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKK30K
KworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIFRodW5rczo6ZXhpc3RpbmdTdHViKFRodW5rR2VuZXJh
dG9yIGdlbmVyYXRvcikKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisK
KyAgICBhdXRvIGl0ZXIgPSBtX3N0dWJzLmZpbmQoZ2VuZXJhdG9yKTsKKyAgICBpZiAoaXRlciAh
PSBtX3N0dWJzLmVuZCgpKQorICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CisKKyAgICByZXR1
cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21UaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcigpOwor
Cit0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiAoKlRodW5rR2VuZXJhdG9yKSgpOworCitj
bGFzcyBUaHVua3MgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKKyAg
ICBzdGF0aWMgVGh1bmtzJiBzaW5nbGV0b24oKTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBzdHViKFRodW5rR2VuZXJhdG9yKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhpc3Rp
bmdTdHViKFRodW5rR2VuZXJhdG9yKTsKKworcHJpdmF0ZToKKyAgICBUaHVua3MoKSA9IGRlZmF1
bHQ7CisKKyAgICBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY+
IG1fc3R1YnM7CisgICAgTG9jayBtX2xvY2s7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAJKHJl
dmlzaW9uIDIxNDYxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDYWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxMyArNDQsMTMgQEAgdm9pZCBK
U1dlYkFzc2VtYmx5Q2FsbGVlOjpmaW5pc2hDcmVhdGlvbgogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKIAogICAgIG1fZW50cnlwb2ludCA9IFdURk1vdmUoZW50cnlwb2ludCk7Ci0gICAg
V2FzbTo6cmVnaXN0ZXJDb2RlKHZtLCBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYo
KS5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCksIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+
Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOworICAgIFdhc206OnJlZ2lzdGVy
Q29kZShtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5
KCktPnN0YXJ0KCksIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFi
bGVNZW1vcnkoKS0+ZW5kKCkpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlDYWxsZWU6OmRlc3Ry
b3koSlNDZWxsKiBjZWxsKQogewogICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHRoaXNPYmplY3Qg
PSBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5Q2FsbGVlKj4oY2VsbCk7Ci0gICAgV2FzbTo6dW5y
ZWdpc3RlckNvZGUoKmNlbGwtPnZtKCksIHRoaXNPYmplY3QtPm1fZW50cnlwb2ludC5jb21waWxh
dGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKSwgdGhpc09iamVjdC0+
bV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5l
bmQoKSk7CisgICAgV2FzbTo6dW5yZWdpc3RlckNvZGUodGhpc09iamVjdC0+bV9lbnRyeXBvaW50
LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLCB0aGlz
T2JqZWN0LT5tX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVt
b3J5KCktPmVuZCgpKTsKICAgICB0aGlzT2JqZWN0LT5KU1dlYkFzc2VtYmx5Q2FsbGVlOjp+SlNX
ZWJBc3NlbWJseUNhbGxlZSgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDIx
NDYxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0
YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAgU3RydWN0dXJlKiBKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZQogCiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBu
dW1JbXBvcnRGdW5jdGlvbnMpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX3Zt
KCZ2bSkKICAgICAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zKG51bUltcG9ydEZ1bmN0aW9ucykKIHsK
ICAgICBtZW1zZXQoaW1wb3J0RnVuY3Rpb25zKCksIDAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zICog
c2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCShyZXZpc2lv
biAyMTQ2MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV90YWJsZSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQ2FsbGVlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSwgbV9jYWxsZWUpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkdsb2Jh
bHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX2ds
b2JhbHMpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlZNKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV92bSk7IH0KICAgICBzdGF0aWMg
c2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgeyByZXR1cm4gV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8SlNDZWxsPik+KHNpemVvZihKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UpKTsgfQogICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlv
bihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mSW1wb3J0RnVuY3Rp
b25zKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihzaXplb2YoV3JpdGVCYXJyaWVyPEpT
Q2VsbD4pKTsgfQogCkBAIC05Myw2ICs5NCw3IEBAIHByb3RlY3RlZDoKICAgICB9CiAKIHByaXZh
dGU6CisgICAgVk0qIG1fdm07CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiogaW1wb3J0RnVu
Y3Rpb25zKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU09iamVjdD4qPihi
aXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSk7IH0K
IAogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5TW9kdWxlPiBtX21vZHVsZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
ZW1vcnkuY3BwCShyZXZpc2lvbiAyMTQ2MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsOSArNzMs
OSBAQCBKU0FycmF5QnVmZmVyKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpidWZmCiAgICAgcmV0dXJu
IG1fYnVmZmVyV3JhcHBlci5nZXQoKTsKIH0KIAotV2FzbTo6UGFnZUNvdW50IEpTV2ViQXNzZW1i
bHlNZW1vcnk6Omdyb3coRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBkZWx0YSwgYm9vbCBzaG91
bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpCitXYXNtOjpQYWdlQ291bnQgSlNXZWJBc3NlbWJs
eU1lbW9yeTo6Z3JvdyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgZGVsdGEsIGJv
b2wgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKQogewotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgLy8gTm90ZTogV2UgY2FuIG9ubHkgdXNlIGV4ZWMgaWYgc2hvdWxkVGhyb3dF
eGNlcHRpb25zT25GYWlsdXJlIGlzIHRydWUuCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50ID0g
bWVtb3J5KCkuc2l6ZUluUGFnZXMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHJldmlzaW9uIDIxNDYxMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAKICAgICBXYXNtOjpNZW1vcnkm
IG1lbW9yeSgpIHsgcmV0dXJuIG1fbWVtb3J5LmdldCgpOyB9CiAgICAgSlNBcnJheUJ1ZmZlciog
YnVmZmVyKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqKTsKLSAgICBXYXNtOjpQYWdlQ291bnQgZ3Jv
dyhFeGVjU3RhdGUqLCB1aW50MzJfdCBkZWx0YSwgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNP
bkZhaWx1cmUpOworICAgIFdhc206OlBhZ2VDb3VudCBncm93KFZNJiwgRXhlY1N0YXRlKiwgdWlu
dDMyX3QgZGVsdGEsIGJvb2wgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKTsKIAogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNXZWJBc3NlbWJseU1lbW9yeSwgbV9tZW1vcnlCYXNlKTsgfQogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1i
bHlNZW1vcnksIG1fbWVtb3J5U2l6ZSk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDIxNDYxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogCiAgICAgYm9vbCBzaG91bGRUaHJvd0V4Y2Vw
dGlvbnNPbkZhaWx1cmUgPSB0cnVlOwotICAgIFdhc206OlBhZ2VDb3VudCByZXN1bHQgPSBtZW1v
cnktPmdyb3coZXhlYywgZGVsdGEsIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSk7Cisg
ICAgV2FzbTo6UGFnZUNvdW50IHJlc3VsdCA9IG1lbW9yeS0+Z3Jvdyh2bSwgZXhlYywgZGVsdGEs
IHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB7IH0pOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihyZXN1bHQucGFnZUNvdW50KCkpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305926</attachid>
            <date>2017-03-30 16:59:35 -0700</date>
            <delta_ts>2017-03-30 17:04:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>42249</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0NjM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBA
CisyMDE3LTAzLTMwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFdlYkFzc2VtYmx5OiBXaGVuIFdhc20gY2FsbHMgdG8gQywgaXQgc2hvdWxkIHVzZSBXYXNtOjpD
b250ZXh0KiBpbnN0ZWFkIG9mIEV4ZWNTdGF0ZSogdG8gZ2V0IFZNCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAxODUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIG9uZSBtb3JlIHN0ZXAgaW4g
dGhlIGRpcmVjdGlvbiBvZiBQSUMtaWZpZWQgV2FzbS4KKyAgICAgICAgV2hlbiB3ZSBsaWZ0IFdh
c21DYWxsZWUgYWJvdmUgVk0sIHdlIHdpbGwgbm8gbG9uZ2VyIGJlCisgICAgICAgIGFibGUgdG8g
Z2V0IFZNIGZyb20gRXhlY1N0YXRlKi4gVGhpcyBwYXRjaCBlbnN1cmVzIHRoYXQKKyAgICAgICAg
d2UgZG9uJ3QgZG8gdGhhdCBmcm9tIHdpdGhpbiB0aGUgV2FzbSBydW50aW1lLiBJbnN0ZWFkLAor
ICAgICAgICB3ZSB1c2UgdGhlIFdhc206OkNvbnRleHQqIHRvIGdldCB0aGUgVk0uCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBhbHNvIGFkZHMgYSBuZXcgY2xhc3MsIFdhc206OlRodW5rcy4gVGhlcmUK
KyAgICAgICAgaXMgYSBzaW5nbGUgV2FzbTo6VGh1bmtzIHRoYXQgbGl2ZXMgaW4gdGhlIHByb2Nl
c3MuIEl0CisgICAgICAgIGlzIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIGEgdGh1bmsgdGhh
dCBXYXNtIHJlbGllcyBvbi4KKyAgICAgICAgVGhlIG9ubHkgc3VjaCB0aHVuayByaWdodCBub3cg
aXMgdGhlIGV4Y2VwdGlvbiB0aHJvd2luZworICAgICAgICB0aHVuay4KKworICAgICAgICBUaGlz
IHBhdGNoIGFsc28gcmlkcyBXYXNtRmF1bHRTaWduYWxIYW5kbGVyIGZyb20gYW55IGtub3dsZWRn
ZQorICAgICAgICBvZiBWTS4gUHJldmlvdXNseSwgaXQgcmVsaWVkIG9uIFZNIHRvIGdldCB0aGUg
ZXhjZXB0aW9uIGhhbmRsaW5nCisgICAgICAgIHRodW5rLgorCisgICAgICAgIFRoZSBvbmx5IHBh
cnQgb2YgdGhlIFdhc20gcnVudGltZSB0aGF0IHdpbGwgYmUgYWxsb3dlZAorICAgICAgICB0byBn
ZXQgVk0mIGZyb20gRXhlY1N0YXRlIHdpbGwgYmUgV2FzbUJpbmRpbmcuIEluIHRoZQorICAgICAg
ICBmdXR1cmUsIHdlIHBsYW4gdG8ga2VlcCB0aGUgY2FsbHMgb3V0IHRvIEpTIHRvIGtlZXAKKyAg
ICAgICAgYSBKU0NlbGwgYXMgdGhlIGNhbGxlZS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGZ0bC9G
VExPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToK
KyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OlVu
d2luZEZ1bmN0b3I6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y29weUNhbGxlZVNh
dmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKiBqaXQv
VGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tV2Fz
bVRodW5rR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3Jz
Lmg6CisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAg
KEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6Cisg
ICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgIChKU0M6OlZNOjpnZXRBbGxDYWxsZWVTYXZl
UmVnaXN0ZXJPZmZzZXRzKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6
OlZNOjp0b3BWTUVudHJ5RnJhbWVPZmZzZXQpOgorICAgICAgICAoSlNDOjpWTTo6Z2V0QWxsQ2Fs
bGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cyk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRF
eGNlcHRpb25DaGVjayk6CisgICAgICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6dHJhcEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2Fz
bU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRyeUdldEZhc3RNZW1vcnkpOgorICAg
ICAgICAqIHdhc20vV2FzbVRodW5rcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjp0
aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNt
OjpUaHVua3M6OmluaXRpYWxpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUaHVua3M6OnNpbmds
ZXRvbik6CisgICAgICAgIChKU0M6Oldhc206OlRodW5rczo6c3R1Yik6CisgICAgICAgIChKU0M6
Oldhc206OlRodW5rczo6ZXhpc3RpbmdTdHViKToKKyAgICAgICAgKiB3YXNtL1dhc21UaHVua3Mu
aDogQWRkZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlZNKToKKyAgICAgICAgKiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
TWVtb3J5Ojpncm93KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaDoK
KyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcDoKKyAgICAg
ICAgKEpTQzo6d2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNHcm93KToKKwogMjAxNy0wMy0zMCAg
TWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgSW50bE9iamVjdCBzaG91
bGQgbm90IGJlIHVzaW5nIEpTQXJyYXk6OmluaXRpYWxpemVJbmRleCgpLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxNDYxMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzA1LDYgKzEzMDUsOCBAQAogCQk0NDQzQUUzMzE2RTE4OEQ5MDA3NkYxMTAg
LyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5m
cmFtZXdvcmsgKi87IH07CiAJCTQ1MTUzOUI5MTJEQzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NTE1MzlCODEyREM5
OTQ1MDBFRjdBQzQgLyogWWFyci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTQ3M0RBNEE0NzY0QzQ1RkU4NzFCMDQ4NSAvKiBEZWZpbmVQcm9wZXJ0
eUF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE2OTk0OEVERTY4RDQwNTRCMDFFRjc5NyAvKiBEZWZpbmVQcm9wZXJ0eUF0dHJpYnV0ZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MjUw
RDJEMTFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjUwRDJDRjFFOERBMDVBMDAyOUE5MzIgLyog
V2FzbVRodW5rcy5jcHAgKi87IH07CisJCTUyNTBEMkQyMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNt
VGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MjUwRDJEMDFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNjc4RjhFMUEwMzEwMDkwMDZBMzA2
RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tM
b2NhdGlvbi5jcHAgKi87IH07CiAJCTUyNjc4RjhGMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Js
b2NrTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUyNjc4RjhEMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MjY3OEY5MTFB
MDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI2NzhGOTAxQTA0MTc3QzAwNkEzMDZEIC8q
IENvbnRyb2xGbG93UHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMzgwMSw2ICszODAzLDggQEAKIAkJNENFOTc4RTM4NUE4NDk4MTk5
MDUyMTUzIC8qIE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5m
cmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEZvdW5kYXRpb24uZnJhbWV3b3JrOyBwYXRoID0g
L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvRm91bmRhdGlvbi5mcmFtZXdvcms7IHNvdXJjZVRy
ZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTUxRjBFQzA3MDVDODZDOUEwMEU2REYxQiAvKiBsaWJv
YmpjLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJvYmpjLmR5bGliOyBwYXRoID0g
L3Vzci9saWIvbGlib2JqYy5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKKwkJ
NTI1MEQyQ0YxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUyNTBEMkQwMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21UaHVua3MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTI2NzhGOEMxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tM
b2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCYXNpY0Js
b2NrTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjY3OEY4RDFB
MDMxMDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEJhc2ljQmxvY2tMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MjY3OEY5MDFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250cm9sRmxvd1Byb2ZpbGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MzA2LDYgKzYzMTAsOCBAQAogCQkJ
CTUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAqLywKIAkJCQlBRDc0
MzhCRTFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5jcHAgKi8sCiAJCQkJQUQ3NDM4
QkYxRTA0NTc5MjAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCAqLywKKwkJCQk1MjUwRDJDRjFF
OERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8sCisJCQkJNTI1MEQyRDAxRThEQTA1
QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCAqLywKIAkJCQk1M0ZGN0Y5QTFEQkZEMkI5MDBBMjZD
Q0MgLyogV2FzbVZhbGlkYXRlLmNwcCAqLywKIAkJCQk1M0ZGN0Y5ODFEQkZDRDkwMDBBMjZDQ0Mg
LyogV2FzbVZhbGlkYXRlLmggKi8sCiAJCQkJNTMwRkIzMDMxRTdBMTE0NjAwM0MxOUREIC8qIFdh
c21Xb3JrbGlzdC5jcHAgKi8sCkBAIC04NzAzLDYgKzg3MDksNyBAQAogCQkJCTcwQjc5MTk3MUMw
MjRBMjkwMDI0ODFFMiAvKiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNzBCNzkxOTkxQzAyNEEyOTAwMjQ4MUUyIC8qIEdlbmVyYXRvclByb3RvdHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzBCNzkxOUQxQzAyNEE1NjAwMjQ4MUUyIC8qIEdlbmVyYXRv
clByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyNTBEMkQyMUU4REEwNUEwMDI5
QTkzMiAvKiBXYXNtVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxOTFBQTkwOTEx
MDBEMzNCMzMgLyogR2VuZXJpY0FyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUw
MUExQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkUwNTAxQjFBQTkwOTExMDBEMzNCMzMgLyogR2VuZXJpY09mZnNldC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xMDI3Myw2ICsxMDI4MCw3IEBACiAJCQkJMEZEREJGQjUxNjY2RUVE
ODAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEYyQkRDNTExNTIyOEZGRDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDNEExNTIyODA5QTAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxl
RXZlbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTI1MEQyRDExRThEQTA1QTAwMjlB
OTMyIC8qIFdhc21UaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NUYxNEVGOTBC
QjAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkM5N0Y0MTE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENv
bGxlY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkRCMkNFNzE3NDgzMEEyMDA3
QjNDMUIgLyogREZHV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMjE0NjEyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxMiw3ICszMTIsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBD
CiAgICAgLy8gNikgQ29weSBvdXIgY2FsbGVlIHNhdmVzIHRvIGJ1ZmZlci4KICNpZiBOVU1CRVJf
T0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCog
cmVnaXN0ZXJTYXZlTG9jYXRpb25zID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7
Ci0gICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gdm0tPmdldEFsbENh
bGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxs
Q2FsbGVlU2F2ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwogICAg
IFJlZ2lzdGVyU2V0IGRvbnRTYXZlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6
OnN0YWNrUmVnaXN0ZXJzKCksIFJlZ2lzdGVyU2V0OjphbGxGUFJzKCkpOwogCiAgICAgdW5zaWdu
ZWQgcmVnaXN0ZXJDb3VudCA9IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+c2l6ZSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAko
cmV2aXNpb24gMjE0NjEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDksNyArNDA5LDcgQEAgc3RhdGljIHZv
aWQgY29tcGlsZVN0dWIoCiAKICAgICBSZWdpc3RlclNldCBhbGxGVExDYWxsZWVTYXZlcyA9IFJl
Z2lzdGVyU2V0OjpmdGxDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAgICAgUmVnaXN0ZXJBdE9mZnNl
dExpc3QqIGJhc2VsaW5lQ2FsbGVlU2F2ZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpOwotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiB2bUNhbGxlZVNhdmVzID0g
dm0tPmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKKyAgICBSZWdpc3RlckF0T2Zm
c2V0TGlzdCogdm1DYWxsZWVTYXZlcyA9IFZNOjpnZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZz
ZXRzKCk7CiAgICAgUmVnaXN0ZXJTZXQgdm1DYWxsZWVTYXZlc1RvU2tpcCA9IFJlZ2lzdGVyU2V0
OjpzdGFja1JlZ2lzdGVycygpOwogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7
CiAgICAgICAgIGppdC5sb2FkUHRyKCZ2bS0+dG9wVk1FbnRyeUZyYW1lLCBHUFJJbmZvOjpyZWdU
MSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAJKHJldmlzaW9uIDIxNDYxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzNSw3ICs2MzUs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIFZNJiB2bSA9IG1f
Y2FsbEZyYW1lLT52bSgpOwotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVl
U2F2ZXMgPSB2bS5nZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7CisgICAgICAgIFJl
Z2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFZNOjpnZXRBbGxDYWxsZWVTYXZl
UmVnaXN0ZXJPZmZzZXRzKCk7CiAgICAgICAgIFJlZ2lzdGVyU2V0IGRvbnRDb3B5UmVnaXN0ZXJz
ID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7CiAgICAgICAgIGludHB0cl90KiBmcmFt
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3QqPihtX2NhbGxGcmFtZS0+cmVnaXN0ZXJzKCkp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
Y3BwCShyZXZpc2lvbiAyMTQ2MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4Miw3ICs1ODIsNyBAQCB2b2lkIEFz
c2VtYmx5SGVscGVyczo6ZW1pdFJhbmRvbVRodW5rKFZNCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6
cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZNJiB2
bSkKIHsKICNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKLSAgICBSZWdp
c3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSB2bS5nZXRBbGxDYWxsZWVTYXZlUmVn
aXN0ZXJPZmZzZXRzKCk7CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVz
ID0gVk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKICAgICBSZWdpc3RlclNl
dCBkb250UmVzdG9yZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwog
ICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+c2l6ZSgpOwogCkBA
IC04NzIsNiArODcyLDI5IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpkZWJ1Z0NhbGwoVk0mIHZt
LCAKICAgICB9CiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb1ZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChHUFJSZWcgY2FsbGVlU2F2ZXNCdWZmZXIp
Cit7CisjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihWTUVudHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZz
ZXQoKSksIGNhbGxlZVNhdmVzQnVmZmVyKTsKKworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBh
bGxDYWxsZWVTYXZlcyA9IFZNOjpnZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7Cisg
ICAgUmVnaXN0ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdp
c3RlcnMoKTsKKyAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNp
emUoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsg
aSsrKSB7CisgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+
YXQoaSk7CisgICAgICAgIGlmIChkb250Q29weVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQor
ICAgICAgICAgICAgc3RvcmVQdHIoZW50cnkucmVnKCkuZ3ByKCksIEFkZHJlc3MoY2FsbGVlU2F2
ZXNCdWZmZXIsIGVudHJ5Lm9mZnNldCgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0
b3JlRG91YmxlKGVudHJ5LnJlZygpLmZwcigpLCBBZGRyZXNzKGNhbGxlZVNhdmVzQnVmZmVyLCBl
bnRyeS5vZmZzZXQoKSkpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNhbGxlZVNh
dmVzQnVmZmVyKTsKKyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgJKHJldmlzaW9uIDIxNDYxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzMywyNyArMzMzLDIzIEBAIHB1
YmxpYzoKICNlbmRpZgogICAgIH0KIAorICAgIC8vIElmIHlvdSB1c2UgdGhpcywgYmUgYXdhcmUg
dGhhdCB2bUdQUiB3aWxsIGdldCB0cmFzaGVkLgorICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9W
TUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihHUFJSZWcgdm1HUFIpCisgICAgeworI2lmIE5V
TUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAorICAgICAgICBsb2FkUHRyKEFkZHJl
c3Modm1HUFIsIFZNOjp0b3BWTUVudHJ5RnJhbWVPZmZzZXQoKSksIHZtR1BSKTsKKyAgICAgICAg
Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwodm1HUFIp
OworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKHZtR1BSKTsKKyNlbmRpZgorICAgIH0KKwog
ICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihW
TSYgdm0sIGNvbnN0IFRlbXBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycyA9IHsgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpIH0pCiAgICAgewogI2lmIE5VTUJFUl9PRl9D
QUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAogICAgICAgICBHUFJSZWcgdGVtcDEgPSB1c2VkUmVn
aXN0ZXJzLmdldEZyZWVHUFIoMCk7Ci0KICAgICAgICAgbG9hZFB0cigmdm0udG9wVk1FbnRyeUZy
YW1lLCB0ZW1wMSk7Ci0gICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoVk1FbnRyeUZyYW1lOjpj
YWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCB0ZW1wMSk7Ci0KLSAgICAgICAgUmVn
aXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gdm0uZ2V0QWxsQ2FsbGVlU2F2ZVJl
Z2lzdGVyT2Zmc2V0cygpOwotICAgICAgICBSZWdpc3RlclNldCBkb250Q29weVJlZ2lzdGVycyA9
IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOwotICAgICAgICB1bnNpZ25lZCByZWdpc3Rl
ckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIFJl
Z2lzdGVyQXRPZmZzZXQgZW50cnkgPSBhbGxDYWxsZWVTYXZlcy0+YXQoaSk7Ci0gICAgICAgICAg
ICBpZiAoZG9udENvcHlSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChlbnRyeS5yZWcoKS5pc0dQUigpKQotICAgICAg
ICAgICAgICAgIHN0b3JlUHRyKGVudHJ5LnJlZygpLmdwcigpLCBBZGRyZXNzKHRlbXAxLCBlbnRy
eS5vZmZzZXQoKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0b3JlRG91
YmxlKGVudHJ5LnJlZygpLmZwcigpLCBBZGRyZXNzKHRlbXAxLCBlbnRyeS5vZmZzZXQoKSkpOwot
ICAgICAgICB9CisgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXJJbXBsKHRlbXAxKTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTSh2bSk7CiAg
ICAgICAgIFVOVVNFRF9QQVJBTSh1c2VkUmVnaXN0ZXJzKTsKQEAgLTM3Niw3ICszNzIsNyBAQCBw
dWJsaWM6CiAgICAgICAgIGxvYWRQdHIoJnZtLnRvcFZNRW50cnlGcmFtZSwgdGVtcDEpOwogICAg
ICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKFZNRW50cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
c0J1ZmZlck9mZnNldCgpKSwgdGVtcDEpOwogCi0gICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0
KiBhbGxDYWxsZWVTYXZlcyA9IHZtLmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsK
KyAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gVk06OmdldEFs
bENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QqIGN1cnJlbnRDYWxsZWVTYXZlcyA9IGNvZGVCbG9jaygpLT5jYWxsZWVTYXZlUmVnaXN0ZXJz
KCk7CiAgICAgICAgIFJlZ2lzdGVyU2V0IGRvbnRDb3B5UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6
OnN0YWNrUmVnaXN0ZXJzKCk7CiAgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBhbGxD
YWxsZWVTYXZlcy0+c2l6ZSgpOwpAQCAtMTU5MSw2ICsxNTg3LDggQEAgcHVibGljOgogI2VuZGlm
CiAKIHByb3RlY3RlZDoKKyAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXJJbXBsKEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcik7CisKICAgICBDb2Rl
QmxvY2sqIG1fY29kZUJsb2NrOwogICAgIENvZGVCbG9jayogbV9iYXNlbGluZUNvZGVCbG9jazsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cAkocmV2aXNpb24gMjE0NjEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsOSBAQAogI2luY2x1ZGUg
IkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCi0jaW5jbHVkZSAi
SlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgogI2luY2x1ZGUgIk1hdGhDb21tb24uaCIKICNp
bmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlNwZWNp
YWxpemVkVGh1bmtKSVQuaCIKLSNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogI2luY2x1
ZGUgPHd0Zi9JbmxpbmVBU00uaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CkBAIC0xMTMzLDQ3ICsxMTMwLDYgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGJvdW5kVGhpc05vQXJnc0Z1bgogICAgICAgICBsaW5rQnVm
ZmVyLCAoIlNwZWNpYWxpemVkIHRodW5rIGZvciBib3VuZCBmdW5jdGlvbiBjYWxscyB3aXRoIG5v
IGFyZ3VtZW50cyIpKTsKIH0KIAotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQot
ewotICAgIENDYWxsSGVscGVycyBqaXQ7Ci0KLSAgICAvLyBUaGUgdGhpbmcgdGhhdCBqdW1wcyBo
ZXJlIG11c3QgbW92ZSBFeGNlcHRpb25UeXBlIGludG8gdGhlIGFyZ3VtZW50R1BSMSBhbmQganVt
cCBoZXJlLgotICAgIC8vIFdlJ3JlIGFsbG93ZWQgdG8gdXNlIHRlbXAgcmVnaXN0ZXJzIGhlcmUs
IGJ1dCBub3QgY2FsbGVlIHNhdmVzLgotICAgIHsKLSAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJl
Z2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLSAgICAg
ICAgdXNlZFJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgaml0
LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKnZtLCB1c2Vk
UmVnaXN0ZXJzKTsKLSAgICB9Ci0KLSAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQubG9hZFdhc21Db250ZXh0KEdQ
UkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQu
Y2FsbCgpOwotICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7Ci0KLSAgICB2b2lk
ICgqdGhyb3dXYXNtRXhjZXB0aW9uKShFeGVjU3RhdGUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIFdhc206OkV4Y2Vw
dGlvblR5cGUgdHlwZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiB3YXNtQ29udGV4dCkgewotICAg
ICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwotICAgICAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHdhc21Db250ZXh0LT5nbG9iYWxPYmplY3QoKTsKLQotICAgICAg
ICAgICAgSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciogZXJyb3IgPSBKU1dlYkFzc2VtYmx5UnVu
dGltZUVycm9yOjpjcmVhdGUoZXhlYywgKnZtLCBnbG9iYWxPYmplY3QtPldlYkFzc2VtYmx5UnVu
dGltZUVycm9yU3RydWN0dXJlKCksIFdhc206OmVycm9yTWVzc2FnZUZvckV4Y2VwdGlvblR5cGUo
dHlwZSkpOwotICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgZXJy
b3IpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7Ci0gICAg
ICAgIEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7Ci0gICAgfTsKLQotICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgbGlua0J1ZmZlci5s
aW5rKGNhbGwsIHRocm93V2FzbUV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
Ci0gICAgICAgIGxpbmtCdWZmZXIsICgiVGhyb3cgZXhjZXB0aW9uIGZyb20gV2FzbSIpKTsKLX0K
LSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gMjE0NjEyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTAgKzY0LDUg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJhbmRvbVRodW5rR2VuZXJhdAogTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHRydW5jVGh1bmtHZW5lcmF0b3IoVk0qKTsKIAogTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSopOwotCi0jaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJv
bVdhc21UaHVua0dlbmVyYXRvcihWTSopOwotI2VuZGlmCi0KIH0KICNlbmRpZiAvLyBFTkFCTEUo
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVh
ZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAJKHJldmlzaW9uIDIxNDYxMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlN0cnVjdHVy
ZUlEVGFibGUuaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKKyNpbmNsdWRlICJXYXNtVGh1
bmtzLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8bXV0ZXg+CiAjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTcwLDYgKzcxLDEwIEBAIHZvaWQgaW5pdGlhbGl6
ZVRocmVhZGluZygpCiAgICAgICAgIGluaXRpYWxpemVTdXBlclNhbXBsZXIoKTsKICAgICAgICAg
V1RGVGhyZWFkRGF0YSYgdGhyZWFkRGF0YSA9IHd0ZlRocmVhZERhdGEoKTsKICAgICAgICAgdGhy
ZWFkRGF0YS5zZXRTYXZlZExhc3RTdGFja1RvcCh0aHJlYWREYXRhLnN0YWNrKCkub3JpZ2luKCkp
OworCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICBXYXNtOjpUaHVua3M6OmluaXRp
YWxpemUoKTsKKyNlbmRpZgogICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyMTQ2MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4Myw3ICsyODMsNiBAQCBWTTo6Vk0o
Vk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAKICNpZiBFTkFCTEUoSklUKQogICAg
IGppdFN0dWJzID0gc3RkOjptYWtlX3VuaXF1ZTxKSVRUaHVua3M+KCk7Ci0gICAgYWxsQ2FsbGVl
U2F2ZVJlZ2lzdGVyT2Zmc2V0cyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVnaXN0ZXJBdE9mZnNldExp
c3Q+KFJlZ2lzdGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKSwgUmVnaXN0ZXJBdE9mZnNl
dExpc3Q6Olplcm9CYXNlZCk7CiAjZW5kaWYKICAgICBhcml0eUNoZWNrRGF0YSA9IHN0ZDo6bWFr
ZV91bmlxdWU8Q29tbW9uU2xvd1BhdGhzOjpBcml0eUNoZWNrRGF0YT4oKTsKIApAQCAtOTM5LDQg
KzkzOCwxOCBAQCB2b2lkIFZNOjp2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzCiB9CiAj
ZW5kaWYKIAorI2lmIEVOQUJMRShKSVQpCitSZWdpc3RlckF0T2Zmc2V0TGlzdCogVk06OmdldEFs
bENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKQoreworICAgIHN0YXRpYyBSZWdpc3RlckF0T2Zm
c2V0TGlzdCogcmVzdWx0OworCisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGNhbGxlZVNhdmVz
RmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShjYWxsZWVTYXZlc0ZsYWcsIFtdICgpIHsKKyAgICAg
ICAgcmVzdWx0ID0gbmV3IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KFJlZ2lzdGVyU2V0Ojp2bUNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSwgUmVnaXN0ZXJBdE9mZnNldExpc3Q6Olplcm9CYXNlZCk7CisgICAg
fSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZp
c2lvbiAyMTQ2MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NTYsOSArNDU2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaml0
U3R1YnMtPmN0aVN0dWIodGhpcywgZ2VuZXJhdG9yKTsKICAgICB9CiAgICAgCi0gICAgc3RkOjp1
bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiBhbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZz
ZXRzOwotICAgIAotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBnZXRBbGxDYWxsZWVTYXZlUmVn
aXN0ZXJPZmZzZXRzKCkgeyByZXR1cm4gYWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cy5nZXQo
KTsgfQorICAgIHN0YXRpYyBSZWdpc3RlckF0T2Zmc2V0TGlzdCogZ2V0QWxsQ2FsbGVlU2F2ZVJl
Z2lzdGVyT2Zmc2V0cygpOwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q29tbW9uU2xvd1BhdGhzOjpBcml0eUNoZWNrRGF0YT4gYXJpdHlDaGVja0RhdGE7CkBA
IC00ODMsNiArNDgxLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihWTSwgdGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOwogICAgIH0KIAorICAgIHN0YXRpYyBwdHJk
aWZmX3QgdG9wVk1FbnRyeUZyYW1lT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoVk0sIHRvcFZNRW50cnlGcmFtZSk7CisgICAgfQorCiAgICAgdm9pZCByZXN0
b3JlUHJldmlvdXNFeGNlcHRpb24oRXhjZXB0aW9uKiBleGNlcHRpb24pIHsgc2V0RXhjZXB0aW9u
KGV4Y2VwdGlvbik7IH0KIAogICAgIHZvaWQgY2xlYXJMYXN0RXhjZXB0aW9uKCkgeyBtX2xhc3RF
eGNlcHRpb24gPSBudWxscHRyOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyMTQ2MTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJXYXNtRnVuY3Rpb25QYXJzZXIuaCIKICNpbmNs
dWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbU9wY29kZU9yaWdpbi5oIgorI2luY2x1
ZGUgIldhc21UaHVua3MuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogdm9pZCBkdW1w
UHJvY2VkdXJlKHZvaWQqIHB0cikKQEAgLTE2MSw3ICsxNjIsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm4gZmFpbChfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwKICAgICB9IHdoaWxl
ICgwKQogCi0gICAgQjNJUkdlbmVyYXRvcihWTSYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwg
UHJvY2VkdXJlJiwgV2FzbUludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4mLCBNZW1vcnlNb2RlKTsKKyAgICBCM0lSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgV2FzbUludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlKTsKIAogICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUqKTsKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7
CkBAIC0yMzIsNyArMjMzLDYgQEAgcHJpdmF0ZToKIAogICAgIE9yaWdpbiBvcmlnaW4oKTsKIAot
ICAgIFZNJiBtX3ZtOwogICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+KiBtX3BhcnNl
cjsKICAgICBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9pbmZvOwogICAgIE1lbW9yeU1vZGUg
bV9tb2RlOwpAQCAtMzAyLDkgKzMwMiw4IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdh
c21Db250ZXh0KFAKICAgICB9KTsKIH0KIAotQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihW
TSYgdm0sIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVy
ZSwgV2FzbUludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUpCi0g
ICAgOiBtX3ZtKHZtKQotICAgICwgbV9pbmZvKGluZm8pCitCM0lSR2VuZXJhdG9yOjpCM0lSR2Vu
ZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHByb2NlZHVy
ZSwgV2FzbUludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUpCisg
ICAgOiBtX2luZm8oaW5mbykKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9wcm9jKHByb2Nl
ZHVyZSkKICAgICAsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHModW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHMpCkBAIC0zNzYsOSArMzc1LDggQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0RXhjZXB0
aW9uQ2hlY2soQwogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PHVpbnQzMl90Pih0eXBlKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgYXV0
byBqdW1wVG9FeGNlcHRpb25TdHViID0gaml0Lmp1bXAoKTsKIAotICAgIFZNKiB2bSA9ICZtX3Zt
OwotICAgIGppdC5hZGRMaW5rVGFzayhbdm0sIGp1bXBUb0V4Y2VwdGlvblN0dWJdIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9FeGNlcHRp
b25TdHViLCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIGppdC5hZGRMaW5rVGFzayhbanVt
cFRvRXhjZXB0aW9uU3R1Yl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGp1bXBUb0V4Y2VwdGlvblN0dWIsIENvZGVMb2NhdGlvbkxhYmVsKFRodW5r
czo6c2luZ2xldG9uKCkuc3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3Ip
LmNvZGUoKSkpOwogICAgIH0pOwogfQogCkBAIC00NDMsOCArNDQxLDggQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRVbnJlYWNoYWJsZSgpIC0+IAogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEdy
b3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBpbnQzMl90ICgqZ3Jvd01lbW9yeSkgKEV4ZWNTdGF0ZSos
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIGludDMyX3QpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiB3YXNtQ29udGV4dCwgaW50MzJfdCBkZWx0YSkgLT4gaW50
MzJfdCB7Ci0gICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgaW50MzJfdCAoKmdyb3dN
ZW1vcnkpIChDb250ZXh0KiwgaW50MzJfdCkgPSBbXSAoQ29udGV4dCogd2FzbUNvbnRleHQsIGlu
dDMyX3QgZGVsdGEpIC0+IGludDMyX3QgeworICAgICAgICBWTSYgdm0gPSAqd2FzbUNvbnRleHQt
PnZtKCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgICAgICBKU1dlYkFzc2VtYmx5TWVtb3J5KiB3YXNtTWVtb3J5ID0gd2FzbUNvbnRleHQtPm1l
bW9yeSgpOwpAQCAtNDUzLDcgKzQ1MSw5IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01l
bW9yeShFeHByZXMKICAgICAgICAgICAgIHJldHVybiAtMTsKIAogICAgICAgICBib29sIHNob3Vs
ZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSA9IGZhbHNlOwotICAgICAgICBQYWdlQ291bnQgcmVz
dWx0ID0gd2FzbU1lbW9yeS0+Z3JvdyhleGVjLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGVsdGEp
LCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpOworICAgICAgICAvLyBncm93KCkgZG9l
cyBub3QgcmVxdWlyZSBFeGVjU3RhdGUqIGlmIGl0IGRvZXNuJ3QgdGhyb3cgZXhjZXB0aW9ucy4K
KyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gbnVsbHB0cjsgCisgICAgICAgIFBhZ2VDb3VudCBy
ZXN1bHQgPSB3YXNtTWVtb3J5LT5ncm93KHZtLCBleGVjLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
ZGVsdGEpLCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpOwogICAgICAgICBSRUxFQVNF
X0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAg
ICAgICAgIHJldHVybiAtMTsKQEAgLTQ2Myw3ICs0NjMsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZEdyb3dNZW1vcnkoRXhwcmVzCiAKICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLAogICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGJp
dHdpc2VfY2FzdDx2b2lkKj4oZ3Jvd01lbW9yeSkpLAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4oKSks
IG1faW5zdGFuY2VWYWx1ZSwgZGVsdGEpOworICAgICAgICBtX2luc3RhbmNlVmFsdWUsIGRlbHRh
KTsKIAogICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKG1faW5mby5tZW1vcnksIG1f
aW5zdGFuY2VWYWx1ZSwgbV9wcm9jLCBtX2N1cnJlbnRCbG9jayk7CiAKQEAgLTEyNzcsNyArMTI3
Nyw3IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW4KICAgICAgICAg
ICAgIG91dC5wcmludCgiV2FzbTogIiwgYml0d2lzZV9jYXN0PE9wY29kZU9yaWdpbj4ob3JpZ2lu
KSk7CiAgICAgfSk7CiAKLSAgICBCM0lSR2VuZXJhdG9yIGNvbnRleHQodm0sIGluZm8sIHByb2Nl
ZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSk7CisgICAg
QjNJUkdlbmVyYXRvciBjb250ZXh0KGluZm8sIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxp
bmtlZFdhc21Ub1dhc21DYWxscywgbW9kZSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVy
YXRvcj4gcGFyc2VyKCZ2bSwgY29udGV4dCwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgs
IHNpZ25hdHVyZSwgaW5mbywgbW9kdWxlU2lnbmF0dXJlSW5kaWNlc1RvVW5pcXVlZFNpZ25hdHVy
ZUluZGljZXMpOwogICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VyLnBhcnNlKCkp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5k
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1
bHRTaWduYWxIYW5kbGVyLmNwcAkocmV2aXNpb24gMjE0NjEyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldhc21FeGNlcHRpb25U
eXBlLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgIldhc21UaHVua3MuaCIK
IAogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CkBAIC00OSw3ICs1
MCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZFNpZ0J1c0hhbmRsZXIKIHN0YXRpYyBz
dHJ1Y3Qgc2lnYWN0aW9uIG9sZFNpZ1NlZ3ZIYW5kbGVyOwogc3RhdGljIGJvb2wgZmFzdEhhbmRs
ZXJJbnN0YWxsZWQgeyBmYWxzZSB9Owogc3RhdGljIFN0YXRpY0xvY2sgY29kZUxvY2F0aW9uc0xv
Y2s7Ci1zdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8c3RkOjp0dXBsZTxWTSosIHZv
aWQqLCB2b2lkKj4+PiBjb2RlTG9jYXRpb25zOyAvLyAodm0sIHN0YXJ0LCBlbmQpCitzdGF0aWMg
TGF6eU5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8c3RkOjp0dXBsZTx2b2lkKiwgdm9pZCo+Pj4gY29k
ZUxvY2F0aW9uczsgLy8gKHN0YXJ0LCBlbmQpCiAKIHN0YXRpYyB2b2lkIHRyYXBIYW5kbGVyKGlu
dCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpCiB7CkBAIC04MSwx
NCArODIsMTMgQEAgc3RhdGljIHZvaWQgdHJhcEhhbmRsZXIoaW50IHNpZ25hbCwgc2lnaQogICAg
ICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgImZvdW5kIGFjdGl2ZSBmYXN0IG1lbW9yeSBm
b3IgZmF1bHRpbmcgYWRkcmVzcyIpOwogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoY29k
ZUxvY2F0aW9uc0xvY2spOwogICAgICAgICAgICAgZm9yIChhdXRvIHJhbmdlIDogY29kZUxvY2F0
aW9ucy5nZXQoKSkgewotICAgICAgICAgICAgICAgIFZNKiB2bTsKICAgICAgICAgICAgICAgICB2
b2lkKiBzdGFydDsKICAgICAgICAgICAgICAgICB2b2lkKiBlbmQ7Ci0gICAgICAgICAgICAgICAg
c3RkOjp0aWUodm0sIHN0YXJ0LCBlbmQpID0gcmFuZ2U7CisgICAgICAgICAgICAgICAgc3RkOjp0
aWUoc3RhcnQsIGVuZCkgPSByYW5nZTsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAiZnVuY3Rpb24gc3RhcnQ6ICIsIFJhd1BvaW50ZXIoc3RhcnQpLCAiIGVuZDogIiwgUmF3
UG9pbnRlcihlbmQpKTsKICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPD0gZmF1bHRpbmdJbnN0
cnVjdGlvbiAmJiBmYXVsdGluZ0luc3RydWN0aW9uIDwgZW5kKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJmb3VuZCBtYXRjaCIpOwotICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhjZXB0aW9uU3R1YiA9IHZtLT5qaXRTdHVicy0+
ZXhpc3RpbmdDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcik7Cisg
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBleGNlcHRpb25TdHViID0g
VGh1bmtzOjpzaW5nbGV0b24oKS5leGlzdGluZ1N0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRo
dW5rR2VuZXJhdG9yKTsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgZm9yIHdoYXRldmVyIHJl
YXNvbiB3ZSBkb24ndCBoYXZlIGEgc3R1YiB0aGVuIHdlIHNob3VsZCBqdXN0IHRyZWF0IHRoaXMg
bGlrZSBhIHJlZ3VsYXIgY3Jhc2guCiAgICAgICAgICAgICAgICAgICAgIGlmICghZXhjZXB0aW9u
U3R1YikKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA4LDIwICsxMDgsMjAg
QEAgc3RhdGljIHZvaWQgdHJhcEhhbmRsZXIoaW50IHNpZ25hbCwgc2lnaQogICAgICAgICBzaWdh
Y3Rpb24oc2lnbmFsLCAmb2xkU2lnU2VndkhhbmRsZXIsIG51bGxwdHIpOwogfQogCi12b2lkIHJl
Z2lzdGVyQ29kZShWTSYgdm0sIHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpCit2b2lkIHJlZ2lzdGVy
Q29kZSh2b2lkKiBzdGFydCwgdm9pZCogZW5kKQogewogICAgIGlmICghZmFzdE1lbW9yeUVuYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIExvY2tIb2xkZXIgbG9ja2VyKGNvZGVMb2NhdGlv
bnNMb2NrKTsKLSAgICBjb2RlTG9jYXRpb25zLT5hZGQoc3RkOjptYWtlX3R1cGxlKCZ2bSwgc3Rh
cnQsIGVuZCkpOworICAgIGNvZGVMb2NhdGlvbnMtPmFkZChzdGQ6Om1ha2VfdHVwbGUoc3RhcnQs
IGVuZCkpOwogfQogCi12b2lkIHVucmVnaXN0ZXJDb2RlKFZNJiB2bSwgdm9pZCogc3RhcnQsIHZv
aWQqIGVuZCkKK3ZvaWQgdW5yZWdpc3RlckNvZGUodm9pZCogc3RhcnQsIHZvaWQqIGVuZCkKIHsK
ICAgICBpZiAoIWZhc3RNZW1vcnlFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihjb2RlTG9jYXRpb25zTG9jayk7Ci0gICAgY29kZUxvY2F0aW9ucy0+cmVt
b3ZlKHN0ZDo6bWFrZV90dXBsZSgmdm0sIHN0YXJ0LCBlbmQpKTsKKyAgICBjb2RlTG9jYXRpb25z
LT5yZW1vdmUoc3RkOjptYWtlX3R1cGxlKHN0YXJ0LCBlbmQpKTsKIH0KIAogYm9vbCBmYXN0TWVt
b3J5RW5hYmxlZCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRT
aWduYWxIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZhdWx0U2lnbmFsSGFuZGxlci5oCShyZXZpc2lvbiAyMTQ2MTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDggKzMxLDggQEAgY2xhc3MgVk07CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAotdm9pZCBy
ZWdpc3RlckNvZGUoVk0mLCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKLXZvaWQgdW5yZWdpc3Rl
ckNvZGUoVk0mLCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKTsKK3ZvaWQgcmVnaXN0ZXJDb2RlKHZv
aWQqIHN0YXJ0LCB2b2lkKiBlbmQpOwordm9pZCB1bnJlZ2lzdGVyQ29kZSh2b2lkKiBzdGFydCwg
dm9pZCogZW5kKTsKIAogYm9vbCBmYXN0TWVtb3J5RW5hYmxlZCgpOwogSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBlbmFibGVGYXN0TWVtb3J5KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTWVtb3J5LmNwcAkocmV2aXNpb24gMjE0NjEyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcg
QEAKIAogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5o
IgorI2luY2x1ZGUgIldhc21UaHVua3MuaCIKIAogI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4K
ICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTEzMSw3ICsxMzIsNyBAQCBpbmxp
bmUgYm9vbCB0cnlHZXRGYXN0TWVtb3J5KFZNJiB2bSwgdm9pCiAgICAgICAgIHJldHVybiBmYWls
KCk7CiAKICAgICAvLyBXZSBuZWVkIHRvIGJlIHN1cmUgd2UgaGF2ZSBhIHN0dWIgcHJpb3IgdG8g
cnVubmluZyBjb2RlLgotICAgIGlmIChVTkxJS0VMWSghdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2Vw
dGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpLnNpemUoKSkpCisgICAgaWYgKFVOTElLRUxZKCFU
aHVua3M6OnNpbmdsZXRvbigpLnN0dWIodGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJh
dG9yKSkpCiAgICAgICAgIHJldHVybiBmYWlsKCk7CiAKICAgICBBU1NFUlQoYWxsb2NhdGVkRmFz
dE1lbW9yaWVzIDw9IG1heEZhc3RNZW1vcmllcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVGh1bmtzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtVGh1bmtzLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJGcmFtZVRyYWNl
cnMuaCIKKyNpbmNsdWRlICJIZWFwQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKSVRFeGNlcHRp
b25zLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNs
dWRlICJXYXNtQ29udGV4dC5oIgorI2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB0
aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IoKQoreworICAgIENDYWxsSGVscGVy
cyBqaXQ7CisKKyAgICAvLyBUaGUgdGhpbmcgdGhhdCBqdW1wcyBoZXJlIG11c3QgbW92ZSBFeGNl
cHRpb25UeXBlIGludG8gdGhlIGFyZ3VtZW50R1BSMSBiZWZvcmUganVtcGluZyBoZXJlLgorICAg
IC8vIFdlJ3JlIGFsbG93ZWQgdG8gdXNlIHRlbXAgcmVnaXN0ZXJzIGhlcmUuIFdlIGFyZSBub3Qg
YWxsb3dlZCB0byB1c2UgY2FsbGVlIHNhdmVzLgorICAgIGppdC5sb2FkV2FzbUNvbnRleHQoR1BS
SW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBDb250ZXh0OjpvZmZzZXRPZlZNKCkpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOworICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgaml0Lm1vdmUoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOworICAgIGppdC5qdW1wKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKKyAgICBqaXQuYnJlYWtwb2ludCgpOyAvLyBXZSBzaG91bGQgbm90
IHJlYWNoIHRoaXMuCisKKyAgICB2b2lkKiAoKnRocm93V2FzbUV4Y2VwdGlvbikoRXhlY1N0YXRl
KiwgV2FzbTo6RXhjZXB0aW9uVHlwZSwgV2FzbTo6Q29udGV4dCopID0gW10gKEV4ZWNTdGF0ZSog
ZXhlYywgV2FzbTo6RXhjZXB0aW9uVHlwZSB0eXBlLCBXYXNtOjpDb250ZXh0KiB3YXNtQ29udGV4
dCkgLT4gdm9pZCogeworICAgICAgICBWTSogdm0gPSB3YXNtQ29udGV4dC0+dm0oKTsKKyAgICAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICAgICAgewor
ICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwor
ICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHdhc21Db250ZXh0LT5n
bG9iYWxPYmplY3QoKTsKKworICAgICAgICAgICAgSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciog
ZXJyb3IgPSBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yOjpjcmVhdGUoCisgICAgICAgICAgICAg
ICAgZXhlYywgKnZtLCBnbG9iYWxPYmplY3QtPldlYkFzc2VtYmx5UnVudGltZUVycm9yU3RydWN0
dXJlKCksIFdhc206OmVycm9yTWVzc2FnZUZvckV4Y2VwdGlvblR5cGUodHlwZSkpOworICAgICAg
ICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgZXJyb3IpOworICAgICAgICB9
CisKKyAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CisgICAgICAgIEFTU0VSVCghIXZt
LT5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgICAgIEFTU0VSVCghIXZtLT50YXJnZXRNYWNoaW5l
UENGb3JUaHJvdyk7CisgICAgICAgIHJldHVybiB2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7
CisgICAgfTsKKworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCk7CisgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJUaHJvdyBleGNlcHRpb24gZnJvbSBX
YXNtIikpOworfQorCitzdGF0aWMgVGh1bmtzKiB0aHVua3M7Cit2b2lkIFRodW5rczo6aW5pdGlh
bGl6ZSgpCit7CisgICAgdGh1bmtzID0gbmV3IFRodW5rczsKK30KKworVGh1bmtzJiBUaHVua3M6
OnNpbmdsZXRvbigpCit7CisgICAgQVNTRVJUKHRodW5rcyk7CisgICAgcmV0dXJuICp0aHVua3M7
Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBUaHVua3M6OnN0dWIoVGh1bmtHZW5lcmF0b3Ig
Z2VuZXJhdG9yKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKworICAg
IEFTU0VSVCghIWdlbmVyYXRvcik7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX3N0dWJzLmFkZChn
ZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpKTsKKyAgICBpZiAoYWRkUmVzdWx0Lmlz
TmV3RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBnZW5lcmF0b3Io
KTsKKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKK30KKworTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIFRodW5rczo6ZXhpc3RpbmdTdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRv
cikKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKKyAgICBhdXRvIGl0
ZXIgPSBtX3N0dWJzLmZpbmQoZ2VuZXJhdG9yKTsKKyAgICBpZiAoaXRlciAhPSBtX3N0dWJzLmVu
ZCgpKQorICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CisKKyAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVRodW5rcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcigpOworCit0eXBlZGVmIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiAoKlRodW5rR2VuZXJhdG9yKSgpOworCitjbGFzcyBUaHVua3Mg
eworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKKyAgICBzdGF0aWMgVGh1
bmtzJiBzaW5nbGV0b24oKTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViKFRodW5r
R2VuZXJhdG9yKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhpc3RpbmdTdHViKFRodW5r
R2VuZXJhdG9yKTsKKworcHJpdmF0ZToKKyAgICBUaHVua3MoKSA9IGRlZmF1bHQ7CisKKyAgICBI
YXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1fc3R1YnM7Cisg
ICAgTG9jayBtX2xvY2s7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAJKHJldmlzaW9uIDIxNDYx
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxMyArNDQsMTMgQEAgdm9pZCBKU1dlYkFzc2VtYmx5
Q2FsbGVlOjpmaW5pc2hDcmVhdGlvbgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKIAog
ICAgIG1fZW50cnlwb2ludCA9IFdURk1vdmUoZW50cnlwb2ludCk7Ci0gICAgV2FzbTo6cmVnaXN0
ZXJDb2RlKHZtLCBtX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxl
TWVtb3J5KCktPnN0YXJ0KCksIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4
ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOworICAgIFdhc206OnJlZ2lzdGVyQ29kZShtX2VudHJ5
cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCks
IG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+
ZW5kKCkpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlDYWxsZWU6OmRlc3Ryb3koSlNDZWxsKiBj
ZWxsKQogewogICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2Fz
dDxKU1dlYkFzc2VtYmx5Q2FsbGVlKj4oY2VsbCk7Ci0gICAgV2FzbTo6dW5yZWdpc3RlckNvZGUo
KmNlbGwtPnZtKCksIHRoaXNPYmplY3QtPm1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZVJl
ZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKSwgdGhpc09iamVjdC0+bV9lbnRyeXBvaW50
LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKSk7CisgICAg
V2FzbTo6dW5yZWdpc3RlckNvZGUodGhpc09iamVjdC0+bV9lbnRyeXBvaW50LmNvbXBpbGF0aW9u
LT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLCB0aGlzT2JqZWN0LT5tX2Vu
dHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgp
KTsKICAgICB0aGlzT2JqZWN0LT5KU1dlYkFzc2VtYmx5Q2FsbGVlOjp+SlNXZWJBc3NlbWJseUNh
bGxlZSgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDIxNDYxMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAgU3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OmNyZWF0ZQogCiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OkpTV2ViQXNzZW1ibHlJbnN0
YW5jZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBudW1JbXBvcnRGdW5j
dGlvbnMpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX3ZtKCZ2bSkKICAgICAs
IG1fbnVtSW1wb3J0RnVuY3Rpb25zKG51bUltcG9ydEZ1bmN0aW9ucykKIHsKICAgICBtZW1zZXQo
aW1wb3J0RnVuY3Rpb25zKCksIDAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zICogc2l6ZW9mKFdyaXRl
QmFycmllcjxKU09iamVjdD4pKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCShyZXZpc2lvbiAyMTQ2MTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZlRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSwgbV90YWJsZSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2Fs
bGVlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9j
YWxsZWUpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkdsb2JhbHMoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX2dsb2JhbHMpOyB9Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlZNKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV92bSk7IH0KICAgICBzdGF0aWMgc2l6ZV90IG9mZnNl
dE9mSW1wb3J0RnVuY3Rpb25zKCkgeyByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNp
emVvZihXcml0ZUJhcnJpZXI8SlNDZWxsPik+KHNpemVvZihKU1dlYkFzc2VtYmx5SW5zdGFuY2Up
KTsgfQogICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihzaXplX3QgaW1w
b3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkgKyBpbXBv
cnRGdW5jdGlvbk51bSAqIHNpemVvZihzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pKTsgfQog
CkBAIC05Myw2ICs5NCw3IEBAIHByb3RlY3RlZDoKICAgICB9CiAKIHByaXZhdGU6CisgICAgVk0q
IG1fdm07CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiogaW1wb3J0RnVuY3Rpb25zKCkgeyBy
ZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxKU09iamVjdD4qPihiaXR3aXNlX2Nhc3Q8
Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSk7IH0KIAogICAgIFdyaXRl
QmFycmllcjxKU1dlYkFzc2VtYmx5TW9kdWxlPiBtX21vZHVsZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCShy
ZXZpc2lvbiAyMTQ2MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TWVtb3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsOSArNzMsOSBAQCBKU0FycmF5
QnVmZmVyKiBKU1dlYkFzc2VtYmx5TWVtb3J5OjpidWZmCiAgICAgcmV0dXJuIG1fYnVmZmVyV3Jh
cHBlci5nZXQoKTsKIH0KIAotV2FzbTo6UGFnZUNvdW50IEpTV2ViQXNzZW1ibHlNZW1vcnk6Omdy
b3coRXhlY1N0YXRlKiBleGVjLCB1aW50MzJfdCBkZWx0YSwgYm9vbCBzaG91bGRUaHJvd0V4Y2Vw
dGlvbnNPbkZhaWx1cmUpCitXYXNtOjpQYWdlQ291bnQgSlNXZWJBc3NlbWJseU1lbW9yeTo6Z3Jv
dyhWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgdWludDMyX3QgZGVsdGEsIGJvb2wgc2hvdWxkVGhy
b3dFeGNlcHRpb25zT25GYWlsdXJlKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
Ly8gTm90ZTogV2UgY2FuIG9ubHkgdXNlIGV4ZWMgaWYgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25G
YWlsdXJlIGlzIHRydWUuCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICBXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50ID0gbWVtb3J5KCkuc2l6
ZUluUGFnZXMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlNZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgJKHJldmlzaW9uIDIxNDYxMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAkod29ya2luZyBjb3B5KQpA
QCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAKICAgICBXYXNtOjpNZW1vcnkmIG1lbW9yeSgpIHsg
cmV0dXJuIG1fbWVtb3J5LmdldCgpOyB9CiAgICAgSlNBcnJheUJ1ZmZlciogYnVmZmVyKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqKTsKLSAgICBXYXNtOjpQYWdlQ291bnQgZ3JvdyhFeGVjU3RhdGUq
LCB1aW50MzJfdCBkZWx0YSwgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUpOwor
ICAgIFdhc206OlBhZ2VDb3VudCBncm93KFZNJiwgRXhlY1N0YXRlKiwgdWludDMyX3QgZGVsdGEs
IGJvb2wgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJlKTsKIAogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3Nl
bWJseU1lbW9yeSwgbV9tZW1vcnlCYXNlKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlNZW1vcnksIG1f
bWVtb3J5U2l6ZSk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIx
NDYxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB7IH0pOwogCiAgICAgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1
cmUgPSB0cnVlOwotICAgIFdhc206OlBhZ2VDb3VudCByZXN1bHQgPSBtZW1vcnktPmdyb3coZXhl
YywgZGVsdGEsIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSk7CisgICAgV2FzbTo6UGFn
ZUNvdW50IHJlc3VsdCA9IG1lbW9yeS0+Z3Jvdyh2bSwgZXhlYywgZGVsdGEsIHNob3VsZFRocm93
RXhjZXB0aW9uc09uRmFpbHVyZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihyZXN1bHQucGFn
ZUNvdW50KCkpKTsK
</data>
<flag name="review"
          id="327314"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305927</attachid>
            <date>2017-03-30 17:04:26 -0700</date>
            <delta_ts>2017-03-30 18:15:29 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>42686</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE0NjM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBA
CisyMDE3LTAzLTMwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFdlYkFzc2VtYmx5OiBXaGVuIFdhc20gY2FsbHMgdG8gQywgaXQgc2hvdWxkIHVzZSBXYXNtOjpD
b250ZXh0KiBpbnN0ZWFkIG9mIEV4ZWNTdGF0ZSogdG8gZ2V0IFZNCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAxODUKKworICAgICAgICBSZXZpZXdl
ZCBieSBNaWNoYWVsIFNhYm9mZi4KKworICAgICAgICBUaGlzIGlzIG9uZSBtb3JlIHN0ZXAgaW4g
dGhlIGRpcmVjdGlvbiBvZiBQSUMtaWZpZWQgV2FzbS4KKyAgICAgICAgV2hlbiB3ZSBsaWZ0IFdh
c21DYWxsZWUgYWJvdmUgVk0sIHdlIHdpbGwgbm8gbG9uZ2VyIGJlCisgICAgICAgIGFibGUgdG8g
Z2V0IFZNIGZyb20gRXhlY1N0YXRlKi4gVGhpcyBwYXRjaCBlbnN1cmVzIHRoYXQKKyAgICAgICAg
d2UgZG9uJ3QgZG8gdGhhdCBmcm9tIHdpdGhpbiB0aGUgV2FzbSBydW50aW1lLiBJbnN0ZWFkLAor
ICAgICAgICB3ZSB1c2UgdGhlIFdhc206OkNvbnRleHQqIHRvIGdldCB0aGUgVk0uCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBhbHNvIGFkZHMgYSBuZXcgY2xhc3MsIFdhc206OlRodW5rcy4gVGhlcmUK
KyAgICAgICAgaXMgYSBzaW5nbGUgV2FzbTo6VGh1bmtzIHRoYXQgbGl2ZXMgaW4gdGhlIHByb2Nl
c3MuIEl0CisgICAgICAgIGlzIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIGEgdGh1bmsgdGhh
dCBXYXNtIHJlbGllcyBvbi4KKyAgICAgICAgVGhlIG9ubHkgc3VjaCB0aHVuayByaWdodCBub3cg
aXMgdGhlIGV4Y2VwdGlvbiB0aHJvd2luZworICAgICAgICB0aHVuay4KKworICAgICAgICBUaGlz
IHBhdGNoIGFsc28gcmlkcyBXYXNtRmF1bHRTaWduYWxIYW5kbGVyIGZyb20gYW55IGtub3dsZWRn
ZQorICAgICAgICBvZiBWTS4gUHJldmlvdXNseSwgaXQgcmVsaWVkIG9uIFZNIHRvIGdldCB0aGUg
ZXhjZXB0aW9uIGhhbmRsaW5nCisgICAgICAgIHRodW5rLgorCisgICAgICAgIFRoZSBvbmx5IHBh
cnQgb2YgdGhlIFdhc20gcnVudGltZSB0aGF0IHdpbGwgYmUgYWxsb3dlZAorICAgICAgICB0byBn
ZXQgVk0mIGZyb20gRXhlY1N0YXRlIHdpbGwgYmUgV2FzbUJpbmRpbmcuIEluIHRoZQorICAgICAg
ICBmdXR1cmUsIHdlIHBsYW4gdG8ga2VlcCB0aGUgY2FsbHMgb3V0IHRvIEpTIHRvIGtlZXAKKyAg
ICAgICAgYSBKU0NlbGwgYXMgdGhlIGNhbGxlZS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGZ0bC9G
VExPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToK
KyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OlVu
d2luZEZ1bmN0b3I6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y29weUNhbGxlZVNh
dmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKToKKyAgICAgICAgKiBqaXQv
VGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tV2Fz
bVRodW5rR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3Jz
Lmg6CisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAg
KEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6Cisg
ICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgIChKU0M6OlZNOjpnZXRBbGxDYWxsZWVTYXZl
UmVnaXN0ZXJPZmZzZXRzKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6
OlZNOjp0b3BWTUVudHJ5RnJhbWVPZmZzZXQpOgorICAgICAgICAoSlNDOjpWTTo6Z2V0QWxsQ2Fs
bGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cyk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRF
eGNlcHRpb25DaGVjayk6CisgICAgICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6dHJhcEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2Fz
bU1lbW9yeS5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRyeUdldEZhc3RNZW1vcnkpOgorICAg
ICAgICAqIHdhc20vV2FzbVRodW5rcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjp0
aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNt
OjpUaHVua3M6OmluaXRpYWxpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUaHVua3M6OnNpbmds
ZXRvbik6CisgICAgICAgIChKU0M6Oldhc206OlRodW5rczo6c3R1Yik6CisgICAgICAgIChKU0M6
Oldhc206OlRodW5rczo6ZXhpc3RpbmdTdHViKToKKyAgICAgICAgKiB3YXNtL1dhc21UaHVua3Mu
aDogQWRkZWQuCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaDoKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlZNKToKKyAgICAgICAgKiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
TWVtb3J5Ojpncm93KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaDoK
KyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcDoKKyAgICAg
ICAgKEpTQzo6d2ViQXNzZW1ibHlNZW1vcnlQcm90b0Z1bmNHcm93KToKKwogMjAxNy0wMy0zMCAg
TWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgSW50bE9iamVjdCBzaG91
bGQgbm90IGJlIHVzaW5nIEpTQXJyYXk6OmluaXRpYWxpemVJbmRleCgpLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjE0NjEyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05NDUsNiArOTQ1
LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICB3YXNtL1dhc21QbGFuLmNwcAog
ICAgIHdhc20vV2FzbU9wY29kZU9yaWdpbi5jcHAKICAgICB3YXNtL1dhc21TaWduYXR1cmUuY3Bw
CisgICAgd2FzbS9XYXNtVGh1bmtzLmNwcAogICAgIHdhc20vV2FzbVZhbGlkYXRlLmNwcAogICAg
IHdhc20vV2FzbVdvcmtsaXN0LmNwcAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjE0NjEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzMDUsNiAr
MTMwNSw4IEBACiAJCTQ0NDNBRTMzMTZFMTg4RDkwMDc2RjExMCAvKiBGb3VuZGF0aW9uLmZyYW1l
d29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
RjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKIAkJ
NDUxNTM5QjkxMkRDOTk0NTAwRUY3QUM0IC8qIFlhcnIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MTUzOUI4MTJEQzk5NDUwMEVGN0FDNCAvKiBZYXJy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDcz
REE0QTQ3NjRDNDVGRTg3MUIwNDg1IC8qIERlZmluZVByb3BlcnR5QXR0cmlidXRlcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTY5OTQ4RURFNjhENDA1
NEIwMUVGNzk3IC8qIERlZmluZVByb3BlcnR5QXR0cmlidXRlcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyNTBEMkQxMUU4REEwNUEwMDI5QTkz
MiAvKiBXYXNtVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUyNTBEMkNGMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmNwcCAqLzsg
fTsKKwkJNTI1MEQyRDIxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNTBEMkQwMUU4REEwNUEwMDI5
QTkzMiAvKiBXYXNtVGh1bmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTI2NzhGOEUxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2Nh
dGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MjY3OEY4QzFBMDMxMDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmNwcCAqLzsgfTsK
IAkJNTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI2NzhGOEQxQTAzMTAw
OTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNjc4RjkxMUEwNDE3N0MwMDZBMzA2RCAvKiBD
b250cm9sRmxvd1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MjY3OEY5MDFBMDQxNzdDMDA2QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0z
ODAxLDYgKzM4MDMsOCBAQAogCQk0Q0U5NzhFMzg1QTg0OTgxOTkwNTIxNTMgLyogTW9kdWxlTmFt
ZXNwYWNlQWNjZXNzQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2R1
bGVOYW1lc3BhY2VBY2Nlc3NDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
RjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3Jr
OyBuYW1lID0gRm91bmRhdGlvbi5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJh
bWV3b3Jrcy9Gb3VuZGF0aW9uLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+Ijsg
fTsKIAkJNTFGMEVDMDcwNUM4NkM5QTAwRTZERjFCIC8qIGxpYm9iamMuZHlsaWIgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1v
LmR5bGliIjsgbmFtZSA9IGxpYm9iamMuZHlsaWI7IHBhdGggPSAvdXNyL2xpYi9saWJvYmpjLmR5
bGliOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OworCQk1MjUwRDJDRjFFOERBMDVBMDAy
OUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXYXNtVGh1bmtzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTI1MEQy
RDAxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2FzbVRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MjY3OEY4QzFBMDMxMDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2ljQmxvY2tMb2NhdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNjc4RjhEMUEwMzEwMDkwMDZBMzA2RCAvKiBC
YXNpY0Jsb2NrTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFz
aWNCbG9ja0xvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNjc4Rjkw
MUEwNDE3N0MwMDZBMzA2RCAvKiBDb250cm9sRmxvd1Byb2ZpbGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRyb2xGbG93UHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTYzMDYsNiArNjMxMCw4IEBACiAJCQkJNTNGNDBFODQxRDU4Rjk3NzAw
OTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oICovLAogCQkJCUFENzQzOEJFMUUwNDU3OTIwMEZEMEMy
QSAvKiBXYXNtU2lnbmF0dXJlLmNwcCAqLywKIAkJCQlBRDc0MzhCRjFFMDQ1NzkyMDBGRDBDMkEg
LyogV2FzbVNpZ25hdHVyZS5oICovLAorCQkJCTUyNTBEMkNGMUU4REEwNUEwMDI5QTkzMiAvKiBX
YXNtVGh1bmtzLmNwcCAqLywKKwkJCQk1MjUwRDJEMDFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRo
dW5rcy5oICovLAogCQkJCTUzRkY3RjlBMURCRkQyQjkwMEEyNkNDQyAvKiBXYXNtVmFsaWRhdGUu
Y3BwICovLAogCQkJCTUzRkY3Rjk4MURCRkNEOTAwMEEyNkNDQyAvKiBXYXNtVmFsaWRhdGUuaCAq
LywKIAkJCQk1MzBGQjMwMzFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCAqLywK
QEAgLTg3MDMsNiArODcwOSw3IEBACiAJCQkJNzBCNzkxOTcxQzAyNEEyOTAwMjQ4MUUyIC8qIEdl
bmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEI3OTE5OTFD
MDI0QTI5MDAyNDgxRTIgLyogR2VuZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3MEI3OTE5RDFDMDI0QTU2MDAyNDgxRTIgLyogR2VuZXJhdG9yUHJvdG90eXBlLmx1dC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNTI1MEQyRDIxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDE5MUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmlj
QXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxQTFBQTkwOTExMDBEMzNCMzMg
LyogR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDFC
MUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTEw
MjczLDYgKzEwMjgwLDcgQEAKIAkJCQkwRkREQkZCNTE2NjZFRUQ4MDBDNTVGRUYgLyogREZHVmFy
aWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCREM1MTE1MjI4
RkZEMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjJCREM0QTE1MjI4MDlBMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1MjUwRDJEMTFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1RjE0RUY5MEJCMDBDNzI1MzIgLyogREZHVmly
dHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzk3
RjQxMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGREIyQ0U3MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlz
dC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuY3BwCShyZXZpc2lvbiAyMTQ2MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEyLDcgKzMxMiw3IEBAIHZv
aWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAvLyA2KSBDb3B5IG91
ciBjYWxsZWUgc2F2ZXMgdG8gYnVmZmVyLgogI2lmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVH
SVNURVJTID4gMAogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlv
bnMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLSAgICBSZWdpc3RlckF0T2Zm
c2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSB2bS0+Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zm
c2V0cygpOworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IFZNOjpn
ZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7CiAgICAgUmVnaXN0ZXJTZXQgZG9udFNh
dmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwg
UmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7CiAKICAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0g
cmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5zaXplKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMTQ2MTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwOSw3ICs0MDksNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKIAog
ICAgIFJlZ2lzdGVyU2V0IGFsbEZUTENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmZ0bENhbGxl
ZVNhdmVSZWdpc3RlcnMoKTsKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYmFzZWxpbmVDYWxs
ZWVTYXZlcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAg
UmVnaXN0ZXJBdE9mZnNldExpc3QqIHZtQ2FsbGVlU2F2ZXMgPSB2bS0+Z2V0QWxsQ2FsbGVlU2F2
ZVJlZ2lzdGVyT2Zmc2V0cygpOworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiB2bUNhbGxlZVNh
dmVzID0gVk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKICAgICBSZWdpc3Rl
clNldCB2bUNhbGxlZVNhdmVzVG9Ta2lwID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7
CiAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKICAgICAgICAgaml0LmxvYWRQ
dHIoJnZtLT50b3BWTUVudHJ5RnJhbWUsIEdQUkluZm86OnJlZ1QxKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNp
b24gMjE0NjEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM1LDcgKzYzNSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgVk0mIHZtID0gbV9jYWxsRnJhbWUtPnZtKCk7Ci0g
ICAgICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBhbGxDYWxsZWVTYXZlcyA9IHZtLmdldEFsbENh
bGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKKyAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3Qq
IGFsbENhbGxlZVNhdmVzID0gVk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsK
ICAgICAgICAgUmVnaXN0ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3Rh
Y2tSZWdpc3RlcnMoKTsKICAgICAgICAgaW50cHRyX3QqIGZyYW1lID0gcmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdCo+KG1fY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDIxNDYx
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTgyLDcgKzU4Miw3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0
UmFuZG9tVGh1bmsoVk0KIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpyZXN0b3JlQ2FsbGVlU2F2ZXNG
cm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoVk0mIHZtKQogewogI2lmIE5VTUJFUl9P
Rl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAotICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBh
bGxDYWxsZWVTYXZlcyA9IHZtLmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKKyAg
ICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVl
U2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOwogICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3JlUmVnaXN0
ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7CiAgICAgdW5zaWduZWQgcmVnaXN0
ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVzLT5zaXplKCk7CiAKQEAgLTg3Miw2ICs4NzIsMjkgQEAg
dm9pZCBBc3NlbWJseUhlbHBlcnM6OmRlYnVnQ2FsbChWTSYgdm0sIAogICAgIH0KIH0KIAordm9p
ZCBBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXJJbXBsKEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcikKK3sKKyNpZiBOVU1CRVJfT0Zf
Q0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKFZNRW50
cnlGcmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlck9mZnNldCgpKSwgY2FsbGVlU2F2ZXNC
dWZmZXIpOworCisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0gVk06
OmdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKTsKKyAgICBSZWdpc3RlclNldCBkb250
Q29weVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpOworICAgIHVuc2ln
bmVkIHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxsZWVTYXZlcy0+c2l6ZSgpOworICAgIAorICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKKyAgICAgICAgUmVn
aXN0ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKKyAgICAgICAgaWYg
KGRvbnRDb3B5UmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCisgICAgICAgICAgICBzdG9yZVB0
cihlbnRyeS5yZWcoKS5ncHIoKSwgQWRkcmVzcyhjYWxsZWVTYXZlc0J1ZmZlciwgZW50cnkub2Zm
c2V0KCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RvcmVEb3VibGUoZW50cnkucmVn
KCkuZnByKCksIEFkZHJlc3MoY2FsbGVlU2F2ZXNCdWZmZXIsIGVudHJ5Lm9mZnNldCgpKSk7Cisg
ICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY2FsbGVlU2F2ZXNCdWZmZXIpOworI2VuZGlm
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24g
MjE0NjEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzMzLDI3ICszMzMsMjMgQEAgcHVibGljOgogI2VuZGlmCiAgICAg
fQogCisgICAgLy8gSWYgeW91IHVzZSB0aGlzLCBiZSBhd2FyZSB0aGF0IHZtR1BSIHdpbGwgZ2V0
IHRyYXNoZWQuCisgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKEdQUlJlZyB2bUdQUikKKyAgICB7CisjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZF
U19SRUdJU1RFUlMgPiAwCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyh2bUdQUiwgVk06OnRvcFZN
RW50cnlGcmFtZU9mZnNldCgpKSwgdm1HUFIpOworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbCh2bUdQUik7CisjZWxzZQorICAgICAgICBV
TlVTRURfUEFSQU0odm1HUFIpOworI2VuZGlmCisgICAgfQorCiAgICAgdm9pZCBjb3B5Q2FsbGVl
U2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFZNJiB2bSwgY29uc3QgVGVtcFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzID0geyBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCkgfSkKICAgICB7CiAjaWYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RF
UlMgPiAwCiAgICAgICAgIEdQUlJlZyB0ZW1wMSA9IHVzZWRSZWdpc3RlcnMuZ2V0RnJlZUdQUigw
KTsKLQogICAgICAgICBsb2FkUHRyKCZ2bS50b3BWTUVudHJ5RnJhbWUsIHRlbXAxKTsKLSAgICAg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihWTUVudHJ5RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNC
dWZmZXJPZmZzZXQoKSksIHRlbXAxKTsKLQotICAgICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCog
YWxsQ2FsbGVlU2F2ZXMgPSB2bS5nZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7Ci0g
ICAgICAgIFJlZ2lzdGVyU2V0IGRvbnRDb3B5UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0YWNr
UmVnaXN0ZXJzKCk7Ci0gICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBhbGxDYWxsZWVT
YXZlcy0+c2l6ZSgpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlZ2lzdGVyQ291bnQ7IGkrKykgewotICAgICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRy
eSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChkb250Q29weVJlZ2lz
dGVycy5nZXQoZW50cnkucmVnKCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCi0gICAgICAgICAgICAgICAgc3RvcmVQdHIo
ZW50cnkucmVnKCkuZ3ByKCksIEFkZHJlc3ModGVtcDEsIGVudHJ5Lm9mZnNldCgpKSk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3RvcmVEb3VibGUoZW50cnkucmVnKCkuZnBy
KCksIEFkZHJlc3ModGVtcDEsIGVudHJ5Lm9mZnNldCgpKSk7Ci0gICAgICAgIH0KKyAgICAgICAg
Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwodGVtcDEp
OwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHZtKTsKICAgICAgICAgVU5VU0VEX1BBUkFN
KHVzZWRSZWdpc3RlcnMpOwpAQCAtMzc2LDcgKzM3Miw3IEBAIHB1YmxpYzoKICAgICAgICAgbG9h
ZFB0cigmdm0udG9wVk1FbnRyeUZyYW1lLCB0ZW1wMSk7CiAgICAgICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoVk1FbnRyeUZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KCkpLCB0
ZW1wMSk7CiAKLSAgICAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGFsbENhbGxlZVNhdmVzID0g
dm0uZ2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zmc2V0cygpOworICAgICAgICBSZWdpc3RlckF0
T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBWTTo6Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVy
T2Zmc2V0cygpOwogICAgICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY3VycmVudENhbGxlZVNh
dmVzID0gY29kZUJsb2NrKCktPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKICAgICAgICAgUmVnaXN0
ZXJTZXQgZG9udENvcHlSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsK
ICAgICAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGFsbENhbGxlZVNhdmVzLT5zaXplKCk7
CkBAIC0xNTkxLDYgKzE1ODcsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJvdGVjdGVkOgorICAg
IHZvaWQgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlckltcGwo
R1BSUmVnIGNhbGxlZVNhdmVzQnVmZmVyKTsKKwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7
CiAgICAgQ29kZUJsb2NrKiBtX2Jhc2VsaW5lQ29kZUJsb2NrOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAyMTQ2MTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDEyICszMyw5IEBACiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1
ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKLSNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGlt
ZUVycm9yLmgiCiAjaW5jbHVkZSAiTWF0aENvbW1vbi5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0
ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiU3BlY2lhbGl6ZWRUaHVua0pJVC5oIgot
I2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCiAjaW5jbHVkZSA8d3RmL0lubGluZUFTTS5o
PgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0ltcGwuaD4KQEAgLTExMzMsNDcgKzExMzAsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgYm91bmRUaGlzTm9BcmdzRnVuCiAgICAgICAgIGxpbmtCdWZmZXIsICgiU3BlY2lhbGl6ZWQg
dGh1bmsgZm9yIGJvdW5kIGZ1bmN0aW9uIGNhbGxzIHdpdGggbm8gYXJndW1lbnRzIikpOwogfQog
Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhj
ZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJz
IGppdDsKLQotICAgIC8vIFRoZSB0aGluZyB0aGF0IGp1bXBzIGhlcmUgbXVzdCBtb3ZlIEV4Y2Vw
dGlvblR5cGUgaW50byB0aGUgYXJndW1lbnRHUFIxIGFuZCBqdW1wIGhlcmUuCi0gICAgLy8gV2Un
cmUgYWxsb3dlZCB0byB1c2UgdGVtcCByZWdpc3RlcnMgaGVyZSwgYnV0IG5vdCBjYWxsZWUgc2F2
ZXMuCi0gICAgewotICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOwotICAgICAgICB1c2VkUmVnaXN0ZXJzLnNl
dChHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9W
TUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigqdm0sIHVzZWRSZWdpc3RlcnMpOwotICAgIH0K
LQotICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOwotICAgIGppdC5sb2FkV2FzbUNvbnRleHQoR1BSSW5mbzo6YXJndW1lbnRHUFIy
KTsKLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgaml0Lmp1
bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKLQotICAgIHZvaWQgKCp0aHJvd1dhc21FeGNlcHRp
b24pKEV4ZWNTdGF0ZSosIFdhc206OkV4Y2VwdGlvblR5cGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgV2FzbTo6RXhjZXB0aW9uVHlwZSB0eXBlLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIHdhc21Db250ZXh0KSB7Ci0gICAgICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwotICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
LQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKCp2bSk7Ci0gICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
d2FzbUNvbnRleHQtPmdsb2JhbE9iamVjdCgpOwotCi0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5
UnVudGltZUVycm9yKiBlcnJvciA9IEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3I6OmNyZWF0ZShl
eGVjLCAqdm0sIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1Y3R1cmUo
KSwgV2FzbTo6ZXJyb3JNZXNzYWdlRm9yRXhjZXB0aW9uVHlwZSh0eXBlKSk7Ci0gICAgICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7Ci0gICAgICAgIH0KLQot
ICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKLSAgICAgICAgQVNTRVJUKCEhdm0tPmNh
bGxGcmFtZUZvckNhdGNoKTsKLSAgICB9OwotCi0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGpp
dCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdGhyb3dXYXNt
RXhjZXB0aW9uKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgbGlua0J1ZmZl
ciwgKCJUaHJvdyBleGNlcHRpb24gZnJvbSBXYXNtIikpOwotfQotI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkKLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShy
ZXZpc2lvbiAyMTQ2MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJh
dG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxMCArNjQsNSBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgcmFuZG9tVGh1bmtHZW5lcmF0CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdHJ1bmNUaHVu
a0dlbmVyYXRvcihWTSopOwogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYm91bmRUaGlzTm9Bcmdz
RnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKik7Ci0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9y
KFZNKik7Ci0jZW5kaWYKLQogfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNw
cAkocmV2aXNpb24gMjE0NjEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNp
bmNsdWRlICJPcHRpb25zLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJsZS5oIgogI2luY2x1
ZGUgIlN1cGVyU2FtcGxlci5oIgorI2luY2x1ZGUgIldhc21UaHVua3MuaCIKICNpbmNsdWRlICJX
cml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgpAQCAtNzAsNiArNzEsMTAgQEAgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKICAgICAg
ICAgaW5pdGlhbGl6ZVN1cGVyU2FtcGxlcigpOwogICAgICAgICBXVEZUaHJlYWREYXRhJiB0aHJl
YWREYXRhID0gd3RmVGhyZWFkRGF0YSgpOwogICAgICAgICB0aHJlYWREYXRhLnNldFNhdmVkTGFz
dFN0YWNrVG9wKHRocmVhZERhdGEuc3RhY2soKS5vcmlnaW4oKSk7CisKKyNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCisgICAgICAgIFdhc206OlRodW5rczo6aW5pdGlhbGl6ZSgpOworI2VuZGlmCiAg
ICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlz
aW9uIDIxNDYxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgzLDcgKzI4Myw2IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFw
VHlwZSBoZWFwVHlwZSkKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgaml0U3R1YnMgPSBzdGQ6Om1h
a2VfdW5pcXVlPEpJVFRodW5rcz4oKTsKLSAgICBhbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRz
ID0gc3RkOjptYWtlX3VuaXF1ZTxSZWdpc3RlckF0T2Zmc2V0TGlzdD4oUmVnaXN0ZXJTZXQ6OnZt
Q2FsbGVlU2F2ZVJlZ2lzdGVycygpLCBSZWdpc3RlckF0T2Zmc2V0TGlzdDo6WmVyb0Jhc2VkKTsK
ICNlbmRpZgogICAgIGFyaXR5Q2hlY2tEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxDb21tb25TbG93
UGF0aHM6OkFyaXR5Q2hlY2tEYXRhPigpOwogCkBAIC05MzksNCArOTM4LDE4IEBAIHZvaWQgVk06
OnZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXMKIH0KICNlbmRpZgogCisjaWYgRU5BQkxF
KEpJVCkKK1JlZ2lzdGVyQXRPZmZzZXRMaXN0KiBWTTo6Z2V0QWxsQ2FsbGVlU2F2ZVJlZ2lzdGVy
T2Zmc2V0cygpCit7CisgICAgc3RhdGljIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZXN1bHQ7CisK
KyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgY2FsbGVlU2F2ZXNGbGFnOworICAgIHN0ZDo6Y2Fs
bF9vbmNlKGNhbGxlZVNhdmVzRmxhZywgW10gKCkgeworICAgICAgICByZXN1bHQgPSBuZXcgUmVn
aXN0ZXJBdE9mZnNldExpc3QoUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpLCBS
ZWdpc3RlckF0T2Zmc2V0TGlzdDo6WmVyb0Jhc2VkKTsKKyAgICB9KTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKwogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIxNDYxMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1Niw5
ICs0NTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBqaXRTdHVicy0+Y3RpU3R1Yih0aGlz
LCBnZW5lcmF0b3IpOwogICAgIH0KICAgICAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVnaXN0ZXJB
dE9mZnNldExpc3Q+IGFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHM7Ci0gICAgCi0gICAgUmVn
aXN0ZXJBdE9mZnNldExpc3QqIGdldEFsbENhbGxlZVNhdmVSZWdpc3Rlck9mZnNldHMoKSB7IHJl
dHVybiBhbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzLmdldCgpOyB9CisgICAgc3RhdGljIFJl
Z2lzdGVyQXRPZmZzZXRMaXN0KiBnZXRBbGxDYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7CiAK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb21tb25TbG93UGF0
aHM6OkFyaXR5Q2hlY2tEYXRhPiBhcml0eUNoZWNrRGF0YTsKQEAgLTQ4Myw2ICs0ODEsMTEgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFZNLCB0YXJnZXRNYWNoaW5l
UENGb3JUaHJvdyk7CiAgICAgfQogCisgICAgc3RhdGljIHB0cmRpZmZfdCB0b3BWTUVudHJ5RnJh
bWVPZmZzZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihWTSwgdG9w
Vk1FbnRyeUZyYW1lKTsKKyAgICB9CisKICAgICB2b2lkIHJlc3RvcmVQcmV2aW91c0V4Y2VwdGlv
bihFeGNlcHRpb24qIGV4Y2VwdGlvbikgeyBzZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsgfQogCiAg
ICAgdm9pZCBjbGVhckxhc3RFeGNlcHRpb24oKSB7IG1fbGFzdEV4Y2VwdGlvbiA9IG51bGxwdHI7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAJKHJldmlzaW9uIDIxNDYxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQAog
I2luY2x1ZGUgIldhc21GdW5jdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIK
ICNpbmNsdWRlICJXYXNtT3Bjb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiV2FzbVRodW5rcy5oIgog
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiB2b2lkIGR1bXBQcm9jZWR1cmUodm9pZCogcHRy
KQpAQCAtMTYxLDcgKzE2Miw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBmYWlsKF9f
VkFfQVJHU19fKTsgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKLSAgICBCM0lSR2Vu
ZXJhdG9yKFZNJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBQcm9jZWR1cmUmLCBXYXNtSW50
ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1v
ZGUpOworICAgIEIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBQcm9jZWR1
cmUmLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYsIE1lbW9yeU1vZGUpOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSopOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTIzMiw3ICsyMzMsNiBA
QCBwcml2YXRlOgogCiAgICAgT3JpZ2luIG9yaWdpbigpOwogCi0gICAgVk0mIG1fdm07CiAgICAg
RnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4qIG1fcGFyc2VyOwogICAgIGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiBtX2luZm87CiAgICAgTWVtb3J5TW9kZSBtX21vZGU7CkBAIC0zMDIsOSAr
MzAyLDggQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHQoUAogICAgIH0p
OwogfQogCi1CM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKFZNJiB2bSwgY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBXYXNtSW50ZXJuYWxGdW5j
dGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSkKLSAgICA6IG1fdm0odm0pCi0gICAg
LCBtX2luZm8oaW5mbykKK0IzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBXYXNtSW50ZXJuYWxGdW5j
dGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSkKKyAgICA6IG1faW5mbyhpbmZvKQog
ICAgICwgbV9tb2RlKG1vZGUpCiAgICAgLCBtX3Byb2MocHJvY2VkdXJlKQogICAgICwgbV91bmxp
bmtlZFdhc21Ub1dhc21DYWxscyh1bmxpbmtlZFdhc21Ub1dhc21DYWxscykKQEAgLTM3Niw5ICsz
NzUsOCBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRFeGNlcHRpb25DaGVjayhDCiAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHR5
cGUpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKICAgICBhdXRvIGp1bXBUb0V4Y2VwdGlvblN0
dWIgPSBqaXQuanVtcCgpOwogCi0gICAgVk0qIHZtID0gJm1fdm07Ci0gICAgaml0LmFkZExpbmtU
YXNrKFt2bSwganVtcFRvRXhjZXB0aW9uU3R1Yl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
LSAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb0V4Y2VwdGlvblN0dWIsIENvZGVMb2NhdGlv
bkxhYmVsKHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRv
cikuY29kZSgpKSk7CisgICAgaml0LmFkZExpbmtUYXNrKFtqdW1wVG9FeGNlcHRpb25TdHViXSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRv
RXhjZXB0aW9uU3R1YiwgQ29kZUxvY2F0aW9uTGFiZWwoVGh1bmtzOjpzaW5nbGV0b24oKS5zdHVi
KHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgfSk7
CiB9CiAKQEAgLTQ0Myw4ICs0NDEsOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFVucmVhY2hh
YmxlKCkgLT4gCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9u
VHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewot
ICAgIGludDMyX3QgKCpncm93TWVtb3J5KSAoRXhlY1N0YXRlKiwgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiwgaW50MzJfdCkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIHdhc21Db250ZXh0LCBpbnQzMl90IGRlbHRhKSAtPiBpbnQzMl90IHsKLSAgICAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBpbnQzMl90ICgqZ3Jvd01lbW9yeSkgKENvbnRleHQqLCBp
bnQzMl90KSA9IFtdIChDb250ZXh0KiB3YXNtQ29udGV4dCwgaW50MzJfdCBkZWx0YSkgLT4gaW50
MzJfdCB7CisgICAgICAgIFZNJiB2bSA9ICp3YXNtQ29udGV4dC0+dm0oKTsKICAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgICAgIEpTV2ViQXNzZW1i
bHlNZW1vcnkqIHdhc21NZW1vcnkgPSB3YXNtQ29udGV4dC0+bWVtb3J5KCk7CkBAIC00NTMsNyAr
NDUxLDkgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRHcm93TWVtb3J5KEV4cHJlcwogICAgICAg
ICAgICAgcmV0dXJuIC0xOwogCiAgICAgICAgIGJvb2wgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25G
YWlsdXJlID0gZmFsc2U7Ci0gICAgICAgIFBhZ2VDb3VudCByZXN1bHQgPSB3YXNtTWVtb3J5LT5n
cm93KGV4ZWMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihkZWx0YSksIHNob3VsZFRocm93RXhjZXB0
aW9uc09uRmFpbHVyZSk7CisgICAgICAgIC8vIGdyb3coKSBkb2VzIG5vdCByZXF1aXJlIEV4ZWNT
dGF0ZSogaWYgaXQgZG9lc24ndCB0aHJvdyBleGNlcHRpb25zLgorICAgICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBudWxscHRyOyAKKyAgICAgICAgUGFnZUNvdW50IHJlc3VsdCA9IHdhc21NZW1vcnkt
Pmdyb3codm0sIGV4ZWMsIHN0YXRpY19jYXN0PHVpbnQzMl90PihkZWx0YSksIHNob3VsZFRocm93
RXhjZXB0aW9uc09uRmFpbHVyZSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzY29wZS5leGNl
cHRpb24oKSk7CiAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIC0xOwpA
QCAtNDYzLDcgKzQ2Myw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHBy
ZXMKIAogICAgIHJlc3VsdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4o
bV9wcm9jLCBJbnQzMiwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihn
cm93TWVtb3J5KSksCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVl
PihtX3Byb2MsIEIzOjpGcmFtZVBvaW50ZXIsIG9yaWdpbigpKSwgbV9pbnN0YW5jZVZhbHVlLCBk
ZWx0YSk7CisgICAgICAgIG1faW5zdGFuY2VWYWx1ZSwgZGVsdGEpOwogCiAgICAgcmVzdG9yZVdl
YkFzc2VtYmx5R2xvYmFsU3RhdGUobV9pbmZvLm1lbW9yeSwgbV9pbnN0YW5jZVZhbHVlLCBtX3By
b2MsIG1fY3VycmVudEJsb2NrKTsKIApAQCAtMTI3Nyw3ICsxMjc3LDcgQEAgRXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bgogICAgICAgICAgICAgb3V0LnByaW50KCJXYXNt
OiAiLCBiaXR3aXNlX2Nhc3Q8T3Bjb2RlT3JpZ2luPihvcmlnaW4pKTsKICAgICB9KTsKIAotICAg
IEIzSVJHZW5lcmF0b3IgY29udGV4dCh2bSwgaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCks
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBtb2RlKTsKKyAgICBCM0lSR2VuZXJhdG9yIGNvbnRl
eHQoaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBtb2RlKTsKICAgICBGdW5jdGlvblBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIoJnZtLCBj
b250ZXh0LCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBpbmZvLCBt
b2R1bGVTaWduYXR1cmVJbmRpY2VzVG9VbmlxdWVkU2lnbmF0dXJlSW5kaWNlcyk7CiAgICAgV0FT
TV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZXIucGFyc2UoKSk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3Bw
CShyZXZpc2lvbiAyMTQ2MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1
bHRTaWduYWxIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKICNpbmNsdWRlICJX
YXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbVRodW5rcy5oIgogCiAjaW5jbHVkZSA8c2lnbmFs
Lmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KQEAgLTQ5LDcgKzUwLDcgQEAgc3RhdGljIHN0cnVj
dCBzaWdhY3Rpb24gb2xkU2lnQnVzSGFuZGxlcgogc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gb2xk
U2lnU2VndkhhbmRsZXI7CiBzdGF0aWMgYm9vbCBmYXN0SGFuZGxlckluc3RhbGxlZCB7IGZhbHNl
IH07CiBzdGF0aWMgU3RhdGljTG9jayBjb2RlTG9jYXRpb25zTG9jazsKLXN0YXRpYyBMYXp5TmV2
ZXJEZXN0cm95ZWQ8SGFzaFNldDxzdGQ6OnR1cGxlPFZNKiwgdm9pZCosIHZvaWQqPj4+IGNvZGVM
b2NhdGlvbnM7IC8vICh2bSwgc3RhcnQsIGVuZCkKK3N0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8
SGFzaFNldDxzdGQ6OnR1cGxlPHZvaWQqLCB2b2lkKj4+PiBjb2RlTG9jYXRpb25zOyAvLyAoc3Rh
cnQsIGVuZCkKIAogc3RhdGljIHZvaWQgdHJhcEhhbmRsZXIoaW50IHNpZ25hbCwgc2lnaW5mb190
KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkKIHsKQEAgLTgxLDE0ICs4MiwxMyBAQCBzdGF0aWMg
dm9pZCB0cmFwSGFuZGxlcihpbnQgc2lnbmFsLCBzaWdpCiAgICAgICAgICAgICBkYXRhTG9nTG5J
Zih2ZXJib3NlLCAiZm91bmQgYWN0aXZlIGZhc3QgbWVtb3J5IGZvciBmYXVsdGluZyBhZGRyZXNz
Iik7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihjb2RlTG9jYXRpb25zTG9jayk7CiAg
ICAgICAgICAgICBmb3IgKGF1dG8gcmFuZ2UgOiBjb2RlTG9jYXRpb25zLmdldCgpKSB7Ci0gICAg
ICAgICAgICAgICAgVk0qIHZtOwogICAgICAgICAgICAgICAgIHZvaWQqIHN0YXJ0OwogICAgICAg
ICAgICAgICAgIHZvaWQqIGVuZDsKLSAgICAgICAgICAgICAgICBzdGQ6OnRpZSh2bSwgc3RhcnQs
IGVuZCkgPSByYW5nZTsKKyAgICAgICAgICAgICAgICBzdGQ6OnRpZShzdGFydCwgZW5kKSA9IHJh
bmdlOwogICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJmdW5jdGlvbiBzdGFy
dDogIiwgUmF3UG9pbnRlcihzdGFydCksICIgZW5kOiAiLCBSYXdQb2ludGVyKGVuZCkpOwogICAg
ICAgICAgICAgICAgIGlmIChzdGFydCA8PSBmYXVsdGluZ0luc3RydWN0aW9uICYmIGZhdWx0aW5n
SW5zdHJ1Y3Rpb24gPCBlbmQpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVy
Ym9zZSwgImZvdW5kIG1hdGNoIik7Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBleGNlcHRpb25TdHViID0gdm0tPmppdFN0dWJzLT5leGlzdGluZ0NUSVN0dWIodGhy
b3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4Y2VwdGlvblN0dWIgPSBUaHVua3M6OnNpbmdsZXRvbigp
LmV4aXN0aW5nU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpOwogICAg
ICAgICAgICAgICAgICAgICAvLyBJZiBmb3Igd2hhdGV2ZXIgcmVhc29uIHdlIGRvbid0IGhhdmUg
YSBzdHViIHRoZW4gd2Ugc2hvdWxkIGp1c3QgdHJlYXQgdGhpcyBsaWtlIGEgcmVndWxhciBjcmFz
aC4KICAgICAgICAgICAgICAgICAgICAgaWYgKCFleGNlcHRpb25TdHViKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDgsMjAgKzEwOCwyMCBAQCBzdGF0aWMgdm9pZCB0cmFw
SGFuZGxlcihpbnQgc2lnbmFsLCBzaWdpCiAgICAgICAgIHNpZ2FjdGlvbihzaWduYWwsICZvbGRT
aWdTZWd2SGFuZGxlciwgbnVsbHB0cik7CiB9CiAKLXZvaWQgcmVnaXN0ZXJDb2RlKFZNJiB2bSwg
dm9pZCogc3RhcnQsIHZvaWQqIGVuZCkKK3ZvaWQgcmVnaXN0ZXJDb2RlKHZvaWQqIHN0YXJ0LCB2
b2lkKiBlbmQpCiB7CiAgICAgaWYgKCFmYXN0TWVtb3J5RW5hYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoY29kZUxvY2F0aW9uc0xvY2spOwotICAgIGNvZGVM
b2NhdGlvbnMtPmFkZChzdGQ6Om1ha2VfdHVwbGUoJnZtLCBzdGFydCwgZW5kKSk7CisgICAgY29k
ZUxvY2F0aW9ucy0+YWRkKHN0ZDo6bWFrZV90dXBsZShzdGFydCwgZW5kKSk7CiB9CiAKLXZvaWQg
dW5yZWdpc3RlckNvZGUoVk0mIHZtLCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKQordm9pZCB1bnJl
Z2lzdGVyQ29kZSh2b2lkKiBzdGFydCwgdm9pZCogZW5kKQogewogICAgIGlmICghZmFzdE1lbW9y
eUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIExvY2tIb2xkZXIgbG9ja2VyKGNvZGVM
b2NhdGlvbnNMb2NrKTsKLSAgICBjb2RlTG9jYXRpb25zLT5yZW1vdmUoc3RkOjptYWtlX3R1cGxl
KCZ2bSwgc3RhcnQsIGVuZCkpOworICAgIGNvZGVMb2NhdGlvbnMtPnJlbW92ZShzdGQ6Om1ha2Vf
dHVwbGUoc3RhcnQsIGVuZCkpOwogfQogCiBib29sIGZhc3RNZW1vcnlFbmFibGVkKCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5k
bGVyLmgJKHJldmlzaW9uIDIxNDYxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21GYXVsdFNpZ25hbEhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQCBj
bGFzcyBWTTsKIAogbmFtZXNwYWNlIFdhc20gewogCi12b2lkIHJlZ2lzdGVyQ29kZShWTSYsIHZv
aWQqIHN0YXJ0LCB2b2lkKiBlbmQpOwotdm9pZCB1bnJlZ2lzdGVyQ29kZShWTSYsIHZvaWQqIHN0
YXJ0LCB2b2lkKiBlbmQpOwordm9pZCByZWdpc3RlckNvZGUodm9pZCogc3RhcnQsIHZvaWQqIGVu
ZCk7Cit2b2lkIHVucmVnaXN0ZXJDb2RlKHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpOwogCiBib29s
IGZhc3RNZW1vcnlFbmFibGVkKCk7CiBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGVuYWJsZUZhc3RN
ZW1vcnkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3Bw
CShyZXZpc2lvbiAyMTQ2MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVt
b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiVk0u
aCIKICNpbmNsdWRlICJXYXNtRmF1bHRTaWduYWxIYW5kbGVyLmgiCisjaW5jbHVkZSAiV2FzbVRo
dW5rcy5oIgogCiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgpAQCAtMTMxLDcgKzEzMiw3IEBAIGlubGluZSBib29sIHRyeUdldEZhc3RN
ZW1vcnkoVk0mIHZtLCB2b2kKICAgICAgICAgcmV0dXJuIGZhaWwoKTsKIAogICAgIC8vIFdlIG5l
ZWQgdG8gYmUgc3VyZSB3ZSBoYXZlIGEgc3R1YiBwcmlvciB0byBydW5uaW5nIGNvZGUuCi0gICAg
aWYgKFVOTElLRUxZKCF2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbVdhc21UaHVua0dl
bmVyYXRvcikuc2l6ZSgpKSkKKyAgICBpZiAoVU5MSUtFTFkoIVRodW5rczo6c2luZ2xldG9uKCku
c3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpKSkKICAgICAgICAgcmV0
dXJuIGZhaWwoKTsKIAogICAgIEFTU0VSVChhbGxvY2F0ZWRGYXN0TWVtb3JpZXMgPD0gbWF4RmFz
dE1lbW9yaWVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3Mu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVu
a3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldhc21UaHVua3MuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUg
IkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkZyYW1lVHJhY2Vycy5oIgorI2luY2x1ZGUgIkhl
YXBDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKKyNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGltZUVy
cm9yLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIldhc21Db250ZXh0Lmgi
CisjaW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbVdh
c21UaHVua0dlbmVyYXRvcigpCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworICAgIC8vIFRo
ZSB0aGluZyB0aGF0IGp1bXBzIGhlcmUgbXVzdCBtb3ZlIEV4Y2VwdGlvblR5cGUgaW50byB0aGUg
YXJndW1lbnRHUFIxIGJlZm9yZSBqdW1waW5nIGhlcmUuCisgICAgLy8gV2UncmUgYWxsb3dlZCB0
byB1c2UgdGVtcCByZWdpc3RlcnMgaGVyZS4gV2UgYXJlIG5vdCBhbGxvd2VkIHRvIHVzZSBjYWxs
ZWUgc2F2ZXMuCisgICAgaml0LmxvYWRXYXNtQ29udGV4dChHUFJJbmZvOjphcmd1bWVudEdQUjIp
OworICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVu
dEdQUjIsIENvbnRleHQ6Om9mZnNldE9mVk0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Cisg
ICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bCA9IGppdC5jYWxsKCk7CisgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
ICAgIGppdC5icmVha3BvaW50KCk7IC8vIFdlIHNob3VsZCBub3QgcmVhY2ggdGhpcy4KKworICAg
IHZvaWQqICgqdGhyb3dXYXNtRXhjZXB0aW9uKShFeGVjU3RhdGUqLCBXYXNtOjpFeGNlcHRpb25U
eXBlLCBXYXNtOjpDb250ZXh0KikgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBXYXNtOjpFeGNlcHRp
b25UeXBlIHR5cGUsIFdhc206OkNvbnRleHQqIHdhc21Db250ZXh0KSAtPiB2b2lkKiB7CisgICAg
ICAgIFZNKiB2bSA9IHdhc21Db250ZXh0LT52bSgpOworICAgICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gd2FzbUNvbnRleHQtPmdsb2JhbE9iamVjdCgpOworCisg
ICAgICAgICAgICBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKiBlcnJvciA9IEpTV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3I6OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICBleGVjLCAqdm0sIGdsb2Jh
bE9iamVjdC0+V2ViQXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1Y3R1cmUoKSwgV2FzbTo6ZXJyb3JN
ZXNzYWdlRm9yRXhjZXB0aW9uVHlwZSh0eXBlKSk7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CisgICAgICAgIH0KKworICAgICAgICBnZW5lcmlj
VW53aW5kKHZtLCBleGVjKTsKKyAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNo
KTsKKyAgICAgICAgQVNTRVJUKCEhdm0tPnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKKyAgICAg
ICAgcmV0dXJuIHZtLT50YXJnZXRNYWNoaW5lUENGb3JUaHJvdzsKKyAgICB9OworCisgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBsaW5rQnVmZmVy
LmxpbmsoY2FsbCwgdGhyb3dXYXNtRXhjZXB0aW9uKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShsaW5rQnVmZmVyLCAoIlRocm93IGV4Y2VwdGlvbiBmcm9tIFdhc20iKSk7Cit9CisKK3N0YXRp
YyBUaHVua3MqIHRodW5rczsKK3ZvaWQgVGh1bmtzOjppbml0aWFsaXplKCkKK3sKKyAgICB0aHVu
a3MgPSBuZXcgVGh1bmtzOworfQorCitUaHVua3MmIFRodW5rczo6c2luZ2xldG9uKCkKK3sKKyAg
ICBBU1NFUlQodGh1bmtzKTsKKyAgICByZXR1cm4gKnRodW5rczsKK30KKworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIFRodW5rczo6c3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCit7CisgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCisgICAgQVNTRVJUKCEhZ2VuZXJhdG9y
KTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fc3R1YnMuYWRkKGdlbmVyYXRvciwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmKCkpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAg
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGdlbmVyYXRvcigpOworICAgIHJldHVybiBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgVGh1bmtz
OjpleGlzdGluZ1N0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQoreworICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9sb2NrKTsKKworICAgIGF1dG8gaXRlciA9IG1fc3R1YnMuZmluZChn
ZW5lcmF0b3IpOworICAgIGlmIChpdGVyICE9IG1fc3R1YnMuZW5kKCkpCisgICAgICAgIHJldHVy
biBpdGVyLT52YWx1ZTsKKworICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UaHVua3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtzLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
KworI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIFdhc20geworCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25G
cm9tV2FzbVRodW5rR2VuZXJhdG9yKCk7CisKK3R5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
ICgqVGh1bmtHZW5lcmF0b3IpKCk7CisKK2NsYXNzIFRodW5rcyB7CitwdWJsaWM6CisgICAgc3Rh
dGljIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHN0YXRpYyBUaHVua3MmIHNpbmdsZXRvbigpOwor
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWIoVGh1bmtHZW5lcmF0b3IpOworICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBleGlzdGluZ1N0dWIoVGh1bmtHZW5lcmF0b3IpOworCitwcml2
YXRlOgorICAgIFRodW5rcygpID0gZGVmYXVsdDsKKworICAgIEhhc2hNYXA8VGh1bmtHZW5lcmF0
b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV9zdHViczsKKyAgICBMb2NrIG1fbG9jazsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q2FsbGVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q2FsbGVlLmNwcAkocmV2aXNpb24gMjE0NjEyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDEzICs0NCwxMyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlDYWxsZWU6OmZpbmlzaENyZWF0
aW9uCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogCiAgICAgbV9lbnRyeXBvaW50ID0g
V1RGTW92ZShlbnRyeXBvaW50KTsKLSAgICBXYXNtOjpyZWdpc3RlckNvZGUodm0sIG1fZW50cnlw
b2ludC5jb21waWxhdGlvbi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKSwg
bV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5l
bmQoKSk7CisgICAgV2FzbTo6cmVnaXN0ZXJDb2RlKG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+
Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKSwgbV9lbnRyeXBvaW50LmNvbXBp
bGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKSk7CiB9CiAKIHZvaWQg
SlNXZWJBc3NlbWJseUNhbGxlZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNXZWJB
c3NlbWJseUNhbGxlZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlDYWxs
ZWUqPihjZWxsKTsKLSAgICBXYXNtOjp1bnJlZ2lzdGVyQ29kZSgqY2VsbC0+dm0oKSwgdGhpc09i
amVjdC0+bV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlUmVmKCkuZXhlY3V0YWJsZU1lbW9y
eSgpLT5zdGFydCgpLCB0aGlzT2JqZWN0LT5tX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVS
ZWYoKS5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpKTsKKyAgICBXYXNtOjp1bnJlZ2lzdGVyQ29k
ZSh0aGlzT2JqZWN0LT5tX2VudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGVSZWYoKS5leGVjdXRh
YmxlTWVtb3J5KCktPnN0YXJ0KCksIHRoaXNPYmplY3QtPm1fZW50cnlwb2ludC5jb21waWxhdGlv
bi0+Y29kZVJlZigpLmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOwogICAgIHRoaXNPYmplY3Qt
PkpTV2ViQXNzZW1ibHlDYWxsZWU6On5KU1dlYkFzc2VtYmx5Q2FsbGVlKCk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmNwcAkocmV2aXNpb24gMjE0NjEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEs
NiArNTEsNyBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlCiAKIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6SlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucykKICAgICA6IEJhc2Uo
dm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fdm0oJnZtKQogICAgICwgbV9udW1JbXBvcnRGdW5jdGlv
bnMobnVtSW1wb3J0RnVuY3Rpb25zKQogewogICAgIG1lbXNldChpbXBvcnRGdW5jdGlvbnMoKSwg
MCwgbV9udW1JbXBvcnRGdW5jdGlvbnMgKiBzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0Pikp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmgJKHJldmlzaW9uIDIxNDYxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
OCw2ICs3OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVGFibGUo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX3RhYmxl
KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWxsZWUoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX2NhbGxlZSk7IH0KICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mR2xvYmFscygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fZ2xvYmFscyk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mVk0oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3Rh
bmNlLCBtX3ZtKTsgfQogICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMo
KSB7IHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxK
U0NlbGw+KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkpOyB9CiAgICAgc3RhdGljIHNp
emVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyBy
ZXR1cm4gb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbnMoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6
ZW9mKHNpemVvZihXcml0ZUJhcnJpZXI8SlNDZWxsPikpOyB9CiAKQEAgLTkzLDYgKzk0LDcgQEAg
cHJvdGVjdGVkOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBWTSogbV92bTsKICAgICBXcml0ZUJh
cnJpZXI8SlNPYmplY3Q+KiBpbXBvcnRGdW5jdGlvbnMoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8
V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZz
ZXRPZkltcG9ydEZ1bmN0aW9ucygpKTsgfQogCiAgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1i
bHlNb2R1bGU+IG1fbW9kdWxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAJKHJldmlzaW9uIDIxNDYxMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Myw5ICs3Myw5IEBAIEpTQXJyYXlCdWZmZXIqIEpTV2ViQXNzZW1i
bHlNZW1vcnk6OmJ1ZmYKICAgICByZXR1cm4gbV9idWZmZXJXcmFwcGVyLmdldCgpOwogfQogCi1X
YXNtOjpQYWdlQ291bnQgSlNXZWJBc3NlbWJseU1lbW9yeTo6Z3JvdyhFeGVjU3RhdGUqIGV4ZWMs
IHVpbnQzMl90IGRlbHRhLCBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSkKK1dh
c206OlBhZ2VDb3VudCBKU1dlYkFzc2VtYmx5TWVtb3J5Ojpncm93KFZNJiB2bSwgRXhlY1N0YXRl
KiBleGVjLCB1aW50MzJfdCBkZWx0YSwgYm9vbCBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1
cmUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAvLyBOb3RlOiBXZSBjYW4gb25s
eSB1c2UgZXhlYyBpZiBzaG91bGRUaHJvd0V4Y2VwdGlvbnNPbkZhaWx1cmUgaXMgdHJ1ZS4KICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFdhc206
OlBhZ2VDb3VudCBvbGRQYWdlQ291bnQgPSBtZW1vcnkoKS5zaXplSW5QYWdlcygpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1v
cnkuaAkocmV2aXNpb24gMjE0NjEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1lbW9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1
YmxpYzoKIAogICAgIFdhc206Ok1lbW9yeSYgbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0
KCk7IH0KICAgICBKU0FycmF5QnVmZmVyKiBidWZmZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCop
OwotICAgIFdhc206OlBhZ2VDb3VudCBncm93KEV4ZWNTdGF0ZSosIHVpbnQzMl90IGRlbHRhLCBi
b29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSk7CisgICAgV2FzbTo6UGFnZUNvdW50
IGdyb3coVk0mLCBFeGVjU3RhdGUqLCB1aW50MzJfdCBkZWx0YSwgYm9vbCBzaG91bGRUaHJvd0V4
Y2VwdGlvbnNPbkZhaWx1cmUpOwogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1lbW9y
eSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5TWVtb3J5LCBtX21lbW9y
eUJhc2UpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseU1lbW9yeSwgbV9tZW1vcnlTaXplKTsgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TWVtb3J5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjE0NjEyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNZW1vcnlQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
d2ViQXNzZW1ibHkKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAK
ICAgICBib29sIHNob3VsZFRocm93RXhjZXB0aW9uc09uRmFpbHVyZSA9IHRydWU7Ci0gICAgV2Fz
bTo6UGFnZUNvdW50IHJlc3VsdCA9IG1lbW9yeS0+Z3JvdyhleGVjLCBkZWx0YSwgc2hvdWxkVGhy
b3dFeGNlcHRpb25zT25GYWlsdXJlKTsKKyAgICBXYXNtOjpQYWdlQ291bnQgcmVzdWx0ID0gbWVt
b3J5LT5ncm93KHZtLCBleGVjLCBkZWx0YSwgc2hvdWxkVGhyb3dFeGNlcHRpb25zT25GYWlsdXJl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CiAKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHJlc3VsdC5wYWdlQ291bnQoKSkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>