<?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>125811</bug_id>
          
          <creation_ts>2013-12-16 15:51:31 -0800</creation_ts>
          <short_desc>FTL should be able to do call ICs</short_desc>
          <delta_ts>2014-01-30 13:22:42 -0800</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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>113621</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>960274</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-16 15:51:31 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960280</commentid>
    <comment_count>1</comment_count>
      <attachid>219363</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-16 15:54:15 -0800</bug_when>
    <thetext>Created attachment 219363
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960305</commentid>
    <comment_count>2</comment_count>
      <attachid>219369</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-16 16:43:24 -0800</bug_when>
    <thetext>Created attachment 219369
mostly done

This works for FTL-&gt;FTL calls.

Now I need to put in the appropriate thunking for FTL-&gt;!FTL calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960362</commentid>
    <comment_count>3</comment_count>
      <attachid>219385</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-16 19:33:51 -0800</bug_when>
    <thetext>Created attachment 219385
more...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960392</commentid>
    <comment_count>4</comment_count>
      <attachid>219395</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-16 21:45:06 -0800</bug_when>
    <thetext>Created attachment 219395
register preservation is written

I still need to glue it together.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960674</commentid>
    <comment_count>5</comment_count>
      <attachid>219454</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-17 14:41:23 -0800</bug_when>
    <thetext>Created attachment 219454
mostly there</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960806</commentid>
    <comment_count>6</comment_count>
      <attachid>219494</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-17 19:29:43 -0800</bug_when>
    <thetext>Created attachment 219494
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960813</commentid>
    <comment_count>7</comment_count>
      <attachid>219497</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-17 20:02:00 -0800</bug_when>
    <thetext>Created attachment 219497
even more...

Aiming for &gt;100KB!  It&apos;s been too long since I&apos;ve done one of those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960821</commentid>
    <comment_count>8</comment_count>
      <attachid>219500</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-17 20:25:18 -0800</bug_when>
    <thetext>Created attachment 219500
maybe it&apos;s done?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960826</commentid>
    <comment_count>9</comment_count>
      <attachid>219502</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-17 20:50:44 -0800</bug_when>
    <thetext>Created attachment 219502
it compiles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961184</commentid>
    <comment_count>10</comment_count>
      <attachid>219590</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-18 16:59:17 -0800</bug_when>
    <thetext>Created attachment 219590
it makes calls</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961284</commentid>
    <comment_count>11</comment_count>
      <attachid>219620</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-18 22:59:23 -0800</bug_when>
    <thetext>Created attachment 219620
the beginnings of preserved-registers-aware OSR exit

OMG this is going to be SO COOL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961296</commentid>
    <comment_count>12</comment_count>
      <attachid>219626</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-18 23:52:42 -0800</bug_when>
    <thetext>Created attachment 219626
I might be done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961561</commentid>
    <comment_count>13</comment_count>
      <attachid>219688</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-19 15:06:29 -0800</bug_when>
    <thetext>Created attachment 219688
ready for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961562</commentid>
    <comment_count>14</comment_count>
      <attachid>219689</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-19 15:07:26 -0800</bug_when>
    <thetext>Created attachment 219689
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961589</commentid>
    <comment_count>15</comment_count>
      <attachid>219689</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-12-19 15:40:02 -0800</bug_when>
    <thetext>Comment on attachment 219689
the patch

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

r=me

&gt; Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp:145
&gt; +    // Henceforth we make it look like we had called through a register preservation wrapper.

I would say &quot;the exiting function was called&quot; instead of &quot;we had called&quot;.

&gt; Source/JavaScriptCore/ftl/FTLUnwindInfo.h:44
&gt; +    unsigned indexOf(GPRReg gpr) const; // Return UINT_MAX if not found.

&quot;Returns&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961793</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-20 02:02:54 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/160893</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973958</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-30 13:22:42 -0800</bug_when>
    <thetext>*** Bug 123233 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219363</attachid>
            <date>2013-12-16 15:54:15 -0800</date>
            <delta_ts>2013-12-16 16:43:24 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>23612</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNjY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDEzLTEyLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjU4MTEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUv
Q2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a0luZm86OkNhbGxMaW5rSW5mbyk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjplbWl0Q2FsbCk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OmZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcyk6CisgICAgICAg
ICogZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9m
Q2FsbCk6CisgICAgICAgICogZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oOgorICAgICAgICAqIGZ0
bC9GVExKU0NhbGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OkpTQ2Fs
bCk6CisgICAgICAgIChKU0M6OkZUTDo6SlNDYWxsOjplbWl0KToKKyAgICAgICAgKEpTQzo6RlRM
OjpKU0NhbGw6OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExKU0NhbGwuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkZUTDo6SlNDYWxsOjpzdGFja21hcElEKToKKyAgICAgICAgKEpTQzo6RlRMOjpK
U0NhbGw6Om9wZXJhdG9yPCk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNhbGxPckNvbnN0cnVj
dCk6CisgICAgICAgICogZnRsL0ZUTFN0YXRlLmg6CisKIDIwMTMtMTItMTYgIE1hcmsgTGFtICA8
bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIE1lcmdlZCByMTYwNjY1IGZyb20gdHJ1bmsu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTYwNjIyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI2Nyw2ICsyNjcsOCBAQAogCQkwRjY2NkVDRDE4MzZC
MzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVDQjE4MzZCMzdF
MDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkIxNERGM0Yx
NjAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGph
Y2VuY3lMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZFMTY5MTRERjNGMTMwMEI3QjJF
NCAvKiBERkdFZGdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEY2QjFDQjUxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCMzE4NUZDOUU5
MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCAqLzsgfTsKKwkJMEY2QjFDQjYxODVGQzlFOTAwODQ1
RDk3IC8qIEZUTEpTQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzAyNUE5MTcxNEIw
RkEwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MDI1QTcxNzE0QjBGODAwMzgyQzBF
IC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgKi87IH07CiAJCTBGNzAyNUFBMTcxNEIw
RkMwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAv
KiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFj
a3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRz
UHJvcGFnYXRpb25QaGFzZS5jcHAgKi87IH07CkBAIC0xNTc5LDYgKzE1ODEsOCBAQAogCQkwRjY2
NkVDQjE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Jlc3VycmVjdGlvbkZvclZh
bGlkYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25Q
aGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYzRjEzMDBC
N0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdBZGphY2VuY3lMaXN0Lmg7IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyog
REZHRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7IHBh
dGggPSBkZmcvREZHRWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZCMUNC
MzE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbC5jcHA7IHBhdGggPSBmdGwvRlRMSlNDYWxsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8q
IEZUTEpTQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGwu
aDsgcGF0aCA9IGZ0bC9GVExKU0NhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY3MDI1QTcxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzE0Q0ExMTZFQTkyRUQw
MEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3Bw
OyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjg1OCw2ICsyODYyLDggQEAKIAkJCQkwRkVBMEEwMzE3MDUx
M0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5oICovLAogCQkJCUE3OEE5NzdEMTc5NzM4RDUwMDlE
Rjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuY3BwICovLAogCQkJCUE3OEE5NzdFMTc5NzM4RDUwMDlE
Rjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuaCAqLywKKwkJCQkwRjZCMUNCMzE4NUZDOUU5MDA4NDVE
OTcgLyogRlRMSlNDYWxsLmNwcCAqLywKKwkJCQkwRjZCMUNCNDE4NUZDOUU5MDA4NDVEOTcgLyog
RlRMSlNDYWxsLmggKi8sCiAJCQkJMEY4RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsu
Y3BwICovLAogCQkJCTBGOEYyQjk0MTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmggKi8sCiAJ
CQkJMEZDRUZBREQxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCAqLywKQEAgLTQz
OTUsNiArNDQwMSw3IEBACiAJCQkJMEZCQzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQ
cm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc3NTE3OTczOEI4MDA5REY3NDQgLyog
REZHRmFpbGVkRmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc3NzE3OTczOEI4
MDA5REY3NDQgLyogREZHRmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjZCMUNCNjE4
NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMx
NjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVh
ZGVycyAqLywKQEAgLTU1NTEsNiArNTU1OCw3IEBACiAJCQkJMEYyNUYxQjMxODE2MzVGMzAwNTIy
RjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM5
QTE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRUEwQTE2MTcwNkJCOTAwMEJCNzIyQyAvKiBGVExTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjZCMUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMjM1QkUxMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExUaHVua3MuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYyMzVCRTMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNCMTA3RUMzNzYwMDQyN0E0OCAvKiBGdW5j
dGlvbkNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDE2MDYyMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCwxNCArMzgsNyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZN
JiB2bSwgUmVwYXRjCiAgICAgQVNTRVJUKGlzTGlua2VkKCkpOwogICAgIAogICAgIHJlcGF0Y2hC
dWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goUmVwYXRjaEJ1
ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoaG90UGF0aEJlZ2luKSwg
c3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KGNhbGxlZUdQUiksIDApOwot
ICAgIGlmIChpc0RGRykgewotI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIChjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2
bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcikgOiB2bS5nZXRDVElTdHVi
KGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpKS5jb2RlKCkpOwotI2Vsc2UKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgIH0gZWxzZQotICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIGNhbGxUeXBlID09IENvbnN0cnVj
dCA/IHZtLmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkgOiB2
bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVybkxvY2F0aW9uLCBjYWxsVHlwZSA9PSBDb25zdHJ1Y3Qg
PyB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcikuY29kZSgpIDogdm0u
Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwogICAgIGhhc1NlZW5T
aG91bGRSZXBhdGNoID0gZmFsc2U7CiAgICAgY2FsbGVlLmNsZWFyKCk7CiAgICAgc3R1Yi5jbGVh
cigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0lu
Zm8uaAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw2IEBAIHN0cnVjdCBD
YWxsTGlua0luZm8gOiBwdWJsaWMgQmFzaWNSYXdTZW4KICAgICAgICAgCiAgICAgQ2FsbExpbmtJ
bmZvKCkKICAgICAgICAgOiBoYXNTZWVuU2hvdWxkUmVwYXRjaChmYWxzZSkKLSAgICAgICAgLCBp
c0RGRyhmYWxzZSkKICAgICAgICAgLCBoYXNTZWVuQ2xvc3VyZShmYWxzZSkKICAgICAgICAgLCBj
YWxsVHlwZShOb25lKQogICAgIHsKQEAgLTgwLDcgKzc5LDYgQEAgc3RydWN0IENhbGxMaW5rSW5m
byA6IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBsYXN0
U2VlbkNhbGxlZTsKICAgICBSZWZQdHI8Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YjsKICAg
ICBib29sIGhhc1NlZW5TaG91bGRSZXBhdGNoIDogMTsKLSAgICBib29sIGlzREZHIDogMTsKICAg
ICBib29sIGhhc1NlZW5DbG9zdXJlIDogMTsKICAgICB1bnNpZ25lZCBjYWxsVHlwZSA6IDU7IC8v
IENhbGxUeXBlCiAgICAgdW5zaWduZWQgY2FsbGVlR1BSIDogODsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNjA2MjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjMwLDcgKzIzMCw2IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZl
ciYgbGlua0IKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qc0NhbGxzLnNpemUoKTsg
KytpKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlu
a0luZm8oaSk7CiAgICAgICAgIGluZm8uY2FsbFR5cGUgPSBtX2pzQ2FsbHNbaV0ubV9jYWxsVHlw
ZTsKLSAgICAgICAgaW5mby5pc0RGRyA9IHRydWU7CiAgICAgICAgIGluZm8uY29kZU9yaWdpbiA9
IG1fanNDYWxsc1tpXS5tX2NvZGVPcmlnaW47CiAgICAgICAgIGxpbmtCdWZmZXIubGluayhtX2pz
Q2FsbHNbaV0ubV9zbG93Q2FsbCwgRnVuY3Rpb25QdHIoKG1fdm0tPmdldENUSVN0dWIoaW5mby5j
YWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA/IGxpbmtDb25zdHJ1Y3RUaHVua0dl
bmVyYXRvciA6IGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSkpOwogICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9j
YXRpb25PZk5lYXJDYWxsKG1fanNDYWxsc1tpXS5tX3Nsb3dDYWxsKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNp
b24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzA0LDExICs3MDQsMTEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CiAKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7
Ci0gICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIEpJVENvbXBpbGVyOjpK
dW1wIHNsb3dQYXRoOwogCiAgICAgbV9qaXQuZW1pdFN0b3JlQ29kZU9yaWdpbihub2RlLT5jb2Rl
T3JpZ2luKTsKICAgICAKLSAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyV2l0aFBh
dGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCB0YXJnZXRUb0NoZWNrLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSkpOworICAgIHNsb3dQYXRoID0gbV9qaXQu
YnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCB0
YXJnZXRUb0NoZWNrLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSk7CiAKICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgT0JKRUNUX09G
RlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGUpKSwgcmVzdWx0R1BSKTsKICAgICBtX2ppdC5zdG9y
ZTY0KHJlc3VsdEdQUiwgY2FsbGVlRnJhbWVTbG90KEpTU3RhY2s6OlNjb3BlQ2hhaW4pKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJl
dmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw4IEBAIGlubGluZSBDYXBhYmls
aXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIEZ1bmN0aW9uUmVlbnRyeVdhdGNo
cG9pbnQ6CiAgICAgY2FzZSBWYXJpYWJsZVdhdGNocG9pbnQ6CiAgICAgY2FzZSBOb3RpZnlXcml0
ZToKKyAgICBjYXNlIENhbGw6CisgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAgIC8vIFRoZXNl
IGFyZSBPSy4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRCeUlkOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTksNiArMjk5LDQ0IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFw
cygKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICAvLyBIYW5kbGluZyBKUyBjYWxscyBpcyB3
ZWlyZDogd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBzb3J0IHRoZW0gYnkgdGhlIFBDIGluIExM
Vk0KKyAgICAvLyBnZW5lcmF0ZWQgY29kZS4gVGhhdCBpbXBsaWVzIGZpcnN0IHBydW5pbmcgdGhl
IG9uZXMgdGhhdCBMTFZNIGRpZG4ndCBnZW5lcmF0ZS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3RhdGUuanNDYWxscy5zaXplKCk7ICsraSkgeworICAgICAgICBKU0NhbGwmIGNhbGwg
PSBzdGF0ZS5qc0NhbGxzW2ldOworICAgICAgICAKKyAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmRN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAuZmluZChjYWxsLnN0YWNrbWFwSUQoKSk7Cisg
ICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkgeworICAgICAgICAgICAgLy8gSXQg
d2FzIG9wdGltaXplZCBvdXQuIFBydW5lIGl0LgorICAgICAgICAgICAgY2FsbCA9IHN0YXRlLmpz
Q2FsbHMubGFzdCgpOworICAgICAgICAgICAgc3RhdGUuanNDYWxscy5yZW1vdmVMYXN0KCk7Cisg
ICAgICAgICAgICBpLS07CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgY2FsbC5tX2luc3RydWN0aW9uT2Zmc2V0ID0gcmVjb3JkLmluc3RydWN0aW9u
T2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBzdGQ6OnNvcnQoc3RhdGUuanNDYWxscy5iZWdpbigp
LCBzdGF0ZS5qc0NhbGxzLmVuZCgpKTsKKyAgICAKKyAgICBjb2RlQmxvY2stPnNldE51bWJlck9m
Q2FsbExpbmtJbmZvcyhzdGF0ZS5qc0NhbGxzLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gc3RhdGUuanNDYWxscy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgSlNDYWxsJiBjYWxsID0g
c3RhdGUuanNDYWxsc1tpXTsKKworICAgICAgICBDQ2FsbEhlbHBlcnMgZmFzdFBhdGhKSVQoJnZt
LCBjb2RlQmxvY2spOworICAgICAgICBjYWxsLmVtaXQoZmFzdFBhdGhKSVQpOworICAgICAgICAK
KyAgICAgICAgY2hhciogc3RhcnRPZklDID0gYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRG
dW5jdGlvbikgKyBjYWxsLm1faW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgIAorICAgICAgICBM
aW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sICZmYXN0UGF0aEpJVCwgc3RhcnRPZklDLCBzaXplT2ZD
YWxsKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rQnVmZmVyLmlzVmFsaWQoKSk7Cisg
ICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QXNzZW1ibGVyVHlwZV9UOjpmaWxsTm9w
cygKKyAgICAgICAgICAgIHN0YXJ0T2ZJQyArIGxpbmtCdWZmZXIuc2l6ZSgpLCBzaXplT2ZJQyAt
IGxpbmtCdWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIENhbGxMaW5rSW5mbyYgaW5m
byA9IGNvZGVCbG9jay0+Y2FsbExpbmtJbmZvKGkpOworICAgICAgICBjYWxsLmxpbmsodm0sIGxp
bmtCdWZmZXIsIGluZm8pOworICAgIH0KKyAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIoY29kZUJsb2NrKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGV4aXRJbmRleCA9IGpp
dENvZGUtPm9zckV4aXQuc2l6ZSgpOyBleGl0SW5kZXgtLTspIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHJldmlzaW9uIDE2
MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsMTEgQEAgc2l6ZV90IHNpemVPZlB1dEJ5SWQo
KQogICAgIHJldHVybiAzMjsKIH0KIAorc2l6ZV90IHNpemVPZkNhbGwoKQoreworICAgIHJldHVy
biAzODsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hl
U2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5l
Q2FjaGVTaXplLmgJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSW5saW5lQ2FjaGVTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiBzaXplX3Qgc2l6ZU9mR2V0QnlJZCgp
Owogc2l6ZV90IHNpemVPZlB1dEJ5SWQoKTsKK3NpemVfdCBzaXplT2ZDYWxsKCk7CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpGVEwKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKU0NhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SlNDYWxsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SlNDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJGVExKU0NhbGwuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK0pTQ2FsbDo6SlNDYWxsKHVuc2lnbmVkIHN0YWNrbWFw
SUQsIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdp
bikKKyAgICA6IG1fc3RhY2ttYXBJRChzdGFja21hcElEKQorICAgICwgbV9jYWxsVHlwZShjYWxs
VHlwZSkKKyAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQorICAgICwgbV9pbnN0cnVjdGlv
bk9mZnNldCgwKQoreworfQorCit2b2lkIEpTQ2FsbDo6ZW1pdChDQ2FsbEhlbHBlcnMmIGppdCkK
K3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBh
dGNoKAorICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgbV90
b0NoZWNrLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCkpOworICAgIAorICAgIGppdC5s
b2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIE9C
SkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlKSksCisgICAgICAgIEdQUkluZm86OnJl
Z1QxKTsKKyAgICBqaXQuc3RvcmU2NCgKKyAgICAgICAgR1BSSW5mbzo6cmVnVDEsCisgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIsCisgICAgICAgICAgICBzaXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6
U2NvcGVDaGFpbiAtIHNpemVvZih2b2lkKikpKTsKKyAgICAKKyAgICBtX2Zhc3RDYWxsID0gaml0
Lm5lYXJDYWxsKCk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOwor
ICAgIAorICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNs
b3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgCisgICAgZG9uZS5saW5rKCZqaXQpOworfQor
Cit2b2lkIEpTQ2FsbDo6bGluayhWTSYgdm0sIExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIENhbGxM
aW5rSW5mbyYgY2FsbEluZm8pCit7CisgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yOworICAg
IGlmIChtX2NhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0KQorICAgICAgICBnZW5l
cmF0b3IgPSBsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3I7CisgICAgZWxzZQorICAgICAgICBn
ZW5lcmF0b3IgPSBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yOworICAgIAorICAgIGxpbmtCdWZmZXIu
bGluaygKKyAgICAgICAgbV9zbG93Q2FsbCwgRnVuY3Rpb25QdHIodm0uZ2V0Q1RJU3R1YihnZW5l
cmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgCisgICAgY2FsbEluZm8u
Y2FsbFR5cGUgPSBtX2NhbGxUeXBlOworICAgIGNhbGxJbmZvLmNvZGVPcmlnaW4gPSBtX2NvZGVP
cmlnaW47CisgICAgY2FsbEluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGwobV9zbG93Q2FsbCk7CisgICAgY2FsbEluZm8uaG90UGF0aEJlZ2luID0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fdGFyZ2V0VG9DaGVjayk7CisgICAgY2FsbEluZm8uaG90
UGF0aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9mYXN0Q2FsbCk7Cisg
ICAgY2FsbEluZm8uY2FsbGVlR1BSID0gR1BSSW5mbzo6cmVnVDA7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBGVExKU0NhbGxfaAorI2RlZmluZSBGVExKU0NhbGxfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQp
CisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIK
KyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEpTQ2FsbCB7CitwdWJsaWM6Cisg
ICAgSlNDYWxsKHVuc2lnbmVkIHN0YWNrbWFwSUQsIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUsIENv
ZGVPcmlnaW4pOworICAgIAorICAgIHZvaWQgZW1pdChDQ2FsbEhlbHBlcnMmKTsKKyAgICB2b2lk
IGxpbmsoVk0mLCBMaW5rQnVmZmVyJiwgQ2FsbExpbmtJbmZvJik7CisgICAgCisgICAgdW5zaWdu
ZWQgc3RhY2ttYXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3I8KGNvbnN0IEpTQ2FsbCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9pbnN0cnVjdGlvbk9mZnNldCA8IG90aGVyLm1faW5zdHJ1Y3Rpb25PZmZzZXQ7
CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3N0YWNrbWFwSUQ7CisgICAg
Q2FsbExpbmtJbmZvOjpDYWxsVHlwZSBtX2NhbGxUeXBlOworICAgIENvZGVPcmlnaW4gbV9jb2Rl
T3JpZ2luOworICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIG1fdGFyZ2V0VG9DaGVjazsK
KyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgbV9mYXN0Q2FsbDsKKyAgICBDQ2FsbEhlbHBlcnM6OkNh
bGwgbV9zbG93Q2FsbDsKKworcHVibGljOgorICAgIHVpbnQzMl90IG1faW5zdHJ1Y3Rpb25PZmZz
ZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEpTQ2FsbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNjA2MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQzNywzNSArMjQzNyw0MCBAQCBwcml2YXRlOgogICAgIAogICAgIHZv
aWQgY29tcGlsZUNhbGxPckNvbnN0cnVjdCgpCiAgICAgewotICAgICAgICAvLyBGSVhNRTogVGhp
cyBpcyB1bmFjY2VwdGFibHkgc2xvdy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExMzYyMQorICAgICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQg
PSBtX25vZGUtPm9wKCkgPT0gQ2FsbCA/IDAgOiAxOworICAgICAgICBpbnQgbnVtUGFzc2VkQXJn
cyA9IG1fbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CisgICAgICAgIGludCBudW1BcmdzID0gbnVt
UGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50OwogICAgICAgICAKLSAgICAgICAgSl9KSVRP
cGVyYXRpb25fRSBmdW5jdGlvbiA9Ci0gICAgICAgICAgICBtX25vZGUtPm9wKCkgPT0gQ2FsbCA/
IG9wZXJhdGlvbkZUTENhbGwgOiBvcGVyYXRpb25GVExDb25zdHJ1Y3Q7CisgICAgICAgIExWYWx1
ZSBjYWxsZWUgPSBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSk7CiAg
ICAgICAgIAotICAgICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBtX25vZGUtPm9wKCkgPT0g
Q2FsbCA/IDAgOiAxOworICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFja21hcElE
cysrOwogICAgICAgICAKLSAgICAgICAgaW50IG51bVBhc3NlZEFyZ3MgPSBtX25vZGUtPm51bUNo
aWxkcmVuKCkgLSAxOworICAgICAgICBWZWN0b3I8TFZhbHVlPiBhcmd1bWVudHM7CisgICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMihzdGFja21hcElEKSk7CisgICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMihzaXplT2ZDYWxsKCkpKTsKKyAgICAg
ICAgYXJndW1lbnRzLmFwcGVuZChjb25zdE51bGwobV9vdXQucmVmOCkpOworICAgICAgICBhcmd1
bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50MzIoMSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
clNpemUgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSArIG51bUFyZ3MpKTsKKyAgICAg
ICAgYXJndW1lbnRzLmFwcGVuZChjYWxsZWUpOyAvLyBjYWxsZWUgLT4gJXJkaQorICAgICAgICBh
cmd1bWVudHMuYXBwZW5kKGdldFVuZGVmKG1fb3V0LmludDY0KSk7IC8vIGNvZGUgYmxvY2sKKyAg
ICAgICAgYXJndW1lbnRzLmFwcGVuZChnZXRVbmRlZihtX291dC5pbnQ2NCkpOyAvLyBzY29wZSBj
aGFpbgorICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNhbGxlZSk7IC8vIGNhbGxlZSAtPiBzdGFj
aworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50NjQobnVtQXJncykpOyAv
LyBhcmd1bWVudCBjb3VudCBhbmQgemVyb3MgZm9yIHRoZSB0YWcKKyAgICAgICAgaWYgKGR1bW15
VGhpc0FyZ3VtZW50KQorICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChnZXRVbmRlZihtX291
dC5pbnQ2NCkpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsr
aSkKKyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFy
Z0NoaWxkKG1fbm9kZSwgMSArIGkpKSk7CiAgICAgICAgIAotICAgICAgICBMVmFsdWUgY2FsbGVl
RnJhbWUgPSBtX291dC5hZGQoCi0gICAgICAgICAgICBtX2NhbGxGcmFtZSwKLSAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihSZWdpc3RlcikgKiB2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChtX2dyYXBoLmZyYW1lUmVnaXN0ZXJDb3VudCgpKS5vZmZzZXQoKSkpOworICAgICAgICBj
YWxsUHJlZmxpZ2h0KCk7CiAgICAgICAgIAotICAgICAgICBtX291dC5zdG9yZTMyKAotICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnQzMihudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQp
LAotICAgICAgICAgICAgcGF5bG9hZEZvcihjYWxsZWVGcmFtZSwgSlNTdGFjazo6QXJndW1lbnRD
b3VudCkpOwotICAgICAgICBtX291dC5zdG9yZTY0KG1fY2FsbEZyYW1lLCBjYWxsZWVGcmFtZSwg
bV9oZWFwcy5DYWxsRnJhbWVfY2FsbGVyRnJhbWUpOwotICAgICAgICBtX291dC5zdG9yZTY0KAot
ICAgICAgICAgICAgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLAot
ICAgICAgICAgICAgYWRkcmVzc0ZvcihjYWxsZWVGcmFtZSwgSlNTdGFjazo6Q2FsbGVlKSk7Ci0g
ICAgICAgIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkg
ewotICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAgICAgICBsb3dKU1ZhbHVl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxICsgaSkpLAotICAgICAgICAgICAgICAgIGFk
ZHJlc3NGb3IoY2FsbGVlRnJhbWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkgKyBkdW1t
eVRoaXNBcmd1bWVudCkub2Zmc2V0KCkpKTsKLSAgICAgICAgfQorICAgICAgICBMVmFsdWUgY2Fs
bCA9IG1fb3V0LmNhbGwobV9vdXQucGF0Y2hwb2ludEludDY0SW50cmluc2ljKCksIGFyZ3VtZW50
cyk7CisgICAgICAgIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTVdl
YktpdEpTQ2FsbENvbnYpOworICAgICAgICAKKyAgICAgICAgbV9mdGxTdGF0ZS5qc0NhbGxzLmFw
cGVuZChKU0NhbGwoCisgICAgICAgICAgICBzdGFja21hcElELAorICAgICAgICAgICAgbV9ub2Rl
LT5vcCgpID09IENhbGwgPyBDYWxsTGlua0luZm86OkNhbGwgOiBDYWxsTGlua0luZm86OkNvbnN0
cnVjdCwKKyAgICAgICAgICAgIG1fbm9kZS0+Y29kZU9yaWdpbikpOwogICAgICAgICAKLSAgICAg
ICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9vdXQub3BlcmF0aW9uKGZ1bmN0aW9uKSwgY2FsbGVlRnJh
bWUpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBj
b21waWxlSnVtcCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZp
c2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJGVExJbmxpbmVDYWNoZURl
c2NyaXB0b3IuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMSklURmlu
YWxpemVyLmgiCisjaW5jbHVkZSAiRlRMSlNDYWxsLmgiCiAjaW5jbHVkZSAiRlRMU3RhY2tNYXBz
LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKQEAgLTYwLDYgKzYxLDcgQEAgcHVi
bGljOgogICAgIHVuc2lnbmVkIGNhcHR1cmVkU3RhY2ttYXBJRDsKICAgICBTZWdtZW50ZWRWZWN0
b3I8R2V0QnlJZERlc2NyaXB0b3I+IGdldEJ5SWRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxQdXRC
eUlkRGVzY3JpcHRvcj4gcHV0QnlJZHM7CisgICAgVmVjdG9yPEpTQ2FsbD4ganNDYWxsczsKICAg
ICBWZWN0b3I8Q1N0cmluZz4gY29kZVNlY3Rpb25OYW1lczsKICAgICBWZWN0b3I8Q1N0cmluZz4g
ZGF0YVNlY3Rpb25OYW1lczsKICAgICBSZWZDb3VudGVkQXJyYXk8TFNlY3Rpb25Xb3JkPiBzdGFj
a21hcHNTZWN0aW9uOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219369</attachid>
            <date>2013-12-16 16:43:24 -0800</date>
            <delta_ts>2013-12-16 19:33:51 -0800</delta_ts>
            <desc>mostly done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>28068</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNjY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDEzLTEyLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBiZSBhYmxlIHRvIGRvIGNhbGwgSUNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjU4MTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OkNhbGxMaW5rSW5mbyk6Cisg
ICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6bGluayk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICog
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6
CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmZpeEZ1
bmN0aW9uQmFzZWRPblN0YWNrTWFwcyk6CisgICAgICAgICogZnRsL0ZUTElubGluZUNhY2hlU2l6
ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mQ2FsbCk6CisgICAgICAgICogZnRsL0ZU
TElubGluZUNhY2hlU2l6ZS5oOgorICAgICAgICAqIGZ0bC9GVExKU0NhbGwuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OkpTQ2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6
SlNDYWxsOjplbWl0KToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OmxpbmspOgorICAgICAg
ICAqIGZ0bC9GVExKU0NhbGwuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6SlNDYWxsOjpz
dGFja21hcElEKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6Om9wZXJhdG9yPCk6CisgICAg
ICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdCk6CisgICAgICAgICogZnRsL0ZUTFN0
YXRlLmg6CisKIDIwMTMtMTItMTYgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIE1lcmdlZCByMTYwNjY1IGZyb20gdHJ1bmsuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTI2Nyw2ICsyNjcsOCBAQAogCQkwRjY2NkVDRDE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJy
ZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVDQjE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0
aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkIxNERGM0YxNjAwQjdCMkU0IC8qIERGR0FkamFjZW5j
eUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkMxNERGM0YxNjAw
QjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjZFMTY5MTRERjNGMTMwMEI3QjJFNCAvKiBERkdFZGdlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2QjFDQjUxODVGQzlF
OTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCMzE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNw
cCAqLzsgfTsKKwkJMEY2QjFDQjYxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQjQxODVGQzlF
OTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNzAyNUE5MTcxNEIwRkEwMDM4MkMwRSAvKiBERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3MDI1QTcxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAgKi87IH07CiAJCTBGNzAyNUFBMTcxNEIwRkMwMDM4MkMwRSAvKiBERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcxNENB
MTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi87
IH07CkBAIC0xNTc5LDYgKzE1ODEsOCBAQAogCQkwRjY2NkVDQjE4MzZCMzdFMDBEMDE3RjEgLyog
REZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGphY2VuY3lMaXN0Lmg7
IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7IHBhdGggPSBkZmcvREZHRWRnZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZCMUNCMzE4NUZDOUU5MDA4NDVEOTcgLyogRlRM
SlNDYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2Fs
bC5jcHA7IHBhdGggPSBmdGwvRlRMSlNDYWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGwuaDsgcGF0aCA9IGZ0bC9GVExKU0NhbGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MDI1QTcxNzE0QjBGODAwMzgyQzBF
IC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOyBwYXRoID0gZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQ
cm9wYWdhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0JhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg1
OCw2ICsyODYyLDggQEAKIAkJCQkwRkVBMEEwMzE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29k
ZS5oICovLAogCQkJCUE3OEE5NzdEMTc5NzM4RDUwMDlERjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIu
Y3BwICovLAogCQkJCUE3OEE5NzdFMTc5NzM4RDUwMDlERjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIu
aCAqLywKKwkJCQkwRjZCMUNCMzE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCAqLywK
KwkJCQkwRjZCMUNCNDE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmggKi8sCiAJCQkJMEY4
RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuY3BwICovLAogCQkJCTBGOEYyQjk0MTcy
RTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmggKi8sCiAJCQkJMEZDRUZBREQxODA3MzhDMDAwNDcy
Q0U0IC8qIEZUTExvY2F0aW9uLmNwcCAqLywKQEAgLTQzOTUsNiArNDQwMSw3IEBACiAJCQkJMEZC
QzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzhBOTc3NTE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzhBOTc3NzE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjZCMUNCNjE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlND
YWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZH
Rml4dXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJD
IC8qIERGR0ZsdXNoZWRBdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKQEAgLTU1NTEsNiArNTU1
OCw3IEBACiAJCQkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtl
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM5QTE4MDNBREI3MDA3M0MyQkMgLyogRlRM
U3RhY2tNYXBzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTE2MTcwNkJCOTAwMEJCNzIy
QyAvKiBGVExTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjZCMUNCNTE4NUZDOUU5MDA4
NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkUxMTcxNzhF
MUMwMDY5MEM3RiAvKiBGVExUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRTMx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0N0YzOUNCMTA3RUMzNzYwMDQyN0E0OCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxNCArMzgs
NyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSwgUmVwYXRjCiAgICAgQVNTRVJU
KGlzTGlua2VkKCkpOwogICAgIAogICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2Vt
ZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldp
dGhQYXRjaE9uUmVnaXN0ZXIoaG90UGF0aEJlZ2luKSwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQ+KGNhbGxlZUdQUiksIDApOwotICAgIGlmIChpc0RGRykgewotI2lmIEVO
QUJMRShERkdfSklUKQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9j
YXRpb24sIChjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1
Y3RUaHVua0dlbmVyYXRvcikgOiB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3Ip
KS5jb2RlKCkpOwotI2Vsc2UKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSNlbmRpZgotICAgIH0gZWxzZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0
dXJuTG9jYXRpb24sIGNhbGxUeXBlID09IENvbnN0cnVjdCA/IHZtLmdldENUSVN0dWIobGlua0Nv
bnN0cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkgOiB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1
bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVy
bkxvY2F0aW9uLCBjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKGxpbmtDb25z
dHJ1Y3RUaHVua0dlbmVyYXRvcikuY29kZSgpIDogdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS5jb2RlKCkpOwogICAgIGhhc1NlZW5TaG91bGRSZXBhdGNoID0gZmFsc2U7CiAg
ICAgY2FsbGVlLmNsZWFyKCk7CiAgICAgc3R1Yi5jbGVhcigpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMTYwNjIyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw3ICs1Niw2IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBwdWJsaWMgQmFz
aWNSYXdTZW4KICAgICAgICAgCiAgICAgQ2FsbExpbmtJbmZvKCkKICAgICAgICAgOiBoYXNTZWVu
U2hvdWxkUmVwYXRjaChmYWxzZSkKLSAgICAgICAgLCBpc0RGRyhmYWxzZSkKICAgICAgICAgLCBo
YXNTZWVuQ2xvc3VyZShmYWxzZSkKICAgICAgICAgLCBjYWxsVHlwZShOb25lKQogICAgIHsKQEAg
LTgwLDcgKzc5LDYgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1Nlbgog
ICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBsYXN0U2VlbkNhbGxlZTsKICAgICBSZWZQdHI8
Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YjsKICAgICBib29sIGhhc1NlZW5TaG91bGRSZXBh
dGNoIDogMTsKLSAgICBib29sIGlzREZHIDogMTsKICAgICBib29sIGhhc1NlZW5DbG9zdXJlIDog
MTsKICAgICB1bnNpZ25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAgICAgdW5zaWduZWQg
Y2FsbGVlR1BSIDogODsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDcgKzIzMCw2IEBA
IHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9qc0NhbGxzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIENhbGxMaW5r
SW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CiAgICAgICAgIGluZm8u
Y2FsbFR5cGUgPSBtX2pzQ2FsbHNbaV0ubV9jYWxsVHlwZTsKLSAgICAgICAgaW5mby5pc0RGRyA9
IHRydWU7CiAgICAgICAgIGluZm8uY29kZU9yaWdpbiA9IG1fanNDYWxsc1tpXS5tX2NvZGVPcmln
aW47CiAgICAgICAgIGxpbmtCdWZmZXIubGluayhtX2pzQ2FsbHNbaV0ubV9zbG93Q2FsbCwgRnVu
Y3Rpb25QdHIoKG1fdm0tPmdldENUSVN0dWIoaW5mby5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86
OkNvbnN0cnVjdCA/IGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvciA6IGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3IpKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgICAgICBpbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fanNDYWxs
c1tpXS5tX3Nsb3dDYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzA0LDExICs3MDQsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSog
bm9kZQogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKICAgICBKSVRDb21w
aWxlcjo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXBM
aXN0IHNsb3dQYXRoOworICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoOwogCiAgICAgbV9q
aXQuZW1pdFN0b3JlQ29kZU9yaWdpbihub2RlLT5jb2RlT3JpZ2luKTsKICAgICAKLSAgICBzbG93
UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgY2FsbGVlR1BSLCB0YXJnZXRUb0NoZWNrLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cigwKSkpOworICAgIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCB0YXJnZXRUb0NoZWNrLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cigwKSk7CiAKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2Nv
cGUpKSwgcmVzdWx0R1BSKTsKICAgICBtX2ppdC5zdG9yZTY0KHJlc3VsdEdQUiwgY2FsbGVlRnJh
bWVTbG90KEpTU3RhY2s6OlNjb3BlQ2hhaW4pKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAzLDYgKzEwMyw4IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2Rl
KiAKICAgICBjYXNlIEZ1bmN0aW9uUmVlbnRyeVdhdGNocG9pbnQ6CiAgICAgY2FzZSBWYXJpYWJs
ZVdhdGNocG9pbnQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKKyAgICBjYXNlIENhbGw6CisgICAg
Y2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBHZXRCeUlkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
b21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENv
bXBpbGUuY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTksNiArMjk5LDQ0IEBAIHN0YXRp
YyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgfQogICAgIH0KICAg
ICAKKyAgICAvLyBIYW5kbGluZyBKUyBjYWxscyBpcyB3ZWlyZDogd2UgbmVlZCB0byBlbnN1cmUg
dGhhdCB3ZSBzb3J0IHRoZW0gYnkgdGhlIFBDIGluIExMVk0KKyAgICAvLyBnZW5lcmF0ZWQgY29k
ZS4gVGhhdCBpbXBsaWVzIGZpcnN0IHBydW5pbmcgdGhlIG9uZXMgdGhhdCBMTFZNIGRpZG4ndCBn
ZW5lcmF0ZS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuanNDYWxscy5zaXpl
KCk7ICsraSkgeworICAgICAgICBKU0NhbGwmIGNhbGwgPSBzdGF0ZS5qc0NhbGxzW2ldOworICAg
ICAgICAKKyAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNv
cmRNYXAuZmluZChjYWxsLnN0YWNrbWFwSUQoKSk7CisgICAgICAgIGlmIChpdGVyID09IHJlY29y
ZE1hcC5lbmQoKSkgeworICAgICAgICAgICAgLy8gSXQgd2FzIG9wdGltaXplZCBvdXQuIFBydW5l
IGl0LgorICAgICAgICAgICAgY2FsbCA9IHN0YXRlLmpzQ2FsbHMubGFzdCgpOworICAgICAgICAg
ICAgc3RhdGUuanNDYWxscy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBpLS07CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2FsbC5tX2luc3Ry
dWN0aW9uT2Zmc2V0ID0gaXRlci0+dmFsdWUuaW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgfQorICAg
IAorICAgIHN0ZDo6c29ydChzdGF0ZS5qc0NhbGxzLmJlZ2luKCksIHN0YXRlLmpzQ2FsbHMuZW5k
KCkpOworICAgIAorICAgIGNvZGVCbG9jay0+c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKHN0YXRl
LmpzQ2FsbHMuc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5qc0NhbGxzLnNp
emUoKTsgaS0tOykgeworICAgICAgICBKU0NhbGwmIGNhbGwgPSBzdGF0ZS5qc0NhbGxzW2ldOwor
CisgICAgICAgIENDYWxsSGVscGVycyBmYXN0UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7CisgICAg
ICAgIGNhbGwuZW1pdChmYXN0UGF0aEpJVCk7CisgICAgICAgIAorICAgICAgICBjaGFyKiBzdGFy
dE9mSUMgPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIGNhbGwubV9p
bnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAgCisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cih2bSwgJmZhc3RQYXRoSklULCBzdGFydE9mSUMsIHNpemVPZkNhbGwoKSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGxpbmtCdWZmZXIuaXNWYWxpZCgpKTsKKyAgICAgICAgCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBc3NlbWJsZXJUeXBlX1Q6OmZpbGxOb3BzKAorICAgICAgICAgICAgc3Rh
cnRPZklDICsgbGlua0J1ZmZlci5zaXplKCksIHNpemVPZkNhbGwoKSAtIGxpbmtCdWZmZXIuc2l6
ZSgpKTsKKyAgICAgICAgCisgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IGNvZGVCbG9jay0+
Y2FsbExpbmtJbmZvKGkpOworICAgICAgICBjYWxsLmxpbmsodm0sIGxpbmtCdWZmZXIsIGluZm8p
OworICAgIH0KKyAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2Nr
KTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGV4aXRJbmRleCA9IGppdENvZGUtPm9zckV4aXQu
c2l6ZSgpOyBleGl0SW5kZXgtLTspIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSW5saW5lQ2FjaGVTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDcsNiArNDcsMTEgQEAgc2l6ZV90IHNpemVPZlB1dEJ5SWQoKQogICAgIHJldHVybiAz
MjsKIH0KIAorc2l6ZV90IHNpemVPZkNhbGwoKQoreworICAgIHJldHVybiA0MzsKK30KKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgJKHJl
dmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2Fj
aGVTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgewogCiBzaXplX3Qgc2l6ZU9mR2V0QnlJZCgpOwogc2l6ZV90IHNpemVP
ZlB1dEJ5SWQoKTsKK3NpemVfdCBzaXplT2ZDYWxsKCk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBv
c2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRy
aW5zaWNSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5
ICs0Myw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhmcmFt
ZUFkZHJlc3MsICJsbHZtLmZyYW1lYWRkcmVzcyIsIGZ1bmN0aW9uVHlwZShwb2ludGVyVHlwZShp
bnQ4KSwgaW50MzIpKSBcCiAgICAgbWFjcm8obXVsV2l0aE92ZXJmbG93MzIsICJsbHZtLnNtdWwu
d2l0aC5vdmVyZmxvdy5pMzIiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGlu
dDMyLCBib29sZWFuKSwgaW50MzIsIGludDMyKSkgXAogICAgIG1hY3JvKG11bFdpdGhPdmVyZmxv
dzY0LCAibGx2bS5zbXVsLndpdGgub3ZlcmZsb3cuaTY0IiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5
cGUobV9jb250ZXh0LCBpbnQ2NCwgYm9vbGVhbiksIGludDY0LCBpbnQ2NCkpIFwKLSAgICBtYWNy
byhwYXRjaHBvaW50SW50NjQsICJsbHZtLmV4cGVyaW1lbnRhbC5wYXRjaHBvaW50Lmk2NCIsIGZ1
bmN0aW9uVHlwZShpbnQ2NCwgaW50MzIsIGludDMyLCByZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBc
Ci0gICAgbWFjcm8ocGF0Y2hwb2ludFZvaWQsICJsbHZtLmV4cGVyaW1lbnRhbC5wYXRjaHBvaW50
LnZvaWQiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDMyLCBpbnQzMiwgcmVmOCwgaW50MzIs
IFZhcmlhZGljKSkgXAotICAgIG1hY3JvKHN0YWNrbWFwLCAibGx2bS5leHBlcmltZW50YWwuc3Rh
Y2ttYXAiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDMyLCBpbnQzMiwgVmFyaWFkaWMpKSBc
CisgICAgbWFjcm8ocGF0Y2hwb2ludEludDY0LCAibGx2bS5leHBlcmltZW50YWwucGF0Y2hwb2lu
dC5pNjQiLCBmdW5jdGlvblR5cGUoaW50NjQsIGludDY0LCBpbnQzMiwgcmVmOCwgaW50MzIsIFZh
cmlhZGljKSkgXAorICAgIG1hY3JvKHBhdGNocG9pbnRWb2lkLCAibGx2bS5leHBlcmltZW50YWwu
cGF0Y2hwb2ludC52b2lkIiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQ2NCwgaW50MzIsIHJl
ZjgsIGludDMyLCBWYXJpYWRpYykpIFwKKyAgICBtYWNybyhzdGFja21hcCwgImxsdm0uZXhwZXJp
bWVudGFsLnN0YWNrbWFwIiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQ2NCwgaW50MzIsIFZh
cmlhZGljKSkgXAogICAgIG1hY3JvKHN1YldpdGhPdmVyZmxvdzMyLCAibGx2bS5zc3ViLndpdGgu
b3ZlcmZsb3cuaTMyIiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQzMiwg
Ym9vbGVhbiksIGludDMyLCBpbnQzMikpIFwKICAgICBtYWNybyhzdWJXaXRoT3ZlcmZsb3c2NCwg
Imxsdm0uc3N1Yi53aXRoLm92ZXJmbG93Lmk2NCIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1f
Y29udGV4dCwgaW50NjQsIGJvb2xlYW4pLCBpbnQ2NCwgaW50NjQpKSBcCiAgICAgbWFjcm8odHJh
cCwgImxsdm0udHJhcCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSkpIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMSlNDYWxsLmgiCisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitKU0NhbGw6OkpTQ2Fs
bCh1bnNpZ25lZCBzdGFja21hcElELCBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4pCisgICAgOiBtX3N0YWNrbWFwSUQoc3RhY2ttYXBJRCkKKyAg
ICAsIG1fY2FsbFR5cGUoY2FsbFR5cGUpCisgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikK
KyAgICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoMCkKK3sKK30KKwordm9pZCBKU0NhbGw6OmVtaXQo
Q0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0g
aml0LmJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwg
R1BSSW5mbzo6cmVnVDAsIG1fdGFyZ2V0VG9DaGVjaywKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKDApKTsKKyAgICAKKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3Bl
Q2hhaW4oKSksCisgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKKyAgICBqaXQuc3RvcmU2NCgKKyAg
ICAgICAgR1BSSW5mbzo6cmVnVDEsCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsCisgICAgICAgICAg
ICBzaXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6U2NvcGVDaGFpbiAtIHNpemVvZih2b2lkKikp
KTsKKyAgICAKKyAgICBtX2Zhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOworICAgIAorICAgIHNsb3dQYXRoLmxpbmsoJmpp
dCk7CisgICAgbV9zbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIAorICAgIGRvbmUubGlu
aygmaml0KTsKK30KKwordm9pZCBKU0NhbGw6OmxpbmsoVk0mIHZtLCBMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyLCBDYWxsTGlua0luZm8mIGNhbGxJbmZvKQoreworICAgIFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvcjsKKyAgICBpZiAobV9jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdCkK
KyAgICAgICAgZ2VuZXJhdG9yID0gbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yOworICAgIGVs
c2UKKyAgICAgICAgZ2VuZXJhdG9yID0gbGlua0NhbGxUaHVua0dlbmVyYXRvcjsKKyAgICAKKyAg
ICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAgIG1fc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLmdl
dENUSVN0dWIoZ2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIAor
ICAgIGNhbGxJbmZvLmNhbGxUeXBlID0gbV9jYWxsVHlwZTsKKyAgICBjYWxsSW5mby5jb2RlT3Jp
Z2luID0gbV9jb2RlT3JpZ2luOworICAgIGNhbGxJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fc2xvd0NhbGwpOworICAgIGNhbGxJbmZvLmhv
dFBhdGhCZWdpbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3RhcmdldFRvQ2hlY2spOworICAg
IGNhbGxJbmZvLmhvdFBhdGhPdGhlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1f
ZmFzdENhbGwpOworICAgIGNhbGxJbmZvLmNhbGxlZUdQUiA9IEdQUkluZm86OnJlZ1QwOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRlRMSlNDYWxsX2gKKyNkZWZpbmUgRlRMSlNDYWxsX2gKKworI2lmIEVO
QUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ2Fs
bExpbmtJbmZvLmgiCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkxpbmtCdWZm
ZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitjbGFzcyBKU0NhbGwg
eworcHVibGljOgorICAgIEpTQ2FsbCh1bnNpZ25lZCBzdGFja21hcElELCBDYWxsTGlua0luZm86
OkNhbGxUeXBlLCBDb2RlT3JpZ2luKTsKKyAgICAKKyAgICB2b2lkIGVtaXQoQ0NhbGxIZWxwZXJz
Jik7CisgICAgdm9pZCBsaW5rKFZNJiwgTGlua0J1ZmZlciYsIENhbGxMaW5rSW5mbyYpOworICAg
IAorICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrbWFwSUQ7
IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBKU0NhbGwmIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5zdHJ1Y3Rpb25PZmZzZXQgPCBvdGhlci5tX2luc3Ry
dWN0aW9uT2Zmc2V0OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9zdGFj
a21hcElEOworICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgbV9jYWxsVHlwZTsKKyAgICBDb2Rl
T3JpZ2luIG1fY29kZU9yaWdpbjsKKyAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBtX3Rh
cmdldFRvQ2hlY2s7CisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG1fZmFzdENhbGw7CisgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIG1fc2xvd0NhbGw7CisKK3B1YmxpYzoKKyAgICB1aW50MzJfdCBtX2lu
c3RydWN0aW9uT2Zmc2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5k
aWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExKU0NhbGxfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2
aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJ
RHMrKzsKICAgICAgICAgbV9vdXQuY2FsbCgKLSAgICAgICAgICAgIG1fb3V0LnN0YWNrbWFwSW50
cmluc2ljKCksIG1fb3V0LmNvbnN0SW50MzIobV9mdGxTdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQp
LAorICAgICAgICAgICAgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgbV9vdXQuY29uc3RJbnQ2
NChtX2Z0bFN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCksCiAgICAgICAgICAgICBtX291dC5pbnQz
Mlplcm8sIGNhcHR1cmVkQWxsb2NhKTsKICAgICAgICAgCiAgICAgICAgIG1fY2FsbEZyYW1lID0g
bV9vdXQucHRyVG9JbnQoCkBAIC0xMjk3LDcgKzEyOTcsNyBAQCBwcml2YXRlOgogICAgICAgICAK
ICAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKAogICAgICAgICAgICAgbV9vdXQucGF0
Y2hwb2ludEludDY0SW50cmluc2ljKCksCi0gICAgICAgICAgICBtX291dC5jb25zdEludDMyKHN0
YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkdldEJ5SWQoKSksCisgICAgICAgICAg
ICBtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkdl
dEJ5SWQoKSksCiAgICAgICAgICAgICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0
SW50MzIoMSksIGJhc2UpOwogICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9u
KGNhbGwsIExMVk1BbnlSZWdDYWxsQ29udik7CiAgICAgICAgIHNldEpTVmFsdWUoY2FsbCk7CkBA
IC0xMzIyLDcgKzEzMjIsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTFZhbHVlIGNh
bGwgPSBtX291dC5jYWxsKAogICAgICAgICAgICAgbV9vdXQucGF0Y2hwb2ludFZvaWRJbnRyaW5z
aWMoKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3RhY2ttYXBJRCksIG1fb3V0LmNv
bnN0SW50MzIoc2l6ZU9mUHV0QnlJZCgpKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQo
c3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mUHV0QnlJZCgpKSwKICAgICAgICAg
ICAgIGNvbnN0TnVsbChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigyKSwgYmFzZSwgdmFs
dWUpOwogICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1B
bnlSZWdDYWxsQ29udik7CiAgICAgICAgIApAQCAtMjQzNywzNSArMjQzNyw0MCBAQCBwcml2YXRl
OgogICAgIAogICAgIHZvaWQgY29tcGlsZUNhbGxPckNvbnN0cnVjdCgpCiAgICAgewotICAgICAg
ICAvLyBGSVhNRTogVGhpcyBpcyB1bmFjY2VwdGFibHkgc2xvdy4KLSAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMQorICAgICAgICBpbnQgZHVt
bXlUaGlzQXJndW1lbnQgPSBtX25vZGUtPm9wKCkgPT0gQ2FsbCA/IDAgOiAxOworICAgICAgICBp
bnQgbnVtUGFzc2VkQXJncyA9IG1fbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CisgICAgICAgIGlu
dCBudW1BcmdzID0gbnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50OwogICAgICAgICAK
LSAgICAgICAgSl9KSVRPcGVyYXRpb25fRSBmdW5jdGlvbiA9Ci0gICAgICAgICAgICBtX25vZGUt
Pm9wKCkgPT0gQ2FsbCA/IG9wZXJhdGlvbkZUTENhbGwgOiBvcGVyYXRpb25GVExDb25zdHJ1Y3Q7
CisgICAgICAgIExWYWx1ZSBjYWxsZWUgPSBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCAwKSk7CiAgICAgICAgIAotICAgICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBt
X25vZGUtPm9wKCkgPT0gQ2FsbCA/IDAgOiAxOworICAgICAgICB1bnNpZ25lZCBzdGFja21hcElE
ID0gbV9zdGFja21hcElEcysrOwogICAgICAgICAKLSAgICAgICAgaW50IG51bVBhc3NlZEFyZ3Mg
PSBtX25vZGUtPm51bUNoaWxkcmVuKCkgLSAxOworICAgICAgICBWZWN0b3I8TFZhbHVlPiBhcmd1
bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQ2NChzdGFja21h
cElEKSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMihzaXplT2ZD
YWxsKCkpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjb25zdE51bGwobV9vdXQucmVmOCkp
OworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50MzIoMSArIEpTU3RhY2s6
OkNhbGxGcmFtZUhlYWRlclNpemUgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSArIG51
bUFyZ3MpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjYWxsZWUpOyAvLyBjYWxsZWUgLT4g
JXJkaQorICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGdldFVuZGVmKG1fb3V0LmludDY0KSk7IC8v
IGNvZGUgYmxvY2sKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChnZXRVbmRlZihtX291dC5pbnQ2
NCkpOyAvLyBzY29wZSBjaGFpbgorICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNhbGxlZSk7IC8v
IGNhbGxlZSAtPiBzdGFjaworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50
NjQobnVtQXJncykpOyAvLyBhcmd1bWVudCBjb3VudCBhbmQgemVyb3MgZm9yIHRoZSB0YWcKKyAg
ICAgICAgaWYgKGR1bW15VGhpc0FyZ3VtZW50KQorICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVu
ZChnZXRVbmRlZihtX291dC5pbnQ2NCkpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51
bVBhc3NlZEFyZ3M7ICsraSkKKyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobG93SlNWYWx1
ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSArIGkpKSk7CiAgICAgICAgIAotICAgICAg
ICBMVmFsdWUgY2FsbGVlRnJhbWUgPSBtX291dC5hZGQoCi0gICAgICAgICAgICBtX2NhbGxGcmFt
ZSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihSZWdpc3RlcikgKiB2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChtX2dyYXBoLmZyYW1lUmVnaXN0ZXJDb3VudCgpKS5vZmZzZXQo
KSkpOworICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7CiAgICAgICAgIAotICAgICAgICBtX291dC5z
dG9yZTMyKAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihudW1QYXNzZWRBcmdzICsgZHVt
bXlUaGlzQXJndW1lbnQpLAotICAgICAgICAgICAgcGF5bG9hZEZvcihjYWxsZWVGcmFtZSwgSlNT
dGFjazo6QXJndW1lbnRDb3VudCkpOwotICAgICAgICBtX291dC5zdG9yZTY0KG1fY2FsbEZyYW1l
LCBjYWxsZWVGcmFtZSwgbV9oZWFwcy5DYWxsRnJhbWVfY2FsbGVyRnJhbWUpOwotICAgICAgICBt
X291dC5zdG9yZTY0KAotICAgICAgICAgICAgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMCkpLAotICAgICAgICAgICAgYWRkcmVzc0ZvcihjYWxsZWVGcmFtZSwgSlNTdGFj
azo6Q2FsbGVlKSk7CisgICAgICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2FsbChtX291dC5wYXRj
aHBvaW50SW50NjRJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKKyAgICAgICAgc2V0SW5zdHJ1Y3Rp
b25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNV2ViS2l0SlNDYWxsQ29udik7CiAgICAgICAg
IAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewotICAg
ICAgICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxICsgaSkpLAotICAgICAgICAgICAgICAgIGFkZHJlc3NG
b3IoY2FsbGVlRnJhbWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkgKyBkdW1teVRoaXNB
cmd1bWVudCkub2Zmc2V0KCkpKTsKLSAgICAgICAgfQorICAgICAgICBtX2Z0bFN0YXRlLmpzQ2Fs
bHMuYXBwZW5kKEpTQ2FsbCgKKyAgICAgICAgICAgIHN0YWNrbWFwSUQsCisgICAgICAgICAgICBt
X25vZGUtPm9wKCkgPT0gQ2FsbCA/IENhbGxMaW5rSW5mbzo6Q2FsbCA6IENhbGxMaW5rSW5mbzo6
Q29uc3RydWN0LAorICAgICAgICAgICAgbV9ub2RlLT5jb2RlT3JpZ2luKSk7CiAgICAgICAgIAot
ICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5vcGVyYXRpb24oZnVuY3Rpb24pLCBjYWxs
ZWVGcmFtZSkpOworICAgICAgICBzZXRKU1ZhbHVlKGNhbGwpOwogICAgIH0KICAgICAKICAgICB2
b2lkIGNvbXBpbGVKdW1wKCkKQEAgLTQwOTIsNyArNDA5Nyw3IEBAIHByaXZhdGU6CiAgICAgewog
ICAgICAgICBleGl0Lm1fc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKICAgICAgICAgYXJn
dW1lbnRzLmluc2VydCgwLCBtX291dC5jb25zdEludDMyKE1hY3JvQXNzZW1ibGVyOjptYXhKdW1w
UmVwbGFjZW1lbnRTaXplKCkpKTsKLSAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBtX291dC5j
b25zdEludDMyKGV4aXQubV9zdGFja21hcElEKSk7CisgICAgICAgIGFyZ3VtZW50cy5pbnNlcnQo
MCwgbV9vdXQuY29uc3RJbnQ2NChleGl0Lm1fc3RhY2ttYXBJRCkpOwogICAgICAgICAKICAgICAg
ICAgbV9vdXQuY2FsbChtX291dC5zdGFja21hcEludHJpbnNpYygpLCBhcmd1bWVudHMpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAJKHJl
dmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksOSBAQCB2b2lkIFN0YWNrTWFwczo6TG9j
YXRpb246OnJlc3RvcmVJbnRvKAogCiBib29sIFN0YWNrTWFwczo6UmVjb3JkOjpwYXJzZShEYXRh
VmlldyogdmlldywgdW5zaWduZWQmIG9mZnNldCkKIHsKLSAgICBwYXRjaHBvaW50SUQgPSB2aWV3
LT5yZWFkPHVpbnQzMl90PihvZmZzZXQsIHRydWUpOworICAgIGludDY0X3QgaWQgPSB2aWV3LT5y
ZWFkPGludDY0X3Q+KG9mZnNldCwgdHJ1ZSk7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludDMy
X3Q+KGlkKSA9PSBpZCk7CisgICAgcGF0Y2hwb2ludElEID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KGlkKTsKICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocGF0Y2hwb2ludElEKSA8IDApCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKQEAgLTkwLDYgKzkyLDEzIEBAIGJvb2wgU3RhY2tN
YXBzOjpSZWNvcmQ6OnBhcnNlKERhdGFWaWV3KiAKICAgICB3aGlsZSAobGVuZ3RoLS0pCiAgICAg
ICAgIGxvY2F0aW9ucy5hcHBlbmQocmVhZE9iamVjdDxMb2NhdGlvbj4odmlldywgb2Zmc2V0KSk7
CiAgICAgCisgICAgdW5zaWduZWQgbnVtTGl2ZU91dHMgPSB2aWV3LT5yZWFkPHVpbnQxNl90Pihv
ZmZzZXQsIHRydWUpOworICAgIHdoaWxlIChudW1MaXZlT3V0cy0tKSB7CisgICAgICAgIHZpZXct
PnJlYWQ8dWludDE2X3Q+KG9mZnNldCwgdHJ1ZSk7IC8vIHJlZ251bQorICAgICAgICB2aWV3LT5y
ZWFkPHVpbnQ4X3Q+KG9mZnNldCwgdHJ1ZSk7IC8vIHJlc2VydmVkCisgICAgICAgIHZpZXctPnJl
YWQ8dWludDhfdD4ob2Zmc2V0LCB0cnVlKTsgLy8gc2l6ZSBpbiBieXRlcworICAgIH0KKyAgICAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3Rh
dGUuaAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiRlRMSW5s
aW5lQ2FjaGVEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgogI2luY2x1ZGUg
IkZUTEpJVEZpbmFsaXplci5oIgorI2luY2x1ZGUgIkZUTEpTQ2FsbC5oIgogI2luY2x1ZGUgIkZU
TFN0YWNrTWFwcy5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCkBAIC02MCw2ICs2
MSw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBjYXB0dXJlZFN0YWNrbWFwSUQ7CiAgICAgU2Vn
bWVudGVkVmVjdG9yPEdldEJ5SWREZXNjcmlwdG9yPiBnZXRCeUlkczsKICAgICBTZWdtZW50ZWRW
ZWN0b3I8UHV0QnlJZERlc2NyaXB0b3I+IHB1dEJ5SWRzOworICAgIFZlY3RvcjxKU0NhbGw+IGpz
Q2FsbHM7CiAgICAgVmVjdG9yPENTdHJpbmc+IGNvZGVTZWN0aW9uTmFtZXM7CiAgICAgVmVjdG9y
PENTdHJpbmc+IGRhdGFTZWN0aW9uTmFtZXM7CiAgICAgUmVmQ291bnRlZEFycmF5PExTZWN0aW9u
V29yZD4gc3RhY2ttYXBzU2VjdGlvbjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219385</attachid>
            <date>2013-12-16 19:33:51 -0800</date>
            <delta_ts>2013-12-16 21:45:06 -0800</delta_ts>
            <desc>more...</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>37536</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNjY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDEzLTEyLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBiZSBhYmxlIHRvIGRvIGNhbGwgSUNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjU4MTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OkNhbGxMaW5rSW5mbyk6Cisg
ICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6bGluayk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICog
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6
CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmZpeEZ1
bmN0aW9uQmFzZWRPblN0YWNrTWFwcyk6CisgICAgICAgICogZnRsL0ZUTElubGluZUNhY2hlU2l6
ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mQ2FsbCk6CisgICAgICAgICogZnRsL0ZU
TElubGluZUNhY2hlU2l6ZS5oOgorICAgICAgICAqIGZ0bC9GVExKU0NhbGwuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OkpTQ2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6
SlNDYWxsOjplbWl0KToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OmxpbmspOgorICAgICAg
ICAqIGZ0bC9GVExKU0NhbGwuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6SlNDYWxsOjpz
dGFja21hcElEKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6Om9wZXJhdG9yPCk6CisgICAg
ICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdCk6CisgICAgICAgICogZnRsL0ZUTFN0
YXRlLmg6CisKIDIwMTMtMTItMTYgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIE1lcmdlZCByMTYwNjY1IGZyb20gdHJ1bmsuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTI2Nyw2ICsyNjcsOCBAQAogCQkwRjY2NkVDRDE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJy
ZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVDQjE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0
aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkIxNERGM0YxNjAwQjdCMkU0IC8qIERGR0FkamFjZW5j
eUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkMxNERGM0YxNjAw
QjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjZFMTY5MTRERjNGMTMwMEI3QjJFNCAvKiBERkdFZGdlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2QjFDQjUxODVGQzlF
OTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCMzE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNw
cCAqLzsgfTsKKwkJMEY2QjFDQjYxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQjQxODVGQzlF
OTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNzAyNUE5MTcxNEIwRkEwMDM4MkMwRSAvKiBERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3MDI1QTcxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAgKi87IH07CiAJCTBGNzAyNUFBMTcxNEIwRkMwMDM4MkMwRSAvKiBERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcxNENB
MTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi87
IH07CkBAIC0xNTc5LDYgKzE1ODEsOCBAQAogCQkwRjY2NkVDQjE4MzZCMzdFMDBEMDE3RjEgLyog
REZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGphY2VuY3lMaXN0Lmg7
IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7IHBhdGggPSBkZmcvREZHRWRnZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZCMUNCMzE4NUZDOUU5MDA4NDVEOTcgLyogRlRM
SlNDYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2Fs
bC5jcHA7IHBhdGggPSBmdGwvRlRMSlNDYWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGwuaDsgcGF0aCA9IGZ0bC9GVExKU0NhbGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MDI1QTcxNzE0QjBGODAwMzgyQzBF
IC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOyBwYXRoID0gZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQ
cm9wYWdhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0JhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg1
OCw2ICsyODYyLDggQEAKIAkJCQkwRkVBMEEwMzE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29k
ZS5oICovLAogCQkJCUE3OEE5NzdEMTc5NzM4RDUwMDlERjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIu
Y3BwICovLAogCQkJCUE3OEE5NzdFMTc5NzM4RDUwMDlERjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIu
aCAqLywKKwkJCQkwRjZCMUNCMzE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCAqLywK
KwkJCQkwRjZCMUNCNDE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmggKi8sCiAJCQkJMEY4
RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuY3BwICovLAogCQkJCTBGOEYyQjk0MTcy
RTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmggKi8sCiAJCQkJMEZDRUZBREQxODA3MzhDMDAwNDcy
Q0U0IC8qIEZUTExvY2F0aW9uLmNwcCAqLywKQEAgLTQzOTUsNiArNDQwMSw3IEBACiAJCQkJMEZC
QzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzhBOTc3NTE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzhBOTc3NzE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjZCMUNCNjE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlND
YWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZH
Rml4dXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJD
IC8qIERGR0ZsdXNoZWRBdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKQEAgLTU1NTEsNiArNTU1
OCw3IEBACiAJCQkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtl
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM5QTE4MDNBREI3MDA3M0MyQkMgLyogRlRM
U3RhY2tNYXBzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTE2MTcwNkJCOTAwMEJCNzIy
QyAvKiBGVExTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjZCMUNCNTE4NUZDOUU5MDA4
NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkUxMTcxNzhF
MUMwMDY5MEM3RiAvKiBGVExUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRTMx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0N0YzOUNCMTA3RUMzNzYwMDQyN0E0OCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxNCArMzgs
NyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSwgUmVwYXRjCiAgICAgQVNTRVJU
KGlzTGlua2VkKCkpOwogICAgIAogICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2Vt
ZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldp
dGhQYXRjaE9uUmVnaXN0ZXIoaG90UGF0aEJlZ2luKSwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQ+KGNhbGxlZUdQUiksIDApOwotICAgIGlmIChpc0RGRykgewotI2lmIEVO
QUJMRShERkdfSklUKQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9j
YXRpb24sIChjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1
Y3RUaHVua0dlbmVyYXRvcikgOiB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3Ip
KS5jb2RlKCkpOwotI2Vsc2UKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSNlbmRpZgotICAgIH0gZWxzZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0
dXJuTG9jYXRpb24sIGNhbGxUeXBlID09IENvbnN0cnVjdCA/IHZtLmdldENUSVN0dWIobGlua0Nv
bnN0cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkgOiB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1
bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVy
bkxvY2F0aW9uLCBjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKGxpbmtDb25z
dHJ1Y3RUaHVua0dlbmVyYXRvcikuY29kZSgpIDogdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS5jb2RlKCkpOwogICAgIGhhc1NlZW5TaG91bGRSZXBhdGNoID0gZmFsc2U7CiAg
ICAgY2FsbGVlLmNsZWFyKCk7CiAgICAgc3R1Yi5jbGVhcigpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMTYwNjIyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw3ICs1Niw2IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBwdWJsaWMgQmFz
aWNSYXdTZW4KICAgICAgICAgCiAgICAgQ2FsbExpbmtJbmZvKCkKICAgICAgICAgOiBoYXNTZWVu
U2hvdWxkUmVwYXRjaChmYWxzZSkKLSAgICAgICAgLCBpc0RGRyhmYWxzZSkKICAgICAgICAgLCBo
YXNTZWVuQ2xvc3VyZShmYWxzZSkKICAgICAgICAgLCBjYWxsVHlwZShOb25lKQogICAgIHsKQEAg
LTgwLDcgKzc5LDYgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1Nlbgog
ICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBsYXN0U2VlbkNhbGxlZTsKICAgICBSZWZQdHI8
Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YjsKICAgICBib29sIGhhc1NlZW5TaG91bGRSZXBh
dGNoIDogMTsKLSAgICBib29sIGlzREZHIDogMTsKICAgICBib29sIGhhc1NlZW5DbG9zdXJlIDog
MTsKICAgICB1bnNpZ25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAgICAgdW5zaWduZWQg
Y2FsbGVlR1BSIDogODsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDcgKzIzMCw2IEBA
IHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9qc0NhbGxzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIENhbGxMaW5r
SW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CiAgICAgICAgIGluZm8u
Y2FsbFR5cGUgPSBtX2pzQ2FsbHNbaV0ubV9jYWxsVHlwZTsKLSAgICAgICAgaW5mby5pc0RGRyA9
IHRydWU7CiAgICAgICAgIGluZm8uY29kZU9yaWdpbiA9IG1fanNDYWxsc1tpXS5tX2NvZGVPcmln
aW47CiAgICAgICAgIGxpbmtCdWZmZXIubGluayhtX2pzQ2FsbHNbaV0ubV9zbG93Q2FsbCwgRnVu
Y3Rpb25QdHIoKG1fdm0tPmdldENUSVN0dWIoaW5mby5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86
OkNvbnN0cnVjdCA/IGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvciA6IGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3IpKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgICAgICBpbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fanNDYWxs
c1tpXS5tX3Nsb3dDYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzA0LDExICs3MDQsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSog
bm9kZQogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKICAgICBKSVRDb21w
aWxlcjo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXBM
aXN0IHNsb3dQYXRoOworICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoOwogCiAgICAgbV9q
aXQuZW1pdFN0b3JlQ29kZU9yaWdpbihub2RlLT5jb2RlT3JpZ2luKTsKICAgICAKLSAgICBzbG93
UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgY2FsbGVlR1BSLCB0YXJnZXRUb0NoZWNrLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cigwKSkpOworICAgIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCB0YXJnZXRUb0NoZWNrLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cigwKSk7CiAKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2Nv
cGUpKSwgcmVzdWx0R1BSKTsKICAgICBtX2ppdC5zdG9yZTY0KHJlc3VsdEdQUiwgY2FsbGVlRnJh
bWVTbG90KEpTU3RhY2s6OlNjb3BlQ2hhaW4pKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAzLDYgKzEwMyw4IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2Rl
KiAKICAgICBjYXNlIEZ1bmN0aW9uUmVlbnRyeVdhdGNocG9pbnQ6CiAgICAgY2FzZSBWYXJpYWJs
ZVdhdGNocG9pbnQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKKyAgICBjYXNlIENhbGw6CisgICAg
Y2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBHZXRCeUlkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
b21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENv
bXBpbGUuY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTksNiArMjk5LDQ0IEBAIHN0YXRp
YyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgfQogICAgIH0KICAg
ICAKKyAgICAvLyBIYW5kbGluZyBKUyBjYWxscyBpcyB3ZWlyZDogd2UgbmVlZCB0byBlbnN1cmUg
dGhhdCB3ZSBzb3J0IHRoZW0gYnkgdGhlIFBDIGluIExMVk0KKyAgICAvLyBnZW5lcmF0ZWQgY29k
ZS4gVGhhdCBpbXBsaWVzIGZpcnN0IHBydW5pbmcgdGhlIG9uZXMgdGhhdCBMTFZNIGRpZG4ndCBn
ZW5lcmF0ZS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuanNDYWxscy5zaXpl
KCk7ICsraSkgeworICAgICAgICBKU0NhbGwmIGNhbGwgPSBzdGF0ZS5qc0NhbGxzW2ldOworICAg
ICAgICAKKyAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNv
cmRNYXAuZmluZChjYWxsLnN0YWNrbWFwSUQoKSk7CisgICAgICAgIGlmIChpdGVyID09IHJlY29y
ZE1hcC5lbmQoKSkgeworICAgICAgICAgICAgLy8gSXQgd2FzIG9wdGltaXplZCBvdXQuIFBydW5l
IGl0LgorICAgICAgICAgICAgY2FsbCA9IHN0YXRlLmpzQ2FsbHMubGFzdCgpOworICAgICAgICAg
ICAgc3RhdGUuanNDYWxscy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBpLS07CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2FsbC5tX2luc3Ry
dWN0aW9uT2Zmc2V0ID0gaXRlci0+dmFsdWUuaW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgfQorICAg
IAorICAgIHN0ZDo6c29ydChzdGF0ZS5qc0NhbGxzLmJlZ2luKCksIHN0YXRlLmpzQ2FsbHMuZW5k
KCkpOworICAgIAorICAgIGNvZGVCbG9jay0+c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKHN0YXRl
LmpzQ2FsbHMuc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5qc0NhbGxzLnNp
emUoKTsgaS0tOykgeworICAgICAgICBKU0NhbGwmIGNhbGwgPSBzdGF0ZS5qc0NhbGxzW2ldOwor
CisgICAgICAgIENDYWxsSGVscGVycyBmYXN0UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7CisgICAg
ICAgIGNhbGwuZW1pdChmYXN0UGF0aEpJVCk7CisgICAgICAgIAorICAgICAgICBjaGFyKiBzdGFy
dE9mSUMgPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIGNhbGwubV9p
bnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAgCisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cih2bSwgJmZhc3RQYXRoSklULCBzdGFydE9mSUMsIHNpemVPZkNhbGwoKSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGxpbmtCdWZmZXIuaXNWYWxpZCgpKTsKKyAgICAgICAgCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBc3NlbWJsZXJUeXBlX1Q6OmZpbGxOb3BzKAorICAgICAgICAgICAgc3Rh
cnRPZklDICsgbGlua0J1ZmZlci5zaXplKCksIHNpemVPZkNhbGwoKSAtIGxpbmtCdWZmZXIuc2l6
ZSgpKTsKKyAgICAgICAgCisgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IGNvZGVCbG9jay0+
Y2FsbExpbmtJbmZvKGkpOworICAgICAgICBjYWxsLmxpbmsodm0sIGxpbmtCdWZmZXIsIGluZm8p
OworICAgIH0KKyAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2Nr
KTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGV4aXRJbmRleCA9IGppdENvZGUtPm9zckV4aXQu
c2l6ZSgpOyBleGl0SW5kZXgtLTspIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSW5saW5lQ2FjaGVTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDcsNiArNDcsMTEgQEAgc2l6ZV90IHNpemVPZlB1dEJ5SWQoKQogICAgIHJldHVybiAz
MjsKIH0KIAorc2l6ZV90IHNpemVPZkNhbGwoKQoreworICAgIHJldHVybiA0MzsKK30KKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgJKHJl
dmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2Fj
aGVTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgewogCiBzaXplX3Qgc2l6ZU9mR2V0QnlJZCgpOwogc2l6ZV90IHNpemVP
ZlB1dEJ5SWQoKTsKK3NpemVfdCBzaXplT2ZDYWxsKCk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBv
c2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRy
aW5zaWNSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5
ICs0Myw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhmcmFt
ZUFkZHJlc3MsICJsbHZtLmZyYW1lYWRkcmVzcyIsIGZ1bmN0aW9uVHlwZShwb2ludGVyVHlwZShp
bnQ4KSwgaW50MzIpKSBcCiAgICAgbWFjcm8obXVsV2l0aE92ZXJmbG93MzIsICJsbHZtLnNtdWwu
d2l0aC5vdmVyZmxvdy5pMzIiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGlu
dDMyLCBib29sZWFuKSwgaW50MzIsIGludDMyKSkgXAogICAgIG1hY3JvKG11bFdpdGhPdmVyZmxv
dzY0LCAibGx2bS5zbXVsLndpdGgub3ZlcmZsb3cuaTY0IiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5
cGUobV9jb250ZXh0LCBpbnQ2NCwgYm9vbGVhbiksIGludDY0LCBpbnQ2NCkpIFwKLSAgICBtYWNy
byhwYXRjaHBvaW50SW50NjQsICJsbHZtLmV4cGVyaW1lbnRhbC5wYXRjaHBvaW50Lmk2NCIsIGZ1
bmN0aW9uVHlwZShpbnQ2NCwgaW50MzIsIGludDMyLCByZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBc
Ci0gICAgbWFjcm8ocGF0Y2hwb2ludFZvaWQsICJsbHZtLmV4cGVyaW1lbnRhbC5wYXRjaHBvaW50
LnZvaWQiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDMyLCBpbnQzMiwgcmVmOCwgaW50MzIs
IFZhcmlhZGljKSkgXAotICAgIG1hY3JvKHN0YWNrbWFwLCAibGx2bS5leHBlcmltZW50YWwuc3Rh
Y2ttYXAiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDMyLCBpbnQzMiwgVmFyaWFkaWMpKSBc
CisgICAgbWFjcm8ocGF0Y2hwb2ludEludDY0LCAibGx2bS5leHBlcmltZW50YWwucGF0Y2hwb2lu
dC5pNjQiLCBmdW5jdGlvblR5cGUoaW50NjQsIGludDY0LCBpbnQzMiwgcmVmOCwgaW50MzIsIFZh
cmlhZGljKSkgXAorICAgIG1hY3JvKHBhdGNocG9pbnRWb2lkLCAibGx2bS5leHBlcmltZW50YWwu
cGF0Y2hwb2ludC52b2lkIiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQ2NCwgaW50MzIsIHJl
ZjgsIGludDMyLCBWYXJpYWRpYykpIFwKKyAgICBtYWNybyhzdGFja21hcCwgImxsdm0uZXhwZXJp
bWVudGFsLnN0YWNrbWFwIiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQ2NCwgaW50MzIsIFZh
cmlhZGljKSkgXAogICAgIG1hY3JvKHN1YldpdGhPdmVyZmxvdzMyLCAibGx2bS5zc3ViLndpdGgu
b3ZlcmZsb3cuaTMyIiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQzMiwg
Ym9vbGVhbiksIGludDMyLCBpbnQzMikpIFwKICAgICBtYWNybyhzdWJXaXRoT3ZlcmZsb3c2NCwg
Imxsdm0uc3N1Yi53aXRoLm92ZXJmbG93Lmk2NCIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1f
Y29udGV4dCwgaW50NjQsIGJvb2xlYW4pLCBpbnQ2NCwgaW50NjQpKSBcCiAgICAgbWFjcm8odHJh
cCwgImxsdm0udHJhcCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSkpIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMSlNDYWxsLmgiCisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitKU0NhbGw6OkpTQ2Fs
bCh1bnNpZ25lZCBzdGFja21hcElELCBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4pCisgICAgOiBtX3N0YWNrbWFwSUQoc3RhY2ttYXBJRCkKKyAg
ICAsIG1fY2FsbFR5cGUoY2FsbFR5cGUpCisgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikK
KyAgICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoMCkKK3sKK30KKwordm9pZCBKU0NhbGw6OmVtaXQo
Q0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0g
aml0LmJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwg
R1BSSW5mbzo6cmVnVDAsIG1fdGFyZ2V0VG9DaGVjaywKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKDApKTsKKyAgICAKKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3Bl
Q2hhaW4oKSksCisgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKKyAgICBqaXQuc3RvcmU2NCgKKyAg
ICAgICAgR1BSSW5mbzo6cmVnVDEsCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsCisgICAgICAgICAg
ICBzaXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6U2NvcGVDaGFpbiAtIHNpemVvZih2b2lkKikp
KTsKKyAgICAKKyAgICBtX2Zhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOworICAgIAorICAgIHNsb3dQYXRoLmxpbmsoJmpp
dCk7CisgICAgbV9zbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIAorICAgIGRvbmUubGlu
aygmaml0KTsKK30KKwordm9pZCBKU0NhbGw6OmxpbmsoVk0mIHZtLCBMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyLCBDYWxsTGlua0luZm8mIGNhbGxJbmZvKQoreworICAgIFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvcjsKKyAgICBpZiAobV9jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdCkK
KyAgICAgICAgZ2VuZXJhdG9yID0gbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yOworICAgIGVs
c2UKKyAgICAgICAgZ2VuZXJhdG9yID0gbGlua0NhbGxUaHVua0dlbmVyYXRvcjsKKyAgICAKKyAg
ICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAgIG1fc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLmdl
dENUSVN0dWIoZ2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIAor
ICAgIGNhbGxJbmZvLmNhbGxUeXBlID0gbV9jYWxsVHlwZTsKKyAgICBjYWxsSW5mby5jb2RlT3Jp
Z2luID0gbV9jb2RlT3JpZ2luOworICAgIGNhbGxJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fc2xvd0NhbGwpOworICAgIGNhbGxJbmZvLmhv
dFBhdGhCZWdpbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3RhcmdldFRvQ2hlY2spOworICAg
IGNhbGxJbmZvLmhvdFBhdGhPdGhlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1f
ZmFzdENhbGwpOworICAgIGNhbGxJbmZvLmNhbGxlZUdQUiA9IEdQUkluZm86OnJlZ1QwOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRlRMSlNDYWxsX2gKKyNkZWZpbmUgRlRMSlNDYWxsX2gKKworI2lmIEVO
QUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ2Fs
bExpbmtJbmZvLmgiCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkxpbmtCdWZm
ZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitjbGFzcyBKU0NhbGwg
eworcHVibGljOgorICAgIEpTQ2FsbCh1bnNpZ25lZCBzdGFja21hcElELCBDYWxsTGlua0luZm86
OkNhbGxUeXBlLCBDb2RlT3JpZ2luKTsKKyAgICAKKyAgICB2b2lkIGVtaXQoQ0NhbGxIZWxwZXJz
Jik7CisgICAgdm9pZCBsaW5rKFZNJiwgTGlua0J1ZmZlciYsIENhbGxMaW5rSW5mbyYpOworICAg
IAorICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrbWFwSUQ7
IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBKU0NhbGwmIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5zdHJ1Y3Rpb25PZmZzZXQgPCBvdGhlci5tX2luc3Ry
dWN0aW9uT2Zmc2V0OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9zdGFj
a21hcElEOworICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgbV9jYWxsVHlwZTsKKyAgICBDb2Rl
T3JpZ2luIG1fY29kZU9yaWdpbjsKKyAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBtX3Rh
cmdldFRvQ2hlY2s7CisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG1fZmFzdENhbGw7CisgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIG1fc2xvd0NhbGw7CisKK3B1YmxpYzoKKyAgICB1aW50MzJfdCBtX2lu
c3RydWN0aW9uT2Zmc2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5k
aWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExKU0NhbGxfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2
aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJ
RHMrKzsKICAgICAgICAgbV9vdXQuY2FsbCgKLSAgICAgICAgICAgIG1fb3V0LnN0YWNrbWFwSW50
cmluc2ljKCksIG1fb3V0LmNvbnN0SW50MzIobV9mdGxTdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQp
LAorICAgICAgICAgICAgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgbV9vdXQuY29uc3RJbnQ2
NChtX2Z0bFN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCksCiAgICAgICAgICAgICBtX291dC5pbnQz
Mlplcm8sIGNhcHR1cmVkQWxsb2NhKTsKICAgICAgICAgCiAgICAgICAgIG1fY2FsbEZyYW1lID0g
bV9vdXQucHRyVG9JbnQoCkBAIC0xMjk3LDcgKzEyOTcsNyBAQCBwcml2YXRlOgogICAgICAgICAK
ICAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKAogICAgICAgICAgICAgbV9vdXQucGF0
Y2hwb2ludEludDY0SW50cmluc2ljKCksCi0gICAgICAgICAgICBtX291dC5jb25zdEludDMyKHN0
YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkdldEJ5SWQoKSksCisgICAgICAgICAg
ICBtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkdl
dEJ5SWQoKSksCiAgICAgICAgICAgICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0
SW50MzIoMSksIGJhc2UpOwogICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9u
KGNhbGwsIExMVk1BbnlSZWdDYWxsQ29udik7CiAgICAgICAgIHNldEpTVmFsdWUoY2FsbCk7CkBA
IC0xMzIyLDcgKzEzMjIsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTFZhbHVlIGNh
bGwgPSBtX291dC5jYWxsKAogICAgICAgICAgICAgbV9vdXQucGF0Y2hwb2ludFZvaWRJbnRyaW5z
aWMoKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3RhY2ttYXBJRCksIG1fb3V0LmNv
bnN0SW50MzIoc2l6ZU9mUHV0QnlJZCgpKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQo
c3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mUHV0QnlJZCgpKSwKICAgICAgICAg
ICAgIGNvbnN0TnVsbChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigyKSwgYmFzZSwgdmFs
dWUpOwogICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1B
bnlSZWdDYWxsQ29udik7CiAgICAgICAgIApAQCAtMjQzNywzNSArMjQzNyw0MCBAQCBwcml2YXRl
OgogICAgIAogICAgIHZvaWQgY29tcGlsZUNhbGxPckNvbnN0cnVjdCgpCiAgICAgewotICAgICAg
ICAvLyBGSVhNRTogVGhpcyBpcyB1bmFjY2VwdGFibHkgc2xvdy4KLSAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMQorICAgICAgICBpbnQgZHVt
bXlUaGlzQXJndW1lbnQgPSBtX25vZGUtPm9wKCkgPT0gQ2FsbCA/IDAgOiAxOworICAgICAgICBp
bnQgbnVtUGFzc2VkQXJncyA9IG1fbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CisgICAgICAgIGlu
dCBudW1BcmdzID0gbnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50OwogICAgICAgICAK
LSAgICAgICAgSl9KSVRPcGVyYXRpb25fRSBmdW5jdGlvbiA9Ci0gICAgICAgICAgICBtX25vZGUt
Pm9wKCkgPT0gQ2FsbCA/IG9wZXJhdGlvbkZUTENhbGwgOiBvcGVyYXRpb25GVExDb25zdHJ1Y3Q7
CisgICAgICAgIExWYWx1ZSBjYWxsZWUgPSBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCAwKSk7CiAgICAgICAgIAotICAgICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBt
X25vZGUtPm9wKCkgPT0gQ2FsbCA/IDAgOiAxOworICAgICAgICB1bnNpZ25lZCBzdGFja21hcElE
ID0gbV9zdGFja21hcElEcysrOwogICAgICAgICAKLSAgICAgICAgaW50IG51bVBhc3NlZEFyZ3Mg
PSBtX25vZGUtPm51bUNoaWxkcmVuKCkgLSAxOworICAgICAgICBWZWN0b3I8TFZhbHVlPiBhcmd1
bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQ2NChzdGFja21h
cElEKSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMihzaXplT2ZD
YWxsKCkpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjb25zdE51bGwobV9vdXQucmVmOCkp
OworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50MzIoMSArIEpTU3RhY2s6
OkNhbGxGcmFtZUhlYWRlclNpemUgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSArIG51
bUFyZ3MpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjYWxsZWUpOyAvLyBjYWxsZWUgLT4g
JXJkaQorICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGdldFVuZGVmKG1fb3V0LmludDY0KSk7IC8v
IGNvZGUgYmxvY2sKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChnZXRVbmRlZihtX291dC5pbnQ2
NCkpOyAvLyBzY29wZSBjaGFpbgorICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNhbGxlZSk7IC8v
IGNhbGxlZSAtPiBzdGFjaworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50
NjQobnVtQXJncykpOyAvLyBhcmd1bWVudCBjb3VudCBhbmQgemVyb3MgZm9yIHRoZSB0YWcKKyAg
ICAgICAgaWYgKGR1bW15VGhpc0FyZ3VtZW50KQorICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVu
ZChnZXRVbmRlZihtX291dC5pbnQ2NCkpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51
bVBhc3NlZEFyZ3M7ICsraSkKKyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobG93SlNWYWx1
ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSArIGkpKSk7CiAgICAgICAgIAotICAgICAg
ICBMVmFsdWUgY2FsbGVlRnJhbWUgPSBtX291dC5hZGQoCi0gICAgICAgICAgICBtX2NhbGxGcmFt
ZSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihSZWdpc3RlcikgKiB2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChtX2dyYXBoLmZyYW1lUmVnaXN0ZXJDb3VudCgpKS5vZmZzZXQo
KSkpOworICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7CiAgICAgICAgIAotICAgICAgICBtX291dC5z
dG9yZTMyKAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihudW1QYXNzZWRBcmdzICsgZHVt
bXlUaGlzQXJndW1lbnQpLAotICAgICAgICAgICAgcGF5bG9hZEZvcihjYWxsZWVGcmFtZSwgSlNT
dGFjazo6QXJndW1lbnRDb3VudCkpOwotICAgICAgICBtX291dC5zdG9yZTY0KG1fY2FsbEZyYW1l
LCBjYWxsZWVGcmFtZSwgbV9oZWFwcy5DYWxsRnJhbWVfY2FsbGVyRnJhbWUpOwotICAgICAgICBt
X291dC5zdG9yZTY0KAotICAgICAgICAgICAgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMCkpLAotICAgICAgICAgICAgYWRkcmVzc0ZvcihjYWxsZWVGcmFtZSwgSlNTdGFj
azo6Q2FsbGVlKSk7CisgICAgICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2FsbChtX291dC5wYXRj
aHBvaW50SW50NjRJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKKyAgICAgICAgc2V0SW5zdHJ1Y3Rp
b25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNV2ViS2l0SlNDYWxsQ29udik7CiAgICAgICAg
IAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewotICAg
ICAgICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxICsgaSkpLAotICAgICAgICAgICAgICAgIGFkZHJlc3NG
b3IoY2FsbGVlRnJhbWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkgKyBkdW1teVRoaXNB
cmd1bWVudCkub2Zmc2V0KCkpKTsKLSAgICAgICAgfQorICAgICAgICBtX2Z0bFN0YXRlLmpzQ2Fs
bHMuYXBwZW5kKEpTQ2FsbCgKKyAgICAgICAgICAgIHN0YWNrbWFwSUQsCisgICAgICAgICAgICBt
X25vZGUtPm9wKCkgPT0gQ2FsbCA/IENhbGxMaW5rSW5mbzo6Q2FsbCA6IENhbGxMaW5rSW5mbzo6
Q29uc3RydWN0LAorICAgICAgICAgICAgbV9ub2RlLT5jb2RlT3JpZ2luKSk7CiAgICAgICAgIAot
ICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5vcGVyYXRpb24oZnVuY3Rpb24pLCBjYWxs
ZWVGcmFtZSkpOworICAgICAgICBzZXRKU1ZhbHVlKGNhbGwpOwogICAgIH0KICAgICAKICAgICB2
b2lkIGNvbXBpbGVKdW1wKCkKQEAgLTQwOTIsNyArNDA5Nyw3IEBAIHByaXZhdGU6CiAgICAgewog
ICAgICAgICBleGl0Lm1fc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKICAgICAgICAgYXJn
dW1lbnRzLmluc2VydCgwLCBtX291dC5jb25zdEludDMyKE1hY3JvQXNzZW1ibGVyOjptYXhKdW1w
UmVwbGFjZW1lbnRTaXplKCkpKTsKLSAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBtX291dC5j
b25zdEludDMyKGV4aXQubV9zdGFja21hcElEKSk7CisgICAgICAgIGFyZ3VtZW50cy5pbnNlcnQo
MCwgbV9vdXQuY29uc3RJbnQ2NChleGl0Lm1fc3RhY2ttYXBJRCkpOwogICAgICAgICAKICAgICAg
ICAgbV9vdXQuY2FsbChtX291dC5zdGFja21hcEludHJpbnNpYygpLCBhcmd1bWVudHMpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAJKHJl
dmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksOSBAQCB2b2lkIFN0YWNrTWFwczo6TG9j
YXRpb246OnJlc3RvcmVJbnRvKAogCiBib29sIFN0YWNrTWFwczo6UmVjb3JkOjpwYXJzZShEYXRh
VmlldyogdmlldywgdW5zaWduZWQmIG9mZnNldCkKIHsKLSAgICBwYXRjaHBvaW50SUQgPSB2aWV3
LT5yZWFkPHVpbnQzMl90PihvZmZzZXQsIHRydWUpOworICAgIGludDY0X3QgaWQgPSB2aWV3LT5y
ZWFkPGludDY0X3Q+KG9mZnNldCwgdHJ1ZSk7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludDMy
X3Q+KGlkKSA9PSBpZCk7CisgICAgcGF0Y2hwb2ludElEID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KGlkKTsKICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocGF0Y2hwb2ludElEKSA8IDApCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKQEAgLTkwLDYgKzkyLDEzIEBAIGJvb2wgU3RhY2tN
YXBzOjpSZWNvcmQ6OnBhcnNlKERhdGFWaWV3KiAKICAgICB3aGlsZSAobGVuZ3RoLS0pCiAgICAg
ICAgIGxvY2F0aW9ucy5hcHBlbmQocmVhZE9iamVjdDxMb2NhdGlvbj4odmlldywgb2Zmc2V0KSk7
CiAgICAgCisgICAgdW5zaWduZWQgbnVtTGl2ZU91dHMgPSB2aWV3LT5yZWFkPHVpbnQxNl90Pihv
ZmZzZXQsIHRydWUpOworICAgIHdoaWxlIChudW1MaXZlT3V0cy0tKSB7CisgICAgICAgIHZpZXct
PnJlYWQ8dWludDE2X3Q+KG9mZnNldCwgdHJ1ZSk7IC8vIHJlZ251bQorICAgICAgICB2aWV3LT5y
ZWFkPHVpbnQ4X3Q+KG9mZnNldCwgdHJ1ZSk7IC8vIHJlc2VydmVkCisgICAgICAgIHZpZXctPnJl
YWQ8dWludDhfdD4ob2Zmc2V0LCB0cnVlKTsgLy8gc2l6ZSBpbiBieXRlcworICAgIH0KKyAgICAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3Rh
dGUuaAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiRlRMSW5s
aW5lQ2FjaGVEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgogI2luY2x1ZGUg
IkZUTEpJVEZpbmFsaXplci5oIgorI2luY2x1ZGUgIkZUTEpTQ2FsbC5oIgogI2luY2x1ZGUgIkZU
TFN0YWNrTWFwcy5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCkBAIC02MCw2ICs2
MSw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBjYXB0dXJlZFN0YWNrbWFwSUQ7CiAgICAgU2Vn
bWVudGVkVmVjdG9yPEdldEJ5SWREZXNjcmlwdG9yPiBnZXRCeUlkczsKICAgICBTZWdtZW50ZWRW
ZWN0b3I8UHV0QnlJZERlc2NyaXB0b3I+IHB1dEJ5SWRzOworICAgIFZlY3RvcjxKU0NhbGw+IGpz
Q2FsbHM7CiAgICAgVmVjdG9yPENTdHJpbmc+IGNvZGVTZWN0aW9uTmFtZXM7CiAgICAgVmVjdG9y
PENTdHJpbmc+IGRhdGFTZWN0aW9uTmFtZXM7CiAgICAgUmVmQ291bnRlZEFycmF5PExTZWN0aW9u
V29yZD4gc3RhY2ttYXBzU2VjdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FyaXR5Q2hlY2tNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJpdHlDaGVja01vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FyaXR5Q2hlY2tNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEFyaXR5Q2hlY2tNb2RlX2gKKyNkZWZpbmUgQXJpdHlDaGVja01vZGVfaAorCituYW1l
c3BhY2UgSlNDIHsKKworZW51bSBBcml0eUNoZWNrTW9kZSB7CisgICAgQXJpdHlDaGVja05vdFJl
cXVpcmVkLAorICAgIE11c3RDaGVja0FyaXR5Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEFyaXR5Q2hlY2tNb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsMzcg
KzE0NCw5NCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1
Y3QpOwogICAgICAgICByZXR1cm4gZ2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgpOwogICAg
IH0KLQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbFdp
dGhBcml0eUNoZWNrKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2ppdENvZGVGb3JDYWxsKTsK
LSAgICAgICAgQVNTRVJUKG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7Ci0gICAgICAg
IHJldHVybiBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2s7Ci0gICAgfQotCi0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlD
aGVjaygpCi0gICAgewotICAgICAgICBBU1NFUlQobV9qaXRDb2RlRm9yQ29uc3RydWN0KTsKLSAg
ICAgICAgQVNTRVJUKG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKTsKLSAgICAg
ICAgcmV0dXJuIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrOwotICAgIH0KLSAg
ICAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGdlbmVyYXRlZEpJVENvZGVXaXRoQXJp
dHlDaGVja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi0gICAgewotICAgICAgICBp
ZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRD
b2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKCk7Ci0gICAgICAgIEFTU0VSVChraW5kID09IENvZGVG
b3JDb25zdHJ1Y3QpOwotICAgICAgICByZXR1cm4gZ2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVj
dFdpdGhBcml0eUNoZWNrKCk7Ci0gICAgfQotICAgICAgICAKLSAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZW50cnlwb2ludEZvcigKKyAg
ICAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBBcml0eUNoZWNrTW9kZSBhcml0eSwg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKICAgICB7Ci0gICAgICAgIGlmIChr
aW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihF
eGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKLSAgICAgICAg
QVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNo
ZWNrKTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIGNhY2hlZCByZXN1bHQuIFdlIG9u
bHkgaGF2ZSBpdCBmb3IgYXJpdHkgY2hlY2sgYmVjYXVzZSB3ZSB1c2UgdGhlCisgICAgICAgIC8v
IG5vLWFyaXR5IGVudHJ5cG9pbnQgaW4gbm9uLXZpcnR1YWwgY2FsbHMsIHdoaWNoIHdpbGwgImNh
Y2hlIiB0aGlzIHZhbHVlIGRpcmVjdGx5IGluCisgICAgICAgIC8vIG1hY2hpbmUgY29kZS4KKyAg
ICAgICAgaWYgKGFyaXR5ID09IE11c3RDaGVja0FyaXR5KSB7CisgICAgICAgICAgICBzd2l0Y2gg
KGtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAgICAgICAgICAg
c3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uTm90UmVxdXJpZWQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgcmVzdWx0ID0gbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAg
ICAgICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0gbV9qaXRDb2Rl
Rm9yQ2FsbFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVkUmVncykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29k
ZUZvckNvbnN0cnVjdDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAg
ICAgICAgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1cmllZDoKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPSBtX2ppdENv
ZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAgICAgICAgICBpZiAoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0
eUNoZWNrQW5kUHJlc2VydmVkUmVncykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0KKyAgICAgICAgICAgIGdlbmVyYXRlZEpJVENv
ZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKGFyaXR5LCByZWdpc3RlcnMpOworICAgICAgICBp
ZiAoYXJpdHkgPT0gTXVzdENoZWNrQXJpdHkpIHsKKyAgICAgICAgICAgIC8vIENhY2hlIHRoZSBy
ZXN1bHQ7IHRoaXMgaXMgbmVjZXNzYXJ5IGZvciB0aGUgSklUJ3MgdmlydHVhbCBjYWxsIG9wdGlt
aXphdGlvbnMuCisgICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgICAgIGNhc2Ug
Q29kZUZvckNhbGw6CisgICAgICAgICAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdXJpZWQ6CisgICAgICAg
ICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IHJlc3VsdDsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2Vy
dmVSZWdpc3RlcnM6CisgICAgICAgICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJp
dHlDaGVja0FuZFByZXNlcnZlZFJlZ3MgPSByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlZ2lz
dGVycykgeworICAgICAgICAgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1
cmllZDoKKyAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5
Q2hlY2sgPSByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAgICAgICAgICBtX2pp
dENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVja0FuZFByZXNlcnZlZFJlZ3MgPSByZXN1bHQ7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb2RlV2l0
aEFyaXR5Q2hlY2tGb3IoCisgICAgICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVn
aXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
a2luZCkgeworICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAgICAgc3dpdGNoIChy
ZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1
cmllZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVC
YXNlLCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOworICAgICAgICAgICAgY2FzZSBN
dXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrQW5kUHJl
c2VydmVkUmVncyk7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgQ29kZUZvckNvbnN0cnVj
dDoKKyAgICAgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgICAgICBjYXNlIFJl
Z2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdXJpZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFy
aXR5Q2hlY2spOworICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9qaXRD
b2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZWRSZWdzKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgICAgIAorICAgIAogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKICAgICB7CiAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQpAQCAtMjM0LDYgKzI5
MSw4IEBAIHByb3RlY3RlZDoKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlRm9yQ29uc3Ry
dWN0OwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5
Q2hlY2s7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZUZvckNvbnN0cnVjdFdp
dGhBcml0eUNoZWNrOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVGb3JDYWxs
V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3M7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhXaXJ0eUNoZWNrQW5kUHJlc2VydmVSZWdzOwogfTsK
IAogY2xhc3MgTmF0aXZlRXhlY3V0YWJsZSA6IHB1YmxpYyBFeGVjdXRhYmxlQmFzZSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdpc3RlclByZXNlcnZhdGlvbk1vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdpc3RlclBy
ZXNlcnZhdGlvbk1vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGVfaAorI2RlZmluZSBSZWdpc3RlclByZXNl
cnZhdGlvbk1vZGVfaAorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBSZWdpc3RlclByZXNlcnZh
dGlvbk1vZGUgeworICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQsCisgICAgTXVz
dFByZXNlcnZlUmVnaXN0ZXJzCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZV9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219395</attachid>
            <date>2013-12-16 21:45:06 -0800</date>
            <delta_ts>2013-12-17 14:41:23 -0800</delta_ts>
            <desc>register preservation is written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>52939</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNjY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDEzLTEyLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBiZSBhYmxlIHRvIGRvIGNhbGwgSUNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjU4MTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OkNhbGxMaW5rSW5mbyk6Cisg
ICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6bGluayk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICog
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6
CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmZpeEZ1
bmN0aW9uQmFzZWRPblN0YWNrTWFwcyk6CisgICAgICAgICogZnRsL0ZUTElubGluZUNhY2hlU2l6
ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mQ2FsbCk6CisgICAgICAgICogZnRsL0ZU
TElubGluZUNhY2hlU2l6ZS5oOgorICAgICAgICAqIGZ0bC9GVExKU0NhbGwuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OkpTQ2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6
SlNDYWxsOjplbWl0KToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OmxpbmspOgorICAgICAg
ICAqIGZ0bC9GVExKU0NhbGwuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6SlNDYWxsOjpz
dGFja21hcElEKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6Om9wZXJhdG9yPCk6CisgICAg
ICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdCk6CisgICAgICAgICogZnRsL0ZUTFN0
YXRlLmg6CisKIDIwMTMtMTItMTYgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIE1lcmdlZCByMTYwNjY1IGZyb20gdHJ1bmsuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTI2Nyw2ICsyNjcsOCBAQAogCQkwRjY2NkVDRDE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJy
ZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVDQjE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0
aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkIxNERGM0YxNjAwQjdCMkU0IC8qIERGR0FkamFjZW5j
eUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkMxNERGM0YxNjAw
QjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjZFMTY5MTRERjNGMTMwMEI3QjJFNCAvKiBERkdFZGdlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2QjFDQjUxODVGQzlF
OTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCMzE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNw
cCAqLzsgfTsKKwkJMEY2QjFDQjYxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQjQxODVGQzlF
OTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNzAyNUE5MTcxNEIwRkEwMDM4MkMwRSAvKiBERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3MDI1QTcxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAgKi87IH07CiAJCTBGNzAyNUFBMTcxNEIwRkMwMDM4MkMwRSAvKiBERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcxNENB
MTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi87
IH07CkBAIC0xNTc5LDYgKzE1ODEsOCBAQAogCQkwRjY2NkVDQjE4MzZCMzdFMDBEMDE3RjEgLyog
REZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGphY2VuY3lMaXN0Lmg7
IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7IHBhdGggPSBkZmcvREZHRWRnZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZCMUNCMzE4NUZDOUU5MDA4NDVEOTcgLyogRlRM
SlNDYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2Fs
bC5jcHA7IHBhdGggPSBmdGwvRlRMSlNDYWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGwuaDsgcGF0aCA9IGZ0bC9GVExKU0NhbGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MDI1QTcxNzE0QjBGODAwMzgyQzBF
IC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOyBwYXRoID0gZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQ
cm9wYWdhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0JhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg1
OCw2ICsyODYyLDggQEAKIAkJCQkwRkVBMEEwMzE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29k
ZS5oICovLAogCQkJCUE3OEE5NzdEMTc5NzM4RDUwMDlERjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIu
Y3BwICovLAogCQkJCUE3OEE5NzdFMTc5NzM4RDUwMDlERjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIu
aCAqLywKKwkJCQkwRjZCMUNCMzE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCAqLywK
KwkJCQkwRjZCMUNCNDE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmggKi8sCiAJCQkJMEY4
RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuY3BwICovLAogCQkJCTBGOEYyQjk0MTcy
RTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmggKi8sCiAJCQkJMEZDRUZBREQxODA3MzhDMDAwNDcy
Q0U0IC8qIEZUTExvY2F0aW9uLmNwcCAqLywKQEAgLTQzOTUsNiArNDQwMSw3IEBACiAJCQkJMEZC
QzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzhBOTc3NTE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzhBOTc3NzE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjZCMUNCNjE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlND
YWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZH
Rml4dXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJD
IC8qIERGR0ZsdXNoZWRBdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKQEAgLTU1NTEsNiArNTU1
OCw3IEBACiAJCQkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtl
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM5QTE4MDNBREI3MDA3M0MyQkMgLyogRlRM
U3RhY2tNYXBzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTE2MTcwNkJCOTAwMEJCNzIy
QyAvKiBGVExTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjZCMUNCNTE4NUZDOUU5MDA4
NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkUxMTcxNzhF
MUMwMDY5MEM3RiAvKiBGVExUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRTMx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0N0YzOUNCMTA3RUMzNzYwMDQyN0E0OCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxNCArMzgs
NyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSwgUmVwYXRjCiAgICAgQVNTRVJU
KGlzTGlua2VkKCkpOwogICAgIAogICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2Vt
ZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldp
dGhQYXRjaE9uUmVnaXN0ZXIoaG90UGF0aEJlZ2luKSwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQ+KGNhbGxlZUdQUiksIDApOwotICAgIGlmIChpc0RGRykgewotI2lmIEVO
QUJMRShERkdfSklUKQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9j
YXRpb24sIChjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1
Y3RUaHVua0dlbmVyYXRvcikgOiB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3Ip
KS5jb2RlKCkpOwotI2Vsc2UKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSNlbmRpZgotICAgIH0gZWxzZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0
dXJuTG9jYXRpb24sIGNhbGxUeXBlID09IENvbnN0cnVjdCA/IHZtLmdldENUSVN0dWIobGlua0Nv
bnN0cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkgOiB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1
bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVy
bkxvY2F0aW9uLCBjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKGxpbmtDb25z
dHJ1Y3RUaHVua0dlbmVyYXRvcikuY29kZSgpIDogdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS5jb2RlKCkpOwogICAgIGhhc1NlZW5TaG91bGRSZXBhdGNoID0gZmFsc2U7CiAg
ICAgY2FsbGVlLmNsZWFyKCk7CiAgICAgc3R1Yi5jbGVhcigpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMTYwNjIyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw3ICs1Niw2IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBwdWJsaWMgQmFz
aWNSYXdTZW4KICAgICAgICAgCiAgICAgQ2FsbExpbmtJbmZvKCkKICAgICAgICAgOiBoYXNTZWVu
U2hvdWxkUmVwYXRjaChmYWxzZSkKLSAgICAgICAgLCBpc0RGRyhmYWxzZSkKICAgICAgICAgLCBo
YXNTZWVuQ2xvc3VyZShmYWxzZSkKICAgICAgICAgLCBjYWxsVHlwZShOb25lKQogICAgIHsKQEAg
LTgwLDcgKzc5LDYgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1Nlbgog
ICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBsYXN0U2VlbkNhbGxlZTsKICAgICBSZWZQdHI8
Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YjsKICAgICBib29sIGhhc1NlZW5TaG91bGRSZXBh
dGNoIDogMTsKLSAgICBib29sIGlzREZHIDogMTsKICAgICBib29sIGhhc1NlZW5DbG9zdXJlIDog
MTsKICAgICB1bnNpZ25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAgICAgdW5zaWduZWQg
Y2FsbGVlR1BSIDogODsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDE3ICsyNTcsMTUgQEAgcHVi
bGljOgogICAgIC8vIEV4YWN0bHkgZXF1aXZhbGVudCB0byBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLT5uZXdSZXBsYWNlbWVudENvZGVCbG9ja0Zvcihjb2RlQmxvY2stPnNwZWNpYWxpemF0
aW9uS2luZCgpKQogICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBuZXdSZXBsYWNlbWVudCgpOwog
ICAgIAotICAgIHZvaWQgc2V0SklUQ29kZShQYXNzUmVmUHRyPEpJVENvZGU+IGNvZGUsIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBjb2RlV2l0aEFyaXR5Q2hlY2spCisgICAgdm9pZCBzZXRKSVRDb2Rl
KFBhc3NSZWZQdHI8SklUQ29kZT4gY29kZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2hlYXAt
PmlzRGVmZXJyZWQoKSk7CiAgICAgICAgIG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KGNv
ZGUtPnNpemUoKSk7CiAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7
CiAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgaXMgcHJvYmFibHkgbm90
IG5lZWRlZCBiZWNhdXNlIHRoZSBsb2NrIHdpbGwgYWxzbyBkbyBzb21ldGhpbmcgc2ltaWxhciwg
YnV0IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KICAgICAgICAgbV9qaXRDb2RlID0gY29kZTsK
LSAgICAgICAgbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2sgPSBjb2RlV2l0aEFyaXR5Q2hlY2s7CiAg
ICAgfQogICAgIFBhc3NSZWZQdHI8SklUQ29kZT4gaml0Q29kZSgpIHsgcmV0dXJuIG1faml0Q29k
ZTsgfQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBqaXRDb2RlV2l0aEFyaXR5Q2hlY2soKSB7
IHJldHVybiBtX2ppdENvZGVXaXRoQXJpdHlDaGVjazsgfQogICAgIEpJVENvZGU6OkpJVFR5cGUg
aml0VHlwZSgpIGNvbnN0CiAgICAgewogICAgICAgICBKSVRDb2RlKiBqaXRDb2RlID0gbV9qaXRD
b2RlLmdldCgpOwpAQCAtMTA2Niw3ICsxMDY0LDYgQEAgcHJpdmF0ZToKICAgICBTZW50aW5lbExp
bmtlZExpc3Q8TExJbnRDYWxsTGlua0luZm8sIEJhc2ljUmF3U2VudGluZWxOb2RlPExMSW50Q2Fs
bExpbmtJbmZvPj4gbV9pbmNvbWluZ0xMSW50Q2FsbHM7CiAjZW5kaWYKICAgICBSZWZQdHI8SklU
Q29kZT4gbV9qaXRDb2RlOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVXaXRo
QXJpdHlDaGVjazsKICNpZiBFTkFCTEUoSklUKQogICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4g
bV9zdHViSW5mb3M7CiAgICAgVmVjdG9yPEJ5VmFsSW5mbz4gbV9ieVZhbEluZm9zOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9u
IDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNyArMjMwLDYgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlu
ayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2pzQ2Fs
bHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxv
Y2stPmNhbGxMaW5rSW5mbyhpKTsKICAgICAgICAgaW5mby5jYWxsVHlwZSA9IG1fanNDYWxsc1tp
XS5tX2NhbGxUeXBlOwotICAgICAgICBpbmZvLmlzREZHID0gdHJ1ZTsKICAgICAgICAgaW5mby5j
b2RlT3JpZ2luID0gbV9qc0NhbGxzW2ldLm1fY29kZU9yaWdpbjsKICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKG1fanNDYWxsc1tpXS5tX3Nsb3dDYWxsLCBGdW5jdGlvblB0cigobV92bS0+Z2V0Q1RJ
U3R1YihpbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0ID8gbGlua0NvbnN0
cnVjdFRodW5rR2VuZXJhdG9yIDogbGlua0NhbGxUaHVua0dlbmVyYXRvcikpLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9qc0NhbGxzW2ldLm1fc2xvd0NhbGwpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDQsMTEgKzcwNCwxMSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKIAogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgdGFy
Z2V0VG9DaGVjazsKLSAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgSklU
Q29tcGlsZXI6Okp1bXAgc2xvd1BhdGg7CiAKICAgICBtX2ppdC5lbWl0U3RvcmVDb2RlT3JpZ2lu
KG5vZGUtPmNvZGVPcmlnaW4pOwogICAgIAotICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFu
Y2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdl
dFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKSk7CisgICAgc2xvd1Bh
dGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBj
YWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDAp
KTsKIAogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2FsbGVlR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZXN1bHRHUFIpOwogICAg
IG1faml0LnN0b3JlNjQocmVzdWx0R1BSLCBjYWxsZWVGcmFtZVNsb3QoSlNTdGFjazo6U2NvcGVD
aGFpbikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDggQEAgaW5s
aW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgRnVuY3Rpb25S
ZWVudHJ5V2F0Y2hwb2ludDoKICAgICBjYXNlIFZhcmlhYmxlV2F0Y2hwb2ludDoKICAgICBjYXNl
IE5vdGlmeVdyaXRlOgorICAgIGNhc2UgQ2FsbDoKKyAgICBjYXNlIENvbnN0cnVjdDoKICAgICAg
ICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldEJ5SWQ6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE2
MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5OSw2ICsyOTksNDQgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNl
ZE9uU3RhY2tNYXBzKAogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIC8vIEhhbmRsaW5nIEpT
IGNhbGxzIGlzIHdlaXJkOiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIHNvcnQgdGhlbSBieSB0
aGUgUEMgaW4gTExWTQorICAgIC8vIGdlbmVyYXRlZCBjb2RlLiBUaGF0IGltcGxpZXMgZmlyc3Qg
cHJ1bmluZyB0aGUgb25lcyB0aGF0IExMVk0gZGlkbid0IGdlbmVyYXRlLgorICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5qc0NhbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEpT
Q2FsbCYgY2FsbCA9IHN0YXRlLmpzQ2FsbHNbaV07CisgICAgICAgIAorICAgICAgICBTdGFja01h
cHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGNhbGwuc3RhY2tt
YXBJRCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CisgICAgICAg
ICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4gUHJ1bmUgaXQuCisgICAgICAgICAgICBjYWxs
ID0gc3RhdGUuanNDYWxscy5sYXN0KCk7CisgICAgICAgICAgICBzdGF0ZS5qc0NhbGxzLnJlbW92
ZUxhc3QoKTsKKyAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBjYWxsLm1faW5zdHJ1Y3Rpb25PZmZzZXQgPSBpdGVyLT52
YWx1ZS5pbnN0cnVjdGlvbk9mZnNldDsKKyAgICB9CisgICAgCisgICAgc3RkOjpzb3J0KHN0YXRl
LmpzQ2FsbHMuYmVnaW4oKSwgc3RhdGUuanNDYWxscy5lbmQoKSk7CisgICAgCisgICAgY29kZUJs
b2NrLT5zZXROdW1iZXJPZkNhbGxMaW5rSW5mb3Moc3RhdGUuanNDYWxscy5zaXplKCkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmpzQ2FsbHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
IEpTQ2FsbCYgY2FsbCA9IHN0YXRlLmpzQ2FsbHNbaV07CisKKyAgICAgICAgQ0NhbGxIZWxwZXJz
IGZhc3RQYXRoSklUKCZ2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgY2FsbC5lbWl0KGZhc3RQYXRo
SklUKTsKKyAgICAgICAgCisgICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9IGJpdHdpc2VfY2FzdDxj
aGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgY2FsbC5tX2luc3RydWN0aW9uT2Zmc2V0OworICAg
ICAgICAKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCAmZmFzdFBhdGhKSVQsIHN0
YXJ0T2ZJQywgc2l6ZU9mQ2FsbCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZl
ci5pc1ZhbGlkKCkpOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFzc2VtYmxl
clR5cGVfVDo6ZmlsbE5vcHMoCisgICAgICAgICAgICBzdGFydE9mSUMgKyBsaW5rQnVmZmVyLnNp
emUoKSwgc2l6ZU9mQ2FsbCgpIC0gbGlua0J1ZmZlci5zaXplKCkpOworICAgICAgICAKKyAgICAg
ICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CisgICAg
ICAgIGNhbGwubGluayh2bSwgbGlua0J1ZmZlciwgaW5mbyk7CisgICAgfQorICAgIAogICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgIAogICAgIGZvciAodW5z
aWduZWQgZXhpdEluZGV4ID0gaml0Q29kZS0+b3NyRXhpdC5zaXplKCk7IGV4aXRJbmRleC0tOykg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVT
aXplLmNwcAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExJbmxpbmVDYWNoZVNpemUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0NywxMSBAQCBz
aXplX3Qgc2l6ZU9mUHV0QnlJZCgpCiAgICAgcmV0dXJuIDMyOwogfQogCitzaXplX3Qgc2l6ZU9m
Q2FsbCgpCit7CisgICAgcmV0dXJuIDQzOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAkocmV2aXNpb24gMTYwNjIyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIHNp
emVfdCBzaXplT2ZHZXRCeUlkKCk7CiBzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpOworc2l6ZV90IHNp
emVPZkNhbGwoKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkocmV2
aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNS
ZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDkgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKGZyYW1lQWRkcmVzcywgImxsdm0uZnJhbWVh
ZGRyZXNzIiwgZnVuY3Rpb25UeXBlKHBvaW50ZXJUeXBlKGludDgpLCBpbnQzMikpIFwKICAgICBt
YWNybyhtdWxXaXRoT3ZlcmZsb3czMiwgImxsdm0uc211bC53aXRoLm92ZXJmbG93LmkzMiIsIGZ1
bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50MzIsIGJvb2xlYW4pLCBpbnQzMiwg
aW50MzIpKSBcCiAgICAgbWFjcm8obXVsV2l0aE92ZXJmbG93NjQsICJsbHZtLnNtdWwud2l0aC5v
dmVyZmxvdy5pNjQiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDY0LCBi
b29sZWFuKSwgaW50NjQsIGludDY0KSkgXAotICAgIG1hY3JvKHBhdGNocG9pbnRJbnQ2NCwgImxs
dm0uZXhwZXJpbWVudGFsLnBhdGNocG9pbnQuaTY0IiwgZnVuY3Rpb25UeXBlKGludDY0LCBpbnQz
MiwgaW50MzIsIHJlZjgsIGludDMyLCBWYXJpYWRpYykpIFwKLSAgICBtYWNybyhwYXRjaHBvaW50
Vm9pZCwgImxsdm0uZXhwZXJpbWVudGFsLnBhdGNocG9pbnQudm9pZCIsIGZ1bmN0aW9uVHlwZSh2
b2lkVHlwZSwgaW50MzIsIGludDMyLCByZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBcCi0gICAgbWFj
cm8oc3RhY2ttYXAsICJsbHZtLmV4cGVyaW1lbnRhbC5zdGFja21hcCIsIGZ1bmN0aW9uVHlwZSh2
b2lkVHlwZSwgaW50MzIsIGludDMyLCBWYXJpYWRpYykpIFwKKyAgICBtYWNybyhwYXRjaHBvaW50
SW50NjQsICJsbHZtLmV4cGVyaW1lbnRhbC5wYXRjaHBvaW50Lmk2NCIsIGZ1bmN0aW9uVHlwZShp
bnQ2NCwgaW50NjQsIGludDMyLCByZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBcCisgICAgbWFjcm8o
cGF0Y2hwb2ludFZvaWQsICJsbHZtLmV4cGVyaW1lbnRhbC5wYXRjaHBvaW50LnZvaWQiLCBmdW5j
dGlvblR5cGUodm9pZFR5cGUsIGludDY0LCBpbnQzMiwgcmVmOCwgaW50MzIsIFZhcmlhZGljKSkg
XAorICAgIG1hY3JvKHN0YWNrbWFwLCAibGx2bS5leHBlcmltZW50YWwuc3RhY2ttYXAiLCBmdW5j
dGlvblR5cGUodm9pZFR5cGUsIGludDY0LCBpbnQzMiwgVmFyaWFkaWMpKSBcCiAgICAgbWFjcm8o
c3ViV2l0aE92ZXJmbG93MzIsICJsbHZtLnNzdWIud2l0aC5vdmVyZmxvdy5pMzIiLCBmdW5jdGlv
blR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDMyLCBib29sZWFuKSwgaW50MzIsIGludDMy
KSkgXAogICAgIG1hY3JvKHN1YldpdGhPdmVyZmxvdzY0LCAibGx2bS5zc3ViLndpdGgub3ZlcmZs
b3cuaTY0IiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQ2NCwgYm9vbGVh
biksIGludDY0LCBpbnQ2NCkpIFwKICAgICBtYWNybyh0cmFwLCAibGx2bS50cmFwIiwgZnVuY3Rp
b25UeXBlKHZvaWRUeXBlKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
U0NhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlND
YWxsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlND
YWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJGVExKU0NhbGwuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CisKK0pTQ2FsbDo6SlNDYWxsKHVuc2lnbmVkIHN0YWNrbWFwSUQs
IENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbikK
KyAgICA6IG1fc3RhY2ttYXBJRChzdGFja21hcElEKQorICAgICwgbV9jYWxsVHlwZShjYWxsVHlw
ZSkKKyAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQorICAgICwgbV9pbnN0cnVjdGlvbk9m
ZnNldCgwKQoreworfQorCit2b2lkIEpTQ2FsbDo6ZW1pdChDQ2FsbEhlbHBlcnMmIGppdCkKK3sK
KyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNo
KAorICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgbV90YXJn
ZXRUb0NoZWNrLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCkpOworICAg
IAorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6cmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwKKyAgICAgICAgR1BS
SW5mbzo6cmVnVDEpOworICAgIGppdC5zdG9yZTY0KAorICAgICAgICBHUFJJbmZvOjpyZWdUMSwK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAgICAgIHNpemVvZihSZWdpc3RlcikgKiBK
U1N0YWNrOjpTY29wZUNoYWluIC0gc2l6ZW9mKHZvaWQqKSkpOworICAgIAorICAgIG1fZmFzdENh
bGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IGppdC5q
dW1wKCk7CisgICAgCisgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICBtX3Nsb3dDYWxsID0g
aml0Lm5lYXJDYWxsKCk7CisgICAgCisgICAgZG9uZS5saW5rKCZqaXQpOworfQorCit2b2lkIEpT
Q2FsbDo6bGluayhWTSYgdm0sIExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIENhbGxMaW5rSW5mbyYg
Y2FsbEluZm8pCit7CisgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yOworICAgIGlmIChtX2Nh
bGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0KQorICAgICAgICBnZW5lcmF0b3IgPSBs
aW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3I7CisgICAgZWxzZQorICAgICAgICBnZW5lcmF0b3Ig
PSBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yOworICAgIAorICAgIGxpbmtCdWZmZXIubGluaygKKyAg
ICAgICAgbV9zbG93Q2FsbCwgRnVuY3Rpb25QdHIodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgCisgICAgY2FsbEluZm8uY2FsbFR5cGUg
PSBtX2NhbGxUeXBlOworICAgIGNhbGxJbmZvLmNvZGVPcmlnaW4gPSBtX2NvZGVPcmlnaW47Cisg
ICAgY2FsbEluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVh
ckNhbGwobV9zbG93Q2FsbCk7CisgICAgY2FsbEluZm8uaG90UGF0aEJlZ2luID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1fdGFyZ2V0VG9DaGVjayk7CisgICAgY2FsbEluZm8uaG90UGF0aE90aGVy
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9mYXN0Q2FsbCk7CisgICAgY2FsbElu
Zm8uY2FsbGVlR1BSID0gR1BSSW5mbzo6cmVnVDA7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSlNDYWxsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpTQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExKU0Nh
bGxfaAorI2RlZmluZSBGVExKU0NhbGxfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNs
dWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRl
ICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEpTQ2FsbCB7CitwdWJsaWM6CisgICAgSlNDYWxs
KHVuc2lnbmVkIHN0YWNrbWFwSUQsIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUsIENvZGVPcmlnaW4p
OworICAgIAorICAgIHZvaWQgZW1pdChDQ2FsbEhlbHBlcnMmKTsKKyAgICB2b2lkIGxpbmsoVk0m
LCBMaW5rQnVmZmVyJiwgQ2FsbExpbmtJbmZvJik7CisgICAgCisgICAgdW5zaWduZWQgc3RhY2tt
YXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3I8KGNvbnN0IEpTQ2FsbCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9pbnN0cnVjdGlvbk9mZnNldCA8IG90aGVyLm1faW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgfQor
ICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3N0YWNrbWFwSUQ7CisgICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBtX2NhbGxUeXBlOworICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwor
ICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIG1fdGFyZ2V0VG9DaGVjazsKKyAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgbV9mYXN0Q2FsbDsKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgbV9zbG93
Q2FsbDsKKworcHVibGljOgorICAgIHVpbnQzMl90IG1faW5zdHJ1Y3Rpb25PZmZzZXQ7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
KworI2VuZGlmIC8vIEZUTEpTQ2FsbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTIzLDcgKzEyMyw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIG1fZnRsU3Rh
dGUuY2FwdHVyZWRTdGFja21hcElEID0gbV9zdGFja21hcElEcysrOwogICAgICAgICBtX291dC5j
YWxsKAotICAgICAgICAgICAgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgbV9vdXQuY29uc3RJ
bnQzMihtX2Z0bFN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCksCisgICAgICAgICAgICBtX291dC5z
dGFja21hcEludHJpbnNpYygpLCBtX291dC5jb25zdEludDY0KG1fZnRsU3RhdGUuY2FwdHVyZWRT
dGFja21hcElEKSwKICAgICAgICAgICAgIG1fb3V0LmludDMyWmVybywgY2FwdHVyZWRBbGxvY2Ep
OwogICAgICAgICAKICAgICAgICAgbV9jYWxsRnJhbWUgPSBtX291dC5wdHJUb0ludCgKQEAgLTEy
OTcsNyArMTI5Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgY2FsbCA9
IG1fb3V0LmNhbGwoCiAgICAgICAgICAgICBtX291dC5wYXRjaHBvaW50SW50NjRJbnRyaW5zaWMo
KSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0
SW50MzIoc2l6ZU9mR2V0QnlJZCgpKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoc3Rh
Y2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mR2V0QnlJZCgpKSwKICAgICAgICAgICAg
IGNvbnN0TnVsbChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigxKSwgYmFzZSk7CiAgICAg
ICAgIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJlZ0NhbGxD
b252KTsKICAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsKQEAgLTEzMjIsNyArMTMyMiw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwoCiAgICAg
ICAgICAgICBtX291dC5wYXRjaHBvaW50Vm9pZEludHJpbnNpYygpLAotICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMihzdGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXplT2ZQdXRCeUlk
KCkpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSwgbV9vdXQuY29u
c3RJbnQzMihzaXplT2ZQdXRCeUlkKCkpLAogICAgICAgICAgICAgY29uc3ROdWxsKG1fb3V0LnJl
ZjgpLCBtX291dC5jb25zdEludDMyKDIpLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgIHNldEluc3Ry
dWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJlZ0NhbGxDb252KTsKICAgICAg
ICAgCkBAIC0yNDM3LDM1ICsyNDM3LDQwIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21w
aWxlQ2FsbE9yQ29uc3RydWN0KCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHVu
YWNjZXB0YWJseSBzbG93LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTEzNjIxCisgICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IG1fbm9k
ZS0+b3AoKSA9PSBDYWxsID8gMCA6IDE7CisgICAgICAgIGludCBudW1QYXNzZWRBcmdzID0gbV9u
b2RlLT5udW1DaGlsZHJlbigpIC0gMTsKKyAgICAgICAgaW50IG51bUFyZ3MgPSBudW1QYXNzZWRB
cmdzICsgZHVtbXlUaGlzQXJndW1lbnQ7CiAgICAgICAgIAotICAgICAgICBKX0pJVE9wZXJhdGlv
bl9FIGZ1bmN0aW9uID0KLSAgICAgICAgICAgIG1fbm9kZS0+b3AoKSA9PSBDYWxsID8gb3BlcmF0
aW9uRlRMQ2FsbCA6IG9wZXJhdGlvbkZUTENvbnN0cnVjdDsKKyAgICAgICAgTFZhbHVlIGNhbGxl
ZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKTsKICAgICAgICAg
Ci0gICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IG1fbm9kZS0+b3AoKSA9PSBDYWxsID8g
MCA6IDE7CisgICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CiAg
ICAgICAgIAotICAgICAgICBpbnQgbnVtUGFzc2VkQXJncyA9IG1fbm9kZS0+bnVtQ2hpbGRyZW4o
KSAtIDE7CisgICAgICAgIFZlY3RvcjxMVmFsdWU+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1l
bnRzLmFwcGVuZChtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpKTsKKyAgICAgICAgYXJndW1l
bnRzLmFwcGVuZChtX291dC5jb25zdEludDMyKHNpemVPZkNhbGwoKSkpOworICAgICAgICBhcmd1
bWVudHMuYXBwZW5kKGNvbnN0TnVsbChtX291dC5yZWY4KSk7CisgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQobV9vdXQuY29uc3RJbnQzMigxICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAt
IEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplICsgbnVtQXJncykpOworICAgICAgICBhcmd1
bWVudHMuYXBwZW5kKGNhbGxlZSk7IC8vIGNhbGxlZSAtPiAlcmRpCisgICAgICAgIGFyZ3VtZW50
cy5hcHBlbmQoZ2V0VW5kZWYobV9vdXQuaW50NjQpKTsgLy8gY29kZSBibG9jaworICAgICAgICBh
cmd1bWVudHMuYXBwZW5kKGdldFVuZGVmKG1fb3V0LmludDY0KSk7IC8vIHNjb3BlIGNoYWluCisg
ICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoY2FsbGVlKTsgLy8gY2FsbGVlIC0+IHN0YWNrCisgICAg
ICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQ2NChudW1BcmdzKSk7IC8vIGFyZ3Vt
ZW50IGNvdW50IGFuZCB6ZXJvcyBmb3IgdGhlIHRhZworICAgICAgICBpZiAoZHVtbXlUaGlzQXJn
dW1lbnQpCisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGdldFVuZGVmKG1fb3V0LmludDY0
KSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKQorICAg
ICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCAxICsgaSkpKTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBjYWxsZWVGcmFtZSA9
IG1fb3V0LmFkZCgKLSAgICAgICAgICAgIG1fY2FsbEZyYW1lLAotICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnRQdHIoc2l6ZW9mKFJlZ2lzdGVyKSAqIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1f
Z3JhcGguZnJhbWVSZWdpc3RlckNvdW50KCkpLm9mZnNldCgpKSk7CisgICAgICAgIGNhbGxQcmVm
bGlnaHQoKTsKICAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlMzIoCi0gICAgICAgICAgICBt
X291dC5jb25zdEludDMyKG51bVBhc3NlZEFyZ3MgKyBkdW1teVRoaXNBcmd1bWVudCksCi0gICAg
ICAgICAgICBwYXlsb2FkRm9yKGNhbGxlZUZyYW1lLCBKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7
Ci0gICAgICAgIG1fb3V0LnN0b3JlNjQobV9jYWxsRnJhbWUsIGNhbGxlZUZyYW1lLCBtX2hlYXBz
LkNhbGxGcmFtZV9jYWxsZXJGcmFtZSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAgICAg
ICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksCi0gICAgICAg
ICAgICBhZGRyZXNzRm9yKGNhbGxlZUZyYW1lLCBKU1N0YWNrOjpDYWxsZWUpKTsKKyAgICAgICAg
TFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygp
LCBhcmd1bWVudHMpOworICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNh
bGwsIExMVk1XZWJLaXRKU0NhbGxDb252KTsKICAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTY0
KAotICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDEgKyBpKSksCi0gICAgICAgICAgICAgICAgYWRkcmVzc0ZvcihjYWxsZWVGcmFtZSwgdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoaSArIGR1bW15VGhpc0FyZ3VtZW50KS5vZmZzZXQoKSkpOwot
ICAgICAgICB9CisgICAgICAgIG1fZnRsU3RhdGUuanNDYWxscy5hcHBlbmQoSlNDYWxsKAorICAg
ICAgICAgICAgc3RhY2ttYXBJRCwKKyAgICAgICAgICAgIG1fbm9kZS0+b3AoKSA9PSBDYWxsID8g
Q2FsbExpbmtJbmZvOjpDYWxsIDogQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QsCisgICAgICAgICAg
ICBtX25vZGUtPmNvZGVPcmlnaW4pKTsKICAgICAgICAgCi0gICAgICAgIHNldEpTVmFsdWUodm1D
YWxsKG1fb3V0Lm9wZXJhdGlvbihmdW5jdGlvbiksIGNhbGxlZUZyYW1lKSk7CisgICAgICAgIHNl
dEpTVmFsdWUoY2FsbCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUp1bXAoKQpAQCAt
NDA5Miw3ICs0MDk3LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGV4aXQubV9zdGFja21h
cElEID0gbV9zdGFja21hcElEcysrOwogICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1fb3V0
LmNvbnN0SW50MzIoTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUoKSkpOwot
ICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1fb3V0LmNvbnN0SW50MzIoZXhpdC5tX3N0YWNr
bWFwSUQpKTsKKyAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBtX291dC5jb25zdEludDY0KGV4
aXQubV9zdGFja21hcElEKSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5jYWxsKG1fb3V0LnN0
YWNrbWFwSW50cmluc2ljKCksIGFyZ3VtZW50cyk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAkocmV2aXNpb24gMTYwNjIyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03OSw3ICs3OSw5IEBAIHZvaWQgU3RhY2tNYXBzOjpMb2NhdGlvbjo6cmVzdG9yZUludG8oCiAK
IGJvb2wgU3RhY2tNYXBzOjpSZWNvcmQ6OnBhcnNlKERhdGFWaWV3KiB2aWV3LCB1bnNpZ25lZCYg
b2Zmc2V0KQogewotICAgIHBhdGNocG9pbnRJRCA9IHZpZXctPnJlYWQ8dWludDMyX3Q+KG9mZnNl
dCwgdHJ1ZSk7CisgICAgaW50NjRfdCBpZCA9IHZpZXctPnJlYWQ8aW50NjRfdD4ob2Zmc2V0LCB0
cnVlKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50MzJfdD4oaWQpID09IGlkKTsKKyAgICBw
YXRjaHBvaW50SUQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaWQpOwogICAgIGlmIChzdGF0aWNf
Y2FzdDxpbnQzMl90PihwYXRjaHBvaW50SUQpIDwgMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIApAQCAtOTAsNiArOTIsMTMgQEAgYm9vbCBTdGFja01hcHM6OlJlY29yZDo6cGFyc2UoRGF0
YVZpZXcqIAogICAgIHdoaWxlIChsZW5ndGgtLSkKICAgICAgICAgbG9jYXRpb25zLmFwcGVuZChy
ZWFkT2JqZWN0PExvY2F0aW9uPih2aWV3LCBvZmZzZXQpKTsKICAgICAKKyAgICB1bnNpZ25lZCBu
dW1MaXZlT3V0cyA9IHZpZXctPnJlYWQ8dWludDE2X3Q+KG9mZnNldCwgdHJ1ZSk7CisgICAgd2hp
bGUgKG51bUxpdmVPdXRzLS0pIHsKKyAgICAgICAgdmlldy0+cmVhZDx1aW50MTZfdD4ob2Zmc2V0
LCB0cnVlKTsgLy8gcmVnbnVtCisgICAgICAgIHZpZXctPnJlYWQ8dWludDhfdD4ob2Zmc2V0LCB0
cnVlKTsgLy8gcmVzZXJ2ZWQKKyAgICAgICAgdmlldy0+cmVhZDx1aW50OF90PihvZmZzZXQsIHRy
dWUpOyAvLyBzaXplIGluIGJ5dGVzCisgICAgfQorICAgIAogICAgIHJldHVybiB0cnVlOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAxNjA2MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCIK
ICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMSklURmluYWxpemVyLmgiCisj
aW5jbHVkZSAiRlRMSlNDYWxsLmgiCiAjaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgiCiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKQEAgLTYwLDYgKzYxLDcgQEAgcHVibGljOgogICAgIHVu
c2lnbmVkIGNhcHR1cmVkU3RhY2ttYXBJRDsKICAgICBTZWdtZW50ZWRWZWN0b3I8R2V0QnlJZERl
c2NyaXB0b3I+IGdldEJ5SWRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxQdXRCeUlkRGVzY3JpcHRv
cj4gcHV0QnlJZHM7CisgICAgVmVjdG9yPEpTQ2FsbD4ganNDYWxsczsKICAgICBWZWN0b3I8Q1N0
cmluZz4gY29kZVNlY3Rpb25OYW1lczsKICAgICBWZWN0b3I8Q1N0cmluZz4gZGF0YVNlY3Rpb25O
YW1lczsKICAgICBSZWZDb3VudGVkQXJyYXk8TFNlY3Rpb25Xb3JkPiBzdGFja21hcHNTZWN0aW9u
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCShyZXZpc2lvbiAxNjA2
MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04Myw5ICs4MywxMSBAQCBEaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2RlKEpJVFR5
cGUgaml0CiB7CiB9CiAKLURpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUoY29uc3QgSklUQ29k
ZTo6Q29kZVJlZiByZWYsIEpJVFR5cGUgaml0VHlwZSkKK0RpcmVjdEpJVENvZGU6OkRpcmVjdEpJ
VENvZGUoCisgICAgSklUQ29kZTo6Q29kZVJlZiByZWYsIEpJVENvZGU6OkNvZGVQdHIgd2l0aEFy
aXR5Q2hlY2ssIEpJVFR5cGUgaml0VHlwZSkKICAgICA6IEpJVENvZGUoaml0VHlwZSkKICAgICAs
IG1fcmVmKHJlZikKKyAgICAsIG1fd2l0aEFyaXR5Q2hlY2soYXJpdHlBcml0eUNoZWNrKQogewog
fQogCkBAIC05MywxNiArOTUsNDkgQEAgRGlyZWN0SklUQ29kZTo6fkRpcmVjdEpJVENvZGUoKQog
ewogfQogCi12b2lkIERpcmVjdEpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmKGNvbnN0IEpJVENv
ZGU6OkNvZGVSZWYgcmVmKQordm9pZCBEaXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZihK
SVRDb2RlOjpDb2RlUmVmIHJlZiwgSklUQ29kZTo6Q29kZVB0ciB3aXRoQXJpdHlDaGVjaykKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVCghbV9yZWYpOwogICAgIG1fcmVmID0gcmVmOworICAgIG1fd2l0
aEFyaXR5Q2hlY2sgPSB3aXRoQXJpdHlDaGVjazsKIH0KIAotSklUQ29kZTo6Q29kZVB0ciBEaXJl
Y3RKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbCgpCitEaXJlY3RKSVRDb2RlOjpSZWdpc3RlclByZXNl
cnZhdGlvbldyYXBwZXJzKiBEaXJlY3RKSVRDb2RlOjplbnN1cmVXcmFwcGVycygpCiB7Ci0gICAg
UkVMRUFTRV9BU1NFUlQobV9yZWYpOwotICAgIHJldHVybiBtX3JlZi5jb2RlKCk7CisgICAgaWYg
KCFtX3dyYXBwZXJzKQorICAgICAgICBtX3dyYXBwZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxSZWdp
c3RlclByZXNlcnZhdGlvbldyYXBwZXJzPigpOworICAgIHJldHVybiBtX3dyYXBwZXJzLmdldCgp
OworfQorCitKSVRDb2RlOjpDb2RlUHRyIERpcmVjdEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKAor
ICAgIFZNJiB2bSwgQXJpdHlDaGVja01vZGUgYXJpdHksIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9k
ZSByZWdpc3RlcnMpCit7CisgICAgc3dpdGNoIChhcml0eSkgeworICAgIGNhc2UgQXJpdHlDaGVj
a05vdFJlcXVpcmVkOgorICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAgICBjYXNl
IFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdXJpZWQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChtX3JlZik7CisgICAgICAgICAgICByZXR1cm4gbV9yZWYuY29kZSgpOworICAgICAgICBj
YXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczogeworICAgICAgICAgICAgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25XcmFwcGVycyogd3JhcHBlcnMgPSBlbnN1cmVXcmFwcGVycygpOworICAgICAgICAgICAg
aWYgKCF3cmFwcGVycy0+d2l0aG91dEFyaXR5Q2hlY2spCisgICAgICAgICAgICAgICAgd3JhcHBl
cnMtPndpdGhvdXRBcml0eUNoZWNrID0gZ2VuZXJhdGVXcmFwcGVyKHZtLCBtX3JlZi5jb2RlKCkp
OworICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXJzLT53aXRob3V0QXJpdHlDaGVjazsKKyAgICAg
ICAgfSB9CisgICAgY2FzZSBNdXN0Q2hlY2tBcml0eToKKyAgICAgICAgc3dpdGNoIChyZWdpc3Rl
cnMpIHsKKyAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVyaWVkOgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV93aXRoQXJpdHlDaGVjayk7CisgICAgICAgICAgICBy
ZXR1cm4gbV93aXRoQXJpdHlDaGVjazsKKyAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3Rl
cnM6IHsKKyAgICAgICAgICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlcnMqIHdyYXBwZXJz
ID0gZW5zdXJlV3JhcHBlcnMoKTsKKyAgICAgICAgICAgIGlmICghd3JhcHBlcnMtPndpdGhBcml0
eUNoZWNrKQorICAgICAgICAgICAgICAgIHdyYXBwZXJzLT53aXRoQXJpdHlDaGVjayA9IGdlbmVy
YXRlV3JhcHBlcih2bSwgbV93aXRoQXJpdHlDaGVjayk7CisgICAgICAgICAgICByZXR1cm4gd3Jh
cHBlcnMtPndpdGhBcml0eUNoZWNrOworICAgICAgICB9IH0KKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQ29kZVB0cigpOwogfQogCiB2b2lkKiBE
aXJlY3RKSVRDb2RlOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gMTYwNjIyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2
NCw3ICsxNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBqaXRDb2RlLT5qaXRUeXBlKCk7
CiAgICAgfQogICAgIAotICAgIHZpcnR1YWwgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbCgpID0gMDsK
KyAgICB2aXJ0dWFsIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoVk0mLCBBcml0eUNoZWNrTW9kZSwg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkKiBleGVjdXRh
YmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpID0gMDsKICAgICB2b2lkKiBleGVjdXRh
YmxlQWRkcmVzcygpIHsgcmV0dXJuIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoMCk7IH0KICAg
ICB2aXJ0dWFsIHZvaWQqIGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgPSAwOwpA
QCAtMTkyLDEyICsxOTIsMTIgQEAgcHJpdmF0ZToKIGNsYXNzIERpcmVjdEpJVENvZGUgOiBwdWJs
aWMgSklUQ29kZSB7CiBwdWJsaWM6CiAgICAgRGlyZWN0SklUQ29kZShKSVRUeXBlKTsKLSAgICBE
aXJlY3RKSVRDb2RlKGNvbnN0IENvZGVSZWYsIEpJVFR5cGUpOworICAgIERpcmVjdEpJVENvZGUo
Q29kZVJlZiwgQ29kZVB0ciB3aXRoQXJpdHlDaGVjaywgSklUVHlwZSk7CiAgICAgdmlydHVhbCB+
RGlyZWN0SklUQ29kZSgpOwogICAgIAotICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGVSZWYoQ29kZVJl
ZiByZWYpOworICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGVSZWYoQ29kZVJlZiByZWYsIENvZGVQdHIg
d2l0aEFyaXR5Q2hlY2spOwogCi0gICAgdmlydHVhbCBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKFZNJiwgQXJpdHlD
aGVja01vZGUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSkgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCB2b2lkKiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpIE9WRVJSSURF
OwogICAgIHZpcnR1YWwgdm9pZCogZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSBP
VkVSUklERTsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIG9mZnNldE9mKHZvaWQqIHBvaW50ZXJJbnRv
Q29kZSkgT1ZFUlJJREU7CkBAIC0yMDUsNyArMjA1LDE2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGJvb2wgY29udGFpbnModm9pZCopIE9WRVJSSURFOwogCiBwcml2YXRlOgorICAgIFJlZ2lzdGVy
UHJlc2VydmF0aW9uV3JhcHBlcnMqIGVuc3VyZVdyYXBwZXJzKCk7CisgICAgCiAgICAgQ29kZVJl
ZiBtX3JlZjsKKyAgICBDb2RlUHRyIG1fd2l0aEFyaXR5Q2hlY2s7CisgICAgCisgICAgc3RydWN0
IFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlcnMgeworICAgICAgICBDb2RlUmVmIHdpdGhvdXRB
cml0eUNoZWNrOworICAgICAgICBDb2RlUmVmIHdpdGhBcml0eUNoZWNrOworICAgIH07CisgICAg
c3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlcnM+IG1fd3JhcHBlcnM7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdl
bmVyYXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Z2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyUHJlc2VydmF0aW9u
V3JhcHBlckdlbmVyYXRvci5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkFzc2Vt
Ymx5SGVscGVycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGdlbmVyYXRlV3JhcHBlcihWTSYgdm0sIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpCit7
CisjaWYgRU5BQkxFKEZUTF9KSVQpCisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdp
c3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIAorICAgIC8vIE5vIG5lZWQgdG8g
cHJlc2VydmUgRlAgc2luY2UgdGhhdCBhbHdheXMgZ2V0cyBwcmVzZXJ2ZWQgYW55d2F5LgorICAg
IGNhbGxlZVNhdmVzLmNsZWFyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAKKyAg
ICB1bnNpZ25lZCBudW1iZXJPZkNhbGxlZVNhdmVzID0gY2FsbGVlU2F2ZXMubnVtYmVyT2ZTZXRS
ZWdpc3RlcnMoKTsKKyAgICAKKyAgICAvLyBOZWVkIHRvIHByZXNlcnZlIHRoZSBvbGQgcmV0dXJu
IFBDLgorICAgIHVuc2lnbmVkIG51bWJlck9mVmFsdWVzVG9TYXZlID0gbnVtYmVyT2ZDYWxsZWVT
YXZlcyArIDE7CisgICAgCisgICAgLy8gQWxpZ25tZW50LiBQcmVzZXJ2ZSB0aGUgc2FtZSBhbGln
bm1lbnQgaW52YXJpYW50cyB0aGF0IHRoZSBjYWxsZXIgaW1wb3NlZC4KKyAgICB1bnNpZ25lZCBu
dW1iZXJPZk5ld1N0YWNrU2xvdHMgPQorICAgICAgICByb3VuZFVwVG9NdWx0aXBsZU9mKG51bWJl
ck9mVmFsdWVzVG9TYXZlLCBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKTsKKyAgICAKKyAgICBB
c3NlbWJseUhlbHBlcnMgaml0OworICAgIAorICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NB
ZnRlckNhbGwoR1BSSW5mbzo6cmVnVDEpOworICAgIGppdC5sb2FkMzIoCisgICAgICAgIEFzc2Vt
Ymx5SGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIsCisgICAgICAgICAgICAoSlNTdGFjazo6QXJndW1lbnRDb3VudCAtIEpT
U3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2Fk
T2Zmc2V0KSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDIpOworICAgIAorICAgIC8vIFBsYWNlIHRo
ZSBzdGFjayBwb2ludGVyIHdoZXJlIHdlIHdhbnQgaXQgdG8gYmUuCisgICAgc2l6ZV90IG9mZnNl
dCA9IHNpemVvZihSZWdpc3RlcikgKiBudW1iZXJPZk5ld1N0YWNrU2xvdHM7CisgICAgaml0LnN1
YlB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihvZmZzZXQpLCBBc3NlbWJseUhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAKKyAgICAvLyBDb21wdXRlIHRoZSBudW1i
ZXIgb2YgdGhpbmdzIHdlIHdpbGwgYmUgY29weWluZy4KKyAgICBqaXQuYWRkMzIoCisgICAgICAg
IEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKAorICAgICAgICAgICAgSlNTdGFjazo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSwKKyAgICAg
ICAgR1BSSW5mbzo6cmVnVDIpOworCisgICAgQVNTRVJUKCFjYWxsZWVTYXZlcy5nZXQoR1BSSW5m
bzo6cmVnVDQpKTsKKyAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBHUFJJbmZvOjpyZWdUNCk7CisgICAgCisgICAgQXNzZW1ibHlIZWxwZXJzOjpMYWJl
bCBsb29wID0gaml0LmxhYmVsKCk7CisgICAgaml0LnN1YjMyKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmxvYWQ2NChBc3NlbWJseUhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDQsIG9mZnNldCksIEdQUkluZm86OnJlZ1QwKTsK
KyAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDQpOworICAgIGpp
dC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNpemVvZihSZWdpc3Rlcikp
LCBHUFJJbmZvOjpyZWdUNCk7CisgICAgaml0LmJyYW5jaFRlc3QzMihBc3NlbWJseUhlbHBlcnM6
Ok5vblplcm8sIEdQUkluZm86OnJlZ1QyKS5saW5rVG8oJmppdCwgbG9vcCk7CisKKyAgICAvLyBB
dCB0aGlzIHBvaW50IHJlZ1Q0ICsgb2Zmc2V0IHBvaW50cyB0byB3aGVyZSB3ZSBzYXZlIHRoaW5n
cy4KKyAgICBzaXplX3QgY3VycmVudE9mZnNldCA9IG9mZnNldDsKKyAgICBqaXQuc3RvcmVQdHIo
R1BSSW5mbzo6cmVnVDEsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUNCwg
Y3VycmVudE9mZnNldCkpOworICAgIAorICAgIGZvciAoR1BSUmVnIGdwciA9IEFzc2VtYmx5SGVs
cGVyczo6Zmlyc3RSZWdpc3RlcigpOyBncHIgPD0gQXNzZW1ibHlIZWxwZXJzOjpsYXN0UmVnaXN0
ZXIoKTsgZ3ByID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihncHIgKyAxKSkgeworICAgICAgICBjdXJy
ZW50T2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgIGppdC5zdG9yZTY0KGdwciwg
QXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1Q0LCBvZmZzZXQpKTsKKyAgICB9
CisgICAgCisgICAgLy8gQXNzdW1lIHRoYXQgdGhlcmUgYXJlbid0IGFueSBzYXZlZCBGUCByZWdp
c3RlcnMuCisKKyAgICBBc3NlbWJseUhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5uZWFyQ2FsbCgp
OworICAgIAorICAgIC8vIFdlIG5lZWQgdG8gcGxhY2UgdGhlIHN0YWNrIHBvaW50ZXIgYmFjayB0
byB3aGVyZSB0aGUgY2FsbGVyIHRob3VnaHQgdGhleSBsZWZ0IGl0LgorICAgIC8vIEJ1dCBhbHNv
LCBpbiBvcmRlciB0byByZWNvdmVyIHRoZSByZWdpc3RlcnMsIHdlIG5lZWQgdG8gZmlndXJlIG91
dCBob3cgYmlnIHRoZQorICAgIC8vIGFyZ3VtZW50cyBhcmVhIGlzLgorICAgIAorICAgIGppdC5s
b2FkMzIoCisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEFz
c2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsCisgICAgICAgICAgICAoSlNTdGFj
azo6QXJndW1lbnRDb3VudCAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSAqIHNpemVv
ZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDIpOwor
ICAgIGppdC5sc2hpZnQzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigzKSwgR1BSSW5m
bzo6cmVnVDIpOworICAgIAorICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tMzIob2Zmc2V0KSwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJ
bmZvOjpyZWdUMik7CisgICAgCisgICAgLy8gcmVnVDIgbm93IHBvaW50cyB0byAoSlNTdGFjazo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKQorICAg
IC8vIHNob3J0IG9mIHdoZXJlIHRoaW5ncyBhcmUgc2F2ZWQuCisgICAgc2l6ZV90IGN1cnJlbnRP
ZmZzZXQgPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gSlNTdGFjazo6Q2FsbGVyRnJh
bWVBbmRQQ1NpemU7CisgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OnJlZ1QyLCBjdXJyZW50T2Zmc2V0KSwgR1BSSW5mbzo6cmVnVDEpOworICAgIAorICAg
IGZvciAoR1BSUmVnIGdwciA9IEFzc2VtYmx5SGVscGVyczo6Zmlyc3RSZWdpc3RlcigpOyBncHIg
PD0gQXNzZW1ibHlIZWxwZXJzOjpsYXN0UmVnaXN0ZXIoKTsgZ3ByID0gc3RhdGljX2Nhc3Q8R1BS
UmVnPihncHIgKyAxKSkgeworICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rl
cik7CisgICAgICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1Q0LCBvZmZzZXQpLCBncHIpOworICAgIH0KKyAgICAKKyAgICBqaXQuanVtcChHUFJJbmZv
OjpyZWdUMSk7CisgICAgCisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCAmaml0KTsKKyAg
ICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwodGFyZ2V0KSk7CisgICAg
CisgICAgcmV0dXJuIEZJTkFMSVpFX0RGR19DT0RFKGxpbmtCdWZmZXIsICgiUmVnaXN0ZXIgcHJl
c2VydmF0aW9uIHdyYXBwZXIgZm9yICVwIiwgdGFyZ2V0LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsK
KyNlbHNlIC8vIEVOQUJMRShGVExfSklUKQorICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgbm9uLUZU
TCBidWlsZHMgZm9yIHR3byByZWFzb25zOgorICAgIC8vIC0gSXQganVzdCBzbyBoYXBwZW5zIHRo
YXQgY3VycmVudGx5IG9ubHkgdGhlIEZUTCBib3R0b21zIG91dCBpbiB0aGlzIGNvZGUuCisgICAg
Ly8gLSBUaGUgY29kZSBhYm92ZSB1c2VzIDY0LWJpdCBpbnN0cnVjdGlvbnMuIEl0IGRvZXNuJ3Qg
bmVjZXNzYXJpbHkgaGF2ZSB0bzsgaXQgd291bGQgYmUKKyAgICAvLyAgIGVhc3kgdG8gY2hhbmdl
IGl0IHNvIHRoYXQgaXQgZG9lc24ndC4gQnV0IG9idmlvdXNseSBtYWtpbmcgdGhhdCBjaGFuZ2Ug
d291bGQgYmUgYQorICAgIC8vICAgcHJlcmVxdWlzaXRlIHRvIHJlbW92aW5nIHRoaXMgI2lmLgor
ICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVy
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3Jh
cHBlckdlbmVyYXRvcl9oCisjZGVmaW5lIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVy
YXRvcl9oCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZiBnZW5lcmF0ZVdyYXBwZXIoVk0mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFy
Z2V0KTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisj
ZW5kaWYgLy8gUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJpdHlDaGVja01vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcml0eUNoZWNrTW9kZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJpdHlDaGVja01vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQXJpdHlDaGVja01vZGVfaAorI2RlZmlu
ZSBBcml0eUNoZWNrTW9kZV9oCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIEFyaXR5Q2hlY2tN
b2RlIHsKKyAgICBBcml0eUNoZWNrTm90UmVxdWlyZWQsCisgICAgTXVzdENoZWNrQXJpdHkKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJpdHlDaGVja01vZGVfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2
aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCwxMiArMTE4LDE0IEBAIHZvaWQgU2NyaXB0RXhl
Y3V0YWJsZTo6aW5zdGFsbENvZGUoQ29kZUIKICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICBjYXNl
IENvZGVGb3JDYWxsOgogICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gZ2VuZXJpY0NvZGVCbG9j
ay0+aml0Q29kZSgpOwotICAgICAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBn
ZW5lcmljQ29kZUJsb2NrLT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKKyAgICAgICAgbV9qaXRD
b2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisgICAg
ICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVja0FuZFByZXNlcnZlZFJlZ3MgPSBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIoKTsKICAgICAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCA9IGdl
bmVyaWNDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBDb2RlRm9yQ29uc3RydWN0OgogICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBnZW5l
cmljQ29kZUJsb2NrLT5qaXRDb2RlKCk7Ci0gICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdp
dGhBcml0eUNoZWNrID0gZ2VuZXJpY0NvZGVCbG9jay0+aml0Q29kZVdpdGhBcml0eUNoZWNrKCk7
CisgICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKCk7CisgICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNo
ZWNrQW5kUHJlc2VydmVkUmVncyA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwogICAgICAgICBt
X251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3QgPSBnZW5lcmljQ29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDM3
ICsxNDQsOTQgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3Ry
dWN0KTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3QoKTsKICAg
ICB9Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZ2VuZXJhdGVkSklUQ29kZUZvckNhbGxX
aXRoQXJpdHlDaGVjaygpCi0gICAgewotICAgICAgICBBU1NFUlQobV9qaXRDb2RlRm9yQ2FsbCk7
Ci0gICAgICAgIEFTU0VSVChtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOwotICAgICAg
ICByZXR1cm4gbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrOwotICAgIH0KLQotICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBnZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5
Q2hlY2soKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1faml0Q29kZUZvckNvbnN0cnVjdCk7Ci0g
ICAgICAgIEFTU0VSVChtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7Ci0gICAg
ICAgIHJldHVybiBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjazsKLSAgICB9Ci0g
ICAgICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZW5lcmF0ZWRKSVRDb2RlV2l0aEFy
aXR5Q2hlY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAg
aWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVkSklU
Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaygpOwotICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2Rl
Rm9yQ29uc3RydWN0KTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1
Y3RXaXRoQXJpdHlDaGVjaygpOwotICAgIH0KLSAgICAgICAgCi0gICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpCisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGVudHJ5cG9pbnRGb3IoCisg
ICAgICAgIFZNJiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBBcml0eUNoZWNrTW9k
ZSBhcml0eSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKICAgICB7Ci0gICAg
ICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsK
LSAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1faml0Q29kZUZvckNvbnN0cnVjdFdp
dGhBcml0eUNoZWNrKTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIGNhY2hlZCByZXN1
bHQuIFdlIG9ubHkgaGF2ZSBpdCBmb3IgYXJpdHkgY2hlY2sgYmVjYXVzZSB3ZSB1c2UgdGhlCisg
ICAgICAgIC8vIG5vLWFyaXR5IGVudHJ5cG9pbnQgaW4gbm9uLXZpcnR1YWwgY2FsbHMsIHdoaWNo
IHdpbGwgImNhY2hlIiB0aGlzIHZhbHVlIGRpcmVjdGx5IGluCisgICAgICAgIC8vIG1hY2hpbmUg
Y29kZS4KKyAgICAgICAgaWYgKGFyaXR5ID09IE11c3RDaGVja0FyaXR5KSB7CisgICAgICAgICAg
ICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAg
ICAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTm90UmVxdXJpZWQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0gbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNr
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6
CisgICAgICAgICAgICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0g
bV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVkUmVncykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVy
cykgeworICAgICAgICAgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1cmll
ZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQg
PSBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAgICAgICAg
ICBpZiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9IG1faml0Q29kZUZvckNvbnN0cnVj
dFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVkUmVncykKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0KKyAgICAgICAgICAgIGdlbmVy
YXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKHZtLCBhcml0eSwgcmVnaXN0ZXJz
KTsKKyAgICAgICAgaWYgKGFyaXR5ID09IE11c3RDaGVja0FyaXR5KSB7CisgICAgICAgICAgICAv
LyBDYWNoZSB0aGUgcmVzdWx0OyB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIEpJVCdzIHZpcnR1
YWwgY2FsbCBvcHRpbWl6YXRpb25zLgorICAgICAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAg
ICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAgICAgICAgIHN3aXRjaCAocmVnaXN0
ZXJzKSB7CisgICAgICAgICAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVy
aWVkOgorICAgICAgICAgICAgICAgICAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sg
PSByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAgICAgICAgICBtX2ppdENvZGVG
b3JDYWxsV2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZWRSZWdzID0gcmVzdWx0OworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgICAgICAgICAg
c3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uTm90UmVxdXJpZWQ6CisgICAgICAgICAgICAgICAgICAgIG1faml0Q29kZUZvckNvbnN0
cnVjdFdpdGhBcml0eUNoZWNrID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAg
ICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZWRS
ZWdzID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKAorICAgICAgICBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAg
ICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uTm90UmVxdXJpZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKKyAgICAg
ICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAgICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1faml0Q29kZUZvckNhbGxXaXRoQXJp
dHlDaGVja0FuZFByZXNlcnZlZFJlZ3MpOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIENv
ZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAg
ICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVyaWVkOgorICAgICAgICAgICAg
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1faml0Q29kZUZvckNv
bnN0cnVjdFdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVn
aXN0ZXJzOgorICAgICAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJs
ZUJhc2UsIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVkUmVn
cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgICAgICAKKyAgICAKICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVyc0ZvcihDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCiAgICAgewogICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkK
QEAgLTIzNCw2ICsyOTEsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0
Q29kZUZvckNvbnN0cnVjdDsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRDb2RlRm9y
Q2FsbFdpdGhBcml0eUNoZWNrOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVG
b3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjazsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9q
aXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdzOworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoV2lydHlDaGVja0FuZFByZXNl
cnZlUmVnczsKIH07CiAKIGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGUgOiBwdWJsaWMgRXhlY3V0YWJs
ZUJhc2UgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25Nb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdpc3RlclByZXNlcnZhdGlvbk1vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlX2gKKyNkZWZpbmUg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gUmVn
aXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHsKKyAgICBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVp
cmVkLAorICAgIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGVfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219454</attachid>
            <date>2013-12-17 14:41:23 -0800</date>
            <delta_ts>2013-12-17 19:29:43 -0800</delta_ts>
            <desc>mostly there</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>60267</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNjY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDEzLTEyLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBiZSBhYmxlIHRvIGRvIGNhbGwgSUNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjU4MTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OkNhbGxMaW5rSW5mbyk6Cisg
ICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6bGluayk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICog
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6
CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmZpeEZ1
bmN0aW9uQmFzZWRPblN0YWNrTWFwcyk6CisgICAgICAgICogZnRsL0ZUTElubGluZUNhY2hlU2l6
ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mQ2FsbCk6CisgICAgICAgICogZnRsL0ZU
TElubGluZUNhY2hlU2l6ZS5oOgorICAgICAgICAqIGZ0bC9GVExKU0NhbGwuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OkpTQ2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6
SlNDYWxsOjplbWl0KToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OmxpbmspOgorICAgICAg
ICAqIGZ0bC9GVExKU0NhbGwuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6SlNDYWxsOjpz
dGFja21hcElEKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6Om9wZXJhdG9yPCk6CisgICAg
ICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdCk6CisgICAgICAgICogZnRsL0ZUTFN0
YXRlLmg6CisKIDIwMTMtMTItMTYgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIE1lcmdlZCByMTYwNjY1IGZyb20gdHJ1bmsuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTI2Nyw2ICsyNjcsOCBAQAogCQkwRjY2NkVDRDE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJy
ZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVDQjE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0
aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkIxNERGM0YxNjAwQjdCMkU0IC8qIERGR0FkamFjZW5j
eUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkMxNERGM0YxNjAw
QjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjZFMTY5MTRERjNGMTMwMEI3QjJFNCAvKiBERkdFZGdlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2QjFDQjUxODVGQzlF
OTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCMzE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNw
cCAqLzsgfTsKKwkJMEY2QjFDQjYxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQjQxODVGQzlF
OTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNzAyNUE5MTcxNEIwRkEwMDM4MkMwRSAvKiBERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3MDI1QTcxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAgKi87IH07CiAJCTBGNzAyNUFBMTcxNEIwRkMwMDM4MkMwRSAvKiBERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcxNENB
MTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi87
IH07CkBAIC0xNTc5LDYgKzE1ODEsOCBAQAogCQkwRjY2NkVDQjE4MzZCMzdFMDBEMDE3RjEgLyog
REZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGphY2VuY3lMaXN0Lmg7
IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7IHBhdGggPSBkZmcvREZHRWRnZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZCMUNCMzE4NUZDOUU5MDA4NDVEOTcgLyogRlRM
SlNDYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2Fs
bC5jcHA7IHBhdGggPSBmdGwvRlRMSlNDYWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGwuaDsgcGF0aCA9IGZ0bC9GVExKU0NhbGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MDI1QTcxNzE0QjBGODAwMzgyQzBF
IC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOyBwYXRoID0gZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQ
cm9wYWdhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0JhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg1
OCw2ICsyODYyLDggQEAKIAkJCQkwRkVBMEEwMzE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29k
ZS5oICovLAogCQkJCUE3OEE5NzdEMTc5NzM4RDUwMDlERjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIu
Y3BwICovLAogCQkJCUE3OEE5NzdFMTc5NzM4RDUwMDlERjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIu
aCAqLywKKwkJCQkwRjZCMUNCMzE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCAqLywK
KwkJCQkwRjZCMUNCNDE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmggKi8sCiAJCQkJMEY4
RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuY3BwICovLAogCQkJCTBGOEYyQjk0MTcy
RTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmggKi8sCiAJCQkJMEZDRUZBREQxODA3MzhDMDAwNDcy
Q0U0IC8qIEZUTExvY2F0aW9uLmNwcCAqLywKQEAgLTQzOTUsNiArNDQwMSw3IEBACiAJCQkJMEZC
QzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzhBOTc3NTE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzhBOTc3NzE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjZCMUNCNjE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlND
YWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZH
Rml4dXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJD
IC8qIERGR0ZsdXNoZWRBdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKQEAgLTU1NTEsNiArNTU1
OCw3IEBACiAJCQkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtl
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM5QTE4MDNBREI3MDA3M0MyQkMgLyogRlRM
U3RhY2tNYXBzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTE2MTcwNkJCOTAwMEJCNzIy
QyAvKiBGVExTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjZCMUNCNTE4NUZDOUU5MDA4
NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkUxMTcxNzhF
MUMwMDY5MEM3RiAvKiBGVExUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRTMx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0N0YzOUNCMTA3RUMzNzYwMDQyN0E0OCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxNCArMzgs
NyBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSwgUmVwYXRjCiAgICAgQVNTRVJU
KGlzTGlua2VkKCkpOwogICAgIAogICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2Vt
ZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldp
dGhQYXRjaE9uUmVnaXN0ZXIoaG90UGF0aEJlZ2luKSwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQ+KGNhbGxlZUdQUiksIDApOwotICAgIGlmIChpc0RGRykgewotI2lmIEVO
QUJMRShERkdfSklUKQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9j
YXRpb24sIChjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1
Y3RUaHVua0dlbmVyYXRvcikgOiB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3Ip
KS5jb2RlKCkpOwotI2Vsc2UKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSNlbmRpZgotICAgIH0gZWxzZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0
dXJuTG9jYXRpb24sIGNhbGxUeXBlID09IENvbnN0cnVjdCA/IHZtLmdldENUSVN0dWIobGlua0Nv
bnN0cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkgOiB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1
bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVy
bkxvY2F0aW9uLCBjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKGxpbmtDb25z
dHJ1Y3RUaHVua0dlbmVyYXRvcikuY29kZSgpIDogdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS5jb2RlKCkpOwogICAgIGhhc1NlZW5TaG91bGRSZXBhdGNoID0gZmFsc2U7CiAg
ICAgY2FsbGVlLmNsZWFyKCk7CiAgICAgc3R1Yi5jbGVhcigpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMTYwNjIyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw3ICs1Niw2IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBwdWJsaWMgQmFz
aWNSYXdTZW4KICAgICAgICAgCiAgICAgQ2FsbExpbmtJbmZvKCkKICAgICAgICAgOiBoYXNTZWVu
U2hvdWxkUmVwYXRjaChmYWxzZSkKLSAgICAgICAgLCBpc0RGRyhmYWxzZSkKICAgICAgICAgLCBo
YXNTZWVuQ2xvc3VyZShmYWxzZSkKICAgICAgICAgLCBjYWxsVHlwZShOb25lKQogICAgIHsKQEAg
LTgwLDcgKzc5LDYgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1Nlbgog
ICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBsYXN0U2VlbkNhbGxlZTsKICAgICBSZWZQdHI8
Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YjsKICAgICBib29sIGhhc1NlZW5TaG91bGRSZXBh
dGNoIDogMTsKLSAgICBib29sIGlzREZHIDogMTsKICAgICBib29sIGhhc1NlZW5DbG9zdXJlIDog
MTsKICAgICB1bnNpZ25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAgICAgdW5zaWduZWQg
Y2FsbGVlR1BSIDogODsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDE3ICsyNTcsMTUgQEAgcHVi
bGljOgogICAgIC8vIEV4YWN0bHkgZXF1aXZhbGVudCB0byBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLT5uZXdSZXBsYWNlbWVudENvZGVCbG9ja0Zvcihjb2RlQmxvY2stPnNwZWNpYWxpemF0
aW9uS2luZCgpKQogICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBuZXdSZXBsYWNlbWVudCgpOwog
ICAgIAotICAgIHZvaWQgc2V0SklUQ29kZShQYXNzUmVmUHRyPEpJVENvZGU+IGNvZGUsIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBjb2RlV2l0aEFyaXR5Q2hlY2spCisgICAgdm9pZCBzZXRKSVRDb2Rl
KFBhc3NSZWZQdHI8SklUQ29kZT4gY29kZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2hlYXAt
PmlzRGVmZXJyZWQoKSk7CiAgICAgICAgIG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KGNv
ZGUtPnNpemUoKSk7CiAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7
CiAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgaXMgcHJvYmFibHkgbm90
IG5lZWRlZCBiZWNhdXNlIHRoZSBsb2NrIHdpbGwgYWxzbyBkbyBzb21ldGhpbmcgc2ltaWxhciwg
YnV0IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KICAgICAgICAgbV9qaXRDb2RlID0gY29kZTsK
LSAgICAgICAgbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2sgPSBjb2RlV2l0aEFyaXR5Q2hlY2s7CiAg
ICAgfQogICAgIFBhc3NSZWZQdHI8SklUQ29kZT4gaml0Q29kZSgpIHsgcmV0dXJuIG1faml0Q29k
ZTsgfQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBqaXRDb2RlV2l0aEFyaXR5Q2hlY2soKSB7
IHJldHVybiBtX2ppdENvZGVXaXRoQXJpdHlDaGVjazsgfQogICAgIEpJVENvZGU6OkpJVFR5cGUg
aml0VHlwZSgpIGNvbnN0CiAgICAgewogICAgICAgICBKSVRDb2RlKiBqaXRDb2RlID0gbV9qaXRD
b2RlLmdldCgpOwpAQCAtMTA2Niw3ICsxMDY0LDYgQEAgcHJpdmF0ZToKICAgICBTZW50aW5lbExp
bmtlZExpc3Q8TExJbnRDYWxsTGlua0luZm8sIEJhc2ljUmF3U2VudGluZWxOb2RlPExMSW50Q2Fs
bExpbmtJbmZvPj4gbV9pbmNvbWluZ0xMSW50Q2FsbHM7CiAjZW5kaWYKICAgICBSZWZQdHI8SklU
Q29kZT4gbV9qaXRDb2RlOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVXaXRo
QXJpdHlDaGVjazsKICNpZiBFTkFCTEUoSklUKQogICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4g
bV9zdHViSW5mb3M7CiAgICAgVmVjdG9yPEJ5VmFsSW5mbz4gbV9ieVZhbEluZm9zOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9u
IDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNyArMjMwLDYgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlu
ayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2pzQ2Fs
bHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxv
Y2stPmNhbGxMaW5rSW5mbyhpKTsKICAgICAgICAgaW5mby5jYWxsVHlwZSA9IG1fanNDYWxsc1tp
XS5tX2NhbGxUeXBlOwotICAgICAgICBpbmZvLmlzREZHID0gdHJ1ZTsKICAgICAgICAgaW5mby5j
b2RlT3JpZ2luID0gbV9qc0NhbGxzW2ldLm1fY29kZU9yaWdpbjsKICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKG1fanNDYWxsc1tpXS5tX3Nsb3dDYWxsLCBGdW5jdGlvblB0cigobV92bS0+Z2V0Q1RJ
U3R1YihpbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0ID8gbGlua0NvbnN0
cnVjdFRodW5rR2VuZXJhdG9yIDogbGlua0NhbGxUaHVua0dlbmVyYXRvcikpLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9qc0NhbGxzW2ldLm1fc2xvd0NhbGwpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDQsMTEgKzcwNCwxMSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKIAogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgdGFy
Z2V0VG9DaGVjazsKLSAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgSklU
Q29tcGlsZXI6Okp1bXAgc2xvd1BhdGg7CiAKICAgICBtX2ppdC5lbWl0U3RvcmVDb2RlT3JpZ2lu
KG5vZGUtPmNvZGVPcmlnaW4pOwogICAgIAotICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFu
Y2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdl
dFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKSk7CisgICAgc2xvd1Bh
dGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBj
YWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDAp
KTsKIAogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2FsbGVlR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZXN1bHRHUFIpOwogICAg
IG1faml0LnN0b3JlNjQocmVzdWx0R1BSLCBjYWxsZWVGcmFtZVNsb3QoSlNTdGFjazo6U2NvcGVD
aGFpbikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDggQEAgaW5s
aW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgRnVuY3Rpb25S
ZWVudHJ5V2F0Y2hwb2ludDoKICAgICBjYXNlIFZhcmlhYmxlV2F0Y2hwb2ludDoKICAgICBjYXNl
IE5vdGlmeVdyaXRlOgorICAgIGNhc2UgQ2FsbDoKKyAgICBjYXNlIENvbnN0cnVjdDoKICAgICAg
ICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldEJ5SWQ6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE2
MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5OSw2ICsyOTksNDQgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNl
ZE9uU3RhY2tNYXBzKAogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIC8vIEhhbmRsaW5nIEpT
IGNhbGxzIGlzIHdlaXJkOiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIHNvcnQgdGhlbSBieSB0
aGUgUEMgaW4gTExWTQorICAgIC8vIGdlbmVyYXRlZCBjb2RlLiBUaGF0IGltcGxpZXMgZmlyc3Qg
cHJ1bmluZyB0aGUgb25lcyB0aGF0IExMVk0gZGlkbid0IGdlbmVyYXRlLgorICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5qc0NhbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEpT
Q2FsbCYgY2FsbCA9IHN0YXRlLmpzQ2FsbHNbaV07CisgICAgICAgIAorICAgICAgICBTdGFja01h
cHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGNhbGwuc3RhY2tt
YXBJRCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CisgICAgICAg
ICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4gUHJ1bmUgaXQuCisgICAgICAgICAgICBjYWxs
ID0gc3RhdGUuanNDYWxscy5sYXN0KCk7CisgICAgICAgICAgICBzdGF0ZS5qc0NhbGxzLnJlbW92
ZUxhc3QoKTsKKyAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBjYWxsLm1faW5zdHJ1Y3Rpb25PZmZzZXQgPSBpdGVyLT52
YWx1ZS5pbnN0cnVjdGlvbk9mZnNldDsKKyAgICB9CisgICAgCisgICAgc3RkOjpzb3J0KHN0YXRl
LmpzQ2FsbHMuYmVnaW4oKSwgc3RhdGUuanNDYWxscy5lbmQoKSk7CisgICAgCisgICAgY29kZUJs
b2NrLT5zZXROdW1iZXJPZkNhbGxMaW5rSW5mb3Moc3RhdGUuanNDYWxscy5zaXplKCkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmpzQ2FsbHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
IEpTQ2FsbCYgY2FsbCA9IHN0YXRlLmpzQ2FsbHNbaV07CisKKyAgICAgICAgQ0NhbGxIZWxwZXJz
IGZhc3RQYXRoSklUKCZ2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgY2FsbC5lbWl0KGZhc3RQYXRo
SklUKTsKKyAgICAgICAgCisgICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9IGJpdHdpc2VfY2FzdDxj
aGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgY2FsbC5tX2luc3RydWN0aW9uT2Zmc2V0OworICAg
ICAgICAKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCAmZmFzdFBhdGhKSVQsIHN0
YXJ0T2ZJQywgc2l6ZU9mQ2FsbCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZl
ci5pc1ZhbGlkKCkpOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFzc2VtYmxl
clR5cGVfVDo6ZmlsbE5vcHMoCisgICAgICAgICAgICBzdGFydE9mSUMgKyBsaW5rQnVmZmVyLnNp
emUoKSwgc2l6ZU9mQ2FsbCgpIC0gbGlua0J1ZmZlci5zaXplKCkpOworICAgICAgICAKKyAgICAg
ICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CisgICAg
ICAgIGNhbGwubGluayh2bSwgbGlua0J1ZmZlciwgaW5mbyk7CisgICAgfQorICAgIAogICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgIAogICAgIGZvciAodW5z
aWduZWQgZXhpdEluZGV4ID0gaml0Q29kZS0+b3NyRXhpdC5zaXplKCk7IGV4aXRJbmRleC0tOykg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVT
aXplLmNwcAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExJbmxpbmVDYWNoZVNpemUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0NywxMSBAQCBz
aXplX3Qgc2l6ZU9mUHV0QnlJZCgpCiAgICAgcmV0dXJuIDMyOwogfQogCitzaXplX3Qgc2l6ZU9m
Q2FsbCgpCit7CisgICAgcmV0dXJuIDQzOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAkocmV2aXNpb24gMTYwNjIyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIHNp
emVfdCBzaXplT2ZHZXRCeUlkKCk7CiBzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpOworc2l6ZV90IHNp
emVPZkNhbGwoKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkocmV2
aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNS
ZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDkgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKGZyYW1lQWRkcmVzcywgImxsdm0uZnJhbWVh
ZGRyZXNzIiwgZnVuY3Rpb25UeXBlKHBvaW50ZXJUeXBlKGludDgpLCBpbnQzMikpIFwKICAgICBt
YWNybyhtdWxXaXRoT3ZlcmZsb3czMiwgImxsdm0uc211bC53aXRoLm92ZXJmbG93LmkzMiIsIGZ1
bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50MzIsIGJvb2xlYW4pLCBpbnQzMiwg
aW50MzIpKSBcCiAgICAgbWFjcm8obXVsV2l0aE92ZXJmbG93NjQsICJsbHZtLnNtdWwud2l0aC5v
dmVyZmxvdy5pNjQiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDY0LCBi
b29sZWFuKSwgaW50NjQsIGludDY0KSkgXAotICAgIG1hY3JvKHBhdGNocG9pbnRJbnQ2NCwgImxs
dm0uZXhwZXJpbWVudGFsLnBhdGNocG9pbnQuaTY0IiwgZnVuY3Rpb25UeXBlKGludDY0LCBpbnQz
MiwgaW50MzIsIHJlZjgsIGludDMyLCBWYXJpYWRpYykpIFwKLSAgICBtYWNybyhwYXRjaHBvaW50
Vm9pZCwgImxsdm0uZXhwZXJpbWVudGFsLnBhdGNocG9pbnQudm9pZCIsIGZ1bmN0aW9uVHlwZSh2
b2lkVHlwZSwgaW50MzIsIGludDMyLCByZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBcCi0gICAgbWFj
cm8oc3RhY2ttYXAsICJsbHZtLmV4cGVyaW1lbnRhbC5zdGFja21hcCIsIGZ1bmN0aW9uVHlwZSh2
b2lkVHlwZSwgaW50MzIsIGludDMyLCBWYXJpYWRpYykpIFwKKyAgICBtYWNybyhwYXRjaHBvaW50
SW50NjQsICJsbHZtLmV4cGVyaW1lbnRhbC5wYXRjaHBvaW50Lmk2NCIsIGZ1bmN0aW9uVHlwZShp
bnQ2NCwgaW50NjQsIGludDMyLCByZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBcCisgICAgbWFjcm8o
cGF0Y2hwb2ludFZvaWQsICJsbHZtLmV4cGVyaW1lbnRhbC5wYXRjaHBvaW50LnZvaWQiLCBmdW5j
dGlvblR5cGUodm9pZFR5cGUsIGludDY0LCBpbnQzMiwgcmVmOCwgaW50MzIsIFZhcmlhZGljKSkg
XAorICAgIG1hY3JvKHN0YWNrbWFwLCAibGx2bS5leHBlcmltZW50YWwuc3RhY2ttYXAiLCBmdW5j
dGlvblR5cGUodm9pZFR5cGUsIGludDY0LCBpbnQzMiwgVmFyaWFkaWMpKSBcCiAgICAgbWFjcm8o
c3ViV2l0aE92ZXJmbG93MzIsICJsbHZtLnNzdWIud2l0aC5vdmVyZmxvdy5pMzIiLCBmdW5jdGlv
blR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDMyLCBib29sZWFuKSwgaW50MzIsIGludDMy
KSkgXAogICAgIG1hY3JvKHN1YldpdGhPdmVyZmxvdzY0LCAibGx2bS5zc3ViLndpdGgub3ZlcmZs
b3cuaTY0IiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQ2NCwgYm9vbGVh
biksIGludDY0LCBpbnQ2NCkpIFwKICAgICBtYWNybyh0cmFwLCAibGx2bS50cmFwIiwgZnVuY3Rp
b25UeXBlKHZvaWRUeXBlKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
U0NhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlND
YWxsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlND
YWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJGVExKU0NhbGwuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CisKK0pTQ2FsbDo6SlNDYWxsKHVuc2lnbmVkIHN0YWNrbWFwSUQs
IENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbikK
KyAgICA6IG1fc3RhY2ttYXBJRChzdGFja21hcElEKQorICAgICwgbV9jYWxsVHlwZShjYWxsVHlw
ZSkKKyAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQorICAgICwgbV9pbnN0cnVjdGlvbk9m
ZnNldCgwKQoreworfQorCit2b2lkIEpTQ2FsbDo6ZW1pdChDQ2FsbEhlbHBlcnMmIGppdCkKK3sK
KyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNo
KAorICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgbV90YXJn
ZXRUb0NoZWNrLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCkpOworICAg
IAorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6cmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwKKyAgICAgICAgR1BS
SW5mbzo6cmVnVDEpOworICAgIGppdC5zdG9yZTY0KAorICAgICAgICBHUFJJbmZvOjpyZWdUMSwK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAgICAgIHNpemVvZihSZWdpc3RlcikgKiBK
U1N0YWNrOjpTY29wZUNoYWluIC0gc2l6ZW9mKHZvaWQqKSkpOworICAgIAorICAgIG1fZmFzdENh
bGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IGppdC5q
dW1wKCk7CisgICAgCisgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICBtX3Nsb3dDYWxsID0g
aml0Lm5lYXJDYWxsKCk7CisgICAgCisgICAgZG9uZS5saW5rKCZqaXQpOworfQorCit2b2lkIEpT
Q2FsbDo6bGluayhWTSYgdm0sIExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIENhbGxMaW5rSW5mbyYg
Y2FsbEluZm8pCit7CisgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yOworICAgIGlmIChtX2Nh
bGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0KQorICAgICAgICBnZW5lcmF0b3IgPSBs
aW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3I7CisgICAgZWxzZQorICAgICAgICBnZW5lcmF0b3Ig
PSBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yOworICAgIAorICAgIGxpbmtCdWZmZXIubGluaygKKyAg
ICAgICAgbV9zbG93Q2FsbCwgRnVuY3Rpb25QdHIodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgCisgICAgY2FsbEluZm8uY2FsbFR5cGUg
PSBtX2NhbGxUeXBlOworICAgIGNhbGxJbmZvLmNvZGVPcmlnaW4gPSBtX2NvZGVPcmlnaW47Cisg
ICAgY2FsbEluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVh
ckNhbGwobV9zbG93Q2FsbCk7CisgICAgY2FsbEluZm8uaG90UGF0aEJlZ2luID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1fdGFyZ2V0VG9DaGVjayk7CisgICAgY2FsbEluZm8uaG90UGF0aE90aGVy
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9mYXN0Q2FsbCk7CisgICAgY2FsbElu
Zm8uY2FsbGVlR1BSID0gR1BSSW5mbzo6cmVnVDA7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSlNDYWxsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpTQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExKU0Nh
bGxfaAorI2RlZmluZSBGVExKU0NhbGxfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNs
dWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRl
ICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEpTQ2FsbCB7CitwdWJsaWM6CisgICAgSlNDYWxs
KHVuc2lnbmVkIHN0YWNrbWFwSUQsIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUsIENvZGVPcmlnaW4p
OworICAgIAorICAgIHZvaWQgZW1pdChDQ2FsbEhlbHBlcnMmKTsKKyAgICB2b2lkIGxpbmsoVk0m
LCBMaW5rQnVmZmVyJiwgQ2FsbExpbmtJbmZvJik7CisgICAgCisgICAgdW5zaWduZWQgc3RhY2tt
YXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3I8KGNvbnN0IEpTQ2FsbCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9pbnN0cnVjdGlvbk9mZnNldCA8IG90aGVyLm1faW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgfQor
ICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3N0YWNrbWFwSUQ7CisgICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBtX2NhbGxUeXBlOworICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwor
ICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIG1fdGFyZ2V0VG9DaGVjazsKKyAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgbV9mYXN0Q2FsbDsKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgbV9zbG93
Q2FsbDsKKworcHVibGljOgorICAgIHVpbnQzMl90IG1faW5zdHJ1Y3Rpb25PZmZzZXQ7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
KworI2VuZGlmIC8vIEZUTEpTQ2FsbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTIzLDcgKzEyMyw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIG1fZnRsU3Rh
dGUuY2FwdHVyZWRTdGFja21hcElEID0gbV9zdGFja21hcElEcysrOwogICAgICAgICBtX291dC5j
YWxsKAotICAgICAgICAgICAgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgbV9vdXQuY29uc3RJ
bnQzMihtX2Z0bFN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCksCisgICAgICAgICAgICBtX291dC5z
dGFja21hcEludHJpbnNpYygpLCBtX291dC5jb25zdEludDY0KG1fZnRsU3RhdGUuY2FwdHVyZWRT
dGFja21hcElEKSwKICAgICAgICAgICAgIG1fb3V0LmludDMyWmVybywgY2FwdHVyZWRBbGxvY2Ep
OwogICAgICAgICAKICAgICAgICAgbV9jYWxsRnJhbWUgPSBtX291dC5wdHJUb0ludCgKQEAgLTEy
OTcsNyArMTI5Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgY2FsbCA9
IG1fb3V0LmNhbGwoCiAgICAgICAgICAgICBtX291dC5wYXRjaHBvaW50SW50NjRJbnRyaW5zaWMo
KSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0
SW50MzIoc2l6ZU9mR2V0QnlJZCgpKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoc3Rh
Y2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mR2V0QnlJZCgpKSwKICAgICAgICAgICAg
IGNvbnN0TnVsbChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigxKSwgYmFzZSk7CiAgICAg
ICAgIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJlZ0NhbGxD
b252KTsKICAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsKQEAgLTEzMjIsNyArMTMyMiw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwoCiAgICAg
ICAgICAgICBtX291dC5wYXRjaHBvaW50Vm9pZEludHJpbnNpYygpLAotICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMihzdGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXplT2ZQdXRCeUlk
KCkpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSwgbV9vdXQuY29u
c3RJbnQzMihzaXplT2ZQdXRCeUlkKCkpLAogICAgICAgICAgICAgY29uc3ROdWxsKG1fb3V0LnJl
ZjgpLCBtX291dC5jb25zdEludDMyKDIpLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgIHNldEluc3Ry
dWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJlZ0NhbGxDb252KTsKICAgICAg
ICAgCkBAIC0yNDM3LDM1ICsyNDM3LDQwIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21w
aWxlQ2FsbE9yQ29uc3RydWN0KCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHVu
YWNjZXB0YWJseSBzbG93LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTEzNjIxCisgICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IG1fbm9k
ZS0+b3AoKSA9PSBDYWxsID8gMCA6IDE7CisgICAgICAgIGludCBudW1QYXNzZWRBcmdzID0gbV9u
b2RlLT5udW1DaGlsZHJlbigpIC0gMTsKKyAgICAgICAgaW50IG51bUFyZ3MgPSBudW1QYXNzZWRB
cmdzICsgZHVtbXlUaGlzQXJndW1lbnQ7CiAgICAgICAgIAotICAgICAgICBKX0pJVE9wZXJhdGlv
bl9FIGZ1bmN0aW9uID0KLSAgICAgICAgICAgIG1fbm9kZS0+b3AoKSA9PSBDYWxsID8gb3BlcmF0
aW9uRlRMQ2FsbCA6IG9wZXJhdGlvbkZUTENvbnN0cnVjdDsKKyAgICAgICAgTFZhbHVlIGNhbGxl
ZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKTsKICAgICAgICAg
Ci0gICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IG1fbm9kZS0+b3AoKSA9PSBDYWxsID8g
MCA6IDE7CisgICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CiAg
ICAgICAgIAotICAgICAgICBpbnQgbnVtUGFzc2VkQXJncyA9IG1fbm9kZS0+bnVtQ2hpbGRyZW4o
KSAtIDE7CisgICAgICAgIFZlY3RvcjxMVmFsdWU+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1l
bnRzLmFwcGVuZChtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpKTsKKyAgICAgICAgYXJndW1l
bnRzLmFwcGVuZChtX291dC5jb25zdEludDMyKHNpemVPZkNhbGwoKSkpOworICAgICAgICBhcmd1
bWVudHMuYXBwZW5kKGNvbnN0TnVsbChtX291dC5yZWY4KSk7CisgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQobV9vdXQuY29uc3RJbnQzMigxICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAt
IEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplICsgbnVtQXJncykpOworICAgICAgICBhcmd1
bWVudHMuYXBwZW5kKGNhbGxlZSk7IC8vIGNhbGxlZSAtPiAlcmRpCisgICAgICAgIGFyZ3VtZW50
cy5hcHBlbmQoZ2V0VW5kZWYobV9vdXQuaW50NjQpKTsgLy8gY29kZSBibG9jaworICAgICAgICBh
cmd1bWVudHMuYXBwZW5kKGdldFVuZGVmKG1fb3V0LmludDY0KSk7IC8vIHNjb3BlIGNoYWluCisg
ICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoY2FsbGVlKTsgLy8gY2FsbGVlIC0+IHN0YWNrCisgICAg
ICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQ2NChudW1BcmdzKSk7IC8vIGFyZ3Vt
ZW50IGNvdW50IGFuZCB6ZXJvcyBmb3IgdGhlIHRhZworICAgICAgICBpZiAoZHVtbXlUaGlzQXJn
dW1lbnQpCisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGdldFVuZGVmKG1fb3V0LmludDY0
KSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKQorICAg
ICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCAxICsgaSkpKTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBjYWxsZWVGcmFtZSA9
IG1fb3V0LmFkZCgKLSAgICAgICAgICAgIG1fY2FsbEZyYW1lLAotICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnRQdHIoc2l6ZW9mKFJlZ2lzdGVyKSAqIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1f
Z3JhcGguZnJhbWVSZWdpc3RlckNvdW50KCkpLm9mZnNldCgpKSk7CisgICAgICAgIGNhbGxQcmVm
bGlnaHQoKTsKICAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlMzIoCi0gICAgICAgICAgICBt
X291dC5jb25zdEludDMyKG51bVBhc3NlZEFyZ3MgKyBkdW1teVRoaXNBcmd1bWVudCksCi0gICAg
ICAgICAgICBwYXlsb2FkRm9yKGNhbGxlZUZyYW1lLCBKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7
Ci0gICAgICAgIG1fb3V0LnN0b3JlNjQobV9jYWxsRnJhbWUsIGNhbGxlZUZyYW1lLCBtX2hlYXBz
LkNhbGxGcmFtZV9jYWxsZXJGcmFtZSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAgICAg
ICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksCi0gICAgICAg
ICAgICBhZGRyZXNzRm9yKGNhbGxlZUZyYW1lLCBKU1N0YWNrOjpDYWxsZWUpKTsKKyAgICAgICAg
TFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygp
LCBhcmd1bWVudHMpOworICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNh
bGwsIExMVk1XZWJLaXRKU0NhbGxDb252KTsKICAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTY0
KAotICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDEgKyBpKSksCi0gICAgICAgICAgICAgICAgYWRkcmVzc0ZvcihjYWxsZWVGcmFtZSwgdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoaSArIGR1bW15VGhpc0FyZ3VtZW50KS5vZmZzZXQoKSkpOwot
ICAgICAgICB9CisgICAgICAgIG1fZnRsU3RhdGUuanNDYWxscy5hcHBlbmQoSlNDYWxsKAorICAg
ICAgICAgICAgc3RhY2ttYXBJRCwKKyAgICAgICAgICAgIG1fbm9kZS0+b3AoKSA9PSBDYWxsID8g
Q2FsbExpbmtJbmZvOjpDYWxsIDogQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QsCisgICAgICAgICAg
ICBtX25vZGUtPmNvZGVPcmlnaW4pKTsKICAgICAgICAgCi0gICAgICAgIHNldEpTVmFsdWUodm1D
YWxsKG1fb3V0Lm9wZXJhdGlvbihmdW5jdGlvbiksIGNhbGxlZUZyYW1lKSk7CisgICAgICAgIHNl
dEpTVmFsdWUoY2FsbCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUp1bXAoKQpAQCAt
NDA5Miw3ICs0MDk3LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGV4aXQubV9zdGFja21h
cElEID0gbV9zdGFja21hcElEcysrOwogICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1fb3V0
LmNvbnN0SW50MzIoTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUoKSkpOwot
ICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1fb3V0LmNvbnN0SW50MzIoZXhpdC5tX3N0YWNr
bWFwSUQpKTsKKyAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBtX291dC5jb25zdEludDY0KGV4
aXQubV9zdGFja21hcElEKSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5jYWxsKG1fb3V0LnN0
YWNrbWFwSW50cmluc2ljKCksIGFyZ3VtZW50cyk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAkocmV2aXNpb24gMTYwNjIyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03OSw3ICs3OSw5IEBAIHZvaWQgU3RhY2tNYXBzOjpMb2NhdGlvbjo6cmVzdG9yZUludG8oCiAK
IGJvb2wgU3RhY2tNYXBzOjpSZWNvcmQ6OnBhcnNlKERhdGFWaWV3KiB2aWV3LCB1bnNpZ25lZCYg
b2Zmc2V0KQogewotICAgIHBhdGNocG9pbnRJRCA9IHZpZXctPnJlYWQ8dWludDMyX3Q+KG9mZnNl
dCwgdHJ1ZSk7CisgICAgaW50NjRfdCBpZCA9IHZpZXctPnJlYWQ8aW50NjRfdD4ob2Zmc2V0LCB0
cnVlKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50MzJfdD4oaWQpID09IGlkKTsKKyAgICBw
YXRjaHBvaW50SUQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaWQpOwogICAgIGlmIChzdGF0aWNf
Y2FzdDxpbnQzMl90PihwYXRjaHBvaW50SUQpIDwgMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIApAQCAtOTAsNiArOTIsMTMgQEAgYm9vbCBTdGFja01hcHM6OlJlY29yZDo6cGFyc2UoRGF0
YVZpZXcqIAogICAgIHdoaWxlIChsZW5ndGgtLSkKICAgICAgICAgbG9jYXRpb25zLmFwcGVuZChy
ZWFkT2JqZWN0PExvY2F0aW9uPih2aWV3LCBvZmZzZXQpKTsKICAgICAKKyAgICB1bnNpZ25lZCBu
dW1MaXZlT3V0cyA9IHZpZXctPnJlYWQ8dWludDE2X3Q+KG9mZnNldCwgdHJ1ZSk7CisgICAgd2hp
bGUgKG51bUxpdmVPdXRzLS0pIHsKKyAgICAgICAgdmlldy0+cmVhZDx1aW50MTZfdD4ob2Zmc2V0
LCB0cnVlKTsgLy8gcmVnbnVtCisgICAgICAgIHZpZXctPnJlYWQ8dWludDhfdD4ob2Zmc2V0LCB0
cnVlKTsgLy8gcmVzZXJ2ZWQKKyAgICAgICAgdmlldy0+cmVhZDx1aW50OF90PihvZmZzZXQsIHRy
dWUpOyAvLyBzaXplIGluIGJ5dGVzCisgICAgfQorICAgIAogICAgIHJldHVybiB0cnVlOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAxNjA2MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCIK
ICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMSklURmluYWxpemVyLmgiCisj
aW5jbHVkZSAiRlRMSlNDYWxsLmgiCiAjaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgiCiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKQEAgLTYwLDYgKzYxLDcgQEAgcHVibGljOgogICAgIHVu
c2lnbmVkIGNhcHR1cmVkU3RhY2ttYXBJRDsKICAgICBTZWdtZW50ZWRWZWN0b3I8R2V0QnlJZERl
c2NyaXB0b3I+IGdldEJ5SWRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxQdXRCeUlkRGVzY3JpcHRv
cj4gcHV0QnlJZHM7CisgICAgVmVjdG9yPEpTQ2FsbD4ganNDYWxsczsKICAgICBWZWN0b3I8Q1N0
cmluZz4gY29kZVNlY3Rpb25OYW1lczsKICAgICBWZWN0b3I8Q1N0cmluZz4gZGF0YVNlY3Rpb25O
YW1lczsKICAgICBSZWZDb3VudGVkQXJyYXk8TFNlY3Rpb25Xb3JkPiBzdGFja21hcHNTZWN0aW9u
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCShyZXZpc2lvbiAxNjA2
MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NSw1MCArNzUsMzggQEAgRlRMOjpGb3JPU1JFbnRyeUpJVENvZGUqIEpJVENvZGU6
OmZ0bEZvcgogCiBQYXNzUmVmUHRyPEpJVENvZGU+IEpJVENvZGU6Omhvc3RGdW5jdGlvbihKSVRD
b2RlOjpDb2RlUmVmIGNvZGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRD
b2RlKGNvZGUsIEhvc3RDYWxsVGh1bmspKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5hdGl2
ZUpJVENvZGUoY29kZSwgSG9zdENhbGxUaHVuaykpOwogfQogCi1EaXJlY3RKSVRDb2RlOjpEaXJl
Y3RKSVRDb2RlKEpJVFR5cGUgaml0VHlwZSkKK0pJVENvZGVXaXRoQ29kZVJlZjo6SklUQ29kZVdp
dGhDb2RlUmVmKEpJVFR5cGUgaml0VHlwZSkKICAgICA6IEpJVENvZGUoaml0VHlwZSkKIHsKIH0K
IAotRGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZShjb25zdCBKSVRDb2RlOjpDb2RlUmVmIHJl
ZiwgSklUVHlwZSBqaXRUeXBlKQorSklUQ29kZVdpdGhDb2RlUmVmOjpKSVRDb2RlV2l0aENvZGVS
ZWYoQ29kZVJlZiByZWYsIEpJVFR5cGUgaml0VHlwZSkKICAgICA6IEpJVENvZGUoaml0VHlwZSkK
ICAgICAsIG1fcmVmKHJlZikKIHsKIH0KIAotRGlyZWN0SklUQ29kZTo6fkRpcmVjdEpJVENvZGUo
KQorSklUQ29kZVdpdGhDb2RlUmVmOjp+SklUQ29kZVdpdGhDb2RlUmVmKCkKIHsKIH0KIAotdm9p
ZCBEaXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZihjb25zdCBKSVRDb2RlOjpDb2RlUmVm
IHJlZikKLXsKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9yZWYpOwotICAgIG1fcmVmID0gcmVmOwot
fQotCi1KSVRDb2RlOjpDb2RlUHRyIERpcmVjdEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKCkKLXsK
LSAgICBSRUxFQVNFX0FTU0VSVChtX3JlZik7Ci0gICAgcmV0dXJuIG1fcmVmLmNvZGUoKTsKLX0K
LQotdm9pZCogRGlyZWN0SklUQ29kZTo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qg
b2Zmc2V0KQordm9pZCogSklUQ29kZVdpdGhDb2RlUmVmOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zm
c2V0KHNpemVfdCBvZmZzZXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOwogICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSkgKyBvZmZzZXQ7CiB9CiAKLXZvaWQqIERpcmVjdEpJVENvZGU6OmRhdGFBZGRyZXNzQXRP
ZmZzZXQoc2l6ZV90IG9mZnNldCkKK3ZvaWQqIEpJVENvZGVXaXRoQ29kZVJlZjo6ZGF0YUFkZHJl
c3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsK
ICAgICBBU1NFUlQob2Zmc2V0IDw9IHNpemUoKSk7IC8vIHVzZSA8PSBpbnN0ZWFkIG9mIDwgYmVj
YXVzZSBpdCBpcyB2YWxpZCB0byBhc2sgZm9yIGFuIGFkZHJlc3MgYXQgdGhlIGV4Y2x1c2l2ZSBl
bmQgb2YgdGhlIGNvZGUuCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fcmVm
LmNvZGUoKS5kYXRhTG9jYXRpb24oKSkgKyBvZmZzZXQ7CiB9CiAKLXVuc2lnbmVkIERpcmVjdEpJ
VENvZGU6Om9mZnNldE9mKHZvaWQqIHBvaW50ZXJJbnRvQ29kZSkKK3Vuc2lnbmVkIEpJVENvZGVX
aXRoQ29kZVJlZjo6b2Zmc2V0T2Yodm9pZCogcG9pbnRlckludG9Db2RlKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKG1fcmVmKTsKICAgICBpbnRwdHJfdCByZXN1bHQgPSByZWludGVycHJldF9jYXN0
PGludHB0cl90Pihwb2ludGVySW50b0NvZGUpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
bV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwpAQCAtMTI2LDE4ICsxMTQsMTA1IEBA
IHVuc2lnbmVkIERpcmVjdEpJVENvZGU6Om9mZnNldE9mKHZvaWQqIHAKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdCk7CiB9CiAKLXNpemVfdCBEaXJlY3RKSVRDb2RlOjpz
aXplKCkKK3NpemVfdCBKSVRDb2RlV2l0aENvZGVSZWY6OnNpemUoKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKG1fcmVmKTsKICAgICByZXR1cm4gbV9yZWYuc2l6ZSgpOwogfQogCi1ib29sIERpcmVj
dEpJVENvZGU6OmNvbnRhaW5zKHZvaWQqIGFkZHJlc3MpCitib29sIEpJVENvZGVXaXRoQ29kZVJl
Zjo6Y29udGFpbnModm9pZCogYWRkcmVzcykKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX3JlZik7
CiAgICAgcmV0dXJuIG1fcmVmLmV4ZWN1dGFibGVNZW1vcnkoKS0+Y29udGFpbnMoYWRkcmVzcyk7
CiB9CiAKK0RpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUoSklUVHlwZSBqaXRUeXBlKQorICAg
IDogSklUQ29kZVdpdGhDb2RlUmVmKGppdFR5cGUpCit7Cit9CisKK0RpcmVjdEpJVENvZGU6OkRp
cmVjdEpJVENvZGUoCisgICAgSklUQ29kZTo6Q29kZVJlZiByZWYsIEpJVENvZGU6OkNvZGVQdHIg
d2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGUgaml0VHlwZSkKKyAgICA6IEpJVENvZGVXaXRoQ29kZVJl
ZihqaXRUeXBlLCByZWYpCisgICAgLCBtX3dpdGhBcml0eUNoZWNrKGFyaXR5QXJpdHlDaGVjaykK
K3sKK30KKworRGlyZWN0SklUQ29kZTo6fkRpcmVjdEpJVENvZGUoKQoreworfQorCit2b2lkIERp
cmVjdEpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmKEpJVENvZGU6OkNvZGVSZWYgcmVmLCBKSVRD
b2RlOjpDb2RlUHRyIHdpdGhBcml0eUNoZWNrKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFtX3Jl
Zik7CisgICAgbV9yZWYgPSByZWY7CisgICAgbV93aXRoQXJpdHlDaGVjayA9IHdpdGhBcml0eUNo
ZWNrOworfQorCitEaXJlY3RKSVRDb2RlOjpSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJzKiBE
aXJlY3RKSVRDb2RlOjplbnN1cmVXcmFwcGVycygpCit7CisgICAgaWYgKCFtX3dyYXBwZXJzKQor
ICAgICAgICBtX3dyYXBwZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxSZWdpc3RlclByZXNlcnZhdGlv
bldyYXBwZXJzPigpOworICAgIHJldHVybiBtX3dyYXBwZXJzLmdldCgpOworfQorCitKSVRDb2Rl
OjpDb2RlUHRyIERpcmVjdEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKAorICAgIFZNJiB2bSwgQXJp
dHlDaGVja01vZGUgYXJpdHksIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCit7
CisgICAgc3dpdGNoIChhcml0eSkgeworICAgIGNhc2UgQXJpdHlDaGVja05vdFJlcXVpcmVkOgor
ICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uTm90UmVxdXJpZWQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3JlZik7Cisg
ICAgICAgICAgICByZXR1cm4gbV9yZWYuY29kZSgpOworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2
ZVJlZ2lzdGVyczogeworICAgICAgICAgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVycyog
d3JhcHBlcnMgPSBlbnN1cmVXcmFwcGVycygpOworICAgICAgICAgICAgaWYgKCF3cmFwcGVycy0+
d2l0aG91dEFyaXR5Q2hlY2spCisgICAgICAgICAgICAgICAgd3JhcHBlcnMtPndpdGhvdXRBcml0
eUNoZWNrID0gZ2VuZXJhdGVXcmFwcGVyKHZtLCBtX3JlZi5jb2RlKCkpOworICAgICAgICAgICAg
cmV0dXJuIHdyYXBwZXJzLT53aXRob3V0QXJpdHlDaGVjazsKKyAgICAgICAgfSB9CisgICAgY2Fz
ZSBNdXN0Q2hlY2tBcml0eToKKyAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAg
Y2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVyaWVkOgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV93aXRoQXJpdHlDaGVjayk7CisgICAgICAgICAgICByZXR1cm4gbV93aXRoQXJp
dHlDaGVjazsKKyAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6IHsKKyAgICAgICAg
ICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlcnMqIHdyYXBwZXJzID0gZW5zdXJlV3JhcHBl
cnMoKTsKKyAgICAgICAgICAgIGlmICghd3JhcHBlcnMtPndpdGhBcml0eUNoZWNrKQorICAgICAg
ICAgICAgICAgIHdyYXBwZXJzLT53aXRoQXJpdHlDaGVjayA9IGdlbmVyYXRlV3JhcHBlcih2bSwg
bV93aXRoQXJpdHlDaGVjayk7CisgICAgICAgICAgICByZXR1cm4gd3JhcHBlcnMtPndpdGhBcml0
eUNoZWNrOworICAgICAgICB9IH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gQ29kZVB0cigpOworfQorCitOYXRpdmVKSVRDb2RlOjpOYXRpdmVK
SVRDb2RlKEpJVFR5cGUgaml0VHlwZSkKKyAgICA6IEpJVENvZGVXaXRoQ29kZVJlZihqaXRUeXBl
KQoreworfQorCitOYXRpdmVKSVRDb2RlOjpOYXRpdmVKSVRDb2RlKENvZGVSZWYgcmVmLCBKSVRU
eXBlIGppdFR5cGUpCisgICAgOiBKSVRDb2RlV2l0aENvZGVSZWYocmVmLCBqaXRUeXBlKQorewor
fQorCitOYXRpdmVKSVRDb2RlOjp+TmF0aXZlSklUQ29kZSgpCit7Cit9CisKK3ZvaWQgTmF0aXZl
SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWYoQ29kZVJlZiByZWYpCit7CisgICAgQVNTRVJUKCFt
X3JlZik7CisgICAgbV9yZWYgPSByZWY7Cit9CisKK0pJVENvZGU6OkNvZGVQdHIgTmF0aXZlSklU
Q29kZTo6YWRkcmVzc0ZvckNhbGwoVk0mLCBBcml0eUNoZWNrTW9kZSwgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Nb2RlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCEhbV9yZWYpOworICAgIHJldHVybiBt
X3JlZi5jb2RlKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAxNjA2MjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTY0LDcgKzE2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGppdENvZGUtPmppdFR5cGUo
KTsKICAgICB9CiAgICAgCi0gICAgdmlydHVhbCBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKCkgPSAw
OworICAgIHZpcnR1YWwgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbChWTSYsIEFyaXR5Q2hlY2tNb2Rl
LCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQqIGV4ZWN1
dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgPSAwOwogICAgIHZvaWQqIGV4ZWN1
dGFibGVBZGRyZXNzKCkgeyByZXR1cm4gZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldCgwKTsgfQog
ICAgIHZpcnR1YWwgdm9pZCogZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSA9IDA7
CkBAIC0xODksMjEgKzE4OSw1NyBAQCBwcml2YXRlOgogICAgIEpJVFR5cGUgbV9qaXRUeXBlOwog
fTsKIAotY2xhc3MgRGlyZWN0SklUQ29kZSA6IHB1YmxpYyBKSVRDb2RlIHsKK2NsYXNzIEpJVENv
ZGVXaXRoQ29kZVJlZiA6IHB1YmxpYyBKSVRDb2RlIHsKK3Byb3RlY3RlZDoKKyAgICBKSVRDb2Rl
V2l0aENvZGVSZWYoSklUVHlwZSk7CisgICAgSklUQ29kZVdpdGhDb2RlUmVmKENvZGVSZWYsIEpJ
VFR5cGUpOworCiBwdWJsaWM6Ci0gICAgRGlyZWN0SklUQ29kZShKSVRUeXBlKTsKLSAgICBEaXJl
Y3RKSVRDb2RlKGNvbnN0IENvZGVSZWYsIEpJVFR5cGUpOwotICAgIHZpcnR1YWwgfkRpcmVjdEpJ
VENvZGUoKTsKLSAgICAKLSAgICB2b2lkIGluaXRpYWxpemVDb2RlUmVmKENvZGVSZWYgcmVmKTsK
KyAgICB2aXJ0dWFsIH5KSVRDb2RlV2l0aENvZGVSZWYoKTsKIAotICAgIHZpcnR1YWwgQ29kZVB0
ciBhZGRyZXNzRm9yQ2FsbCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCogZXhlY3V0YWJs
ZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZv
aWQqIGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCB1bnNpZ25lZCBvZmZzZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUpIE9WRVJSSURFOwog
ICAgIHZpcnR1YWwgc2l6ZV90IHNpemUoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgY29u
dGFpbnModm9pZCopIE9WRVJSSURFOwogCitwcm90ZWN0ZWQ6CisgICAgQ29kZVJlZiBtX3JlZjsK
K307CisKK2NsYXNzIERpcmVjdEpJVENvZGUgOiBwdWJsaWMgSklUQ29kZVdpdGhDb2RlUmVmIHsK
K3B1YmxpYzoKKyAgICBEaXJlY3RKSVRDb2RlKEpJVFR5cGUpOworICAgIERpcmVjdEpJVENvZGUo
Q29kZVJlZiwgQ29kZVB0ciB3aXRoQXJpdHlDaGVjaywgSklUVHlwZSk7CisgICAgdmlydHVhbCB+
RGlyZWN0SklUQ29kZSgpOworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGVSZWYoQ29kZVJl
ZiByZWYsIENvZGVQdHIgd2l0aEFyaXR5Q2hlY2spOworCisgICAgdmlydHVhbCBDb2RlUHRyIGFk
ZHJlc3NGb3JDYWxsKFZNJiwgQXJpdHlDaGVja01vZGUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9k
ZSkgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVy
cyogZW5zdXJlV3JhcHBlcnMoKTsKKyAgICAKKyAgICBDb2RlUmVmIG1fcmVmOworICAgIENvZGVQ
dHIgbV93aXRoQXJpdHlDaGVjazsKKyAgICAKKyAgICBzdHJ1Y3QgUmVnaXN0ZXJQcmVzZXJ2YXRp
b25XcmFwcGVycyB7CisgICAgICAgIENvZGVSZWYgd2l0aG91dEFyaXR5Q2hlY2s7CisgICAgICAg
IENvZGVSZWYgd2l0aEFyaXR5Q2hlY2s7CisgICAgfTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVn
aXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVycz4gbV93cmFwcGVyczsKK307CisKK2NsYXNzIE5hdGl2
ZUpJVENvZGUgOiBwdWJsaWMgSklUQ29kZVdpdGhDb2RlUmVmIHsKK3B1YmxpYzoKKyAgICBOYXRp
dmVKSVRDb2RlKEpJVFR5cGUpOworICAgIE5hdGl2ZUpJVENvZGUoQ29kZVJlZiwgSklUVHlwZSk7
CisgICAgdmlydHVhbCB+TmF0aXZlSklUQ29kZSgpOworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6
ZUNvZGVSZWYoQ29kZVJlZiByZWYpOworCisgICAgdmlydHVhbCBDb2RlUHRyIGFkZHJlc3NGb3JD
YWxsKFZNJiwgQXJpdHlDaGVja01vZGUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSkgT1ZFUlJJ
REU7CisKIHByaXZhdGU6CiAgICAgQ29kZVJlZiBtX3JlZjsKIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclByZXNlcnZh
dGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWdpc3Rl
clByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNp
bmNsdWRlICJBc3NlbWJseUhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBnZW5lcmF0ZVdyYXBwZXIoVk0mIHZtLCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgdGFyZ2V0KQoreworI2lmIEVOQUJMRShGVExfSklUKQorICAgIFJlZ2lzdGVyU2V0IGNhbGxl
ZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAKKyAgICAv
LyBObyBuZWVkIHRvIHByZXNlcnZlIEZQIHNpbmNlIHRoYXQgYWx3YXlzIGdldHMgcHJlc2VydmVk
IGFueXdheS4KKyAgICBjYWxsZWVTYXZlcy5jbGVhcihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cik7CisgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZDYWxsZWVTYXZlcyA9IGNhbGxlZVNhdmVz
Lm51bWJlck9mU2V0UmVnaXN0ZXJzKCk7CisgICAgCisgICAgLy8gTmVlZCB0byBwcmVzZXJ2ZSB0
aGUgb2xkIHJldHVybiBQQy4KKyAgICB1bnNpZ25lZCBudW1iZXJPZlZhbHVlc1RvU2F2ZSA9IG51
bWJlck9mQ2FsbGVlU2F2ZXMgKyAxOworICAgIAorICAgIC8vIEFsaWdubWVudC4gUHJlc2VydmUg
dGhlIHNhbWUgYWxpZ25tZW50IGludmFyaWFudHMgdGhhdCB0aGUgY2FsbGVyIGltcG9zZWQuCisg
ICAgdW5zaWduZWQgbnVtYmVyT2ZOZXdTdGFja1Nsb3RzID0KKyAgICAgICAgcm91bmRVcFRvTXVs
dGlwbGVPZihudW1iZXJPZlZhbHVlc1RvU2F2ZSwgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSk7
CisgICAgCisgICAgQXNzZW1ibHlIZWxwZXJzIGppdDsKKyAgICAKKyAgICBqaXQucHJlc2VydmVS
ZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86OnJlZ1QxKTsKKyAgICBqaXQubG9hZDMyKAor
ICAgICAgICBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBBc3NlbWJseUhl
bHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLAorICAgICAgICAgICAgKEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSkgKiBzaXplb2YoUmVnaXN0
ZXIpICsgUGF5bG9hZE9mZnNldCksCisgICAgICAgIEdQUkluZm86OnJlZ1QyKTsKKyAgICAKKyAg
ICAvLyBQbGFjZSB0aGUgc3RhY2sgcG9pbnRlciB3aGVyZSB3ZSB3YW50IGl0IHRvIGJlLgorICAg
IHNpemVfdCBvZmZzZXQgPSBzaXplb2YoUmVnaXN0ZXIpICogbnVtYmVyT2ZOZXdTdGFja1Nsb3Rz
OworICAgIGppdC5zdWJQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIob2Zmc2V0KSwg
QXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgCisgICAgLy8gQ29t
cHV0ZSB0aGUgbnVtYmVyIG9mIHRoaW5ncyB3ZSB3aWxsIGJlIGNvcHlpbmcuCisgICAgaml0LmFk
ZDMyKAorICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigKKyAgICAgICAgICAg
IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBD
U2l6ZSksCisgICAgICAgIEdQUkluZm86OnJlZ1QyKTsKKworICAgIEFTU0VSVCghY2FsbGVlU2F2
ZXMuZ2V0KEdQUkluZm86OnJlZ1Q0KSk7CisgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDQpOworICAgIAorICAgIEFzc2VtYmx5
SGVscGVyczo6TGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgIGppdC5zdWIzMihBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5sb2Fk
NjQoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1Q0LCBvZmZzZXQpLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJl
Z1Q0KTsKKyAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihzaXpl
b2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6cmVnVDQpOworICAgIGppdC5icmFuY2hUZXN0MzIoQXNz
ZW1ibHlIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpyZWdUMikubGlua1RvKCZqaXQsIGxvb3Ap
OworCisgICAgLy8gQXQgdGhpcyBwb2ludCByZWdUNCArIG9mZnNldCBwb2ludHMgdG8gd2hlcmUg
d2Ugc2F2ZSB0aGluZ3MuCisgICAgc2l6ZV90IGN1cnJlbnRPZmZzZXQgPSBvZmZzZXQ7CisgICAg
aml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QxLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BS
SW5mbzo6cmVnVDQsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAKKyAgICBmb3IgKEdQUlJlZyBncHIg
PSBBc3NlbWJseUhlbHBlcnM6OmZpcnN0UmVnaXN0ZXIoKTsgZ3ByIDw9IEFzc2VtYmx5SGVscGVy
czo6bGFzdFJlZ2lzdGVyKCk7IGdwciA9IHN0YXRpY19jYXN0PEdQUlJlZz4oZ3ByICsgMSkpIHsK
KyAgICAgICAgY3VycmVudE9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICBqaXQu
c3RvcmU2NChncHIsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUNCwgb2Zm
c2V0KSk7CisgICAgfQorICAgIAorICAgIC8vIEFzc3VtZSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkg
c2F2ZWQgRlAgcmVnaXN0ZXJzLgorCisgICAgQXNzZW1ibHlIZWxwZXJzOjpDYWxsIGNhbGwgPSBq
aXQubmVhckNhbGwoKTsKKyAgICAKKyAgICAvLyBXZSBuZWVkIHRvIHBsYWNlIHRoZSBzdGFjayBw
b2ludGVyIGJhY2sgdG8gd2hlcmUgdGhlIGNhbGxlciB0aG91Z2h0IHRoZXkgbGVmdCBpdC4KKyAg
ICAvLyBCdXQgYWxzbywgaW4gb3JkZXIgdG8gcmVjb3ZlciB0aGUgcmVnaXN0ZXJzLCB3ZSBuZWVk
IHRvIGZpZ3VyZSBvdXQgaG93IGJpZyB0aGUKKyAgICAvLyBhcmd1bWVudHMgYXJlYSBpcy4KKyAg
ICAKKyAgICBqaXQubG9hZDMyKAorICAgICAgICBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoCisg
ICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLAorICAgICAg
ICAgICAgKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBD
U2l6ZSkgKiBzaXplb2YoUmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNldCksCisgICAgICAgIEdQUklu
Zm86OnJlZ1QyKTsKKyAgICBqaXQubHNoaWZ0MzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoMyksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAKKyAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbTMyKG9mZnNldCksIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3RlciwgR1BSSW5mbzo6cmVnVDIpOworICAgIAorICAgIC8vIHJlZ1QyIG5vdyBwb2ludHMg
dG8gKEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFu
ZFBDU2l6ZSkKKyAgICAvLyBzaG9ydCBvZiB3aGVyZSB0aGluZ3MgYXJlIHNhdmVkLgorICAgIHNp
emVfdCBjdXJyZW50T2Zmc2V0ID0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIEpTU3Rh
Y2s6OkNhbGxlckZyYW1lQW5kUENTaXplOworICAgIGppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVy
czo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgY3VycmVudE9mZnNldCksIEdQUkluZm86OnJlZ1Qx
KTsKKyAgICAKKyAgICBmb3IgKEdQUlJlZyBncHIgPSBBc3NlbWJseUhlbHBlcnM6OmZpcnN0UmVn
aXN0ZXIoKTsgZ3ByIDw9IEFzc2VtYmx5SGVscGVyczo6bGFzdFJlZ2lzdGVyKCk7IGdwciA9IHN0
YXRpY19jYXN0PEdQUlJlZz4oZ3ByICsgMSkpIHsKKyAgICAgICAgY3VycmVudE9mZnNldCArPSBz
aXplb2YoUmVnaXN0ZXIpOworICAgICAgICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpyZWdUNCwgb2Zmc2V0KSwgZ3ByKTsKKyAgICB9CisgICAgCisgICAgaml0
Lmp1bXAoR1BSSW5mbzo6cmVnVDEpOworICAgIAorICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2
bSwgJmppdCk7CisgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsKHRh
cmdldCkpOworICAgIAorICAgIHJldHVybiBGSU5BTElaRV9ERkdfQ09ERShsaW5rQnVmZmVyLCAo
IlJlZ2lzdGVyIHByZXNlcnZhdGlvbiB3cmFwcGVyIGZvciAlcCIsIHRhcmdldC5leGVjdXRhYmxl
QWRkcmVzcygpKSk7CisjZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICAvLyBXZSBkb24ndCBz
dXBwb3J0IG5vbi1GVEwgYnVpbGRzIGZvciB0d28gcmVhc29uczoKKyAgICAvLyAtIEl0IGp1c3Qg
c28gaGFwcGVucyB0aGF0IGN1cnJlbnRseSBvbmx5IHRoZSBGVEwgYm90dG9tcyBvdXQgaW4gdGhp
cyBjb2RlLgorICAgIC8vIC0gVGhlIGNvZGUgYWJvdmUgdXNlcyA2NC1iaXQgaW5zdHJ1Y3Rpb25z
LiBJdCBkb2Vzbid0IG5lY2Vzc2FyaWx5IGhhdmUgdG87IGl0IHdvdWxkIGJlCisgICAgLy8gICBl
YXN5IHRvIGNoYW5nZSBpdCBzbyB0aGF0IGl0IGRvZXNuJ3QuIEJ1dCBvYnZpb3VzbHkgbWFraW5n
IHRoYXQgY2hhbmdlIHdvdWxkIGJlIGEKKyAgICAvLyAgIHByZXJlcXVpc2l0ZSB0byByZW1vdmlu
ZyB0aGlzICNpZi4KKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFC
TEUoSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyUHJlc2Vy
dmF0aW9uV3JhcHBlckdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyUHJlc2VydmF0aW9uV3Jh
cHBlckdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBSZWdpc3RlclBy
ZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3JfaAorI2RlZmluZSBSZWdpc3RlclByZXNlcnZhdGlv
bldyYXBwZXJHZW5lcmF0b3JfaAorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJhdGVXcmFwcGVyKFZNJiwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIHRhcmdldCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKKworI2VuZGlmIC8vIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRv
cl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24g
MTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM4MCwxMSArMTM4MCwxMSBAQCB2b2lkIGxpbmtDbG9zdXJlQ2FsbChFeGVj
U3RhdGUqIGV4ZWMsIENhCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBzdHViSml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJl
Z1QxKTsKICNlbmRpZgotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwg
R1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgCiAgICAgLy8gRklYTUU6IENTdGFjayAtIFRo
aW5rIHRoZSByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybigpIGluc3RydWN0aW9uIHNo
b3VsZCBiZSBhIHBva2UKICAgICBzdHViSml0LmJyZWFrcG9pbnQoKTsKLSAgICBzdHViSml0LnJl
c3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAg
IHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDIp
OwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBzbG93ID0gc3R1YkppdC5qdW1wKCk7CiAgICAg
CiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBjYWxsZXJDb2RlQmxv
Y2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmNwcAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNyArMTQwLDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRodQogfQogCiBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcigKLSAgICBWTSogdm0sIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsKICAgICAvLyBU
aGUgY2FsbGVlIGlzIGluIHJlZ1QwIChmb3IgSlNWQUxVRTMyXzY0LCB0aGUgdGFnIGlzIGluIHJl
Z1QxKS4KICAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrLCBvciBpbiB0
aGUgbGluayByZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQpAQCAtMTU1LDMzICsxNTUsMzQgQEAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yVAogICAgIC8vIHRoZSBERkcga25v
d3MgdGhhdCB0aGUgdmFsdWUgaXMgZGVmaW5pdGVseSBhIGNlbGwsIG9yIGRlZmluaXRlbHkgYSBm
dW5jdGlvbi4KICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGppdC5tb3ZlKFRydXN0ZWRJ
bW02NChUYWdNYXNrKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIAogICAgIHNsb3dDYXNlLmFwcGVu
ZCgKICAgICAgICAgaml0LmJyYW5jaFRlc3Q2NCgKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Tm9uWmVybywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6
cmVnVDIpKTsKICNlbHNlCiAgICAgc2xvd0Nhc2UuYXBwZW5kKAogICAgICAgICBqaXQuYnJhbmNo
MzIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMSwK
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
KSk7CiAjZW5kaWYKLSAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIy
KTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgc2xvd0Nh
c2UuYXBwZW5kKAogICAgICAgICBqaXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
Ojpub25BcmdHUFIyLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwKKyAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgU3RydWN0dXJlOjpjbGFzc0lu
Zm9PZmZzZXQoKSksCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNG
dW5jdGlvbjo6aW5mbygpKSkpOwogICAgIAogICAgIC8vIE5vdyB3ZSBrbm93IHdlIGhhdmUgYSBK
U0Z1bmN0aW9uLgogICAgIAogICAgIGppdC5sb2FkUHRyKAogICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgp
KSwKLSAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMik7Ci0gICAgc2xvd0Nhc2UuYXBwZW5kKAot
ICAgICAgICBqaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okxlc3NUaGFu
LAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIEdQ
UkluZm86Om5vbkFyZ0dQUjIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZk51bVBhcmFtZXRlcnNG
b3Ioa2luZCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsK
KyAgICAgICAgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMiwgRXhlY3V0YWJs
ZUJhc2U6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQsIHJlZ2lzdGVycykp
LAorICAgICAgICBHUFJJbmZvOjpyZWdUMik7CisgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFu
Y2hUZXN0UHRyKENDYWxsSGVscGVyczo6WmVybywgR1BSSW5mbzo6cmVnVDIpKTsKICAgICAKICAg
ICAvLyBOb3cgd2Uga25vdyB0aGF0IHdlIGhhdmUgYSBDb2RlQmxvY2ssIGFuZCB3ZSdyZSBjb21t
aXR0ZWQgdG8gbWFraW5nIGEgZmFzdAogICAgIC8vIGNhbGwuCkBAIC0yMTAsMTMgKzIxMSw5IEBA
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZvclQKICAgICAgICAgICAgIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogI2Vu
ZGlmCiAgICAgCi0gICAgaml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpub25BcmdHUFIyLCBFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZKSVRDb2RlV2l0
aEFyaXR5Q2hlY2tGb3Ioa2luZCkpLAotICAgICAgICBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgCiAg
ICAgLy8gTWFrZSBhIHRhaWwgY2FsbC4gVGhpcyB3aWxsIHJldHVybiBiYWNrIHRvIEpJVCBjb2Rl
LgotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1QwKTsKLSAgICBq
aXQuanVtcChHUFJJbmZvOjpyZWdUMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwg
R1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QyKTsKIAogICAgIHNs
b3dDYXNlLmxpbmsoJmppdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Bcml0eUNoZWNrTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyaXR5Q2hlY2tNb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Bcml0eUNoZWNrTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBBcml0eUNoZWNrTW9kZV9oCisjZGVmaW5lIEFyaXR5Q2hlY2tNb2RlX2gKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2VudW0gQXJpdHlDaGVja01vZGUgeworICAgIEFyaXR5Q2hlY2tOb3RS
ZXF1aXJlZCwKKyAgICBNdXN0Q2hlY2tBcml0eQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBBcml0eUNoZWNrTW9kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE4LDEyICsxMTgsMTQgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShDb2Rl
QgogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgQ29kZUZvckNhbGw6CiAgICAgICAgIG1f
aml0Q29kZUZvckNhbGwgPSBnZW5lcmljQ29kZUJsb2NrLT5qaXRDb2RlKCk7Ci0gICAgICAgIG1f
aml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IGdlbmVyaWNDb2RlQmxvY2stPmppdENvZGVX
aXRoQXJpdHlDaGVjaygpOworICAgICAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sg
PSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhB
cml0eUNoZWNrQW5kUHJlc2VydmVkUmVncyA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwogICAg
ICAgICBtX251bVBhcmFtZXRlcnNGb3JDYWxsID0gZ2VuZXJpY0NvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CiAgICAg
ICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IGdlbmVyaWNDb2RlQmxvY2stPmppdENvZGUoKTsK
LSAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBnZW5lcmljQ29k
ZUJsb2NrLT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKKyAgICAgICAgbV9qaXRDb2RlRm9yQ29u
c3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICAgICAg
bV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZWRSZWdzID0gTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKCk7CiAgICAgICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVj
dCA9IGdlbmVyaWNDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAko
cmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsMzcgKzE0NCw5NCBAQCBwdWJsaWM6CiAgICAg
ICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwogICAgICAgICByZXR1cm4gZ2Vu
ZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgpOwogICAgIH0KLQotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBnZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKCkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX2ppdENvZGVGb3JDYWxsKTsKLSAgICAgICAgQVNTRVJUKG1faml0Q29k
ZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7Ci0gICAgICAgIHJldHVybiBtX2ppdENvZGVGb3JDYWxs
V2l0aEFyaXR5Q2hlY2s7Ci0gICAgfQotCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGdlbmVy
YXRlZEpJVENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaygpCi0gICAgewotICAgICAgICBB
U1NFUlQobV9qaXRDb2RlRm9yQ29uc3RydWN0KTsKLSAgICAgICAgQVNTRVJUKG1faml0Q29kZUZv
ckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKTsKLSAgICAgICAgcmV0dXJuIG1faml0Q29kZUZvckNv
bnN0cnVjdFdpdGhBcml0eUNoZWNrOwotICAgIH0KLSAgICAgICAgCi0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCi0gICAgewotICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkK
LSAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNr
KCk7Ci0gICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgICAgICBy
ZXR1cm4gZ2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKCk7Ci0gICAg
fQotICAgICAgICAKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklUQ29kZVdpdGhBcml0
eUNoZWNrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICAKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgZW50cnlwb2ludEZvcigKKyAgICAgICAgVk0mIHZtLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQsIEFyaXR5Q2hlY2tNb2RlIGFyaXR5LCBSZWdpc3RlclByZXNlcnZh
dGlvbk1vZGUgcmVnaXN0ZXJzKQogICAgIHsKLSAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNh
bGwpCi0gICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVCYXNlLCBt
X2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOwotICAgICAgICBBU1NFUlQoa2luZCA9PSBD
b2RlRm9yQ29uc3RydWN0KTsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRh
YmxlQmFzZSwgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2spOworICAgICAgICAv
LyBDaGVjayBpZiB3ZSBoYXZlIGEgY2FjaGVkIHJlc3VsdC4gV2Ugb25seSBoYXZlIGl0IGZvciBh
cml0eSBjaGVjayBiZWNhdXNlIHdlIHVzZSB0aGUKKyAgICAgICAgLy8gbm8tYXJpdHkgZW50cnlw
b2ludCBpbiBub24tdmlydHVhbCBjYWxscywgd2hpY2ggd2lsbCAiY2FjaGUiIHRoaXMgdmFsdWUg
ZGlyZWN0bHkgaW4KKyAgICAgICAgLy8gbWFjaGluZSBjb2RlLgorICAgICAgICBpZiAoYXJpdHkg
PT0gTXVzdENoZWNrQXJpdHkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAg
ICAgICAgY2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVy
cykgeworICAgICAgICAgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1cmll
ZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQg
PSBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAgICAgICAgICAgaWYg
KE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPSBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5
Q2hlY2tBbmRQcmVzZXJ2ZWRSZWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0Ogor
ICAgICAgICAgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVyaWVkOgorICAgICAgICAgICAgICAgICAgICBp
ZiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9IG1faml0Q29kZUZvckNvbnN0cnVjdFdp
dGhBcml0eUNoZWNrKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2Vy
dmVSZWdpc3RlcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgcmVzdWx0ID0gbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2
ZWRSZWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciByZXN1bHQgPQorICAgICAgICAgICAgZ2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRk
cmVzc0ZvckNhbGwodm0sIGFyaXR5LCByZWdpc3RlcnMpOworICAgICAgICBpZiAoYXJpdHkgPT0g
TXVzdENoZWNrQXJpdHkpIHsKKyAgICAgICAgICAgIC8vIENhY2hlIHRoZSByZXN1bHQ7IHRoaXMg
aXMgbmVjZXNzYXJ5IGZvciB0aGUgSklUJ3MgdmlydHVhbCBjYWxsIG9wdGltaXphdGlvbnMuCisg
ICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgQ29kZUZvckNhbGw6
CisgICAgICAgICAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdXJpZWQ6CisgICAgICAgICAgICAgICAgICAg
IG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IHJlc3VsdDsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6
CisgICAgICAgICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVja0FuZFBy
ZXNlcnZlZFJlZ3MgPSByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29k
ZUZvckNvbnN0cnVjdDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAg
ICAgICAgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1cmllZDoKKyAgICAg
ICAgICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSByZXN1
bHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTXVz
dFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAgICAgICAgICBtX2ppdENvZGVGb3JDb25z
dHJ1Y3RXaXRoQXJpdHlDaGVja0FuZFByZXNlcnZlZFJlZ3MgPSByZXN1bHQ7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tG
b3IoCisgICAgICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Nb2RlIHJlZ2lzdGVycykKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAg
ICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsK
KyAgICAgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1cmllZDoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVCYXNlLCBtX2ppdENv
ZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOworICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVS
ZWdpc3RlcnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRh
YmxlQmFzZSwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVkUmVncyk7
CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAg
ICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uTm90UmVxdXJpZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2spOwor
ICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICAgICAg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ29uc3Ry
dWN0V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZWRSZWdzKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gMDsKICAgICB9Ci0gICAgICAgIAorICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZOdW1QYXJhbWV0ZXJzRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKICAgICB7CiAg
ICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQpAQCAtMjM0LDYgKzI5MSw4IEBAIHByb3Rl
Y3RlZDoKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlRm9yQ29uc3RydWN0OwogICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2s7CiAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNr
OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hl
Y2tBbmRQcmVzZXJ2ZVJlZ3M7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZUZv
ckNvbnN0cnVjdFdpdGhXaXJ0eUNoZWNrQW5kUHJlc2VydmVSZWdzOwogfTsKIAogY2xhc3MgTmF0
aXZlRXhlY3V0YWJsZSA6IHB1YmxpYyBFeGVjdXRhYmxlQmFzZSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdpc3RlclByZXNlcnZhdGlvbk1vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdpc3RlclByZXNlcnZhdGlvbk1v
ZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ2lz
dGVyUHJlc2VydmF0aW9uTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBSZWdp
c3RlclByZXNlcnZhdGlvbk1vZGVfaAorI2RlZmluZSBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGVf
aAorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgewor
ICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQsCisgICAgTXVzdFByZXNlcnZlUmVn
aXN0ZXJzCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFJlZ2lzdGVyUHJl
c2VydmF0aW9uTW9kZV9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219494</attachid>
            <date>2013-12-17 19:29:43 -0800</date>
            <delta_ts>2013-12-17 20:02:00 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>76599</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNjY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDEzLTEyLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBiZSBhYmxlIHRvIGRvIGNhbGwgSUNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjU4MTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OkNhbGxMaW5rSW5mbyk6Cisg
ICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6bGluayk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICog
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6
CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmZpeEZ1
bmN0aW9uQmFzZWRPblN0YWNrTWFwcyk6CisgICAgICAgICogZnRsL0ZUTElubGluZUNhY2hlU2l6
ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mQ2FsbCk6CisgICAgICAgICogZnRsL0ZU
TElubGluZUNhY2hlU2l6ZS5oOgorICAgICAgICAqIGZ0bC9GVExKU0NhbGwuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OkpTQ2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6
SlNDYWxsOjplbWl0KToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OmxpbmspOgorICAgICAg
ICAqIGZ0bC9GVExKU0NhbGwuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6SlNDYWxsOjpz
dGFja21hcElEKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6Om9wZXJhdG9yPCk6CisgICAg
ICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdCk6CisgICAgICAgICogZnRsL0ZUTFN0
YXRlLmg6CisKIDIwMTMtMTItMTYgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIE1lcmdlZCByMTYwNjY1IGZyb20gdHJ1bmsuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTI2Nyw2ICsyNjcsMTIgQEAKIAkJMEY2NjZFQ0QxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3Vy
cmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQ0IxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVj
dGlvbkZvclZhbGlkYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2Vu
Y3lMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZDMTRERjNGMTYw
MEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkIxQ0I1MTg1RkM5
RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQjMxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5j
cHAgKi87IH07CisJCTBGNkIxQ0I2MTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0I0MTg1RkM5
RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjZCMUNCOTE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlDaGVj
a01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NkIxQ0I3MTg2MTI0NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNrTW9kZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkIxQ0JBMTg2MTI0NEMwMDg0
NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0I4MTg2MTI0NEMwMDg0NUQ5NyAvKiBSZWdp
c3RlclByZXNlcnZhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjZCMUNCRDE4NjEyNDZBMDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0JCMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclBy
ZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwICovOyB9OworCQkwRjZCMUNCRTE4NjEyNDZB
MDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCQzE4NjEyNDZB
MDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3MDI1QTkxNzE0
QjBGQTAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcwMjVBNzE3MTRCMEY4MDAzODJD
MEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCAqLzsgfTsKIAkJMEY3MDI1QUExNzE0
QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MDI1QTgxNzE0QjBGODAwMzgyQzBF
IC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2Fy
ZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLzsgfTsKQEAgLTE1NzksNiArMTU4NSwxMiBAQAogCQkw
RjY2NkVDQjE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBo
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Jlc3VycmVjdGlvbkZv
clZhbGlkYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRp
b25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYzRjEz
MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdBZGphY2VuY3lMaXN0Lmg7IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlzdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQg
LyogREZHRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7
IHBhdGggPSBkZmcvREZHRWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZC
MUNCMzE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbC5jcHA7IHBhdGggPSBmdGwvRlRMSlNDYWxsLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3
IC8qIEZUTEpTQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0Nh
bGwuaDsgcGF0aCA9IGZ0bC9GVExKU0NhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2QjFDQjcxODYxMjQ0QzAwODQ1RDk3IC8qIEFyaXR5Q2hlY2tNb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyaXR5Q2hlY2tNb2RlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNkIxQ0I4MTg2MTI0NEMwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNl
cnZhdGlvbk1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNkIxQ0JC
MTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVnaXN0ZXJQcmVzZXJ2
YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY2QjFDQkMxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdl
bmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWdpc3RlclByZXNl
cnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY3MDI1QTcxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzE0Q0ExMTZFQTkyRUQw
MEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3Bw
OyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjg1OCw2ICsyODcwLDggQEAKIAkJCQkwRkVBMEEwMzE3MDUx
M0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5oICovLAogCQkJCUE3OEE5NzdEMTc5NzM4RDUwMDlE
Rjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuY3BwICovLAogCQkJCUE3OEE5NzdFMTc5NzM4RDUwMDlE
Rjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuaCAqLywKKwkJCQkwRjZCMUNCMzE4NUZDOUU5MDA4NDVE
OTcgLyogRlRMSlNDYWxsLmNwcCAqLywKKwkJCQkwRjZCMUNCNDE4NUZDOUU5MDA4NDVEOTcgLyog
RlRMSlNDYWxsLmggKi8sCiAJCQkJMEY4RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsu
Y3BwICovLAogCQkJCTBGOEYyQjk0MTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmggKi8sCiAJ
CQkJMEZDRUZBREQxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCAqLywKQEAgLTMw
MzIsNiArMzA0Niw4IEBACiAJCQkJMEZDNzEyRTExN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZH
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8sCiAJCQkJQTc2RjU0QTIxM0IyOEFBQjAw
RUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovLAogCQkJCUE3NkM1MTc0MTE4Mjc0OEQwMDcx
NUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovLAorCQkJCTBGNkIxQ0JCMTg2MTI0NkEwMDg0NUQ5
NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwICovLAorCQkJCTBG
NkIxQ0JDMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5l
cmF0b3IuaCAqLywKIAkJCQkwRkMzMTQxNDE4MTQ2RDcwMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQu
Y3BwICovLAogCQkJCTBGQzMxNDEwMTgxNDU1OTEwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5oICov
LAogCQkJCTBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCAqLywKQEAgLTMz
NjksNiArMzM4NSw3IEBACiAJCQkJQTc2MTQwQzgxODI5ODJDQjAwNzUwNjI0IC8qIEFyZ3VtZW50
c0l0ZXJhdG9yQ29uc3RydWN0b3IuaCAqLywKIAkJCQlBNzYxNDBDOTE4Mjk4MkNCMDA3NTA2MjQg
LyogQXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGUuY3BwICovLAogCQkJCUE3NjE0MENBMTgyOTgy
Q0IwMDc1MDYyNCAvKiBBcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZS5oICovLAorCQkJCTBGNkIx
Q0I3MTg2MTI0NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNrTW9kZS5oICovLAogCQkJCUE3QThBRjI1
MTdBREI1RjIwMDVBQjE3NCAvKiBBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJQTdBOEFGMjYxN0FE
QjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggKi8sCiAJCQkJMEZGQzk5RDIxODRFRTMxODAw
OUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgKi8sCkBAIC0zNjY3
LDYgKzM2ODQsNyBAQAogCQkJCUY2OTJBODdDMDI1NTU5N0QwMUZGNjBGNyAvKiBSZWdFeHBPYmpl
Y3QuaCAqLywKIAkJCQlCQ0QyMDJCRjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBl
LmNwcCAqLywKIAkJCQlCQ0QyMDJDMDBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBl
LmggKi8sCisJCQkJMEY2QjFDQjgxODYxMjQ0QzAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTW9kZS5oICovLAogCQkJCTBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAq
LywKIAkJCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAq
LywKIAkJCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8s
CkBAIC00Mzk1LDYgKzQ0MTMsNyBAQAogCQkJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBE
RkdFeGl0UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzUxNzk3MzhCODAwOURG
NzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3Nzcx
Nzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2
QjFDQjYxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQkRDMTYxNTFDNUQ0RjAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGOUQzMzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5o
IGluIEhlYWRlcnMgKi8sCkBAIC00NDMwLDYgKzQ0NDksNyBAQAogCQkJCTBGRDhBMzI2MTdENTFG
NTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRkM5OUQxMTg0RUM4QUQwMDlDMTBBQiAvKiBDb25zdGFudE1vZGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGNkIxQ0JBMTg2MTI0NEMwMDg0NUQ5NyAvKiBSZWdpc3RlclBy
ZXNlcnZhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5
MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RUQxODIz
NDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRp
b25JbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTQ1ODgsNiArNDYwOCw3IEBACiAJCQkJMEY0Njgw
ODIxNEJBNTcyRDAwQkZFMjcyIC8qIEpJVEV4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQjE0RTFGMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZDQzg1QTEwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGluZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGNkIxQ0JFMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3Rl
clByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRF
NTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzkwREQ3MDE4MkY0OTk3MDA1ODg4MDcgLyogSlNTZXRJdGVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyNEU1NEUxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbldyYXBwZXJz
LmggaW4gSGVhZGVycyAqLywKQEAgLTQ2MDMsNiArNDYyNCw3IEBACiAJCQkJMEZDNzEyRTMxN0NE
ODc5MzAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJy
aWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNB
Y3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjZCMUNCOTE4NjEyNDRDMDA4NDVEOTcg
LyogQXJpdHlDaGVja01vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MDQ4MDEzMTAyMUExRDkw
MDhFN0YwMSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJDRjM5
QzIxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc2MTQwRDIxODI5ODJDQjAwNzUwNjI0IC8qIEpTQXJndW1lbnRzSXRlcmF0b3IuaCBp
biBIZWFkZXJzICovLApAQCAtNTQ5NSw2ICs1NTE3LDcgQEAKIAkJCQk4Njg4MEY0RDE0MzUzQjIx
MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
N0Q4OUNGRjE3QTBCOENDMDA3NzNBRDggLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGOUZCNEY0MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91
dFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNkIxQ0JEMTg2MTI0NkEwMDg0NUQ5NyAv
KiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZDMDk3QTExNDZCMjhDQTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmpl
Y3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyOTE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC01NTUxLDYgKzU1NzQsNyBAQAogCQkJCTBGMjVGMUIzMTgxNjM1RjMwMDUyMkYzOSAv
KiBGVExTbG93UGF0aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDMzOUExODAz
QURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVB
MEExNjE3MDZCQjkwMDBCQjcyMkMgLyogRlRMU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEY2QjFDQjUxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjIzNUJFMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMjM1QkUzMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDQjEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25D
b25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNp
b24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDkgKzMwOSwxMCBAQCBwdWJsaWM6
CiAgICAgdm9pZCogZGF0YUxvY2F0aW9uKCkgY29uc3QgeyBBU1NFUlRfVkFMSURfQ09ERV9QT0lO
VEVSKG1fdmFsdWUpOyByZXR1cm4gbV92YWx1ZTsgfQogI2VuZGlmCiAKLSAgICBib29sIG9wZXJh
dG9yISgpIGNvbnN0CisgICAgdHlwZWRlZiB2b2lkKiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjoq
VW5zcGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSoo
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3ZhbHVlOworICAgICAgICByZXR1cm4g
ISFtX3ZhbHVlID8gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oMSkgOiAw
OwogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyJiBvdGhlcikgY29uc3QKQEAgLTQzNCw3ICs0MzUsMTEgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gSlNDOjp0cnlUb0Rpc2Fzc2VtYmxlKG1fY29kZVB0ciwgc2l6ZSgpLCBwcmVmaXgs
IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIW1fY29kZVB0cjsgfQorICAgIHR5cGVkZWYgdm9pZCogKE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOworICAgIG9wZXJhdG9yIFVuc3BlY2lm
aWVkQm9vbFR5cGUqKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhIW1fY29kZVB0ciA/
IHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KDEpIDogMDsKKyAgICB9CiAg
ICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxNCArMzgsNyBAQCB2b2lkIENhbGxMaW5r
SW5mbzo6dW5saW5rKFZNJiB2bSwgUmVwYXRjCiAgICAgQVNTRVJUKGlzTGlua2VkKCkpOwogICAg
IAogICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRo
UGF0Y2goUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIo
aG90UGF0aEJlZ2luKSwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KGNh
bGxlZUdQUiksIDApOwotICAgIGlmIChpc0RGRykgewotI2lmIEVOQUJMRShERkdfSklUKQotICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIChjYWxsVHlwZSA9
PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcikg
OiB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpKS5jb2RlKCkpOwotI2Vsc2UK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgIH0gZWxz
ZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIGNhbGxU
eXBlID09IENvbnN0cnVjdCA/IHZtLmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRodW5rR2VuZXJh
dG9yKS5jb2RlKCkgOiB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUo
KSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVybkxvY2F0aW9uLCBjYWxsVHlw
ZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRv
cikuY29kZSgpIDogdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkp
OwogICAgIGhhc1NlZW5TaG91bGRSZXBhdGNoID0gZmFsc2U7CiAgICAgY2FsbGVlLmNsZWFyKCk7
CiAgICAgc3R1Yi5jbGVhcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1
Niw2IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBwdWJsaWMgQmFzaWNSYXdTZW4KICAgICAgICAg
CiAgICAgQ2FsbExpbmtJbmZvKCkKICAgICAgICAgOiBoYXNTZWVuU2hvdWxkUmVwYXRjaChmYWxz
ZSkKLSAgICAgICAgLCBpc0RGRyhmYWxzZSkKICAgICAgICAgLCBoYXNTZWVuQ2xvc3VyZShmYWxz
ZSkKICAgICAgICAgLCBjYWxsVHlwZShOb25lKQogICAgIHsKQEAgLTgwLDcgKzc5LDYgQEAgc3Ry
dWN0IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgIFdyaXRlQmFycmllcjxK
U0Z1bmN0aW9uPiBsYXN0U2VlbkNhbGxlZTsKICAgICBSZWZQdHI8Q2xvc3VyZUNhbGxTdHViUm91
dGluZT4gc3R1YjsKICAgICBib29sIGhhc1NlZW5TaG91bGRSZXBhdGNoIDogMTsKLSAgICBib29s
IGlzREZHIDogMTsKICAgICBib29sIGhhc1NlZW5DbG9zdXJlIDogMTsKICAgICB1bnNpZ25lZCBj
YWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAgICAgdW5zaWduZWQgY2FsbGVlR1BSIDogODsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9u
IDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMjU3LDE3ICsyNTcsMTUgQEAgcHVibGljOgogICAgIC8vIEV4YWN0
bHkgZXF1aXZhbGVudCB0byBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5uZXdSZXBsYWNl
bWVudENvZGVCbG9ja0Zvcihjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpKQogICAgIFBh
c3NSZWZQdHI8Q29kZUJsb2NrPiBuZXdSZXBsYWNlbWVudCgpOwogICAgIAotICAgIHZvaWQgc2V0
SklUQ29kZShQYXNzUmVmUHRyPEpJVENvZGU+IGNvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBj
b2RlV2l0aEFyaXR5Q2hlY2spCisgICAgdm9pZCBzZXRKSVRDb2RlKFBhc3NSZWZQdHI8SklUQ29k
ZT4gY29kZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2hlYXAtPmlzRGVmZXJyZWQoKSk7CiAg
ICAgICAgIG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KGNvZGUtPnNpemUoKSk7CiAgICAg
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgaXMgcHJvYmFibHkgbm90IG5lZWRlZCBiZWNhdXNlIHRo
ZSBsb2NrIHdpbGwgYWxzbyBkbyBzb21ldGhpbmcgc2ltaWxhciwgYnV0IGl0J3MgZ29vZCB0byBi
ZSBwYXJhbm9pZC4KICAgICAgICAgbV9qaXRDb2RlID0gY29kZTsKLSAgICAgICAgbV9qaXRDb2Rl
V2l0aEFyaXR5Q2hlY2sgPSBjb2RlV2l0aEFyaXR5Q2hlY2s7CiAgICAgfQogICAgIFBhc3NSZWZQ
dHI8SklUQ29kZT4gaml0Q29kZSgpIHsgcmV0dXJuIG1faml0Q29kZTsgfQotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBqaXRDb2RlV2l0aEFyaXR5Q2hlY2soKSB7IHJldHVybiBtX2ppdENvZGVX
aXRoQXJpdHlDaGVjazsgfQogICAgIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSgpIGNvbnN0CiAg
ICAgewogICAgICAgICBKSVRDb2RlKiBqaXRDb2RlID0gbV9qaXRDb2RlLmdldCgpOwpAQCAtMTA2
Niw3ICsxMDY0LDYgQEAgcHJpdmF0ZToKICAgICBTZW50aW5lbExpbmtlZExpc3Q8TExJbnRDYWxs
TGlua0luZm8sIEJhc2ljUmF3U2VudGluZWxOb2RlPExMSW50Q2FsbExpbmtJbmZvPj4gbV9pbmNv
bWluZ0xMSW50Q2FsbHM7CiAjZW5kaWYKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOwot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVXaXRoQXJpdHlDaGVjazsKICNpZiBF
TkFCTEUoSklUKQogICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7CiAgICAg
VmVjdG9yPEJ5VmFsSW5mbz4gbV9ieVZhbEluZm9zOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzAsNyArMjMwLDYgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5r
QgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2pzQ2FsbHMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhp
KTsKICAgICAgICAgaW5mby5jYWxsVHlwZSA9IG1fanNDYWxsc1tpXS5tX2NhbGxUeXBlOwotICAg
ICAgICBpbmZvLmlzREZHID0gdHJ1ZTsKICAgICAgICAgaW5mby5jb2RlT3JpZ2luID0gbV9qc0Nh
bGxzW2ldLm1fY29kZU9yaWdpbjsKICAgICAgICAgbGlua0J1ZmZlci5saW5rKG1fanNDYWxsc1tp
XS5tX3Nsb3dDYWxsLCBGdW5jdGlvblB0cigobV92bS0+Z2V0Q1RJU3R1YihpbmZvLmNhbGxUeXBl
ID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0ID8gbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9y
IDogbGlua0NhbGxUaHVua0dlbmVyYXRvcikpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7
CiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGwobV9qc0NhbGxzW2ldLm1fc2xvd0NhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkocmV2aXNpb24gMTYwNjIyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw4ICs0OCw4IEBAIEpJVEZpbmFsaXplcjo6fkpJVEZpbmFsaXplcigpCiAKIGJv
b2wgSklURmluYWxpemVyOjpmaW5hbGl6ZSgpCiB7Ci0gICAgbV9qaXRDb2RlLT5pbml0aWFsaXpl
Q29kZVJlZihtX2xpbmtCdWZmZXItPmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpKTsK
LSAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZSwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyKCkpOworICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYoCisgICAgICAg
IG1fbGlua0J1ZmZlci0+ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCksIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cigpKTsKICAgICAKICAgICBmaW5hbGl6ZUNvbW1vbigpOwogICAgIApAQCAt
NTksOCArNTksOCBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemUoKQogYm9vbCBKSVRGaW5h
bGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3dpdGhB
cml0eUNoZWNrLmlzRW1wdHlWYWx1ZSgpKTsKLSAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2Rl
UmVmKG1fbGlua0J1ZmZlci0+ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCkpOwotICAg
IG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLCBtX3dpdGhBcml0eUNoZWNr
KTsKKyAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmKAorICAgICAgICBtX2xpbmtCdWZm
ZXItPmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpLCBtX3dpdGhBcml0eUNoZWNrKTsK
ICAgICAKICAgICBmaW5hbGl6ZUNvbW1vbigpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjA2
MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MDQsMTEgKzcwNCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKIAogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICBK
SVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xv
d1BhdGg7CiAKICAgICBtX2ppdC5lbWl0U3RvcmVDb2RlT3JpZ2luKG5vZGUtPmNvZGVPcmlnaW4p
OwogICAgIAotICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKSk7CisgICAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQ
dHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRv
Q2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKTsKIAogICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZXN1bHRHUFIpOwogICAgIG1faml0LnN0b3JlNjQocmVz
dWx0R1BSLCBjYWxsZWVGcmFtZVNsb3QoSlNTdGFjazo6U2NvcGVDaGFpbikpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24g
MTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDggQEAgaW5saW5lIENhcGFiaWxpdHlMZXZl
bCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgRnVuY3Rpb25SZWVudHJ5V2F0Y2hwb2ludDoK
ICAgICBjYXNlIFZhcmlhYmxlV2F0Y2hwb2ludDoKICAgICBjYXNlIE5vdGlmeVdyaXRlOgorICAg
IGNhc2UgQ2FsbDoKKyAgICBjYXNlIENvbnN0cnVjdDoKICAgICAgICAgLy8gVGhlc2UgYXJlIE9L
LgogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldEJ5SWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OSw2
ICsyOTksNDQgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAg
ICAgICB9CiAgICAgfQogICAgIAorICAgIC8vIEhhbmRsaW5nIEpTIGNhbGxzIGlzIHdlaXJkOiB3
ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIHNvcnQgdGhlbSBieSB0aGUgUEMgaW4gTExWTQorICAg
IC8vIGdlbmVyYXRlZCBjb2RlLiBUaGF0IGltcGxpZXMgZmlyc3QgcHJ1bmluZyB0aGUgb25lcyB0
aGF0IExMVk0gZGlkbid0IGdlbmVyYXRlLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
dGF0ZS5qc0NhbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEpTQ2FsbCYgY2FsbCA9IHN0YXRl
LmpzQ2FsbHNbaV07CisgICAgICAgIAorICAgICAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6aXRl
cmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGNhbGwuc3RhY2ttYXBJRCgpKTsKKyAgICAgICAg
aWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CisgICAgICAgICAgICAvLyBJdCB3YXMgb3B0
aW1pemVkIG91dC4gUHJ1bmUgaXQuCisgICAgICAgICAgICBjYWxsID0gc3RhdGUuanNDYWxscy5s
YXN0KCk7CisgICAgICAgICAgICBzdGF0ZS5qc0NhbGxzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAg
ICAgIGktLTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBjYWxsLm1faW5zdHJ1Y3Rpb25PZmZzZXQgPSBpdGVyLT52YWx1ZS5pbnN0cnVjdGlvbk9m
ZnNldDsKKyAgICB9CisgICAgCisgICAgc3RkOjpzb3J0KHN0YXRlLmpzQ2FsbHMuYmVnaW4oKSwg
c3RhdGUuanNDYWxscy5lbmQoKSk7CisgICAgCisgICAgY29kZUJsb2NrLT5zZXROdW1iZXJPZkNh
bGxMaW5rSW5mb3Moc3RhdGUuanNDYWxscy5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9
IHN0YXRlLmpzQ2FsbHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIEpTQ2FsbCYgY2FsbCA9IHN0
YXRlLmpzQ2FsbHNbaV07CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzIGZhc3RQYXRoSklUKCZ2bSwg
Y29kZUJsb2NrKTsKKyAgICAgICAgY2FsbC5lbWl0KGZhc3RQYXRoSklUKTsKKyAgICAgICAgCisg
ICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVu
Y3Rpb24pICsgY2FsbC5tX2luc3RydWN0aW9uT2Zmc2V0OworICAgICAgICAKKyAgICAgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKHZtLCAmZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJQywgc2l6ZU9mQ2Fs
bCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZlci5pc1ZhbGlkKCkpOworICAg
ICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFzc2VtYmxlclR5cGVfVDo6ZmlsbE5vcHMo
CisgICAgICAgICAgICBzdGFydE9mSUMgKyBsaW5rQnVmZmVyLnNpemUoKSwgc2l6ZU9mQ2FsbCgp
IC0gbGlua0J1ZmZlci5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgQ2FsbExpbmtJbmZvJiBp
bmZvID0gY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CisgICAgICAgIGNhbGwubGluayh2bSwg
bGlua0J1ZmZlciwgaW5mbyk7CisgICAgfQorICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihjb2RlQmxvY2spOwogICAgIAogICAgIGZvciAodW5zaWduZWQgZXhpdEluZGV4ID0g
aml0Q29kZS0+b3NyRXhpdC5zaXplKCk7IGV4aXRJbmRleC0tOykgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkocmV2aXNpb24g
MTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0NywxMSBAQCBzaXplX3Qgc2l6ZU9mUHV0QnlJ
ZCgpCiAgICAgcmV0dXJuIDMyOwogfQogCitzaXplX3Qgc2l6ZU9mQ2FsbCgpCit7CisgICAgcmV0
dXJuIDQzOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2Fj
aGVTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxp
bmVDYWNoZVNpemUuaAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIHNpemVfdCBzaXplT2ZHZXRCeUlk
KCk7CiBzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpOworc2l6ZV90IHNpemVPZkNhbGwoKTsKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkocmV2aXNpb24gMTYwNjIyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDkgKzQzLDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
ewogICAgIG1hY3JvKGZyYW1lQWRkcmVzcywgImxsdm0uZnJhbWVhZGRyZXNzIiwgZnVuY3Rpb25U
eXBlKHBvaW50ZXJUeXBlKGludDgpLCBpbnQzMikpIFwKICAgICBtYWNybyhtdWxXaXRoT3ZlcmZs
b3czMiwgImxsdm0uc211bC53aXRoLm92ZXJmbG93LmkzMiIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RU
eXBlKG1fY29udGV4dCwgaW50MzIsIGJvb2xlYW4pLCBpbnQzMiwgaW50MzIpKSBcCiAgICAgbWFj
cm8obXVsV2l0aE92ZXJmbG93NjQsICJsbHZtLnNtdWwud2l0aC5vdmVyZmxvdy5pNjQiLCBmdW5j
dGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDY0LCBib29sZWFuKSwgaW50NjQsIGlu
dDY0KSkgXAotICAgIG1hY3JvKHBhdGNocG9pbnRJbnQ2NCwgImxsdm0uZXhwZXJpbWVudGFsLnBh
dGNocG9pbnQuaTY0IiwgZnVuY3Rpb25UeXBlKGludDY0LCBpbnQzMiwgaW50MzIsIHJlZjgsIGlu
dDMyLCBWYXJpYWRpYykpIFwKLSAgICBtYWNybyhwYXRjaHBvaW50Vm9pZCwgImxsdm0uZXhwZXJp
bWVudGFsLnBhdGNocG9pbnQudm9pZCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50MzIsIGlu
dDMyLCByZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBcCi0gICAgbWFjcm8oc3RhY2ttYXAsICJsbHZt
LmV4cGVyaW1lbnRhbC5zdGFja21hcCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50MzIsIGlu
dDMyLCBWYXJpYWRpYykpIFwKKyAgICBtYWNybyhwYXRjaHBvaW50SW50NjQsICJsbHZtLmV4cGVy
aW1lbnRhbC5wYXRjaHBvaW50Lmk2NCIsIGZ1bmN0aW9uVHlwZShpbnQ2NCwgaW50NjQsIGludDMy
LCByZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBcCisgICAgbWFjcm8ocGF0Y2hwb2ludFZvaWQsICJs
bHZtLmV4cGVyaW1lbnRhbC5wYXRjaHBvaW50LnZvaWQiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUs
IGludDY0LCBpbnQzMiwgcmVmOCwgaW50MzIsIFZhcmlhZGljKSkgXAorICAgIG1hY3JvKHN0YWNr
bWFwLCAibGx2bS5leHBlcmltZW50YWwuc3RhY2ttYXAiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUs
IGludDY0LCBpbnQzMiwgVmFyaWFkaWMpKSBcCiAgICAgbWFjcm8oc3ViV2l0aE92ZXJmbG93MzIs
ICJsbHZtLnNzdWIud2l0aC5vdmVyZmxvdy5pMzIiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZSht
X2NvbnRleHQsIGludDMyLCBib29sZWFuKSwgaW50MzIsIGludDMyKSkgXAogICAgIG1hY3JvKHN1
YldpdGhPdmVyZmxvdzY0LCAibGx2bS5zc3ViLndpdGgub3ZlcmZsb3cuaTY0IiwgZnVuY3Rpb25U
eXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQ2NCwgYm9vbGVhbiksIGludDY0LCBpbnQ2NCkp
IFwKICAgICBtYWNybyh0cmFwLCAibGx2bS50cmFwIiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlKSkg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCShyZXZpc2lv
biAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NCw5ICs1NCw5IEBAIHZvaWQgSklUQ29kZTo6YWRkRGF0YVNlY3Rp
b24oUmVmQ291bnRlZEEKICAgICBtX2RhdGFTZWN0aW9ucy5hcHBlbmQoZGF0YVNlY3Rpb24pOwog
fQogCi12b2lkIEpJVENvZGU6OmluaXRpYWxpemVFbnRyeXBvaW50KENvZGVSZWYgZW50cnlwb2lu
dCkKK3ZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50KENvZGVSZWYg
ZW50cnlwb2ludCkKIHsKLSAgICBtX2VudHJ5cG9pbnQgPSBlbnRyeXBvaW50OworICAgIG1fYXJp
dHlDaGVja0VudHJ5cG9pbnQgPSBlbnRyeXBvaW50OwogfQogCiB2b2lkIEpJVENvZGU6OmluaXRp
YWxpemVBZGRyZXNzRm9yQ2FsbChDb2RlUHRyIGFkZHJlc3MpCkBAIC02NCwyMSArNjQsMjUgQEAg
dm9pZCBKSVRDb2RlOjppbml0aWFsaXplQWRkcmVzc0ZvckNhbGwoQwogICAgIG1fYWRkcmVzc0Zv
ckNhbGwgPSBhZGRyZXNzOwogfQogCi1KSVRDb2RlOjpDb2RlUHRyIEpJVENvZGU6OmFkZHJlc3NG
b3JDYWxsKCkKK0pJVENvZGU6OkNvZGVQdHIgSklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoVk0mLCBB
cml0eUNoZWNrTW9kZSBhcml0eUNoZWNrLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpCiB7Ci0g
ICAgcmV0dXJuIG1fYWRkcmVzc0ZvckNhbGw7CisgICAgc3dpdGNoIChhcml0eUNoZWNrKSB7Cisg
ICAgY2FzZSBBcml0eUNoZWNrTm90UmVxdWlyZWQ6CisgICAgICAgIHJldHVybiBtX2FkZHJlc3NG
b3JDYWxsOworICAgIGNhc2UgTXVzdENoZWNrQXJpdHk6CisgICAgICAgIHJldHVybiBtX2FyaXR5
Q2hlY2tFbnRyeXBvaW50LmNvZGUoKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gQ29kZVB0cigpOwogfQogCiB2b2lkKiBKSVRDb2RlOjpleGVj
dXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB7Ci0gICAgUkVMRUFTRV9BU1NF
UlQobV9lbnRyeXBvaW50KTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9h
ZGRyZXNzRm9yQ2FsbC5leGVjdXRhYmxlQWRkcmVzcygpKSArIG9mZnNldDsKIH0KIAogdm9pZCog
SklUQ29kZTo6ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3QpCiB7Ci0gICAgUkVMRUFTRV9BU1NF
UlQobV9lbnRyeXBvaW50KTsKLQogICAgIC8vIFdlIGNhbid0IHBhdGNoIEZUTCBjb2RlLCB5ZXQu
IEV2ZW4gaWYgd2UgZGlkLCBpdCdzIG5vdCBjbGVhciB0aGF0IHdlIHdvdWxkIGRvIHNvCiAgICAg
Ly8gdGhyb3VnaCB0aGlzIEFQSS4KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtODcsOCArOTEsNiBAQCB2b2lkKiBKSVRDb2RlOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVf
CiAKIHVuc2lnbmVkIEpJVENvZGU6Om9mZnNldE9mKHZvaWQqKQogewotICAgIFJFTEVBU0VfQVNT
RVJUKG1fZW50cnlwb2ludCk7Ci0KICAgICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgaGF2ZSB2aXNp
YmlsaXR5IGludG8gdGhlIEZUTCBjb2RlLgogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgcmV0dXJuIDA7CkBAIC05Niw4ICs5OCw2IEBAIHVuc2lnbmVkIEpJVENvZGU6Om9m
ZnNldE9mKHZvaWQqKQogCiBzaXplX3QgSklUQ29kZTo6c2l6ZSgpCiB7Ci0gICAgUkVMRUFTRV9B
U1NFUlQobV9lbnRyeXBvaW50KTsKLQogICAgIC8vIFdlIGRvbid0IGtub3cgdGhlIHNpemUgb2Yg
RlRMIGNvZGUsIHlldC4gTWFrZSBhIHdpbGQgZ3Vlc3MuIFRoaXMgaXMgbW9zdGx5IHVzZWQgZm9y
CiAgICAgLy8gR0MgbG9hZCBlc3RpbWF0ZXMuCiAgICAgcmV0dXJuIDEwMDA7CkBAIC0xMDUsOCAr
MTA1LDYgQEAgc2l6ZV90IEpJVENvZGU6OnNpemUoKQogCiBib29sIEpJVENvZGU6OmNvbnRhaW5z
KHZvaWQqKQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fZW50cnlwb2ludCk7Ci0KICAgICAvLyBX
ZSBoYXZlIG5vIGlkZWEgd2hhdCBhZGRyZXNzZXMgdGhlIEZUTCBjb2RlIGNvbnRhaW5zLCB5ZXQu
CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMTYwNjIy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDE3ICs0NiwxNyBAQCBwdWJsaWM6CiAgICAgSklUQ29kZSgpOwogICAgIH5KSVRD
b2RlKCk7CiAgICAgCi0gICAgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbCgpOwotICAgIHZvaWQqIGV4
ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCk7Ci0gICAgdm9pZCogZGF0YUFk
ZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBvZmZzZXRPZih2b2lk
KiBwb2ludGVySW50b0NvZGUpOwotICAgIHNpemVfdCBzaXplKCk7Ci0gICAgYm9vbCBjb250YWlu
cyh2b2lkKik7CisgICAgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbChWTSYsIEFyaXR5Q2hlY2tNb2Rl
LCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpIE9WRVJSSURFOworICAgIHZvaWQqIGV4ZWN1dGFi
bGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgT1ZFUlJJREU7CisgICAgdm9pZCogZGF0
YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSBPVkVSUklERTsKKyAgICB1bnNpZ25lZCBv
ZmZzZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUpIE9WRVJSSURFOworICAgIHNpemVfdCBzaXpl
KCkgT1ZFUlJJREU7CisgICAgYm9vbCBjb250YWlucyh2b2lkKikgT1ZFUlJJREU7CiAgICAgCiAg
ICAgdm9pZCBpbml0aWFsaXplRXhpdFRodW5rcyhDb2RlUmVmKTsKICAgICB2b2lkIGFkZEhhbmRs
ZShQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+KTsKICAgICB2b2lkIGFkZERhdGFT
ZWN0aW9uKFJlZkNvdW50ZWRBcnJheTxMU2VjdGlvbldvcmQ+KTsKLSAgICB2b2lkIGluaXRpYWxp
emVFbnRyeXBvaW50KENvZGVSZWYpOworICAgIHZvaWQgaW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRy
eXBvaW50KENvZGVSZWYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKENvZGVQ
dHIpOwogICAgIAogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRs
ZT4+JiBoYW5kbGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYW5kbGVzOyB9CkBAIC03NSw3ICs3NSw3
IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZkNvdW50ZWRBcnJheTxMU2VjdGlvbldvcmQ+PiBt
X2RhdGFTZWN0aW9uczsKICAgICBWZWN0b3I8UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+
PiBtX2hhbmRsZXM7CiAgICAgQ29kZVB0ciBtX2FkZHJlc3NGb3JDYWxsOwotICAgIENvZGVSZWYg
bV9lbnRyeXBvaW50OworICAgIENvZGVSZWYgbV9hcml0eUNoZWNrRW50cnlwb2ludDsKICAgICBD
b2RlUmVmIG1fZXhpdFRodW5rczsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAzLDEyICsxMDMsMTIgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQog
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVjazsKICAgICBpZiAoYXJpdHlD
aGVjay5pc1NldCgpKQogICAgICAgICB3aXRoQXJpdHlDaGVjayA9IGVudHJ5cG9pbnRMaW5rQnVm
ZmVyLT5sb2NhdGlvbk9mKGFyaXR5Q2hlY2spOwotICAgIGppdENvZGUtPmluaXRpYWxpemVFbnRy
eXBvaW50KAorICAgIGppdENvZGUtPmluaXRpYWxpemVBcml0eUNoZWNrRW50cnlwb2ludCgKICAg
ICAgICAgRklOQUxJWkVfREZHX0NPREUoCiAgICAgICAgICAgICAqZW50cnlwb2ludExpbmtCdWZm
ZXIsCiAgICAgICAgICAgICAoIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAlcyB3aXRoIExMVk0g
Z2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9w
bGFuLmNvZGVCbG9jay5nZXQoKSwgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpLCBmdW5jdGlvbikp
KTsKICAgICAKLSAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKGppdENvZGUsIHdpdGhB
cml0eUNoZWNrKTsKKyAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKGppdENvZGUpOwog
ICAgIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKU0NhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSlNDYWxsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSlNDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGVExKU0NhbGwuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK0pTQ2FsbDo6SlNDYWxsKHVuc2lnbmVkIHN0YWNr
bWFwSUQsIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUsIENvZGVPcmlnaW4gY29kZU9y
aWdpbikKKyAgICA6IG1fc3RhY2ttYXBJRChzdGFja21hcElEKQorICAgICwgbV9jYWxsVHlwZShj
YWxsVHlwZSkKKyAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQorICAgICwgbV9pbnN0cnVj
dGlvbk9mZnNldCgwKQoreworfQorCit2b2lkIEpTQ2FsbDo6ZW1pdChDQ2FsbEhlbHBlcnMmIGpp
dCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0
aFBhdGNoKAorICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwg
bV90YXJnZXRUb0NoZWNrLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCkp
OworICAgIAorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwKKyAgICAg
ICAgR1BSSW5mbzo6cmVnVDEpOworICAgIGppdC5zdG9yZTY0KAorICAgICAgICBHUFJJbmZvOjpy
ZWdUMSwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAgICAgIHNpemVvZihSZWdpc3Rl
cikgKiBKU1N0YWNrOjpTY29wZUNoYWluIC0gc2l6ZW9mKHZvaWQqKSkpOworICAgIAorICAgIG1f
ZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9
IGppdC5qdW1wKCk7CisgICAgCisgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICBtX3Nsb3dD
YWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgCisgICAgZG9uZS5saW5rKCZqaXQpOworfQorCit2
b2lkIEpTQ2FsbDo6bGluayhWTSYgdm0sIExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIENhbGxMaW5r
SW5mbyYgY2FsbEluZm8pCit7CisgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yOworICAgIGlm
IChtX2NhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0KQorICAgICAgICBnZW5lcmF0
b3IgPSBsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3I7CisgICAgZWxzZQorICAgICAgICBnZW5l
cmF0b3IgPSBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yOworICAgIAorICAgIGxpbmtCdWZmZXIubGlu
aygKKyAgICAgICAgbV9zbG93Q2FsbCwgRnVuY3Rpb25QdHIodm0uZ2V0Q1RJU3R1YihnZW5lcmF0
b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgCisgICAgY2FsbEluZm8uY2Fs
bFR5cGUgPSBtX2NhbGxUeXBlOworICAgIGNhbGxJbmZvLmNvZGVPcmlnaW4gPSBtX2NvZGVPcmln
aW47CisgICAgY2FsbEluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mTmVhckNhbGwobV9zbG93Q2FsbCk7CisgICAgY2FsbEluZm8uaG90UGF0aEJlZ2luID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKG1fdGFyZ2V0VG9DaGVjayk7CisgICAgY2FsbEluZm8uaG90UGF0
aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9mYXN0Q2FsbCk7CisgICAg
Y2FsbEluZm8uY2FsbGVlR1BSID0gR1BSSW5mbzo6cmVnVDA7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBG
VExKU0NhbGxfaAorI2RlZmluZSBGVExKU0NhbGxfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisK
KyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNp
bmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEpTQ2FsbCB7CitwdWJsaWM6CisgICAg
SlNDYWxsKHVuc2lnbmVkIHN0YWNrbWFwSUQsIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUsIENvZGVP
cmlnaW4pOworICAgIAorICAgIHZvaWQgZW1pdChDQ2FsbEhlbHBlcnMmKTsKKyAgICB2b2lkIGxp
bmsoVk0mLCBMaW5rQnVmZmVyJiwgQ2FsbExpbmtJbmZvJik7CisgICAgCisgICAgdW5zaWduZWQg
c3RhY2ttYXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IEpTQ2FsbCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9pbnN0cnVjdGlvbk9mZnNldCA8IG90aGVyLm1faW5zdHJ1Y3Rpb25PZmZzZXQ7Cisg
ICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3N0YWNrbWFwSUQ7CisgICAgQ2Fs
bExpbmtJbmZvOjpDYWxsVHlwZSBtX2NhbGxUeXBlOworICAgIENvZGVPcmlnaW4gbV9jb2RlT3Jp
Z2luOworICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIG1fdGFyZ2V0VG9DaGVjazsKKyAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgbV9mYXN0Q2FsbDsKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
bV9zbG93Q2FsbDsKKworcHVibGljOgorICAgIHVpbnQzMl90IG1faW5zdHJ1Y3Rpb25PZmZzZXQ7
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKKworI2VuZGlmIC8vIEZUTEpTQ2FsbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNjA2MjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIG1f
ZnRsU3RhdGUuY2FwdHVyZWRTdGFja21hcElEID0gbV9zdGFja21hcElEcysrOwogICAgICAgICBt
X291dC5jYWxsKAotICAgICAgICAgICAgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgbV9vdXQu
Y29uc3RJbnQzMihtX2Z0bFN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCksCisgICAgICAgICAgICBt
X291dC5zdGFja21hcEludHJpbnNpYygpLCBtX291dC5jb25zdEludDY0KG1fZnRsU3RhdGUuY2Fw
dHVyZWRTdGFja21hcElEKSwKICAgICAgICAgICAgIG1fb3V0LmludDMyWmVybywgY2FwdHVyZWRB
bGxvY2EpOwogICAgICAgICAKICAgICAgICAgbV9jYWxsRnJhbWUgPSBtX291dC5wdHJUb0ludCgK
QEAgLTEyOTcsNyArMTI5Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBMVmFsdWUg
Y2FsbCA9IG1fb3V0LmNhbGwoCiAgICAgICAgICAgICBtX291dC5wYXRjaHBvaW50SW50NjRJbnRy
aW5zaWMoKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3RhY2ttYXBJRCksIG1fb3V0
LmNvbnN0SW50MzIoc2l6ZU9mR2V0QnlJZCgpKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
NjQoc3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mR2V0QnlJZCgpKSwKICAgICAg
ICAgICAgIGNvbnN0TnVsbChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigxKSwgYmFzZSk7
CiAgICAgICAgIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJl
Z0NhbGxDb252KTsKICAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsKQEAgLTEzMjIsNyArMTMyMiw3
IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwo
CiAgICAgICAgICAgICBtX291dC5wYXRjaHBvaW50Vm9pZEludHJpbnNpYygpLAotICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnQzMihzdGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXplT2ZQ
dXRCeUlkKCkpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSwgbV9v
dXQuY29uc3RJbnQzMihzaXplT2ZQdXRCeUlkKCkpLAogICAgICAgICAgICAgY29uc3ROdWxsKG1f
b3V0LnJlZjgpLCBtX291dC5jb25zdEludDMyKDIpLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgIHNl
dEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJlZ0NhbGxDb252KTsK
ICAgICAgICAgCkBAIC0yNDM3LDM1ICsyNDM3LDQwIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlQ2FsbE9yQ29uc3RydWN0KCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlz
IGlzIHVuYWNjZXB0YWJseSBzbG93LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIxCisgICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9
IG1fbm9kZS0+b3AoKSA9PSBDYWxsID8gMCA6IDE7CisgICAgICAgIGludCBudW1QYXNzZWRBcmdz
ID0gbV9ub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKKyAgICAgICAgaW50IG51bUFyZ3MgPSBudW1Q
YXNzZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQ7CiAgICAgICAgIAotICAgICAgICBKX0pJVE9w
ZXJhdGlvbl9FIGZ1bmN0aW9uID0KLSAgICAgICAgICAgIG1fbm9kZS0+b3AoKSA9PSBDYWxsID8g
b3BlcmF0aW9uRlRMQ2FsbCA6IG9wZXJhdGlvbkZUTENvbnN0cnVjdDsKKyAgICAgICAgTFZhbHVl
IGNhbGxlZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKTsKICAg
ICAgICAgCi0gICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IG1fbm9kZS0+b3AoKSA9PSBD
YWxsID8gMCA6IDE7CisgICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURz
Kys7CiAgICAgICAgIAotICAgICAgICBpbnQgbnVtUGFzc2VkQXJncyA9IG1fbm9kZS0+bnVtQ2hp
bGRyZW4oKSAtIDE7CisgICAgICAgIFZlY3RvcjxMVmFsdWU+IGFyZ3VtZW50czsKKyAgICAgICAg
YXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpKTsKKyAgICAgICAg
YXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDMyKHNpemVPZkNhbGwoKSkpOworICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKGNvbnN0TnVsbChtX291dC5yZWY4KSk7CisgICAgICAgIGFyZ3Vt
ZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMigxICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplICsgbnVtQXJncykpOworICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKGNhbGxlZSk7IC8vIGNhbGxlZSAtPiAlcmRpCisgICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQoZ2V0VW5kZWYobV9vdXQuaW50NjQpKTsgLy8gY29kZSBibG9jaworICAg
ICAgICBhcmd1bWVudHMuYXBwZW5kKGdldFVuZGVmKG1fb3V0LmludDY0KSk7IC8vIHNjb3BlIGNo
YWluCisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoY2FsbGVlKTsgLy8gY2FsbGVlIC0+IHN0YWNr
CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQ2NChudW1BcmdzKSk7IC8v
IGFyZ3VtZW50IGNvdW50IGFuZCB6ZXJvcyBmb3IgdGhlIHRhZworICAgICAgICBpZiAoZHVtbXlU
aGlzQXJndW1lbnQpCisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGdldFVuZGVmKG1fb3V0
LmludDY0KSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytp
KQorICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobV9ub2RlLCAxICsgaSkpKTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBjYWxsZWVG
cmFtZSA9IG1fb3V0LmFkZCgKLSAgICAgICAgICAgIG1fY2FsbEZyYW1lLAotICAgICAgICAgICAg
bV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKFJlZ2lzdGVyKSAqIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKG1fZ3JhcGguZnJhbWVSZWdpc3RlckNvdW50KCkpLm9mZnNldCgpKSk7CisgICAgICAgIGNh
bGxQcmVmbGlnaHQoKTsKICAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlMzIoCi0gICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKG51bVBhc3NlZEFyZ3MgKyBkdW1teVRoaXNBcmd1bWVudCks
Ci0gICAgICAgICAgICBwYXlsb2FkRm9yKGNhbGxlZUZyYW1lLCBKU1N0YWNrOjpBcmd1bWVudENv
dW50KSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlNjQobV9jYWxsRnJhbWUsIGNhbGxlZUZyYW1lLCBt
X2hlYXBzLkNhbGxGcmFtZV9jYWxsZXJGcmFtZSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlNjQoCi0g
ICAgICAgICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksCi0g
ICAgICAgICAgICBhZGRyZXNzRm9yKGNhbGxlZUZyYW1lLCBKU1N0YWNrOjpDYWxsZWUpKTsKKyAg
ICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJp
bnNpYygpLCBhcmd1bWVudHMpOworICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50
aW9uKGNhbGwsIExMVk1XZWJLaXRKU0NhbGxDb252KTsKICAgICAgICAgCi0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7Ci0gICAgICAgICAgICBtX291dC5z
dG9yZTY0KAotICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDEgKyBpKSksCi0gICAgICAgICAgICAgICAgYWRkcmVzc0ZvcihjYWxsZWVGcmFtZSwg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSArIGR1bW15VGhpc0FyZ3VtZW50KS5vZmZzZXQo
KSkpOwotICAgICAgICB9CisgICAgICAgIG1fZnRsU3RhdGUuanNDYWxscy5hcHBlbmQoSlNDYWxs
KAorICAgICAgICAgICAgc3RhY2ttYXBJRCwKKyAgICAgICAgICAgIG1fbm9kZS0+b3AoKSA9PSBD
YWxsID8gQ2FsbExpbmtJbmZvOjpDYWxsIDogQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QsCisgICAg
ICAgICAgICBtX25vZGUtPmNvZGVPcmlnaW4pKTsKICAgICAgICAgCi0gICAgICAgIHNldEpTVmFs
dWUodm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihmdW5jdGlvbiksIGNhbGxlZUZyYW1lKSk7CisgICAg
ICAgIHNldEpTVmFsdWUoY2FsbCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUp1bXAo
KQpAQCAtNDA5Miw3ICs0MDk3LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGV4aXQubV9z
dGFja21hcElEID0gbV9zdGFja21hcElEcysrOwogICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAs
IG1fb3V0LmNvbnN0SW50MzIoTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUo
KSkpOwotICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1fb3V0LmNvbnN0SW50MzIoZXhpdC5t
X3N0YWNrbWFwSUQpKTsKKyAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBtX291dC5jb25zdElu
dDY0KGV4aXQubV9zdGFja21hcElEKSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5jYWxsKG1f
b3V0LnN0YWNrbWFwSW50cmluc2ljKCksIGFyZ3VtZW50cyk7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Nyw3ICs4Nyw4IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAgICAKICAgICBleGVj
LT5zZXRDb2RlQmxvY2soZW50cnlDb2RlQmxvY2spOwogICAgIAotICAgIHZvaWQqIHJlc3VsdCA9
IGVudHJ5Q29kZS0+YWRkcmVzc0ZvckNhbGwoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIHZv
aWQqIHJlc3VsdCA9IGVudHJ5Q29kZS0+YWRkcmVzc0ZvckNhbGwoCisgICAgICAgIHZtLCBBcml0
eUNoZWNrTm90UmVxdWlyZWQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpLmV4ZWN1
dGFibGVBZGRyZXNzKCk7CiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAg
ZGF0YUxvZygiICAgIEVudHJ5IHdpbGwgc3VjY2VlZCwgZ29pbmcgdG8gYWRkcmVzcyIsIFJhd1Bv
aW50ZXIocmVzdWx0KSwgIlxuIik7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN0YWNrTWFwcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGFja01hcHMuY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5
LDkgQEAgdm9pZCBTdGFja01hcHM6OkxvY2F0aW9uOjpyZXN0b3JlSW50bygKIAogYm9vbCBTdGFj
a01hcHM6OlJlY29yZDo6cGFyc2UoRGF0YVZpZXcqIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQpCiB7
Ci0gICAgcGF0Y2hwb2ludElEID0gdmlldy0+cmVhZDx1aW50MzJfdD4ob2Zmc2V0LCB0cnVlKTsK
KyAgICBpbnQ2NF90IGlkID0gdmlldy0+cmVhZDxpbnQ2NF90PihvZmZzZXQsIHRydWUpOworICAg
IEFTU0VSVChzdGF0aWNfY2FzdDxpbnQzMl90PihpZCkgPT0gaWQpOworICAgIHBhdGNocG9pbnRJ
RCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihpZCk7CiAgICAgaWYgKHN0YXRpY19jYXN0PGludDMy
X3Q+KHBhdGNocG9pbnRJRCkgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBAIC05
MCw2ICs5MiwxMyBAQCBib29sIFN0YWNrTWFwczo6UmVjb3JkOjpwYXJzZShEYXRhVmlldyogCiAg
ICAgd2hpbGUgKGxlbmd0aC0tKQogICAgICAgICBsb2NhdGlvbnMuYXBwZW5kKHJlYWRPYmplY3Q8
TG9jYXRpb24+KHZpZXcsIG9mZnNldCkpOwogICAgIAorICAgIHVuc2lnbmVkIG51bUxpdmVPdXRz
ID0gdmlldy0+cmVhZDx1aW50MTZfdD4ob2Zmc2V0LCB0cnVlKTsKKyAgICB3aGlsZSAobnVtTGl2
ZU91dHMtLSkgeworICAgICAgICB2aWV3LT5yZWFkPHVpbnQxNl90PihvZmZzZXQsIHRydWUpOyAv
LyByZWdudW0KKyAgICAgICAgdmlldy0+cmVhZDx1aW50OF90PihvZmZzZXQsIHRydWUpOyAvLyBy
ZXNlcnZlZAorICAgICAgICB2aWV3LT5yZWFkPHVpbnQ4X3Q+KG9mZnNldCwgdHJ1ZSk7IC8vIHNp
emUgaW4gYnl0ZXMKKyAgICB9CisgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiAr
MzYsNyBAQAogI2luY2x1ZGUgIkZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oIgogI2luY2x1ZGUg
IkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJGVExKSVRGaW5hbGl6ZXIuaCIKKyNpbmNsdWRlICJG
VExKU0NhbGwuaCIKICNpbmNsdWRlICJGVExTdGFja01hcHMuaCIKICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KIApAQCAtNjAsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgY2Fw
dHVyZWRTdGFja21hcElEOwogICAgIFNlZ21lbnRlZFZlY3RvcjxHZXRCeUlkRGVzY3JpcHRvcj4g
Z2V0QnlJZHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFB1dEJ5SWREZXNjcmlwdG9yPiBwdXRCeUlk
czsKKyAgICBWZWN0b3I8SlNDYWxsPiBqc0NhbGxzOwogICAgIFZlY3RvcjxDU3RyaW5nPiBjb2Rl
U2VjdGlvbk5hbWVzOwogICAgIFZlY3RvcjxDU3RyaW5nPiBkYXRhU2VjdGlvbk5hbWVzOwogICAg
IFJlZkNvdW50ZWRBcnJheTxMU2VjdGlvbldvcmQ+IHN0YWNrbWFwc1NlY3Rpb247CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwMyw4ICs3MDMsNyBA
QCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAgCiAgICAgbV9j
b2RlQmxvY2stPnNocmlua1RvRml0KENvZGVCbG9jazo6TGF0ZVNocmluayk7CiAgICAgbV9jb2Rl
QmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHJl
c3VsdCwgSklUQ29kZTo6QmFzZWxpbmVKSVQpKSwKLSAgICAgICAgd2l0aEFyaXR5Q2hlY2spOwor
ICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNr
LCBKSVRDb2RlOjpCYXNlbGluZUpJVCkpKTsKICAgICAKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0Up
CiAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4i
LCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKSwgcmVzdWx0
LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENvZGUuY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNs
dWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJS
ZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03NSw1MCArNzYsMzggQEAgRlRMOjpG
b3JPU1JFbnRyeUpJVENvZGUqIEpJVENvZGU6OmZ0bEZvcgogCiBQYXNzUmVmUHRyPEpJVENvZGU+
IEpJVENvZGU6Omhvc3RGdW5jdGlvbihKSVRDb2RlOjpDb2RlUmVmIGNvZGUpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKGNvZGUsIEhvc3RDYWxsVGh1bmspKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IE5hdGl2ZUpJVENvZGUoY29kZSwgSG9zdENhbGxUaHVuaykp
OwogfQogCi1EaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2RlKEpJVFR5cGUgaml0VHlwZSkKK0pJ
VENvZGVXaXRoQ29kZVJlZjo6SklUQ29kZVdpdGhDb2RlUmVmKEpJVFR5cGUgaml0VHlwZSkKICAg
ICA6IEpJVENvZGUoaml0VHlwZSkKIHsKIH0KIAotRGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29k
ZShjb25zdCBKSVRDb2RlOjpDb2RlUmVmIHJlZiwgSklUVHlwZSBqaXRUeXBlKQorSklUQ29kZVdp
dGhDb2RlUmVmOjpKSVRDb2RlV2l0aENvZGVSZWYoQ29kZVJlZiByZWYsIEpJVFR5cGUgaml0VHlw
ZSkKICAgICA6IEpJVENvZGUoaml0VHlwZSkKICAgICAsIG1fcmVmKHJlZikKIHsKIH0KIAotRGly
ZWN0SklUQ29kZTo6fkRpcmVjdEpJVENvZGUoKQorSklUQ29kZVdpdGhDb2RlUmVmOjp+SklUQ29k
ZVdpdGhDb2RlUmVmKCkKIHsKIH0KIAotdm9pZCBEaXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29k
ZVJlZihjb25zdCBKSVRDb2RlOjpDb2RlUmVmIHJlZikKLXsKLSAgICBSRUxFQVNFX0FTU0VSVCgh
bV9yZWYpOwotICAgIG1fcmVmID0gcmVmOwotfQotCi1KSVRDb2RlOjpDb2RlUHRyIERpcmVjdEpJ
VENvZGU6OmFkZHJlc3NGb3JDYWxsKCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3JlZik7Ci0g
ICAgcmV0dXJuIG1fcmVmLmNvZGUoKTsKLX0KLQotdm9pZCogRGlyZWN0SklUQ29kZTo6ZXhlY3V0
YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KQordm9pZCogSklUQ29kZVdpdGhDb2Rl
UmVmOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQobV9yZWYpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPiht
X3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkgKyBvZmZzZXQ7CiB9CiAKLXZvaWQqIERp
cmVjdEpJVENvZGU6OmRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkKK3ZvaWQqIEpJ
VENvZGVXaXRoQ29kZVJlZjo6ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKICAgICBBU1NFUlQob2Zmc2V0IDw9IHNpemUoKSk7
IC8vIHVzZSA8PSBpbnN0ZWFkIG9mIDwgYmVjYXVzZSBpdCBpcyB2YWxpZCB0byBhc2sgZm9yIGFu
IGFkZHJlc3MgYXQgdGhlIGV4Y2x1c2l2ZSBlbmQgb2YgdGhlIGNvZGUuCiAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fcmVmLmNvZGUoKS5kYXRhTG9jYXRpb24oKSkgKyBvZmZz
ZXQ7CiB9CiAKLXVuc2lnbmVkIERpcmVjdEpJVENvZGU6Om9mZnNldE9mKHZvaWQqIHBvaW50ZXJJ
bnRvQ29kZSkKK3Vuc2lnbmVkIEpJVENvZGVXaXRoQ29kZVJlZjo6b2Zmc2V0T2Yodm9pZCogcG9p
bnRlckludG9Db2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKICAgICBpbnRwdHJf
dCByZXN1bHQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVySW50b0NvZGUpIC0g
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpOwpAQCAtMTI2LDE4ICsxMTUsMTA1IEBAIHVuc2lnbmVkIERpcmVjdEpJVENvZGU6Om9mZnNl
dE9mKHZvaWQqIHAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdCk7CiB9
CiAKLXNpemVfdCBEaXJlY3RKSVRDb2RlOjpzaXplKCkKK3NpemVfdCBKSVRDb2RlV2l0aENvZGVS
ZWY6OnNpemUoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKICAgICByZXR1cm4gbV9y
ZWYuc2l6ZSgpOwogfQogCi1ib29sIERpcmVjdEpJVENvZGU6OmNvbnRhaW5zKHZvaWQqIGFkZHJl
c3MpCitib29sIEpJVENvZGVXaXRoQ29kZVJlZjo6Y29udGFpbnModm9pZCogYWRkcmVzcykKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVChtX3JlZik7CiAgICAgcmV0dXJuIG1fcmVmLmV4ZWN1dGFibGVN
ZW1vcnkoKS0+Y29udGFpbnMoYWRkcmVzcyk7CiB9CiAKK0RpcmVjdEpJVENvZGU6OkRpcmVjdEpJ
VENvZGUoSklUVHlwZSBqaXRUeXBlKQorICAgIDogSklUQ29kZVdpdGhDb2RlUmVmKGppdFR5cGUp
Cit7Cit9CisKK0RpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUoCisgICAgSklUQ29kZTo6Q29k
ZVJlZiByZWYsIEpJVENvZGU6OkNvZGVQdHIgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGUgaml0VHlw
ZSkKKyAgICA6IEpJVENvZGVXaXRoQ29kZVJlZihyZWYsIGppdFR5cGUpCisgICAgLCBtX3dpdGhB
cml0eUNoZWNrKHdpdGhBcml0eUNoZWNrKQoreworfQorCitEaXJlY3RKSVRDb2RlOjp+RGlyZWN0
SklUQ29kZSgpCit7Cit9CisKK3ZvaWQgRGlyZWN0SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWYo
SklUQ29kZTo6Q29kZVJlZiByZWYsIEpJVENvZGU6OkNvZGVQdHIgd2l0aEFyaXR5Q2hlY2spCit7
CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmVmKTsKKyAgICBtX3JlZiA9IHJlZjsKKyAgICBtX3dp
dGhBcml0eUNoZWNrID0gd2l0aEFyaXR5Q2hlY2s7Cit9CisKK0RpcmVjdEpJVENvZGU6OlJlZ2lz
dGVyUHJlc2VydmF0aW9uV3JhcHBlcnMqIERpcmVjdEpJVENvZGU6OmVuc3VyZVdyYXBwZXJzKCkK
K3sKKyAgICBpZiAoIW1fd3JhcHBlcnMpCisgICAgICAgIG1fd3JhcHBlcnMgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlcnM+KCk7CisgICAgcmV0dXJuIG1fd3Jh
cHBlcnMuZ2V0KCk7Cit9CisKK0pJVENvZGU6OkNvZGVQdHIgRGlyZWN0SklUQ29kZTo6YWRkcmVz
c0ZvckNhbGwoCisgICAgVk0mIHZtLCBBcml0eUNoZWNrTW9kZSBhcml0eSwgUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sKKyAgICBzd2l0Y2ggKGFyaXR5KSB7CisgICAgY2Fz
ZSBBcml0eUNoZWNrTm90UmVxdWlyZWQ6CisgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7Cisg
ICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKKyAgICAgICAgICAgIHJldHVybiBtX3JlZi5jb2RlKCk7
CisgICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOiB7CisgICAgICAgICAgICBSZWdp
c3RlclByZXNlcnZhdGlvbldyYXBwZXJzKiB3cmFwcGVycyA9IGVuc3VyZVdyYXBwZXJzKCk7Cisg
ICAgICAgICAgICBpZiAoIXdyYXBwZXJzLT53aXRob3V0QXJpdHlDaGVjaykKKyAgICAgICAgICAg
ICAgICB3cmFwcGVycy0+d2l0aG91dEFyaXR5Q2hlY2sgPSBnZW5lcmF0ZVdyYXBwZXIodm0sIG1f
cmVmLmNvZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gd3JhcHBlcnMtPndpdGhvdXRBcml0eUNo
ZWNrLmNvZGUoKTsKKyAgICAgICAgfSB9CisgICAgY2FzZSBNdXN0Q2hlY2tBcml0eToKKyAgICAg
ICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlv
bk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV93aXRoQXJpdHlDaGVj
ayk7CisgICAgICAgICAgICByZXR1cm4gbV93aXRoQXJpdHlDaGVjazsKKyAgICAgICAgY2FzZSBN
dXN0UHJlc2VydmVSZWdpc3RlcnM6IHsKKyAgICAgICAgICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9u
V3JhcHBlcnMqIHdyYXBwZXJzID0gZW5zdXJlV3JhcHBlcnMoKTsKKyAgICAgICAgICAgIGlmICgh
d3JhcHBlcnMtPndpdGhBcml0eUNoZWNrKQorICAgICAgICAgICAgICAgIHdyYXBwZXJzLT53aXRo
QXJpdHlDaGVjayA9IGdlbmVyYXRlV3JhcHBlcih2bSwgbV93aXRoQXJpdHlDaGVjayk7CisgICAg
ICAgICAgICByZXR1cm4gd3JhcHBlcnMtPndpdGhBcml0eUNoZWNrLmNvZGUoKTsKKyAgICAgICAg
fSB9CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IENvZGVQdHIoKTsKK30KKworTmF0aXZlSklUQ29kZTo6TmF0aXZlSklUQ29kZShKSVRUeXBlIGpp
dFR5cGUpCisgICAgOiBKSVRDb2RlV2l0aENvZGVSZWYoaml0VHlwZSkKK3sKK30KKworTmF0aXZl
SklUQ29kZTo6TmF0aXZlSklUQ29kZShDb2RlUmVmIHJlZiwgSklUVHlwZSBqaXRUeXBlKQorICAg
IDogSklUQ29kZVdpdGhDb2RlUmVmKHJlZiwgaml0VHlwZSkKK3sKK30KKworTmF0aXZlSklUQ29k
ZTo6fk5hdGl2ZUpJVENvZGUoKQoreworfQorCit2b2lkIE5hdGl2ZUpJVENvZGU6OmluaXRpYWxp
emVDb2RlUmVmKENvZGVSZWYgcmVmKQoreworICAgIEFTU0VSVCghbV9yZWYpOworICAgIG1fcmVm
ID0gcmVmOworfQorCitKSVRDb2RlOjpDb2RlUHRyIE5hdGl2ZUpJVENvZGU6OmFkZHJlc3NGb3JD
YWxsKFZNJiwgQXJpdHlDaGVja01vZGUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVCghIW1fcmVmKTsKKyAgICByZXR1cm4gbV9yZWYuY29kZSgpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE0ICsyNiwxNCBAQAog
I2lmbmRlZiBKSVRDb2RlX2gKICNkZWZpbmUgSklUQ29kZV9oCiAKLSNpZiBFTkFCTEUoSklUKSB8
fCBFTkFCTEUoTExJTlQpCisjaW5jbHVkZSAiQXJpdHlDaGVja01vZGUuaCIKICNpbmNsdWRlICJD
YWxsRnJhbWUuaCIKICNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKICNpbmNsdWRlICJKSVRTdHVi
cy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJMZWdhY3lQcm9maWxlci5o
IgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgotI2VuZGlmCisjaW5jbHVkZSAi
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNjQs
NyArMTY0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaml0Q29kZS0+aml0VHlwZSgpOwog
ICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoKSA9IDA7Cisg
ICAgdmlydHVhbCBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKFZNJiwgQXJpdHlDaGVja01vZGUsIFJl
Z2lzdGVyUHJlc2VydmF0aW9uTW9kZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCogZXhlY3V0YWJs
ZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSA9IDA7CiAgICAgdm9pZCogZXhlY3V0YWJs
ZUFkZHJlc3MoKSB7IHJldHVybiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KDApOyB9CiAgICAg
dmlydHVhbCB2b2lkKiBkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpID0gMDsKQEAg
LTE4OSwyMSArMTg5LDU4IEBAIHByaXZhdGU6CiAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiB9Owog
Ci1jbGFzcyBEaXJlY3RKSVRDb2RlIDogcHVibGljIEpJVENvZGUgeworY2xhc3MgSklUQ29kZVdp
dGhDb2RlUmVmIDogcHVibGljIEpJVENvZGUgeworcHJvdGVjdGVkOgorICAgIEpJVENvZGVXaXRo
Q29kZVJlZihKSVRUeXBlKTsKKyAgICBKSVRDb2RlV2l0aENvZGVSZWYoQ29kZVJlZiwgSklUVHlw
ZSk7CisKIHB1YmxpYzoKLSAgICBEaXJlY3RKSVRDb2RlKEpJVFR5cGUpOwotICAgIERpcmVjdEpJ
VENvZGUoY29uc3QgQ29kZVJlZiwgSklUVHlwZSk7Ci0gICAgdmlydHVhbCB+RGlyZWN0SklUQ29k
ZSgpOwotICAgIAotICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGVSZWYoQ29kZVJlZiByZWYpOworICAg
IHZpcnR1YWwgfkpJVENvZGVXaXRoQ29kZVJlZigpOwogCi0gICAgdmlydHVhbCBDb2RlUHRyIGFk
ZHJlc3NGb3JDYWxsKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkKiBleGVjdXRhYmxlQWRk
cmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCog
ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSBPVkVSUklERTsKICAgICB2aXJ0dWFs
IHVuc2lnbmVkIG9mZnNldE9mKHZvaWQqIHBvaW50ZXJJbnRvQ29kZSkgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCBzaXplX3Qgc2l6ZSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBjb250YWlu
cyh2b2lkKikgT1ZFUlJJREU7CiAKK3Byb3RlY3RlZDoKKyAgICBDb2RlUmVmIG1fcmVmOworfTsK
KworY2xhc3MgRGlyZWN0SklUQ29kZSA6IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVSZWYgeworcHVi
bGljOgorICAgIERpcmVjdEpJVENvZGUoSklUVHlwZSk7CisgICAgRGlyZWN0SklUQ29kZShDb2Rl
UmVmLCBDb2RlUHRyIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlKTsKKyAgICB2aXJ0dWFsIH5EaXJl
Y3RKSVRDb2RlKCk7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplQ29kZVJlZihDb2RlUmVmIHJl
ZiwgQ29kZVB0ciB3aXRoQXJpdHlDaGVjayk7CisKKyAgICB2aXJ0dWFsIENvZGVQdHIgYWRkcmVz
c0ZvckNhbGwoVk0mLCBBcml0eUNoZWNrTW9kZSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlKSBP
VkVSUklERTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFw
cGVycyB7CisgICAgICAgIENvZGVSZWYgd2l0aG91dEFyaXR5Q2hlY2s7CisgICAgICAgIENvZGVS
ZWYgd2l0aEFyaXR5Q2hlY2s7CisgICAgfTsKKworICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3Jh
cHBlcnMqIGVuc3VyZVdyYXBwZXJzKCk7CisgICAgCisgICAgQ29kZVJlZiBtX3JlZjsKKyAgICBD
b2RlUHRyIG1fd2l0aEFyaXR5Q2hlY2s7CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlZ2lz
dGVyUHJlc2VydmF0aW9uV3JhcHBlcnM+IG1fd3JhcHBlcnM7Cit9OworCitjbGFzcyBOYXRpdmVK
SVRDb2RlIDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7CitwdWJsaWM6CisgICAgTmF0aXZl
SklUQ29kZShKSVRUeXBlKTsKKyAgICBOYXRpdmVKSVRDb2RlKENvZGVSZWYsIEpJVFR5cGUpOwor
ICAgIHZpcnR1YWwgfk5hdGl2ZUpJVENvZGUoKTsKKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemVD
b2RlUmVmKENvZGVSZWYgcmVmKTsKKworICAgIHZpcnR1YWwgQ29kZVB0ciBhZGRyZXNzRm9yQ2Fs
bChWTSYsIEFyaXR5Q2hlY2tNb2RlLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpIE9WRVJSSURF
OworCiBwcml2YXRlOgogICAgIENvZGVSZWYgbV9yZWY7CiB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJQcmVzZXJ2YXRp
b25XcmFwcGVyR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5j
bHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgZ2VuZXJhdGVXcmFwcGVyKFZNJiB2bSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IHRhcmdldCkKK3sKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKyAgICBSZWdpc3RlclNldCBjYWxsZWVT
YXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgCisgICAgLy8g
Tm8gbmVlZCB0byBwcmVzZXJ2ZSBGUCBzaW5jZSB0aGF0IGFsd2F5cyBnZXRzIHByZXNlcnZlZCBh
bnl3YXkuCisgICAgY2FsbGVlU2F2ZXMuY2xlYXIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OworICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mQ2FsbGVlU2F2ZXMgPSBjYWxsZWVTYXZlcy5u
dW1iZXJPZlNldFJlZ2lzdGVycygpOworICAgIAorICAgIC8vIE5lZWQgdG8gcHJlc2VydmUgdGhl
IG9sZCByZXR1cm4gUEMuCisgICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXNUb1NhdmUgPSBudW1i
ZXJPZkNhbGxlZVNhdmVzICsgMTsKKyAgICAKKyAgICAvLyBBbGlnbm1lbnQuIFByZXNlcnZlIHRo
ZSBzYW1lIGFsaWdubWVudCBpbnZhcmlhbnRzIHRoYXQgdGhlIGNhbGxlciBpbXBvc2VkLgorICAg
IHVuc2lnbmVkIG51bWJlck9mTmV3U3RhY2tTbG90cyA9CisgICAgICAgIHJvdW5kVXBUb011bHRp
cGxlT2YobnVtYmVyT2ZWYWx1ZXNUb1NhdmUsIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpOwor
ICAgIAorICAgIEFzc2VtYmx5SGVscGVycyBqaXQ7CisgICAgCisgICAgaml0LnByZXNlcnZlUmV0
dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpyZWdUMSk7CisgICAgaml0LmxvYWQzMigKKyAg
ICAgICAgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgQXNzZW1ibHlIZWxw
ZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAgICAgIChKU1N0YWNrOjpBcmd1bWVu
dENvdW50IC0gSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpICogc2l6ZW9mKFJlZ2lzdGVy
KSArIFBheWxvYWRPZmZzZXQpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMik7CisgICAgCisgICAg
Ly8gUGxhY2UgdGhlIHN0YWNrIHBvaW50ZXIgd2hlcmUgd2Ugd2FudCBpdCB0byBiZS4KKyAgICBz
aXplX3Qgb2Zmc2V0ID0gc2l6ZW9mKFJlZ2lzdGVyKSAqIG51bWJlck9mTmV3U3RhY2tTbG90czsK
KyAgICBqaXQuc3ViUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKG9mZnNldCksIEFz
c2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIAorICAgIC8vIENvbXB1
dGUgdGhlIG51bWJlciBvZiB0aGluZ3Mgd2Ugd2lsbCBiZSBjb3B5aW5nLgorICAgIGppdC5hZGQz
MigKKyAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoCisgICAgICAgICAgICBK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1Np
emUpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMik7CisKKyAgICBBU1NFUlQoIWNhbGxlZVNhdmVz
LmdldChHUFJJbmZvOjpyZWdUNCkpOworICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1Q0KTsKKyAgICAKKyAgICBBc3NlbWJseUhl
bHBlcnM6OkxhYmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICBqaXQuc3ViMzIoQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQubG9hZDY0
KEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUNCwgb2Zmc2V0KSwgR1BSSW5m
bzo6cmVnVDApOworICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdU
NCk7CisgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2l6ZW9m
KFJlZ2lzdGVyKSksIEdQUkluZm86OnJlZ1Q0KTsKKyAgICBqaXQuYnJhbmNoVGVzdDMyKEFzc2Vt
Ymx5SGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6cmVnVDIpLmxpbmtUbygmaml0LCBsb29wKTsK
KworICAgIC8vIEF0IHRoaXMgcG9pbnQgcmVnVDQgKyBvZmZzZXQgcG9pbnRzIHRvIHdoZXJlIHdl
IHNhdmUgdGhpbmdzLgorICAgIHNpemVfdCBjdXJyZW50T2Zmc2V0ID0gb2Zmc2V0OworICAgIGpp
dC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OnJlZ1Q0LCBjdXJyZW50T2Zmc2V0KSk7CisgICAgCisgICAgZm9yIChHUFJSZWcgZ3ByID0g
QXNzZW1ibHlIZWxwZXJzOjpmaXJzdFJlZ2lzdGVyKCk7IGdwciA8PSBBc3NlbWJseUhlbHBlcnM6
Omxhc3RSZWdpc3RlcigpOyBncHIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KGdwciArIDEpKSB7Cisg
ICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgaml0LnN0
b3JlNjQoZ3ByLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDQsIG9mZnNl
dCkpOworICAgIH0KKyAgICAKKyAgICAvLyBBc3N1bWUgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IHNh
dmVkIEZQIHJlZ2lzdGVycy4KKworICAgIEFzc2VtYmx5SGVscGVyczo6Q2FsbCBjYWxsID0gaml0
Lm5lYXJDYWxsKCk7CisgICAgCisgICAgLy8gV2UgbmVlZCB0byBwbGFjZSB0aGUgc3RhY2sgcG9p
bnRlciBiYWNrIHRvIHdoZXJlIHRoZSBjYWxsZXIgdGhvdWdodCB0aGV5IGxlZnQgaXQuCisgICAg
Ly8gQnV0IGFsc28sIGluIG9yZGVyIHRvIHJlY292ZXIgdGhlIHJlZ2lzdGVycywgd2UgbmVlZCB0
byBmaWd1cmUgb3V0IGhvdyBiaWcgdGhlCisgICAgLy8gYXJndW1lbnRzIGFyZWEgaXMuCisgICAg
CisgICAgaml0LmxvYWQzMigKKyAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKAorICAg
ICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAg
ICAgIChKU1N0YWNrOjpBcmd1bWVudENvdW50IC0gSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1Np
emUpICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpLAorICAgICAgICBHUFJJbmZv
OjpyZWdUMik7CisgICAgaml0LmxzaGlmdDMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMy
KDMpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgCisgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW0zMihvZmZzZXQpLCBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAKKyAgICAvLyByZWdUMiBub3cgcG9pbnRzIHRv
IChKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQ
Q1NpemUpCisgICAgLy8gc2hvcnQgb2Ygd2hlcmUgdGhpbmdzIGFyZSBzYXZlZC4KKyAgICBzaXpl
X3QgY3VycmVudE9mZnNldCA9IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBKU1N0YWNr
OjpDYWxsZXJGcmFtZUFuZFBDU2l6ZTsKKyAgICBqaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIGN1cnJlbnRPZmZzZXQpLCBHUFJJbmZvOjpyZWdUMSk7
CisgICAgCisgICAgZm9yIChHUFJSZWcgZ3ByID0gQXNzZW1ibHlIZWxwZXJzOjpmaXJzdFJlZ2lz
dGVyKCk7IGdwciA8PSBBc3NlbWJseUhlbHBlcnM6Omxhc3RSZWdpc3RlcigpOyBncHIgPSBzdGF0
aWNfY2FzdDxHUFJSZWc+KGdwciArIDEpKSB7CisgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gc2l6
ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6cmVnVDQsIG9mZnNldCksIGdwcik7CisgICAgfQorICAgIAorICAgIGppdC5q
dW1wKEdQUkluZm86OnJlZ1QxKTsKKyAgICAKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0s
ICZqaXQpOworICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCh0YXJn
ZXQpKTsKKyAgICAKKyAgICByZXR1cm4gRklOQUxJWkVfREZHX0NPREUobGlua0J1ZmZlciwgKCJS
ZWdpc3RlciBwcmVzZXJ2YXRpb24gd3JhcHBlciBmb3IgJXAiLCB0YXJnZXQuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpOworI2Vsc2UgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgLy8gV2UgZG9uJ3Qgc3Vw
cG9ydCBub24tRlRMIGJ1aWxkcyBmb3IgdHdvIHJlYXNvbnM6CisgICAgLy8gLSBJdCBqdXN0IHNv
IGhhcHBlbnMgdGhhdCBjdXJyZW50bHkgb25seSB0aGUgRlRMIGJvdHRvbXMgb3V0IGluIHRoaXMg
Y29kZS4KKyAgICAvLyAtIFRoZSBjb2RlIGFib3ZlIHVzZXMgNjQtYml0IGluc3RydWN0aW9ucy4g
SXQgZG9lc24ndCBuZWNlc3NhcmlseSBoYXZlIHRvOyBpdCB3b3VsZCBiZQorICAgIC8vICAgZWFz
eSB0byBjaGFuZ2UgaXQgc28gdGhhdCBpdCBkb2Vzbid0LiBCdXQgb2J2aW91c2x5IG1ha2luZyB0
aGF0IGNoYW5nZSB3b3VsZCBiZSBhCisgICAgLy8gICBwcmVyZXF1aXNpdGUgdG8gcmVtb3Zpbmcg
dGhpcyAjaWYuCisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclByZXNlcnZh
dGlvbldyYXBwZXJHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclByZXNlcnZhdGlvbldyYXBw
ZXJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yX2gKKyNkZWZpbmUgUmVnaXN0ZXJQcmVzZXJ2YXRpb25X
cmFwcGVyR2VuZXJhdG9yX2gKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJWTS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyYXRlV3JhcHBlcihWTSYsIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciB0YXJnZXQpOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJM
RShKSVQpCisKKyNlbmRpZiAvLyBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3Jf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE2
MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzODAsMTEgKzEzODAsMTEgQEAgdm9pZCBsaW5rQ2xvc3VyZUNhbGwoRXhlY1N0
YXRlKiBleGVjLCBDYQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgc3R1YkppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdU
MSk7CiAjZW5kaWYKLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQ
UkluZm86Om5vbkFyZ0dQUjIpOworICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVz
cygpKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIAogICAgIC8vIEZJWE1FOiBDU3RhY2sgLSBUaGlu
ayB0aGUgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oKSBpbnN0cnVjdGlvbiBzaG91
bGQgYmUgYSBwb2tlCiAgICAgc3R1YkppdC5icmVha3BvaW50KCk7Ci0gICAgc3R1YkppdC5yZXN0
b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICBz
dHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1QyKTsK
ICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgpOwogICAgIAog
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgY2FsbGVyQ29kZUJsb2Nr
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5j
cHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtH
ZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHUKIH0KIAogc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3IoCi0gICAgVk0qIHZtLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgVk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgLy8gVGhl
IGNhbGxlZSBpcyBpbiByZWdUMCAoZm9yIEpTVkFMVUUzMl82NCwgdGhlIHRhZyBpcyBpbiByZWdU
MSkuCiAgICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjaywgb3IgaW4gdGhl
IGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKQEAgLTE1NSwzMyArMTU1LDM0IEBAIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZvclQKICAgICAvLyB0aGUgREZHIGtub3dz
IHRoYXQgdGhlIHZhbHVlIGlzIGRlZmluaXRlbHkgYSBjZWxsLCBvciBkZWZpbml0ZWx5IGEgZnVu
Y3Rpb24uCiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBqaXQubW92ZShUcnVzdGVkSW1t
NjQoVGFnTWFzayksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAKICAgICBzbG93Q2FzZS5hcHBlbmQo
CiAgICAgICAgIGppdC5icmFuY2hUZXN0NjQoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5v
blplcm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJl
Z1QyKSk7CiAjZWxzZQogICAgIHNsb3dDYXNlLmFwcGVuZCgKICAgICAgICAgaml0LmJyYW5jaDMy
KAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVnVDEsCiAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkp
OwogI2VuZGlmCi0gICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMik7
CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIHNsb3dDYXNl
LmFwcGVuZCgKICAgICAgICAgaml0LmJyYW5jaFB0cigKICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6Tm90RXF1YWwsCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
bm9uQXJnR1BSMiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksCisgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZv
T2Zmc2V0KCkpLAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTRnVu
Y3Rpb246OmluZm8oKSkpKTsKICAgICAKICAgICAvLyBOb3cgd2Uga25vdyB3ZSBoYXZlIGEgSlNG
dW5jdGlvbi4KICAgICAKICAgICBqaXQubG9hZFB0cigKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSks
Ci0gICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjIpOwotICAgIHNsb3dDYXNlLmFwcGVuZCgKLSAg
ICAgICAgaml0LmJyYW5jaDMyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwK
LSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgICAgICBHUFJJ
bmZvOjpub25BcmdHUFIyLCBFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzRm9y
KGtpbmQpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7Cisg
ICAgICAgIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDIsIEV4ZWN1dGFibGVC
YXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kLCByZWdpc3RlcnMpKSwK
KyAgICAgICAgR1BSSW5mbzo6cmVnVDIpOworICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNo
VGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQUkluZm86OnJlZ1QyKSk7CiAgICAgCiAgICAg
Ly8gTm93IHdlIGtub3cgdGhhdCB3ZSBoYXZlIGEgQ29kZUJsb2NrLCBhbmQgd2UncmUgY29tbWl0
dGVkIHRvIG1ha2luZyBhIGZhc3QKICAgICAvLyBjYWxsLgpAQCAtMjEwLDEzICsyMTEsOSBAQCBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUCiAgICAgICAgICAgICBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICNlbmRp
ZgogICAgIAotICAgIGppdC5sb2FkUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6bm9uQXJnR1BSMiwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29kZVdpdGhB
cml0eUNoZWNrRm9yKGtpbmQpKSwKLSAgICAgICAgR1BSSW5mbzo6cmVnVDApOwotICAgIAogICAg
IC8vIE1ha2UgYSB0YWlsIGNhbGwuIFRoaXMgd2lsbCByZXR1cm4gYmFjayB0byBKSVQgY29kZS4K
LSAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgaml0
Lmp1bXAoR1BSSW5mbzo6cmVnVDApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQ
UkluZm86OnJlZ1QyKTsKKyAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMik7CiAKICAgICBzbG93
Q2FzZS5saW5rKCZqaXQpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJpdHlDaGVja01vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Bcml0eUNoZWNrTW9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJpdHlDaGVja01vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQXJpdHlDaGVja01vZGVfaAorI2RlZmluZSBBcml0eUNoZWNrTW9kZV9oCisKK25hbWVz
cGFjZSBKU0MgeworCitlbnVtIEFyaXR5Q2hlY2tNb2RlIHsKKyAgICBBcml0eUNoZWNrTm90UmVx
dWlyZWQsCisgICAgTXVzdENoZWNrQXJpdHkKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gQXJpdHlDaGVja01vZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
OCwxMiArMTE4LDE0IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoQ29kZUIK
ICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICBjYXNlIENvZGVGb3JDYWxsOgogICAgICAgICBtX2pp
dENvZGVGb3JDYWxsID0gZ2VuZXJpY0NvZGVCbG9jay0+aml0Q29kZSgpOwotICAgICAgICBtX2pp
dENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBnZW5lcmljQ29kZUJsb2NrLT5qaXRDb2RlV2l0
aEFyaXR5Q2hlY2soKTsKKyAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0g
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisgICAgICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJp
dHlDaGVja0FuZFByZXNlcnZlUmVncyA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwogICAgICAg
ICBtX251bVBhcmFtZXRlcnNGb3JDYWxsID0gZ2VuZXJpY0NvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CiAgICAgICAg
IG1faml0Q29kZUZvckNvbnN0cnVjdCA9IGdlbmVyaWNDb2RlQmxvY2stPmppdENvZGUoKTsKLSAg
ICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBnZW5lcmljQ29kZUJs
b2NrLT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKKyAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3Ry
dWN0V2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICAgICAgbV9q
aXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3MgPSBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIoKTsKICAgICAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0ID0g
Z2VuZXJpY0NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICBicmVhazsKICAgICB9
CkBAIC0xMzMsNyArMTM1LDYgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShD
b2RlQgogICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9n
cmFtRXhlY3V0YWJsZSo+KHRoaXMpOwogICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBzdGF0aWNfY2FzdDxQcm9ncmFtQ29kZUJsb2NrKj4oZ2VuZXJpY0NvZGVCbG9jayk7CiAg
ICAgICAgIAotICAgICAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZVdpdGhBcml0eUNoZWNr
KCkpOwogICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CiAgICAgICAgIAogICAg
ICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX3Byb2dyYW1Db2RlQmxvY2s7CkBAIC0x
NDUsNyArMTQ2LDYgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShDb2RlQgog
ICAgICAgICBFdmFsRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxFdmFsRXhlY3V0YWJs
ZSo+KHRoaXMpOwogICAgICAgICBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2Fz
dDxFdmFsQ29kZUJsb2NrKj4oZ2VuZXJpY0NvZGVCbG9jayk7CiAgICAgICAgIAotICAgICAgICBB
U1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZVdpdGhBcml0eUNoZWNrKCkpOwogICAgICAgICBBU1NF
UlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CiAgICAgICAgIAogICAgICAgICBvbGRDb2RlQmxvY2sg
PSBleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDcgQEAKICNpZm5kZWYgRXhlY3V0YWJsZV9oCiAjZGVmaW5lIEV4ZWN1dGFibGVfaAogCisj
aW5jbHVkZSAiQXJpdHlDaGVja01vZGUuaCIKICNpbmNsdWRlICJDYWxsRGF0YS5oIgogI2luY2x1
ZGUgIkNvZGVCbG9ja0hhc2guaCIKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgi
CkBAIC0zNiw2ICszNyw3IEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJK
SVRDb2RlLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJSZWdpc3Rl
clByZXNlcnZhdGlvbk1vZGUuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKICNpbmNsdWRl
ICJTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKQEAgLTE0NCwz
NyArMTQ2LDk0IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0
cnVjdCk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCk7CiAg
ICAgfQotCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGdlbmVyYXRlZEpJVENvZGVGb3JDYWxs
V2l0aEFyaXR5Q2hlY2soKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1faml0Q29kZUZvckNhbGwp
OwotICAgICAgICBBU1NFUlQobV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKLSAgICAg
ICAgcmV0dXJuIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjazsKLSAgICB9Ci0KLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgZ2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdFdpdGhBcml0
eUNoZWNrKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2ppdENvZGVGb3JDb25zdHJ1Y3QpOwot
ICAgICAgICBBU1NFUlQobV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2spOwotICAg
ICAgICByZXR1cm4gbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2s7Ci0gICAgfQot
ICAgICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZ2VuZXJhdGVkSklUQ29kZVdpdGhB
cml0eUNoZWNrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLSAgICB7Ci0gICAgICAg
IGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJ
VENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2soKTsKLSAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29k
ZUZvckNvbnN0cnVjdCk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3Ry
dWN0V2l0aEFyaXR5Q2hlY2soKTsKLSAgICB9Ci0gICAgICAgIAotICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBlbnRyeXBvaW50Rm9yKAor
ICAgICAgICBWTSYgdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgQXJpdHlDaGVja01v
ZGUgYXJpdHksIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiAgICAgewotICAg
ICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7
Ci0gICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgICAgICByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVCYXNlLCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RX
aXRoQXJpdHlDaGVjayk7CisgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBjYWNoZWQgcmVz
dWx0LiBXZSBvbmx5IGhhdmUgaXQgZm9yIGFyaXR5IGNoZWNrIGJlY2F1c2Ugd2UgdXNlIHRoZQor
ICAgICAgICAvLyBuby1hcml0eSBlbnRyeXBvaW50IGluIG5vbi12aXJ0dWFsIGNhbGxzLCB3aGlj
aCB3aWxsICJjYWNoZSIgdGhpcyB2YWx1ZSBkaXJlY3RseSBpbgorICAgICAgICAvLyBtYWNoaW5l
IGNvZGUuCisgICAgICAgIGlmIChhcml0eSA9PSBNdXN0Q2hlY2tBcml0eSkgeworICAgICAgICAg
ICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAg
ICAgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgICAgICAgICAgY2FzZSBSZWdp
c3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgICAgICAgICBpZiAoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9IG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVj
aykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJz
OgorICAgICAgICAgICAgICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9
IG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVja0FuZFByZXNlcnZlUmVncykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVy
cykgeworICAgICAgICAgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJl
ZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQg
PSBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAgICAgICAg
ICBpZiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9IG1faml0Q29kZUZvckNvbnN0cnVj
dFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdzKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPQorICAgICAgICAgICAgZ2VuZXJh
dGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwodm0sIGFyaXR5LCByZWdpc3RlcnMp
OworICAgICAgICBpZiAoYXJpdHkgPT0gTXVzdENoZWNrQXJpdHkpIHsKKyAgICAgICAgICAgIC8v
IENhY2hlIHRoZSByZXN1bHQ7IHRoaXMgaXMgbmVjZXNzYXJ5IGZvciB0aGUgSklUJ3MgdmlydHVh
bCBjYWxsIG9wdGltaXphdGlvbnMuCisgICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAg
ICAgICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAgICAgICAgICAgc3dpdGNoIChyZWdpc3Rl
cnMpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWly
ZWQ6CisgICAgICAgICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9
IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICAgICAgICAgIG1faml0Q29kZUZv
ckNhbGxXaXRoQXJpdHlDaGVja0FuZFByZXNlcnZlUmVncyA9IHJlc3VsdDsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICAgICAgICAgIHN3
aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgICAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZh
dGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1
Y3RXaXRoQXJpdHlDaGVjayA9IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICAg
ICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdz
ID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
SklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKAorICAgICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgICAg
IHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihF
eGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAg
ICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAgICAgIHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlD
aGVja0FuZFByZXNlcnZlUmVncyk7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgQ29kZUZv
ckNvbnN0cnVjdDoKKyAgICAgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgICAg
ICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ29uc3Ry
dWN0V2l0aEFyaXR5Q2hlY2spOworICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3Rl
cnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlQmFz
ZSwgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3MpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICAgICAgCisgICAgCiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnNGb3IoQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBraW5kKQogICAgIHsKICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCkBAIC0y
MTEsMjEgKzI3MCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE5vSW50cmluc2ljOwogICAg
IH0KICAgICAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGhvc3RDb2RlRW50cnlGb3Io
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdlbmVy
YXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKCk7Ci0gICAgfQotCi0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGpzQ29kZUVudHJ5Rm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5h
ZGRyZXNzRm9yQ2FsbCgpOwotICAgIH0KLQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBqc0Nv
ZGVXaXRoQXJpdHlDaGVja0VudHJ5Rm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2lu
ZCk7Ci0gICAgfQotCiBwcm90ZWN0ZWQ6CiAgICAgRXhlY3V0YWJsZUJhc2UqIG1fcHJldjsKICAg
ICBFeGVjdXRhYmxlQmFzZSogbV9uZXh0OwpAQCAtMjM0LDYgKzI3OCw4IEBAIHByb3RlY3RlZDoK
ICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlRm9yQ29uc3RydWN0OwogICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2s7CiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2tBbmRQ
cmVzZXJ2ZVJlZ3M7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZUZvckNvbnN0
cnVjdFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdzOwogfTsKIAogY2xhc3MgTmF0aXZlRXhl
Y3V0YWJsZSA6IHB1YmxpYyBFeGVjdXRhYmxlQmFzZSB7CkBAIC0yODgsOCArMzM0LDYgQEAgcHJv
dGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBQYXNzUmVmUHRyPEpJVENv
ZGU+IGNhbGxUaHVuaywgUGFzc1JlZlB0cjxKSVRDb2RlPiBjb25zdHJ1Y3RUaHVuaywgSW50cmlu
c2ljIGludHJpbnNpYykKICAgICB7CiAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
LSAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gY2FsbFRodW5rID8gY2Fs
bFRodW5rLT5hZGRyZXNzRm9yQ2FsbCgpIDogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7Ci0gICAg
ICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gY29uc3RydWN0VGh1bmsg
PyBjb25zdHJ1Y3RUaHVuay0+YWRkcmVzc0ZvckNhbGwoKSA6IE1hY3JvQXNzZW1ibGVyQ29kZVB0
cigpOwogICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gY2FsbFRodW5rOwogICAgICAgICBtX2pp
dENvZGVGb3JDb25zdHJ1Y3QgPSBjb25zdHJ1Y3RUaHVuazsKICAgICAgICAgbV9pbnRyaW5zaWMg
PSBpbnRyaW5zaWM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdpc3Rl
clByZXNlcnZhdGlvbk1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdpc3RlclByZXNlcnZhdGlvbk1vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGVfaAorI2Rl
ZmluZSBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGVfaAorCituYW1lc3BhY2UgSlNDIHsKKworZW51
bSBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgeworICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90
UmVxdWlyZWQsCisgICAgTXVzdFByZXNlcnZlUmVnaXN0ZXJzCit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZV9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219497</attachid>
            <date>2013-12-17 20:02:00 -0800</date>
            <delta_ts>2013-12-17 20:25:18 -0800</delta_ts>
            <desc>even more...</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>92930</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNjY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDEzLTEyLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBiZSBhYmxlIHRvIGRvIGNhbGwgSUNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjU4MTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OkNhbGxMaW5rSW5mbyk6Cisg
ICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6bGluayk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICog
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6
CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmZpeEZ1
bmN0aW9uQmFzZWRPblN0YWNrTWFwcyk6CisgICAgICAgICogZnRsL0ZUTElubGluZUNhY2hlU2l6
ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mQ2FsbCk6CisgICAgICAgICogZnRsL0ZU
TElubGluZUNhY2hlU2l6ZS5oOgorICAgICAgICAqIGZ0bC9GVExKU0NhbGwuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OkpTQ2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6
SlNDYWxsOjplbWl0KToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OmxpbmspOgorICAgICAg
ICAqIGZ0bC9GVExKU0NhbGwuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6SlNDYWxsOjpz
dGFja21hcElEKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6Om9wZXJhdG9yPCk6CisgICAg
ICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdCk6CisgICAgICAgICogZnRsL0ZUTFN0
YXRlLmg6CisKIDIwMTMtMTItMTYgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIE1lcmdlZCByMTYwNjY1IGZyb20gdHJ1bmsuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTI2Nyw2ICsyNjcsMTIgQEAKIAkJMEY2NjZFQ0QxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3Vy
cmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQ0IxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVj
dGlvbkZvclZhbGlkYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2Vu
Y3lMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZDMTRERjNGMTYw
MEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkIxQ0I1MTg1RkM5
RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQjMxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5j
cHAgKi87IH07CisJCTBGNkIxQ0I2MTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0I0MTg1RkM5
RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjZCMUNCOTE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlDaGVj
a01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NkIxQ0I3MTg2MTI0NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNrTW9kZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkIxQ0JBMTg2MTI0NEMwMDg0
NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0I4MTg2MTI0NEMwMDg0NUQ5NyAvKiBSZWdp
c3RlclByZXNlcnZhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjZCMUNCRDE4NjEyNDZBMDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0JCMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclBy
ZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwICovOyB9OworCQkwRjZCMUNCRTE4NjEyNDZB
MDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCQzE4NjEyNDZB
MDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3MDI1QTkxNzE0
QjBGQTAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcwMjVBNzE3MTRCMEY4MDAzODJD
MEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCAqLzsgfTsKIAkJMEY3MDI1QUExNzE0
QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MDI1QTgxNzE0QjBGODAwMzgyQzBF
IC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2Fy
ZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLzsgfTsKQEAgLTE1NzksNiArMTU4NSwxMiBAQAogCQkw
RjY2NkVDQjE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBo
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Jlc3VycmVjdGlvbkZv
clZhbGlkYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRp
b25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYzRjEz
MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdBZGphY2VuY3lMaXN0Lmg7IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlzdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQg
LyogREZHRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7
IHBhdGggPSBkZmcvREZHRWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZC
MUNCMzE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbC5jcHA7IHBhdGggPSBmdGwvRlRMSlNDYWxsLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3
IC8qIEZUTEpTQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0Nh
bGwuaDsgcGF0aCA9IGZ0bC9GVExKU0NhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2QjFDQjcxODYxMjQ0QzAwODQ1RDk3IC8qIEFyaXR5Q2hlY2tNb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyaXR5Q2hlY2tNb2RlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNkIxQ0I4MTg2MTI0NEMwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNl
cnZhdGlvbk1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNkIxQ0JC
MTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVnaXN0ZXJQcmVzZXJ2
YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY2QjFDQkMxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdl
bmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWdpc3RlclByZXNl
cnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY3MDI1QTcxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzE0Q0ExMTZFQTkyRUQw
MEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3Bw
OyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjg1OCw2ICsyODcwLDggQEAKIAkJCQkwRkVBMEEwMzE3MDUx
M0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5oICovLAogCQkJCUE3OEE5NzdEMTc5NzM4RDUwMDlE
Rjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuY3BwICovLAogCQkJCUE3OEE5NzdFMTc5NzM4RDUwMDlE
Rjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuaCAqLywKKwkJCQkwRjZCMUNCMzE4NUZDOUU5MDA4NDVE
OTcgLyogRlRMSlNDYWxsLmNwcCAqLywKKwkJCQkwRjZCMUNCNDE4NUZDOUU5MDA4NDVEOTcgLyog
RlRMSlNDYWxsLmggKi8sCiAJCQkJMEY4RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsu
Y3BwICovLAogCQkJCTBGOEYyQjk0MTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmggKi8sCiAJ
CQkJMEZDRUZBREQxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCAqLywKQEAgLTMw
MzIsNiArMzA0Niw4IEBACiAJCQkJMEZDNzEyRTExN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZH
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8sCiAJCQkJQTc2RjU0QTIxM0IyOEFBQjAw
RUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovLAogCQkJCUE3NkM1MTc0MTE4Mjc0OEQwMDcx
NUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovLAorCQkJCTBGNkIxQ0JCMTg2MTI0NkEwMDg0NUQ5
NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwICovLAorCQkJCTBG
NkIxQ0JDMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5l
cmF0b3IuaCAqLywKIAkJCQkwRkMzMTQxNDE4MTQ2RDcwMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQu
Y3BwICovLAogCQkJCTBGQzMxNDEwMTgxNDU1OTEwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5oICov
LAogCQkJCTBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCAqLywKQEAgLTMz
NjksNiArMzM4NSw3IEBACiAJCQkJQTc2MTQwQzgxODI5ODJDQjAwNzUwNjI0IC8qIEFyZ3VtZW50
c0l0ZXJhdG9yQ29uc3RydWN0b3IuaCAqLywKIAkJCQlBNzYxNDBDOTE4Mjk4MkNCMDA3NTA2MjQg
LyogQXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGUuY3BwICovLAogCQkJCUE3NjE0MENBMTgyOTgy
Q0IwMDc1MDYyNCAvKiBBcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZS5oICovLAorCQkJCTBGNkIx
Q0I3MTg2MTI0NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNrTW9kZS5oICovLAogCQkJCUE3QThBRjI1
MTdBREI1RjIwMDVBQjE3NCAvKiBBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJQTdBOEFGMjYxN0FE
QjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggKi8sCiAJCQkJMEZGQzk5RDIxODRFRTMxODAw
OUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgKi8sCkBAIC0zNjY3
LDYgKzM2ODQsNyBAQAogCQkJCUY2OTJBODdDMDI1NTU5N0QwMUZGNjBGNyAvKiBSZWdFeHBPYmpl
Y3QuaCAqLywKIAkJCQlCQ0QyMDJCRjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBl
LmNwcCAqLywKIAkJCQlCQ0QyMDJDMDBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBl
LmggKi8sCisJCQkJMEY2QjFDQjgxODYxMjQ0QzAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTW9kZS5oICovLAogCQkJCTBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAq
LywKIAkJCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAq
LywKIAkJCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8s
CkBAIC00Mzk1LDYgKzQ0MTMsNyBAQAogCQkJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBE
RkdFeGl0UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzUxNzk3MzhCODAwOURG
NzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3Nzcx
Nzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2
QjFDQjYxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQkRDMTYxNTFDNUQ0RjAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGOUQzMzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5o
IGluIEhlYWRlcnMgKi8sCkBAIC00NDMwLDYgKzQ0NDksNyBAQAogCQkJCTBGRDhBMzI2MTdENTFG
NTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRkM5OUQxMTg0RUM4QUQwMDlDMTBBQiAvKiBDb25zdGFudE1vZGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGNkIxQ0JBMTg2MTI0NEMwMDg0NUQ5NyAvKiBSZWdpc3RlclBy
ZXNlcnZhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5
MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RUQxODIz
NDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRp
b25JbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTQ1ODgsNiArNDYwOCw3IEBACiAJCQkJMEY0Njgw
ODIxNEJBNTcyRDAwQkZFMjcyIC8qIEpJVEV4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQjE0RTFGMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZDQzg1QTEwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGluZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGNkIxQ0JFMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3Rl
clByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRF
NTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzkwREQ3MDE4MkY0OTk3MDA1ODg4MDcgLyogSlNTZXRJdGVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyNEU1NEUxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbldyYXBwZXJz
LmggaW4gSGVhZGVycyAqLywKQEAgLTQ2MDMsNiArNDYyNCw3IEBACiAJCQkJMEZDNzEyRTMxN0NE
ODc5MzAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJy
aWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNB
Y3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjZCMUNCOTE4NjEyNDRDMDA4NDVEOTcg
LyogQXJpdHlDaGVja01vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MDQ4MDEzMTAyMUExRDkw
MDhFN0YwMSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJDRjM5
QzIxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc2MTQwRDIxODI5ODJDQjAwNzUwNjI0IC8qIEpTQXJndW1lbnRzSXRlcmF0b3IuaCBp
biBIZWFkZXJzICovLApAQCAtNTQ5NSw2ICs1NTE3LDcgQEAKIAkJCQk4Njg4MEY0RDE0MzUzQjIx
MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
N0Q4OUNGRjE3QTBCOENDMDA3NzNBRDggLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGOUZCNEY0MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91
dFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNkIxQ0JEMTg2MTI0NkEwMDg0NUQ5NyAv
KiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZDMDk3QTExNDZCMjhDQTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmpl
Y3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyOTE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC01NTUxLDYgKzU1NzQsNyBAQAogCQkJCTBGMjVGMUIzMTgxNjM1RjMwMDUyMkYzOSAv
KiBGVExTbG93UGF0aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDMzOUExODAz
QURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVB
MEExNjE3MDZCQjkwMDBCQjcyMkMgLyogRlRMU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEY2QjFDQjUxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjIzNUJFMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMjM1QkUzMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDQjEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25D
b25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNp
b24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDkgKzMwOSwxMCBAQCBwdWJsaWM6
CiAgICAgdm9pZCogZGF0YUxvY2F0aW9uKCkgY29uc3QgeyBBU1NFUlRfVkFMSURfQ09ERV9QT0lO
VEVSKG1fdmFsdWUpOyByZXR1cm4gbV92YWx1ZTsgfQogI2VuZGlmCiAKLSAgICBib29sIG9wZXJh
dG9yISgpIGNvbnN0CisgICAgdHlwZWRlZiB2b2lkKiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjoq
VW5zcGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSoo
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3ZhbHVlOworICAgICAgICByZXR1cm4g
ISFtX3ZhbHVlID8gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oMSkgOiAw
OwogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyJiBvdGhlcikgY29uc3QKQEAgLTQzNCw3ICs0MzUsMTEgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gSlNDOjp0cnlUb0Rpc2Fzc2VtYmxlKG1fY29kZVB0ciwgc2l6ZSgpLCBwcmVmaXgs
IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIW1fY29kZVB0cjsgfQorICAgIHR5cGVkZWYgdm9pZCogKE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOworICAgIG9wZXJhdG9yIFVuc3BlY2lm
aWVkQm9vbFR5cGUqKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhIW1fY29kZVB0ciA/
IHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KDEpIDogMDsKKyAgICB9CiAg
ICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxNCArMzgsNyBAQCB2b2lkIENhbGxMaW5r
SW5mbzo6dW5saW5rKFZNJiB2bSwgUmVwYXRjCiAgICAgQVNTRVJUKGlzTGlua2VkKCkpOwogICAg
IAogICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRo
UGF0Y2goUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIo
aG90UGF0aEJlZ2luKSwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KGNh
bGxlZUdQUiksIDApOwotICAgIGlmIChpc0RGRykgewotI2lmIEVOQUJMRShERkdfSklUKQotICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIChjYWxsVHlwZSA9
PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcikg
OiB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpKS5jb2RlKCkpOwotI2Vsc2UK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgIH0gZWxz
ZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIGNhbGxU
eXBlID09IENvbnN0cnVjdCA/IHZtLmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRodW5rR2VuZXJh
dG9yKS5jb2RlKCkgOiB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUo
KSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVybkxvY2F0aW9uLCBjYWxsVHlw
ZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRv
cikuY29kZSgpIDogdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkp
OwogICAgIGhhc1NlZW5TaG91bGRSZXBhdGNoID0gZmFsc2U7CiAgICAgY2FsbGVlLmNsZWFyKCk7
CiAgICAgc3R1Yi5jbGVhcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1
Niw2IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBwdWJsaWMgQmFzaWNSYXdTZW4KICAgICAgICAg
CiAgICAgQ2FsbExpbmtJbmZvKCkKICAgICAgICAgOiBoYXNTZWVuU2hvdWxkUmVwYXRjaChmYWxz
ZSkKLSAgICAgICAgLCBpc0RGRyhmYWxzZSkKICAgICAgICAgLCBoYXNTZWVuQ2xvc3VyZShmYWxz
ZSkKICAgICAgICAgLCBjYWxsVHlwZShOb25lKQogICAgIHsKQEAgLTgwLDcgKzc5LDYgQEAgc3Ry
dWN0IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgIFdyaXRlQmFycmllcjxK
U0Z1bmN0aW9uPiBsYXN0U2VlbkNhbGxlZTsKICAgICBSZWZQdHI8Q2xvc3VyZUNhbGxTdHViUm91
dGluZT4gc3R1YjsKICAgICBib29sIGhhc1NlZW5TaG91bGRSZXBhdGNoIDogMTsKLSAgICBib29s
IGlzREZHIDogMTsKICAgICBib29sIGhhc1NlZW5DbG9zdXJlIDogMTsKICAgICB1bnNpZ25lZCBj
YWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAgICAgdW5zaWduZWQgY2FsbGVlR1BSIDogODsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9u
IDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMjU3LDE3ICsyNTcsMTUgQEAgcHVibGljOgogICAgIC8vIEV4YWN0
bHkgZXF1aXZhbGVudCB0byBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5uZXdSZXBsYWNl
bWVudENvZGVCbG9ja0Zvcihjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpKQogICAgIFBh
c3NSZWZQdHI8Q29kZUJsb2NrPiBuZXdSZXBsYWNlbWVudCgpOwogICAgIAotICAgIHZvaWQgc2V0
SklUQ29kZShQYXNzUmVmUHRyPEpJVENvZGU+IGNvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBj
b2RlV2l0aEFyaXR5Q2hlY2spCisgICAgdm9pZCBzZXRKSVRDb2RlKFBhc3NSZWZQdHI8SklUQ29k
ZT4gY29kZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2hlYXAtPmlzRGVmZXJyZWQoKSk7CiAg
ICAgICAgIG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KGNvZGUtPnNpemUoKSk7CiAgICAg
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgaXMgcHJvYmFibHkgbm90IG5lZWRlZCBiZWNhdXNlIHRo
ZSBsb2NrIHdpbGwgYWxzbyBkbyBzb21ldGhpbmcgc2ltaWxhciwgYnV0IGl0J3MgZ29vZCB0byBi
ZSBwYXJhbm9pZC4KICAgICAgICAgbV9qaXRDb2RlID0gY29kZTsKLSAgICAgICAgbV9qaXRDb2Rl
V2l0aEFyaXR5Q2hlY2sgPSBjb2RlV2l0aEFyaXR5Q2hlY2s7CiAgICAgfQogICAgIFBhc3NSZWZQ
dHI8SklUQ29kZT4gaml0Q29kZSgpIHsgcmV0dXJuIG1faml0Q29kZTsgfQotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBqaXRDb2RlV2l0aEFyaXR5Q2hlY2soKSB7IHJldHVybiBtX2ppdENvZGVX
aXRoQXJpdHlDaGVjazsgfQogICAgIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSgpIGNvbnN0CiAg
ICAgewogICAgICAgICBKSVRDb2RlKiBqaXRDb2RlID0gbV9qaXRDb2RlLmdldCgpOwpAQCAtMTA2
Niw3ICsxMDY0LDYgQEAgcHJpdmF0ZToKICAgICBTZW50aW5lbExpbmtlZExpc3Q8TExJbnRDYWxs
TGlua0luZm8sIEJhc2ljUmF3U2VudGluZWxOb2RlPExMSW50Q2FsbExpbmtJbmZvPj4gbV9pbmNv
bWluZ0xMSW50Q2FsbHM7CiAjZW5kaWYKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOwot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVXaXRoQXJpdHlDaGVjazsKICNpZiBF
TkFCTEUoSklUKQogICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7CiAgICAg
VmVjdG9yPEJ5VmFsSW5mbz4gbV9ieVZhbEluZm9zOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzAsNyArMjMwLDYgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5r
QgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2pzQ2FsbHMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhp
KTsKICAgICAgICAgaW5mby5jYWxsVHlwZSA9IG1fanNDYWxsc1tpXS5tX2NhbGxUeXBlOwotICAg
ICAgICBpbmZvLmlzREZHID0gdHJ1ZTsKICAgICAgICAgaW5mby5jb2RlT3JpZ2luID0gbV9qc0Nh
bGxzW2ldLm1fY29kZU9yaWdpbjsKICAgICAgICAgbGlua0J1ZmZlci5saW5rKG1fanNDYWxsc1tp
XS5tX3Nsb3dDYWxsLCBGdW5jdGlvblB0cigobV92bS0+Z2V0Q1RJU3R1YihpbmZvLmNhbGxUeXBl
ID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0ID8gbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9y
IDogbGlua0NhbGxUaHVua0dlbmVyYXRvcikpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7
CiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGwobV9qc0NhbGxzW2ldLm1fc2xvd0NhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkocmV2aXNpb24gMTYwNjIyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw4ICs0OCw4IEBAIEpJVEZpbmFsaXplcjo6fkpJVEZpbmFsaXplcigpCiAKIGJv
b2wgSklURmluYWxpemVyOjpmaW5hbGl6ZSgpCiB7Ci0gICAgbV9qaXRDb2RlLT5pbml0aWFsaXpl
Q29kZVJlZihtX2xpbmtCdWZmZXItPmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpKTsK
LSAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZSwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyKCkpOworICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYoCisgICAgICAg
IG1fbGlua0J1ZmZlci0+ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCksIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cigpKTsKICAgICAKICAgICBmaW5hbGl6ZUNvbW1vbigpOwogICAgIApAQCAt
NTksOCArNTksOCBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemUoKQogYm9vbCBKSVRGaW5h
bGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3dpdGhB
cml0eUNoZWNrLmlzRW1wdHlWYWx1ZSgpKTsKLSAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2Rl
UmVmKG1fbGlua0J1ZmZlci0+ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCkpOwotICAg
IG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLCBtX3dpdGhBcml0eUNoZWNr
KTsKKyAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmKAorICAgICAgICBtX2xpbmtCdWZm
ZXItPmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpLCBtX3dpdGhBcml0eUNoZWNrKTsK
ICAgICAKICAgICBmaW5hbGl6ZUNvbW1vbigpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjA2
MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MDQsMTEgKzcwNCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKIAogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICBK
SVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xv
d1BhdGg7CiAKICAgICBtX2ppdC5lbWl0U3RvcmVDb2RlT3JpZ2luKG5vZGUtPmNvZGVPcmlnaW4p
OwogICAgIAotICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKSk7CisgICAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQ
dHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRv
Q2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKTsKIAogICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZXN1bHRHUFIpOwogICAgIG1faml0LnN0b3JlNjQocmVz
dWx0R1BSLCBjYWxsZWVGcmFtZVNsb3QoSlNTdGFjazo6U2NvcGVDaGFpbikpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24g
MTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDggQEAgaW5saW5lIENhcGFiaWxpdHlMZXZl
bCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgRnVuY3Rpb25SZWVudHJ5V2F0Y2hwb2ludDoK
ICAgICBjYXNlIFZhcmlhYmxlV2F0Y2hwb2ludDoKICAgICBjYXNlIE5vdGlmeVdyaXRlOgorICAg
IGNhc2UgQ2FsbDoKKyAgICBjYXNlIENvbnN0cnVjdDoKICAgICAgICAgLy8gVGhlc2UgYXJlIE9L
LgogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldEJ5SWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OSw2
ICsyOTksNDQgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAg
ICAgICB9CiAgICAgfQogICAgIAorICAgIC8vIEhhbmRsaW5nIEpTIGNhbGxzIGlzIHdlaXJkOiB3
ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIHNvcnQgdGhlbSBieSB0aGUgUEMgaW4gTExWTQorICAg
IC8vIGdlbmVyYXRlZCBjb2RlLiBUaGF0IGltcGxpZXMgZmlyc3QgcHJ1bmluZyB0aGUgb25lcyB0
aGF0IExMVk0gZGlkbid0IGdlbmVyYXRlLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
dGF0ZS5qc0NhbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEpTQ2FsbCYgY2FsbCA9IHN0YXRl
LmpzQ2FsbHNbaV07CisgICAgICAgIAorICAgICAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6aXRl
cmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGNhbGwuc3RhY2ttYXBJRCgpKTsKKyAgICAgICAg
aWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CisgICAgICAgICAgICAvLyBJdCB3YXMgb3B0
aW1pemVkIG91dC4gUHJ1bmUgaXQuCisgICAgICAgICAgICBjYWxsID0gc3RhdGUuanNDYWxscy5s
YXN0KCk7CisgICAgICAgICAgICBzdGF0ZS5qc0NhbGxzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAg
ICAgIGktLTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBjYWxsLm1faW5zdHJ1Y3Rpb25PZmZzZXQgPSBpdGVyLT52YWx1ZS5pbnN0cnVjdGlvbk9m
ZnNldDsKKyAgICB9CisgICAgCisgICAgc3RkOjpzb3J0KHN0YXRlLmpzQ2FsbHMuYmVnaW4oKSwg
c3RhdGUuanNDYWxscy5lbmQoKSk7CisgICAgCisgICAgY29kZUJsb2NrLT5zZXROdW1iZXJPZkNh
bGxMaW5rSW5mb3Moc3RhdGUuanNDYWxscy5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9
IHN0YXRlLmpzQ2FsbHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIEpTQ2FsbCYgY2FsbCA9IHN0
YXRlLmpzQ2FsbHNbaV07CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzIGZhc3RQYXRoSklUKCZ2bSwg
Y29kZUJsb2NrKTsKKyAgICAgICAgY2FsbC5lbWl0KGZhc3RQYXRoSklUKTsKKyAgICAgICAgCisg
ICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVu
Y3Rpb24pICsgY2FsbC5tX2luc3RydWN0aW9uT2Zmc2V0OworICAgICAgICAKKyAgICAgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKHZtLCAmZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJQywgc2l6ZU9mQ2Fs
bCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZlci5pc1ZhbGlkKCkpOworICAg
ICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFzc2VtYmxlclR5cGVfVDo6ZmlsbE5vcHMo
CisgICAgICAgICAgICBzdGFydE9mSUMgKyBsaW5rQnVmZmVyLnNpemUoKSwgc2l6ZU9mQ2FsbCgp
IC0gbGlua0J1ZmZlci5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgQ2FsbExpbmtJbmZvJiBp
bmZvID0gY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CisgICAgICAgIGNhbGwubGluayh2bSwg
bGlua0J1ZmZlciwgaW5mbyk7CisgICAgfQorICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihjb2RlQmxvY2spOwogICAgIAogICAgIGZvciAodW5zaWduZWQgZXhpdEluZGV4ID0g
aml0Q29kZS0+b3NyRXhpdC5zaXplKCk7IGV4aXRJbmRleC0tOykgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkocmV2aXNpb24g
MTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0NywxMSBAQCBzaXplX3Qgc2l6ZU9mUHV0QnlJ
ZCgpCiAgICAgcmV0dXJuIDMyOwogfQogCitzaXplX3Qgc2l6ZU9mQ2FsbCgpCit7CisgICAgcmV0
dXJuIDQzOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2Fj
aGVTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxp
bmVDYWNoZVNpemUuaAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIHNpemVfdCBzaXplT2ZHZXRCeUlk
KCk7CiBzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpOworc2l6ZV90IHNpemVPZkNhbGwoKTsKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkocmV2aXNpb24gMTYwNjIyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDkgKzQzLDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
ewogICAgIG1hY3JvKGZyYW1lQWRkcmVzcywgImxsdm0uZnJhbWVhZGRyZXNzIiwgZnVuY3Rpb25U
eXBlKHBvaW50ZXJUeXBlKGludDgpLCBpbnQzMikpIFwKICAgICBtYWNybyhtdWxXaXRoT3ZlcmZs
b3czMiwgImxsdm0uc211bC53aXRoLm92ZXJmbG93LmkzMiIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RU
eXBlKG1fY29udGV4dCwgaW50MzIsIGJvb2xlYW4pLCBpbnQzMiwgaW50MzIpKSBcCiAgICAgbWFj
cm8obXVsV2l0aE92ZXJmbG93NjQsICJsbHZtLnNtdWwud2l0aC5vdmVyZmxvdy5pNjQiLCBmdW5j
dGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDY0LCBib29sZWFuKSwgaW50NjQsIGlu
dDY0KSkgXAotICAgIG1hY3JvKHBhdGNocG9pbnRJbnQ2NCwgImxsdm0uZXhwZXJpbWVudGFsLnBh
dGNocG9pbnQuaTY0IiwgZnVuY3Rpb25UeXBlKGludDY0LCBpbnQzMiwgaW50MzIsIHJlZjgsIGlu
dDMyLCBWYXJpYWRpYykpIFwKLSAgICBtYWNybyhwYXRjaHBvaW50Vm9pZCwgImxsdm0uZXhwZXJp
bWVudGFsLnBhdGNocG9pbnQudm9pZCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50MzIsIGlu
dDMyLCByZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBcCi0gICAgbWFjcm8oc3RhY2ttYXAsICJsbHZt
LmV4cGVyaW1lbnRhbC5zdGFja21hcCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50MzIsIGlu
dDMyLCBWYXJpYWRpYykpIFwKKyAgICBtYWNybyhwYXRjaHBvaW50SW50NjQsICJsbHZtLmV4cGVy
aW1lbnRhbC5wYXRjaHBvaW50Lmk2NCIsIGZ1bmN0aW9uVHlwZShpbnQ2NCwgaW50NjQsIGludDMy
LCByZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBcCisgICAgbWFjcm8ocGF0Y2hwb2ludFZvaWQsICJs
bHZtLmV4cGVyaW1lbnRhbC5wYXRjaHBvaW50LnZvaWQiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUs
IGludDY0LCBpbnQzMiwgcmVmOCwgaW50MzIsIFZhcmlhZGljKSkgXAorICAgIG1hY3JvKHN0YWNr
bWFwLCAibGx2bS5leHBlcmltZW50YWwuc3RhY2ttYXAiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUs
IGludDY0LCBpbnQzMiwgVmFyaWFkaWMpKSBcCiAgICAgbWFjcm8oc3ViV2l0aE92ZXJmbG93MzIs
ICJsbHZtLnNzdWIud2l0aC5vdmVyZmxvdy5pMzIiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZSht
X2NvbnRleHQsIGludDMyLCBib29sZWFuKSwgaW50MzIsIGludDMyKSkgXAogICAgIG1hY3JvKHN1
YldpdGhPdmVyZmxvdzY0LCAibGx2bS5zc3ViLndpdGgub3ZlcmZsb3cuaTY0IiwgZnVuY3Rpb25U
eXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQ2NCwgYm9vbGVhbiksIGludDY0LCBpbnQ2NCkp
IFwKICAgICBtYWNybyh0cmFwLCAibGx2bS50cmFwIiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlKSkg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCShyZXZpc2lv
biAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NCw5ICs1NCw5IEBAIHZvaWQgSklUQ29kZTo6YWRkRGF0YVNlY3Rp
b24oUmVmQ291bnRlZEEKICAgICBtX2RhdGFTZWN0aW9ucy5hcHBlbmQoZGF0YVNlY3Rpb24pOwog
fQogCi12b2lkIEpJVENvZGU6OmluaXRpYWxpemVFbnRyeXBvaW50KENvZGVSZWYgZW50cnlwb2lu
dCkKK3ZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50KENvZGVSZWYg
ZW50cnlwb2ludCkKIHsKLSAgICBtX2VudHJ5cG9pbnQgPSBlbnRyeXBvaW50OworICAgIG1fYXJp
dHlDaGVja0VudHJ5cG9pbnQgPSBlbnRyeXBvaW50OwogfQogCiB2b2lkIEpJVENvZGU6OmluaXRp
YWxpemVBZGRyZXNzRm9yQ2FsbChDb2RlUHRyIGFkZHJlc3MpCkBAIC02NCwyMSArNjQsMjUgQEAg
dm9pZCBKSVRDb2RlOjppbml0aWFsaXplQWRkcmVzc0ZvckNhbGwoQwogICAgIG1fYWRkcmVzc0Zv
ckNhbGwgPSBhZGRyZXNzOwogfQogCi1KSVRDb2RlOjpDb2RlUHRyIEpJVENvZGU6OmFkZHJlc3NG
b3JDYWxsKCkKK0pJVENvZGU6OkNvZGVQdHIgSklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoVk0mLCBB
cml0eUNoZWNrTW9kZSBhcml0eUNoZWNrLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpCiB7Ci0g
ICAgcmV0dXJuIG1fYWRkcmVzc0ZvckNhbGw7CisgICAgc3dpdGNoIChhcml0eUNoZWNrKSB7Cisg
ICAgY2FzZSBBcml0eUNoZWNrTm90UmVxdWlyZWQ6CisgICAgICAgIHJldHVybiBtX2FkZHJlc3NG
b3JDYWxsOworICAgIGNhc2UgTXVzdENoZWNrQXJpdHk6CisgICAgICAgIHJldHVybiBtX2FyaXR5
Q2hlY2tFbnRyeXBvaW50LmNvZGUoKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gQ29kZVB0cigpOwogfQogCiB2b2lkKiBKSVRDb2RlOjpleGVj
dXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB7Ci0gICAgUkVMRUFTRV9BU1NF
UlQobV9lbnRyeXBvaW50KTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9h
ZGRyZXNzRm9yQ2FsbC5leGVjdXRhYmxlQWRkcmVzcygpKSArIG9mZnNldDsKIH0KIAogdm9pZCog
SklUQ29kZTo6ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3QpCiB7Ci0gICAgUkVMRUFTRV9BU1NF
UlQobV9lbnRyeXBvaW50KTsKLQogICAgIC8vIFdlIGNhbid0IHBhdGNoIEZUTCBjb2RlLCB5ZXQu
IEV2ZW4gaWYgd2UgZGlkLCBpdCdzIG5vdCBjbGVhciB0aGF0IHdlIHdvdWxkIGRvIHNvCiAgICAg
Ly8gdGhyb3VnaCB0aGlzIEFQSS4KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtODcsOCArOTEsNiBAQCB2b2lkKiBKSVRDb2RlOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVf
CiAKIHVuc2lnbmVkIEpJVENvZGU6Om9mZnNldE9mKHZvaWQqKQogewotICAgIFJFTEVBU0VfQVNT
RVJUKG1fZW50cnlwb2ludCk7Ci0KICAgICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgaGF2ZSB2aXNp
YmlsaXR5IGludG8gdGhlIEZUTCBjb2RlLgogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgcmV0dXJuIDA7CkBAIC05Niw4ICs5OCw2IEBAIHVuc2lnbmVkIEpJVENvZGU6Om9m
ZnNldE9mKHZvaWQqKQogCiBzaXplX3QgSklUQ29kZTo6c2l6ZSgpCiB7Ci0gICAgUkVMRUFTRV9B
U1NFUlQobV9lbnRyeXBvaW50KTsKLQogICAgIC8vIFdlIGRvbid0IGtub3cgdGhlIHNpemUgb2Yg
RlRMIGNvZGUsIHlldC4gTWFrZSBhIHdpbGQgZ3Vlc3MuIFRoaXMgaXMgbW9zdGx5IHVzZWQgZm9y
CiAgICAgLy8gR0MgbG9hZCBlc3RpbWF0ZXMuCiAgICAgcmV0dXJuIDEwMDA7CkBAIC0xMDUsOCAr
MTA1LDYgQEAgc2l6ZV90IEpJVENvZGU6OnNpemUoKQogCiBib29sIEpJVENvZGU6OmNvbnRhaW5z
KHZvaWQqKQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fZW50cnlwb2ludCk7Ci0KICAgICAvLyBX
ZSBoYXZlIG5vIGlkZWEgd2hhdCBhZGRyZXNzZXMgdGhlIEZUTCBjb2RlIGNvbnRhaW5zLCB5ZXQu
CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMTYwNjIy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDE3ICs0NiwxNyBAQCBwdWJsaWM6CiAgICAgSklUQ29kZSgpOwogICAgIH5KSVRD
b2RlKCk7CiAgICAgCi0gICAgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbCgpOwotICAgIHZvaWQqIGV4
ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCk7Ci0gICAgdm9pZCogZGF0YUFk
ZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBvZmZzZXRPZih2b2lk
KiBwb2ludGVySW50b0NvZGUpOwotICAgIHNpemVfdCBzaXplKCk7Ci0gICAgYm9vbCBjb250YWlu
cyh2b2lkKik7CisgICAgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbChWTSYsIEFyaXR5Q2hlY2tNb2Rl
LCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpIE9WRVJSSURFOworICAgIHZvaWQqIGV4ZWN1dGFi
bGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgT1ZFUlJJREU7CisgICAgdm9pZCogZGF0
YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSBPVkVSUklERTsKKyAgICB1bnNpZ25lZCBv
ZmZzZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUpIE9WRVJSSURFOworICAgIHNpemVfdCBzaXpl
KCkgT1ZFUlJJREU7CisgICAgYm9vbCBjb250YWlucyh2b2lkKikgT1ZFUlJJREU7CiAgICAgCiAg
ICAgdm9pZCBpbml0aWFsaXplRXhpdFRodW5rcyhDb2RlUmVmKTsKICAgICB2b2lkIGFkZEhhbmRs
ZShQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+KTsKICAgICB2b2lkIGFkZERhdGFT
ZWN0aW9uKFJlZkNvdW50ZWRBcnJheTxMU2VjdGlvbldvcmQ+KTsKLSAgICB2b2lkIGluaXRpYWxp
emVFbnRyeXBvaW50KENvZGVSZWYpOworICAgIHZvaWQgaW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRy
eXBvaW50KENvZGVSZWYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKENvZGVQ
dHIpOwogICAgIAogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRs
ZT4+JiBoYW5kbGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYW5kbGVzOyB9CkBAIC03NSw3ICs3NSw3
IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZkNvdW50ZWRBcnJheTxMU2VjdGlvbldvcmQ+PiBt
X2RhdGFTZWN0aW9uczsKICAgICBWZWN0b3I8UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+
PiBtX2hhbmRsZXM7CiAgICAgQ29kZVB0ciBtX2FkZHJlc3NGb3JDYWxsOwotICAgIENvZGVSZWYg
bV9lbnRyeXBvaW50OworICAgIENvZGVSZWYgbV9hcml0eUNoZWNrRW50cnlwb2ludDsKICAgICBD
b2RlUmVmIG1fZXhpdFRodW5rczsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAzLDEyICsxMDMsMTIgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQog
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVjazsKICAgICBpZiAoYXJpdHlD
aGVjay5pc1NldCgpKQogICAgICAgICB3aXRoQXJpdHlDaGVjayA9IGVudHJ5cG9pbnRMaW5rQnVm
ZmVyLT5sb2NhdGlvbk9mKGFyaXR5Q2hlY2spOwotICAgIGppdENvZGUtPmluaXRpYWxpemVFbnRy
eXBvaW50KAorICAgIGppdENvZGUtPmluaXRpYWxpemVBcml0eUNoZWNrRW50cnlwb2ludCgKICAg
ICAgICAgRklOQUxJWkVfREZHX0NPREUoCiAgICAgICAgICAgICAqZW50cnlwb2ludExpbmtCdWZm
ZXIsCiAgICAgICAgICAgICAoIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAlcyB3aXRoIExMVk0g
Z2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9w
bGFuLmNvZGVCbG9jay5nZXQoKSwgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpLCBmdW5jdGlvbikp
KTsKICAgICAKLSAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKGppdENvZGUsIHdpdGhB
cml0eUNoZWNrKTsKKyAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKGppdENvZGUpOwog
ICAgIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKU0NhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSlNDYWxsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSlNDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGVExKU0NhbGwuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK0pTQ2FsbDo6SlNDYWxsKHVuc2lnbmVkIHN0YWNr
bWFwSUQsIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUsIENvZGVPcmlnaW4gY29kZU9y
aWdpbikKKyAgICA6IG1fc3RhY2ttYXBJRChzdGFja21hcElEKQorICAgICwgbV9jYWxsVHlwZShj
YWxsVHlwZSkKKyAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQorICAgICwgbV9pbnN0cnVj
dGlvbk9mZnNldCgwKQoreworfQorCit2b2lkIEpTQ2FsbDo6ZW1pdChDQ2FsbEhlbHBlcnMmIGpp
dCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0
aFBhdGNoKAorICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwg
bV90YXJnZXRUb0NoZWNrLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCkp
OworICAgIAorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwKKyAgICAg
ICAgR1BSSW5mbzo6cmVnVDEpOworICAgIGppdC5zdG9yZTY0KAorICAgICAgICBHUFJJbmZvOjpy
ZWdUMSwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAgICAgIHNpemVvZihSZWdpc3Rl
cikgKiBKU1N0YWNrOjpTY29wZUNoYWluIC0gc2l6ZW9mKHZvaWQqKSkpOworICAgIAorICAgIG1f
ZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9
IGppdC5qdW1wKCk7CisgICAgCisgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICBtX3Nsb3dD
YWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgCisgICAgZG9uZS5saW5rKCZqaXQpOworfQorCit2
b2lkIEpTQ2FsbDo6bGluayhWTSYgdm0sIExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIENhbGxMaW5r
SW5mbyYgY2FsbEluZm8pCit7CisgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yOworICAgIGlm
IChtX2NhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0KQorICAgICAgICBnZW5lcmF0
b3IgPSBsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3I7CisgICAgZWxzZQorICAgICAgICBnZW5l
cmF0b3IgPSBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yOworICAgIAorICAgIGxpbmtCdWZmZXIubGlu
aygKKyAgICAgICAgbV9zbG93Q2FsbCwgRnVuY3Rpb25QdHIodm0uZ2V0Q1RJU3R1YihnZW5lcmF0
b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgCisgICAgY2FsbEluZm8uY2Fs
bFR5cGUgPSBtX2NhbGxUeXBlOworICAgIGNhbGxJbmZvLmNvZGVPcmlnaW4gPSBtX2NvZGVPcmln
aW47CisgICAgY2FsbEluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mTmVhckNhbGwobV9zbG93Q2FsbCk7CisgICAgY2FsbEluZm8uaG90UGF0aEJlZ2luID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKG1fdGFyZ2V0VG9DaGVjayk7CisgICAgY2FsbEluZm8uaG90UGF0
aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9mYXN0Q2FsbCk7CisgICAg
Y2FsbEluZm8uY2FsbGVlR1BSID0gR1BSSW5mbzo6cmVnVDA7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBG
VExKU0NhbGxfaAorI2RlZmluZSBGVExKU0NhbGxfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisK
KyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNp
bmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEpTQ2FsbCB7CitwdWJsaWM6CisgICAg
SlNDYWxsKHVuc2lnbmVkIHN0YWNrbWFwSUQsIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUsIENvZGVP
cmlnaW4pOworICAgIAorICAgIHZvaWQgZW1pdChDQ2FsbEhlbHBlcnMmKTsKKyAgICB2b2lkIGxp
bmsoVk0mLCBMaW5rQnVmZmVyJiwgQ2FsbExpbmtJbmZvJik7CisgICAgCisgICAgdW5zaWduZWQg
c3RhY2ttYXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IEpTQ2FsbCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9pbnN0cnVjdGlvbk9mZnNldCA8IG90aGVyLm1faW5zdHJ1Y3Rpb25PZmZzZXQ7Cisg
ICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3N0YWNrbWFwSUQ7CisgICAgQ2Fs
bExpbmtJbmZvOjpDYWxsVHlwZSBtX2NhbGxUeXBlOworICAgIENvZGVPcmlnaW4gbV9jb2RlT3Jp
Z2luOworICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIG1fdGFyZ2V0VG9DaGVjazsKKyAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgbV9mYXN0Q2FsbDsKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
bV9zbG93Q2FsbDsKKworcHVibGljOgorICAgIHVpbnQzMl90IG1faW5zdHJ1Y3Rpb25PZmZzZXQ7
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKKworI2VuZGlmIC8vIEZUTEpTQ2FsbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNjA2MjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIG1f
ZnRsU3RhdGUuY2FwdHVyZWRTdGFja21hcElEID0gbV9zdGFja21hcElEcysrOwogICAgICAgICBt
X291dC5jYWxsKAotICAgICAgICAgICAgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgbV9vdXQu
Y29uc3RJbnQzMihtX2Z0bFN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCksCisgICAgICAgICAgICBt
X291dC5zdGFja21hcEludHJpbnNpYygpLCBtX291dC5jb25zdEludDY0KG1fZnRsU3RhdGUuY2Fw
dHVyZWRTdGFja21hcElEKSwKICAgICAgICAgICAgIG1fb3V0LmludDMyWmVybywgY2FwdHVyZWRB
bGxvY2EpOwogICAgICAgICAKICAgICAgICAgbV9jYWxsRnJhbWUgPSBtX291dC5wdHJUb0ludCgK
QEAgLTEyOTcsNyArMTI5Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBMVmFsdWUg
Y2FsbCA9IG1fb3V0LmNhbGwoCiAgICAgICAgICAgICBtX291dC5wYXRjaHBvaW50SW50NjRJbnRy
aW5zaWMoKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3RhY2ttYXBJRCksIG1fb3V0
LmNvbnN0SW50MzIoc2l6ZU9mR2V0QnlJZCgpKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
NjQoc3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mR2V0QnlJZCgpKSwKICAgICAg
ICAgICAgIGNvbnN0TnVsbChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigxKSwgYmFzZSk7
CiAgICAgICAgIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJl
Z0NhbGxDb252KTsKICAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsKQEAgLTEzMjIsNyArMTMyMiw3
IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwo
CiAgICAgICAgICAgICBtX291dC5wYXRjaHBvaW50Vm9pZEludHJpbnNpYygpLAotICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnQzMihzdGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXplT2ZQ
dXRCeUlkKCkpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSwgbV9v
dXQuY29uc3RJbnQzMihzaXplT2ZQdXRCeUlkKCkpLAogICAgICAgICAgICAgY29uc3ROdWxsKG1f
b3V0LnJlZjgpLCBtX291dC5jb25zdEludDMyKDIpLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgIHNl
dEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJlZ0NhbGxDb252KTsK
ICAgICAgICAgCkBAIC0yNDM3LDM1ICsyNDM3LDQwIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlQ2FsbE9yQ29uc3RydWN0KCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlz
IGlzIHVuYWNjZXB0YWJseSBzbG93LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIxCisgICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9
IG1fbm9kZS0+b3AoKSA9PSBDYWxsID8gMCA6IDE7CisgICAgICAgIGludCBudW1QYXNzZWRBcmdz
ID0gbV9ub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKKyAgICAgICAgaW50IG51bUFyZ3MgPSBudW1Q
YXNzZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQ7CiAgICAgICAgIAotICAgICAgICBKX0pJVE9w
ZXJhdGlvbl9FIGZ1bmN0aW9uID0KLSAgICAgICAgICAgIG1fbm9kZS0+b3AoKSA9PSBDYWxsID8g
b3BlcmF0aW9uRlRMQ2FsbCA6IG9wZXJhdGlvbkZUTENvbnN0cnVjdDsKKyAgICAgICAgTFZhbHVl
IGNhbGxlZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKTsKICAg
ICAgICAgCi0gICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IG1fbm9kZS0+b3AoKSA9PSBD
YWxsID8gMCA6IDE7CisgICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURz
Kys7CiAgICAgICAgIAotICAgICAgICBpbnQgbnVtUGFzc2VkQXJncyA9IG1fbm9kZS0+bnVtQ2hp
bGRyZW4oKSAtIDE7CisgICAgICAgIFZlY3RvcjxMVmFsdWU+IGFyZ3VtZW50czsKKyAgICAgICAg
YXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpKTsKKyAgICAgICAg
YXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDMyKHNpemVPZkNhbGwoKSkpOworICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKGNvbnN0TnVsbChtX291dC5yZWY4KSk7CisgICAgICAgIGFyZ3Vt
ZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMigxICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplICsgbnVtQXJncykpOworICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKGNhbGxlZSk7IC8vIGNhbGxlZSAtPiAlcmRpCisgICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQoZ2V0VW5kZWYobV9vdXQuaW50NjQpKTsgLy8gY29kZSBibG9jaworICAg
ICAgICBhcmd1bWVudHMuYXBwZW5kKGdldFVuZGVmKG1fb3V0LmludDY0KSk7IC8vIHNjb3BlIGNo
YWluCisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoY2FsbGVlKTsgLy8gY2FsbGVlIC0+IHN0YWNr
CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQ2NChudW1BcmdzKSk7IC8v
IGFyZ3VtZW50IGNvdW50IGFuZCB6ZXJvcyBmb3IgdGhlIHRhZworICAgICAgICBpZiAoZHVtbXlU
aGlzQXJndW1lbnQpCisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGdldFVuZGVmKG1fb3V0
LmludDY0KSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytp
KQorICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobV9ub2RlLCAxICsgaSkpKTsKICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBjYWxsZWVG
cmFtZSA9IG1fb3V0LmFkZCgKLSAgICAgICAgICAgIG1fY2FsbEZyYW1lLAotICAgICAgICAgICAg
bV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKFJlZ2lzdGVyKSAqIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKG1fZ3JhcGguZnJhbWVSZWdpc3RlckNvdW50KCkpLm9mZnNldCgpKSk7CisgICAgICAgIGNh
bGxQcmVmbGlnaHQoKTsKICAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlMzIoCi0gICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKG51bVBhc3NlZEFyZ3MgKyBkdW1teVRoaXNBcmd1bWVudCks
Ci0gICAgICAgICAgICBwYXlsb2FkRm9yKGNhbGxlZUZyYW1lLCBKU1N0YWNrOjpBcmd1bWVudENv
dW50KSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlNjQobV9jYWxsRnJhbWUsIGNhbGxlZUZyYW1lLCBt
X2hlYXBzLkNhbGxGcmFtZV9jYWxsZXJGcmFtZSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlNjQoCi0g
ICAgICAgICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksCi0g
ICAgICAgICAgICBhZGRyZXNzRm9yKGNhbGxlZUZyYW1lLCBKU1N0YWNrOjpDYWxsZWUpKTsKKyAg
ICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJp
bnNpYygpLCBhcmd1bWVudHMpOworICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50
aW9uKGNhbGwsIExMVk1XZWJLaXRKU0NhbGxDb252KTsKICAgICAgICAgCi0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7Ci0gICAgICAgICAgICBtX291dC5z
dG9yZTY0KAotICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDEgKyBpKSksCi0gICAgICAgICAgICAgICAgYWRkcmVzc0ZvcihjYWxsZWVGcmFtZSwg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSArIGR1bW15VGhpc0FyZ3VtZW50KS5vZmZzZXQo
KSkpOwotICAgICAgICB9CisgICAgICAgIG1fZnRsU3RhdGUuanNDYWxscy5hcHBlbmQoSlNDYWxs
KAorICAgICAgICAgICAgc3RhY2ttYXBJRCwKKyAgICAgICAgICAgIG1fbm9kZS0+b3AoKSA9PSBD
YWxsID8gQ2FsbExpbmtJbmZvOjpDYWxsIDogQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QsCisgICAg
ICAgICAgICBtX25vZGUtPmNvZGVPcmlnaW4pKTsKICAgICAgICAgCi0gICAgICAgIHNldEpTVmFs
dWUodm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihmdW5jdGlvbiksIGNhbGxlZUZyYW1lKSk7CisgICAg
ICAgIHNldEpTVmFsdWUoY2FsbCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUp1bXAo
KQpAQCAtNDA5Miw3ICs0MDk3LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGV4aXQubV9z
dGFja21hcElEID0gbV9zdGFja21hcElEcysrOwogICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAs
IG1fb3V0LmNvbnN0SW50MzIoTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUo
KSkpOwotICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1fb3V0LmNvbnN0SW50MzIoZXhpdC5t
X3N0YWNrbWFwSUQpKTsKKyAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBtX291dC5jb25zdElu
dDY0KGV4aXQubV9zdGFja21hcElEKSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5jYWxsKG1f
b3V0LnN0YWNrbWFwSW50cmluc2ljKCksIGFyZ3VtZW50cyk7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Nyw3ICs4Nyw4IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAgICAKICAgICBleGVj
LT5zZXRDb2RlQmxvY2soZW50cnlDb2RlQmxvY2spOwogICAgIAotICAgIHZvaWQqIHJlc3VsdCA9
IGVudHJ5Q29kZS0+YWRkcmVzc0ZvckNhbGwoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIHZv
aWQqIHJlc3VsdCA9IGVudHJ5Q29kZS0+YWRkcmVzc0ZvckNhbGwoCisgICAgICAgIHZtLCBBcml0
eUNoZWNrTm90UmVxdWlyZWQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpLmV4ZWN1
dGFibGVBZGRyZXNzKCk7CiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAg
ZGF0YUxvZygiICAgIEVudHJ5IHdpbGwgc3VjY2VlZCwgZ29pbmcgdG8gYWRkcmVzcyIsIFJhd1Bv
aW50ZXIocmVzdWx0KSwgIlxuIik7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN0YWNrTWFwcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGFja01hcHMuY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5
LDkgQEAgdm9pZCBTdGFja01hcHM6OkxvY2F0aW9uOjpyZXN0b3JlSW50bygKIAogYm9vbCBTdGFj
a01hcHM6OlJlY29yZDo6cGFyc2UoRGF0YVZpZXcqIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQpCiB7
Ci0gICAgcGF0Y2hwb2ludElEID0gdmlldy0+cmVhZDx1aW50MzJfdD4ob2Zmc2V0LCB0cnVlKTsK
KyAgICBpbnQ2NF90IGlkID0gdmlldy0+cmVhZDxpbnQ2NF90PihvZmZzZXQsIHRydWUpOworICAg
IEFTU0VSVChzdGF0aWNfY2FzdDxpbnQzMl90PihpZCkgPT0gaWQpOworICAgIHBhdGNocG9pbnRJ
RCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihpZCk7CiAgICAgaWYgKHN0YXRpY19jYXN0PGludDMy
X3Q+KHBhdGNocG9pbnRJRCkgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBAIC05
MCw2ICs5MiwxMyBAQCBib29sIFN0YWNrTWFwczo6UmVjb3JkOjpwYXJzZShEYXRhVmlldyogCiAg
ICAgd2hpbGUgKGxlbmd0aC0tKQogICAgICAgICBsb2NhdGlvbnMuYXBwZW5kKHJlYWRPYmplY3Q8
TG9jYXRpb24+KHZpZXcsIG9mZnNldCkpOwogICAgIAorICAgIHVuc2lnbmVkIG51bUxpdmVPdXRz
ID0gdmlldy0+cmVhZDx1aW50MTZfdD4ob2Zmc2V0LCB0cnVlKTsKKyAgICB3aGlsZSAobnVtTGl2
ZU91dHMtLSkgeworICAgICAgICB2aWV3LT5yZWFkPHVpbnQxNl90PihvZmZzZXQsIHRydWUpOyAv
LyByZWdudW0KKyAgICAgICAgdmlldy0+cmVhZDx1aW50OF90PihvZmZzZXQsIHRydWUpOyAvLyBy
ZXNlcnZlZAorICAgICAgICB2aWV3LT5yZWFkPHVpbnQ4X3Q+KG9mZnNldCwgdHJ1ZSk7IC8vIHNp
emUgaW4gYnl0ZXMKKyAgICB9CisgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiAr
MzYsNyBAQAogI2luY2x1ZGUgIkZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oIgogI2luY2x1ZGUg
IkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJGVExKSVRGaW5hbGl6ZXIuaCIKKyNpbmNsdWRlICJG
VExKU0NhbGwuaCIKICNpbmNsdWRlICJGVExTdGFja01hcHMuaCIKICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KIApAQCAtNjAsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgY2Fw
dHVyZWRTdGFja21hcElEOwogICAgIFNlZ21lbnRlZFZlY3RvcjxHZXRCeUlkRGVzY3JpcHRvcj4g
Z2V0QnlJZHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFB1dEJ5SWREZXNjcmlwdG9yPiBwdXRCeUlk
czsKKyAgICBWZWN0b3I8SlNDYWxsPiBqc0NhbGxzOwogICAgIFZlY3RvcjxDU3RyaW5nPiBjb2Rl
U2VjdGlvbk5hbWVzOwogICAgIFZlY3RvcjxDU3RyaW5nPiBkYXRhU2VjdGlvbk5hbWVzOwogICAg
IFJlZkNvdW50ZWRBcnJheTxMU2VjdGlvbldvcmQ+IHN0YWNrbWFwc1NlY3Rpb247CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwMyw4ICs3MDMsNyBA
QCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAgCiAgICAgbV9j
b2RlQmxvY2stPnNocmlua1RvRml0KENvZGVCbG9jazo6TGF0ZVNocmluayk7CiAgICAgbV9jb2Rl
QmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHJl
c3VsdCwgSklUQ29kZTo6QmFzZWxpbmVKSVQpKSwKLSAgICAgICAgd2l0aEFyaXR5Q2hlY2spOwor
ICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNr
LCBKSVRDb2RlOjpCYXNlbGluZUpJVCkpKTsKICAgICAKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0Up
CiAgICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4i
LCBtX2NvZGVCbG9jaywgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnQoKSwgcmVzdWx0
LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENvZGUuY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNs
dWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJS
ZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03NSw1MCArNzYsMzggQEAgRlRMOjpG
b3JPU1JFbnRyeUpJVENvZGUqIEpJVENvZGU6OmZ0bEZvcgogCiBQYXNzUmVmUHRyPEpJVENvZGU+
IEpJVENvZGU6Omhvc3RGdW5jdGlvbihKSVRDb2RlOjpDb2RlUmVmIGNvZGUpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKGNvZGUsIEhvc3RDYWxsVGh1bmspKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IE5hdGl2ZUpJVENvZGUoY29kZSwgSG9zdENhbGxUaHVuaykp
OwogfQogCi1EaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2RlKEpJVFR5cGUgaml0VHlwZSkKK0pJ
VENvZGVXaXRoQ29kZVJlZjo6SklUQ29kZVdpdGhDb2RlUmVmKEpJVFR5cGUgaml0VHlwZSkKICAg
ICA6IEpJVENvZGUoaml0VHlwZSkKIHsKIH0KIAotRGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29k
ZShjb25zdCBKSVRDb2RlOjpDb2RlUmVmIHJlZiwgSklUVHlwZSBqaXRUeXBlKQorSklUQ29kZVdp
dGhDb2RlUmVmOjpKSVRDb2RlV2l0aENvZGVSZWYoQ29kZVJlZiByZWYsIEpJVFR5cGUgaml0VHlw
ZSkKICAgICA6IEpJVENvZGUoaml0VHlwZSkKICAgICAsIG1fcmVmKHJlZikKIHsKIH0KIAotRGly
ZWN0SklUQ29kZTo6fkRpcmVjdEpJVENvZGUoKQorSklUQ29kZVdpdGhDb2RlUmVmOjp+SklUQ29k
ZVdpdGhDb2RlUmVmKCkKIHsKIH0KIAotdm9pZCBEaXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29k
ZVJlZihjb25zdCBKSVRDb2RlOjpDb2RlUmVmIHJlZikKLXsKLSAgICBSRUxFQVNFX0FTU0VSVCgh
bV9yZWYpOwotICAgIG1fcmVmID0gcmVmOwotfQotCi1KSVRDb2RlOjpDb2RlUHRyIERpcmVjdEpJ
VENvZGU6OmFkZHJlc3NGb3JDYWxsKCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3JlZik7Ci0g
ICAgcmV0dXJuIG1fcmVmLmNvZGUoKTsKLX0KLQotdm9pZCogRGlyZWN0SklUQ29kZTo6ZXhlY3V0
YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KQordm9pZCogSklUQ29kZVdpdGhDb2Rl
UmVmOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQobV9yZWYpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPiht
X3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkgKyBvZmZzZXQ7CiB9CiAKLXZvaWQqIERp
cmVjdEpJVENvZGU6OmRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkKK3ZvaWQqIEpJ
VENvZGVXaXRoQ29kZVJlZjo6ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKICAgICBBU1NFUlQob2Zmc2V0IDw9IHNpemUoKSk7
IC8vIHVzZSA8PSBpbnN0ZWFkIG9mIDwgYmVjYXVzZSBpdCBpcyB2YWxpZCB0byBhc2sgZm9yIGFu
IGFkZHJlc3MgYXQgdGhlIGV4Y2x1c2l2ZSBlbmQgb2YgdGhlIGNvZGUuCiAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fcmVmLmNvZGUoKS5kYXRhTG9jYXRpb24oKSkgKyBvZmZz
ZXQ7CiB9CiAKLXVuc2lnbmVkIERpcmVjdEpJVENvZGU6Om9mZnNldE9mKHZvaWQqIHBvaW50ZXJJ
bnRvQ29kZSkKK3Vuc2lnbmVkIEpJVENvZGVXaXRoQ29kZVJlZjo6b2Zmc2V0T2Yodm9pZCogcG9p
bnRlckludG9Db2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKICAgICBpbnRwdHJf
dCByZXN1bHQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVySW50b0NvZGUpIC0g
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpOwpAQCAtMTI2LDE4ICsxMTUsMTA1IEBAIHVuc2lnbmVkIERpcmVjdEpJVENvZGU6Om9mZnNl
dE9mKHZvaWQqIHAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdCk7CiB9
CiAKLXNpemVfdCBEaXJlY3RKSVRDb2RlOjpzaXplKCkKK3NpemVfdCBKSVRDb2RlV2l0aENvZGVS
ZWY6OnNpemUoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKICAgICByZXR1cm4gbV9y
ZWYuc2l6ZSgpOwogfQogCi1ib29sIERpcmVjdEpJVENvZGU6OmNvbnRhaW5zKHZvaWQqIGFkZHJl
c3MpCitib29sIEpJVENvZGVXaXRoQ29kZVJlZjo6Y29udGFpbnModm9pZCogYWRkcmVzcykKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVChtX3JlZik7CiAgICAgcmV0dXJuIG1fcmVmLmV4ZWN1dGFibGVN
ZW1vcnkoKS0+Y29udGFpbnMoYWRkcmVzcyk7CiB9CiAKK0RpcmVjdEpJVENvZGU6OkRpcmVjdEpJ
VENvZGUoSklUVHlwZSBqaXRUeXBlKQorICAgIDogSklUQ29kZVdpdGhDb2RlUmVmKGppdFR5cGUp
Cit7Cit9CisKK0RpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUoCisgICAgSklUQ29kZTo6Q29k
ZVJlZiByZWYsIEpJVENvZGU6OkNvZGVQdHIgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGUgaml0VHlw
ZSkKKyAgICA6IEpJVENvZGVXaXRoQ29kZVJlZihyZWYsIGppdFR5cGUpCisgICAgLCBtX3dpdGhB
cml0eUNoZWNrKHdpdGhBcml0eUNoZWNrKQoreworfQorCitEaXJlY3RKSVRDb2RlOjp+RGlyZWN0
SklUQ29kZSgpCit7Cit9CisKK3ZvaWQgRGlyZWN0SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWYo
SklUQ29kZTo6Q29kZVJlZiByZWYsIEpJVENvZGU6OkNvZGVQdHIgd2l0aEFyaXR5Q2hlY2spCit7
CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmVmKTsKKyAgICBtX3JlZiA9IHJlZjsKKyAgICBtX3dp
dGhBcml0eUNoZWNrID0gd2l0aEFyaXR5Q2hlY2s7Cit9CisKK0RpcmVjdEpJVENvZGU6OlJlZ2lz
dGVyUHJlc2VydmF0aW9uV3JhcHBlcnMqIERpcmVjdEpJVENvZGU6OmVuc3VyZVdyYXBwZXJzKCkK
K3sKKyAgICBpZiAoIW1fd3JhcHBlcnMpCisgICAgICAgIG1fd3JhcHBlcnMgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlcnM+KCk7CisgICAgcmV0dXJuIG1fd3Jh
cHBlcnMuZ2V0KCk7Cit9CisKK0pJVENvZGU6OkNvZGVQdHIgRGlyZWN0SklUQ29kZTo6YWRkcmVz
c0ZvckNhbGwoCisgICAgVk0mIHZtLCBBcml0eUNoZWNrTW9kZSBhcml0eSwgUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sKKyAgICBzd2l0Y2ggKGFyaXR5KSB7CisgICAgY2Fz
ZSBBcml0eUNoZWNrTm90UmVxdWlyZWQ6CisgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7Cisg
ICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKKyAgICAgICAgICAgIHJldHVybiBtX3JlZi5jb2RlKCk7
CisgICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOiB7CisgICAgICAgICAgICBSZWdp
c3RlclByZXNlcnZhdGlvbldyYXBwZXJzKiB3cmFwcGVycyA9IGVuc3VyZVdyYXBwZXJzKCk7Cisg
ICAgICAgICAgICBpZiAoIXdyYXBwZXJzLT53aXRob3V0QXJpdHlDaGVjaykKKyAgICAgICAgICAg
ICAgICB3cmFwcGVycy0+d2l0aG91dEFyaXR5Q2hlY2sgPSBnZW5lcmF0ZVdyYXBwZXIodm0sIG1f
cmVmLmNvZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gd3JhcHBlcnMtPndpdGhvdXRBcml0eUNo
ZWNrLmNvZGUoKTsKKyAgICAgICAgfSB9CisgICAgY2FzZSBNdXN0Q2hlY2tBcml0eToKKyAgICAg
ICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlv
bk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV93aXRoQXJpdHlDaGVj
ayk7CisgICAgICAgICAgICByZXR1cm4gbV93aXRoQXJpdHlDaGVjazsKKyAgICAgICAgY2FzZSBN
dXN0UHJlc2VydmVSZWdpc3RlcnM6IHsKKyAgICAgICAgICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9u
V3JhcHBlcnMqIHdyYXBwZXJzID0gZW5zdXJlV3JhcHBlcnMoKTsKKyAgICAgICAgICAgIGlmICgh
d3JhcHBlcnMtPndpdGhBcml0eUNoZWNrKQorICAgICAgICAgICAgICAgIHdyYXBwZXJzLT53aXRo
QXJpdHlDaGVjayA9IGdlbmVyYXRlV3JhcHBlcih2bSwgbV93aXRoQXJpdHlDaGVjayk7CisgICAg
ICAgICAgICByZXR1cm4gd3JhcHBlcnMtPndpdGhBcml0eUNoZWNrLmNvZGUoKTsKKyAgICAgICAg
fSB9CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IENvZGVQdHIoKTsKK30KKworTmF0aXZlSklUQ29kZTo6TmF0aXZlSklUQ29kZShKSVRUeXBlIGpp
dFR5cGUpCisgICAgOiBKSVRDb2RlV2l0aENvZGVSZWYoaml0VHlwZSkKK3sKK30KKworTmF0aXZl
SklUQ29kZTo6TmF0aXZlSklUQ29kZShDb2RlUmVmIHJlZiwgSklUVHlwZSBqaXRUeXBlKQorICAg
IDogSklUQ29kZVdpdGhDb2RlUmVmKHJlZiwgaml0VHlwZSkKK3sKK30KKworTmF0aXZlSklUQ29k
ZTo6fk5hdGl2ZUpJVENvZGUoKQoreworfQorCit2b2lkIE5hdGl2ZUpJVENvZGU6OmluaXRpYWxp
emVDb2RlUmVmKENvZGVSZWYgcmVmKQoreworICAgIEFTU0VSVCghbV9yZWYpOworICAgIG1fcmVm
ID0gcmVmOworfQorCitKSVRDb2RlOjpDb2RlUHRyIE5hdGl2ZUpJVENvZGU6OmFkZHJlc3NGb3JD
YWxsKFZNJiwgQXJpdHlDaGVja01vZGUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVCghIW1fcmVmKTsKKyAgICByZXR1cm4gbV9yZWYuY29kZSgpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE0ICsyNiwxNCBAQAog
I2lmbmRlZiBKSVRDb2RlX2gKICNkZWZpbmUgSklUQ29kZV9oCiAKLSNpZiBFTkFCTEUoSklUKSB8
fCBFTkFCTEUoTExJTlQpCisjaW5jbHVkZSAiQXJpdHlDaGVja01vZGUuaCIKICNpbmNsdWRlICJD
YWxsRnJhbWUuaCIKICNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKICNpbmNsdWRlICJKSVRTdHVi
cy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJMZWdhY3lQcm9maWxlci5o
IgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgotI2VuZGlmCisjaW5jbHVkZSAi
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNjQs
NyArMTY0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaml0Q29kZS0+aml0VHlwZSgpOwog
ICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoKSA9IDA7Cisg
ICAgdmlydHVhbCBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKFZNJiwgQXJpdHlDaGVja01vZGUsIFJl
Z2lzdGVyUHJlc2VydmF0aW9uTW9kZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCogZXhlY3V0YWJs
ZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSA9IDA7CiAgICAgdm9pZCogZXhlY3V0YWJs
ZUFkZHJlc3MoKSB7IHJldHVybiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KDApOyB9CiAgICAg
dmlydHVhbCB2b2lkKiBkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpID0gMDsKQEAg
LTE4OSwyMSArMTg5LDU4IEBAIHByaXZhdGU6CiAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiB9Owog
Ci1jbGFzcyBEaXJlY3RKSVRDb2RlIDogcHVibGljIEpJVENvZGUgeworY2xhc3MgSklUQ29kZVdp
dGhDb2RlUmVmIDogcHVibGljIEpJVENvZGUgeworcHJvdGVjdGVkOgorICAgIEpJVENvZGVXaXRo
Q29kZVJlZihKSVRUeXBlKTsKKyAgICBKSVRDb2RlV2l0aENvZGVSZWYoQ29kZVJlZiwgSklUVHlw
ZSk7CisKIHB1YmxpYzoKLSAgICBEaXJlY3RKSVRDb2RlKEpJVFR5cGUpOwotICAgIERpcmVjdEpJ
VENvZGUoY29uc3QgQ29kZVJlZiwgSklUVHlwZSk7Ci0gICAgdmlydHVhbCB+RGlyZWN0SklUQ29k
ZSgpOwotICAgIAotICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGVSZWYoQ29kZVJlZiByZWYpOworICAg
IHZpcnR1YWwgfkpJVENvZGVXaXRoQ29kZVJlZigpOwogCi0gICAgdmlydHVhbCBDb2RlUHRyIGFk
ZHJlc3NGb3JDYWxsKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkKiBleGVjdXRhYmxlQWRk
cmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCog
ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSBPVkVSUklERTsKICAgICB2aXJ0dWFs
IHVuc2lnbmVkIG9mZnNldE9mKHZvaWQqIHBvaW50ZXJJbnRvQ29kZSkgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCBzaXplX3Qgc2l6ZSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBjb250YWlu
cyh2b2lkKikgT1ZFUlJJREU7CiAKK3Byb3RlY3RlZDoKKyAgICBDb2RlUmVmIG1fcmVmOworfTsK
KworY2xhc3MgRGlyZWN0SklUQ29kZSA6IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVSZWYgeworcHVi
bGljOgorICAgIERpcmVjdEpJVENvZGUoSklUVHlwZSk7CisgICAgRGlyZWN0SklUQ29kZShDb2Rl
UmVmLCBDb2RlUHRyIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlKTsKKyAgICB2aXJ0dWFsIH5EaXJl
Y3RKSVRDb2RlKCk7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplQ29kZVJlZihDb2RlUmVmIHJl
ZiwgQ29kZVB0ciB3aXRoQXJpdHlDaGVjayk7CisKKyAgICB2aXJ0dWFsIENvZGVQdHIgYWRkcmVz
c0ZvckNhbGwoVk0mLCBBcml0eUNoZWNrTW9kZSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlKSBP
VkVSUklERTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFw
cGVycyB7CisgICAgICAgIENvZGVSZWYgd2l0aG91dEFyaXR5Q2hlY2s7CisgICAgICAgIENvZGVS
ZWYgd2l0aEFyaXR5Q2hlY2s7CisgICAgfTsKKworICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3Jh
cHBlcnMqIGVuc3VyZVdyYXBwZXJzKCk7CisgICAgCisgICAgQ29kZVJlZiBtX3JlZjsKKyAgICBD
b2RlUHRyIG1fd2l0aEFyaXR5Q2hlY2s7CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlZ2lz
dGVyUHJlc2VydmF0aW9uV3JhcHBlcnM+IG1fd3JhcHBlcnM7Cit9OworCitjbGFzcyBOYXRpdmVK
SVRDb2RlIDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7CitwdWJsaWM6CisgICAgTmF0aXZl
SklUQ29kZShKSVRUeXBlKTsKKyAgICBOYXRpdmVKSVRDb2RlKENvZGVSZWYsIEpJVFR5cGUpOwor
ICAgIHZpcnR1YWwgfk5hdGl2ZUpJVENvZGUoKTsKKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemVD
b2RlUmVmKENvZGVSZWYgcmVmKTsKKworICAgIHZpcnR1YWwgQ29kZVB0ciBhZGRyZXNzRm9yQ2Fs
bChWTSYsIEFyaXR5Q2hlY2tNb2RlLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpIE9WRVJSSURF
OworCiBwcml2YXRlOgogICAgIENvZGVSZWYgbV9yZWY7CiB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02ODUsNyArNjg1LDggQEAgc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxsKEV4ZWNTdGF0
ZSogZQogICAgIHJldHVybiB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xv
d1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogfQogCi1pbmxpbmUg
Y2hhciogbGlua0ZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKK2lubGluZSBjaGFyKiBsaW5rRm9yKAorICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxl
ZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUg
cmVnaXN0ZXJzKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZy
YW1lKCk7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkBAIC03MDMsOSArNzA0LDkgQEAgaW5s
aW5lIGNoYXIqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbAogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKICAgICBDYWxs
TGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0lu
Zm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7Ci0gICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1
bmN0aW9uKCkpCi0gICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2Rl
Rm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOwotICAgIGVsc2UgeworICAgIGlmIChleGVjdXRh
YmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7CisgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5l
bnRyeXBvaW50Rm9yKCp2bSwga2luZCwgTXVzdENoZWNrQXJpdHksIHJlZ2lzdGVycyk7CisgICAg
fSBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUg
PSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKICAgICAgICAg
SlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9u
KGV4ZWNDYWxsZWUsIGNhbGxlZS0+c2NvcGUoKSwga2luZCk7CiAgICAgICAgIGlmIChlcnJvcikg
ewpAQCAtNzEzLDEwICs3MTQsMTIgQEAgaW5saW5lIGNoYXIqIGxpbmtGb3IoRXhlY1N0YXRlKiBl
eGVjQ2FsbAogICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5n
ZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICB9CiAgICAgICAgIGNvZGVCbG9jayA9IGZ1
bmN0aW9uRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpOworICAgICAgICBBcml0eUNoZWNr
TW9kZSBhcml0eTsKICAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
KSB8fCBjYWxsTGlua0luZm8uY2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJncykK
LSAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENv
ZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKTsKKyAgICAgICAgICAgIGFyaXR5ID0gTXVzdENoZWNr
QXJpdHk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1
dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKCk7CisgICAg
ICAgICAgICBhcml0eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKKyAgICAgICAgY29kZVB0ciA9
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigqdm0sIGtpbmQsIGFyaXR5LCByZWdp
c3RlcnMpOwogICAgIH0KICAgICBpZiAoIWNhbGxMaW5rSW5mby5zZWVuT25jZSgpKQogICAgICAg
ICBjYWxsTGlua0luZm8uc2V0U2VlbigpOwpAQCAtNzI3LDE1ICs3MzAsMjcgQEAgaW5saW5lIGNo
YXIqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbAogCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKIHsKLSAgICByZXR1cm4gbGlu
a0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCk7CisgICAgcmV0dXJuIGxpbmtGb3IoZXhlY0Nh
bGxlZSwgQ29kZUZvckNhbGwsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwogfQog
CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKiBl
eGVjQ2FsbGVlKQogewotICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25z
dHJ1Y3QpOworICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3Qs
IFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOworfQorCitjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkxpbmtDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2Fs
bGVlKQoreworICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBNdXN0
UHJlc2VydmVSZWdpc3RlcnMpOworfQorCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxp
bmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7Cisg
ICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCwgTXVzdFByZXNl
cnZlUmVnaXN0ZXJzKTsKIH0KIAotaW5saW5lIGNoYXIqIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24o
RXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTQ2Vs
bComIGNhbGxlZUFzRnVuY3Rpb25DZWxsKQoraW5saW5lIGNoYXIqIHZpcnR1YWxGb3JXaXRoRnVu
Y3Rpb24oCisgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMsCisgICAgSlNDZWxsKiYg
Y2FsbGVlQXNGdW5jdGlvbkNlbGwpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxl
ZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKQEAgLTc1NywxNiAr
NzcyLDIwIEBAIGlubGluZSBjaGFyKiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEV4ZWMKICAgICAg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih2bS0+Z2V0Q1RJU3R1Yih0aHJv
d0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
PihleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKAorICAgICAgICAqdm0sIGtpbmQsIE11c3RDaGVj
a0FyaXR5LCByZWdpc3RlcnMpKTsKIH0KIAotaW5saW5lIGNoYXIqIHZpcnR1YWxGb3IoRXhlY1N0
YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitpbmxpbmUgY2hh
ciogdmlydHVhbEZvcigKKyAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsKICAg
ICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZDsKLSAgICByZXR1cm4gdmlydHVh
bEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVlLCBraW5kLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbEln
bm9yZWQpOworICAgIHJldHVybiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGtp
bmQsIHJlZ2lzdGVycywgY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkKTsKIH0KIAotc3RhdGlj
IGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUs
IEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZv
KQorc3RhdGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbCgKKyAgICBFeGVjU3Rh
dGUqIGV4ZWNDYWxsZWUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMsIEpTQ2Vs
bCogY2FsbGVlQXNGdW5jdGlvbkNlbGwsCisgICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8p
CiB7CiAgICAgaWYgKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtNzgwLDcgKzc5OSw5IEBAIHN0YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXplQ2xvc3Vy
ZUNhbGwKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEFTU0VSVChjYWxsZWUtPmV4
ZWN1dGFibGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGNvZGVQdHIgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNh
bGwoKS0+YWRkcmVzc0ZvckNhbGwoKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0
ciA9CisgICAgICAgIGNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2Fs
bCgpLT5hZGRyZXNzRm9yQ2FsbCgKKyAgICAgICAgICAgIEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCwg
cmVnaXN0ZXJzKTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKICAgICBpZiAoY2Fs
bGVlLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpCkBAIC04MDQsNyArODI1LDcgQEAg
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZQogICAgIGNoYXIqIHJlc3Vs
dCA9IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIGNhbGxl
ZUFzRnVuY3Rpb25DZWxsKTsKICAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWND
YWxsZWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oZXhlY0Nh
bGxlZS0+cmV0dXJuUEMoKSk7CiAKLSAgICBpZiAoIWF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNh
bGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNGdW5jdGlvbkNlbGwsIGNhbGxMaW5rSW5mbykpCisgICAg
aWYgKCFhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKGV4ZWNDYWxsZWUsIFJlZ2lzdGVyUHJl
c2VydmF0aW9uTm90UmVxdWlyZWQsIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBjYWxsTGlua0luZm8p
KQogICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIENvZGVGb3JD
YWxsKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtODEyLDE0ICs4MzMsMzUgQEAgY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZQogCiBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKIHsgICAgCi0g
ICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwpOworICAgIHJldHVy
biB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNlcnZhdGlv
bk5vdFJlcXVpcmVkKTsKIH0KIAogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFs
Q29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKIHsKLSAgICByZXR1cm4gdmlydHVhbEZv
cihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICByZXR1cm4gdmlydHVhbEZvcihl
eGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVp
cmVkKTsKIH0KIAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxU
aGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7CisgICAgSlNDZWxsKiBj
YWxsZWVBc0Z1bmN0aW9uQ2VsbDsKKyAgICBjaGFyKiByZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1
bmN0aW9uKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Cisg
ICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgp
LT5jb2RlQmxvY2soKS0+Z2V0Q2FsbExpbmtJbmZvKGV4ZWNDYWxsZWUtPnJldHVyblBDKCkpOwor
CisgICAgaWYgKCFhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKGV4ZWNDYWxsZWUsIE11c3RQ
cmVzZXJ2ZVJlZ2lzdGVycywgY2FsbGVlQXNGdW5jdGlvbkNlbGwsIGNhbGxMaW5rSW5mbykpCisg
ICAgICAgIGxpbmtTbG93Rm9yKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwp
OworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVmlydHVhbENhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUp
Cit7ICAgIAorICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBN
dXN0UHJlc2VydmVSZWdpc3RlcnMpOworfQorCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blZpcnR1YWxDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUp
Cit7CisgICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCwg
TXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKK30KIAogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ax
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsMTEg
KzIxMywxNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWCiB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsK
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RG
X0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsRXZh
bChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVS
TkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUq
KSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25z
dHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqKSBX
VEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2Fs
bFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUq
KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25z
dHJ1Y3RUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVncyhFeGVj
U3RhdGUqKSBXVEZfSU5URVJOQUw7CisKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVMZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RG
X0lOVEVSTkFMOwogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsK
IHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwpAQCAtMjc5LDYg
KzI4NSw2OCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShFCiAKIH0g
Ly8gZXh0ZXJuICJDIgogCitpbmxpbmUgUF9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb25MaW5rRm9y
KAorICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25N
b2RlIHJlZ2lzdGVycykKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIENvZGVGb3JD
YWxsOgorICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAgICBjYXNlIFJlZ2lzdGVy
UHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uTGlu
a0NhbGw7CisgICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbkxpbmtDYWxsVGhhdFByZXNlcnZlc1JlZ3M7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICBzd2l0Y2gg
KHJlZ2lzdGVycykgeworICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWly
ZWQ6CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uTGlua0NvbnN0cnVjdDsKKyAgICAgICAg
Y2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
TGlua0NvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAw
OworfQorCitpbmxpbmUgUF9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb25WaXJ0dWFsRm9yKAorICAg
IENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJl
Z2lzdGVycykKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIENvZGVGb3JDYWxsOgor
ICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uVmlydHVhbENh
bGw7CisgICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblZpcnR1YWxDYWxsVGhhdFByZXNlcnZlc1JlZ3M7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICBzd2l0Y2gg
KHJlZ2lzdGVycykgeworICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWly
ZWQ6CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdDsKKyAgICAg
ICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0
aW9uVmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiAwOworfQorCitpbmxpbmUgUF9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb25MaW5rQ2xvc3Vy
ZUNhbGxGb3IoUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sKKyAgICBzd2l0
Y2ggKHJlZ2lzdGVycykgeworICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJl
ZDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbDsKKyAgICBjYXNlIE11
c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkxpbmtDbG9zdXJl
Q2FsbFRoYXRQcmVzZXJ2ZXNSZWdzOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
UHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclByZXNl
cnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5l
cmF0b3IuaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJBc3NlbWJseUhlbHBlcnMu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmF0ZVdy
YXBwZXIoVk0mIHZtLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFyZ2V0KQoreworI2lmIEVOQUJM
RShGVExfSklUKQorICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNh
bGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAKKyAgICAvLyBObyBuZWVkIHRvIHByZXNlcnZlIEZQ
IHNpbmNlIHRoYXQgYWx3YXlzIGdldHMgcHJlc2VydmVkIGFueXdheS4KKyAgICBjYWxsZWVTYXZl
cy5jbGVhcihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgCisgICAgdW5zaWduZWQg
bnVtYmVyT2ZDYWxsZWVTYXZlcyA9IGNhbGxlZVNhdmVzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCk7
CisgICAgCisgICAgLy8gTmVlZCB0byBwcmVzZXJ2ZSB0aGUgb2xkIHJldHVybiBQQy4KKyAgICB1
bnNpZ25lZCBudW1iZXJPZlZhbHVlc1RvU2F2ZSA9IG51bWJlck9mQ2FsbGVlU2F2ZXMgKyAxOwor
ICAgIAorICAgIC8vIEFsaWdubWVudC4gUHJlc2VydmUgdGhlIHNhbWUgYWxpZ25tZW50IGludmFy
aWFudHMgdGhhdCB0aGUgY2FsbGVyIGltcG9zZWQuCisgICAgdW5zaWduZWQgbnVtYmVyT2ZOZXdT
dGFja1Nsb3RzID0KKyAgICAgICAgcm91bmRVcFRvTXVsdGlwbGVPZihudW1iZXJPZlZhbHVlc1Rv
U2F2ZSwgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSk7CisgICAgCisgICAgQXNzZW1ibHlIZWxw
ZXJzIGppdDsKKyAgICAKKyAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQ
UkluZm86OnJlZ1QxKTsKKyAgICBqaXQubG9hZDMyKAorICAgICAgICBBc3NlbWJseUhlbHBlcnM6
OkFkZHJlc3MoCisgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyLAorICAgICAgICAgICAgKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgLSBKU1N0YWNrOjpDYWxs
ZXJGcmFtZUFuZFBDU2l6ZSkgKiBzaXplb2YoUmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNldCksCisg
ICAgICAgIEdQUkluZm86OnJlZ1QyKTsKKyAgICAKKyAgICAvLyBQbGFjZSB0aGUgc3RhY2sgcG9p
bnRlciB3aGVyZSB3ZSB3YW50IGl0IHRvIGJlLgorICAgIHNpemVfdCBvZmZzZXQgPSBzaXplb2Yo
UmVnaXN0ZXIpICogbnVtYmVyT2ZOZXdTdGFja1Nsb3RzOworICAgIGppdC5zdWJQdHIoQXNzZW1i
bHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIob2Zmc2V0KSwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgCisgICAgLy8gQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIHRoaW5n
cyB3ZSB3aWxsIGJlIGNvcHlpbmcuCisgICAgaml0LmFkZDMyKAorICAgICAgICBBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW0zMigKKyAgICAgICAgICAgIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
clNpemUgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSksCisgICAgICAgIEdQUkluZm86
OnJlZ1QyKTsKKworICAgIEFTU0VSVCghY2FsbGVlU2F2ZXMuZ2V0KEdQUkluZm86OnJlZ1Q0KSk7
CisgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BS
SW5mbzo6cmVnVDQpOworICAgIAorICAgIEFzc2VtYmx5SGVscGVyczo6TGFiZWwgbG9vcCA9IGpp
dC5sYWJlbCgpOworICAgIGppdC5zdWIzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigx
KSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1Q0LCBvZmZzZXQpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgaml0LnN0
b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1Q0KTsKKyAgICBqaXQuYWRkUHRyKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6
cmVnVDQpOworICAgIGppdC5icmFuY2hUZXN0MzIoQXNzZW1ibHlIZWxwZXJzOjpOb25aZXJvLCBH
UFJJbmZvOjpyZWdUMikubGlua1RvKCZqaXQsIGxvb3ApOworCisgICAgLy8gQXQgdGhpcyBwb2lu
dCByZWdUNCArIG9mZnNldCBwb2ludHMgdG8gd2hlcmUgd2Ugc2F2ZSB0aGluZ3MuCisgICAgc2l6
ZV90IGN1cnJlbnRPZmZzZXQgPSBvZmZzZXQ7CisgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJl
Z1QxLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDQsIGN1cnJlbnRPZmZz
ZXQpKTsKKyAgICAKKyAgICBmb3IgKEdQUlJlZyBncHIgPSBBc3NlbWJseUhlbHBlcnM6OmZpcnN0
UmVnaXN0ZXIoKTsgZ3ByIDw9IEFzc2VtYmx5SGVscGVyczo6bGFzdFJlZ2lzdGVyKCk7IGdwciA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oZ3ByICsgMSkpIHsKKyAgICAgICAgY3VycmVudE9mZnNldCAr
PSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICBqaXQuc3RvcmU2NChncHIsIEFzc2VtYmx5SGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUNCwgb2Zmc2V0KSk7CisgICAgfQorICAgIAorICAg
IC8vIEFzc3VtZSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgc2F2ZWQgRlAgcmVnaXN0ZXJzLgorCisg
ICAgQXNzZW1ibHlIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAKKyAg
ICAvLyBXZSBuZWVkIHRvIHBsYWNlIHRoZSBzdGFjayBwb2ludGVyIGJhY2sgdG8gd2hlcmUgdGhl
IGNhbGxlciB0aG91Z2h0IHRoZXkgbGVmdCBpdC4KKyAgICAvLyBCdXQgYWxzbywgaW4gb3JkZXIg
dG8gcmVjb3ZlciB0aGUgcmVnaXN0ZXJzLCB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGJpZyB0
aGUKKyAgICAvLyBhcmd1bWVudHMgYXJlYSBpcy4KKyAgICAKKyAgICBqaXQubG9hZDMyKAorICAg
ICAgICBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBBc3NlbWJseUhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLAorICAgICAgICAgICAgKEpTU3RhY2s6OkFyZ3VtZW50
Q291bnQgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSkgKiBzaXplb2YoUmVnaXN0ZXIp
ICsgUGF5bG9hZE9mZnNldCksCisgICAgICAgIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQubHNo
aWZ0MzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMyksIEdQUkluZm86OnJlZ1QyKTsK
KyAgICAKKyAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKG9mZnNl
dCksIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGppdC5hZGRQ
dHIoQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDIp
OworICAgIAorICAgIC8vIHJlZ1QyIG5vdyBwb2ludHMgdG8gKEpTU3RhY2s6OkNhbGxGcmFtZUhl
YWRlclNpemUgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSkKKyAgICAvLyBzaG9ydCBv
ZiB3aGVyZSB0aGluZ3MgYXJlIHNhdmVkLgorICAgIHNpemVfdCBjdXJyZW50T2Zmc2V0ID0gSlNT
dGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXpl
OworICAgIGppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdU
MiwgY3VycmVudE9mZnNldCksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAKKyAgICBmb3IgKEdQUlJl
ZyBncHIgPSBBc3NlbWJseUhlbHBlcnM6OmZpcnN0UmVnaXN0ZXIoKTsgZ3ByIDw9IEFzc2VtYmx5
SGVscGVyczo6bGFzdFJlZ2lzdGVyKCk7IGdwciA9IHN0YXRpY19jYXN0PEdQUlJlZz4oZ3ByICsg
MSkpIHsKKyAgICAgICAgY3VycmVudE9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAg
ICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUNCwgb2Zm
c2V0KSwgZ3ByKTsKKyAgICB9CisgICAgCisgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDEpOwor
ICAgIAorICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgJmppdCk7CisgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGwsIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkpOworICAgIAorICAgIHJldHVy
biBGSU5BTElaRV9ERkdfQ09ERShsaW5rQnVmZmVyLCAoIlJlZ2lzdGVyIHByZXNlcnZhdGlvbiB3
cmFwcGVyIGZvciAlcCIsIHRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisjZWxzZSAvLyBF
TkFCTEUoRlRMX0pJVCkKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IG5vbi1GVEwgYnVpbGRzIGZv
ciB0d28gcmVhc29uczoKKyAgICAvLyAtIEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IGN1cnJlbnRs
eSBvbmx5IHRoZSBGVEwgYm90dG9tcyBvdXQgaW4gdGhpcyBjb2RlLgorICAgIC8vIC0gVGhlIGNv
ZGUgYWJvdmUgdXNlcyA2NC1iaXQgaW5zdHJ1Y3Rpb25zLiBJdCBkb2Vzbid0IG5lY2Vzc2FyaWx5
IGhhdmUgdG87IGl0IHdvdWxkIGJlCisgICAgLy8gICBlYXN5IHRvIGNoYW5nZSBpdCBzbyB0aGF0
IGl0IGRvZXNuJ3QuIEJ1dCBvYnZpb3VzbHkgbWFraW5nIHRoYXQgY2hhbmdlIHdvdWxkIGJlIGEK
KyAgICAvLyAgIHByZXJlcXVpc2l0ZSB0byByZW1vdmluZyB0aGlzICNpZi4KKyAgICBVTlJFQUNI
QUJMRV9GT1JfUExBVEZPUk0oKTsKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJQcmVzZXJ2
YXRpb25XcmFwcGVyR2VuZXJhdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0
b3JfaAorI2RlZmluZSBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3JfaAorCisj
aWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorI2lu
Y2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
Z2VuZXJhdGVXcmFwcGVyKFZNJiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHRhcmdldCk7CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIFJl
Z2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4MCwxMSArMTM4
MCwxMSBAQCB2b2lkIGxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhCiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKICNlbmRpZgotICAgIHN0dWJK
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMik7Cisg
ICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUMik7
CiAgICAgCiAgICAgLy8gRklYTUU6IENTdGFjayAtIFRoaW5rIHRoZSByZXN0b3JlUmV0dXJuQWRk
cmVzc0JlZm9yZVJldHVybigpIGluc3RydWN0aW9uIHNob3VsZCBiZSBhIHBva2UKICAgICBzdHVi
Sml0LmJyZWFrcG9pbnQoKTsKLSAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3Jl
UmV0dXJuKEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFk
ZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDIpOwogICAgIEFzc2VtYmx5SGVscGVyczo6
SnVtcCBzbG93ID0gc3R1YkppdC5qdW1wKCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdm0sICZzdHViSml0LCBjYWxsZXJDb2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMTYwNjIyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAogfQogCiBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JUaHVua0dlbmVyYXRvcigKLSAgICBW
TSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICBWTSogdm0sIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykK
IHsKICAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrIG9yIGluIHRoZSBs
aW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhlbmNlCiAgICAgLy8gc2F2ZSB0aGUgcmV0dXJuIGFkZHJl
c3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hpbGUgd2UgbWFrZSBhIEMrKyBmdW5jdGlvbiBjYWxsCkBA
IC0xMDksMzggKzEwOSw1OSBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JU
aHVuCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CiAgICAgCi0gICAgc2xvd1BhdGhG
b3Ioaml0LCB2bSwga2luZCA9PSBDb2RlRm9yQ2FsbCA/IG9wZXJhdGlvbkxpbmtDYWxsIDogb3Bl
cmF0aW9uTGlua0NvbnN0cnVjdCk7CisgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9u
TGlua0ZvcihraW5kLCByZWdpc3RlcnMpKTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09E
RSgKICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiTGluayAlcyBzbG93IHBhdGggdGh1
bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDogImNvbnN0cnVjdCIpKTsKKyAgICAg
ICAgKCJMaW5rICVzJXMgc2xvdyBwYXRoIHRodW5rIiwga2luZCA9PSBDb2RlRm9yQ2FsbCA/ICJj
YWxsIiA6ICJjb25zdHJ1Y3QiLCByZWdpc3RlcnMgPT0gTXVzdFByZXNlcnZlUmVnaXN0ZXJzID8g
IiB0aGF0IHByZXNlcnZlcyByZWdpc3RlcnMiIDogIiIpKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBsaW5r
Rm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsKTsKKyAgICByZXR1cm4gbGlua0ZvclRo
dW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ2FsbCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1
cmllZCk7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0VGh1bmtHZW5l
cmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENv
ZGVGb3JDb25zdHJ1Y3QpOworICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENv
ZGVGb3JDb25zdHJ1Y3QsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdXJpZWQpOwogfQogCi0v
LyBGb3IgY2xvc3VyZSBvcHRpbWl6YXRpb25zLCB3ZSBvbmx5IGluY2x1ZGUgY2FsbHMsIHNpbmNl
IGlmIHlvdSdyZSB1c2luZyBjbG9zdXJlcyBmb3IKLS8vIG9iamVjdCBjb25zdHJ1Y3Rpb24gdGhl
biB5b3UncmUgZ29pbmcgdG8gbG9zZSBiaWcgdGltZSBhbnl3YXkuCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGxpbmtDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSogdm0p
Cit7CisgICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNhbGwsIE11
c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29u
c3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSogdm0pCit7CisgICAgcmV0
dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCwgTXVzdFByZXNl
cnZlUmVnaXN0ZXJzKTsKK30KKworc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xv
c3VyZUNhbGxGb3JUaHVua0dlbmVyYXRvcigKKyAgICBWTSogdm0sIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CiAgICAgCi0g
ICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKTsKKyAgICBz
bG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxGb3IocmVnaXN0ZXJz
KSk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9U
SFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiTGluayBj
bG9zdXJlIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCAoIkxpbmsgY2xvc3VyZSBjYWxsICVzIHNsb3cgcGF0aCB0aHVuayIsIHJl
Z2lzdGVycyA9PSBNdXN0UHJlc2VydmVSZWdpc3RlcnMgPyAiIHRoYXQgcHJlc2VydmVzIHJlZ2lz
dGVycyIgOiAiIikpOworfQorCisvLyBGb3IgY2xvc3VyZSBvcHRpbWl6YXRpb25zLCB3ZSBvbmx5
IGluY2x1ZGUgY2FsbHMsIHNpbmNlIGlmIHlvdSdyZSB1c2luZyBjbG9zdXJlcyBmb3IKKy8vIG9i
amVjdCBjb25zdHJ1Y3Rpb24gdGhlbiB5b3UncmUgZ29pbmcgdG8gbG9zZSBiaWcgdGltZSBhbnl3
YXkuCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3Io
Vk0qIHZtKQoreworICAgIHJldHVybiBsaW5rQ2xvc3VyZUNhbGxGb3JUaHVua0dlbmVyYXRvcih2
bSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1cmllZCk7Cit9CisKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKFZN
KiB2bSkKK3sKKyAgICByZXR1cm4gbGlua0Nsb3N1cmVDYWxsRm9yVGh1bmtHZW5lcmF0b3Iodm0s
IE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CiB9CiAKIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKAotICAgIFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQorICAgIFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBS
ZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewogICAgIC8vIFRoZSBjYWxsZWUg
aXMgaW4gcmVnVDAgKGZvciBKU1ZBTFVFMzJfNjQsIHRoZSB0YWcgaXMgaW4gcmVnVDEpLgogICAg
IC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUgc3RhY2ssIG9yIGluIHRoZSBsaW5rIHJl
Z2lzdGVyLiBXZSB3aWxsIGhlbmNlCkBAIC0xNTUsMzMgKzE3NiwzNCBAQCBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUCiAgICAgLy8gdGhlIERGRyBrbm93cyB0aGF0IHRo
ZSB2YWx1ZSBpcyBkZWZpbml0ZWx5IGEgY2VsbCwgb3IgZGVmaW5pdGVseSBhIGZ1bmN0aW9uLgog
ICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KFRhZ01h
c2spLCBHUFJJbmZvOjpyZWdUMik7CisgICAgCiAgICAgc2xvd0Nhc2UuYXBwZW5kKAogICAgICAg
ICBqaXQuYnJhbmNoVGVzdDY0KAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBH
UFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMikpOwog
I2Vsc2UKICAgICBzbG93Q2FzZS5hcHBlbmQoCiAgICAgICAgIGppdC5icmFuY2gzMigKICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QxLAogICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKICNlbmRp
ZgotICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QyKTsKICAgICBzbG93Q2FzZS5hcHBlbmQo
CiAgICAgICAgIGppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQ
UjIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgp
KSwKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihKU0Z1bmN0aW9uOjpp
bmZvKCkpKSk7CiAgICAgCiAgICAgLy8gTm93IHdlIGtub3cgd2UgaGF2ZSBhIEpTRnVuY3Rpb24u
CiAgICAgCiAgICAgaml0LmxvYWRQdHIoCiAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLAotICAgICAg
ICBHUFJJbmZvOjpub25BcmdHUFIyKTsKLSAgICBzbG93Q2FzZS5hcHBlbmQoCi0gICAgICAgIGpp
dC5icmFuY2gzMigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGVzc1RoYW4sCi0gICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgR1BSSW5mbzo6bm9u
QXJnR1BSMiwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mTnVtUGFyYW1ldGVyc0ZvcihraW5kKSks
Ci0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICBH
UFJJbmZvOjpyZWdUMik7CisgICAgaml0LmxvYWRQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OnJlZ1QyLCBFeGVjdXRhYmxlQmFzZTo6b2Zm
c2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCwgcmVnaXN0ZXJzKSksCisgICAgICAg
IEdQUkluZm86OnJlZ1QyKTsKKyAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3RQdHIo
Q0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMikpOwogICAgIAogICAgIC8vIE5vdyB3
ZSBrbm93IHRoYXQgd2UgaGF2ZSBhIENvZGVCbG9jaywgYW5kIHdlJ3JlIGNvbW1pdHRlZCB0byBt
YWtpbmcgYSBmYXN0CiAgICAgLy8gY2FsbC4KQEAgLTIxMCwzNCArMjMyLDQwIEBAIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZvclQKICAgICAgICAgICAgIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogI2VuZGlmCiAgICAg
Ci0gICAgaml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
Ojpub25BcmdHUFIyLCBFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hl
Y2tGb3Ioa2luZCkpLAotICAgICAgICBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgCiAgICAgLy8gTWFr
ZSBhIHRhaWwgY2FsbC4gVGhpcyB3aWxsIHJldHVybiBiYWNrIHRvIEpJVCBjb2RlLgotICAgIGVt
aXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1QwKTsKLSAgICBqaXQuanVtcChH
UFJJbmZvOjpyZWdUMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6
cmVnVDIpOworICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QyKTsKIAogICAgIHNsb3dDYXNlLmxp
bmsoJmppdCk7CiAgICAgCiAgICAgLy8gSGVyZSB3ZSBkb24ndCBrbm93IGFueXRoaW5nLCBzbyBy
ZXZlcnQgdG8gdGhlIGZ1bGwgc2xvdyBwYXRoLgogICAgIAotICAgIHNsb3dQYXRoRm9yKGppdCwg
dm0sIGtpbmQgPT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25WaXJ0dWFsQ2FsbCA6IG9wZXJhdGlv
blZpcnR1YWxDb25zdHJ1Y3QpOworICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvblZp
cnR1YWxGb3Ioa2luZCwgcmVnaXN0ZXJzKSk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUoCiAgICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIlZpcnR1YWwgJXMgc2xvdyBwYXRo
IHRodW5rIiwga2luZCA9PSBDb2RlRm9yQ2FsbCA/ICJjYWxsIiA6ICJjb25zdHJ1Y3QiKSk7Cisg
ICAgICAgICgiVmlydHVhbCAlcyVzIHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZvckNh
bGwgPyAiY2FsbCIgOiAiY29uc3RydWN0IiwgcmVnaXN0ZXJzID09IE11c3RQcmVzZXJ2ZVJlZ2lz
dGVycyA/ICIgdGhhdCBwcmVzZXJ2ZXMgcmVnaXN0ZXJzIiA6ICIiKSk7CiB9CiAKIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICBy
ZXR1cm4gdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ2FsbCk7CisgICAgcmV0
dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNhbGwsIFJlZ2lzdGVyUHJl
c2VydmF0aW9uTm90UmVxdXJpZWQpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVh
bENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gdmlydHVhbEZv
clRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICByZXR1cm4gdmlydHVh
bEZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ29uc3RydWN0LCBSZWdpc3RlclByZXNlcnZh
dGlvbk5vdFJlcXVyaWVkKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxs
VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSogdm0pCit7CisgICAgcmV0dXJuIHZp
cnR1YWxGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNhbGwsIE11c3RQcmVzZXJ2ZVJlZ2lz
dGVycyk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGhhdFBy
ZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSogdm0pCit7CisgICAgcmV0dXJuIHZpcnR1YWxG
b3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCwgTXVzdFByZXNlcnZlUmVnaXN0
ZXJzKTsKIH0KIAogZW51bSBUaHVua0VudHJ5VHlwZSB7IEVudGVyVmlhQ2FsbCwgRW50ZXJWaWFK
dW1wIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmgJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtH
ZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwxNiBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tCiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBs
aW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nv
bnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nh
bGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbGlua0NvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qKTsK
IAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKFZN
Kik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1Jl
Z3NUaHVua0dlbmVyYXRvcihWTSopOwogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENh
bGxUaHVua0dlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25z
dHJ1Y3RUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxD
YWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKFZN
Kik7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZNKik7CiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcml0eUNoZWNrTW9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyaXR5Q2hlY2tNb2RlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcml0eUNoZWNrTW9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBcml0eUNoZWNrTW9kZV9oCisjZGVm
aW5lIEFyaXR5Q2hlY2tNb2RlX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gQXJpdHlDaGVj
a01vZGUgeworICAgIEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCwKKyAgICBNdXN0Q2hlY2tBcml0eQor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcml0eUNoZWNrTW9kZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShy
ZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDEyICsxMTgsMTQgQEAgdm9pZCBTY3JpcHRF
eGVjdXRhYmxlOjppbnN0YWxsQ29kZShDb2RlQgogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNh
c2UgQ29kZUZvckNhbGw6CiAgICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBnZW5lcmljQ29kZUJs
b2NrLT5qaXRDb2RlKCk7Ci0gICAgICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9
IGdlbmVyaWNDb2RlQmxvY2stPmppdENvZGVXaXRoQXJpdHlDaGVjaygpOworICAgICAgICBtX2pp
dENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAg
ICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdzID0gTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKCk7CiAgICAgICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBn
ZW5lcmljQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQ29kZUZvckNvbnN0cnVjdDoKICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gZ2Vu
ZXJpY0NvZGVCbG9jay0+aml0Q29kZSgpOwotICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RX
aXRoQXJpdHlDaGVjayA9IGdlbmVyaWNDb2RlQmxvY2stPmppdENvZGVXaXRoQXJpdHlDaGVjaygp
OworICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cigpOworICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlD
aGVja0FuZFByZXNlcnZlUmVncyA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwogICAgICAgICBt
X251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3QgPSBnZW5lcmljQ29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEzMyw3ICsxMzUsNiBAQCB2b2lkIFNj
cmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKENvZGVCCiAgICAgICAgIFByb2dyYW1FeGVjdXRh
YmxlKiBleGVjdXRhYmxlID0ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyk7CiAgICAg
ICAgIFByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PFByb2dyYW1Db2Rl
QmxvY2sqPihnZW5lcmljQ29kZUJsb2NrKTsKICAgICAgICAgCi0gICAgICAgIEFTU0VSVCghY29k
ZUJsb2NrLT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2soKSk7CiAgICAgICAgIEFTU0VSVChraW5kID09
IENvZGVGb3JDYWxsKTsKICAgICAgICAgCiAgICAgICAgIG9sZENvZGVCbG9jayA9IGV4ZWN1dGFi
bGUtPm1fcHJvZ3JhbUNvZGVCbG9jazsKQEAgLTE0NSw3ICsxNDYsNiBAQCB2b2lkIFNjcmlwdEV4
ZWN1dGFibGU6Omluc3RhbGxDb2RlKENvZGVCCiAgICAgICAgIEV2YWxFeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyk7CiAgICAgICAgIEV2YWxDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PEV2YWxDb2RlQmxvY2sqPihnZW5lcmljQ29k
ZUJsb2NrKTsKICAgICAgICAgCi0gICAgICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlV2l0
aEFyaXR5Q2hlY2soKSk7CiAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKICAg
ICAgICAgCiAgICAgICAgIG9sZENvZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fZXZhbENvZGVCbG9j
azsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJl
dmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBFeGVjdXRhYmxl
X2gKICNkZWZpbmUgRXhlY3V0YWJsZV9oCiAKKyNpbmNsdWRlICJBcml0eUNoZWNrTW9kZS5oIgog
I2luY2x1ZGUgIkNhbGxEYXRhLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrSGFzaC5oIgogI2luY2x1
ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKQEAgLTM2LDYgKzM3LDcgQEAKICNpbmNsdWRl
ICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJKU0dsb2Jh
bE9iamVjdC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oIgogI2luY2x1
ZGUgIlNhbXBsaW5nVG9vbC5oIgogI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJV
bmxpbmtlZENvZGVCbG9jay5oIgpAQCAtMTQ0LDM3ICsxNDYsOTQgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKICAgICAgICAgcmV0dXJuIGdlbmVy
YXRlZEpJVENvZGVGb3JDb25zdHJ1Y3QoKTsKICAgICB9Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgZ2VuZXJhdGVkSklUQ29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaygpCi0gICAgewotICAg
ICAgICBBU1NFUlQobV9qaXRDb2RlRm9yQ2FsbCk7Ci0gICAgICAgIEFTU0VSVChtX2ppdENvZGVG
b3JDYWxsV2l0aEFyaXR5Q2hlY2spOwotICAgICAgICByZXR1cm4gbV9qaXRDb2RlRm9yQ2FsbFdp
dGhBcml0eUNoZWNrOwotICAgIH0KLQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZW5lcmF0
ZWRKSVRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2soKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKG1faml0Q29kZUZvckNvbnN0cnVjdCk7Ci0gICAgICAgIEFTU0VSVChtX2ppdENvZGVGb3JD
b25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7Ci0gICAgICAgIHJldHVybiBtX2ppdENvZGVGb3JDb25z
dHJ1Y3RXaXRoQXJpdHlDaGVjazsKLSAgICB9Ci0gICAgICAgIAotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBnZW5lcmF0ZWRKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3IoQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0g
ICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVkSklUQ29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaygp
OwotICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICAgICAgcmV0
dXJuIGdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaygpOwotICAgIH0K
LSAgICAgICAgCi0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlD
aGVja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgCisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGVudHJ5cG9pbnRGb3IoCisgICAgICAgIFZNJiB2bSwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kLCBBcml0eUNoZWNrTW9kZSBhcml0eSwgUmVnaXN0ZXJQcmVzZXJ2YXRp
b25Nb2RlIHJlZ2lzdGVycykKICAgICB7Ci0gICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxs
KQotICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9q
aXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKLSAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29k
ZUZvckNvbnN0cnVjdCk7Ci0gICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJs
ZUJhc2UsIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgLy8g
Q2hlY2sgaWYgd2UgaGF2ZSBhIGNhY2hlZCByZXN1bHQuIFdlIG9ubHkgaGF2ZSBpdCBmb3IgYXJp
dHkgY2hlY2sgYmVjYXVzZSB3ZSB1c2UgdGhlCisgICAgICAgIC8vIG5vLWFyaXR5IGVudHJ5cG9p
bnQgaW4gbm9uLXZpcnR1YWwgY2FsbHMsIHdoaWNoIHdpbGwgImNhY2hlIiB0aGlzIHZhbHVlIGRp
cmVjdGx5IGluCisgICAgICAgIC8vIG1hY2hpbmUgY29kZS4KKyAgICAgICAgaWYgKGFyaXR5ID09
IE11c3RDaGVja0FyaXR5KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAg
ICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAgICAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMp
IHsKKyAgICAgICAgICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6
CisgICAgICAgICAgICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0g
bV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIChN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0gbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNo
ZWNrQW5kUHJlc2VydmVSZWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAg
ICAgICAgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgICAgICAgICAgY2FzZSBS
ZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgICAgICAgICBpZiAo
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhB
cml0eUNoZWNrKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVS
ZWdpc3RlcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
cmVzdWx0ID0gbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJl
Z3MpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IHJlc3VsdCA9CisgICAgICAgICAgICBnZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNz
Rm9yQ2FsbCh2bSwgYXJpdHksIHJlZ2lzdGVycyk7CisgICAgICAgIGlmIChhcml0eSA9PSBNdXN0
Q2hlY2tBcml0eSkgeworICAgICAgICAgICAgLy8gQ2FjaGUgdGhlIHJlc3VsdDsgdGhpcyBpcyBu
ZWNlc3NhcnkgZm9yIHRoZSBKSVQncyB2aXJ0dWFsIGNhbGwgb3B0aW1pemF0aW9ucy4KKyAgICAg
ICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICAgICAgY2FzZSBDb2RlRm9yQ2FsbDoKKyAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAgICAgICAgICAgIGNhc2Ug
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgICAgICAgICAgbV9q
aXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAg
ICAgICAgICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrQW5kUHJlc2Vy
dmVSZWdzID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENvZGVGb3JD
b25zdHJ1Y3Q6CisgICAgICAgICAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAg
ICAgICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gcmVzdWx0Owor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE11c3RQcmVz
ZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0
V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3MgPSByZXN1bHQ7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3IoCisg
ICAgICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25N
b2RlIHJlZ2lzdGVycykKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBj
YXNlIENvZGVGb3JDYWxsOgorICAgICAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAg
ICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVCYXNlLCBtX2ppdENvZGVGb3JD
YWxsV2l0aEFyaXR5Q2hlY2spOworICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3Rl
cnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlQmFz
ZSwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdzKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICAgICAgc3dp
dGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25O
b3RSZXF1aXJlZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1
dGFibGVCYXNlLCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7CisgICAgICAg
ICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAgICAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVCYXNlLCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRo
QXJpdHlDaGVja0FuZFByZXNlcnZlUmVncyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQotICAgICAgICAKKyAgICAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFy
YW1ldGVyc0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgewogICAgICAgICBp
ZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKQEAgLTIxMSwyMSArMjcwLDYgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gTm9JbnRyaW5zaWM7CiAgICAgfQogICAgICAgICAKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgaG9zdENvZGVFbnRyeUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
Ci0gICAgewotICAgICAgICByZXR1cm4gZ2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVz
c0ZvckNhbGwoKTsKLSAgICB9Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIganNDb2RlRW50
cnlGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKCk7Ci0gICAgfQotCi0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGpzQ29kZVdpdGhBcml0eUNoZWNrRW50cnlGb3IoQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRl
ZEpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKTsKLSAgICB9Ci0KIHByb3RlY3RlZDoKICAg
ICBFeGVjdXRhYmxlQmFzZSogbV9wcmV2OwogICAgIEV4ZWN1dGFibGVCYXNlKiBtX25leHQ7CkBA
IC0yMzQsNiArMjc4LDggQEAgcHJvdGVjdGVkOgogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENv
ZGVGb3JDb25zdHJ1Y3Q7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZUZvckNh
bGxXaXRoQXJpdHlDaGVjazsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRDb2RlRm9y
Q29uc3RydWN0V2l0aEFyaXR5Q2hlY2s7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0
Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVja0FuZFByZXNlcnZlUmVnczsKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2
ZVJlZ3M7CiB9OwogCiBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlIDogcHVibGljIEV4ZWN1dGFibGVC
YXNlIHsKQEAgLTI4OCw4ICszMzQsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIFBhc3NSZWZQdHI8SklUQ29kZT4gY2FsbFRodW5rLCBQYXNzUmVmUHRyPEpJ
VENvZGU+IGNvbnN0cnVjdFRodW5rLCBJbnRyaW5zaWMgaW50cmluc2ljKQogICAgIHsKICAgICAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICBtX2ppdENvZGVGb3JDYWxsV2l0
aEFyaXR5Q2hlY2sgPSBjYWxsVGh1bmsgPyBjYWxsVGh1bmstPmFkZHJlc3NGb3JDYWxsKCkgOiBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKLSAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0
aEFyaXR5Q2hlY2sgPSBjb25zdHJ1Y3RUaHVuayA/IGNvbnN0cnVjdFRodW5rLT5hZGRyZXNzRm9y
Q2FsbCgpIDogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CiAgICAgICAgIG1faml0Q29kZUZvckNh
bGwgPSBjYWxsVGh1bms7CiAgICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IGNvbnN0cnVj
dFRodW5rOwogICAgICAgICBtX2ludHJpbnNpYyA9IGludHJpbnNpYzsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ2lzdGVyUHJlc2VydmF0aW9u
TW9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
aXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFJl
Z2lzdGVyUHJlc2VydmF0aW9uTW9kZV9oCisjZGVmaW5lIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9k
ZV9oCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSB7
CisgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCwKKyAgICBNdXN0UHJlc2VydmVS
ZWdpc3RlcnMKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25Nb2RlX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219500</attachid>
            <date>2013-12-17 20:25:18 -0800</date>
            <delta_ts>2013-12-17 20:50:44 -0800</delta_ts>
            <desc>maybe it&apos;s done?</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>106982</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNjY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDEzLTEyLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBiZSBhYmxlIHRvIGRvIGNhbGwgSUNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjU4MTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OkNhbGxMaW5rSW5mbyk6Cisg
ICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6bGluayk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICog
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6
CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmZpeEZ1
bmN0aW9uQmFzZWRPblN0YWNrTWFwcyk6CisgICAgICAgICogZnRsL0ZUTElubGluZUNhY2hlU2l6
ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mQ2FsbCk6CisgICAgICAgICogZnRsL0ZU
TElubGluZUNhY2hlU2l6ZS5oOgorICAgICAgICAqIGZ0bC9GVExKU0NhbGwuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OkpTQ2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6
SlNDYWxsOjplbWl0KToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OmxpbmspOgorICAgICAg
ICAqIGZ0bC9GVExKU0NhbGwuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6SlNDYWxsOjpz
dGFja21hcElEKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6Om9wZXJhdG9yPCk6CisgICAg
ICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdCk6CisgICAgICAgICogZnRsL0ZUTFN0
YXRlLmg6CisKIDIwMTMtMTItMTYgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIE1lcmdlZCByMTYwNjY1IGZyb20gdHJ1bmsuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTI2Nyw2ICsyNjcsMTIgQEAKIAkJMEY2NjZFQ0QxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3Vy
cmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQ0IxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVj
dGlvbkZvclZhbGlkYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2Vu
Y3lMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZDMTRERjNGMTYw
MEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkIxQ0I1MTg1RkM5
RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQjMxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5j
cHAgKi87IH07CisJCTBGNkIxQ0I2MTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0I0MTg1RkM5
RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjZCMUNCOTE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlDaGVj
a01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NkIxQ0I3MTg2MTI0NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNrTW9kZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkIxQ0JBMTg2MTI0NEMwMDg0
NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0I4MTg2MTI0NEMwMDg0NUQ5NyAvKiBSZWdp
c3RlclByZXNlcnZhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjZCMUNCRDE4NjEyNDZBMDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0JCMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclBy
ZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwICovOyB9OworCQkwRjZCMUNCRTE4NjEyNDZB
MDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCQzE4NjEyNDZB
MDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3MDI1QTkxNzE0
QjBGQTAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcwMjVBNzE3MTRCMEY4MDAzODJD
MEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCAqLzsgfTsKIAkJMEY3MDI1QUExNzE0
QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MDI1QTgxNzE0QjBGODAwMzgyQzBF
IC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2Fy
ZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLzsgfTsKQEAgLTE1NzksNiArMTU4NSwxMiBAQAogCQkw
RjY2NkVDQjE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBo
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Jlc3VycmVjdGlvbkZv
clZhbGlkYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRp
b25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYzRjEz
MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdBZGphY2VuY3lMaXN0Lmg7IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlzdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQg
LyogREZHRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7
IHBhdGggPSBkZmcvREZHRWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZC
MUNCMzE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbC5jcHA7IHBhdGggPSBmdGwvRlRMSlNDYWxsLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3
IC8qIEZUTEpTQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0Nh
bGwuaDsgcGF0aCA9IGZ0bC9GVExKU0NhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2QjFDQjcxODYxMjQ0QzAwODQ1RDk3IC8qIEFyaXR5Q2hlY2tNb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyaXR5Q2hlY2tNb2RlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNkIxQ0I4MTg2MTI0NEMwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNl
cnZhdGlvbk1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNkIxQ0JC
MTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVnaXN0ZXJQcmVzZXJ2
YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY2QjFDQkMxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdl
bmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWdpc3RlclByZXNl
cnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY3MDI1QTcxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzE0Q0ExMTZFQTkyRUQw
MEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3Bw
OyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjg1OCw2ICsyODcwLDggQEAKIAkJCQkwRkVBMEEwMzE3MDUx
M0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5oICovLAogCQkJCUE3OEE5NzdEMTc5NzM4RDUwMDlE
Rjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuY3BwICovLAogCQkJCUE3OEE5NzdFMTc5NzM4RDUwMDlE
Rjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuaCAqLywKKwkJCQkwRjZCMUNCMzE4NUZDOUU5MDA4NDVE
OTcgLyogRlRMSlNDYWxsLmNwcCAqLywKKwkJCQkwRjZCMUNCNDE4NUZDOUU5MDA4NDVEOTcgLyog
RlRMSlNDYWxsLmggKi8sCiAJCQkJMEY4RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsu
Y3BwICovLAogCQkJCTBGOEYyQjk0MTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmggKi8sCiAJ
CQkJMEZDRUZBREQxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCAqLywKQEAgLTMw
MzIsNiArMzA0Niw4IEBACiAJCQkJMEZDNzEyRTExN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZH
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8sCiAJCQkJQTc2RjU0QTIxM0IyOEFBQjAw
RUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovLAogCQkJCUE3NkM1MTc0MTE4Mjc0OEQwMDcx
NUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovLAorCQkJCTBGNkIxQ0JCMTg2MTI0NkEwMDg0NUQ5
NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwICovLAorCQkJCTBG
NkIxQ0JDMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5l
cmF0b3IuaCAqLywKIAkJCQkwRkMzMTQxNDE4MTQ2RDcwMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQu
Y3BwICovLAogCQkJCTBGQzMxNDEwMTgxNDU1OTEwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5oICov
LAogCQkJCTBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCAqLywKQEAgLTMz
NjksNiArMzM4NSw3IEBACiAJCQkJQTc2MTQwQzgxODI5ODJDQjAwNzUwNjI0IC8qIEFyZ3VtZW50
c0l0ZXJhdG9yQ29uc3RydWN0b3IuaCAqLywKIAkJCQlBNzYxNDBDOTE4Mjk4MkNCMDA3NTA2MjQg
LyogQXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGUuY3BwICovLAogCQkJCUE3NjE0MENBMTgyOTgy
Q0IwMDc1MDYyNCAvKiBBcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZS5oICovLAorCQkJCTBGNkIx
Q0I3MTg2MTI0NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNrTW9kZS5oICovLAogCQkJCUE3QThBRjI1
MTdBREI1RjIwMDVBQjE3NCAvKiBBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJQTdBOEFGMjYxN0FE
QjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggKi8sCiAJCQkJMEZGQzk5RDIxODRFRTMxODAw
OUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgKi8sCkBAIC0zNjY3
LDYgKzM2ODQsNyBAQAogCQkJCUY2OTJBODdDMDI1NTU5N0QwMUZGNjBGNyAvKiBSZWdFeHBPYmpl
Y3QuaCAqLywKIAkJCQlCQ0QyMDJCRjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBl
LmNwcCAqLywKIAkJCQlCQ0QyMDJDMDBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBl
LmggKi8sCisJCQkJMEY2QjFDQjgxODYxMjQ0QzAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTW9kZS5oICovLAogCQkJCTBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAq
LywKIAkJCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAq
LywKIAkJCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8s
CkBAIC00Mzk1LDYgKzQ0MTMsNyBAQAogCQkJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBE
RkdFeGl0UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzUxNzk3MzhCODAwOURG
NzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3Nzcx
Nzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2
QjFDQjYxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQkRDMTYxNTFDNUQ0RjAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGOUQzMzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5o
IGluIEhlYWRlcnMgKi8sCkBAIC00NDMwLDYgKzQ0NDksNyBAQAogCQkJCTBGRDhBMzI2MTdENTFG
NTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRkM5OUQxMTg0RUM4QUQwMDlDMTBBQiAvKiBDb25zdGFudE1vZGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGNkIxQ0JBMTg2MTI0NEMwMDg0NUQ5NyAvKiBSZWdpc3RlclBy
ZXNlcnZhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5
MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RUQxODIz
NDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRp
b25JbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTQ1ODgsNiArNDYwOCw3IEBACiAJCQkJMEY0Njgw
ODIxNEJBNTcyRDAwQkZFMjcyIC8qIEpJVEV4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQjE0RTFGMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZDQzg1QTEwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGluZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGNkIxQ0JFMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3Rl
clByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRF
NTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzkwREQ3MDE4MkY0OTk3MDA1ODg4MDcgLyogSlNTZXRJdGVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyNEU1NEUxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbldyYXBwZXJz
LmggaW4gSGVhZGVycyAqLywKQEAgLTQ2MDMsNiArNDYyNCw3IEBACiAJCQkJMEZDNzEyRTMxN0NE
ODc5MzAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJy
aWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNB
Y3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjZCMUNCOTE4NjEyNDRDMDA4NDVEOTcg
LyogQXJpdHlDaGVja01vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MDQ4MDEzMTAyMUExRDkw
MDhFN0YwMSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJDRjM5
QzIxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc2MTQwRDIxODI5ODJDQjAwNzUwNjI0IC8qIEpTQXJndW1lbnRzSXRlcmF0b3IuaCBp
biBIZWFkZXJzICovLApAQCAtNTQ5NSw2ICs1NTE3LDcgQEAKIAkJCQk4Njg4MEY0RDE0MzUzQjIx
MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
N0Q4OUNGRjE3QTBCOENDMDA3NzNBRDggLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGOUZCNEY0MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91
dFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNkIxQ0JEMTg2MTI0NkEwMDg0NUQ5NyAv
KiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZDMDk3QTExNDZCMjhDQTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmpl
Y3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyOTE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC01NTUxLDYgKzU1NzQsNyBAQAogCQkJCTBGMjVGMUIzMTgxNjM1RjMwMDUyMkYzOSAv
KiBGVExTbG93UGF0aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDMzOUExODAz
QURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVB
MEExNjE3MDZCQjkwMDBCQjcyMkMgLyogRlRMU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEY2QjFDQjUxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjIzNUJFMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMjM1QkUzMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDQjEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25D
b25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNp
b24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDkgKzMwOSwxMCBAQCBwdWJsaWM6
CiAgICAgdm9pZCogZGF0YUxvY2F0aW9uKCkgY29uc3QgeyBBU1NFUlRfVkFMSURfQ09ERV9QT0lO
VEVSKG1fdmFsdWUpOyByZXR1cm4gbV92YWx1ZTsgfQogI2VuZGlmCiAKLSAgICBib29sIG9wZXJh
dG9yISgpIGNvbnN0CisgICAgdHlwZWRlZiB2b2lkKiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjoq
VW5zcGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSoo
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3ZhbHVlOworICAgICAgICByZXR1cm4g
ISFtX3ZhbHVlID8gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oMSkgOiAw
OwogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyJiBvdGhlcikgY29uc3QKQEAgLTQzNCw3ICs0MzUsMTEgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gSlNDOjp0cnlUb0Rpc2Fzc2VtYmxlKG1fY29kZVB0ciwgc2l6ZSgpLCBwcmVmaXgs
IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIW1fY29kZVB0cjsgfQorICAgIHR5cGVkZWYgdm9pZCogKE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOworICAgIG9wZXJhdG9yIFVuc3BlY2lm
aWVkQm9vbFR5cGUqKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhIW1fY29kZVB0ciA/
IHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KDEpIDogMDsKKyAgICB9CiAg
ICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCwxNCArMzgsMTEgQEAgdm9pZCBDYWxsTGlua0lu
Zm86OnVubGluayhWTSYgdm0sIFJlcGF0YwogICAgIEFTU0VSVChpc0xpbmtlZCgpKTsKICAgICAK
ICAgICByZXBhdGNoQnVmZmVyLnJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBh
dGNoKFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGhv
dFBhdGhCZWdpbiksIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihjYWxs
ZWVHUFIpLCAwKTsKLSAgICBpZiAoaXNERkcpIHsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVybkxvY2F0aW9uLCAoY2FsbFR5cGUgPT0g
Q29uc3RydWN0ID8gdm0uZ2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpIDog
dm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKSkuY29kZSgpKTsKLSNlbHNlCi0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICB9IGVsc2UK
LSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVybkxvY2F0aW9uLCBjYWxsVHlw
ZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRv
cikuY29kZSgpIDogdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkp
OworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAorICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24s
CisgICAgICAgIHZtLmdldENUSVN0dWIobGlua1RodW5rR2VuZXJhdG9yRm9yKAorICAgICAgICAg
ICAgY2FsbFR5cGUgPT0gQ29uc3RydWN0ID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxs
LAorICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5jb2RlQmxvY2soKS0+aml0VHlwZSgpID09IEpJ
VENvZGU6OkZUTEpJVCA/IE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyA6IFJlZ2lzdGVyUHJlc2VydmF0
aW9uTm90UmVxdWlyZWQpKS5jb2RlKCkpOwogICAgIGhhc1NlZW5TaG91bGRSZXBhdGNoID0gZmFs
c2U7CiAgICAgY2FsbGVlLmNsZWFyKCk7CiAgICAgc3R1Yi5jbGVhcigpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMTYw
NjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3
b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw2IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBwdWJs
aWMgQmFzaWNSYXdTZW4KICAgICAgICAgCiAgICAgQ2FsbExpbmtJbmZvKCkKICAgICAgICAgOiBo
YXNTZWVuU2hvdWxkUmVwYXRjaChmYWxzZSkKLSAgICAgICAgLCBpc0RGRyhmYWxzZSkKICAgICAg
ICAgLCBoYXNTZWVuQ2xvc3VyZShmYWxzZSkKICAgICAgICAgLCBjYWxsVHlwZShOb25lKQogICAg
IHsKQEAgLTgwLDcgKzc5LDYgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jh
d1NlbgogICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBsYXN0U2VlbkNhbGxlZTsKICAgICBS
ZWZQdHI8Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YjsKICAgICBib29sIGhhc1NlZW5TaG91
bGRSZXBhdGNoIDogMTsKLSAgICBib29sIGlzREZHIDogMTsKICAgICBib29sIGhhc1NlZW5DbG9z
dXJlIDogMTsKICAgICB1bnNpZ25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAgICAgdW5z
aWduZWQgY2FsbGVlR1BSIDogODsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDE3ICsyNTcsMTUg
QEAgcHVibGljOgogICAgIC8vIEV4YWN0bHkgZXF1aXZhbGVudCB0byBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLT5uZXdSZXBsYWNlbWVudENvZGVCbG9ja0Zvcihjb2RlQmxvY2stPnNwZWNp
YWxpemF0aW9uS2luZCgpKQogICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBuZXdSZXBsYWNlbWVu
dCgpOwogICAgIAotICAgIHZvaWQgc2V0SklUQ29kZShQYXNzUmVmUHRyPEpJVENvZGU+IGNvZGUs
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlV2l0aEFyaXR5Q2hlY2spCisgICAgdm9pZCBzZXRK
SVRDb2RlKFBhc3NSZWZQdHI8SklUQ29kZT4gY29kZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCht
X2hlYXAtPmlzRGVmZXJyZWQoKSk7CiAgICAgICAgIG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlD
b3N0KGNvZGUtPnNpemUoKSk7CiAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1f
bG9jayk7CiAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgaXMgcHJvYmFi
bHkgbm90IG5lZWRlZCBiZWNhdXNlIHRoZSBsb2NrIHdpbGwgYWxzbyBkbyBzb21ldGhpbmcgc2lt
aWxhciwgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KICAgICAgICAgbV9qaXRDb2RlID0g
Y29kZTsKLSAgICAgICAgbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2sgPSBjb2RlV2l0aEFyaXR5Q2hl
Y2s7CiAgICAgfQogICAgIFBhc3NSZWZQdHI8SklUQ29kZT4gaml0Q29kZSgpIHsgcmV0dXJuIG1f
aml0Q29kZTsgfQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBqaXRDb2RlV2l0aEFyaXR5Q2hl
Y2soKSB7IHJldHVybiBtX2ppdENvZGVXaXRoQXJpdHlDaGVjazsgfQogICAgIEpJVENvZGU6OkpJ
VFR5cGUgaml0VHlwZSgpIGNvbnN0CiAgICAgewogICAgICAgICBKSVRDb2RlKiBqaXRDb2RlID0g
bV9qaXRDb2RlLmdldCgpOwpAQCAtMTA2Niw3ICsxMDY0LDYgQEAgcHJpdmF0ZToKICAgICBTZW50
aW5lbExpbmtlZExpc3Q8TExJbnRDYWxsTGlua0luZm8sIEJhc2ljUmF3U2VudGluZWxOb2RlPExM
SW50Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0xMSW50Q2FsbHM7CiAjZW5kaWYKICAgICBSZWZQ
dHI8SklUQ29kZT4gbV9qaXRDb2RlOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENv
ZGVXaXRoQXJpdHlDaGVjazsKICNpZiBFTkFCTEUoSklUKQogICAgIEJhZzxTdHJ1Y3R1cmVTdHVi
SW5mbz4gbV9zdHViSW5mb3M7CiAgICAgVmVjdG9yPEJ5VmFsSW5mbz4gbV9ieVZhbEluZm9zOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTYw
NjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MCwxMSArODAsMTkgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBp
bGVJbXBsKAogICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFsbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRv
ZXMgZmluYWxpemF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICB2bS5nZXRDVElTdHViKG9z
ckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwogICAgIHZtLmdldENUSVN0dWIodGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKLSAgICB2bS5nZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpOwotICAgIHZtLmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRo
dW5rR2VuZXJhdG9yKTsKLSAgICB2bS5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbFRodW5rR2Vu
ZXJhdG9yKTsKLSAgICB2bS5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpOwot
ICAgIHZtLmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKTsKKyAgICBp
ZiAobW9kZSA9PSBERkdNb2RlKSB7CisgICAgICAgIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVu
a0dlbmVyYXRvcik7CisgICAgICAgIHZtLmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRodW5rR2Vu
ZXJhdG9yKTsKKyAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVy
YXRvcik7CisgICAgICAgIHZtLmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcik7
CisgICAgICAgIHZtLmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKTsK
KyAgICB9IGVsc2UgeworICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGhhdFByZXNlcnZl
c1JlZ3NUaHVua0dlbmVyYXRvcik7CisgICAgICAgIHZtLmdldENUSVN0dWIobGlua0NvbnN0cnVj
dFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOworICAgICAgICB2bS5nZXRDVElTdHVi
KGxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOworICAgICAg
ICB2bS5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRv
cik7CisgICAgICAgIHZtLmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNS
ZWdzVGh1bmtHZW5lcmF0b3IpOworICAgIH0KICAgICAKICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9
IGFkb3B0UmVmKAogICAgICAgICBuZXcgUGxhbihjb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVlcykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzAsOSArMjMwLDExIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlu
a0IKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qc0NhbGxzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8o
aSk7CiAgICAgICAgIGluZm8uY2FsbFR5cGUgPSBtX2pzQ2FsbHNbaV0ubV9jYWxsVHlwZTsKLSAg
ICAgICAgaW5mby5pc0RGRyA9IHRydWU7CiAgICAgICAgIGluZm8uY29kZU9yaWdpbiA9IG1fanND
YWxsc1tpXS5tX2NvZGVPcmlnaW47Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhtX2pzQ2FsbHNb
aV0ubV9zbG93Q2FsbCwgRnVuY3Rpb25QdHIoKG1fdm0tPmdldENUSVN0dWIoaW5mby5jYWxsVHlw
ZSA9PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA/IGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRv
ciA6IGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkp
OworICAgICAgICBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IgPSBsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yRm9yKAorICAgICAgICAgICAgaW5mby5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNvbnN0
cnVjdCA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCwKKyAgICAgICAgICAgIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOworICAgICAgICBsaW5rQnVmZmVyLmxpbmsobV9q
c0NhbGxzW2ldLm1fc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKG1fdm0tPmdldENUSVN0dWIoZ2VuZXJh
dG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgICAgICBpbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fanNDYWxsc1tpXS5t
X3Nsb3dDYWxsKTsKICAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YobV9qc0NhbGxzW2ldLm1fdGFyZ2V0VG9DaGVjayk7CiAgICAgICAgIGluZm8uaG90UGF0
aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9qc0NhbGxzW2ldLm1fZmFz
dENhbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxp
emVyLmNwcAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCw4IEBAIEpJVEZp
bmFsaXplcjo6fkpJVEZpbmFsaXplcigpCiAKIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZSgp
CiB7Ci0gICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZihtX2xpbmtCdWZmZXItPmZpbmFs
aXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpKTsKLSAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRK
SVRDb2RlKG1faml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOworICAgIG1faml0Q29k
ZS0+aW5pdGlhbGl6ZUNvZGVSZWYoCisgICAgICAgIG1fbGlua0J1ZmZlci0+ZmluYWxpemVDb2Rl
V2l0aG91dERpc2Fzc2VtYmx5KCksIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKICAgICAKICAg
ICBmaW5hbGl6ZUNvbW1vbigpOwogICAgIApAQCAtNTksOCArNTksOCBAQCBib29sIEpJVEZpbmFs
aXplcjo6ZmluYWxpemUoKQogYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQog
ewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3dpdGhBcml0eUNoZWNrLmlzRW1wdHlWYWx1ZSgpKTsK
LSAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmKG1fbGlua0J1ZmZlci0+ZmluYWxpemVD
b2RlV2l0aG91dERpc2Fzc2VtYmx5KCkpOwotICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENv
ZGUobV9qaXRDb2RlLCBtX3dpdGhBcml0eUNoZWNrKTsKKyAgICBtX2ppdENvZGUtPmluaXRpYWxp
emVDb2RlUmVmKAorICAgICAgICBtX2xpbmtCdWZmZXItPmZpbmFsaXplQ29kZVdpdGhvdXREaXNh
c3NlbWJseSgpLCBtX3dpdGhBcml0eUNoZWNrKTsKICAgICAKICAgICBmaW5hbGl6ZUNvbW1vbigp
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDQsMTEg
KzcwNCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAogICAgIEpJVENvbXBpbGVyOjpEYXRh
TGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1Bh
dGg7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGg7CiAKICAgICBtX2ppdC5lbWl0U3Rv
cmVDb2RlT3JpZ2luKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgIAotICAgIHNsb3dQYXRoLmFwcGVu
ZChtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxs
ZWVHUFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKSk7
CisgICAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKDApKTsKIAogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoY2FsbGVlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZXN1
bHRHUFIpOwogICAgIG1faml0LnN0b3JlNjQocmVzdWx0R1BSLCBjYWxsZWVGcmFtZVNsb3QoSlNT
dGFjazo6U2NvcGVDaGFpbikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiAr
MTAzLDggQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNh
c2UgRnVuY3Rpb25SZWVudHJ5V2F0Y2hwb2ludDoKICAgICBjYXNlIFZhcmlhYmxlV2F0Y2hwb2lu
dDoKICAgICBjYXNlIE5vdGlmeVdyaXRlOgorICAgIGNhc2UgQ2FsbDoKKyAgICBjYXNlIENvbnN0
cnVjdDoKICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVhazsKICAgICBjYXNl
IEdldEJ5SWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJ
KHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGls
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OSw2ICsyOTksNDQgQEAgc3RhdGljIHZvaWQgZml4
RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIC8v
IEhhbmRsaW5nIEpTIGNhbGxzIGlzIHdlaXJkOiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIHNv
cnQgdGhlbSBieSB0aGUgUEMgaW4gTExWTQorICAgIC8vIGdlbmVyYXRlZCBjb2RlLiBUaGF0IGlt
cGxpZXMgZmlyc3QgcHJ1bmluZyB0aGUgb25lcyB0aGF0IExMVk0gZGlkbid0IGdlbmVyYXRlLgor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5qc0NhbGxzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIEpTQ2FsbCYgY2FsbCA9IHN0YXRlLmpzQ2FsbHNbaV07CisgICAgICAgIAorICAg
ICAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5k
KGNhbGwuc3RhY2ttYXBJRCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgp
KSB7CisgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4gUHJ1bmUgaXQuCisgICAg
ICAgICAgICBjYWxsID0gc3RhdGUuanNDYWxscy5sYXN0KCk7CisgICAgICAgICAgICBzdGF0ZS5q
c0NhbGxzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjYWxsLm1faW5zdHJ1Y3Rpb25PZmZz
ZXQgPSBpdGVyLT52YWx1ZS5pbnN0cnVjdGlvbk9mZnNldDsKKyAgICB9CisgICAgCisgICAgc3Rk
Ojpzb3J0KHN0YXRlLmpzQ2FsbHMuYmVnaW4oKSwgc3RhdGUuanNDYWxscy5lbmQoKSk7CisgICAg
CisgICAgY29kZUJsb2NrLT5zZXROdW1iZXJPZkNhbGxMaW5rSW5mb3Moc3RhdGUuanNDYWxscy5z
aXplKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmpzQ2FsbHMuc2l6ZSgpOyBpLS07
KSB7CisgICAgICAgIEpTQ2FsbCYgY2FsbCA9IHN0YXRlLmpzQ2FsbHNbaV07CisKKyAgICAgICAg
Q0NhbGxIZWxwZXJzIGZhc3RQYXRoSklUKCZ2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgY2FsbC5l
bWl0KGZhc3RQYXRoSklUKTsKKyAgICAgICAgCisgICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9IGJp
dHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgY2FsbC5tX2luc3RydWN0aW9u
T2Zmc2V0OworICAgICAgICAKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCAmZmFz
dFBhdGhKSVQsIHN0YXJ0T2ZJQywgc2l6ZU9mQ2FsbCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQobGlua0J1ZmZlci5pc1ZhbGlkKCkpOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFzc2VtYmxlclR5cGVfVDo6ZmlsbE5vcHMoCisgICAgICAgICAgICBzdGFydE9mSUMgKyBs
aW5rQnVmZmVyLnNpemUoKSwgc2l6ZU9mQ2FsbCgpIC0gbGlua0J1ZmZlci5zaXplKCkpOworICAg
ICAgICAKKyAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gY29kZUJsb2NrLT5jYWxsTGlua0lu
Zm8oaSk7CisgICAgICAgIGNhbGwubGluayh2bSwgbGlua0J1ZmZlciwgaW5mbyk7CisgICAgfQor
ICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgIAog
ICAgIGZvciAodW5zaWduZWQgZXhpdEluZGV4ID0gaml0Q29kZS0+b3NyRXhpdC5zaXplKCk7IGV4
aXRJbmRleC0tOykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVD
YWNoZVNpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SW5saW5lQ2FjaGVTaXplLmNwcAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2
ICs0NywxMSBAQCBzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpCiAgICAgcmV0dXJuIDMyOwogfQogCitz
aXplX3Qgc2l6ZU9mQ2FsbCgpCit7CisgICAgcmV0dXJuIDQzOworfQorCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAkocmV2aXNpb24gMTYw
NjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CiAKIHNpemVfdCBzaXplT2ZHZXRCeUlkKCk7CiBzaXplX3Qgc2l6ZU9mUHV0QnlJZCgp
Oworc2l6ZV90IHNpemVPZkNhbGwoKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9z
aXRvcnkuaAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDkgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKGZyYW1lQWRkcmVzcywg
Imxsdm0uZnJhbWVhZGRyZXNzIiwgZnVuY3Rpb25UeXBlKHBvaW50ZXJUeXBlKGludDgpLCBpbnQz
MikpIFwKICAgICBtYWNybyhtdWxXaXRoT3ZlcmZsb3czMiwgImxsdm0uc211bC53aXRoLm92ZXJm
bG93LmkzMiIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50MzIsIGJvb2xl
YW4pLCBpbnQzMiwgaW50MzIpKSBcCiAgICAgbWFjcm8obXVsV2l0aE92ZXJmbG93NjQsICJsbHZt
LnNtdWwud2l0aC5vdmVyZmxvdy5pNjQiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRl
eHQsIGludDY0LCBib29sZWFuKSwgaW50NjQsIGludDY0KSkgXAotICAgIG1hY3JvKHBhdGNocG9p
bnRJbnQ2NCwgImxsdm0uZXhwZXJpbWVudGFsLnBhdGNocG9pbnQuaTY0IiwgZnVuY3Rpb25UeXBl
KGludDY0LCBpbnQzMiwgaW50MzIsIHJlZjgsIGludDMyLCBWYXJpYWRpYykpIFwKLSAgICBtYWNy
byhwYXRjaHBvaW50Vm9pZCwgImxsdm0uZXhwZXJpbWVudGFsLnBhdGNocG9pbnQudm9pZCIsIGZ1
bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50MzIsIGludDMyLCByZWY4LCBpbnQzMiwgVmFyaWFkaWMp
KSBcCi0gICAgbWFjcm8oc3RhY2ttYXAsICJsbHZtLmV4cGVyaW1lbnRhbC5zdGFja21hcCIsIGZ1
bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50MzIsIGludDMyLCBWYXJpYWRpYykpIFwKKyAgICBtYWNy
byhwYXRjaHBvaW50SW50NjQsICJsbHZtLmV4cGVyaW1lbnRhbC5wYXRjaHBvaW50Lmk2NCIsIGZ1
bmN0aW9uVHlwZShpbnQ2NCwgaW50NjQsIGludDMyLCByZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBc
CisgICAgbWFjcm8ocGF0Y2hwb2ludFZvaWQsICJsbHZtLmV4cGVyaW1lbnRhbC5wYXRjaHBvaW50
LnZvaWQiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDY0LCBpbnQzMiwgcmVmOCwgaW50MzIs
IFZhcmlhZGljKSkgXAorICAgIG1hY3JvKHN0YWNrbWFwLCAibGx2bS5leHBlcmltZW50YWwuc3Rh
Y2ttYXAiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDY0LCBpbnQzMiwgVmFyaWFkaWMpKSBc
CiAgICAgbWFjcm8oc3ViV2l0aE92ZXJmbG93MzIsICJsbHZtLnNzdWIud2l0aC5vdmVyZmxvdy5p
MzIiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDMyLCBib29sZWFuKSwg
aW50MzIsIGludDMyKSkgXAogICAgIG1hY3JvKHN1YldpdGhPdmVyZmxvdzY0LCAibGx2bS5zc3Vi
LndpdGgub3ZlcmZsb3cuaTY0IiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBp
bnQ2NCwgYm9vbGVhbiksIGludDY0LCBpbnQ2NCkpIFwKICAgICBtYWNybyh0cmFwLCAibGx2bS50
cmFwIiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpJVENvZGUuY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw5ICs1NCw5
IEBAIHZvaWQgSklUQ29kZTo6YWRkRGF0YVNlY3Rpb24oUmVmQ291bnRlZEEKICAgICBtX2RhdGFT
ZWN0aW9ucy5hcHBlbmQoZGF0YVNlY3Rpb24pOwogfQogCi12b2lkIEpJVENvZGU6OmluaXRpYWxp
emVFbnRyeXBvaW50KENvZGVSZWYgZW50cnlwb2ludCkKK3ZvaWQgSklUQ29kZTo6aW5pdGlhbGl6
ZUFyaXR5Q2hlY2tFbnRyeXBvaW50KENvZGVSZWYgZW50cnlwb2ludCkKIHsKLSAgICBtX2VudHJ5
cG9pbnQgPSBlbnRyeXBvaW50OworICAgIG1fYXJpdHlDaGVja0VudHJ5cG9pbnQgPSBlbnRyeXBv
aW50OwogfQogCiB2b2lkIEpJVENvZGU6OmluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChDb2RlUHRy
IGFkZHJlc3MpCkBAIC02NCwyMSArNjQsMjUgQEAgdm9pZCBKSVRDb2RlOjppbml0aWFsaXplQWRk
cmVzc0ZvckNhbGwoQwogICAgIG1fYWRkcmVzc0ZvckNhbGwgPSBhZGRyZXNzOwogfQogCi1KSVRD
b2RlOjpDb2RlUHRyIEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKCkKK0pJVENvZGU6OkNvZGVQdHIg
SklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoVk0mLCBBcml0eUNoZWNrTW9kZSBhcml0eUNoZWNrLCBS
ZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpCiB7Ci0gICAgcmV0dXJuIG1fYWRkcmVzc0ZvckNhbGw7
CisgICAgc3dpdGNoIChhcml0eUNoZWNrKSB7CisgICAgY2FzZSBBcml0eUNoZWNrTm90UmVxdWly
ZWQ6CisgICAgICAgIHJldHVybiBtX2FkZHJlc3NGb3JDYWxsOworICAgIGNhc2UgTXVzdENoZWNr
QXJpdHk6CisgICAgICAgIHJldHVybiBtX2FyaXR5Q2hlY2tFbnRyeXBvaW50LmNvZGUoKTsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQ29kZVB0
cigpOwogfQogCiB2b2lkKiBKSVRDb2RlOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVf
dCBvZmZzZXQpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9lbnRyeXBvaW50KTsKICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9hZGRyZXNzRm9yQ2FsbC5leGVjdXRhYmxlQWRk
cmVzcygpKSArIG9mZnNldDsKIH0KIAogdm9pZCogSklUQ29kZTo6ZGF0YUFkZHJlc3NBdE9mZnNl
dChzaXplX3QpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9lbnRyeXBvaW50KTsKLQogICAgIC8v
IFdlIGNhbid0IHBhdGNoIEZUTCBjb2RlLCB5ZXQuIEV2ZW4gaWYgd2UgZGlkLCBpdCdzIG5vdCBj
bGVhciB0aGF0IHdlIHdvdWxkIGRvIHNvCiAgICAgLy8gdGhyb3VnaCB0aGlzIEFQSS4KICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtODcsOCArOTEsNiBAQCB2b2lkKiBKSVRD
b2RlOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfCiAKIHVuc2lnbmVkIEpJVENvZGU6Om9mZnNl
dE9mKHZvaWQqKQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fZW50cnlwb2ludCk7Ci0KICAgICAv
LyBXZSBjdXJyZW50bHkgZG9uJ3QgaGF2ZSB2aXNpYmlsaXR5IGludG8gdGhlIEZUTCBjb2RlLgog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkBAIC05Niw4
ICs5OCw2IEBAIHVuc2lnbmVkIEpJVENvZGU6Om9mZnNldE9mKHZvaWQqKQogCiBzaXplX3QgSklU
Q29kZTo6c2l6ZSgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9lbnRyeXBvaW50KTsKLQogICAg
IC8vIFdlIGRvbid0IGtub3cgdGhlIHNpemUgb2YgRlRMIGNvZGUsIHlldC4gTWFrZSBhIHdpbGQg
Z3Vlc3MuIFRoaXMgaXMgbW9zdGx5IHVzZWQgZm9yCiAgICAgLy8gR0MgbG9hZCBlc3RpbWF0ZXMu
CiAgICAgcmV0dXJuIDEwMDA7CkBAIC0xMDUsOCArMTA1LDYgQEAgc2l6ZV90IEpJVENvZGU6OnNp
emUoKQogCiBib29sIEpJVENvZGU6OmNvbnRhaW5zKHZvaWQqKQogewotICAgIFJFTEVBU0VfQVNT
RVJUKG1fZW50cnlwb2ludCk7Ci0KICAgICAvLyBXZSBoYXZlIG5vIGlkZWEgd2hhdCBhZGRyZXNz
ZXMgdGhlIEZUTCBjb2RlIGNvbnRhaW5zLCB5ZXQuCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE3ICs0NiwxNyBAQCBwdWJs
aWM6CiAgICAgSklUQ29kZSgpOwogICAgIH5KSVRDb2RlKCk7CiAgICAgCi0gICAgQ29kZVB0ciBh
ZGRyZXNzRm9yQ2FsbCgpOwotICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6
ZV90IG9mZnNldCk7Ci0gICAgdm9pZCogZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0
KTsKLSAgICB1bnNpZ25lZCBvZmZzZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUpOwotICAgIHNp
emVfdCBzaXplKCk7Ci0gICAgYm9vbCBjb250YWlucyh2b2lkKik7CisgICAgQ29kZVB0ciBhZGRy
ZXNzRm9yQ2FsbChWTSYsIEFyaXR5Q2hlY2tNb2RlLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUp
IE9WRVJSSURFOworICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9m
ZnNldCkgT1ZFUlJJREU7CisgICAgdm9pZCogZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zm
c2V0KSBPVkVSUklERTsKKyAgICB1bnNpZ25lZCBvZmZzZXRPZih2b2lkKiBwb2ludGVySW50b0Nv
ZGUpIE9WRVJSSURFOworICAgIHNpemVfdCBzaXplKCkgT1ZFUlJJREU7CisgICAgYm9vbCBjb250
YWlucyh2b2lkKikgT1ZFUlJJREU7CiAgICAgCiAgICAgdm9pZCBpbml0aWFsaXplRXhpdFRodW5r
cyhDb2RlUmVmKTsKICAgICB2b2lkIGFkZEhhbmRsZShQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+KTsKICAgICB2b2lkIGFkZERhdGFTZWN0aW9uKFJlZkNvdW50ZWRBcnJheTxMU2Vj
dGlvbldvcmQ+KTsKLSAgICB2b2lkIGluaXRpYWxpemVFbnRyeXBvaW50KENvZGVSZWYpOworICAg
IHZvaWQgaW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50KENvZGVSZWYpOwogICAgIHZvaWQg
aW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKENvZGVQdHIpOwogICAgIAogICAgIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4+JiBoYW5kbGVzKCkgY29uc3QgeyByZXR1
cm4gbV9oYW5kbGVzOyB9CkBAIC03NSw3ICs3NSw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJl
ZkNvdW50ZWRBcnJheTxMU2VjdGlvbldvcmQ+PiBtX2RhdGFTZWN0aW9uczsKICAgICBWZWN0b3I8
UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+PiBtX2hhbmRsZXM7CiAgICAgQ29kZVB0ciBt
X2FkZHJlc3NGb3JDYWxsOwotICAgIENvZGVSZWYgbV9lbnRyeXBvaW50OworICAgIENvZGVSZWYg
bV9hcml0eUNoZWNrRW50cnlwb2ludDsKICAgICBDb2RlUmVmIG1fZXhpdFRodW5rczsKIH07CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJ
KHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmlu
YWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEyICsxMDMsMTIgQEAgYm9vbCBKSVRG
aW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3
aXRoQXJpdHlDaGVjazsKICAgICBpZiAoYXJpdHlDaGVjay5pc1NldCgpKQogICAgICAgICB3aXRo
QXJpdHlDaGVjayA9IGVudHJ5cG9pbnRMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGFyaXR5Q2hlY2sp
OwotICAgIGppdENvZGUtPmluaXRpYWxpemVFbnRyeXBvaW50KAorICAgIGppdENvZGUtPmluaXRp
YWxpemVBcml0eUNoZWNrRW50cnlwb2ludCgKICAgICAgICAgRklOQUxJWkVfREZHX0NPREUoCiAg
ICAgICAgICAgICAqZW50cnlwb2ludExpbmtCdWZmZXIsCiAgICAgICAgICAgICAoIkZUTCBlbnRy
eXBvaW50IHRodW5rIGZvciAlcyB3aXRoIExMVk0gZ2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NT
dHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jay5nZXQoKSwgSklUQ29k
ZTo6RlRMSklUKSkuZGF0YSgpLCBmdW5jdGlvbikpKTsKICAgICAKLSAgICBtX3BsYW4uY29kZUJs
b2NrLT5zZXRKSVRDb2RlKGppdENvZGUsIHdpdGhBcml0eUNoZWNrKTsKKyAgICBtX3BsYW4uY29k
ZUJsb2NrLT5zZXRKSVRDb2RlKGppdENvZGUpOwogICAgIAogICAgIHJldHVybiB0cnVlOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExKU0NhbGwuaCIKKwor
I2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisK
K0pTQ2FsbDo6SlNDYWxsKHVuc2lnbmVkIHN0YWNrbWFwSUQsIENhbGxMaW5rSW5mbzo6Q2FsbFR5
cGUgY2FsbFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKKyAgICA6IG1fc3RhY2ttYXBJRChz
dGFja21hcElEKQorICAgICwgbV9jYWxsVHlwZShjYWxsVHlwZSkKKyAgICAsIG1fY29kZU9yaWdp
bihjb2RlT3JpZ2luKQorICAgICwgbV9pbnN0cnVjdGlvbk9mZnNldCgwKQoreworfQorCit2b2lk
IEpTQ2FsbDo6ZW1pdChDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICBDQ2FsbEhlbHBl
cnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgbV90YXJnZXRUb0NoZWNrLAorICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCkpOworICAgIAorICAgIGppdC5sb2FkUHRyKAor
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTRnVuY3Rpb246
Om9mZnNldE9mU2NvcGVDaGFpbigpKSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDEpOworICAgIGpp
dC5zdG9yZTY0KAorICAgICAgICBHUFJJbmZvOjpyZWdUMSwKKyAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
ciwKKyAgICAgICAgICAgIHNpemVvZihSZWdpc3RlcikgKiBKU1N0YWNrOjpTY29wZUNoYWluIC0g
c2l6ZW9mKHZvaWQqKSkpOworICAgIAorICAgIG1fZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsK
KyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7CisgICAgCisgICAgc2xv
d1BhdGgubGluaygmaml0KTsKKyAgICBtX3Nsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAg
CisgICAgZG9uZS5saW5rKCZqaXQpOworfQorCit2b2lkIEpTQ2FsbDo6bGluayhWTSYgdm0sIExp
bmtCdWZmZXImIGxpbmtCdWZmZXIsIENhbGxMaW5rSW5mbyYgY2FsbEluZm8pCit7CisgICAgVGh1
bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbGlua0NhbGxUaHVua0dlbmVyYXRvckZvcigKKyAgICAg
ICAgbV9jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA/IENvZGVGb3JDb25zdHJ1
Y3QgOiBDb2RlRm9yQ2FsbCwKKyAgICAgICAgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKKyAgICAK
KyAgICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAgIG1fc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZt
LmdldENUSVN0dWIoZ2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAg
IAorICAgIGNhbGxJbmZvLmNhbGxUeXBlID0gbV9jYWxsVHlwZTsKKyAgICBjYWxsSW5mby5jb2Rl
T3JpZ2luID0gbV9jb2RlT3JpZ2luOworICAgIGNhbGxJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fc2xvd0NhbGwpOworICAgIGNhbGxJbmZv
LmhvdFBhdGhCZWdpbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3RhcmdldFRvQ2hlY2spOwor
ICAgIGNhbGxJbmZvLmhvdFBhdGhPdGhlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
KG1fZmFzdENhbGwpOworICAgIGNhbGxJbmZvLmNhbGxlZUdQUiA9IEdQUkluZm86OnJlZ1QwOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgRlRMSlNDYWxsX2gKKyNkZWZpbmUgRlRMSlNDYWxsX2gKKworI2lm
IEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAi
Q2FsbExpbmtJbmZvLmgiCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkxpbmtC
dWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitjbGFzcyBKU0Nh
bGwgeworcHVibGljOgorICAgIEpTQ2FsbCh1bnNpZ25lZCBzdGFja21hcElELCBDYWxsTGlua0lu
Zm86OkNhbGxUeXBlLCBDb2RlT3JpZ2luKTsKKyAgICAKKyAgICB2b2lkIGVtaXQoQ0NhbGxIZWxw
ZXJzJik7CisgICAgdm9pZCBsaW5rKFZNJiwgTGlua0J1ZmZlciYsIENhbGxMaW5rSW5mbyYpOwor
ICAgIAorICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrbWFw
SUQ7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBKU0NhbGwmIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5zdHJ1Y3Rpb25PZmZzZXQgPCBvdGhlci5tX2lu
c3RydWN0aW9uT2Zmc2V0OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9z
dGFja21hcElEOworICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgbV9jYWxsVHlwZTsKKyAgICBD
b2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKKyAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBt
X3RhcmdldFRvQ2hlY2s7CisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG1fZmFzdENhbGw7CisgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIG1fc2xvd0NhbGw7CisKK3B1YmxpYzoKKyAgICB1aW50MzJfdCBt
X2luc3RydWN0aW9uT2Zmc2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExKU0NhbGxfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAko
cmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCA9IG1fc3RhY2tt
YXBJRHMrKzsKICAgICAgICAgbV9vdXQuY2FsbCgKLSAgICAgICAgICAgIG1fb3V0LnN0YWNrbWFw
SW50cmluc2ljKCksIG1fb3V0LmNvbnN0SW50MzIobV9mdGxTdGF0ZS5jYXB0dXJlZFN0YWNrbWFw
SUQpLAorICAgICAgICAgICAgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgbV9vdXQuY29uc3RJ
bnQ2NChtX2Z0bFN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCksCiAgICAgICAgICAgICBtX291dC5p
bnQzMlplcm8sIGNhcHR1cmVkQWxsb2NhKTsKICAgICAgICAgCiAgICAgICAgIG1fY2FsbEZyYW1l
ID0gbV9vdXQucHRyVG9JbnQoCkBAIC0xMjk3LDcgKzEyOTcsNyBAQCBwcml2YXRlOgogICAgICAg
ICAKICAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKAogICAgICAgICAgICAgbV9vdXQu
cGF0Y2hwb2ludEludDY0SW50cmluc2ljKCksCi0gICAgICAgICAgICBtX291dC5jb25zdEludDMy
KHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkdldEJ5SWQoKSksCisgICAgICAg
ICAgICBtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVP
ZkdldEJ5SWQoKSksCiAgICAgICAgICAgICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNv
bnN0SW50MzIoMSksIGJhc2UpOwogICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50
aW9uKGNhbGwsIExMVk1BbnlSZWdDYWxsQ29udik7CiAgICAgICAgIHNldEpTVmFsdWUoY2FsbCk7
CkBAIC0xMzIyLDcgKzEzMjIsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTFZhbHVl
IGNhbGwgPSBtX291dC5jYWxsKAogICAgICAgICAgICAgbV9vdXQucGF0Y2hwb2ludFZvaWRJbnRy
aW5zaWMoKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3RhY2ttYXBJRCksIG1fb3V0
LmNvbnN0SW50MzIoc2l6ZU9mUHV0QnlJZCgpKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
NjQoc3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mUHV0QnlJZCgpKSwKICAgICAg
ICAgICAgIGNvbnN0TnVsbChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigyKSwgYmFzZSwg
dmFsdWUpOwogICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExM
Vk1BbnlSZWdDYWxsQ29udik7CiAgICAgICAgIApAQCAtMjQzNywzNSArMjQzNyw0MCBAQCBwcml2
YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUNhbGxPckNvbnN0cnVjdCgpCiAgICAgewotICAg
ICAgICAvLyBGSVhNRTogVGhpcyBpcyB1bmFjY2VwdGFibHkgc2xvdy4KLSAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMQorICAgICAgICBpbnQg
ZHVtbXlUaGlzQXJndW1lbnQgPSBtX25vZGUtPm9wKCkgPT0gQ2FsbCA/IDAgOiAxOworICAgICAg
ICBpbnQgbnVtUGFzc2VkQXJncyA9IG1fbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CisgICAgICAg
IGludCBudW1BcmdzID0gbnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50OwogICAgICAg
ICAKLSAgICAgICAgSl9KSVRPcGVyYXRpb25fRSBmdW5jdGlvbiA9Ci0gICAgICAgICAgICBtX25v
ZGUtPm9wKCkgPT0gQ2FsbCA/IG9wZXJhdGlvbkZUTENhbGwgOiBvcGVyYXRpb25GVExDb25zdHJ1
Y3Q7CisgICAgICAgIExWYWx1ZSBjYWxsZWUgPSBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAwKSk7CiAgICAgICAgIAotICAgICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQg
PSBtX25vZGUtPm9wKCkgPT0gQ2FsbCA/IDAgOiAxOworICAgICAgICB1bnNpZ25lZCBzdGFja21h
cElEID0gbV9zdGFja21hcElEcysrOwogICAgICAgICAKLSAgICAgICAgaW50IG51bVBhc3NlZEFy
Z3MgPSBtX25vZGUtPm51bUNoaWxkcmVuKCkgLSAxOworICAgICAgICBWZWN0b3I8TFZhbHVlPiBh
cmd1bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQ2NChzdGFj
a21hcElEKSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMihzaXpl
T2ZDYWxsKCkpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjb25zdE51bGwobV9vdXQucmVm
OCkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50MzIoMSArIEpTU3Rh
Y2s6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSAr
IG51bUFyZ3MpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjYWxsZWUpOyAvLyBjYWxsZWUg
LT4gJXJkaQorICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGdldFVuZGVmKG1fb3V0LmludDY0KSk7
IC8vIGNvZGUgYmxvY2sKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChnZXRVbmRlZihtX291dC5p
bnQ2NCkpOyAvLyBzY29wZSBjaGFpbgorICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNhbGxlZSk7
IC8vIGNhbGxlZSAtPiBzdGFjaworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0
SW50NjQobnVtQXJncykpOyAvLyBhcmd1bWVudCBjb3VudCBhbmQgemVyb3MgZm9yIHRoZSB0YWcK
KyAgICAgICAgaWYgKGR1bW15VGhpc0FyZ3VtZW50KQorICAgICAgICAgICAgYXJndW1lbnRzLmFw
cGVuZChnZXRVbmRlZihtX291dC5pbnQ2NCkpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bVBhc3NlZEFyZ3M7ICsraSkKKyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobG93SlNW
YWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSArIGkpKSk7CiAgICAgICAgIAotICAg
ICAgICBMVmFsdWUgY2FsbGVlRnJhbWUgPSBtX291dC5hZGQoCi0gICAgICAgICAgICBtX2NhbGxG
cmFtZSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihSZWdpc3RlcikgKiB2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChtX2dyYXBoLmZyYW1lUmVnaXN0ZXJDb3VudCgpKS5vZmZz
ZXQoKSkpOworICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7CiAgICAgICAgIAotICAgICAgICBtX291
dC5zdG9yZTMyKAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihudW1QYXNzZWRBcmdzICsg
ZHVtbXlUaGlzQXJndW1lbnQpLAotICAgICAgICAgICAgcGF5bG9hZEZvcihjYWxsZWVGcmFtZSwg
SlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwotICAgICAgICBtX291dC5zdG9yZTY0KG1fY2FsbEZy
YW1lLCBjYWxsZWVGcmFtZSwgbV9oZWFwcy5DYWxsRnJhbWVfY2FsbGVyRnJhbWUpOwotICAgICAg
ICBtX291dC5zdG9yZTY0KAotICAgICAgICAgICAgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMCkpLAotICAgICAgICAgICAgYWRkcmVzc0ZvcihjYWxsZWVGcmFtZSwgSlNT
dGFjazo6Q2FsbGVlKSk7CisgICAgICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2FsbChtX291dC5w
YXRjaHBvaW50SW50NjRJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKKyAgICAgICAgc2V0SW5zdHJ1
Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNV2ViS2l0SlNDYWxsQ29udik7CiAgICAg
ICAgIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewot
ICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1f
Z3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxICsgaSkpLAotICAgICAgICAgICAgICAgIGFkZHJl
c3NGb3IoY2FsbGVlRnJhbWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkgKyBkdW1teVRo
aXNBcmd1bWVudCkub2Zmc2V0KCkpKTsKLSAgICAgICAgfQorICAgICAgICBtX2Z0bFN0YXRlLmpz
Q2FsbHMuYXBwZW5kKEpTQ2FsbCgKKyAgICAgICAgICAgIHN0YWNrbWFwSUQsCisgICAgICAgICAg
ICBtX25vZGUtPm9wKCkgPT0gQ2FsbCA/IENhbGxMaW5rSW5mbzo6Q2FsbCA6IENhbGxMaW5rSW5m
bzo6Q29uc3RydWN0LAorICAgICAgICAgICAgbV9ub2RlLT5jb2RlT3JpZ2luKSk7CiAgICAgICAg
IAotICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5vcGVyYXRpb24oZnVuY3Rpb24pLCBj
YWxsZWVGcmFtZSkpOworICAgICAgICBzZXRKU1ZhbHVlKGNhbGwpOwogICAgIH0KICAgICAKICAg
ICB2b2lkIGNvbXBpbGVKdW1wKCkKQEAgLTQwOTIsNyArNDA5Nyw3IEBAIHByaXZhdGU6CiAgICAg
ewogICAgICAgICBleGl0Lm1fc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKICAgICAgICAg
YXJndW1lbnRzLmluc2VydCgwLCBtX291dC5jb25zdEludDMyKE1hY3JvQXNzZW1ibGVyOjptYXhK
dW1wUmVwbGFjZW1lbnRTaXplKCkpKTsKLSAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBtX291
dC5jb25zdEludDMyKGV4aXQubV9zdGFja21hcElEKSk7CisgICAgICAgIGFyZ3VtZW50cy5pbnNl
cnQoMCwgbV9vdXQuY29uc3RJbnQ2NChleGl0Lm1fc3RhY2ttYXBJRCkpOwogICAgICAgICAKICAg
ICAgICAgbV9vdXQuY2FsbChtX291dC5zdGFja21hcEludHJpbnNpYygpLCBhcmd1bWVudHMpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCShy
ZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsOCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50
cnkoCiAgICAgCiAgICAgZXhlYy0+c2V0Q29kZUJsb2NrKGVudHJ5Q29kZUJsb2NrKTsKICAgICAK
LSAgICB2b2lkKiByZXN1bHQgPSBlbnRyeUNvZGUtPmFkZHJlc3NGb3JDYWxsKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKKyAgICB2b2lkKiByZXN1bHQgPSBlbnRyeUNvZGUtPmFkZHJlc3NGb3JDYWxs
KAorICAgICAgICB2bSwgQXJpdHlDaGVja05vdFJlcXVpcmVkLCBSZWdpc3RlclByZXNlcnZhdGlv
bk5vdFJlcXVpcmVkKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCiAgICAgICAgIGRhdGFMb2coIiAgICBFbnRyeSB3aWxsIHN1Y2NlZWQsIGdvaW5n
IHRvIGFkZHJlc3MiLCBSYXdQb2ludGVyKHJlc3VsdCksICJcbiIpOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAkocmV2aXNpb24gMTYwNjIy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03OSw3ICs3OSw5IEBAIHZvaWQgU3RhY2tNYXBzOjpMb2NhdGlvbjo6cmVzdG9y
ZUludG8oCiAKIGJvb2wgU3RhY2tNYXBzOjpSZWNvcmQ6OnBhcnNlKERhdGFWaWV3KiB2aWV3LCB1
bnNpZ25lZCYgb2Zmc2V0KQogewotICAgIHBhdGNocG9pbnRJRCA9IHZpZXctPnJlYWQ8dWludDMy
X3Q+KG9mZnNldCwgdHJ1ZSk7CisgICAgaW50NjRfdCBpZCA9IHZpZXctPnJlYWQ8aW50NjRfdD4o
b2Zmc2V0LCB0cnVlKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50MzJfdD4oaWQpID09IGlk
KTsKKyAgICBwYXRjaHBvaW50SUQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaWQpOwogICAgIGlm
IChzdGF0aWNfY2FzdDxpbnQzMl90PihwYXRjaHBvaW50SUQpIDwgMCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIApAQCAtOTAsNiArOTIsMTMgQEAgYm9vbCBTdGFja01hcHM6OlJlY29yZDo6
cGFyc2UoRGF0YVZpZXcqIAogICAgIHdoaWxlIChsZW5ndGgtLSkKICAgICAgICAgbG9jYXRpb25z
LmFwcGVuZChyZWFkT2JqZWN0PExvY2F0aW9uPih2aWV3LCBvZmZzZXQpKTsKICAgICAKKyAgICB1
bnNpZ25lZCBudW1MaXZlT3V0cyA9IHZpZXctPnJlYWQ8dWludDE2X3Q+KG9mZnNldCwgdHJ1ZSk7
CisgICAgd2hpbGUgKG51bUxpdmVPdXRzLS0pIHsKKyAgICAgICAgdmlldy0+cmVhZDx1aW50MTZf
dD4ob2Zmc2V0LCB0cnVlKTsgLy8gcmVnbnVtCisgICAgICAgIHZpZXctPnJlYWQ8dWludDhfdD4o
b2Zmc2V0LCB0cnVlKTsgLy8gcmVzZXJ2ZWQKKyAgICAgICAgdmlldy0+cmVhZDx1aW50OF90Pihv
ZmZzZXQsIHRydWUpOyAvLyBzaXplIGluIGJ5dGVzCisgICAgfQorICAgIAogICAgIHJldHVybiB0
cnVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lv
biAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJGVExJbmxpbmVDYWNoZURlc2Ny
aXB0b3IuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMSklURmluYWxp
emVyLmgiCisjaW5jbHVkZSAiRlRMSlNDYWxsLmgiCiAjaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgi
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKQEAgLTYwLDYgKzYxLDcgQEAgcHVibGlj
OgogICAgIHVuc2lnbmVkIGNhcHR1cmVkU3RhY2ttYXBJRDsKICAgICBTZWdtZW50ZWRWZWN0b3I8
R2V0QnlJZERlc2NyaXB0b3I+IGdldEJ5SWRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxQdXRCeUlk
RGVzY3JpcHRvcj4gcHV0QnlJZHM7CisgICAgVmVjdG9yPEpTQ2FsbD4ganNDYWxsczsKICAgICBW
ZWN0b3I8Q1N0cmluZz4gY29kZVNlY3Rpb25OYW1lczsKICAgICBWZWN0b3I8Q1N0cmluZz4gZGF0
YVNlY3Rpb25OYW1lczsKICAgICBSZWZDb3VudGVkQXJyYXk8TFNlY3Rpb25Xb3JkPiBzdGFja21h
cHNTZWN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTYw
NjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MDMsOCArNzAzLDcgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGls
ZShKSQogICAgIAogICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6OkxhdGVT
aHJpbmspOwogICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9wdFJlZihu
ZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIEpJVENvZGU6OkJhc2VsaW5lSklUKSksCi0gICAgICAg
IHdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUocmVz
dWx0LCB3aXRoQXJpdHlDaGVjaywgSklUQ29kZTo6QmFzZWxpbmVKSVQpKSk7CiAgICAgCiAjaWYg
RU5BQkxFKEpJVF9WRVJCT1NFKQogICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVkIGNvZGUgZm9y
ICVwIGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5
KCktPnN0YXJ0KCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpKTsKQEAgLTcxMyw0
MiArNzEyLDYgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAg
IHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9CiAKLXZvaWQgSklUOjpsaW5rRm9yKEV4
ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sqIGNhbGxlckNvZGVC
bG9jaywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpJVDo6Q29kZVB0ciBjb2RlLCBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbywgVk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCi17Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7
Ci0KLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5rZWQoKSk7Ci0gICAgY2FsbExpbmtJ
bmZvLT5jYWxsZWUuc2V0KCp2bSwgY2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4sIGNhbGxlckNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7Ci0gICAgY2FsbExpbmtJbmZvLT5s
YXN0U2VlbkNhbGxlZS5zZXQoKnZtLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBjYWxsZWUpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+aG90UGF0
aE90aGVyLCBjb2RlKTsKLQotICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCi0gICAgICAgIGNhbGxl
ZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChleGVjLCBjYWxsTGlua0luZm8pOwotCi0gICAg
Ly8gUGF0Y2ggdGhlIHNsb3cgcGF0Y2ggc28gd2UgZG8gbm90IGNvbnRpbnVlIHRvIHRyeSB0byBs
aW5rLgotICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgIEFTU0VSVChjYWxs
TGlua0luZm8tPmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbAotICAgICAgICAgICAgICAg
fHwgY2FsbExpbmtJbmZvLT5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzKTsK
LSAgICAgICAgaWYgKGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpDYWxs
KSB7Ci0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxS
ZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0
b3IpLmNvZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0t
PmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwot
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9u
LCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7
Ci19Ci0KLXZvaWQgSklUOjpsaW5rU2xvd0NhbGwoQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ss
IENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQotewotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwotCi0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2Fs
bExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGNhbGxlckNvZGVCbG9jay0+dm0oKS0+Z2V0
Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwotfQotCiB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCiB7CiAgICAgaWYgKG1fZXhjZXB0
aW9uQ2hlY2tzLmVtcHR5KCkgJiYgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJh
Y2suZW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTYwNjIy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjQxLDkgKzI0MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGppdC5w
cml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwodm0sIGZ1bmMpOwogICAgICAgICB9CiAKLSAgICAg
ICAgc3RhdGljIHZvaWQgbGlua0ZvcihFeGVjU3RhdGUqLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIENv
ZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgQ29k
ZVB0ciwgQ2FsbExpbmtJbmZvKiwgVk0qLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLSAgICAg
ICAgc3RhdGljIHZvaWQgbGlua1Nsb3dDYWxsKENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBD
YWxsTGlua0luZm8qKTsKLSAgICAgICAgCiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJl
Z2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEFTU0VSVCghKGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgJiAxKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAx
NjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5OSw3ICsyOTksMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxT
bG93Q2FzZShPcGNvZGVJRAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7CiAKLSAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG9wY29kZUlE
ID09IG9wX2NvbnN0cnVjdCA/IG1fdm0tPmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRodW5rR2Vu
ZXJhdG9yKS5jb2RlKCkgOiBtX3ZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3Ip
LmNvZGUoKSk7CisgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbGlua0NhbGxUaHVua0dl
bmVyYXRvckZvcigKKyAgICAgICAgb3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gQ29kZUZvckNv
bnN0cnVjdCA6IENvZGVGb3JDYWxsLAorICAgICAgICBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJl
cXVpcmVkKTsKKyAgICAKKyAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG1fdm0t
PmdldENUSVN0dWIoZ2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1f
Y29kZUJsb2NrKTsKICAgICBlbWl0UHV0Q2FsbFJlc3VsdChpbnN0cnVjdGlvbik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
MSw3ICsyMjEsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRAog
CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigxNiksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CiAKLSAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5m
b0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG9wY29kZUlEID09IG9w
X2NvbnN0cnVjdCA/IG1fdm0tPmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9y
KS5jb2RlKCkgOiBtX3ZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUo
KSk7CisgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbGlua0NhbGxUaHVua0dlbmVyYXRv
ckZvcigKKyAgICAgICAgb3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gQ29kZUZvckNvbnN0cnVj
dCA6IENvZGVGb3JDYWxsLAorICAgICAgICBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVk
KTsKKyAgICAKKyAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENU
SVN0dWIoZ2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtZnJh
bWVSZWdpc3RlckNvdW50Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJ
KHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkxMSW50VGh1
bmtzLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyUHJlc2Vy
dmF0aW9uV3JhcHBlckdlbmVyYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTc1LDUwICs3NiwzOCBAQCBGVEw6OkZvck9TUkVudHJ5SklU
Q29kZSogSklUQ29kZTo6ZnRsRm9yCiAKIFBhc3NSZWZQdHI8SklUQ29kZT4gSklUQ29kZTo6aG9z
dEZ1bmN0aW9uKEpJVENvZGU6OkNvZGVSZWYgY29kZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IERpcmVjdEpJVENvZGUoY29kZSwgSG9zdENhbGxUaHVuaykpOworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgTmF0aXZlSklUQ29kZShjb2RlLCBIb3N0Q2FsbFRodW5rKSk7CiB9CiAKLURpcmVj
dEpJVENvZGU6OkRpcmVjdEpJVENvZGUoSklUVHlwZSBqaXRUeXBlKQorSklUQ29kZVdpdGhDb2Rl
UmVmOjpKSVRDb2RlV2l0aENvZGVSZWYoSklUVHlwZSBqaXRUeXBlKQogICAgIDogSklUQ29kZShq
aXRUeXBlKQogewogfQogCi1EaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2RlKGNvbnN0IEpJVENv
ZGU6OkNvZGVSZWYgcmVmLCBKSVRUeXBlIGppdFR5cGUpCitKSVRDb2RlV2l0aENvZGVSZWY6OkpJ
VENvZGVXaXRoQ29kZVJlZihDb2RlUmVmIHJlZiwgSklUVHlwZSBqaXRUeXBlKQogICAgIDogSklU
Q29kZShqaXRUeXBlKQogICAgICwgbV9yZWYocmVmKQogewogfQogCi1EaXJlY3RKSVRDb2RlOjp+
RGlyZWN0SklUQ29kZSgpCitKSVRDb2RlV2l0aENvZGVSZWY6On5KSVRDb2RlV2l0aENvZGVSZWYo
KQogewogfQogCi12b2lkIERpcmVjdEpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmKGNvbnN0IEpJ
VENvZGU6OkNvZGVSZWYgcmVmKQotewotICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlZik7Ci0gICAg
bV9yZWYgPSByZWY7Ci19Ci0KLUpJVENvZGU6OkNvZGVQdHIgRGlyZWN0SklUQ29kZTo6YWRkcmVz
c0ZvckNhbGwoKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKLSAgICByZXR1cm4gbV9y
ZWYuY29kZSgpOwotfQotCi12b2lkKiBEaXJlY3RKSVRDb2RlOjpleGVjdXRhYmxlQWRkcmVzc0F0
T2Zmc2V0KHNpemVfdCBvZmZzZXQpCit2b2lkKiBKSVRDb2RlV2l0aENvZGVSZWY6OmV4ZWN1dGFi
bGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCht
X3JlZik7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fcmVmLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpKSArIG9mZnNldDsKIH0KIAotdm9pZCogRGlyZWN0SklUQ29kZTo6
ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KQordm9pZCogSklUQ29kZVdpdGhDb2Rl
UmVmOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQobV9yZWYpOwogICAgIEFTU0VSVChvZmZzZXQgPD0gc2l6ZSgpKTsgLy8gdXNlIDw9IGlu
c3RlYWQgb2YgPCBiZWNhdXNlIGl0IGlzIHZhbGlkIHRvIGFzayBmb3IgYW4gYWRkcmVzcyBhdCB0
aGUgZXhjbHVzaXZlIGVuZCBvZiB0aGUgY29kZS4KICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4obV9yZWYuY29kZSgpLmRhdGFMb2NhdGlvbigpKSArIG9mZnNldDsKIH0KIAotdW5z
aWduZWQgRGlyZWN0SklUQ29kZTo6b2Zmc2V0T2Yodm9pZCogcG9pbnRlckludG9Db2RlKQordW5z
aWduZWQgSklUQ29kZVdpdGhDb2RlUmVmOjpvZmZzZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUp
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOwogICAgIGludHB0cl90IHJlc3VsdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXJJbnRvQ29kZSkgLSByZWludGVycHJldF9j
YXN0PGludHB0cl90PihtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CkBAIC0xMjYs
MTggKzExNSwxMDUgQEAgdW5zaWduZWQgRGlyZWN0SklUQ29kZTo6b2Zmc2V0T2Yodm9pZCogcAog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KTsKIH0KIAotc2l6ZV90IERp
cmVjdEpJVENvZGU6OnNpemUoKQorc2l6ZV90IEpJVENvZGVXaXRoQ29kZVJlZjo6c2l6ZSgpCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOwogICAgIHJldHVybiBtX3JlZi5zaXplKCk7CiB9
CiAKLWJvb2wgRGlyZWN0SklUQ29kZTo6Y29udGFpbnModm9pZCogYWRkcmVzcykKK2Jvb2wgSklU
Q29kZVdpdGhDb2RlUmVmOjpjb250YWlucyh2b2lkKiBhZGRyZXNzKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKG1fcmVmKTsKICAgICByZXR1cm4gbV9yZWYuZXhlY3V0YWJsZU1lbW9yeSgpLT5jb250
YWlucyhhZGRyZXNzKTsKIH0KIAorRGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZShKSVRUeXBl
IGppdFR5cGUpCisgICAgOiBKSVRDb2RlV2l0aENvZGVSZWYoaml0VHlwZSkKK3sKK30KKworRGly
ZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZSgKKyAgICBKSVRDb2RlOjpDb2RlUmVmIHJlZiwgSklU
Q29kZTo6Q29kZVB0ciB3aXRoQXJpdHlDaGVjaywgSklUVHlwZSBqaXRUeXBlKQorICAgIDogSklU
Q29kZVdpdGhDb2RlUmVmKHJlZiwgaml0VHlwZSkKKyAgICAsIG1fd2l0aEFyaXR5Q2hlY2sod2l0
aEFyaXR5Q2hlY2spCit7Cit9CisKK0RpcmVjdEpJVENvZGU6On5EaXJlY3RKSVRDb2RlKCkKK3sK
K30KKwordm9pZCBEaXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZihKSVRDb2RlOjpDb2Rl
UmVmIHJlZiwgSklUQ29kZTo6Q29kZVB0ciB3aXRoQXJpdHlDaGVjaykKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVCghbV9yZWYpOworICAgIG1fcmVmID0gcmVmOworICAgIG1fd2l0aEFyaXR5Q2hlY2sg
PSB3aXRoQXJpdHlDaGVjazsKK30KKworRGlyZWN0SklUQ29kZTo6UmVnaXN0ZXJQcmVzZXJ2YXRp
b25XcmFwcGVycyogRGlyZWN0SklUQ29kZTo6ZW5zdXJlV3JhcHBlcnMoKQoreworICAgIGlmICgh
bV93cmFwcGVycykKKyAgICAgICAgbV93cmFwcGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVnaXN0
ZXJQcmVzZXJ2YXRpb25XcmFwcGVycz4oKTsKKyAgICByZXR1cm4gbV93cmFwcGVycy5nZXQoKTsK
K30KKworSklUQ29kZTo6Q29kZVB0ciBEaXJlY3RKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbCgKKyAg
ICBWTSYgdm0sIEFyaXR5Q2hlY2tNb2RlIGFyaXR5LCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUg
cmVnaXN0ZXJzKQoreworICAgIHN3aXRjaCAoYXJpdHkpIHsKKyAgICBjYXNlIEFyaXR5Q2hlY2tO
b3RSZXF1aXJlZDoKKyAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBS
ZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobV9yZWYpOworICAgICAgICAgICAgcmV0dXJuIG1fcmVmLmNvZGUoKTsKKyAgICAgICAgY2Fz
ZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6IHsKKyAgICAgICAgICAgIFJlZ2lzdGVyUHJlc2VydmF0
aW9uV3JhcHBlcnMqIHdyYXBwZXJzID0gZW5zdXJlV3JhcHBlcnMoKTsKKyAgICAgICAgICAgIGlm
ICghd3JhcHBlcnMtPndpdGhvdXRBcml0eUNoZWNrKQorICAgICAgICAgICAgICAgIHdyYXBwZXJz
LT53aXRob3V0QXJpdHlDaGVjayA9IGdlbmVyYXRlV3JhcHBlcih2bSwgbV9yZWYuY29kZSgpKTsK
KyAgICAgICAgICAgIHJldHVybiB3cmFwcGVycy0+d2l0aG91dEFyaXR5Q2hlY2suY29kZSgpOwor
ICAgICAgICB9IH0KKyAgICBjYXNlIE11c3RDaGVja0FyaXR5OgorICAgICAgICBzd2l0Y2ggKHJl
Z2lzdGVycykgeworICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3dpdGhBcml0eUNoZWNrKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX3dpdGhBcml0eUNoZWNrOworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJl
Z2lzdGVyczogeworICAgICAgICAgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVycyogd3Jh
cHBlcnMgPSBlbnN1cmVXcmFwcGVycygpOworICAgICAgICAgICAgaWYgKCF3cmFwcGVycy0+d2l0
aEFyaXR5Q2hlY2spCisgICAgICAgICAgICAgICAgd3JhcHBlcnMtPndpdGhBcml0eUNoZWNrID0g
Z2VuZXJhdGVXcmFwcGVyKHZtLCBtX3dpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgICAgIHJldHVy
biB3cmFwcGVycy0+d2l0aEFyaXR5Q2hlY2suY29kZSgpOworICAgICAgICB9IH0KKyAgICB9Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQ29kZVB0cigpOwor
fQorCitOYXRpdmVKSVRDb2RlOjpOYXRpdmVKSVRDb2RlKEpJVFR5cGUgaml0VHlwZSkKKyAgICA6
IEpJVENvZGVXaXRoQ29kZVJlZihqaXRUeXBlKQoreworfQorCitOYXRpdmVKSVRDb2RlOjpOYXRp
dmVKSVRDb2RlKENvZGVSZWYgcmVmLCBKSVRUeXBlIGppdFR5cGUpCisgICAgOiBKSVRDb2RlV2l0
aENvZGVSZWYocmVmLCBqaXRUeXBlKQoreworfQorCitOYXRpdmVKSVRDb2RlOjp+TmF0aXZlSklU
Q29kZSgpCit7Cit9CisKK3ZvaWQgTmF0aXZlSklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWYoQ29k
ZVJlZiByZWYpCit7CisgICAgQVNTRVJUKCFtX3JlZik7CisgICAgbV9yZWYgPSByZWY7Cit9CisK
K0pJVENvZGU6OkNvZGVQdHIgTmF0aXZlSklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoVk0mLCBBcml0
eUNoZWNrTW9kZSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKCEhbV9yZWYpOworICAgIHJldHVybiBtX3JlZi5jb2RlKCk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5oCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDE0IEBACiAjaWZuZGVmIEpJVENv
ZGVfaAogI2RlZmluZSBKSVRDb2RlX2gKIAotI2lmIEVOQUJMRShKSVQpIHx8IEVOQUJMRShMTElO
VCkKKyNpbmNsdWRlICJBcml0eUNoZWNrTW9kZS5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgog
I2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkpJVFN0dWJzLmgiCiAjaW5jbHVk
ZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkxlZ2FjeVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCi0jZW5kaWYKKyNpbmNsdWRlICJSZWdpc3RlclByZXNl
cnZhdGlvbk1vZGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTE2NCw3ICsxNjQsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBqaXRDb2RlLT5qaXRUeXBlKCk7CiAgICAgfQogICAgIAot
ICAgIHZpcnR1YWwgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbCgpID0gMDsKKyAgICB2aXJ0dWFsIENv
ZGVQdHIgYWRkcmVzc0ZvckNhbGwoVk0mLCBBcml0eUNoZWNrTW9kZSwgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Nb2RlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkKiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zm
c2V0KHNpemVfdCBvZmZzZXQpID0gMDsKICAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcygpIHsg
cmV0dXJuIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoMCk7IH0KICAgICB2aXJ0dWFsIHZvaWQq
IGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgPSAwOwpAQCAtMTg5LDIxICsxODks
NTggQEAgcHJpdmF0ZToKICAgICBKSVRUeXBlIG1faml0VHlwZTsKIH07CiAKLWNsYXNzIERpcmVj
dEpJVENvZGUgOiBwdWJsaWMgSklUQ29kZSB7CitjbGFzcyBKSVRDb2RlV2l0aENvZGVSZWYgOiBw
dWJsaWMgSklUQ29kZSB7Citwcm90ZWN0ZWQ6CisgICAgSklUQ29kZVdpdGhDb2RlUmVmKEpJVFR5
cGUpOworICAgIEpJVENvZGVXaXRoQ29kZVJlZihDb2RlUmVmLCBKSVRUeXBlKTsKKwogcHVibGlj
OgotICAgIERpcmVjdEpJVENvZGUoSklUVHlwZSk7Ci0gICAgRGlyZWN0SklUQ29kZShjb25zdCBD
b2RlUmVmLCBKSVRUeXBlKTsKLSAgICB2aXJ0dWFsIH5EaXJlY3RKSVRDb2RlKCk7Ci0gICAgCi0g
ICAgdm9pZCBpbml0aWFsaXplQ29kZVJlZihDb2RlUmVmIHJlZik7CisgICAgdmlydHVhbCB+SklU
Q29kZVdpdGhDb2RlUmVmKCk7CiAKLSAgICB2aXJ0dWFsIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwo
KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQo
c2l6ZV90IG9mZnNldCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkKiBkYXRhQWRkcmVzc0F0
T2Zmc2V0KHNpemVfdCBvZmZzZXQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdW5zaWduZWQgb2Zm
c2V0T2Yodm9pZCogcG9pbnRlckludG9Db2RlKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHNpemVf
dCBzaXplKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGNvbnRhaW5zKHZvaWQqKSBPVkVS
UklERTsKIAorcHJvdGVjdGVkOgorICAgIENvZGVSZWYgbV9yZWY7Cit9OworCitjbGFzcyBEaXJl
Y3RKSVRDb2RlIDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7CitwdWJsaWM6CisgICAgRGly
ZWN0SklUQ29kZShKSVRUeXBlKTsKKyAgICBEaXJlY3RKSVRDb2RlKENvZGVSZWYsIENvZGVQdHIg
d2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGUpOworICAgIHZpcnR1YWwgfkRpcmVjdEpJVENvZGUoKTsK
KyAgICAKKyAgICB2b2lkIGluaXRpYWxpemVDb2RlUmVmKENvZGVSZWYgcmVmLCBDb2RlUHRyIHdp
dGhBcml0eUNoZWNrKTsKKworICAgIHZpcnR1YWwgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbChWTSYs
IEFyaXR5Q2hlY2tNb2RlLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpIE9WRVJSSURFOworCitw
cml2YXRlOgorICAgIHN0cnVjdCBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJzIHsKKyAgICAg
ICAgQ29kZVJlZiB3aXRob3V0QXJpdHlDaGVjazsKKyAgICAgICAgQ29kZVJlZiB3aXRoQXJpdHlD
aGVjazsKKyAgICB9OworCisgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVycyogZW5zdXJl
V3JhcHBlcnMoKTsKKyAgICAKKyAgICBDb2RlUmVmIG1fcmVmOworICAgIENvZGVQdHIgbV93aXRo
QXJpdHlDaGVjazsKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVnaXN0ZXJQcmVzZXJ2YXRp
b25XcmFwcGVycz4gbV93cmFwcGVyczsKK307CisKK2NsYXNzIE5hdGl2ZUpJVENvZGUgOiBwdWJs
aWMgSklUQ29kZVdpdGhDb2RlUmVmIHsKK3B1YmxpYzoKKyAgICBOYXRpdmVKSVRDb2RlKEpJVFR5
cGUpOworICAgIE5hdGl2ZUpJVENvZGUoQ29kZVJlZiwgSklUVHlwZSk7CisgICAgdmlydHVhbCB+
TmF0aXZlSklUQ29kZSgpOworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGVSZWYoQ29kZVJl
ZiByZWYpOworCisgICAgdmlydHVhbCBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKFZNJiwgQXJpdHlD
aGVja01vZGUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSkgT1ZFUlJJREU7CisKIHByaXZhdGU6
CiAgICAgQ29kZVJlZiBtX3JlZjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4NSw3ICs2
ODUsOCBAQCBzdGF0aWMgdm9pZCogaGFuZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBlCiAgICAgcmV0
dXJuIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiB9CiAKLWlubGluZSBjaGFyKiBsaW5rRm9y
KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoraW5s
aW5lIGNoYXIqIGxpbmtGb3IoCisgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKQEAgLTcwMyw5ICs3MDQsOSBAQCBpbmxpbmUgY2hhciogbGlu
a0ZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQ
dHI7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAwOwogICAgIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldENhbGxMaW5rSW5mbyhleGVjQ2FsbGVl
LT5yZXR1cm5QQygpKTsKLSAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAg
ICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFk
ZHJlc3NGb3JDYWxsKCk7Ci0gICAgZWxzZSB7CisgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1
bmN0aW9uKCkpIHsKKyAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Io
KnZtLCBraW5kLCBNdXN0Q2hlY2tBcml0eSwgcmVnaXN0ZXJzKTsKKyAgICB9IGVsc2UgewogICAg
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogICAgICAgICBKU09iamVjdCogZXJy
b3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwg
Y2FsbGVlLT5zY29wZSgpLCBraW5kKTsKICAgICAgICAgaWYgKGVycm9yKSB7CkBAIC03MTMsMjkg
KzcxNCw0MyBAQCBpbmxpbmUgY2hhciogbGlua0ZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsCiAgICAg
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0dWIodGhy
b3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7CiAgICAgICAgIH0KICAgICAgICAgY29kZUJsb2NrID0gZnVuY3Rpb25FeGVjdXRh
YmxlLT5jb2RlQmxvY2tGb3Ioa2luZCk7CisgICAgICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5Owog
ICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0
YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5r
SW5mby5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzKQotICAgICAgICAgICAg
Y29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdpdGhBcml0eUNo
ZWNrRm9yKGtpbmQpOworICAgICAgICAgICAgYXJpdHkgPSBNdXN0Q2hlY2tBcml0eTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJh
dGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoKTsKKyAgICAgICAgICAgIGFyaXR5
ID0gQXJpdHlDaGVja05vdFJlcXVpcmVkOworICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVj
dXRhYmxlLT5lbnRyeXBvaW50Rm9yKCp2bSwga2luZCwgYXJpdHksIHJlZ2lzdGVycyk7CiAgICAg
fQogICAgIGlmICghY2FsbExpbmtJbmZvLnNlZW5PbmNlKCkpCiAgICAgICAgIGNhbGxMaW5rSW5m
by5zZXRTZWVuKCk7CiAgICAgZWxzZQotICAgICAgICBsaW5rRm9yKGV4ZWNDYWxsZWUsIGNhbGxM
aW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIsIGtpbmQpOworICAgICAgICBsaW5r
Rm9yKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIs
IGtpbmQsIHJlZ2lzdGVycyk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNv
ZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQogewotICAgIHJldHVybiBsaW5r
Rm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsKTsKKyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2Fs
bGVlLCBDb2RlRm9yQ2FsbCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiB9CiAK
IGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdChFeGVjU3RhdGUqIGV4
ZWNDYWxsZWUpCiB7Ci0gICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0
cnVjdCk7CisgICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCwg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7Cit9CisKK2NoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTGlua0NhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxs
ZWUpCit7CisgICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIE11c3RQ
cmVzZXJ2ZVJlZ2lzdGVycyk7Cit9CisKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlu
a0NvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAg
ICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0LCBNdXN0UHJlc2Vy
dmVSZWdpc3RlcnMpOwogfQogCi1pbmxpbmUgY2hhciogdmlydHVhbEZvcldpdGhGdW5jdGlvbihF
eGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNDZWxs
KiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCitpbmxpbmUgY2hhciogdmlydHVhbEZvcldpdGhGdW5j
dGlvbigKKyAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycywKKyAgICBKU0NlbGwqJiBj
YWxsZWVBc0Z1bmN0aW9uQ2VsbCkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVl
LT5jYWxsZXJGcmFtZSgpOwogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpAQCAtNzU3LDE2ICs3
NzIsMjAgQEAgaW5saW5lIGNoYXIqIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oRXhlYwogICAgICAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXIqPihleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3IoCisgICAgICAgICp2bSwga2luZCwgTXVzdENoZWNr
QXJpdHksIHJlZ2lzdGVycykpOwogfQogCi1pbmxpbmUgY2hhciogdmlydHVhbEZvcihFeGVjU3Rh
dGUqIGV4ZWNDYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK2lubGluZSBjaGFy
KiB2aXJ0dWFsRm9yKAorICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewogICAg
IEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkOwotICAgIHJldHVybiB2aXJ0dWFs
Rm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGtpbmQsIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdu
b3JlZCk7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwga2lu
ZCwgcmVnaXN0ZXJzLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQpOwogfQogCi1zdGF0aWMg
Ym9vbCBhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwg
SlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8p
CitzdGF0aWMgYm9vbCBhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKAorICAgIEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycywgSlNDZWxs
KiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwKKyAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykK
IHsKICAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC03ODAsNyArNzk5LDkgQEAgc3RhdGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJl
Q2FsbAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgQVNTRVJUKGNhbGxlZS0+ZXhl
Y3V0YWJsZSgpLT5oYXNKSVRDb2RlRm9yQ2FsbCgpKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY29kZVB0ciA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2Fs
bCgpLT5hZGRyZXNzRm9yQ2FsbCgpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRy
ID0KKyAgICAgICAgY2FsbGVlLT5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxs
KCktPmFkZHJlc3NGb3JDYWxsKAorICAgICAgICAgICAgQXJpdHlDaGVja05vdFJlcXVpcmVkLCBy
ZWdpc3RlcnMpOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrOwogICAgIGlmIChjYWxs
ZWUtPmV4ZWN1dGFibGUoKS0+aXNIb3N0RnVuY3Rpb24oKSkKQEAgLTc5Myw3ICs4MTQsNyBAQCBz
dGF0aWMgYm9vbCBhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsCiAgICAgCiAgICAgbGlua0Ns
b3N1cmVDYWxsKAogICAgICAgICBleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIGNvZGVCbG9jaywK
LSAgICAgICAgY2FsbGVlLT5zdHJ1Y3R1cmUoKSwgY2FsbGVlLT5leGVjdXRhYmxlKCksIGNvZGVQ
dHIpOworICAgICAgICBjYWxsZWUtPnN0cnVjdHVyZSgpLCBjYWxsZWUtPmV4ZWN1dGFibGUoKSwg
Y29kZVB0ciwgcmVnaXN0ZXJzKTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTgwNCw3
ICs4MjUsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlCiAgICAg
Y2hhciogcmVzdWx0ID0gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVlLCBDb2RlRm9y
Q2FsbCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwogICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPmdldENhbGxMaW5r
SW5mbyhleGVjQ2FsbGVlLT5yZXR1cm5QQygpKTsKIAotICAgIGlmICghYXR0ZW1wdFRvT3B0aW1p
emVDbG9zdXJlQ2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwgY2FsbExpbmtJ
bmZvKSkKKyAgICBpZiAoIWF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoZXhlY0NhbGxlZSwg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwsIGNh
bGxMaW5rSW5mbykpCiAgICAgICAgIGxpbmtTbG93Rm9yKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5m
bywgQ29kZUZvckNhbGwpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CkBAIC04MTIsMTQgKzgz
MywzNSBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlCiAKIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVl
KQogeyAgICAKLSAgICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCk7
CisgICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIFJlZ2lzdGVy
UHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwogfQogCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblZpcnR1YWxDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQogewotICAgIHJldHVy
biB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgIHJldHVybiB2
aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QsIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTm90UmVxdWlyZWQpOwogfQogCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtD
bG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAg
ICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsOworICAgIGNoYXIqIHJlc3VsdCA9IHZpcnR1
YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIGNhbGxlZUFzRnVuY3Rp
b25DZWxsKTsKKyAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWNDYWxsZWUtPmNh
bGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oZXhlY0NhbGxlZS0+cmV0
dXJuUEMoKSk7CisKKyAgICBpZiAoIWF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoZXhlY0Nh
bGxlZSwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwgY2FsbExp
bmtJbmZvKSkKKyAgICAgICAgbGlua1Nsb3dGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBD
b2RlRm9yQ2FsbCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSog
ZXhlY0NhbGxlZSkKK3sgICAgCisgICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwgQ29k
ZUZvckNhbGwsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7Cit9CisKK2NoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSog
ZXhlY0NhbGxlZSkKK3sKKyAgICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9y
Q29uc3RydWN0LCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOworfQogCiBzaXplX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTYwNjIyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIxMywxMSArMjEzLDE3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQ
dXRCeVYKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RG
X0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2Vu
ZXJpYyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNhbGxFdmFsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7
CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUq
KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxs
KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VmlydHVhbENvbnN0cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwor
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4
ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlu
a0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwor
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdz
KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5B
TDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdFRoYXRQcmVzZXJ2
ZXNSZWdzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKKwogc2l6ZV90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlKSBXVEZfSU5URVJOQUw7CiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21w
YXJlTGVzc0VxKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RG
X0lOVEVSTkFMOwogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7
CkBAIC0yNzksNiArMjg1LDY4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRUb1Nj
b3BlKEUKIAogfSAvLyBleHRlcm4gIkMiCiAKK2lubGluZSBQX0pJVE9wZXJhdGlvbl9FIG9wZXJh
dGlvbkxpbmtGb3IoCisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBSZWdpc3RlclBy
ZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNh
c2UgQ29kZUZvckNhbGw6CisgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgIGNh
c2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgIHJldHVybiBv
cGVyYXRpb25MaW5rQ2FsbDsKKyAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6Cisg
ICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uTGlua0NhbGxUaGF0UHJlc2VydmVzUmVnczsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAg
ICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRp
b25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5rQ29uc3RydWN0
OworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAgIHJldHVy
biBvcGVyYXRpb25MaW5rQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3M7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK2lubGluZSBQX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvblZpcnR1
YWxGb3IoCisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBSZWdpc3RlclByZXNlcnZh
dGlvbk1vZGUgcmVnaXN0ZXJzKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgQ29k
ZUZvckNhbGw6CisgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgIGNhc2UgUmVn
aXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRp
b25WaXJ0dWFsQ2FsbDsKKyAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uVmlydHVhbENhbGxUaGF0UHJlc2VydmVzUmVnczsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAg
ICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRp
b25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25WaXJ0dWFsQ29uc3Ry
dWN0OworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3M7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2lubGluZSBQX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlv
bkxpbmtDbG9zdXJlQ2FsbEZvcihSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQor
eworICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlv
bk5vdFJlcXVpcmVkOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsOwor
ICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9u
TGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3M7CisgICAgfQorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdl
bmVyYXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Z2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyUHJlc2VydmF0aW9u
V3JhcHBlckdlbmVyYXRvci5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkFzc2Vt
Ymx5SGVscGVycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGdlbmVyYXRlV3JhcHBlcihWTSYgdm0sIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpCit7
CisjaWYgRU5BQkxFKEZUTF9KSVQpCisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdp
c3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIAorICAgIC8vIE5vIG5lZWQgdG8g
cHJlc2VydmUgRlAgc2luY2UgdGhhdCBhbHdheXMgZ2V0cyBwcmVzZXJ2ZWQgYW55d2F5LgorICAg
IGNhbGxlZVNhdmVzLmNsZWFyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAKKyAg
ICB1bnNpZ25lZCBudW1iZXJPZkNhbGxlZVNhdmVzID0gY2FsbGVlU2F2ZXMubnVtYmVyT2ZTZXRS
ZWdpc3RlcnMoKTsKKyAgICAKKyAgICAvLyBOZWVkIHRvIHByZXNlcnZlIHRoZSBvbGQgcmV0dXJu
IFBDLgorICAgIHVuc2lnbmVkIG51bWJlck9mVmFsdWVzVG9TYXZlID0gbnVtYmVyT2ZDYWxsZWVT
YXZlcyArIDE7CisgICAgCisgICAgLy8gQWxpZ25tZW50LiBQcmVzZXJ2ZSB0aGUgc2FtZSBhbGln
bm1lbnQgaW52YXJpYW50cyB0aGF0IHRoZSBjYWxsZXIgaW1wb3NlZC4KKyAgICB1bnNpZ25lZCBu
dW1iZXJPZk5ld1N0YWNrU2xvdHMgPQorICAgICAgICByb3VuZFVwVG9NdWx0aXBsZU9mKG51bWJl
ck9mVmFsdWVzVG9TYXZlLCBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpKTsKKyAgICAKKyAgICBB
c3NlbWJseUhlbHBlcnMgaml0OworICAgIAorICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NB
ZnRlckNhbGwoR1BSSW5mbzo6cmVnVDEpOworICAgIGppdC5sb2FkMzIoCisgICAgICAgIEFzc2Vt
Ymx5SGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIsCisgICAgICAgICAgICAoSlNTdGFjazo6QXJndW1lbnRDb3VudCAtIEpT
U3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2Fk
T2Zmc2V0KSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDIpOworICAgIAorICAgIC8vIFBsYWNlIHRo
ZSBzdGFjayBwb2ludGVyIHdoZXJlIHdlIHdhbnQgaXQgdG8gYmUuCisgICAgc2l6ZV90IG9mZnNl
dCA9IHNpemVvZihSZWdpc3RlcikgKiBudW1iZXJPZk5ld1N0YWNrU2xvdHM7CisgICAgaml0LnN1
YlB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihvZmZzZXQpLCBBc3NlbWJseUhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAKKyAgICAvLyBDb21wdXRlIHRoZSBudW1i
ZXIgb2YgdGhpbmdzIHdlIHdpbGwgYmUgY29weWluZy4KKyAgICBqaXQuYWRkMzIoCisgICAgICAg
IEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKAorICAgICAgICAgICAgSlNTdGFjazo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSwKKyAgICAg
ICAgR1BSSW5mbzo6cmVnVDIpOworCisgICAgQVNTRVJUKCFjYWxsZWVTYXZlcy5nZXQoR1BSSW5m
bzo6cmVnVDQpKTsKKyAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBHUFJJbmZvOjpyZWdUNCk7CisgICAgCisgICAgQXNzZW1ibHlIZWxwZXJzOjpMYWJl
bCBsb29wID0gaml0LmxhYmVsKCk7CisgICAgaml0LnN1YjMyKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmxvYWQ2NChBc3NlbWJseUhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDQsIG9mZnNldCksIEdQUkluZm86OnJlZ1QwKTsK
KyAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDQpOworICAgIGpp
dC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNpemVvZihSZWdpc3Rlcikp
LCBHUFJJbmZvOjpyZWdUNCk7CisgICAgaml0LmJyYW5jaFRlc3QzMihBc3NlbWJseUhlbHBlcnM6
Ok5vblplcm8sIEdQUkluZm86OnJlZ1QyKS5saW5rVG8oJmppdCwgbG9vcCk7CisKKyAgICAvLyBB
dCB0aGlzIHBvaW50IHJlZ1Q0ICsgb2Zmc2V0IHBvaW50cyB0byB3aGVyZSB3ZSBzYXZlIHRoaW5n
cy4KKyAgICBzaXplX3QgY3VycmVudE9mZnNldCA9IG9mZnNldDsKKyAgICBqaXQuc3RvcmVQdHIo
R1BSSW5mbzo6cmVnVDEsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUNCwg
Y3VycmVudE9mZnNldCkpOworICAgIAorICAgIGZvciAoR1BSUmVnIGdwciA9IEFzc2VtYmx5SGVs
cGVyczo6Zmlyc3RSZWdpc3RlcigpOyBncHIgPD0gQXNzZW1ibHlIZWxwZXJzOjpsYXN0UmVnaXN0
ZXIoKTsgZ3ByID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihncHIgKyAxKSkgeworICAgICAgICBjdXJy
ZW50T2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgIGppdC5zdG9yZTY0KGdwciwg
QXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1Q0LCBvZmZzZXQpKTsKKyAgICB9
CisgICAgCisgICAgLy8gQXNzdW1lIHRoYXQgdGhlcmUgYXJlbid0IGFueSBzYXZlZCBGUCByZWdp
c3RlcnMuCisKKyAgICBBc3NlbWJseUhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5uZWFyQ2FsbCgp
OworICAgIAorICAgIC8vIFdlIG5lZWQgdG8gcGxhY2UgdGhlIHN0YWNrIHBvaW50ZXIgYmFjayB0
byB3aGVyZSB0aGUgY2FsbGVyIHRob3VnaHQgdGhleSBsZWZ0IGl0LgorICAgIC8vIEJ1dCBhbHNv
LCBpbiBvcmRlciB0byByZWNvdmVyIHRoZSByZWdpc3RlcnMsIHdlIG5lZWQgdG8gZmlndXJlIG91
dCBob3cgYmlnIHRoZQorICAgIC8vIGFyZ3VtZW50cyBhcmVhIGlzLgorICAgIAorICAgIGppdC5s
b2FkMzIoCisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEFz
c2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsCisgICAgICAgICAgICAoSlNTdGFj
azo6QXJndW1lbnRDb3VudCAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSAqIHNpemVv
ZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDIpOwor
ICAgIGppdC5sc2hpZnQzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigzKSwgR1BSSW5m
bzo6cmVnVDIpOworICAgIAorICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tMzIob2Zmc2V0KSwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJ
bmZvOjpyZWdUMik7CisgICAgCisgICAgLy8gcmVnVDIgbm93IHBvaW50cyB0byAoSlNTdGFjazo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKQorICAg
IC8vIHNob3J0IG9mIHdoZXJlIHRoaW5ncyBhcmUgc2F2ZWQuCisgICAgc2l6ZV90IGN1cnJlbnRP
ZmZzZXQgPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gSlNTdGFjazo6Q2FsbGVyRnJh
bWVBbmRQQ1NpemU7CisgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OnJlZ1QyLCBjdXJyZW50T2Zmc2V0KSwgR1BSSW5mbzo6cmVnVDEpOworICAgIAorICAg
IGZvciAoR1BSUmVnIGdwciA9IEFzc2VtYmx5SGVscGVyczo6Zmlyc3RSZWdpc3RlcigpOyBncHIg
PD0gQXNzZW1ibHlIZWxwZXJzOjpsYXN0UmVnaXN0ZXIoKTsgZ3ByID0gc3RhdGljX2Nhc3Q8R1BS
UmVnPihncHIgKyAxKSkgeworICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rl
cik7CisgICAgICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1Q0LCBvZmZzZXQpLCBncHIpOworICAgIH0KKyAgICAKKyAgICBqaXQuanVtcChHUFJJbmZv
OjpyZWdUMSk7CisgICAgCisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCAmaml0KTsKKyAg
ICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwodGFyZ2V0KSk7CisgICAg
CisgICAgcmV0dXJuIEZJTkFMSVpFX0RGR19DT0RFKGxpbmtCdWZmZXIsICgiUmVnaXN0ZXIgcHJl
c2VydmF0aW9uIHdyYXBwZXIgZm9yICVwIiwgdGFyZ2V0LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsK
KyNlbHNlIC8vIEVOQUJMRShGVExfSklUKQorICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgbm9uLUZU
TCBidWlsZHMgZm9yIHR3byByZWFzb25zOgorICAgIC8vIC0gSXQganVzdCBzbyBoYXBwZW5zIHRo
YXQgY3VycmVudGx5IG9ubHkgdGhlIEZUTCBib3R0b21zIG91dCBpbiB0aGlzIGNvZGUuCisgICAg
Ly8gLSBUaGUgY29kZSBhYm92ZSB1c2VzIDY0LWJpdCBpbnN0cnVjdGlvbnMuIEl0IGRvZXNuJ3Qg
bmVjZXNzYXJpbHkgaGF2ZSB0bzsgaXQgd291bGQgYmUKKyAgICAvLyAgIGVhc3kgdG8gY2hhbmdl
IGl0IHNvIHRoYXQgaXQgZG9lc24ndC4gQnV0IG9idmlvdXNseSBtYWtpbmcgdGhhdCBjaGFuZ2Ug
d291bGQgYmUgYQorICAgIC8vICAgcHJlcmVxdWlzaXRlIHRvIHJlbW92aW5nIHRoaXMgI2lmLgor
ICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVy
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3Jh
cHBlckdlbmVyYXRvcl9oCisjZGVmaW5lIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVy
YXRvcl9oCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZiBnZW5lcmF0ZVdyYXBwZXIoVk0mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFy
Z2V0KTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisj
ZW5kaWYgLy8gUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjcwLDE3ICsxMjcwLDE5IEBAIHZvaWQgcmVwYXRjaEluKAogICAgIHJlcGF0Y2hDYWxsKGV4ZWMt
PmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkluKTsK
IH0KIAotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZl
ciwgVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBraW5kKQotewotICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5n
ZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0t
PmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOworc3Rh
dGljIHZvaWQgbGlua1Nsb3dGb3IoCisgICAgUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwg
Vk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywKKyAgICBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCit7CisgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoCisgICAgICAgIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24sCisgICAgICAgIHZtLT5nZXRDVElTdHViKHZpcnR1YWxUdW5rR2VuZXJhdG9yRm9yKGtp
bmQsIHJlZ2lzdGVycykpKTsKIH0KIAotdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBKU0Z1
bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQpCit2b2lkIGxpbmtGb3IoCisgICAgRXhlY1N0YXRlKiBleGVjLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssCisg
ICAgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLAorICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSBy
ZWdpc3RlcnMpCiB7CiAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1Yik7CiAgICAgCkBAIC0x
MzAyLDI1ICsxMzA0LDMwIEBAIHZvaWQgbGlua0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5r
SW4KICAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGV4ZWMtPmNhbGxl
ckZyYW1lKCksICZjYWxsTGlua0luZm8pOwogICAgIAogICAgIGlmIChraW5kID09IENvZGVGb3JD
YWxsKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9y
KS5jb2RlKCkpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVy
YXRvckZvcihyZWdpc3RlcnMpKS5jb2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAogICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgIGxpbmtTbG93Rm9y
KHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIENvZGVGb3JDb25zdHJ1Y3QpOworICAg
IGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIENvZGVGb3JDb25z
dHJ1Y3QsIHJlZ2lzdGVycyk7CiB9CiAKLXZvaWQgbGlua1Nsb3dGb3IoRXhlY1N0YXRlKiBleGVj
LCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
KQordm9pZCBsaW5rU2xvd0ZvcigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYg
Y2FsbExpbmtJbmZvLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsCisgICAgUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVC
bG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOwogICAgIFZNKiB2bSA9IGNh
bGxlckNvZGVCbG9jay0+dm0oKTsKICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZm
ZXIoY2FsbGVyQ29kZUJsb2NrKTsKICAgICAKLSAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVy
LCB2bSwgY2FsbExpbmtJbmZvLCBraW5kKTsKKyAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVy
LCB2bSwgY2FsbExpbmtJbmZvLCBraW5kLCByZWdpc3RlcnMpOwogfQogCi12b2lkIGxpbmtDbG9z
dXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2Rl
QmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEV4ZWN1dGFibGVC
YXNlKiBleGVjdXRhYmxlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cikKK3ZvaWQgbGlu
a0Nsb3N1cmVDYWxsKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAorICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNv
ZGVQdHIsCisgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsKICAgICBB
U1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKTsKICAgICAKQEAgLTEzODAsMTEgKzEzODcsMTEgQEAg
dm9pZCBsaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjLCBDYQogI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCiAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdUMSk7CiAjZW5kaWYKLSAgICBzdHViSml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgIHN0dWJK
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIAog
ICAgIC8vIEZJWE1FOiBDU3RhY2sgLSBUaGluayB0aGUgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZv
cmVSZXR1cm4oKSBpbnN0cnVjdGlvbiBzaG91bGQgYmUgYSBwb2tlCiAgICAgc3R1YkppdC5icmVh
a3BvaW50KCk7Ci0gICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihH
UFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVm
b3JlUmV0dXJuKEdQUkluZm86OnJlZ1QyKTsKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xv
dyA9IHN0dWJKaXQuanVtcCgpOwogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZt
LCAmc3R1YkppdCwgY2FsbGVyQ29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5oCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtNDEsOSArNDEsOSBAQCB2b2lkIGJ1aWxkR2V0
QnlJRFByb3RvTGlzdChFeGVjU3RhdGUqLCBKCiB2b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0
ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBT
dHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwogdm9pZCBidWlsZFB1dEJ5SWRMaXN0KEV4ZWNT
dGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3Qm
LCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwogdm9pZCByZXBhdGNoSW4oRXhlY1N0YXRl
KiwgSlNDZWxsKiwgY29uc3QgSWRlbnRpZmllciYsIGJvb2wgd2FzRm91bmQsIGNvbnN0IFByb3Bl
cnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiwg
Q2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwotdm9pZCBsaW5rU2xvd0ZvcihF
eGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLXZvaWQg
bGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIFN0
cnVjdHVyZSosIEV4ZWN1dGFibGVCYXNlKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKTsKK3ZvaWQg
bGlua0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU0Z1bmN0aW9u
KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlKTsKK3ZvaWQgbGlua1Nsb3dGb3IoRXhlY1N0YXRlKiwg
Q2FsbExpbmtJbmZvJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRp
b25Nb2RlKTsKK3ZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYs
IENvZGVCbG9jayosIFN0cnVjdHVyZSosIEV4ZWN1dGFibGVCYXNlKiwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpOwogdm9pZCByZXNldEdldEJ5SUQoUmVw
YXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIHJlc2V0UHV0QnlJRChSZXBh
dGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVzZXRJbihSZXBhdGNoQnVm
ZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTksNyArOTksNyBAQCBzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKIH0KIAogc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9yVGh1bmtHZW5lcmF0b3IoCi0gICAgVk0qIHZtLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgVk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgLy8g
VGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjayBvciBpbiB0aGUgbGluayByZWdpc3Rl
ci4gV2Ugd2lsbCBoZW5jZQogICAgIC8vIHNhdmUgdGhlIHJldHVybiBhZGRyZXNzIHRvIHRoZSBj
YWxsIGZyYW1lIHdoaWxlIHdlIG1ha2UgYSBDKysgZnVuY3Rpb24gY2FsbApAQCAtMTA5LDM4ICsx
MDksNTkgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9yVGh1bgogICAgIAog
ICAgIENDYWxsSGVscGVycyBqaXQodm0pOwogICAgIAotICAgIHNsb3dQYXRoRm9yKGppdCwgdm0s
IGtpbmQgPT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25MaW5rQ2FsbCA6IG9wZXJhdGlvbkxpbmtD
b25zdHJ1Y3QpOworICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtGb3Ioa2lu
ZCwgcmVnaXN0ZXJzKSk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZq
aXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCiAgICAgICAg
IHBhdGNoQnVmZmVyLAotICAgICAgICAoIkxpbmsgJXMgc2xvdyBwYXRoIHRodW5rIiwga2luZCA9
PSBDb2RlRm9yQ2FsbCA/ICJjYWxsIiA6ICJjb25zdHJ1Y3QiKSk7CisgICAgICAgICgiTGluayAl
cyVzIHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyAiY2FsbCIgOiAiY29u
c3RydWN0IiwgcmVnaXN0ZXJzID09IE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyA/ICIgdGhhdCBwcmVz
ZXJ2ZXMgcmVnaXN0ZXJzIiA6ICIiKSk7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5r
Q2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gbGlua0ZvclRodW5rR2Vu
ZXJhdG9yKHZtLCBDb2RlRm9yQ2FsbCk7CisgICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRv
cih2bSwgQ29kZUZvckNhbGwsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdXJpZWQpOwogfQog
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKiB2
bSkKIHsKLSAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ29uc3Ry
dWN0KTsKKyAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ29uc3Ry
dWN0LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVyaWVkKTsKIH0KIAotLy8gRm9yIGNsb3N1
cmUgb3B0aW1pemF0aW9ucywgd2Ugb25seSBpbmNsdWRlIGNhbGxzLCBzaW5jZSBpZiB5b3UncmUg
dXNpbmcgY2xvc3VyZXMgZm9yCi0vLyBvYmplY3QgY29uc3RydWN0aW9uIHRoZW4geW91J3JlIGdv
aW5nIHRvIGxvc2UgYmlnIHRpbWUgYW55d2F5LgotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtD
bG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBs
aW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIHJl
dHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsLCBNdXN0UHJlc2VydmVS
ZWdpc3RlcnMpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVjdFRoYXRQ
cmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIHJldHVybiBsaW5rRm9y
VGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVy
cyk7Cit9CisKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsRm9y
VGh1bmtHZW5lcmF0b3IoCisgICAgVk0qIHZtLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVn
aXN0ZXJzKQogewogICAgIENDYWxsSGVscGVycyBqaXQodm0pOwogICAgIAotICAgIHNsb3dQYXRo
Rm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbCk7CisgICAgc2xvd1BhdGhGb3Io
aml0LCB2bSwgb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsRm9yKHJlZ2lzdGVycykpOwogICAgIAog
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwot
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxpbmsgY2xvc3VyZSBjYWxs
IHNsb3cgcGF0aCB0aHVuayIpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgKCJMaW5rIGNsb3N1cmUgY2FsbCAlcyBzbG93IHBhdGggdGh1bmsiLCByZWdpc3RlcnMgPT0g
TXVzdFByZXNlcnZlUmVnaXN0ZXJzID8gIiB0aGF0IHByZXNlcnZlcyByZWdpc3RlcnMiIDogIiIp
KTsKK30KKworLy8gRm9yIGNsb3N1cmUgb3B0aW1pemF0aW9ucywgd2Ugb25seSBpbmNsdWRlIGNh
bGxzLCBzaW5jZSBpZiB5b3UncmUgdXNpbmcgY2xvc3VyZXMgZm9yCisvLyBvYmplY3QgY29uc3Ry
dWN0aW9uIHRoZW4geW91J3JlIGdvaW5nIHRvIGxvc2UgYmlnIHRpbWUgYW55d2F5LgorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sK
KyAgICByZXR1cm4gbGlua0Nsb3N1cmVDYWxsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIFJlZ2lzdGVy
UHJlc2VydmF0aW9uTm90UmVxdXJpZWQpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlu
a0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSogdm0pCit7Cisg
ICAgcmV0dXJuIGxpbmtDbG9zdXJlQ2FsbEZvclRodW5rR2VuZXJhdG9yKHZtLCBNdXN0UHJlc2Vy
dmVSZWdpc3RlcnMpOwogfQogCiBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxG
b3JUaHVua0dlbmVyYXRvcigKLSAgICBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKKyAgICBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsKICAgICAvLyBUaGUgY2FsbGVlIGlzIGluIHJlZ1Qw
IChmb3IgSlNWQUxVRTMyXzY0LCB0aGUgdGFnIGlzIGluIHJlZ1QxKS4KICAgICAvLyBUaGUgcmV0
dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrLCBvciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ug
d2lsbCBoZW5jZQpAQCAtMTU1LDMzICsxNzYsMzQgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB2aXJ0dWFsRm9yVAogICAgIC8vIHRoZSBERkcga25vd3MgdGhhdCB0aGUgdmFsdWUgaXMg
ZGVmaW5pdGVseSBhIGNlbGwsIG9yIGRlZmluaXRlbHkgYSBmdW5jdGlvbi4KICAgICAKICNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChUYWdNYXNrKSwgR1BSSW5m
bzo6cmVnVDIpOworICAgIAogICAgIHNsb3dDYXNlLmFwcGVuZCgKICAgICAgICAgaml0LmJyYW5j
aFRlc3Q2NCgKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6cmVn
VDAsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpOb25aZXJvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDIpKTsKICNlbHNlCiAgICAg
c2xvd0Nhc2UuYXBwZW5kKAogICAgICAgICBqaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMSwKICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAjZW5kaWYKLSAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgc2xvd0Nhc2UuYXBwZW5kKAogICAgICAgICBq
aXQuYnJhbmNoUHRyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIyLCBTdHJ1Y3R1
cmU6OmNsYXNzSW5mb09mZnNldCgpKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksCiAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvbjo6aW5mbygpKSkpOwog
ICAgIAogICAgIC8vIE5vdyB3ZSBrbm93IHdlIGhhdmUgYSBKU0Z1bmN0aW9uLgogICAgIAogICAg
IGppdC5sb2FkUHRyKAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVn
VDAsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKLSAgICAgICAgR1BSSW5mbzo6
bm9uQXJnR1BSMik7Ci0gICAgc2xvd0Nhc2UuYXBwZW5kKAotICAgICAgICBqaXQuYnJhbmNoMzIo
Ci0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okxlc3NUaGFuLAotICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4
ZWN1dGFibGVCYXNlOjpvZmZzZXRPZk51bVBhcmFtZXRlcnNGb3Ioa2luZCkpLAotICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgR1BSSW5mbzo6cmVn
VDIpOworICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisg
ICAgICAgICAgICBHUFJJbmZvOjpyZWdUMiwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29k
ZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQsIHJlZ2lzdGVycykpLAorICAgICAgICBHUFJJbmZvOjpy
ZWdUMik7CisgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVy
czo6WmVybywgR1BSSW5mbzo6cmVnVDIpKTsKICAgICAKICAgICAvLyBOb3cgd2Uga25vdyB0aGF0
IHdlIGhhdmUgYSBDb2RlQmxvY2ssIGFuZCB3ZSdyZSBjb21taXR0ZWQgdG8gbWFraW5nIGEgZmFz
dAogICAgIC8vIGNhbGwuCkBAIC0yMTAsMzQgKzIzMiw0MCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHZpcnR1YWxGb3JUCiAgICAgICAgICAgICBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICNlbmRpZgogICAgIAotICAgIGppdC5s
b2FkUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BS
MiwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQp
KSwKLSAgICAgICAgR1BSSW5mbzo6cmVnVDApOwotICAgIAogICAgIC8vIE1ha2UgYSB0YWlsIGNh
bGwuIFRoaXMgd2lsbCByZXR1cm4gYmFjayB0byBKSVQgY29kZS4KLSAgICBlbWl0UG9pbnRlclZh
bGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVn
VDApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1QyKTsKKyAg
ICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMik7CiAKICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwog
ICAgIAogICAgIC8vIEhlcmUgd2UgZG9uJ3Qga25vdyBhbnl0aGluZywgc28gcmV2ZXJ0IHRvIHRo
ZSBmdWxsIHNsb3cgcGF0aC4KICAgICAKLSAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBraW5kID09
IENvZGVGb3JDYWxsID8gb3BlcmF0aW9uVmlydHVhbENhbGwgOiBvcGVyYXRpb25WaXJ0dWFsQ29u
c3RydWN0KTsKKyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25WaXJ0dWFsRm9yKGtp
bmQsIHJlZ2lzdGVycykpOwogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAm
aml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAogICAgICAg
ICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJWaXJ0dWFsICVzIHNsb3cgcGF0aCB0aHVuayIsIGtp
bmQgPT0gQ29kZUZvckNhbGwgPyAiY2FsbCIgOiAiY29uc3RydWN0IikpOworICAgICAgICAoIlZp
cnR1YWwgJXMlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwi
IDogImNvbnN0cnVjdCIsIHJlZ2lzdGVycyA9PSBNdXN0UHJlc2VydmVSZWdpc3RlcnMgPyAiIHRo
YXQgcHJlc2VydmVzIHJlZ2lzdGVycyIgOiAiIikpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIHZpcnR1
YWxGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNhbGwpOworICAgIHJldHVybiB2aXJ0dWFs
Rm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNlcnZhdGlvbk5v
dFJlcXVyaWVkKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RU
aHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVy
YXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dl
bmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1
cmllZCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2
ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1
bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOworfQor
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdz
VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5l
cmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CiB9CiAK
IGVudW0gVGh1bmtFbnRyeVR5cGUgeyBFbnRlclZpYUNhbGwsIEVudGVyVmlhSnVtcCB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lv
biAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVmIFRodW5rR2VuZXJhdG9y
c19oCiAjZGVmaW5lIFRodW5rR2VuZXJhdG9yc19oCiAKKyNpbmNsdWRlICJDb2RlU3BlY2lhbGl6
YXRpb25LaW5kLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmgiCiAjaW5j
bHVkZSAiVGh1bmtHZW5lcmF0b3IuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBAIC0zNSwxMSArMzcs
NzggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbQogCiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGxpbmtDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSopOwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnc1RodW5r
R2VuZXJhdG9yKFZNKik7CisKK2lubGluZSBUaHVua0dlbmVyYXRvciBsaW5rVGh1bmtHZW5lcmF0
b3JGb3IoCisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBSZWdpc3RlclByZXNlcnZh
dGlvbk1vZGUgcmVnaXN0ZXJzKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgQ29k
ZUZvckNhbGw6CisgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgIGNhc2UgUmVn
aXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgIHJldHVybiBsaW5rQ2Fs
bFRodW5rR2VuZXJhdG9yOworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAg
ICAgICAgICAgIHJldHVybiBsaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3I7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0Ogor
ICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICByZXR1cm4gbGlua0NvbnN0cnVjdFRodW5r
R2VuZXJhdG9yOworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAg
ICAgIHJldHVybiBsaW5rQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcjsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxp
bmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSopOworCitp
bmxpbmUgVGh1bmtHZW5lcmF0b3IgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3JGb3IoUmVn
aXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sKKyAgICBzd2l0Y2ggKHJlZ2lzdGVy
cykgeworICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAg
cmV0dXJuIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yOworICAgIGNhc2UgTXVzdFByZXNl
cnZlUmVnaXN0ZXJzOgorICAgICAgICByZXR1cm4gbGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZl
c1JlZ3NUaHVua0dlbmVyYXRvcjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gMDsKK30KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxD
YWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29u
c3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFs
Q2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihW
TSopOworCitpbmxpbmUgVGh1bmtHZW5lcmF0b3IgdmlydHVhbFRodW5rR2VuZXJhdG9yRm9yKAor
ICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2Rl
IHJlZ2lzdGVycykKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIENvZGVGb3JDYWxs
OgorICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAgICBjYXNlIFJlZ2lzdGVyUHJl
c2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICByZXR1cm4gdmlydHVhbENhbGxUaHVu
a0dlbmVyYXRvcjsKKyAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAg
ICAgICByZXR1cm4gdmlydHVhbENhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAg
ICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZh
dGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxDb25zdHJ1Y3RUaHVu
a0dlbmVyYXRvcjsKKyAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAg
ICAgICByZXR1cm4gdmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0
b3I7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZl
Q29uc3RydWN0R2VuZXJhdG9yKFZNKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Bcml0eUNoZWNrTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyaXR5Q2hlY2tNb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Bcml0eUNoZWNrTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBBcml0eUNoZWNrTW9kZV9oCisjZGVmaW5lIEFyaXR5Q2hlY2tNb2RlX2gKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2VudW0gQXJpdHlDaGVja01vZGUgeworICAgIEFyaXR5Q2hlY2tOb3RS
ZXF1aXJlZCwKKyAgICBNdXN0Q2hlY2tBcml0eQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBBcml0eUNoZWNrTW9kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE4LDEyICsxMTgsMTQgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShDb2Rl
QgogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgQ29kZUZvckNhbGw6CiAgICAgICAgIG1f
aml0Q29kZUZvckNhbGwgPSBnZW5lcmljQ29kZUJsb2NrLT5qaXRDb2RlKCk7Ci0gICAgICAgIG1f
aml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IGdlbmVyaWNDb2RlQmxvY2stPmppdENvZGVX
aXRoQXJpdHlDaGVjaygpOworICAgICAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sg
PSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhB
cml0eUNoZWNrQW5kUHJlc2VydmVSZWdzID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CiAgICAg
ICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBnZW5lcmljQ29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKICAgICAg
ICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gZ2VuZXJpY0NvZGVCbG9jay0+aml0Q29kZSgpOwot
ICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IGdlbmVyaWNDb2Rl
QmxvY2stPmppdENvZGVXaXRoQXJpdHlDaGVjaygpOworICAgICAgICBtX2ppdENvZGVGb3JDb25z
dHJ1Y3RXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworICAgICAgICBt
X2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVja0FuZFByZXNlcnZlUmVncyA9IE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cigpOwogICAgICAgICBtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3Qg
PSBnZW5lcmljQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTEzMyw3ICsxMzUsNiBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2Rl
KENvZGVCCiAgICAgICAgIFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PFBy
b2dyYW1FeGVjdXRhYmxlKj4odGhpcyk7CiAgICAgICAgIFByb2dyYW1Db2RlQmxvY2sqIGNvZGVC
bG9jayA9IHN0YXRpY19jYXN0PFByb2dyYW1Db2RlQmxvY2sqPihnZW5lcmljQ29kZUJsb2NrKTsK
ICAgICAgICAgCi0gICAgICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlV2l0aEFyaXR5Q2hl
Y2soKSk7CiAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKICAgICAgICAgCiAg
ICAgICAgIG9sZENvZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jazsKQEAg
LTE0NSw3ICsxNDYsNiBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKENvZGVC
CiAgICAgICAgIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2YWxFeGVjdXRh
YmxlKj4odGhpcyk7CiAgICAgICAgIEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19j
YXN0PEV2YWxDb2RlQmxvY2sqPihnZW5lcmljQ29kZUJsb2NrKTsKICAgICAgICAgCi0gICAgICAg
IEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2soKSk7CiAgICAgICAgIEFT
U0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKICAgICAgICAgCiAgICAgICAgIG9sZENvZGVCbG9j
ayA9IGV4ZWN1dGFibGUtPm1fZXZhbENvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsNyBAQAogI2lmbmRlZiBFeGVjdXRhYmxlX2gKICNkZWZpbmUgRXhlY3V0YWJsZV9oCiAK
KyNpbmNsdWRlICJBcml0eUNoZWNrTW9kZS5oIgogI2luY2x1ZGUgIkNhbGxEYXRhLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrSGFzaC5oIgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQu
aCIKQEAgLTM2LDYgKzM3LDcgQEAKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUg
IkpJVENvZGUuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIlJlZ2lz
dGVyUHJlc2VydmF0aW9uTW9kZS5oIgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgogI2luY2x1
ZGUgIlNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgpAQCAtMTQ0
LDM3ICsxNDYsOTQgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29u
c3RydWN0KTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3QoKTsK
ICAgICB9Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZ2VuZXJhdGVkSklUQ29kZUZvckNh
bGxXaXRoQXJpdHlDaGVjaygpCi0gICAgewotICAgICAgICBBU1NFUlQobV9qaXRDb2RlRm9yQ2Fs
bCk7Ci0gICAgICAgIEFTU0VSVChtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOwotICAg
ICAgICByZXR1cm4gbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrOwotICAgIH0KLQotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0V2l0aEFy
aXR5Q2hlY2soKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1faml0Q29kZUZvckNvbnN0cnVjdCk7
Ci0gICAgICAgIEFTU0VSVChtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7Ci0g
ICAgICAgIHJldHVybiBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjazsKLSAgICB9
Ci0gICAgICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZW5lcmF0ZWRKSVRDb2RlV2l0
aEFyaXR5Q2hlY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAg
ICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVk
SklUQ29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaygpOwotICAgICAgICBBU1NFUlQoa2luZCA9PSBD
b2RlRm9yQ29uc3RydWN0KTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENvZGVGb3JDb25z
dHJ1Y3RXaXRoQXJpdHlDaGVjaygpOwotICAgIH0KLSAgICAgICAgCi0gICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGVudHJ5cG9pbnRGb3Io
CisgICAgICAgIFZNJiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBBcml0eUNoZWNr
TW9kZSBhcml0eSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKICAgICB7Ci0g
ICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNr
KTsKLSAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgICAgIHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1faml0Q29kZUZvckNvbnN0cnVj
dFdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIGNhY2hlZCBy
ZXN1bHQuIFdlIG9ubHkgaGF2ZSBpdCBmb3IgYXJpdHkgY2hlY2sgYmVjYXVzZSB3ZSB1c2UgdGhl
CisgICAgICAgIC8vIG5vLWFyaXR5IGVudHJ5cG9pbnQgaW4gbm9uLXZpcnR1YWwgY2FsbHMsIHdo
aWNoIHdpbGwgImNhY2hlIiB0aGlzIHZhbHVlIGRpcmVjdGx5IGluCisgICAgICAgIC8vIG1hY2hp
bmUgY29kZS4KKyAgICAgICAgaWYgKGFyaXR5ID09IE11c3RDaGVja0FyaXR5KSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAg
ICAgICAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJl
Z2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0gbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNo
ZWNrKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3Rl
cnM6CisgICAgICAgICAgICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0
ID0gbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdzKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICAgICAgICAgIHN3aXRjaCAocmVnaXN0
ZXJzKSB7CisgICAgICAgICAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVp
cmVkOgorICAgICAgICAgICAgICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3Vs
dCA9IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICAgICAg
ICAgIGlmIChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0gbV9qaXRDb2RlRm9yQ29uc3Ry
dWN0V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3MpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9CisgICAgICAgICAgICBnZW5l
cmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCh2bSwgYXJpdHksIHJlZ2lzdGVy
cyk7CisgICAgICAgIGlmIChhcml0eSA9PSBNdXN0Q2hlY2tBcml0eSkgeworICAgICAgICAgICAg
Ly8gQ2FjaGUgdGhlIHJlc3VsdDsgdGhpcyBpcyBuZWNlc3NhcnkgZm9yIHRoZSBKSVQncyB2aXJ0
dWFsIGNhbGwgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAg
ICAgICAgICAgY2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlZ2lz
dGVycykgeworICAgICAgICAgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1
aXJlZDoKKyAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNr
ID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2Rl
Rm9yQ2FsbFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdzID0gcmVzdWx0OworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgICAgICAgICAg
c3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICAgICAgICAgIG1faml0Q29kZUZvckNvbnN0
cnVjdFdpdGhBcml0eUNoZWNrID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAg
ICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJl
Z3MgPSByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3IoCisgICAgICAgIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAg
ICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEV4ZWN1dGFibGVCYXNlLCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOworICAgICAg
ICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICAgICAgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0
eUNoZWNrQW5kUHJlc2VydmVSZWdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb2Rl
Rm9yQ29uc3RydWN0OgorICAgICAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAg
ICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVCYXNlLCBtX2ppdENvZGVGb3JDb25z
dHJ1Y3RXaXRoQXJpdHlDaGVjayk7CisgICAgICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lz
dGVyczoKKyAgICAgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVC
YXNlLCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVja0FuZFByZXNlcnZlUmVncyk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgICAgICAKKyAgICAKICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVyc0ZvcihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCiAgICAgewogICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKQEAg
LTIxMSwyMSArMjcwLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gTm9JbnRyaW5zaWM7CiAg
ICAgfQogICAgICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaG9zdENvZGVFbnRyeUZv
cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi0gICAgewotICAgICAgICByZXR1cm4gZ2Vu
ZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoKTsKLSAgICB9Ci0KLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIganNDb2RlRW50cnlGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCkt
PmFkZHJlc3NGb3JDYWxsKCk7Ci0gICAgfQotCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGpz
Q29kZVdpdGhBcml0eUNoZWNrRW50cnlGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlDaGVja0Zvcihr
aW5kKTsKLSAgICB9Ci0KIHByb3RlY3RlZDoKICAgICBFeGVjdXRhYmxlQmFzZSogbV9wcmV2Owog
ICAgIEV4ZWN1dGFibGVCYXNlKiBtX25leHQ7CkBAIC0yMzQsNiArMjc4LDggQEAgcHJvdGVjdGVk
OgogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGVGb3JDb25zdHJ1Y3Q7CiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjazsKICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2s7Cisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVja0Fu
ZFByZXNlcnZlUmVnczsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRDb2RlRm9yQ29u
c3RydWN0V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3M7CiB9OwogCiBjbGFzcyBOYXRpdmVF
eGVjdXRhYmxlIDogcHVibGljIEV4ZWN1dGFibGVCYXNlIHsKQEAgLTI4OCw4ICszMzQsNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFBhc3NSZWZQdHI8SklU
Q29kZT4gY2FsbFRodW5rLCBQYXNzUmVmUHRyPEpJVENvZGU+IGNvbnN0cnVjdFRodW5rLCBJbnRy
aW5zaWMgaW50cmluc2ljKQogICAgIHsKICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwotICAgICAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBjYWxsVGh1bmsgPyBj
YWxsVGh1bmstPmFkZHJlc3NGb3JDYWxsKCkgOiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKLSAg
ICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBjb25zdHJ1Y3RUaHVu
ayA/IGNvbnN0cnVjdFRodW5rLT5hZGRyZXNzRm9yQ2FsbCgpIDogTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKCk7CiAgICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBjYWxsVGh1bms7CiAgICAgICAgIG1f
aml0Q29kZUZvckNvbnN0cnVjdCA9IGNvbnN0cnVjdFRodW5rOwogICAgICAgICBtX2ludHJpbnNp
YyA9IGludHJpbnNpYzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ2lz
dGVyUHJlc2VydmF0aW9uTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZV9oCisj
ZGVmaW5lIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZV9oCisKK25hbWVzcGFjZSBKU0MgeworCitl
bnVtIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSB7CisgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25O
b3RSZXF1aXJlZCwKKyAgICBNdXN0UHJlc2VydmVSZWdpc3RlcnMKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219502</attachid>
            <date>2013-12-17 20:50:44 -0800</date>
            <delta_ts>2013-12-18 16:59:17 -0800</delta_ts>
            <desc>it compiles</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>114971</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNjY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDEzLTEyLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBiZSBhYmxlIHRvIGRvIGNhbGwgSUNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjU4MTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rSW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OkNhbGxMaW5rSW5mbyk6Cisg
ICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6bGluayk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICog
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6
CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmZpeEZ1
bmN0aW9uQmFzZWRPblN0YWNrTWFwcyk6CisgICAgICAgICogZnRsL0ZUTElubGluZUNhY2hlU2l6
ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mQ2FsbCk6CisgICAgICAgICogZnRsL0ZU
TElubGluZUNhY2hlU2l6ZS5oOgorICAgICAgICAqIGZ0bC9GVExKU0NhbGwuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OkpTQ2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6
SlNDYWxsOjplbWl0KToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OmxpbmspOgorICAgICAg
ICAqIGZ0bC9GVExKU0NhbGwuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6SlNDYWxsOjpz
dGFja21hcElEKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6Om9wZXJhdG9yPCk6CisgICAg
ICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdCk6CisgICAgICAgICogZnRsL0ZUTFN0
YXRlLmg6CisKIDIwMTMtMTItMTYgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIE1lcmdlZCByMTYwNjY1IGZyb20gdHJ1bmsuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTI2Nyw2ICsyNjcsMTIgQEAKIAkJMEY2NjZFQ0QxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3Vy
cmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQ0IxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVj
dGlvbkZvclZhbGlkYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2Vu
Y3lMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZDMTRERjNGMTYw
MEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkIxQ0I1MTg1RkM5
RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQjMxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5j
cHAgKi87IH07CisJCTBGNkIxQ0I2MTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0I0MTg1RkM5
RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjZCMUNCOTE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlDaGVj
a01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NkIxQ0I3MTg2MTI0NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNrTW9kZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkIxQ0JBMTg2MTI0NEMwMDg0
NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0I4MTg2MTI0NEMwMDg0NUQ5NyAvKiBSZWdp
c3RlclByZXNlcnZhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjZCMUNCRDE4NjEyNDZBMDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0JCMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclBy
ZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwICovOyB9OworCQkwRjZCMUNCRTE4NjEyNDZB
MDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCQzE4NjEyNDZB
MDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3MDI1QTkxNzE0
QjBGQTAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcwMjVBNzE3MTRCMEY4MDAzODJD
MEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCAqLzsgfTsKIAkJMEY3MDI1QUExNzE0
QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MDI1QTgxNzE0QjBGODAwMzgyQzBF
IC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2Fy
ZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLzsgfTsKQEAgLTE1NzksNiArMTU4NSwxMiBAQAogCQkw
RjY2NkVDQjE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBo
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Jlc3VycmVjdGlvbkZv
clZhbGlkYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRp
b25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYzRjEz
MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdBZGphY2VuY3lMaXN0Lmg7IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlzdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQg
LyogREZHRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7
IHBhdGggPSBkZmcvREZHRWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZC
MUNCMzE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbC5jcHA7IHBhdGggPSBmdGwvRlRMSlNDYWxsLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3
IC8qIEZUTEpTQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0Nh
bGwuaDsgcGF0aCA9IGZ0bC9GVExKU0NhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2QjFDQjcxODYxMjQ0QzAwODQ1RDk3IC8qIEFyaXR5Q2hlY2tNb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyaXR5Q2hlY2tNb2RlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNkIxQ0I4MTg2MTI0NEMwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNl
cnZhdGlvbk1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNkIxQ0JC
MTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVnaXN0ZXJQcmVzZXJ2
YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY2QjFDQkMxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdl
bmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWdpc3RlclByZXNl
cnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY3MDI1QTcxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzE0Q0ExMTZFQTkyRUQw
MEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3Bw
OyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjg1OCw2ICsyODcwLDggQEAKIAkJCQkwRkVBMEEwMzE3MDUx
M0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5oICovLAogCQkJCUE3OEE5NzdEMTc5NzM4RDUwMDlE
Rjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuY3BwICovLAogCQkJCUE3OEE5NzdFMTc5NzM4RDUwMDlE
Rjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuaCAqLywKKwkJCQkwRjZCMUNCMzE4NUZDOUU5MDA4NDVE
OTcgLyogRlRMSlNDYWxsLmNwcCAqLywKKwkJCQkwRjZCMUNCNDE4NUZDOUU5MDA4NDVEOTcgLyog
RlRMSlNDYWxsLmggKi8sCiAJCQkJMEY4RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsu
Y3BwICovLAogCQkJCTBGOEYyQjk0MTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmggKi8sCiAJ
CQkJMEZDRUZBREQxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCAqLywKQEAgLTMw
MzIsNiArMzA0Niw4IEBACiAJCQkJMEZDNzEyRTExN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZH
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8sCiAJCQkJQTc2RjU0QTIxM0IyOEFBQjAw
RUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovLAogCQkJCUE3NkM1MTc0MTE4Mjc0OEQwMDcx
NUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovLAorCQkJCTBGNkIxQ0JCMTg2MTI0NkEwMDg0NUQ5
NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwICovLAorCQkJCTBG
NkIxQ0JDMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5l
cmF0b3IuaCAqLywKIAkJCQkwRkMzMTQxNDE4MTQ2RDcwMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQu
Y3BwICovLAogCQkJCTBGQzMxNDEwMTgxNDU1OTEwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5oICov
LAogCQkJCTBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCAqLywKQEAgLTMz
NjksNiArMzM4NSw3IEBACiAJCQkJQTc2MTQwQzgxODI5ODJDQjAwNzUwNjI0IC8qIEFyZ3VtZW50
c0l0ZXJhdG9yQ29uc3RydWN0b3IuaCAqLywKIAkJCQlBNzYxNDBDOTE4Mjk4MkNCMDA3NTA2MjQg
LyogQXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGUuY3BwICovLAogCQkJCUE3NjE0MENBMTgyOTgy
Q0IwMDc1MDYyNCAvKiBBcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZS5oICovLAorCQkJCTBGNkIx
Q0I3MTg2MTI0NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNrTW9kZS5oICovLAogCQkJCUE3QThBRjI1
MTdBREI1RjIwMDVBQjE3NCAvKiBBcnJheUJ1ZmZlci5jcHAgKi8sCiAJCQkJQTdBOEFGMjYxN0FE
QjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggKi8sCiAJCQkJMEZGQzk5RDIxODRFRTMxODAw
OUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgKi8sCkBAIC0zNjY3
LDYgKzM2ODQsNyBAQAogCQkJCUY2OTJBODdDMDI1NTU5N0QwMUZGNjBGNyAvKiBSZWdFeHBPYmpl
Y3QuaCAqLywKIAkJCQlCQ0QyMDJCRjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBl
LmNwcCAqLywKIAkJCQlCQ0QyMDJDMDBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBl
LmggKi8sCisJCQkJMEY2QjFDQjgxODYxMjQ0QzAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTW9kZS5oICovLAogCQkJCTBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAq
LywKIAkJCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAq
LywKIAkJCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8s
CkBAIC00Mzk1LDYgKzQ0MTMsNyBAQAogCQkJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBE
RkdFeGl0UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzUxNzk3MzhCODAwOURG
NzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3Nzcx
Nzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2
QjFDQjYxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQkRDMTYxNTFDNUQ0RjAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGOUQzMzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5o
IGluIEhlYWRlcnMgKi8sCkBAIC00NDMwLDYgKzQ0NDksNyBAQAogCQkJCTBGRDhBMzI2MTdENTFG
NTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRkM5OUQxMTg0RUM4QUQwMDlDMTBBQiAvKiBDb25zdGFudE1vZGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGNkIxQ0JBMTg2MTI0NEMwMDg0NUQ5NyAvKiBSZWdpc3RlclBy
ZXNlcnZhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5
MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RUQxODIz
NDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRp
b25JbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTQ1ODgsNiArNDYwOCw3IEBACiAJCQkJMEY0Njgw
ODIxNEJBNTcyRDAwQkZFMjcyIC8qIEpJVEV4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQjE0RTFGMTgxMjRBQ0UwMDlCNkI0RCAvKiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZDQzg1QTEwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGluZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGNkIxQ0JFMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3Rl
clByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRF
NTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzkwREQ3MDE4MkY0OTk3MDA1ODg4MDcgLyogSlNTZXRJdGVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyNEU1NEUxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbldyYXBwZXJz
LmggaW4gSGVhZGVycyAqLywKQEAgLTQ2MDMsNiArNDYyNCw3IEBACiAJCQkJMEZDNzEyRTMxN0NE
ODc5MzAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJy
aWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNB
Y3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjZCMUNCOTE4NjEyNDRDMDA4NDVEOTcg
LyogQXJpdHlDaGVja01vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MDQ4MDEzMTAyMUExRDkw
MDhFN0YwMSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJDRjM5
QzIxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc2MTQwRDIxODI5ODJDQjAwNzUwNjI0IC8qIEpTQXJndW1lbnRzSXRlcmF0b3IuaCBp
biBIZWFkZXJzICovLApAQCAtNTQ5NSw2ICs1NTE3LDcgQEAKIAkJCQk4Njg4MEY0RDE0MzUzQjIx
MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
N0Q4OUNGRjE3QTBCOENDMDA3NzNBRDggLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGOUZCNEY0MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91
dFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNkIxQ0JEMTg2MTI0NkEwMDg0NUQ5NyAv
KiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZDMDk3QTExNDZCMjhDQTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmpl
Y3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyOTE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC01NTUxLDYgKzU1NzQsNyBAQAogCQkJCTBGMjVGMUIzMTgxNjM1RjMwMDUyMkYzOSAv
KiBGVExTbG93UGF0aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDMzOUExODAz
QURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVB
MEExNjE3MDZCQjkwMDBCQjcyMkMgLyogRlRMU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEY2QjFDQjUxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjIzNUJFMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMjM1QkUzMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDQjEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25D
b25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNp
b24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDkgKzMwOSwxMCBAQCBwdWJsaWM6
CiAgICAgdm9pZCogZGF0YUxvY2F0aW9uKCkgY29uc3QgeyBBU1NFUlRfVkFMSURfQ09ERV9QT0lO
VEVSKG1fdmFsdWUpOyByZXR1cm4gbV92YWx1ZTsgfQogI2VuZGlmCiAKLSAgICBib29sIG9wZXJh
dG9yISgpIGNvbnN0CisgICAgdHlwZWRlZiB2b2lkKiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjoq
VW5zcGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSoo
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3ZhbHVlOworICAgICAgICByZXR1cm4g
ISFtX3ZhbHVlID8gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oMSkgOiAw
OwogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyJiBvdGhlcikgY29uc3QKQEAgLTQzNCw3ICs0MzUsMTEgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gSlNDOjp0cnlUb0Rpc2Fzc2VtYmxlKG1fY29kZVB0ciwgc2l6ZSgpLCBwcmVmaXgs
IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIW1fY29kZVB0cjsgfQorICAgIHR5cGVkZWYgdm9pZCogKE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOworICAgIG9wZXJhdG9yIFVuc3BlY2lm
aWVkQm9vbFR5cGUqKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhIW1fY29kZVB0ciA/
IHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KDEpIDogMDsKKyAgICB9CiAg
ICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJl
dmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCwxNCArMzgsMTEgQEAgdm9pZCBDYWxsTGlua0lu
Zm86OnVubGluayhWTSYgdm0sIFJlcGF0YwogICAgIEFTU0VSVChpc0xpbmtlZCgpKTsKICAgICAK
ICAgICByZXBhdGNoQnVmZmVyLnJldmVydEp1bXBSZXBsYWNlbWVudFRvQnJhbmNoUHRyV2l0aFBh
dGNoKFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGhv
dFBhdGhCZWdpbiksIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihjYWxs
ZWVHUFIpLCAwKTsKLSAgICBpZiAoaXNERkcpIHsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVybkxvY2F0aW9uLCAoY2FsbFR5cGUgPT0g
Q29uc3RydWN0ID8gdm0uZ2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpIDog
dm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKSkuY29kZSgpKTsKLSNlbHNlCi0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICB9IGVsc2UK
LSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVybkxvY2F0aW9uLCBjYWxsVHlw
ZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRv
cikuY29kZSgpIDogdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkp
OworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAorICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24s
CisgICAgICAgIHZtLmdldENUSVN0dWIobGlua1RodW5rR2VuZXJhdG9yRm9yKAorICAgICAgICAg
ICAgY2FsbFR5cGUgPT0gQ29uc3RydWN0ID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxs
LAorICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5jb2RlQmxvY2soKS0+aml0VHlwZSgpID09IEpJ
VENvZGU6OkZUTEpJVCA/IE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyA6IFJlZ2lzdGVyUHJlc2VydmF0
aW9uTm90UmVxdWlyZWQpKS5jb2RlKCkpOwogICAgIGhhc1NlZW5TaG91bGRSZXBhdGNoID0gZmFs
c2U7CiAgICAgY2FsbGVlLmNsZWFyKCk7CiAgICAgc3R1Yi5jbGVhcigpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMTYw
NjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3
b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw2IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBwdWJs
aWMgQmFzaWNSYXdTZW4KICAgICAgICAgCiAgICAgQ2FsbExpbmtJbmZvKCkKICAgICAgICAgOiBo
YXNTZWVuU2hvdWxkUmVwYXRjaChmYWxzZSkKLSAgICAgICAgLCBpc0RGRyhmYWxzZSkKICAgICAg
ICAgLCBoYXNTZWVuQ2xvc3VyZShmYWxzZSkKICAgICAgICAgLCBjYWxsVHlwZShOb25lKQogICAg
IHsKQEAgLTgwLDcgKzc5LDYgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jh
d1NlbgogICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBsYXN0U2VlbkNhbGxlZTsKICAgICBS
ZWZQdHI8Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YjsKICAgICBib29sIGhhc1NlZW5TaG91
bGRSZXBhdGNoIDogMTsKLSAgICBib29sIGlzREZHIDogMTsKICAgICBib29sIGhhc1NlZW5DbG9z
dXJlIDogMTsKICAgICB1bnNpZ25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAgICAgdW5z
aWduZWQgY2FsbGVlR1BSIDogODsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDE3ICsyNTcsMTUg
QEAgcHVibGljOgogICAgIC8vIEV4YWN0bHkgZXF1aXZhbGVudCB0byBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLT5uZXdSZXBsYWNlbWVudENvZGVCbG9ja0Zvcihjb2RlQmxvY2stPnNwZWNp
YWxpemF0aW9uS2luZCgpKQogICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBuZXdSZXBsYWNlbWVu
dCgpOwogICAgIAotICAgIHZvaWQgc2V0SklUQ29kZShQYXNzUmVmUHRyPEpJVENvZGU+IGNvZGUs
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlV2l0aEFyaXR5Q2hlY2spCisgICAgdm9pZCBzZXRK
SVRDb2RlKFBhc3NSZWZQdHI8SklUQ29kZT4gY29kZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCht
X2hlYXAtPmlzRGVmZXJyZWQoKSk7CiAgICAgICAgIG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlD
b3N0KGNvZGUtPnNpemUoKSk7CiAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1f
bG9jayk7CiAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgaXMgcHJvYmFi
bHkgbm90IG5lZWRlZCBiZWNhdXNlIHRoZSBsb2NrIHdpbGwgYWxzbyBkbyBzb21ldGhpbmcgc2lt
aWxhciwgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KICAgICAgICAgbV9qaXRDb2RlID0g
Y29kZTsKLSAgICAgICAgbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2sgPSBjb2RlV2l0aEFyaXR5Q2hl
Y2s7CiAgICAgfQogICAgIFBhc3NSZWZQdHI8SklUQ29kZT4gaml0Q29kZSgpIHsgcmV0dXJuIG1f
aml0Q29kZTsgfQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBqaXRDb2RlV2l0aEFyaXR5Q2hl
Y2soKSB7IHJldHVybiBtX2ppdENvZGVXaXRoQXJpdHlDaGVjazsgfQogICAgIEpJVENvZGU6OkpJ
VFR5cGUgaml0VHlwZSgpIGNvbnN0CiAgICAgewogICAgICAgICBKSVRDb2RlKiBqaXRDb2RlID0g
bV9qaXRDb2RlLmdldCgpOwpAQCAtMTA2Niw3ICsxMDY0LDYgQEAgcHJpdmF0ZToKICAgICBTZW50
aW5lbExpbmtlZExpc3Q8TExJbnRDYWxsTGlua0luZm8sIEJhc2ljUmF3U2VudGluZWxOb2RlPExM
SW50Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0xMSW50Q2FsbHM7CiAjZW5kaWYKICAgICBSZWZQ
dHI8SklUQ29kZT4gbV9qaXRDb2RlOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENv
ZGVXaXRoQXJpdHlDaGVjazsKICNpZiBFTkFCTEUoSklUKQogICAgIEJhZzxTdHJ1Y3R1cmVTdHVi
SW5mbz4gbV9zdHViSW5mb3M7CiAgICAgVmVjdG9yPEJ5VmFsSW5mbz4gbV9ieVZhbEluZm9zOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTYw
NjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MCwxMSArODAsMTkgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBp
bGVJbXBsKAogICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFsbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRv
ZXMgZmluYWxpemF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICB2bS5nZXRDVElTdHViKG9z
ckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwogICAgIHZtLmdldENUSVN0dWIodGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKLSAgICB2bS5nZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpOwotICAgIHZtLmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRo
dW5rR2VuZXJhdG9yKTsKLSAgICB2bS5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbFRodW5rR2Vu
ZXJhdG9yKTsKLSAgICB2bS5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpOwot
ICAgIHZtLmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKTsKKyAgICBp
ZiAobW9kZSA9PSBERkdNb2RlKSB7CisgICAgICAgIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVu
a0dlbmVyYXRvcik7CisgICAgICAgIHZtLmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRodW5rR2Vu
ZXJhdG9yKTsKKyAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVy
YXRvcik7CisgICAgICAgIHZtLmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcik7
CisgICAgICAgIHZtLmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKTsK
KyAgICB9IGVsc2UgeworICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGhhdFByZXNlcnZl
c1JlZ3NUaHVua0dlbmVyYXRvcik7CisgICAgICAgIHZtLmdldENUSVN0dWIobGlua0NvbnN0cnVj
dFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOworICAgICAgICB2bS5nZXRDVElTdHVi
KGxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOworICAgICAg
ICB2bS5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRv
cik7CisgICAgICAgIHZtLmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNS
ZWdzVGh1bmtHZW5lcmF0b3IpOworICAgIH0KICAgICAKICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9
IGFkb3B0UmVmKAogICAgICAgICBuZXcgUGxhbihjb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVlcykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzAsOSArMjMwLDExIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlu
a0IKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qc0NhbGxzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8o
aSk7CiAgICAgICAgIGluZm8uY2FsbFR5cGUgPSBtX2pzQ2FsbHNbaV0ubV9jYWxsVHlwZTsKLSAg
ICAgICAgaW5mby5pc0RGRyA9IHRydWU7CiAgICAgICAgIGluZm8uY29kZU9yaWdpbiA9IG1fanND
YWxsc1tpXS5tX2NvZGVPcmlnaW47Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhtX2pzQ2FsbHNb
aV0ubV9zbG93Q2FsbCwgRnVuY3Rpb25QdHIoKG1fdm0tPmdldENUSVN0dWIoaW5mby5jYWxsVHlw
ZSA9PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA/IGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRv
ciA6IGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkp
OworICAgICAgICBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IgPSBsaW5rVGh1bmtHZW5lcmF0b3JG
b3IoCisgICAgICAgICAgICBpbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0
ID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsLAorICAgICAgICAgICAgUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhtX2pzQ2Fs
bHNbaV0ubV9zbG93Q2FsbCwgRnVuY3Rpb25QdHIobV92bS0+Z2V0Q1RJU3R1YihnZW5lcmF0b3Ip
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgIGluZm8uY2FsbFJldHVybkxv
Y2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9qc0NhbGxzW2ldLm1fc2xv
d0NhbGwpOwogICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZihtX2pzQ2FsbHNbaV0ubV90YXJnZXRUb0NoZWNrKTsKICAgICAgICAgaW5mby5ob3RQYXRoT3Ro
ZXIgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2pzQ2FsbHNbaV0ubV9mYXN0Q2Fs
bCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIu
Y3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDggQEAgSklURmluYWxp
emVyOjp+SklURmluYWxpemVyKCkKIAogYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKCkKIHsK
LSAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmKG1fbGlua0J1ZmZlci0+ZmluYWxpemVD
b2RlV2l0aG91dERpc2Fzc2VtYmx5KCkpOwotICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENv
ZGUobV9qaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CisgICAgbV9qaXRDb2RlLT5p
bml0aWFsaXplQ29kZVJlZigKKyAgICAgICAgbV9saW5rQnVmZmVyLT5maW5hbGl6ZUNvZGVXaXRo
b3V0RGlzYXNzZW1ibHkoKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwogICAgIAogICAgIGZp
bmFsaXplQ29tbW9uKCk7CiAgICAgCkBAIC01OSw4ICs1OSw4IEBAIGJvb2wgSklURmluYWxpemVy
OjpmaW5hbGl6ZSgpCiBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIW1fd2l0aEFyaXR5Q2hlY2suaXNFbXB0eVZhbHVlKCkpOwotICAg
IG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYobV9saW5rQnVmZmVyLT5maW5hbGl6ZUNvZGVX
aXRob3V0RGlzYXNzZW1ibHkoKSk7Ci0gICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZSht
X2ppdENvZGUsIG1fd2l0aEFyaXR5Q2hlY2spOworICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNv
ZGVSZWYoCisgICAgICAgIG1fbGlua0J1ZmZlci0+ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2Vt
Ymx5KCksIG1fd2l0aEFyaXR5Q2hlY2spOwogICAgIAogICAgIGZpbmFsaXplQ29tbW9uKCk7CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwNCwxMSArNzA0
LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJl
bFB0ciB0YXJnZXRUb0NoZWNrOwotICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsK
KyAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aDsKIAogICAgIG1faml0LmVtaXRTdG9yZUNv
ZGVPcmlnaW4obm9kZS0+Y29kZU9yaWdpbik7CiAgICAgCi0gICAgc2xvd1BhdGguYXBwZW5kKG1f
aml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQ
UiwgdGFyZ2V0VG9DaGVjaywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCkpKTsKKyAg
ICBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVjaywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoMCkpOwogCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhj
YWxsZWVHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlKSksIHJlc3VsdEdQ
Uik7CiAgICAgbV9qaXQuc3RvcmU2NChyZXN1bHRHUFIsIGNhbGxlZUZyYW1lU2xvdChKU1N0YWNr
OjpTY29wZUNoYWluKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMs
OCBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBG
dW5jdGlvblJlZW50cnlXYXRjaHBvaW50OgogICAgIGNhc2UgVmFyaWFibGVXYXRjaHBvaW50Ogog
ICAgIGNhc2UgTm90aWZ5V3JpdGU6CisgICAgY2FzZSBDYWxsOgorICAgIGNhc2UgQ29uc3RydWN0
OgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0
QnlJZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2
aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDYgKzI5OSw0NCBAQCBzdGF0aWMgdm9pZCBmaXhGdW5j
dGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgLy8gSGFu
ZGxpbmcgSlMgY2FsbHMgaXMgd2VpcmQ6IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2Ugc29ydCB0
aGVtIGJ5IHRoZSBQQyBpbiBMTFZNCisgICAgLy8gZ2VuZXJhdGVkIGNvZGUuIFRoYXQgaW1wbGll
cyBmaXJzdCBwcnVuaW5nIHRoZSBvbmVzIHRoYXQgTExWTSBkaWRuJ3QgZ2VuZXJhdGUuCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLmpzQ2FsbHMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgSlNDYWxsJiBjYWxsID0gc3RhdGUuanNDYWxsc1tpXTsKKyAgICAgICAgCisgICAgICAg
IFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVyYXRvciBpdGVyID0gcmVjb3JkTWFwLmZpbmQoY2Fs
bC5zdGFja21hcElEKCkpOworICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpIHsK
KyAgICAgICAgICAgIC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LiBQcnVuZSBpdC4KKyAgICAgICAg
ICAgIGNhbGwgPSBzdGF0ZS5qc0NhbGxzLmxhc3QoKTsKKyAgICAgICAgICAgIHN0YXRlLmpzQ2Fs
bHMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgaS0tOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNhbGwubV9pbnN0cnVjdGlvbk9mZnNldCA9
IGl0ZXItPnZhbHVlLmluc3RydWN0aW9uT2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBzdGQ6OnNv
cnQoc3RhdGUuanNDYWxscy5iZWdpbigpLCBzdGF0ZS5qc0NhbGxzLmVuZCgpKTsKKyAgICAKKyAg
ICBjb2RlQmxvY2stPnNldE51bWJlck9mQ2FsbExpbmtJbmZvcyhzdGF0ZS5qc0NhbGxzLnNpemUo
KSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUuanNDYWxscy5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgSlNDYWxsJiBjYWxsID0gc3RhdGUuanNDYWxsc1tpXTsKKworICAgICAgICBDQ2Fs
bEhlbHBlcnMgZmFzdFBhdGhKSVQoJnZtLCBjb2RlQmxvY2spOworICAgICAgICBjYWxsLmVtaXQo
ZmFzdFBhdGhKSVQpOworICAgICAgICAKKyAgICAgICAgY2hhciogc3RhcnRPZklDID0gYml0d2lz
ZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlvbikgKyBjYWxsLm1faW5zdHJ1Y3Rpb25PZmZz
ZXQ7CisgICAgICAgIAorICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sICZmYXN0UGF0
aEpJVCwgc3RhcnRPZklDLCBzaXplT2ZDYWxsKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChs
aW5rQnVmZmVyLmlzVmFsaWQoKSk7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QXNzZW1ibGVyVHlwZV9UOjpmaWxsTm9wcygKKyAgICAgICAgICAgIHN0YXJ0T2ZJQyArIGxpbmtC
dWZmZXIuc2l6ZSgpLCBzaXplT2ZDYWxsKCkgLSBsaW5rQnVmZmVyLnNpemUoKSk7CisgICAgICAg
IAorICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSBjb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhp
KTsKKyAgICAgICAgY2FsbC5saW5rKHZtLCBsaW5rQnVmZmVyLCBpbmZvKTsKKyAgICB9CisgICAg
CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgCiAgICAg
Zm9yICh1bnNpZ25lZCBleGl0SW5kZXggPSBqaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgZXhpdElu
ZGV4LS07KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hl
U2l6ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxp
bmVDYWNoZVNpemUuY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3
LDExIEBAIHNpemVfdCBzaXplT2ZQdXRCeUlkKCkKICAgICByZXR1cm4gMzI7CiB9CiAKK3NpemVf
dCBzaXplT2ZDYWxsKCkKK3sKKyAgICByZXR1cm4gNDM7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCShyZXZpc2lvbiAxNjA2MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKIAogc2l6ZV90IHNpemVPZkdldEJ5SWQoKTsKIHNpemVfdCBzaXplT2ZQdXRCeUlkKCk7Citz
aXplX3Qgc2l6ZU9mQ2FsbCgpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9y
eS5oCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
dHJpbnNpY1JlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsOSBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oZnJhbWVBZGRyZXNzLCAibGx2
bS5mcmFtZWFkZHJlc3MiLCBmdW5jdGlvblR5cGUocG9pbnRlclR5cGUoaW50OCksIGludDMyKSkg
XAogICAgIG1hY3JvKG11bFdpdGhPdmVyZmxvdzMyLCAibGx2bS5zbXVsLndpdGgub3ZlcmZsb3cu
aTMyIiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQzMiwgYm9vbGVhbiks
IGludDMyLCBpbnQzMikpIFwKICAgICBtYWNybyhtdWxXaXRoT3ZlcmZsb3c2NCwgImxsdm0uc211
bC53aXRoLm92ZXJmbG93Lmk2NCIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwg
aW50NjQsIGJvb2xlYW4pLCBpbnQ2NCwgaW50NjQpKSBcCi0gICAgbWFjcm8ocGF0Y2hwb2ludElu
dDY0LCAibGx2bS5leHBlcmltZW50YWwucGF0Y2hwb2ludC5pNjQiLCBmdW5jdGlvblR5cGUoaW50
NjQsIGludDMyLCBpbnQzMiwgcmVmOCwgaW50MzIsIFZhcmlhZGljKSkgXAotICAgIG1hY3JvKHBh
dGNocG9pbnRWb2lkLCAibGx2bS5leHBlcmltZW50YWwucGF0Y2hwb2ludC52b2lkIiwgZnVuY3Rp
b25UeXBlKHZvaWRUeXBlLCBpbnQzMiwgaW50MzIsIHJlZjgsIGludDMyLCBWYXJpYWRpYykpIFwK
LSAgICBtYWNybyhzdGFja21hcCwgImxsdm0uZXhwZXJpbWVudGFsLnN0YWNrbWFwIiwgZnVuY3Rp
b25UeXBlKHZvaWRUeXBlLCBpbnQzMiwgaW50MzIsIFZhcmlhZGljKSkgXAorICAgIG1hY3JvKHBh
dGNocG9pbnRJbnQ2NCwgImxsdm0uZXhwZXJpbWVudGFsLnBhdGNocG9pbnQuaTY0IiwgZnVuY3Rp
b25UeXBlKGludDY0LCBpbnQ2NCwgaW50MzIsIHJlZjgsIGludDMyLCBWYXJpYWRpYykpIFwKKyAg
ICBtYWNybyhwYXRjaHBvaW50Vm9pZCwgImxsdm0uZXhwZXJpbWVudGFsLnBhdGNocG9pbnQudm9p
ZCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50NjQsIGludDMyLCByZWY4LCBpbnQzMiwgVmFy
aWFkaWMpKSBcCisgICAgbWFjcm8oc3RhY2ttYXAsICJsbHZtLmV4cGVyaW1lbnRhbC5zdGFja21h
cCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50NjQsIGludDMyLCBWYXJpYWRpYykpIFwKICAg
ICBtYWNybyhzdWJXaXRoT3ZlcmZsb3czMiwgImxsdm0uc3N1Yi53aXRoLm92ZXJmbG93LmkzMiIs
IGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50MzIsIGJvb2xlYW4pLCBpbnQz
MiwgaW50MzIpKSBcCiAgICAgbWFjcm8oc3ViV2l0aE92ZXJmbG93NjQsICJsbHZtLnNzdWIud2l0
aC5vdmVyZmxvdy5pNjQiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDY0
LCBib29sZWFuKSwgaW50NjQsIGludDY0KSkgXAogICAgIG1hY3JvKHRyYXAsICJsbHZtLnRyYXAi
LCBmdW5jdGlvblR5cGUodm9pZFR5cGUpKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklUQ29kZS5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDkgKzU0LDkgQEAg
dm9pZCBKSVRDb2RlOjphZGREYXRhU2VjdGlvbihSZWZDb3VudGVkQQogICAgIG1fZGF0YVNlY3Rp
b25zLmFwcGVuZChkYXRhU2VjdGlvbik7CiB9CiAKLXZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUVu
dHJ5cG9pbnQoQ29kZVJlZiBlbnRyeXBvaW50KQordm9pZCBKSVRDb2RlOjppbml0aWFsaXplQXJp
dHlDaGVja0VudHJ5cG9pbnQoQ29kZVJlZiBlbnRyeXBvaW50KQogewotICAgIG1fZW50cnlwb2lu
dCA9IGVudHJ5cG9pbnQ7CisgICAgbV9hcml0eUNoZWNrRW50cnlwb2ludCA9IGVudHJ5cG9pbnQ7
CiB9CiAKIHZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKENvZGVQdHIgYWRk
cmVzcykKQEAgLTY0LDIxICs2NCwyNSBAQCB2b2lkIEpJVENvZGU6OmluaXRpYWxpemVBZGRyZXNz
Rm9yQ2FsbChDCiAgICAgbV9hZGRyZXNzRm9yQ2FsbCA9IGFkZHJlc3M7CiB9CiAKLUpJVENvZGU6
OkNvZGVQdHIgSklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoKQorSklUQ29kZTo6Q29kZVB0ciBKSVRD
b2RlOjphZGRyZXNzRm9yQ2FsbChWTSYsIEFyaXR5Q2hlY2tNb2RlIGFyaXR5Q2hlY2ssIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTW9kZSkKIHsKLSAgICByZXR1cm4gbV9hZGRyZXNzRm9yQ2FsbDsKKyAg
ICBzd2l0Y2ggKGFyaXR5Q2hlY2spIHsKKyAgICBjYXNlIEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDoK
KyAgICAgICAgcmV0dXJuIG1fYWRkcmVzc0ZvckNhbGw7CisgICAgY2FzZSBNdXN0Q2hlY2tBcml0
eToKKyAgICAgICAgcmV0dXJuIG1fYXJpdHlDaGVja0VudHJ5cG9pbnQuY29kZSgpOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBDb2RlUHRyKCk7
CiB9CiAKIHZvaWQqIEpJVENvZGU6OmV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9m
ZnNldCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2VudHJ5cG9pbnQpOwogICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihtX2FkZHJlc3NGb3JDYWxsLmV4ZWN1dGFibGVBZGRyZXNz
KCkpICsgb2Zmc2V0OwogfQogCiB2b2lkKiBKSVRDb2RlOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KHNp
emVfdCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2VudHJ5cG9pbnQpOwotCiAgICAgLy8gV2Ug
Y2FuJ3QgcGF0Y2ggRlRMIGNvZGUsIHlldC4gRXZlbiBpZiB3ZSBkaWQsIGl0J3Mgbm90IGNsZWFy
IHRoYXQgd2Ugd291bGQgZG8gc28KICAgICAvLyB0aHJvdWdoIHRoaXMgQVBJLgogICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC04Nyw4ICs5MSw2IEBAIHZvaWQqIEpJVENvZGU6
OmRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV8KIAogdW5zaWduZWQgSklUQ29kZTo6b2Zmc2V0T2Yo
dm9pZCopCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9lbnRyeXBvaW50KTsKLQogICAgIC8vIFdl
IGN1cnJlbnRseSBkb24ndCBoYXZlIHZpc2liaWxpdHkgaW50byB0aGUgRlRMIGNvZGUuCiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gMDsKQEAgLTk2LDggKzk4
LDYgQEAgdW5zaWduZWQgSklUQ29kZTo6b2Zmc2V0T2Yodm9pZCopCiAKIHNpemVfdCBKSVRDb2Rl
OjpzaXplKCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2VudHJ5cG9pbnQpOwotCiAgICAgLy8g
V2UgZG9uJ3Qga25vdyB0aGUgc2l6ZSBvZiBGVEwgY29kZSwgeWV0LiBNYWtlIGEgd2lsZCBndWVz
cy4gVGhpcyBpcyBtb3N0bHkgdXNlZCBmb3IKICAgICAvLyBHQyBsb2FkIGVzdGltYXRlcy4KICAg
ICByZXR1cm4gMTAwMDsKQEAgLTEwNSw4ICsxMDUsNiBAQCBzaXplX3QgSklUQ29kZTo6c2l6ZSgp
CiAKIGJvb2wgSklUQ29kZTo6Y29udGFpbnModm9pZCopCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
bV9lbnRyeXBvaW50KTsKLQogICAgIC8vIFdlIGhhdmUgbm8gaWRlYSB3aGF0IGFkZHJlc3NlcyB0
aGUgRlRMIGNvZGUgY29udGFpbnMsIHlldC4KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SklUQ29kZS5oCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTcgKzQ2LDE3IEBAIHB1YmxpYzoK
ICAgICBKSVRDb2RlKCk7CiAgICAgfkpJVENvZGUoKTsKICAgICAKLSAgICBDb2RlUHRyIGFkZHJl
c3NGb3JDYWxsKCk7Ci0gICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qg
b2Zmc2V0KTsKLSAgICB2b2lkKiBkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpOwot
ICAgIHVuc2lnbmVkIG9mZnNldE9mKHZvaWQqIHBvaW50ZXJJbnRvQ29kZSk7Ci0gICAgc2l6ZV90
IHNpemUoKTsKLSAgICBib29sIGNvbnRhaW5zKHZvaWQqKTsKKyAgICBDb2RlUHRyIGFkZHJlc3NG
b3JDYWxsKFZNJiwgQXJpdHlDaGVja01vZGUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSkgT1ZF
UlJJREU7CisgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0
KSBPVkVSUklERTsKKyAgICB2b2lkKiBkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQp
IE9WRVJSSURFOworICAgIHVuc2lnbmVkIG9mZnNldE9mKHZvaWQqIHBvaW50ZXJJbnRvQ29kZSkg
T1ZFUlJJREU7CisgICAgc2l6ZV90IHNpemUoKSBPVkVSUklERTsKKyAgICBib29sIGNvbnRhaW5z
KHZvaWQqKSBPVkVSUklERTsKICAgICAKICAgICB2b2lkIGluaXRpYWxpemVFeGl0VGh1bmtzKENv
ZGVSZWYpOwogICAgIHZvaWQgYWRkSGFuZGxlKFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhh
bmRsZT4pOwogICAgIHZvaWQgYWRkRGF0YVNlY3Rpb24oUmVmQ291bnRlZEFycmF5PExTZWN0aW9u
V29yZD4pOwotICAgIHZvaWQgaW5pdGlhbGl6ZUVudHJ5cG9pbnQoQ29kZVJlZik7CisgICAgdm9p
ZCBpbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoQ29kZVJlZik7CiAgICAgdm9pZCBpbml0
aWFsaXplQWRkcmVzc0ZvckNhbGwoQ29kZVB0cik7CiAgICAgCiAgICAgY29uc3QgVmVjdG9yPFJl
ZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPj4mIGhhbmRsZXMoKSBjb25zdCB7IHJldHVybiBt
X2hhbmRsZXM7IH0KQEAgLTc1LDcgKzc1LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmQ291
bnRlZEFycmF5PExTZWN0aW9uV29yZD4+IG1fZGF0YVNlY3Rpb25zOwogICAgIFZlY3RvcjxSZWZQ
dHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4+IG1faGFuZGxlczsKICAgICBDb2RlUHRyIG1fYWRk
cmVzc0ZvckNhbGw7Ci0gICAgQ29kZVJlZiBtX2VudHJ5cG9pbnQ7CisgICAgQ29kZVJlZiBtX2Fy
aXR5Q2hlY2tFbnRyeXBvaW50OwogICAgIENvZGVSZWYgbV9leGl0VGh1bmtzOwogfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkocmV2
aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTIgKzEwMywxMiBAQCBib29sIEpJVEZpbmFs
aXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdpdGhB
cml0eUNoZWNrOwogICAgIGlmIChhcml0eUNoZWNrLmlzU2V0KCkpCiAgICAgICAgIHdpdGhBcml0
eUNoZWNrID0gZW50cnlwb2ludExpbmtCdWZmZXItPmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7Ci0g
ICAgaml0Q29kZS0+aW5pdGlhbGl6ZUVudHJ5cG9pbnQoCisgICAgaml0Q29kZS0+aW5pdGlhbGl6
ZUFyaXR5Q2hlY2tFbnRyeXBvaW50KAogICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKICAgICAg
ICAgICAgICplbnRyeXBvaW50TGlua0J1ZmZlciwKICAgICAgICAgICAgICgiRlRMIGVudHJ5cG9p
bnQgdGh1bmsgZm9yICVzIHdpdGggTExWTSBnZW5lcmF0ZWQgY29kZSBhdCAlcCIsIHRvQ1N0cmlu
ZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLmdldCgpLCBKSVRDb2RlOjpG
VExKSVQpKS5kYXRhKCksIGZ1bmN0aW9uKSkpOwogICAgIAotICAgIG1fcGxhbi5jb2RlQmxvY2st
PnNldEpJVENvZGUoaml0Q29kZSwgd2l0aEFyaXR5Q2hlY2spOworICAgIG1fcGxhbi5jb2RlQmxv
Y2stPnNldEpJVENvZGUoaml0Q29kZSk7CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTEpTQ2FsbC5oIgorCisjaWYg
RU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworSlND
YWxsOjpKU0NhbGwodW5zaWduZWQgc3RhY2ttYXBJRCwgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBj
YWxsVHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorICAgIDogbV9zdGFja21hcElEKHN0YWNr
bWFwSUQpCisgICAgLCBtX2NhbGxUeXBlKGNhbGxUeXBlKQorICAgICwgbV9jb2RlT3JpZ2luKGNv
ZGVPcmlnaW4pCisgICAgLCBtX2luc3RydWN0aW9uT2Zmc2V0KDApCit7Cit9CisKK3ZvaWQgSlND
YWxsOjplbWl0KENDYWxsSGVscGVycyYgaml0KQoreworICAgIENDYWxsSGVscGVyczo6SnVtcCBz
bG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAgIENDYWxsSGVscGVyczo6
Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCBtX3RhcmdldFRvQ2hlY2ssCisgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSk7CisgICAgCisgICAgaml0LmxvYWRQdHIoCisgICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSlNGdW5jdGlvbjo6b2Zm
c2V0T2ZTY29wZUNoYWluKCkpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMSk7CisgICAgaml0LnN0
b3JlNjQoCisgICAgICAgIEdQUkluZm86OnJlZ1QxLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLAor
ICAgICAgICAgICAgc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4gLSBzaXpl
b2Yodm9pZCopKSk7CisgICAgCisgICAgbV9mYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAg
IENDYWxsSGVscGVyczo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKKyAgICAKKyAgICBzbG93UGF0
aC5saW5rKCZqaXQpOworICAgIG1fc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAKKyAg
ICBkb25lLmxpbmsoJmppdCk7Cit9CisKK3ZvaWQgSlNDYWxsOjpsaW5rKFZNJiB2bSwgTGlua0J1
ZmZlciYgbGlua0J1ZmZlciwgQ2FsbExpbmtJbmZvJiBjYWxsSW5mbykKK3sKKyAgICBUaHVua0dl
bmVyYXRvciBnZW5lcmF0b3IgPSBsaW5rVGh1bmtHZW5lcmF0b3JGb3IoCisgICAgICAgIG1fY2Fs
bFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29k
ZUZvckNhbGwsCisgICAgICAgIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CisgICAgCisgICAgbGlu
a0J1ZmZlci5saW5rKAorICAgICAgICBtX3Nsb3dDYWxsLCBGdW5jdGlvblB0cih2bS5nZXRDVElT
dHViKGdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAKKyAgICBj
YWxsSW5mby5jYWxsVHlwZSA9IG1fY2FsbFR5cGU7CisgICAgY2FsbEluZm8uY29kZU9yaWdpbiA9
IG1fY29kZU9yaWdpbjsKKyAgICBjYWxsSW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX3Nsb3dDYWxsKTsKKyAgICBjYWxsSW5mby5ob3RQYXRo
QmVnaW4gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV90YXJnZXRUb0NoZWNrKTsKKyAgICBjYWxs
SW5mby5ob3RQYXRoT3RoZXIgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2Zhc3RD
YWxsKTsKKyAgICBjYWxsSW5mby5jYWxsZWVHUFIgPSBHUFJJbmZvOjpyZWdUMDsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEZUTEpTQ2FsbF9oCisjZGVmaW5lIEZUTEpTQ2FsbF9oCisKKyNpZiBFTkFCTEUo
RlRMX0pJVCkKKworI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkNhbGxMaW5r
SW5mby5oIgorI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgSlNDYWxsIHsKK3B1
YmxpYzoKKyAgICBKU0NhbGwodW5zaWduZWQgc3RhY2ttYXBJRCwgQ2FsbExpbmtJbmZvOjpDYWxs
VHlwZSwgQ29kZU9yaWdpbik7CisgICAgCisgICAgdm9pZCBlbWl0KENDYWxsSGVscGVycyYpOwor
ICAgIHZvaWQgbGluayhWTSYsIExpbmtCdWZmZXImLCBDYWxsTGlua0luZm8mKTsKKyAgICAKKyAg
ICB1bnNpZ25lZCBzdGFja21hcElEKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja21hcElEOyB9Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgSlNDYWxsJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2luc3RydWN0aW9uT2Zmc2V0IDwgb3RoZXIubV9pbnN0cnVjdGlv
bk9mZnNldDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fc3RhY2ttYXBJ
RDsKKyAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIG1fY2FsbFR5cGU7CisgICAgQ29kZU9yaWdp
biBtX2NvZGVPcmlnaW47CisgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgbV90YXJnZXRU
b0NoZWNrOworICAgIENDYWxsSGVscGVyczo6Q2FsbCBtX2Zhc3RDYWxsOworICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBtX3Nsb3dDYWxsOworCitwdWJsaWM6CisgICAgdWludDMyX3QgbV9pbnN0cnVj
dGlvbk9mZnNldDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8v
IEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMSlNDYWxsX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9u
IDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyArMTIzLDcgQEAgcHVibGljOgogICAgICAgICAK
ICAgICAgICAgbV9mdGxTdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7
CiAgICAgICAgIG1fb3V0LmNhbGwoCi0gICAgICAgICAgICBtX291dC5zdGFja21hcEludHJpbnNp
YygpLCBtX291dC5jb25zdEludDMyKG1fZnRsU3RhdGUuY2FwdHVyZWRTdGFja21hcElEKSwKKyAg
ICAgICAgICAgIG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksIG1fb3V0LmNvbnN0SW50NjQobV9m
dGxTdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQpLAogICAgICAgICAgICAgbV9vdXQuaW50MzJaZXJv
LCBjYXB0dXJlZEFsbG9jYSk7CiAgICAgICAgIAogICAgICAgICBtX2NhbGxGcmFtZSA9IG1fb3V0
LnB0clRvSW50KApAQCAtMTI5Nyw3ICsxMjk3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAg
ICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2FsbCgKICAgICAgICAgICAgIG1fb3V0LnBhdGNocG9p
bnRJbnQ2NEludHJpbnNpYygpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihzdGFja21h
cElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXplT2ZHZXRCeUlkKCkpLAorICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQ2NChzdGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXplT2ZHZXRCeUlk
KCkpLAogICAgICAgICAgICAgY29uc3ROdWxsKG1fb3V0LnJlZjgpLCBtX291dC5jb25zdEludDMy
KDEpLCBiYXNlKTsKICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxs
LCBMTFZNQW55UmVnQ2FsbENvbnYpOwogICAgICAgICBzZXRKU1ZhbHVlKGNhbGwpOwpAQCAtMTMy
Miw3ICsxMzIyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSBjYWxsID0g
bV9vdXQuY2FsbCgKICAgICAgICAgICAgIG1fb3V0LnBhdGNocG9pbnRWb2lkSW50cmluc2ljKCks
Ci0gICAgICAgICAgICBtX291dC5jb25zdEludDMyKHN0YWNrbWFwSUQpLCBtX291dC5jb25zdElu
dDMyKHNpemVPZlB1dEJ5SWQoKSksCisgICAgICAgICAgICBtX291dC5jb25zdEludDY0KHN0YWNr
bWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZlB1dEJ5SWQoKSksCiAgICAgICAgICAgICBj
b25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0SW50MzIoMiksIGJhc2UsIHZhbHVlKTsK
ICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55UmVn
Q2FsbENvbnYpOwogICAgICAgICAKQEAgLTI0MzcsMzUgKzI0MzcsNDAgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QoKQogICAgIHsKLSAgICAgICAgLy8g
RklYTUU6IFRoaXMgaXMgdW5hY2NlcHRhYmx5IHNsb3cuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjEKKyAgICAgICAgaW50IGR1bW15VGhp
c0FyZ3VtZW50ID0gbV9ub2RlLT5vcCgpID09IENhbGwgPyAwIDogMTsKKyAgICAgICAgaW50IG51
bVBhc3NlZEFyZ3MgPSBtX25vZGUtPm51bUNoaWxkcmVuKCkgLSAxOworICAgICAgICBpbnQgbnVt
QXJncyA9IG51bVBhc3NlZEFyZ3MgKyBkdW1teVRoaXNBcmd1bWVudDsKICAgICAgICAgCi0gICAg
ICAgIEpfSklUT3BlcmF0aW9uX0UgZnVuY3Rpb24gPQotICAgICAgICAgICAgbV9ub2RlLT5vcCgp
ID09IENhbGwgPyBvcGVyYXRpb25GVExDYWxsIDogb3BlcmF0aW9uRlRMQ29uc3RydWN0OworICAg
ICAgICBMVmFsdWUgY2FsbGVlID0gbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9k
ZSwgMCkpOwogICAgICAgICAKLSAgICAgICAgaW50IGR1bW15VGhpc0FyZ3VtZW50ID0gbV9ub2Rl
LT5vcCgpID09IENhbGwgPyAwIDogMTsKKyAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCA9IG1f
c3RhY2ttYXBJRHMrKzsKICAgICAgICAgCi0gICAgICAgIGludCBudW1QYXNzZWRBcmdzID0gbV9u
b2RlLT5udW1DaGlsZHJlbigpIC0gMTsKKyAgICAgICAgVmVjdG9yPExWYWx1ZT4gYXJndW1lbnRz
OworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50NjQoc3RhY2ttYXBJRCkp
OworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mQ2FsbCgp
KSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoY29uc3ROdWxsKG1fb3V0LnJlZjgpKTsKKyAg
ICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDMyKDEgKyBKU1N0YWNrOjpDYWxs
RnJhbWVIZWFkZXJTaXplIC0gSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUgKyBudW1Bcmdz
KSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoY2FsbGVlKTsgLy8gY2FsbGVlIC0+ICVyZGkK
KyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChnZXRVbmRlZihtX291dC5pbnQ2NCkpOyAvLyBjb2Rl
IGJsb2NrCisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoZ2V0VW5kZWYobV9vdXQuaW50NjQpKTsg
Ly8gc2NvcGUgY2hhaW4KKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjYWxsZWUpOyAvLyBjYWxs
ZWUgLT4gc3RhY2sKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDY0KG51
bUFyZ3MpKTsgLy8gYXJndW1lbnQgY291bnQgYW5kIHplcm9zIGZvciB0aGUgdGFnCisgICAgICAg
IGlmIChkdW1teVRoaXNBcmd1bWVudCkKKyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoZ2V0
VW5kZWYobV9vdXQuaW50NjQpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNz
ZWRBcmdzOyArK2kpCisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGxvd0pTVmFsdWUobV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEgKyBpKSkpOwogICAgICAgICAKLSAgICAgICAgTFZh
bHVlIGNhbGxlZUZyYW1lID0gbV9vdXQuYWRkKAotICAgICAgICAgICAgbV9jYWxsRnJhbWUsCi0g
ICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplb2YoUmVnaXN0ZXIpICogdmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwobV9ncmFwaC5mcmFtZVJlZ2lzdGVyQ291bnQoKSkub2Zmc2V0KCkpKTsK
KyAgICAgICAgY2FsbFByZWZsaWdodCgpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmUz
MigKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIobnVtUGFzc2VkQXJncyArIGR1bW15VGhp
c0FyZ3VtZW50KSwKLSAgICAgICAgICAgIHBheWxvYWRGb3IoY2FsbGVlRnJhbWUsIEpTU3RhY2s6
OkFyZ3VtZW50Q291bnQpKTsKLSAgICAgICAgbV9vdXQuc3RvcmU2NChtX2NhbGxGcmFtZSwgY2Fs
bGVlRnJhbWUsIG1faGVhcHMuQ2FsbEZyYW1lX2NhbGxlckZyYW1lKTsKLSAgICAgICAgbV9vdXQu
c3RvcmU2NCgKLSAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25v
ZGUsIDApKSwKLSAgICAgICAgICAgIGFkZHJlc3NGb3IoY2FsbGVlRnJhbWUsIEpTU3RhY2s6OkNh
bGxlZSkpOworICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwobV9vdXQucGF0Y2hwb2lu
dEludDY0SW50cmluc2ljKCksIGFyZ3VtZW50cyk7CisgICAgICAgIHNldEluc3RydWN0aW9uQ2Fs
bGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTVdlYktpdEpTQ2FsbENvbnYpOwogICAgICAgICAKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKLSAgICAgICAg
ICAgIG1fb3V0LnN0b3JlNjQoCi0gICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX2dyYXBoLnZh
ckFyZ0NoaWxkKG1fbm9kZSwgMSArIGkpKSwKLSAgICAgICAgICAgICAgICBhZGRyZXNzRm9yKGNh
bGxlZUZyYW1lLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpICsgZHVtbXlUaGlzQXJndW1l
bnQpLm9mZnNldCgpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgbV9mdGxTdGF0ZS5qc0NhbGxzLmFw
cGVuZChKU0NhbGwoCisgICAgICAgICAgICBzdGFja21hcElELAorICAgICAgICAgICAgbV9ub2Rl
LT5vcCgpID09IENhbGwgPyBDYWxsTGlua0luZm86OkNhbGwgOiBDYWxsTGlua0luZm86OkNvbnN0
cnVjdCwKKyAgICAgICAgICAgIG1fbm9kZS0+Y29kZU9yaWdpbikpOwogICAgICAgICAKLSAgICAg
ICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9vdXQub3BlcmF0aW9uKGZ1bmN0aW9uKSwgY2FsbGVlRnJh
bWUpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBj
b21waWxlSnVtcCgpCkBAIC00MDkyLDcgKzQwOTcsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAg
ICAgZXhpdC5tX3N0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CiAgICAgICAgIGFyZ3VtZW50
cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQzMihNYWNyb0Fzc2VtYmxlcjo6bWF4SnVtcFJlcGxh
Y2VtZW50U2l6ZSgpKSk7Ci0gICAgICAgIGFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJ
bnQzMihleGl0Lm1fc3RhY2ttYXBJRCkpOworICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1f
b3V0LmNvbnN0SW50NjQoZXhpdC5tX3N0YWNrbWFwSUQpKTsKICAgICAgICAgCiAgICAgICAgIG1f
b3V0LmNhbGwobV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAkocmV2aXNpb24g
MTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDggQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KAogICAg
IAogICAgIGV4ZWMtPnNldENvZGVCbG9jayhlbnRyeUNvZGVCbG9jayk7CiAgICAgCi0gICAgdm9p
ZCogcmVzdWx0ID0gZW50cnlDb2RlLT5hZGRyZXNzRm9yQ2FsbCgpLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CisgICAgdm9pZCogcmVzdWx0ID0gZW50cnlDb2RlLT5hZGRyZXNzRm9yQ2FsbCgKKyAgICAg
ICAgdm0sIEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1
aXJlZCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KQogICAgICAgICBkYXRhTG9nKCIgICAgRW50cnkgd2lsbCBzdWNjZWVkLCBnb2luZyB0byBhZGRy
ZXNzIiwgUmF3UG9pbnRlcihyZXN1bHQpLCAiXG4iKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzksNyArNzksOSBAQCB2b2lkIFN0YWNrTWFwczo6TG9jYXRpb246OnJlc3RvcmVJbnRvKAog
CiBib29sIFN0YWNrTWFwczo6UmVjb3JkOjpwYXJzZShEYXRhVmlldyogdmlldywgdW5zaWduZWQm
IG9mZnNldCkKIHsKLSAgICBwYXRjaHBvaW50SUQgPSB2aWV3LT5yZWFkPHVpbnQzMl90PihvZmZz
ZXQsIHRydWUpOworICAgIGludDY0X3QgaWQgPSB2aWV3LT5yZWFkPGludDY0X3Q+KG9mZnNldCwg
dHJ1ZSk7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludDMyX3Q+KGlkKSA9PSBpZCk7CisgICAg
cGF0Y2hwb2ludElEID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGlkKTsKICAgICBpZiAoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ocGF0Y2hwb2ludElEKSA8IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKQEAgLTkwLDYgKzkyLDEzIEBAIGJvb2wgU3RhY2tNYXBzOjpSZWNvcmQ6OnBhcnNlKERh
dGFWaWV3KiAKICAgICB3aGlsZSAobGVuZ3RoLS0pCiAgICAgICAgIGxvY2F0aW9ucy5hcHBlbmQo
cmVhZE9iamVjdDxMb2NhdGlvbj4odmlldywgb2Zmc2V0KSk7CiAgICAgCisgICAgdW5zaWduZWQg
bnVtTGl2ZU91dHMgPSB2aWV3LT5yZWFkPHVpbnQxNl90PihvZmZzZXQsIHRydWUpOworICAgIHdo
aWxlIChudW1MaXZlT3V0cy0tKSB7CisgICAgICAgIHZpZXctPnJlYWQ8dWludDE2X3Q+KG9mZnNl
dCwgdHJ1ZSk7IC8vIHJlZ251bQorICAgICAgICB2aWV3LT5yZWFkPHVpbnQ4X3Q+KG9mZnNldCwg
dHJ1ZSk7IC8vIHJlc2VydmVkCisgICAgICAgIHZpZXctPnJlYWQ8dWludDhfdD4ob2Zmc2V0LCB0
cnVlKTsgLy8gc2l6ZSBpbiBieXRlcworICAgIH0KKyAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNpb24gMTYwNjIy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgi
CiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTEpJVEZpbmFsaXplci5oIgor
I2luY2x1ZGUgIkZUTEpTQ2FsbC5oIgogI2luY2x1ZGUgIkZUTFN0YWNrTWFwcy5oIgogI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCkBAIC02MCw2ICs2MSw3IEBAIHB1YmxpYzoKICAgICB1
bnNpZ25lZCBjYXB0dXJlZFN0YWNrbWFwSUQ7CiAgICAgU2VnbWVudGVkVmVjdG9yPEdldEJ5SWRE
ZXNjcmlwdG9yPiBnZXRCeUlkczsKICAgICBTZWdtZW50ZWRWZWN0b3I8UHV0QnlJZERlc2NyaXB0
b3I+IHB1dEJ5SWRzOworICAgIFZlY3RvcjxKU0NhbGw+IGpzQ2FsbHM7CiAgICAgVmVjdG9yPENT
dHJpbmc+IGNvZGVTZWN0aW9uTmFtZXM7CiAgICAgVmVjdG9yPENTdHJpbmc+IGRhdGFTZWN0aW9u
TmFtZXM7CiAgICAgUmVmQ291bnRlZEFycmF5PExTZWN0aW9uV29yZD4gc3RhY2ttYXBzU2VjdGlv
bjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAz
LDggKzcwMyw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAg
ICAKICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQoQ29kZUJsb2NrOjpMYXRlU2hyaW5rKTsK
ICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgYWRvcHRSZWYobmV3IERpcmVj
dEpJVENvZGUocmVzdWx0LCBKSVRDb2RlOjpCYXNlbGluZUpJVCkpLAotICAgICAgICB3aXRoQXJp
dHlDaGVjayk7CisgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0
aEFyaXR5Q2hlY2ssIEpJVENvZGU6OkJhc2VsaW5lSklUKSkpOwogICAgIAogI2lmIEVOQUJMRShK
SVRfVkVSQk9TRSkKICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBb
JXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFy
dCgpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQoKSk7CkBAIC03MTMsNDIgKzcxMiw2
IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAgICByZXR1cm4g
Q29tcGlsYXRpb25TdWNjZXNzZnVsOwogfQogCi12b2lkIEpJVDo6bGlua0ZvcihFeGVjU3RhdGUq
IGV4ZWMsIEpTRnVuY3Rpb24qIGNhbGxlZSwgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ssIENv
ZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBKSVQ6OkNvZGVQdHIgY29kZSwgQ2FsbExpbmtJbmZv
KiBjYWxsTGlua0luZm8sIFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotewot
ICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwotCi0gICAg
QVNTRVJUKCFjYWxsTGlua0luZm8tPmlzTGlua2VkKCkpOwotICAgIGNhbGxMaW5rSW5mby0+Y2Fs
bGVlLnNldCgqdm0sIGNhbGxMaW5rSW5mby0+aG90UGF0aEJlZ2luLCBjYWxsZXJDb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwotICAgIGNhbGxMaW5rSW5mby0+bGFzdFNlZW5D
YWxsZWUuc2V0KCp2bSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVl
KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmhvdFBhdGhPdGhlciwg
Y29kZSk7Ci0KLSAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQotICAgICAgICBjYWxsZWVDb2RlQmxv
Y2stPmxpbmtJbmNvbWluZ0NhbGwoZXhlYywgY2FsbExpbmtJbmZvKTsKLQotICAgIC8vIFBhdGNo
IHRoZSBzbG93IHBhdGNoIHNvIHdlIGRvIG5vdCBjb250aW51ZSB0byB0cnkgdG8gbGluay4KLSAg
ICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewotICAgICAgICBBU1NFUlQoY2FsbExpbmtJbmZv
LT5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGwKLSAgICAgICAgICAgICAgIHx8IGNhbGxM
aW5rSW5mby0+Y2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJncyk7Ci0gICAgICAg
IGlmIChjYWxsTGlua0luZm8tPmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbCkgewotICAg
ICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9j
YXRpb24sIHZtLT5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2Rl
KCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElT
dHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdl
dENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwotfQotCi12
b2lkIEpJVDo6bGlua1Nsb3dDYWxsKENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDYWxsTGlu
a0luZm8qIGNhbGxMaW5rSW5mbykKLXsKLSAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIo
Y2FsbGVyQ29kZUJsb2NrKTsKLQotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5m
by0+Y2FsbFJldHVybkxvY2F0aW9uLCBjYWxsZXJDb2RlQmxvY2stPnZtKCktPmdldENUSVN0dWIo
dmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKLX0KLQogdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQogewogICAgIGlmIChtX2V4Y2VwdGlvbkNoZWNr
cy5lbXB0eSgpICYmIG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmVtcHR5
KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE2MDYyMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw5ICsy
NDEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBqaXQucHJpdmF0ZUNv
bXBpbGVDVElOYXRpdmVDYWxsKHZtLCBmdW5jKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRp
YyB2b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sq
IGNhbGxlckNvZGVCbG9jaywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIENvZGVQdHIsIENh
bGxMaW5rSW5mbyosIFZNKiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7Ci0gICAgICAgIHN0YXRp
YyB2b2lkIGxpbmtTbG93Q2FsbChDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jaywgQ2FsbExpbmtJ
bmZvKik7Ci0gICAgICAgIAogICAgICAgICBzdGF0aWMgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNv
dW50Rm9yKENvZGVCbG9jayogY29kZUJsb2NrKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NF
UlQoIShjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICYgMSkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMTYwNjIyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOTksNyArMjk5LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Uo
T3Bjb2RlSUQKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OwogCi0gICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9j
b25zdHJ1Y3QgPyBtX3ZtLT5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvciku
Y29kZSgpIDogbV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkp
OworICAgIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciA9IGxpbmtDYWxsVGh1bmtHZW5lcmF0b3JG
b3IoCisgICAgICAgIG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IENvZGVGb3JDb25zdHJ1Y3Qg
OiBDb2RlRm9yQ2FsbCwKKyAgICAgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7
CisgICAgCisgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElT
dHViKGdlbmVyYXRvcikuY29kZSgpKTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9j
ayk7CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoaW5zdHJ1Y3Rpb24pOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNyArMjIx
LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQKIAogICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoMTYpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCi0g
ICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
Y2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1
Y3QgPyBtX3ZtLT5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcikuY29kZSgp
IDogbV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOworICAg
IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciA9IGxpbmtUaHVua0dlbmVyYXRvckZvcigKKyAgICAg
ICAgb3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JD
YWxsLAorICAgICAgICBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKKyAgICAKKyAg
ICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5j
YWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIoZ2VuZXJh
dG9yKS5jb2RlKCkpOwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtZnJhbWVSZWdpc3RlckNv
dW50Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHJldmlzaW9uIDE2
MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBl
ckdlbmVyYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKQEAgLTc1LDUwICs3NiwzOCBAQCBGVEw6OkZvck9TUkVudHJ5SklUQ29kZSogSklUQ29k
ZTo6ZnRsRm9yCiAKIFBhc3NSZWZQdHI8SklUQ29kZT4gSklUQ29kZTo6aG9zdEZ1bmN0aW9uKEpJ
VENvZGU6OkNvZGVSZWYgY29kZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IERpcmVjdEpJ
VENvZGUoY29kZSwgSG9zdENhbGxUaHVuaykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTmF0
aXZlSklUQ29kZShjb2RlLCBIb3N0Q2FsbFRodW5rKSk7CiB9CiAKLURpcmVjdEpJVENvZGU6OkRp
cmVjdEpJVENvZGUoSklUVHlwZSBqaXRUeXBlKQorSklUQ29kZVdpdGhDb2RlUmVmOjpKSVRDb2Rl
V2l0aENvZGVSZWYoSklUVHlwZSBqaXRUeXBlKQogICAgIDogSklUQ29kZShqaXRUeXBlKQogewog
fQogCi1EaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2RlKGNvbnN0IEpJVENvZGU6OkNvZGVSZWYg
cmVmLCBKSVRUeXBlIGppdFR5cGUpCitKSVRDb2RlV2l0aENvZGVSZWY6OkpJVENvZGVXaXRoQ29k
ZVJlZihDb2RlUmVmIHJlZiwgSklUVHlwZSBqaXRUeXBlKQogICAgIDogSklUQ29kZShqaXRUeXBl
KQogICAgICwgbV9yZWYocmVmKQogewogfQogCi1EaXJlY3RKSVRDb2RlOjp+RGlyZWN0SklUQ29k
ZSgpCitKSVRDb2RlV2l0aENvZGVSZWY6On5KSVRDb2RlV2l0aENvZGVSZWYoKQogewogfQogCi12
b2lkIERpcmVjdEpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmKGNvbnN0IEpJVENvZGU6OkNvZGVS
ZWYgcmVmKQotewotICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlZik7Ci0gICAgbV9yZWYgPSByZWY7
Ci19Ci0KLUpJVENvZGU6OkNvZGVQdHIgRGlyZWN0SklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoKQot
ewotICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKLSAgICByZXR1cm4gbV9yZWYuY29kZSgpOwot
fQotCi12b2lkKiBEaXJlY3RKSVRDb2RlOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVf
dCBvZmZzZXQpCit2b2lkKiBKSVRDb2RlV2l0aENvZGVSZWY6OmV4ZWN1dGFibGVBZGRyZXNzQXRP
ZmZzZXQoc2l6ZV90IG9mZnNldCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX3JlZik7CiAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpKSArIG9mZnNldDsKIH0KIAotdm9pZCogRGlyZWN0SklUQ29kZTo6ZGF0YUFkZHJlc3NB
dE9mZnNldChzaXplX3Qgb2Zmc2V0KQordm9pZCogSklUQ29kZVdpdGhDb2RlUmVmOjpkYXRhQWRk
cmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYp
OwogICAgIEFTU0VSVChvZmZzZXQgPD0gc2l6ZSgpKTsgLy8gdXNlIDw9IGluc3RlYWQgb2YgPCBi
ZWNhdXNlIGl0IGlzIHZhbGlkIHRvIGFzayBmb3IgYW4gYWRkcmVzcyBhdCB0aGUgZXhjbHVzaXZl
IGVuZCBvZiB0aGUgY29kZS4KICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9y
ZWYuY29kZSgpLmRhdGFMb2NhdGlvbigpKSArIG9mZnNldDsKIH0KIAotdW5zaWduZWQgRGlyZWN0
SklUQ29kZTo6b2Zmc2V0T2Yodm9pZCogcG9pbnRlckludG9Db2RlKQordW5zaWduZWQgSklUQ29k
ZVdpdGhDb2RlUmVmOjpvZmZzZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQobV9yZWYpOwogICAgIGludHB0cl90IHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KHBvaW50ZXJJbnRvQ29kZSkgLSByZWludGVycHJldF9jYXN0PGludHB0cl90
PihtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CkBAIC0xMjYsMTggKzExNSwxMDUg
QEAgdW5zaWduZWQgRGlyZWN0SklUQ29kZTo6b2Zmc2V0T2Yodm9pZCogcAogICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KTsKIH0KIAotc2l6ZV90IERpcmVjdEpJVENvZGU6
OnNpemUoKQorc2l6ZV90IEpJVENvZGVXaXRoQ29kZVJlZjo6c2l6ZSgpCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQobV9yZWYpOwogICAgIHJldHVybiBtX3JlZi5zaXplKCk7CiB9CiAKLWJvb2wgRGly
ZWN0SklUQ29kZTo6Y29udGFpbnModm9pZCogYWRkcmVzcykKK2Jvb2wgSklUQ29kZVdpdGhDb2Rl
UmVmOjpjb250YWlucyh2b2lkKiBhZGRyZXNzKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVm
KTsKICAgICByZXR1cm4gbV9yZWYuZXhlY3V0YWJsZU1lbW9yeSgpLT5jb250YWlucyhhZGRyZXNz
KTsKIH0KIAorRGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZShKSVRUeXBlIGppdFR5cGUpCisg
ICAgOiBKSVRDb2RlV2l0aENvZGVSZWYoaml0VHlwZSkKK3sKK30KKworRGlyZWN0SklUQ29kZTo6
RGlyZWN0SklUQ29kZSgKKyAgICBKSVRDb2RlOjpDb2RlUmVmIHJlZiwgSklUQ29kZTo6Q29kZVB0
ciB3aXRoQXJpdHlDaGVjaywgSklUVHlwZSBqaXRUeXBlKQorICAgIDogSklUQ29kZVdpdGhDb2Rl
UmVmKHJlZiwgaml0VHlwZSkKKyAgICAsIG1fd2l0aEFyaXR5Q2hlY2sod2l0aEFyaXR5Q2hlY2sp
Cit7Cit9CisKK0RpcmVjdEpJVENvZGU6On5EaXJlY3RKSVRDb2RlKCkKK3sKK30KKwordm9pZCBE
aXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZihKSVRDb2RlOjpDb2RlUmVmIHJlZiwgSklU
Q29kZTo6Q29kZVB0ciB3aXRoQXJpdHlDaGVjaykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9y
ZWYpOworICAgIG1fcmVmID0gcmVmOworICAgIG1fd2l0aEFyaXR5Q2hlY2sgPSB3aXRoQXJpdHlD
aGVjazsKK30KKworRGlyZWN0SklUQ29kZTo6UmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVycyog
RGlyZWN0SklUQ29kZTo6ZW5zdXJlV3JhcHBlcnMoKQoreworICAgIGlmICghbV93cmFwcGVycykK
KyAgICAgICAgbV93cmFwcGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVnaXN0ZXJQcmVzZXJ2YXRp
b25XcmFwcGVycz4oKTsKKyAgICByZXR1cm4gbV93cmFwcGVycy5nZXQoKTsKK30KKworSklUQ29k
ZTo6Q29kZVB0ciBEaXJlY3RKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbCgKKyAgICBWTSYgdm0sIEFy
aXR5Q2hlY2tNb2RlIGFyaXR5LCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQor
eworICAgIHN3aXRjaCAoYXJpdHkpIHsKKyAgICBjYXNlIEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDoK
KyAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdpc3RlclByZXNl
cnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOwor
ICAgICAgICAgICAgcmV0dXJuIG1fcmVmLmNvZGUoKTsKKyAgICAgICAgY2FzZSBNdXN0UHJlc2Vy
dmVSZWdpc3RlcnM6IHsKKyAgICAgICAgICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlcnMq
IHdyYXBwZXJzID0gZW5zdXJlV3JhcHBlcnMoKTsKKyAgICAgICAgICAgIGlmICghd3JhcHBlcnMt
PndpdGhvdXRBcml0eUNoZWNrKQorICAgICAgICAgICAgICAgIHdyYXBwZXJzLT53aXRob3V0QXJp
dHlDaGVjayA9IGdlbmVyYXRlV3JhcHBlcih2bSwgbV9yZWYuY29kZSgpKTsKKyAgICAgICAgICAg
IHJldHVybiB3cmFwcGVycy0+d2l0aG91dEFyaXR5Q2hlY2suY29kZSgpOworICAgICAgICB9IH0K
KyAgICBjYXNlIE11c3RDaGVja0FyaXR5OgorICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgewor
ICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX3dpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgICAgIHJldHVybiBt
X3dpdGhBcml0eUNoZWNrOworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczogewor
ICAgICAgICAgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVycyogd3JhcHBlcnMgPSBlbnN1
cmVXcmFwcGVycygpOworICAgICAgICAgICAgaWYgKCF3cmFwcGVycy0+d2l0aEFyaXR5Q2hlY2sp
CisgICAgICAgICAgICAgICAgd3JhcHBlcnMtPndpdGhBcml0eUNoZWNrID0gZ2VuZXJhdGVXcmFw
cGVyKHZtLCBtX3dpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgICAgIHJldHVybiB3cmFwcGVycy0+
d2l0aEFyaXR5Q2hlY2suY29kZSgpOworICAgICAgICB9IH0KKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQ29kZVB0cigpOworfQorCitOYXRpdmVK
SVRDb2RlOjpOYXRpdmVKSVRDb2RlKEpJVFR5cGUgaml0VHlwZSkKKyAgICA6IEpJVENvZGVXaXRo
Q29kZVJlZihqaXRUeXBlKQoreworfQorCitOYXRpdmVKSVRDb2RlOjpOYXRpdmVKSVRDb2RlKENv
ZGVSZWYgcmVmLCBKSVRUeXBlIGppdFR5cGUpCisgICAgOiBKSVRDb2RlV2l0aENvZGVSZWYocmVm
LCBqaXRUeXBlKQoreworfQorCitOYXRpdmVKSVRDb2RlOjp+TmF0aXZlSklUQ29kZSgpCit7Cit9
CisKK3ZvaWQgTmF0aXZlSklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWYoQ29kZVJlZiByZWYpCit7
CisgICAgQVNTRVJUKCFtX3JlZik7CisgICAgbV9yZWYgPSByZWY7Cit9CisKK0pJVENvZGU6OkNv
ZGVQdHIgTmF0aXZlSklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoVk0mLCBBcml0eUNoZWNrTW9kZSwg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCEhbV9yZWYp
OworICAgIHJldHVybiBtX3JlZi5jb2RlKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBu
YW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZp
c2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDE0IEBACiAjaWZuZGVmIEpJVENvZGVfaAogI2RlZmlu
ZSBKSVRDb2RlX2gKIAotI2lmIEVOQUJMRShKSVQpIHx8IEVOQUJMRShMTElOVCkKKyNpbmNsdWRl
ICJBcml0eUNoZWNrTW9kZS5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkRp
c2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkpJVFN0dWJzLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1
ZS5oIgogI2luY2x1ZGUgIkxlZ2FjeVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmgiCi0jZW5kaWYKKyNpbmNsdWRlICJSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTE2NCw3ICsxNjQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBqaXRDb2RlLT5qaXRUeXBlKCk7CiAgICAgfQogICAgIAotICAgIHZpcnR1YWwg
Q29kZVB0ciBhZGRyZXNzRm9yQ2FsbCgpID0gMDsKKyAgICB2aXJ0dWFsIENvZGVQdHIgYWRkcmVz
c0ZvckNhbGwoVk0mLCBBcml0eUNoZWNrTW9kZSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkKiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBv
ZmZzZXQpID0gMDsKICAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcygpIHsgcmV0dXJuIGV4ZWN1
dGFibGVBZGRyZXNzQXRPZmZzZXQoMCk7IH0KICAgICB2aXJ0dWFsIHZvaWQqIGRhdGFBZGRyZXNz
QXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgPSAwOwpAQCAtMTg5LDIxICsxODksNTggQEAgcHJpdmF0
ZToKICAgICBKSVRUeXBlIG1faml0VHlwZTsKIH07CiAKLWNsYXNzIERpcmVjdEpJVENvZGUgOiBw
dWJsaWMgSklUQ29kZSB7CitjbGFzcyBKSVRDb2RlV2l0aENvZGVSZWYgOiBwdWJsaWMgSklUQ29k
ZSB7Citwcm90ZWN0ZWQ6CisgICAgSklUQ29kZVdpdGhDb2RlUmVmKEpJVFR5cGUpOworICAgIEpJ
VENvZGVXaXRoQ29kZVJlZihDb2RlUmVmLCBKSVRUeXBlKTsKKwogcHVibGljOgotICAgIERpcmVj
dEpJVENvZGUoSklUVHlwZSk7Ci0gICAgRGlyZWN0SklUQ29kZShjb25zdCBDb2RlUmVmLCBKSVRU
eXBlKTsKLSAgICB2aXJ0dWFsIH5EaXJlY3RKSVRDb2RlKCk7Ci0gICAgCi0gICAgdm9pZCBpbml0
aWFsaXplQ29kZVJlZihDb2RlUmVmIHJlZik7CisgICAgdmlydHVhbCB+SklUQ29kZVdpdGhDb2Rl
UmVmKCk7CiAKLSAgICB2aXJ0dWFsIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoKSBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNl
dCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkKiBkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVf
dCBvZmZzZXQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdW5zaWduZWQgb2Zmc2V0T2Yodm9pZCog
cG9pbnRlckludG9Db2RlKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHNpemVfdCBzaXplKCkgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCBib29sIGNvbnRhaW5zKHZvaWQqKSBPVkVSUklERTsKIAorcHJv
dGVjdGVkOgorICAgIENvZGVSZWYgbV9yZWY7Cit9OworCitjbGFzcyBEaXJlY3RKSVRDb2RlIDog
cHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7CitwdWJsaWM6CisgICAgRGlyZWN0SklUQ29kZShK
SVRUeXBlKTsKKyAgICBEaXJlY3RKSVRDb2RlKENvZGVSZWYsIENvZGVQdHIgd2l0aEFyaXR5Q2hl
Y2ssIEpJVFR5cGUpOworICAgIHZpcnR1YWwgfkRpcmVjdEpJVENvZGUoKTsKKyAgICAKKyAgICB2
b2lkIGluaXRpYWxpemVDb2RlUmVmKENvZGVSZWYgcmVmLCBDb2RlUHRyIHdpdGhBcml0eUNoZWNr
KTsKKworICAgIHZpcnR1YWwgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbChWTSYsIEFyaXR5Q2hlY2tN
b2RlLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpIE9WRVJSSURFOworCitwcml2YXRlOgorICAg
IHN0cnVjdCBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJzIHsKKyAgICAgICAgQ29kZVJlZiB3
aXRob3V0QXJpdHlDaGVjazsKKyAgICAgICAgQ29kZVJlZiB3aXRoQXJpdHlDaGVjazsKKyAgICB9
OworCisgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVycyogZW5zdXJlV3JhcHBlcnMoKTsK
KyAgICAKKyAgICBDb2RlUmVmIG1fcmVmOworICAgIENvZGVQdHIgbV93aXRoQXJpdHlDaGVjazsK
KyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVycz4g
bV93cmFwcGVyczsKK307CisKK2NsYXNzIE5hdGl2ZUpJVENvZGUgOiBwdWJsaWMgSklUQ29kZVdp
dGhDb2RlUmVmIHsKK3B1YmxpYzoKKyAgICBOYXRpdmVKSVRDb2RlKEpJVFR5cGUpOworICAgIE5h
dGl2ZUpJVENvZGUoQ29kZVJlZiwgSklUVHlwZSk7CisgICAgdmlydHVhbCB+TmF0aXZlSklUQ29k
ZSgpOworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGVSZWYoQ29kZVJlZiByZWYpOworCisg
ICAgdmlydHVhbCBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKFZNJiwgQXJpdHlDaGVja01vZGUsIFJl
Z2lzdGVyUHJlc2VydmF0aW9uTW9kZSkgT1ZFUlJJREU7CisKIHByaXZhdGU6CiAgICAgQ29kZVJl
ZiBtX3JlZjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4NSw3ICs2ODUsOCBAQCBzdGF0
aWMgdm9pZCogaGFuZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBlCiAgICAgcmV0dXJuIHZtLT5nZXRD
VElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCk7CiB9CiAKLWlubGluZSBjaGFyKiBsaW5rRm9yKEV4ZWNTdGF0ZSog
ZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoraW5saW5lIGNoYXIqIGxp
bmtGb3IoCisgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgRXhlY1N0
YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKQEAgLTcwMyw5ICs3MDQsOSBAQCBpbmxpbmUgY2hhciogbGlua0ZvcihFeGVjU3Rh
dGUqIGV4ZWNDYWxsCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7CiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSAwOwogICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0g
ZXhlYy0+Y29kZUJsb2NrKCktPmdldENhbGxMaW5rSW5mbyhleGVjQ2FsbGVlLT5yZXR1cm5QQygp
KTsKLSAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZVB0
ciA9IGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxs
KCk7Ci0gICAgZWxzZSB7CisgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsK
KyAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3IoKnZtLCBraW5kLCBN
dXN0Q2hlY2tBcml0eSwgcmVnaXN0ZXJzKTsKKyAgICB9IGVsc2UgewogICAgICAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlv
bkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwgY2FsbGVlLT5zY29w
ZSgpLCBraW5kKTsKICAgICAgICAgaWYgKGVycm9yKSB7CkBAIC03MTMsMjkgKzcxNCw0MyBAQCBp
bmxpbmUgY2hhciogbGlua0ZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsCiAgICAgICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAg
ICAgICAgIH0KICAgICAgICAgY29kZUJsb2NrID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5jb2RlQmxv
Y2tGb3Ioa2luZCk7CisgICAgICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5OwogICAgICAgICBpZiAo
ZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNp
emVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby5jYWxsVHlw
ZSA9PSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzKQotICAgICAgICAgICAgY29kZVB0ciA9IGZ1
bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQp
OworICAgICAgICAgICAgYXJpdHkgPSBNdXN0Q2hlY2tBcml0eTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZv
cihraW5kKS0+YWRkcmVzc0ZvckNhbGwoKTsKKyAgICAgICAgICAgIGFyaXR5ID0gQXJpdHlDaGVj
a05vdFJlcXVpcmVkOworICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRy
eXBvaW50Rm9yKCp2bSwga2luZCwgYXJpdHksIHJlZ2lzdGVycyk7CiAgICAgfQogICAgIGlmICgh
Y2FsbExpbmtJbmZvLnNlZW5PbmNlKCkpCiAgICAgICAgIGNhbGxMaW5rSW5mby5zZXRTZWVuKCk7
CiAgICAgZWxzZQotICAgICAgICBsaW5rRm9yKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY29k
ZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIsIGtpbmQpOworICAgICAgICBsaW5rRm9yKGV4ZWNDYWxs
ZWUsIGNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIsIGtpbmQsIHJlZ2lz
dGVycyk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvZGVQdHIuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nh
bGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQogewotICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxs
ZWUsIENvZGVGb3JDYWxsKTsKKyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9y
Q2FsbCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiB9CiAKIGNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCiB7
Ci0gICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCk7CisgICAg
cmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCwgUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25Ob3RSZXF1aXJlZCk7Cit9CisKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TGlua0NhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7CisgICAg
cmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIE11c3RQcmVzZXJ2ZVJlZ2lz
dGVycyk7CiB9CiAKLWlubGluZSBjaGFyKiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU0NlbGwqJiBjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0
cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAgICByZXR1
cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0LCBNdXN0UHJlc2VydmVSZWdp
c3RlcnMpOworfQorCitpbmxpbmUgY2hhciogdmlydHVhbEZvcldpdGhGdW5jdGlvbigKKyAgICBF
eGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycywKKyAgICBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0
aW9uQ2VsbCkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFt
ZSgpOwogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpAQCAtNzU3LDE2ICs3NzIsMjAgQEAgaW5s
aW5lIGNoYXIqIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oRXhlYwogICAgICAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAg
ICAgICB9CiAgICAgfQotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihleGVjdXRh
YmxlLT5nZW5lcmF0ZWRKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGV4ZWN1dGFibGUt
PmVudHJ5cG9pbnRGb3IoCisgICAgICAgICp2bSwga2luZCwgTXVzdENoZWNrQXJpdHksIHJlZ2lz
dGVycykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiB9CiAKLWlubGluZSBjaGFyKiB2aXJ0dWFsRm9y
KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoraW5s
aW5lIGNoYXIqIHZpcnR1YWxGb3IoCisgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMp
CiB7CiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQ7Ci0gICAgcmV0dXJu
IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwga2luZCwgY2FsbGVlQXNGdW5jdGlv
bkNlbGxJZ25vcmVkKTsKKyAgICByZXR1cm4gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2Fs
bGVlLCBraW5kLCByZWdpc3RlcnMsIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZCk7CiB9CiAK
LXN0YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVj
Q2FsbGVlLCBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbykKK3N0YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoCisgICAg
RXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJz
LCBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsLAorICAgIENhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvKQogewogICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTc4MCw3ICs3OTksOSBAQCBzdGF0aWMgYm9vbCBhdHRlbXB0VG9PcHRpbWl6
ZUNsb3N1cmVDYWxsCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBBU1NFUlQoY2Fs
bGVlLT5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOwotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBjb2RlUHRyID0gY2FsbGVlLT5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENv
ZGVGb3JDYWxsKCktPmFkZHJlc3NGb3JDYWxsKCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGNvZGVQdHIgPQorICAgICAgICBjYWxsZWUtPmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29k
ZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoCisgICAgICAgICAgICAqZXhlY0NhbGxlZS0+Y2Fs
bGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPnZtKCksIEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCwgcmVn
aXN0ZXJzKTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKICAgICBpZiAoY2FsbGVl
LT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpCkBAIC03OTMsNyArODE0LDcgQEAgc3Rh
dGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbAogICAgIAogICAgIGxpbmtDbG9z
dXJlQ2FsbCgKICAgICAgICAgZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssCi0g
ICAgICAgIGNhbGxlZS0+c3RydWN0dXJlKCksIGNhbGxlZS0+ZXhlY3V0YWJsZSgpLCBjb2RlUHRy
KTsKKyAgICAgICAgY2FsbGVlLT5zdHJ1Y3R1cmUoKSwgY2FsbGVlLT5leGVjdXRhYmxlKCksIGNv
ZGVQdHIsIHJlZ2lzdGVycyk7CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC04MDEsMjUg
KzgyMiw0NiBAQCBzdGF0aWMgYm9vbCBhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsCiBjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWND
YWxsZWUpCiB7CiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbDsKLSAgICBjaGFyKiBy
ZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBj
YWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CisgICAgY2hhciogcmVzdWx0ID0gdmlydHVhbEZvcldpdGhG
dW5jdGlvbihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RS
ZXF1aXJlZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwogICAgIENhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPmdldENhbGxM
aW5rSW5mbyhleGVjQ2FsbGVlLT5yZXR1cm5QQygpKTsKIAotICAgIGlmICghYXR0ZW1wdFRvT3B0
aW1pemVDbG9zdXJlQ2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwgY2FsbExp
bmtJbmZvKSkKLSAgICAgICAgbGlua1Nsb3dGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBD
b2RlRm9yQ2FsbCk7CisgICAgaWYgKCFhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKGV4ZWND
YWxsZWUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQsIGNhbGxlZUFzRnVuY3Rpb25D
ZWxsLCBjYWxsTGlua0luZm8pKQorICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVlLCBjYWxs
TGlua0luZm8sIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsK
ICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKIHsgICAgCi0gICAgcmV0dXJu
IHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwpOworICAgIHJldHVybiB2aXJ0dWFs
Rm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVp
cmVkKTsKIH0KIAogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0
KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKIHsKLSAgICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2Fs
bGVlLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVl
LCBDb2RlRm9yQ29uc3RydWN0LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKIH0K
IAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2Vy
dmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7CisgICAgSlNDZWxsKiBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbDsKKyAgICBjaGFyKiByZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4
ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMsIGNhbGxlZUFzRnVu
Y3Rpb25DZWxsKTsKKyAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWNDYWxsZWUt
PmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oZXhlY0NhbGxlZS0+
cmV0dXJuUEMoKSk7CisKKyAgICBpZiAoIWF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoZXhl
Y0NhbGxlZSwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwgY2Fs
bExpbmtJbmZvKSkKKyAgICAgICAgbGlua1Nsb3dGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZv
LCBDb2RlRm9yQ2FsbCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKKyAgICAKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsVGhh
dFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQoreyAgICAKKyAgICByZXR1cm4g
dmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJz
KTsKK30KKworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0VGhh
dFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQoreworICAgIHJldHVybiB2aXJ0
dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVy
cyk7Cit9CiAKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMikKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCShyZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDExICsyMTMsMTcgQEAgdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5Vgogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEV2YWwoRXhlY1N0YXRlKikgV1RGX0lO
VEVSTkFMOwotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3Rh
dGUqKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxs
KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KEV4ZWNTdGF0ZSopIFdU
Rl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdChF
eGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxp
bmtDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVncyhF
eGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZp
cnR1YWxDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0VGhhdFByZXNlcnZlc1Jl
Z3MoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25MaW5rQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFM
OworCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKIHNpemVfdCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiBzaXplX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKQEAgLTI3OSw2ICsyODUsNjggQEAgdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dFRvU2NvcGUoRQogCiB9IC8vIGV4dGVybiAiQyIKIAoraW5s
aW5lIFBfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uTGlua0ZvcigKKyAgICBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCit7Cisg
ICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgc3dpdGNo
IChyZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVp
cmVkOgorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkxpbmtDYWxsOworICAgICAgICBjYXNl
IE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5r
Q2FsbFRoYXRQcmVzZXJ2ZXNSZWdzOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAg
ICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3Q7CisgICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVn
aXN0ZXJzOgorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3RUaGF0UHJl
c2VydmVzUmVnczsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworaW5saW5lIFBfSklU
T3BlcmF0aW9uX0Ugb3BlcmF0aW9uVmlydHVhbEZvcigKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCit7CisgICAgc3dp
dGNoIChraW5kKSB7CisgICAgY2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgc3dpdGNoIChyZWdp
c3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgor
ICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblZpcnR1YWxDYWxsOworICAgICAgICBjYXNlIE11
c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25WaXJ0dWFs
Q2FsbFRoYXRQcmVzZXJ2ZXNSZWdzOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAg
ICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3Q7CisgICAgICAgIGNhc2UgTXVzdFByZXNlcnZl
UmVnaXN0ZXJzOgorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3RU
aGF0UHJlc2VydmVzUmVnczsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworaW5saW5l
IFBfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsRm9yKFJlZ2lzdGVyUHJl
c2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCit7CisgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAg
ICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgIHJldHVybiBv
cGVyYXRpb25MaW5rQ2xvc3VyZUNhbGw7CisgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6
CisgICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVn
czsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
MDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJH
ZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVn
aXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmgiCisKKyNpZiBFTkFC
TEUoSklUKQorCisjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiTGlua0J1
ZmZlci5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJhdGVXcmFwcGVyKFZNJiB2bSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIHRhcmdldCkKK3sKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKyAgICBSZWdpc3Rl
clNldCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Cisg
ICAgCisgICAgLy8gTm8gbmVlZCB0byBwcmVzZXJ2ZSBGUCBzaW5jZSB0aGF0IGFsd2F5cyBnZXRz
IHByZXNlcnZlZCBhbnl3YXkuCisgICAgY2FsbGVlU2F2ZXMuY2xlYXIoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpOworICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mQ2FsbGVlU2F2ZXMgPSBj
YWxsZWVTYXZlcy5udW1iZXJPZlNldFJlZ2lzdGVycygpOworICAgIAorICAgIC8vIE5lZWQgdG8g
cHJlc2VydmUgdGhlIG9sZCByZXR1cm4gUEMuCisgICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXNU
b1NhdmUgPSBudW1iZXJPZkNhbGxlZVNhdmVzICsgMTsKKyAgICAKKyAgICAvLyBBbGlnbm1lbnQu
IFByZXNlcnZlIHRoZSBzYW1lIGFsaWdubWVudCBpbnZhcmlhbnRzIHRoYXQgdGhlIGNhbGxlciBp
bXBvc2VkLgorICAgIHVuc2lnbmVkIG51bWJlck9mTmV3U3RhY2tTbG90cyA9CisgICAgICAgIFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBudW1iZXJP
ZlZhbHVlc1RvU2F2ZSk7CisgICAgCisgICAgQXNzZW1ibHlIZWxwZXJzIGppdCgmdm0sIDApOwor
ICAgIAorICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6cmVn
VDEpOworICAgIGppdC5sb2FkMzIoCisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcygK
KyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsCisgICAg
ICAgICAgICAoSlNTdGFjazo6QXJndW1lbnRDb3VudCAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5k
UENTaXplKSAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSwKKyAgICAgICAgR1BS
SW5mbzo6cmVnVDIpOworICAgIAorICAgIC8vIFBsYWNlIHRoZSBzdGFjayBwb2ludGVyIHdoZXJl
IHdlIHdhbnQgaXQgdG8gYmUuCisgICAgc2l6ZV90IG9mZnNldCA9IHNpemVvZihSZWdpc3Rlcikg
KiBudW1iZXJPZk5ld1N0YWNrU2xvdHM7CisgICAgaml0LnN1YlB0cihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihvZmZzZXQpLCBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICAKKyAgICAvLyBDb21wdXRlIHRoZSBudW1iZXIgb2YgdGhpbmdzIHdlIHdpbGwg
YmUgY29weWluZy4KKyAgICBqaXQuYWRkMzIoCisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTMyKAorICAgICAgICAgICAgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIEpT
U3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDIpOwor
CisgICAgQVNTRVJUKCFjYWxsZWVTYXZlcy5nZXQoR1BSSW5mbzo6cmVnVDQpKTsKKyAgICBqaXQu
bW92ZShBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdU
NCk7CisgICAgCisgICAgQXNzZW1ibHlIZWxwZXJzOjpMYWJlbCBsb29wID0gaml0LmxhYmVsKCk7
CisgICAgaml0LnN1YjMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZv
OjpyZWdUMik7CisgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6cmVnVDQsIG9mZnNldCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBqaXQuc3RvcmU2NChHUFJJ
bmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDQpOworICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpyZWdUNCk7Cisg
ICAgaml0LmJyYW5jaFRlc3QzMihBc3NlbWJseUhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJl
Z1QyKS5saW5rVG8obG9vcCwgJmppdCk7CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IHJlZ1Q0ICsg
b2Zmc2V0IHBvaW50cyB0byB3aGVyZSB3ZSBzYXZlIHRoaW5ncy4KKyAgICBzaXplX3QgY3VycmVu
dE9mZnNldCA9IG9mZnNldDsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDEsIEFzc2Vt
Ymx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUNCwgY3VycmVudE9mZnNldCkpOworICAg
IAorICAgIGZvciAoR1BSUmVnIGdwciA9IEFzc2VtYmx5SGVscGVyczo6Zmlyc3RSZWdpc3Rlcigp
OyBncHIgPD0gQXNzZW1ibHlIZWxwZXJzOjpsYXN0UmVnaXN0ZXIoKTsgZ3ByID0gc3RhdGljX2Nh
c3Q8R1BSUmVnPihncHIgKyAxKSkgeworICAgICAgICBpZiAoIWNhbGxlZVNhdmVzLmdldChncHIp
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gc2l6ZW9m
KFJlZ2lzdGVyKTsKKyAgICAgICAgaml0LnN0b3JlNjQoZ3ByLCBBc3NlbWJseUhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDQsIG9mZnNldCkpOworICAgIH0KKyAgICAKKyAgICAvLyBBc3N1
bWUgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IHNhdmVkIEZQIHJlZ2lzdGVycy4KKworICAgIEFzc2Vt
Ymx5SGVscGVyczo6Q2FsbCBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgCisgICAgLy8gV2Ug
bmVlZCB0byBwbGFjZSB0aGUgc3RhY2sgcG9pbnRlciBiYWNrIHRvIHdoZXJlIHRoZSBjYWxsZXIg
dGhvdWdodCB0aGV5IGxlZnQgaXQuCisgICAgLy8gQnV0IGFsc28sIGluIG9yZGVyIHRvIHJlY292
ZXIgdGhlIHJlZ2lzdGVycywgd2UgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBiaWcgdGhlCisgICAg
Ly8gYXJndW1lbnRzIGFyZWEgaXMuCisgICAgCisgICAgaml0LmxvYWQzMigKKyAgICAgICAgQXNz
ZW1ibHlIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzdGFj
a1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAgICAgIChKU1N0YWNrOjpBcmd1bWVudENvdW50IC0g
SlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxv
YWRPZmZzZXQpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmxzaGlmdDMyKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDMpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgCisg
ICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihvZmZzZXQpLCBBc3Nl
bWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBqaXQuYWRkUHRyKEFzc2Vt
Ymx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAK
KyAgICAvLyByZWdUMiBub3cgcG9pbnRzIHRvIChKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXpl
IC0gSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpCisgICAgLy8gc2hvcnQgb2Ygd2hlcmUg
dGhpbmdzIGFyZSBzYXZlZC4KKyAgICBjdXJyZW50T2Zmc2V0ID0gSlNTdGFjazo6Q2FsbEZyYW1l
SGVhZGVyU2l6ZSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplOworICAgIGppdC5sb2Fk
UHRyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgY3VycmVudE9mZnNl
dCksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAKKyAgICBmb3IgKEdQUlJlZyBncHIgPSBBc3NlbWJs
eUhlbHBlcnM6OmZpcnN0UmVnaXN0ZXIoKTsgZ3ByIDw9IEFzc2VtYmx5SGVscGVyczo6bGFzdFJl
Z2lzdGVyKCk7IGdwciA9IHN0YXRpY19jYXN0PEdQUlJlZz4oZ3ByICsgMSkpIHsKKyAgICAgICAg
aWYgKCFjYWxsZWVTYXZlcy5nZXQoZ3ByKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBjdXJyZW50T2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgIGppdC5sb2FkNjQo
QXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1Q0LCBvZmZzZXQpLCBncHIpOwor
ICAgIH0KKyAgICAKKyAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMSk7CisgICAgCisgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKHZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQpKTsKKyAgICAKKyAgICBy
ZXR1cm4gRklOQUxJWkVfREZHX0NPREUobGlua0J1ZmZlciwgKCJSZWdpc3RlciBwcmVzZXJ2YXRp
b24gd3JhcHBlciBmb3IgJXAiLCB0YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworI2Vsc2Ug
Ly8gRU5BQkxFKEZUTF9KSVQpCisgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBub24tRlRMIGJ1aWxk
cyBmb3IgdHdvIHJlYXNvbnM6CisgICAgLy8gLSBJdCBqdXN0IHNvIGhhcHBlbnMgdGhhdCBjdXJy
ZW50bHkgb25seSB0aGUgRlRMIGJvdHRvbXMgb3V0IGluIHRoaXMgY29kZS4KKyAgICAvLyAtIFRo
ZSBjb2RlIGFib3ZlIHVzZXMgNjQtYml0IGluc3RydWN0aW9ucy4gSXQgZG9lc24ndCBuZWNlc3Nh
cmlseSBoYXZlIHRvOyBpdCB3b3VsZCBiZQorICAgIC8vICAgZWFzeSB0byBjaGFuZ2UgaXQgc28g
dGhhdCBpdCBkb2Vzbid0LiBCdXQgb2J2aW91c2x5IG1ha2luZyB0aGF0IGNoYW5nZSB3b3VsZCBi
ZSBhCisgICAgLy8gICBwcmVyZXF1aXNpdGUgdG8gcmVtb3ZpbmcgdGhpcyAjaWYuCisgICAgVU5S
RUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyUHJl
c2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2Vu
ZXJhdG9yX2gKKyNkZWZpbmUgUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yX2gK
KworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIK
KyNpbmNsdWRlICJWTS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGdlbmVyYXRlV3JhcHBlcihWTSYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpOwor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAv
LyBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3JfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE2MDYyMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzAsMTcg
KzEyNzAsMTkgQEAgdm9pZCByZXBhdGNoSW4oCiAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29kZUJs
b2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uSW4pOwogfQogCi1z
dGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBWTSog
dm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCi17Ci0gICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0
dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJ
U3R1Yih2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CitzdGF0aWMgdm9p
ZCBsaW5rU2xvd0ZvcigKKyAgICBSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBWTSogdm0s
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLAorICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sKKyAgICByZXBhdGNo
QnVmZmVyLnJlbGluaygKKyAgICAgICAgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwK
KyAgICAgICAgdm0tPmdldENUSVN0dWIodmlydHVhbFRodW5rR2VuZXJhdG9yRm9yKGtpbmQsIHJl
Z2lzdGVycykpLmNvZGUoKSk7CiB9CiAKLXZvaWQgbGlua0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgSlNG
dW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kKQordm9pZCBsaW5rRm9yKAorICAgIEV4ZWNTdGF0ZSogZXhlYywg
Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLAor
ICAgIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwKKyAgICBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUg
cmVnaXN0ZXJzKQogewogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIpOwogICAgIApAQCAt
MTMwMiwyNSArMTMwNCwzMCBAQCB2b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlu
a0luCiAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChleGVjLT5jYWxs
ZXJGcmFtZSgpLCAmY2FsbExpbmtJbmZvKTsKICAgICAKICAgICBpZiAoa2luZCA9PSBDb2RlRm9y
Q2FsbCkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRv
cikuY29kZSgpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5l
cmF0b3JGb3IocmVnaXN0ZXJzKSkuY29kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICBsaW5rU2xvd0Zv
cihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAg
ICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ29u
c3RydWN0LCByZWdpc3RlcnMpOwogfQogCi12b2lkIGxpbmtTbG93Rm9yKEV4ZWNTdGF0ZSogZXhl
YywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKK3ZvaWQgbGlua1Nsb3dGb3IoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLAorICAgIFJlZ2lzdGVy
UHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2Rl
QmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKICAgICBWTSogdm0gPSBj
YWxsZXJDb2RlQmxvY2stPnZtKCk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKGNhbGxlckNvZGVCbG9jayk7CiAgICAgCi0gICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZl
ciwgdm0sIGNhbGxMaW5rSW5mbywga2luZCk7CisgICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZl
ciwgdm0sIGNhbGxMaW5rSW5mbywga2luZCwgcmVnaXN0ZXJzKTsKIH0KIAotdm9pZCBsaW5rQ2xv
c3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29k
ZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFeGVjdXRhYmxl
QmFzZSogZXhlY3V0YWJsZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCit2b2lkIGxp
bmtDbG9zdXJlQ2FsbCgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExp
bmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBj
b2RlUHRyLAorICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAg
QVNTRVJUKCFjYWxsTGlua0luZm8uc3R1Yik7CiAgICAgCkBAIC0xMzgwLDE4ICsxMzg3LDE4IEBA
IHZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSogZXhlYywgQ2EKICNpZiBVU0UoSlNWQUxV
RTMyXzY0KQogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOwogI2VuZGlmCi0gICAgc3R1YkppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICBzdHVi
Sml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1QyKTsKICAgICAK
ICAgICAvLyBGSVhNRTogQ1N0YWNrIC0gVGhpbmsgdGhlIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVm
b3JlUmV0dXJuKCkgaW5zdHJ1Y3Rpb24gc2hvdWxkIGJlIGEgcG9rZQogICAgIHN0dWJKaXQuYnJl
YWtwb2ludCgpOwotICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4o
R1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0Jl
Zm9yZVJldHVybihHUFJJbmZvOjpyZWdUMik7CiAgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIHNs
b3cgPSBzdHViSml0Lmp1bXAoKTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2
bSwgJnN0dWJKaXQsIGNhbGxlckNvZGVCbG9jayk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhjYWxsLCBGdW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICBw
YXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldCgwKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25M
YWJlbCh2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKHZtLT5nZXRDVElT
dHViKHZpcnR1YWxUaHVua0dlbmVyYXRvckZvcihDb2RlRm9yQ2FsbCwgcmVnaXN0ZXJzKSkuY29k
ZSgpKSk7CiAgICAgCiAgICAgUmVmUHRyPENsb3N1cmVDYWxsU3R1YlJvdXRpbmU+IHN0dWJSb3V0
aW5lID0gYWRvcHRSZWYobmV3IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCiAgICAgICAgIEZJTkFM
SVpFX0RGR19DT0RFKApAQCAtMTQwNiw3ICsxNDEzLDcgQEAgdm9pZCBsaW5rQ2xvc3VyZUNhbGwo
RXhlY1N0YXRlKiBleGVjLCBDYQogICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhKdW1wKAog
ICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3Rl
cihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKSwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVm
ZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCk7CisgICAgbGlua1Nsb3dGb3IocmVw
YXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwsIHJlZ2lzdGVycyk7CiAg
ICAgCiAgICAgY2FsbExpbmtJbmZvLnN0dWIgPSBzdHViUm91dGluZS5yZWxlYXNlKCk7CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkocmV2aXNpb24gMTYwNjIyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDkgKzQxLDkgQEAgdm9pZCBidWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0YXRlKiwgSgog
dm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsK
IHZvaWQgYnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5k
KTsKIHZvaWQgcmVwYXRjaEluKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGNvbnN0IElkZW50aWZpZXIm
LCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYp
Owotdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpT
RnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kKTsKLXZvaWQgbGlua1Nsb3dGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCk7Ci12b2lkIGxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqLCBD
YWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmUqLCBFeGVjdXRhYmxlQmFzZSosIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cik7Cit2b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJ
bmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSk7Cit2
b2lkIGxpbmtTbG93Rm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSk7Cit2b2lkIGxpbmtDbG9zdXJlQ2Fs
bChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmUqLCBFeGVj
dXRhYmxlQmFzZSosIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25N
b2RlKTsKIHZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5m
byYpOwogdm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZv
Jik7CiB2b2lkIHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShy
ZXZpc2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJh
dG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgc3RhdGljIHZvaWQgc2xv
d1BhdGhGb3IoCiB9CiAKIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0ZvclRodW5r
R2VuZXJhdG9yKAotICAgIFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAg
IFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBSZWdpc3RlclByZXNlcnZhdGlv
bk1vZGUgcmVnaXN0ZXJzKQogewogICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUg
c3RhY2sgb3IgaW4gdGhlIGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKICAgICAvLyBzYXZl
IHRoZSByZXR1cm4gYWRkcmVzcyB0byB0aGUgY2FsbCBmcmFtZSB3aGlsZSB3ZSBtYWtlIGEgQysr
IGZ1bmN0aW9uIGNhbGwKQEAgLTEwOSwzOCArMTA5LDU5IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbGlua0ZvclRodW4KICAgICAKICAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKICAg
ICAKLSAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBraW5kID09IENvZGVGb3JDYWxsID8gb3BlcmF0
aW9uTGlua0NhbGwgOiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KTsKKyAgICBzbG93UGF0aEZvcihq
aXQsIHZtLCBvcGVyYXRpb25MaW5rRm9yKGtpbmQsIHJlZ2lzdGVycykpOwogICAgIAogICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJMaW5r
ICVzIHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyAiY2FsbCIgOiAiY29u
c3RydWN0IikpOworICAgICAgICAoIkxpbmsgJXMlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09
IENvZGVGb3JDYWxsID8gImNhbGwiIDogImNvbnN0cnVjdCIsIHJlZ2lzdGVycyA9PSBNdXN0UHJl
c2VydmVSZWdpc3RlcnMgPyAiIHRoYXQgcHJlc2VydmVzIHJlZ2lzdGVycyIgOiAiIikpOwogfQog
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7
Ci0gICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNhbGwpOworICAg
IHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsLCBSZWdpc3RlclBy
ZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtD
b25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIGxpbmtGb3JUaHVu
a0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJuIGxpbmtGb3JUaHVu
a0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RS
ZXF1aXJlZCk7CiB9CiAKLS8vIEZvciBjbG9zdXJlIG9wdGltaXphdGlvbnMsIHdlIG9ubHkgaW5j
bHVkZSBjYWxscywgc2luY2UgaWYgeW91J3JlIHVzaW5nIGNsb3N1cmVzIGZvcgotLy8gb2JqZWN0
IGNvbnN0cnVjdGlvbiB0aGVuIHlvdSdyZSBnb2luZyB0byBsb3NlIGJpZyB0aW1lIGFueXdheS4K
LU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcihWTSog
dm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5r
R2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKHZt
LCBDb2RlRm9yQ2FsbCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKK30KKworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKFZN
KiB2bSkKK3sKKyAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ29u
c3RydWN0LCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOworfQorCitzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbEZvclRodW5rR2VuZXJhdG9yKAorICAgIFZNKiB2bSwg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsKICAgICBDQ2FsbEhlbHBlcnMg
aml0KHZtKTsKICAgICAKLSAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2xv
c3VyZUNhbGwpOworICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtDbG9zdXJl
Q2FsbEZvcihyZWdpc3RlcnMpKTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2
bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgKCJMaW5rIGNsb3N1cmUgY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7CisgICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiTGluayBjbG9zdXJlIGNhbGwgJXMgc2xv
dyBwYXRoIHRodW5rIiwgcmVnaXN0ZXJzID09IE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyA/ICIgdGhh
dCBwcmVzZXJ2ZXMgcmVnaXN0ZXJzIiA6ICIiKSk7Cit9CisKKy8vIEZvciBjbG9zdXJlIG9wdGlt
aXphdGlvbnMsIHdlIG9ubHkgaW5jbHVkZSBjYWxscywgc2luY2UgaWYgeW91J3JlIHVzaW5nIGNs
b3N1cmVzIGZvcgorLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiB0aGVuIHlvdSdyZSBnb2luZyB0byBs
b3NlIGJpZyB0aW1lIGFueXdheS4KK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNh
bGxUaHVua0dlbmVyYXRvcihWTSogdm0pCit7CisgICAgcmV0dXJuIGxpbmtDbG9zdXJlQ2FsbEZv
clRodW5rR2VuZXJhdG9yKHZtLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKK30K
KworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdz
VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIHJldHVybiBsaW5rQ2xvc3VyZUNhbGxGb3JU
aHVua0dlbmVyYXRvcih2bSwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKIH0KIAogc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3IoCi0gICAgVk0qIHZt
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgVk0qIHZtLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAg
ICAgLy8gVGhlIGNhbGxlZSBpcyBpbiByZWdUMCAoZm9yIEpTVkFMVUUzMl82NCwgdGhlIHRhZyBp
cyBpbiByZWdUMSkuCiAgICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjaywg
b3IgaW4gdGhlIGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKQEAgLTE1NSwzMyArMTc2LDM0
IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZvclQKICAgICAvLyB0aGUg
REZHIGtub3dzIHRoYXQgdGhlIHZhbHVlIGlzIGRlZmluaXRlbHkgYSBjZWxsLCBvciBkZWZpbml0
ZWx5IGEgZnVuY3Rpb24uCiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChUYWdNYXNrKSwgR1BSSW5mbzo6cmVnVDIpOworICAg
IAogICAgIHNsb3dDYXNlLmFwcGVuZCgKICAgICAgICAgaml0LmJyYW5jaFRlc3Q2NCgKLSAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnRh
Z01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJ
bmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDIpKTsKICNlbHNlCiAgICAgc2xvd0Nhc2UuYXBwZW5k
KAogICAgICAgICBqaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLCBHUFJJbmZvOjpyZWdUMSwKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAjZW5kaWYKLSAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCBHUFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBHUFJJbmZv
OjpyZWdUMik7CiAgICAgc2xvd0Nhc2UuYXBwZW5kKAogICAgICAgICBqaXQuYnJhbmNoUHRyKAog
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIyLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09m
ZnNldCgpKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdU
MiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksCiAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvbjo6aW5mbygpKSkpOwogICAgIAogICAgIC8vIE5v
dyB3ZSBrbm93IHdlIGhhdmUgYSBKU0Z1bmN0aW9uLgogICAgIAogICAgIGppdC5sb2FkUHRyKAog
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTRnVuY3Rpb246
Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKLSAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMik7Ci0g
ICAgc2xvd0Nhc2UuYXBwZW5kKAotICAgICAgICBqaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okxlc3NUaGFuLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KAotICAgICAgICAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4ZWN1dGFibGVCYXNlOjpv
ZmZzZXRPZk51bVBhcmFtZXRlcnNGb3Ioa2luZCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5s
b2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJ
bmZvOjpyZWdUMiwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNr
Rm9yKGtpbmQsIHJlZ2lzdGVycykpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMik7CisgICAgc2xv
d0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6WmVybywgR1BSSW5m
bzo6cmVnVDIpKTsKICAgICAKICAgICAvLyBOb3cgd2Uga25vdyB0aGF0IHdlIGhhdmUgYSBDb2Rl
QmxvY2ssIGFuZCB3ZSdyZSBjb21taXR0ZWQgdG8gbWFraW5nIGEgZmFzdAogICAgIC8vIGNhbGwu
CkBAIC0yMTAsMzQgKzIzMiw0MCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1
YWxGb3JUCiAgICAgICAgICAgICBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnRhZykpKTsKICNlbmRpZgogICAgIAotICAgIGppdC5sb2FkUHRyKAotICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMiwgRXhlY3V0YWJsZUJh
c2U6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQpKSwKLSAgICAgICAgR1BS
SW5mbzo6cmVnVDApOwotICAgIAogICAgIC8vIE1ha2UgYSB0YWlsIGNhbGwuIFRoaXMgd2lsbCBy
ZXR1cm4gYmFjayB0byBKSVQgY29kZS4KLSAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBH
UFJJbmZvOjpyZWdUMCk7Ci0gICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDApOworICAgIGVtaXRQ
b2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuanVtcChHUFJJ
bmZvOjpyZWdUMik7CiAKICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwogICAgIAogICAgIC8vIEhl
cmUgd2UgZG9uJ3Qga25vdyBhbnl0aGluZywgc28gcmV2ZXJ0IHRvIHRoZSBmdWxsIHNsb3cgcGF0
aC4KICAgICAKLSAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBraW5kID09IENvZGVGb3JDYWxsID8g
b3BlcmF0aW9uVmlydHVhbENhbGwgOiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KTsKKyAgICBz
bG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25WaXJ0dWFsRm9yKGtpbmQsIHJlZ2lzdGVycykp
OwogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhV
TktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwK
LSAgICAgICAgKCJWaXJ0dWFsICVzIHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZvckNh
bGwgPyAiY2FsbCIgOiAiY29uc3RydWN0IikpOworICAgICAgICAoIlZpcnR1YWwgJXMlcyBzbG93
IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDogImNvbnN0cnVjdCIs
IHJlZ2lzdGVycyA9PSBNdXN0UHJlc2VydmVSZWdpc3RlcnMgPyAiIHRoYXQgcHJlc2VydmVzIHJl
Z2lzdGVycyIgOiAiIikpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxU
aHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVy
YXRvcih2bSwgQ29kZUZvckNhbGwpOworICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0
b3Iodm0sIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKIH0K
IAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihW
TSogdm0pCiB7Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZv
ckNvbnN0cnVjdCk7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29k
ZUZvckNvbnN0cnVjdCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7Cit9CisKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5l
cmF0b3IoVk0qIHZtKQoreworICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Iodm0s
IENvZGVGb3JDYWxsLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOworfQorCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3Io
Vk0qIHZtKQoreworICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVG
b3JDb25zdHJ1Y3QsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CiB9CiAKIGVudW0gVGh1bmtFbnRy
eVR5cGUgeyBFbnRlclZpYUNhbGwsIEVudGVyVmlhSnVtcCB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAxNjA2MjIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVmIFRodW5rR2VuZXJhdG9yc19oCiAjZGVmaW5lIFRo
dW5rR2VuZXJhdG9yc19oCiAKKyNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCisj
aW5jbHVkZSAiUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5l
cmF0b3IuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBAIC0zNSwxMSArMzcsNzggQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtD
b25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtD
YWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKFZNKik7
CisKK2lubGluZSBUaHVua0dlbmVyYXRvciBsaW5rVGh1bmtHZW5lcmF0b3JGb3IoCisgICAgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0
ZXJzKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAg
ICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRp
b25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgIHJldHVybiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
OworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAgIHJldHVy
biBsaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3I7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICBzd2l0Y2gg
KHJlZ2lzdGVycykgeworICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWly
ZWQ6CisgICAgICAgICAgICByZXR1cm4gbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yOworICAg
ICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAgIHJldHVybiBsaW5r
Q29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcjsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gMDsKK30KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRo
dW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxs
VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSopOworCitpbmxpbmUgVGh1bmtHZW5l
cmF0b3IgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3JGb3IoUmVnaXN0ZXJQcmVzZXJ2YXRp
b25Nb2RlIHJlZ2lzdGVycykKK3sKKyAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgIGNhc2Ug
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgcmV0dXJuIGxpbmtDbG9z
dXJlQ2FsbFRodW5rR2VuZXJhdG9yOworICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgor
ICAgICAgICByZXR1cm4gbGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVy
YXRvcjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gMDsKK30KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0
b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5l
cmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2
ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFs
Q29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSopOworCitpbmxpbmUg
VGh1bmtHZW5lcmF0b3IgdmlydHVhbFRodW5rR2VuZXJhdG9yRm9yKAorICAgIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sK
KyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICBzd2l0
Y2ggKHJlZ2lzdGVycykgeworICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVx
dWlyZWQ6CisgICAgICAgICAgICByZXR1cm4gdmlydHVhbENhbGxUaHVua0dlbmVyYXRvcjsKKyAg
ICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbENhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgc3dpdGNoIChy
ZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVk
OgorICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcjsKKyAg
ICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICByZXR1cm4gdmly
dHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3I7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIDA7Cit9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDYWxsR2Vu
ZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ29uc3RydWN0R2VuZXJh
dG9yKFZNKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBv
aW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRF
bnRyeXBvaW50LmNwcAkocmV2aXNpb24gMTYwNjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE0ICs0NSwx
MiBAQCBzdGF0aWMgdm9pZCBzZXRGdW5jdGlvbkVudHJ5cG9pbnQoVk0mIHZtCiAgICAgaWYgKHZt
LmNhblVzZUpJVCgpKSB7CiAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7CiAgICAg
ICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgICAgICAgICAgYWRvcHRSZWYo
bmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNhbGxFbnRyeVRodW5r
R2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAotICAgICAgICAgICAgICAg
IHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKS5j
b2RlKCkpOworICAgICAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdl
dENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsRW50cnlUaHVua0dlbmVyYXRvciksIHZtLmdldENUSVN0
dWIoZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKS5jb2RlKCksIEpJVENv
ZGU6OkludGVycHJldGVyVGh1bmspKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CiAgICAgICAgIGNvZGVC
bG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2Rl
KHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKSwg
SklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAotICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1Yihm
dW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKKyAg
ICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIoZnVuY3Rp
b25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKSwgdm0uZ2V0Q1RJU3R1YihmdW5jdGlv
bkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpLCBKSVRDb2RlOjpJ
bnRlcnByZXRlclRodW5rKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVO
QUJMRShKSVQpCkBAIC02MCwxNCArNTgsMTIgQEAgc3RhdGljIHZvaWQgc2V0RnVuY3Rpb25FbnRy
eXBvaW50KFZNJiB2bQogICAgIFVOVVNFRF9QQVJBTSh2bSk7CiAgICAgaWYgKGtpbmQgPT0gQ29k
ZUZvckNhbGwpIHsKICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICAgICAg
YWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVM
TEludENvZGVSZWYobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpLCBKSVRDb2RlOjpJ
bnRlcnByZXRlclRodW5rKSksCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNy
ZWF0ZUxMSW50Q29kZVB0cihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjaykpOwor
ICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUp
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9mdW5jdGlv
bl9mb3JfY2FsbF9hcml0eV9jaGVjayksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVj
dCk7CiAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9wdFJlZihuZXcgRGly
ZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGlu
dF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJU
aHVuaykpLAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0
cihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrKSk7CisgICAgICAgIGFk
b3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJ
bnRDb2RlUmVmKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUpLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9mdW5jdGlvbl9mb3JfY29u
c3RydWN0X2FyaXR5X2NoZWNrKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKIH0KIAog
c3RhdGljIHZvaWQgc2V0RXZhbEVudHJ5cG9pbnQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aykKQEAgLTc1LDE2ICs3MSwxNCBAQCBzdGF0aWMgdm9pZCBzZXRFdmFsRW50cnlwb2ludChWTSYg
dm0sIENvCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAodm0uY2FuVXNlSklUKCkpIHsKICAgICAg
ICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVj
dEpJVENvZGUodm0uZ2V0Q1RJU3R1YihldmFsRW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6
OkludGVycHJldGVyVGh1bmspKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigp
KTsKKyAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIo
ZXZhbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSwgSklUQ29k
ZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAv
LyBFTkFCTEUoSklUKQogCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKICAgICBjb2RlQmxvY2stPnNl
dEpJVENvZGUoCi0gICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2V2YWxfcHJvbG9ndWUpLCBKSVRD
b2RlOjpJbnRlcnByZXRlclRodW5rKSksCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigp
KTsKKyAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZXZhbF9wcm9sb2d1ZSksIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cigpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogfQogCiBzdGF0aWMg
dm9pZCBzZXRQcm9ncmFtRW50cnlwb2ludChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQpA
QCAtOTIsMTYgKzg2LDE0IEBAIHN0YXRpYyB2b2lkIHNldFByb2dyYW1FbnRyeXBvaW50KFZNJiB2
bSwKICNpZiBFTkFCTEUoSklUKQogICAgIGlmICh2bS5jYW5Vc2VKSVQoKSkgewogICAgICAgICBj
b2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklU
Q29kZSh2bS5nZXRDVElTdHViKHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6
SW50ZXJwcmV0ZXJUaHVuaykpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkp
OworICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1Yihw
cm9ncmFtRW50cnlUaHVua0dlbmVyYXRvciksIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLCBKSVRD
b2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCiAKICAgICBVTlVTRURfUEFSQU0odm0pOwogICAgIGNvZGVCbG9jay0+
c2V0SklUQ29kZSgKLSAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSks
IEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKCkpOworICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9wcm9ncmFtX3Byb2xvZ3VlKSwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiB9CiAK
IHZvaWQgc2V0RW50cnlwb2ludChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZp
c2lvbiAxNjA2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDAsNyArMzQwLDcgQEAgc3RhdGljIFNsb3dQYXRo
UmV0dXJuVHlwZSBlbnRyeU9TUihFeGVjUwogICAgIGlmIChraW5kID09IFByb2xvZ3VlKQogICAg
ICAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5leGVjdXRhYmxlQWRk
cmVzcygpLCBleGVjKTsKICAgICBBU1NFUlQoa2luZCA9PSBBcml0eUNoZWNrKTsKLSAgICBMTElO
VF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZVdpdGhBcml0eUNoZWNrKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwgZXhlYyk7CisgICAgTExJTlRfUkVUVVJOX1RXTyhjb2RlQmxvY2stPmppdENv
ZGUoKS0+YWRkcmVzc0ZvckNhbGwoKmNvZGVCbG9jay0+dm0oKSwgTXVzdENoZWNrQXJpdHksIFJl
Z2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpLmV4ZWN1dGFibGVBZGRyZXNzKCksIGV4ZWMp
OwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3IpCkBAIC0xMDQwLDcgKzEwNDAs
NyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjCiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAwOwog
ICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQotICAgICAgICBjb2RlUHRyID0g
ZXhlY3V0YWJsZS0+aG9zdENvZGVFbnRyeUZvcihraW5kKTsKKyAgICAgICAgY29kZVB0ciA9IGV4
ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Iodm0sIGtpbmQsIE11c3RDaGVja0FyaXR5LCBSZWdpc3Rl
clByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKICAgICBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25F
eGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihleGVjdXRhYmxlKTsKICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25F
eGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUsIGNhbGxlZS0+c2NvcGUo
KSwga2luZCk7CkBAIC0xMDQ4LDEwICsxMDQ4LDEyIEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5
cGUgc2V0VXBDYWxsKEV4ZWMKICAgICAgICAgICAgIExMSU5UX0NBTExfVEhST1coZXhlY0NhbGxl
ZS0+Y2FsbGVyRnJhbWUoKSwgZXJyb3IpOwogICAgICAgICBjb2RlQmxvY2sgPSBmdW5jdGlvbkV4
ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKTsKICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayk7
CisgICAgICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5OwogICAgICAgICBpZiAoZXhlY0NhbGxlZS0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCkpKQotICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+anNDb2RlV2l0aEFyaXR5Q2hlY2tFbnRyeUZvcihraW5kKTsKKyAgICAgICAgICAg
IGFyaXR5ID0gTXVzdENoZWNrQXJpdHk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvZGVQ
dHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmpzQ29kZUVudHJ5Rm9yKGtpbmQpOworICAgICAgICAg
ICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7CisgICAgICAgIGNvZGVQdHIgPSBmdW5j
dGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Iodm0sIGtpbmQsIGFyaXR5LCBSZWdpc3RlclBy
ZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFMTElOVF9BTFdB
WVNfQUNDRVNTX1NMT1cgJiYgY2FsbExpbmtJbmZvKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Bcml0eUNoZWNrTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyaXR5Q2hlY2tNb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcml0eUNoZWNrTW9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBBcml0eUNoZWNrTW9kZV9oCisjZGVmaW5lIEFyaXR5Q2hlY2tNb2Rl
X2gKKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gQXJpdHlDaGVja01vZGUgeworICAgIEFyaXR5
Q2hlY2tOb3RSZXF1aXJlZCwKKyAgICBNdXN0Q2hlY2tBcml0eQorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBBcml0eUNoZWNrTW9kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxNjA2MjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE4LDEyICsxMTgsMTQgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxs
Q29kZShDb2RlQgogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgQ29kZUZvckNhbGw6CiAg
ICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBnZW5lcmljQ29kZUJsb2NrLT5qaXRDb2RlKCk7Ci0g
ICAgICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IGdlbmVyaWNDb2RlQmxvY2st
PmppdENvZGVXaXRoQXJpdHlDaGVjaygpOworICAgICAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFy
aXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICAgICAgbV9qaXRDb2RlRm9y
Q2FsbFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdzID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
KCk7CiAgICAgICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBnZW5lcmljQ29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29kZUZvckNvbnN0cnVj
dDoKICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gZ2VuZXJpY0NvZGVCbG9jay0+aml0
Q29kZSgpOwotICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IGdl
bmVyaWNDb2RlQmxvY2stPmppdENvZGVXaXRoQXJpdHlDaGVjaygpOworICAgICAgICBtX2ppdENv
ZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwor
ICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVja0FuZFByZXNlcnZlUmVn
cyA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwogICAgICAgICBtX251bVBhcmFtZXRlcnNGb3JD
b25zdHJ1Y3QgPSBnZW5lcmljQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTEzMyw3ICsxMzUsNiBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omlu
c3RhbGxDb2RlKENvZGVCCiAgICAgICAgIFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0g
anNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyk7CiAgICAgICAgIFByb2dyYW1Db2RlQmxv
Y2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PFByb2dyYW1Db2RlQmxvY2sqPihnZW5lcmljQ29k
ZUJsb2NrKTsKICAgICAgICAgCi0gICAgICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlV2l0
aEFyaXR5Q2hlY2soKSk7CiAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKICAg
ICAgICAgCiAgICAgICAgIG9sZENvZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVC
bG9jazsKQEAgLTE0NSw3ICsxNDYsNiBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxD
b2RlKENvZGVCCiAgICAgICAgIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2
YWxFeGVjdXRhYmxlKj4odGhpcyk7CiAgICAgICAgIEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IHN0YXRpY19jYXN0PEV2YWxDb2RlQmxvY2sqPihnZW5lcmljQ29kZUJsb2NrKTsKICAgICAgICAg
Ci0gICAgICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2soKSk7CiAg
ICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKICAgICAgICAgCiAgICAgICAgIG9s
ZENvZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fZXZhbENvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDE2MDYyMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBFeGVjdXRhYmxlX2gKICNkZWZpbmUgRXhlY3V0
YWJsZV9oCiAKKyNpbmNsdWRlICJBcml0eUNoZWNrTW9kZS5oIgogI2luY2x1ZGUgIkNhbGxEYXRh
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrSGFzaC5oIgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXph
dGlvbktpbmQuaCIKQEAgLTM2LDYgKzM3LDcgQEAKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgog
I2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1
ZGUgIlJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oIgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5o
IgogI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5o
IgpAQCAtMTQ0LDM3ICsxNDYsOTQgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoa2luZCA9PSBD
b2RlRm9yQ29uc3RydWN0KTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENvZGVGb3JDb25z
dHJ1Y3QoKTsKICAgICB9Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZ2VuZXJhdGVkSklU
Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaygpCi0gICAgewotICAgICAgICBBU1NFUlQobV9qaXRD
b2RlRm9yQ2FsbCk7Ci0gICAgICAgIEFTU0VSVChtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hl
Y2spOwotICAgICAgICByZXR1cm4gbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrOwotICAg
IH0KLQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3Ry
dWN0V2l0aEFyaXR5Q2hlY2soKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1faml0Q29kZUZvckNv
bnN0cnVjdCk7Ci0gICAgICAgIEFTU0VSVChtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlD
aGVjayk7Ci0gICAgICAgIHJldHVybiBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVj
azsKLSAgICB9Ci0gICAgICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZW5lcmF0ZWRK
SVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAg
IHsKLSAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICByZXR1cm4g
Z2VuZXJhdGVkSklUQ29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaygpOwotICAgICAgICBBU1NFUlQo
a2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENv
ZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaygpOwotICAgIH0KLSAgICAgICAgCi0gICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQpCisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGVudHJ5
cG9pbnRGb3IoCisgICAgICAgIFZNJiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBB
cml0eUNoZWNrTW9kZSBhcml0eSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykK
ICAgICB7Ci0gICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhB
cml0eUNoZWNrKTsKLSAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0g
ICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1faml0Q29kZUZv
ckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBh
IGNhY2hlZCByZXN1bHQuIFdlIG9ubHkgaGF2ZSBpdCBmb3IgYXJpdHkgY2hlY2sgYmVjYXVzZSB3
ZSB1c2UgdGhlCisgICAgICAgIC8vIG5vLWFyaXR5IGVudHJ5cG9pbnQgaW4gbm9uLXZpcnR1YWwg
Y2FsbHMsIHdoaWNoIHdpbGwgImNhY2hlIiB0aGlzIHZhbHVlIGRpcmVjdGx5IGluCisgICAgICAg
IC8vIG1hY2hpbmUgY29kZS4KKyAgICAgICAgaWYgKGFyaXR5ID09IE11c3RDaGVja0FyaXR5KSB7
CisgICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgQ29kZUZvckNh
bGw6CisgICAgICAgICAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICAgICAg
ICAgIGlmIChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0gbV9qaXRDb2RlRm9yQ2FsbFdp
dGhBcml0eUNoZWNrKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2Vy
dmVSZWdpc3RlcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgcmVzdWx0ID0gbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdz
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICAgICAgICAgIHN3aXRj
aCAocmVnaXN0ZXJzKSB7CisgICAgICAgICAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlv
bk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIHJlc3VsdCA9IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAg
ICAgICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0gbV9qaXRDb2Rl
Rm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3MpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9CisgICAgICAg
ICAgICBnZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCh2bSwgYXJpdHks
IHJlZ2lzdGVycyk7CisgICAgICAgIGlmIChhcml0eSA9PSBNdXN0Q2hlY2tBcml0eSkgeworICAg
ICAgICAgICAgLy8gQ2FjaGUgdGhlIHJlc3VsdDsgdGhpcyBpcyBuZWNlc3NhcnkgZm9yIHRoZSBK
SVQncyB2aXJ0dWFsIGNhbGwgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgICAgIHN3aXRjaCAoa2lu
ZCkgeworICAgICAgICAgICAgY2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKHJlZ2lzdGVycykgeworICAgICAgICAgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRp
b25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhB
cml0eUNoZWNrID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAgICAgICAgICAg
bV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdzID0gcmVzdWx0Owor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAg
ICAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICAgICAgICAgIG1faml0Q29k
ZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAg
ICAgICAgICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2tBbmRQ
cmVzZXJ2ZVJlZ3MgPSByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3IoCisgICAgICAgIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgor
ICAgICAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIGNhc2UgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEV4ZWN1dGFibGVCYXNlLCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sp
OworICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ2Fs
bFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsK
KyAgICAgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVCYXNlLCBtX2ppdENv
ZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7CisgICAgICAgICAgICBjYXNlIE11c3RQcmVz
ZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4
ZWN1dGFibGVCYXNlLCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVja0FuZFByZXNl
cnZlUmVncyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgICAgICAKKyAg
ICAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVyc0ZvcihDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgewogICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9y
Q2FsbCkKQEAgLTIxMSwyMSArMjcwLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gTm9JbnRy
aW5zaWM7CiAgICAgfQogICAgICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaG9zdENv
ZGVFbnRyeUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZ2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoKTsKLSAgICB9
Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIganNDb2RlRW50cnlGb3IoQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENvZGVG
b3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKCk7Ci0gICAgfQotCi0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGpzQ29kZVdpdGhBcml0eUNoZWNrRW50cnlGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlD
aGVja0ZvcihraW5kKTsKLSAgICB9Ci0KIHByb3RlY3RlZDoKICAgICBFeGVjdXRhYmxlQmFzZSog
bV9wcmV2OwogICAgIEV4ZWN1dGFibGVCYXNlKiBtX25leHQ7CkBAIC0yMzQsNiArMjc4LDggQEAg
cHJvdGVjdGVkOgogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGVGb3JDb25zdHJ1Y3Q7CiAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjazsK
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5
Q2hlY2s7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZUZvckNhbGxXaXRoQXJp
dHlDaGVja0FuZFByZXNlcnZlUmVnczsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRD
b2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3M7CiB9OwogCiBjbGFz
cyBOYXRpdmVFeGVjdXRhYmxlIDogcHVibGljIEV4ZWN1dGFibGVCYXNlIHsKQEAgLTI4OCw4ICsz
MzQsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFBhc3NS
ZWZQdHI8SklUQ29kZT4gY2FsbFRodW5rLCBQYXNzUmVmUHRyPEpJVENvZGU+IGNvbnN0cnVjdFRo
dW5rLCBJbnRyaW5zaWMgaW50cmluc2ljKQogICAgIHsKICAgICAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwotICAgICAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBjYWxs
VGh1bmsgPyBjYWxsVGh1bmstPmFkZHJlc3NGb3JDYWxsKCkgOiBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIoKTsKLSAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBjb25z
dHJ1Y3RUaHVuayA/IGNvbnN0cnVjdFRodW5rLT5hZGRyZXNzRm9yQ2FsbCgpIDogTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKCk7CiAgICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBjYWxsVGh1bms7CiAg
ICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IGNvbnN0cnVjdFRodW5rOwogICAgICAgICBt
X2ludHJpbnNpYyA9IGludHJpbnNpYzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnaXN0ZXJQcmVzZXJ2YXRpb25N
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFJlZ2lzdGVyUHJlc2VydmF0aW9u
TW9kZV9oCisjZGVmaW5lIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZV9oCisKK25hbWVzcGFjZSBK
U0MgeworCitlbnVtIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSB7CisgICAgUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25Ob3RSZXF1aXJlZCwKKyAgICBNdXN0UHJlc2VydmVSZWdpc3RlcnMKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlX2gK
Kwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219590</attachid>
            <date>2013-12-18 16:59:17 -0800</date>
            <delta_ts>2013-12-18 22:59:23 -0800</delta_ts>
            <desc>it makes calls</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>115865</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjA3OTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjY3LDYgKzI2NywxMiBAQAogCQkwRjY2NkVDRDE4MzZC
MzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVDQjE4MzZCMzdF
MDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkIxNERGM0Yx
NjAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGph
Y2VuY3lMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZFMTY5MTRERjNGMTMwMEI3QjJF
NCAvKiBERkdFZGdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEY2QjFDQjUxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCMzE4NUZDOUU5
MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCAqLzsgfTsKKwkJMEY2QjFDQjYxODVGQzlFOTAwODQ1
RDk3IC8qIEZUTEpTQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkIxQ0I5MTg2MTI0
NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNrTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQjcxODYxMjQ0QzAwODQ1RDk3IC8qIEFyaXR5Q2hl
Y2tNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEY2QjFDQkExODYxMjQ0QzAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQjgx
ODYxMjQ0QzAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkIxQ0JEMTg2MTI0NkEw
MDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQkIxODYxMjQ2
QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAgKi87
IH07CisJCTBGNkIxQ0JFMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldy
YXBwZXJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNkIxQ0JDMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldy
YXBwZXJHZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjcwMjVBOTE3MTRCMEZBMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNzAyNUE3MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
ICovOyB9OwogCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjcwMjVBODE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3MTRDQTQx
NkVBOTJGMDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MTRDQTExNkVBOTJF
RDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovOyB9OwpAQCAt
MTU3OSw2ICsxNTg1LDEyIEBACiAJCTBGNjY2RUNCMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1
cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZH
UmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FkamFjZW5jeUxpc3QuaDsgcGF0aCA9
IGRmZy9ERkdBZGphY2VuY3lMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NjZFMTY5MTRERjNGMTMwMEI3QjJFNCAvKiBERkdFZGdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0VkZ2UuaDsgcGF0aCA9IGRmZy9ERkdFZGdlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNkIxQ0IzMTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMSlNDYWxsLmNwcDsg
cGF0aCA9IGZ0bC9GVExKU0NhbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjZCMUNCNDE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEZUTEpTQ2FsbC5oOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZCMUNCNzE4NjEyNDRDMDA4NDVEOTcgLyogQXJp
dHlDaGVja01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJpdHlDaGVj
a01vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QjFDQjgxODYxMjQ0QzAw
ODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY2QjFDQkIxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjZCMUNCQzE4NjEyNDZBMDA4NDVEOTcgLyogUmVnaXN0
ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcwMjVBNzE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7IHBhdGggPSBkZmcvREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MDI1QTgx
NzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDsgcGF0aCA9
IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRp
b25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODU4LDYgKzI4NzAs
OCBAQAogCQkJCTBGRUEwQTAzMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmggKi8sCiAJ
CQkJQTc4QTk3N0QxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5jcHAgKi8sCiAJ
CQkJQTc4QTk3N0UxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5oICovLAorCQkJ
CTBGNkIxQ0IzMTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwICovLAorCQkJCTBGNkIx
Q0I0MTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuaCAqLywKIAkJCQkwRjhGMkI5MzE3MkUw
NDlFMDA3REJEQTUgLyogRlRMTGluay5jcHAgKi8sCiAJCQkJMEY4RjJCOTQxNzJFMDQ5RTAwN0RC
REE1IC8qIEZUTExpbmsuaCAqLywKIAkJCQkwRkNFRkFERDE4MDczOEMwMDA0NzJDRTQgLyogRlRM
TG9jYXRpb24uY3BwICovLApAQCAtMzAzMiw2ICszMDQ2LDggQEAKIAkJCQkwRkM3MTJFMTE3Q0Q4
NzhGMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywK
IAkJCQlBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggKi8sCiAJ
CQkJQTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggKi8sCisJCQkJ
MEY2QjFDQkIxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdl
bmVyYXRvci5jcHAgKi8sCisJCQkJMEY2QjFDQkMxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVy
UHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5oICovLAogCQkJCTBGQzMxNDE0MTgxNDZENzAw
MDAzMzIzMiAvKiBSZWdpc3RlclNldC5jcHAgKi8sCiAJCQkJMEZDMzE0MTAxODE0NTU5MTAwMDMz
MjMyIC8qIFJlZ2lzdGVyU2V0LmggKi8sCiAJCQkJMEYyNEU1NDkxN0VFMjc0OTAwQUJCMjE3IC8q
IFJlcGF0Y2guY3BwICovLApAQCAtMzM2OSw2ICszMzg1LDcgQEAKIAkJCQlBNzYxNDBDODE4Mjk4
MkNCMDA3NTA2MjQgLyogQXJndW1lbnRzSXRlcmF0b3JDb25zdHJ1Y3Rvci5oICovLAogCQkJCUE3
NjE0MEM5MTgyOTgyQ0IwMDc1MDYyNCAvKiBBcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZS5jcHAg
Ki8sCiAJCQkJQTc2MTQwQ0ExODI5ODJDQjAwNzUwNjI0IC8qIEFyZ3VtZW50c0l0ZXJhdG9yUHJv
dG90eXBlLmggKi8sCisJCQkJMEY2QjFDQjcxODYxMjQ0QzAwODQ1RDk3IC8qIEFyaXR5Q2hlY2tN
b2RlLmggKi8sCiAJCQkJQTdBOEFGMjUxN0FEQjVGMjAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmNw
cCAqLywKIAkJCQlBN0E4QUYyNjE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIuaCAqLywK
IAkJCQkwRkZDOTlEMjE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRj
aHBvaW50LmNwcCAqLywKQEAgLTM2NjcsNiArMzY4NCw3IEBACiAJCQkJRjY5MkE4N0MwMjU1NTk3
RDAxRkY2MEY3IC8qIFJlZ0V4cE9iamVjdC5oICovLAogCQkJCUJDRDIwMkJGMEUxNzA2QTcwMDJD
N0U4MiAvKiBSZWdFeHBQcm90b3R5cGUuY3BwICovLAogCQkJCUJDRDIwMkMwMEUxNzA2QTcwMDJD
N0U4MiAvKiBSZWdFeHBQcm90b3R5cGUuaCAqLywKKwkJCQkwRjZCMUNCODE4NjEyNDRDMDA4NDVE
OTcgLyogUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmggKi8sCiAJCQkJMEZCN0YzOTExNUVEOEUz
ODAwRjE2N0IyIC8qIFJlamVjdC5oICovLAogCQkJCTBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAv
KiBTYW1wbGluZ0NvdW50ZXIuY3BwICovLAogCQkJCTBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAv
KiBTYW1wbGluZ0NvdW50ZXIuaCAqLywKQEAgLTQzOTUsNiArNDQxMyw3IEBACiAJCQkJMEZCQzBB
RTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzhBOTc3NTE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzhBOTc3NzE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjZCMUNCNjE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxs
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4
dXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8q
IERGR0ZsdXNoZWRBdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzcz
QUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKQEAgLTQ0MzAsNiArNDQ0OSw3
IEBACiAJCQkJMEZEOEEzMjYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVh
dGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0NDIg
LyogREZHT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQzk5RDExODRFQzhBRDAwOUMx
MEFCIC8qIENvbnN0YW50TW9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2QjFDQkExODYxMjQ0
QzAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNUJBMTVFRDE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yWFBD
Q29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUMxNkQwMkYxMTAwNTVBNURC
IC8qIERGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtNDU4OCw2
ICs0NjA4LDcgQEAKIAkJCQkwRjQ2ODA4MjE0QkE1NzJEMDBCRkUyNzIgLyogSklURXhjZXB0aW9u
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTRFMUYxODEyNEFDRTAwOUI2QjREIC8qIEpJVElu
bGluZUNhY2hlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkNDODVBMTBFRTc5QTQ3
MDAyODg2ODIgLyogSklUSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2QjFDQkUxODYx
MjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyNEU1NEQxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlv
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OTBERDcwMTgyRjQ5OTcwMDU4ODgwNyAvKiBKU1Nl
dEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU0RTE3RUUyNzQ5MDBBQkIyMTcg
LyogSklUT3BlcmF0aW9uV3JhcHBlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtNDYwMyw2ICs0NjI0
LDcgQEAKIAkJCQkwRkM3MTJFMzE3Q0Q4NzkzMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkY1NEEzMTNCMjhBQUIw
MEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE2
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0FjdGl2YXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NkIxQ0I5MTg2MTI0NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNrTW9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODQwNDgwMTMxMDIxQTFEOTAwOEU3RjAxIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVy
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzYxNDBEMjE4Mjk4MkNCMDA3NTA2MjQgLyog
SlNBcmd1bWVudHNJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC01NDk1LDYgKzU1MTcsNyBA
QAogCQkJCTg2ODgwRjREMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0ZGMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdTU0FD
b252ZXJzaW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RkI0RjQxN0ZDQjkxNzAw
Q0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2
QjFDQkQxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVy
YXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBDRjI0NDIgLyog
REZHVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzI3MTdENTFGNTcwMENBMkM0
MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRDhBMzI5MTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKQEAgLTU1NTEsNiArNTU3NCw3IEBACiAJCQkJMEYy
NUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjlEMzM5QTE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRUEwQTE2MTcwNkJCOTAwMEJCNzIyQyAvKiBGVExTdGF0ZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjZCMUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlND
YWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkUxMTcxNzhFMUMwMDY5MEM3RiAvKiBG
VExUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRTMxNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTFZhbHVlRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNCMTA3RUMz
NzYwMDQyN0E0OCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQ29kZVJlZi5oCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDksOSArMzA5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkKiBkYXRhTG9jYXRpb24oKSBjb25zdCB7
IEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7IHJldHVybiBtX3ZhbHVlOyB9CiAj
ZW5kaWYKIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKKyAgICB0eXBlZGVmIHZvaWQqIChN
YWNyb0Fzc2VtYmxlckNvZGVQdHI6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRv
ciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gIW1f
dmFsdWU7CisgICAgICAgIHJldHVybiAhIW1fdmFsdWUgPyByZWludGVycHJldF9jYXN0PFVuc3Bl
Y2lmaWVkQm9vbFR5cGUqPigxKSA6IDA7CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIG90aGVyKSBjb25zdApAQCAtNDM0LDcgKzQz
NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKU0M6OnRyeVRvRGlzYXNzZW1ibGUobV9j
b2RlUHRyLCBzaXplKCksIHByZWZpeCwgV1RGOjpkYXRhRmlsZSgpKTsKICAgICB9CiAgICAgCi0g
ICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb2RlUHRyOyB9CisgICAgdHlw
ZWRlZiB2b2lkKiAoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7
CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICEhbV9jb2RlUHRyID8gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xU
eXBlKj4oMSkgOiAwOworICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2Fs
bExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDE0ICsz
OCwxMSBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSwgUmVwYXRjCiAgICAgQVNT
RVJUKGlzTGlua2VkKCkpOwogICAgIAogICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxh
Y2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0
cldpdGhQYXRjaE9uUmVnaXN0ZXIoaG90UGF0aEJlZ2luKSwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQ+KGNhbGxlZUdQUiksIDApOwotICAgIGlmIChpc0RGRykgewotI2lm
IEVOQUJMRShERkdfSklUKQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJu
TG9jYXRpb24sIChjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKGxpbmtDb25z
dHJ1Y3RUaHVua0dlbmVyYXRvcikgOiB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpKS5jb2RlKCkpOwotI2Vsc2UKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSNlbmRpZgotICAgIH0gZWxzZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxs
UmV0dXJuTG9jYXRpb24sIGNhbGxUeXBlID09IENvbnN0cnVjdCA/IHZtLmdldENUSVN0dWIobGlu
a0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkgOiB2bS5nZXRDVElTdHViKGxpbmtDYWxs
VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCisgICAg
ICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwKKyAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rVGh1bmtH
ZW5lcmF0b3JGb3IoCisgICAgICAgICAgICBjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyBDb2RlRm9y
Q29uc3RydWN0IDogQ29kZUZvckNhbGwsCisgICAgICAgICAgICByZXBhdGNoQnVmZmVyLmNvZGVC
bG9jaygpLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6RlRMSklUID8gTXVzdFByZXNlcnZlUmVnaXN0
ZXJzIDogUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCkpLmNvZGUoKSk7CiAgICAgaGFz
U2VlblNob3VsZFJlcGF0Y2ggPSBmYWxzZTsKICAgICBjYWxsZWUuY2xlYXIoKTsKICAgICBzdHVi
LmNsZWFyKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJ
bmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rSW5mby5oCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDYgQEAgc3Ry
dWN0IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgICAgICAKICAgICBDYWxs
TGlua0luZm8oKQogICAgICAgICA6IGhhc1NlZW5TaG91bGRSZXBhdGNoKGZhbHNlKQotICAgICAg
ICAsIGlzREZHKGZhbHNlKQogICAgICAgICAsIGhhc1NlZW5DbG9zdXJlKGZhbHNlKQogICAgICAg
ICAsIGNhbGxUeXBlKE5vbmUpCiAgICAgewpAQCAtODAsNyArNzksNiBAQCBzdHJ1Y3QgQ2FsbExp
bmtJbmZvIDogcHVibGljIEJhc2ljUmF3U2VuCiAgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+
IGxhc3RTZWVuQ2FsbGVlOwogICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHVi
OwogICAgIGJvb2wgaGFzU2VlblNob3VsZFJlcGF0Y2ggOiAxOwotICAgIGJvb2wgaXNERkcgOiAx
OwogICAgIGJvb2wgaGFzU2VlbkNsb3N1cmUgOiAxOwogICAgIHVuc2lnbmVkIGNhbGxUeXBlIDog
NTsgLy8gQ2FsbFR5cGUKICAgICB1bnNpZ25lZCBjYWxsZWVHUFIgOiA4OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTYwNzk0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTcsMTcgKzI1NywxNSBAQCBwdWJsaWM6CiAgICAgLy8gRXhhY3RseSBlcXVpdmFs
ZW50IHRvIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJs
b2NrRm9yKGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpCiAgICAgUGFzc1JlZlB0cjxD
b2RlQmxvY2s+IG5ld1JlcGxhY2VtZW50KCk7CiAgICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlKFBh
c3NSZWZQdHI8SklUQ29kZT4gY29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVXaXRoQXJp
dHlDaGVjaykKKyAgICB2b2lkIHNldEpJVENvZGUoUGFzc1JlZlB0cjxKSVRDb2RlPiBjb2RlKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1faGVhcC0+aXNEZWZlcnJlZCgpKTsKICAgICAgICAgbV9o
ZWFwLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoY29kZS0+c2l6ZSgpKTsKICAgICAgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVu
Y2UoKTsgLy8gVGhpcyBpcyBwcm9iYWJseSBub3QgbmVlZGVkIGJlY2F1c2UgdGhlIGxvY2sgd2ls
bCBhbHNvIGRvIHNvbWV0aGluZyBzaW1pbGFyLCBidXQgaXQncyBnb29kIHRvIGJlIHBhcmFub2lk
LgogICAgICAgICBtX2ppdENvZGUgPSBjb2RlOwotICAgICAgICBtX2ppdENvZGVXaXRoQXJpdHlD
aGVjayA9IGNvZGVXaXRoQXJpdHlDaGVjazsKICAgICB9CiAgICAgUGFzc1JlZlB0cjxKSVRDb2Rl
PiBqaXRDb2RlKCkgeyByZXR1cm4gbV9qaXRDb2RlOyB9Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGppdENvZGVXaXRoQXJpdHlDaGVjaygpIHsgcmV0dXJuIG1faml0Q29kZVdpdGhBcml0eUNo
ZWNrOyB9CiAgICAgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIEpJVENvZGUqIGppdENvZGUgPSBtX2ppdENvZGUuZ2V0KCk7CkBAIC0xMDY2LDcgKzEwNjQs
NiBAQCBwcml2YXRlOgogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMTEludENhbGxMaW5rSW5mbywg
QmFzaWNSYXdTZW50aW5lbE5vZGU8TExJbnRDYWxsTGlua0luZm8+PiBtX2luY29taW5nTExJbnRD
YWxsczsKICNlbmRpZgogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7Ci0gICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZVdpdGhBcml0eUNoZWNrOwogI2lmIEVOQUJMRShKSVQp
CiAgICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKICAgICBWZWN0b3I8QnlW
YWxJbmZvPiBtX2J5VmFsSW5mb3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuY3BwCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDExICs4MCwxOSBAQCBzdGF0aWMg
Q29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAgLy8gbWFrZSBzdXJlIHRoYXQgYWxs
IEpJVCBjb2RlIGdlbmVyYXRpb24gZG9lcyBmaW5hbGl6YXRpb24gb24gdGhlIG1haW4gdGhyZWFk
LgogICAgIHZtLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7CiAg
ICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
OwotICAgIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcik7Ci0gICAgdm0uZ2V0
Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOwotICAgIHZtLmdldENUSVN0dWIo
bGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IpOwotICAgIHZtLmdldENUSVN0dWIodmlydHVh
bENhbGxUaHVua0dlbmVyYXRvcik7Ci0gICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0
VGh1bmtHZW5lcmF0b3IpOworICAgIGlmIChtb2RlID09IERGR01vZGUpIHsKKyAgICAgICAgdm0u
Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgdm0uZ2V0Q1RJU3R1
YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOworICAgICAgICB2bS5nZXRDVElTdHViKGxp
bmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0
dWFsQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0dWFsQ29u
c3RydWN0VGh1bmtHZW5lcmF0b3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZtLmdldENUSVN0
dWIobGlua0NhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgdm0u
Z2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcik7
CisgICAgICAgIHZtLmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3NU
aHVua0dlbmVyYXRvcik7CisgICAgICAgIHZtLmdldENUSVN0dWIodmlydHVhbENhbGxUaGF0UHJl
c2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0dWFs
Q29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcik7CisgICAgfQogICAgIAog
ICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoCiAgICAgICAgIG5ldyBQbGFuKGNvZGVC
bG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LCBtdXN0SGFuZGxlVmFsdWVzKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2
aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw5ICsyMzAsMTEgQEAgdm9pZCBKSVRDb21waWxl
cjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2pzQ2FsbHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9j
b2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKICAgICAgICAgaW5mby5jYWxsVHlwZSA9IG1fanND
YWxsc1tpXS5tX2NhbGxUeXBlOwotICAgICAgICBpbmZvLmlzREZHID0gdHJ1ZTsKICAgICAgICAg
aW5mby5jb2RlT3JpZ2luID0gbV9qc0NhbGxzW2ldLm1fY29kZU9yaWdpbjsKLSAgICAgICAgbGlu
a0J1ZmZlci5saW5rKG1fanNDYWxsc1tpXS5tX3Nsb3dDYWxsLCBGdW5jdGlvblB0cigobV92bS0+
Z2V0Q1RJU3R1YihpbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0ID8gbGlu
a0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yIDogbGlua0NhbGxUaHVua0dlbmVyYXRvcikpLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRv
ciA9IGxpbmtUaHVua0dlbmVyYXRvckZvcigKKyAgICAgICAgICAgIGluZm8uY2FsbFR5cGUgPT0g
Q2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGws
CisgICAgICAgICAgICBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKKyAgICAgICAg
bGlua0J1ZmZlci5saW5rKG1fanNDYWxsc1tpXS5tX3Nsb3dDYWxsLCBGdW5jdGlvblB0cihtX3Zt
LT5nZXRDVElTdHViKGdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAg
ICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbChtX2pzQ2FsbHNbaV0ubV9zbG93Q2FsbCk7CiAgICAgICAgIGluZm8uaG90UGF0aEJlZ2lu
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fanNDYWxsc1tpXS5tX3RhcmdldFRvQ2hlY2spOwog
ICAgICAgICBpbmZvLmhvdFBhdGhPdGhlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
KG1fanNDYWxsc1tpXS5tX2Zhc3RDYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDgsOCArNDgsOSBAQCBKSVRGaW5hbGl6ZXI6On5KSVRGaW5hbGl6ZXIoKQogCiBib29sIEpJVEZp
bmFsaXplcjo6ZmluYWxpemUoKQogewotICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYo
bV9saW5rQnVmZmVyLT5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoKSk7Ci0gICAgbV9w
bGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cigpKTsKKyAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmKAorICAgICAgICBtX2xpbmtC
dWZmZXItPmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIoKSk7CisgICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUpOwog
ICAgIAogICAgIGZpbmFsaXplQ29tbW9uKCk7CiAgICAgCkBAIC01OSw4ICs2MCw5IEBAIGJvb2wg
SklURmluYWxpemVyOjpmaW5hbGl6ZSgpCiBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5j
dGlvbigpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fd2l0aEFyaXR5Q2hlY2suaXNFbXB0eVZh
bHVlKCkpOwotICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYobV9saW5rQnVmZmVyLT5m
aW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoKSk7Ci0gICAgbV9wbGFuLmNvZGVCbG9jay0+
c2V0SklUQ29kZShtX2ppdENvZGUsIG1fd2l0aEFyaXR5Q2hlY2spOworICAgIG1faml0Q29kZS0+
aW5pdGlhbGl6ZUNvZGVSZWYoCisgICAgICAgIG1fbGlua0J1ZmZlci0+ZmluYWxpemVDb2RlV2l0
aG91dERpc2Fzc2VtYmx5KCksIG1fd2l0aEFyaXR5Q2hlY2spOworICAgIG1fcGxhbi5jb2RlQmxv
Y2stPnNldEpJVENvZGUobV9qaXRDb2RlKTsKICAgICAKICAgICBmaW5hbGl6ZUNvbW1vbigpOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDQsMTEgKzcw
NCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFi
ZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7
CisgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGg7CiAKICAgICBtX2ppdC5lbWl0U3RvcmVD
b2RlT3JpZ2luKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgIAotICAgIHNsb3dQYXRoLmFwcGVuZCht
X2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVH
UFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKSk7Cisg
ICAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKDApKTsKIAogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
Y2FsbGVlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZXN1bHRH
UFIpOwogICAgIG1faml0LnN0b3JlNjQocmVzdWx0R1BSLCBjYWxsZWVGcmFtZVNsb3QoSlNTdGFj
azo6U2NvcGVDaGFpbikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAz
LDggQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2Ug
RnVuY3Rpb25SZWVudHJ5V2F0Y2hwb2ludDoKICAgICBjYXNlIFZhcmlhYmxlV2F0Y2hwb2ludDoK
ICAgICBjYXNlIE5vdGlmeVdyaXRlOgorICAgIGNhc2UgQ2FsbDoKKyAgICBjYXNlIENvbnN0cnVj
dDoKICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVhazsKICAgICBjYXNlIEdl
dEJ5SWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJl
dmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OSw2ICsyOTksNDQgQEAgc3RhdGljIHZvaWQgZml4RnVu
Y3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIC8vIEhh
bmRsaW5nIEpTIGNhbGxzIGlzIHdlaXJkOiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIHNvcnQg
dGhlbSBieSB0aGUgUEMgaW4gTExWTQorICAgIC8vIGdlbmVyYXRlZCBjb2RlLiBUaGF0IGltcGxp
ZXMgZmlyc3QgcHJ1bmluZyB0aGUgb25lcyB0aGF0IExMVk0gZGlkbid0IGdlbmVyYXRlLgorICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5qc0NhbGxzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIEpTQ2FsbCYgY2FsbCA9IHN0YXRlLmpzQ2FsbHNbaV07CisgICAgICAgIAorICAgICAg
ICBTdGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGNh
bGwuc3RhY2ttYXBJRCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7
CisgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4gUHJ1bmUgaXQuCisgICAgICAg
ICAgICBjYWxsID0gc3RhdGUuanNDYWxscy5sYXN0KCk7CisgICAgICAgICAgICBzdGF0ZS5qc0Nh
bGxzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjYWxsLm1faW5zdHJ1Y3Rpb25PZmZzZXQg
PSBpdGVyLT52YWx1ZS5pbnN0cnVjdGlvbk9mZnNldDsKKyAgICB9CisgICAgCisgICAgc3RkOjpz
b3J0KHN0YXRlLmpzQ2FsbHMuYmVnaW4oKSwgc3RhdGUuanNDYWxscy5lbmQoKSk7CisgICAgCisg
ICAgY29kZUJsb2NrLT5zZXROdW1iZXJPZkNhbGxMaW5rSW5mb3Moc3RhdGUuanNDYWxscy5zaXpl
KCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmpzQ2FsbHMuc2l6ZSgpOyBpLS07KSB7
CisgICAgICAgIEpTQ2FsbCYgY2FsbCA9IHN0YXRlLmpzQ2FsbHNbaV07CisKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzIGZhc3RQYXRoSklUKCZ2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgY2FsbC5lbWl0
KGZhc3RQYXRoSklUKTsKKyAgICAgICAgCisgICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9IGJpdHdp
c2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgY2FsbC5tX2luc3RydWN0aW9uT2Zm
c2V0OworICAgICAgICAKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCAmZmFzdFBh
dGhKSVQsIHN0YXJ0T2ZJQywgc2l6ZU9mQ2FsbCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bGlua0J1ZmZlci5pc1ZhbGlkKCkpOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFzc2VtYmxlclR5cGVfVDo6ZmlsbE5vcHMoCisgICAgICAgICAgICBzdGFydE9mSUMgKyBsaW5r
QnVmZmVyLnNpemUoKSwgc2l6ZU9mQ2FsbCgpIC0gbGlua0J1ZmZlci5zaXplKCkpOworICAgICAg
ICAKKyAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gY29kZUJsb2NrLT5jYWxsTGlua0luZm8o
aSk7CisgICAgICAgIGNhbGwubGluayh2bSwgbGlua0J1ZmZlciwgaW5mbyk7CisgICAgfQorICAg
IAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgIAogICAg
IGZvciAodW5zaWduZWQgZXhpdEluZGV4ID0gaml0Q29kZS0+b3NyRXhpdC5zaXplKCk7IGV4aXRJ
bmRleC0tOykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNo
ZVNpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5s
aW5lQ2FjaGVTaXplLmNwcAkocmV2aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0
NywxMSBAQCBzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpCiAgICAgcmV0dXJuIDMyOwogfQogCitzaXpl
X3Qgc2l6ZU9mQ2FsbCgpCit7CisgICAgcmV0dXJuIDQzOworfQorCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAkocmV2aXNpb24gMTYwNzk0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CiAKIHNpemVfdCBzaXplT2ZHZXRCeUlkKCk7CiBzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpOwor
c2l6ZV90IHNpemVPZkNhbGwoKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRv
cnkuaAkocmV2aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJ
bnRyaW5zaWNSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDkgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKGZyYW1lQWRkcmVzcywgImxs
dm0uZnJhbWVhZGRyZXNzIiwgZnVuY3Rpb25UeXBlKHBvaW50ZXJUeXBlKGludDgpLCBpbnQzMikp
IFwKICAgICBtYWNybyhtdWxXaXRoT3ZlcmZsb3czMiwgImxsdm0uc211bC53aXRoLm92ZXJmbG93
LmkzMiIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50MzIsIGJvb2xlYW4p
LCBpbnQzMiwgaW50MzIpKSBcCiAgICAgbWFjcm8obXVsV2l0aE92ZXJmbG93NjQsICJsbHZtLnNt
dWwud2l0aC5vdmVyZmxvdy5pNjQiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQs
IGludDY0LCBib29sZWFuKSwgaW50NjQsIGludDY0KSkgXAotICAgIG1hY3JvKHBhdGNocG9pbnRJ
bnQ2NCwgImxsdm0uZXhwZXJpbWVudGFsLnBhdGNocG9pbnQuaTY0IiwgZnVuY3Rpb25UeXBlKGlu
dDY0LCBpbnQzMiwgaW50MzIsIHJlZjgsIGludDMyLCBWYXJpYWRpYykpIFwKLSAgICBtYWNybyhw
YXRjaHBvaW50Vm9pZCwgImxsdm0uZXhwZXJpbWVudGFsLnBhdGNocG9pbnQudm9pZCIsIGZ1bmN0
aW9uVHlwZSh2b2lkVHlwZSwgaW50MzIsIGludDMyLCByZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBc
Ci0gICAgbWFjcm8oc3RhY2ttYXAsICJsbHZtLmV4cGVyaW1lbnRhbC5zdGFja21hcCIsIGZ1bmN0
aW9uVHlwZSh2b2lkVHlwZSwgaW50MzIsIGludDMyLCBWYXJpYWRpYykpIFwKKyAgICBtYWNybyhw
YXRjaHBvaW50SW50NjQsICJsbHZtLmV4cGVyaW1lbnRhbC5wYXRjaHBvaW50Lmk2NCIsIGZ1bmN0
aW9uVHlwZShpbnQ2NCwgaW50NjQsIGludDMyLCByZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBcCisg
ICAgbWFjcm8ocGF0Y2hwb2ludFZvaWQsICJsbHZtLmV4cGVyaW1lbnRhbC5wYXRjaHBvaW50LnZv
aWQiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDY0LCBpbnQzMiwgcmVmOCwgaW50MzIsIFZh
cmlhZGljKSkgXAorICAgIG1hY3JvKHN0YWNrbWFwLCAibGx2bS5leHBlcmltZW50YWwuc3RhY2tt
YXAiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDY0LCBpbnQzMiwgVmFyaWFkaWMpKSBcCiAg
ICAgbWFjcm8oc3ViV2l0aE92ZXJmbG93MzIsICJsbHZtLnNzdWIud2l0aC5vdmVyZmxvdy5pMzIi
LCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDMyLCBib29sZWFuKSwgaW50
MzIsIGludDMyKSkgXAogICAgIG1hY3JvKHN1YldpdGhPdmVyZmxvdzY0LCAibGx2bS5zc3ViLndp
dGgub3ZlcmZsb3cuaTY0IiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQ2
NCwgYm9vbGVhbiksIGludDY0LCBpbnQ2NCkpIFwKICAgICBtYWNybyh0cmFwLCAibGx2bS50cmFw
IiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVENvZGUuY3BwCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw5ICs1NCw5IEBA
IHZvaWQgSklUQ29kZTo6YWRkRGF0YVNlY3Rpb24oUmVmQ291bnRlZEEKICAgICBtX2RhdGFTZWN0
aW9ucy5hcHBlbmQoZGF0YVNlY3Rpb24pOwogfQogCi12b2lkIEpJVENvZGU6OmluaXRpYWxpemVF
bnRyeXBvaW50KENvZGVSZWYgZW50cnlwb2ludCkKK3ZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUFy
aXR5Q2hlY2tFbnRyeXBvaW50KENvZGVSZWYgZW50cnlwb2ludCkKIHsKLSAgICBtX2VudHJ5cG9p
bnQgPSBlbnRyeXBvaW50OworICAgIG1fYXJpdHlDaGVja0VudHJ5cG9pbnQgPSBlbnRyeXBvaW50
OwogfQogCiB2b2lkIEpJVENvZGU6OmluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChDb2RlUHRyIGFk
ZHJlc3MpCkBAIC02NCwyMSArNjQsMjUgQEAgdm9pZCBKSVRDb2RlOjppbml0aWFsaXplQWRkcmVz
c0ZvckNhbGwoQwogICAgIG1fYWRkcmVzc0ZvckNhbGwgPSBhZGRyZXNzOwogfQogCi1KSVRDb2Rl
OjpDb2RlUHRyIEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKCkKK0pJVENvZGU6OkNvZGVQdHIgSklU
Q29kZTo6YWRkcmVzc0ZvckNhbGwoVk0mLCBFeGVjdXRhYmxlQmFzZSosIEFyaXR5Q2hlY2tNb2Rl
IGFyaXR5Q2hlY2ssIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSkKIHsKLSAgICByZXR1cm4gbV9h
ZGRyZXNzRm9yQ2FsbDsKKyAgICBzd2l0Y2ggKGFyaXR5Q2hlY2spIHsKKyAgICBjYXNlIEFyaXR5
Q2hlY2tOb3RSZXF1aXJlZDoKKyAgICAgICAgcmV0dXJuIG1fYWRkcmVzc0ZvckNhbGw7CisgICAg
Y2FzZSBNdXN0Q2hlY2tBcml0eToKKyAgICAgICAgcmV0dXJuIG1fYXJpdHlDaGVja0VudHJ5cG9p
bnQuY29kZSgpOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBDb2RlUHRyKCk7CiB9CiAKIHZvaWQqIEpJVENvZGU6OmV4ZWN1dGFibGVBZGRyZXNz
QXRPZmZzZXQoc2l6ZV90IG9mZnNldCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2VudHJ5cG9p
bnQpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihtX2FkZHJlc3NGb3JDYWxs
LmV4ZWN1dGFibGVBZGRyZXNzKCkpICsgb2Zmc2V0OwogfQogCiB2b2lkKiBKSVRDb2RlOjpkYXRh
QWRkcmVzc0F0T2Zmc2V0KHNpemVfdCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2VudHJ5cG9p
bnQpOwotCiAgICAgLy8gV2UgY2FuJ3QgcGF0Y2ggRlRMIGNvZGUsIHlldC4gRXZlbiBpZiB3ZSBk
aWQsIGl0J3Mgbm90IGNsZWFyIHRoYXQgd2Ugd291bGQgZG8gc28KICAgICAvLyB0aHJvdWdoIHRo
aXMgQVBJLgogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC04Nyw4ICs5MSw2
IEBAIHZvaWQqIEpJVENvZGU6OmRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV8KIAogdW5zaWduZWQg
SklUQ29kZTo6b2Zmc2V0T2Yodm9pZCopCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9lbnRyeXBv
aW50KTsKLQogICAgIC8vIFdlIGN1cnJlbnRseSBkb24ndCBoYXZlIHZpc2liaWxpdHkgaW50byB0
aGUgRlRMIGNvZGUuCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1
cm4gMDsKQEAgLTk2LDggKzk4LDYgQEAgdW5zaWduZWQgSklUQ29kZTo6b2Zmc2V0T2Yodm9pZCop
CiAKIHNpemVfdCBKSVRDb2RlOjpzaXplKCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2VudHJ5
cG9pbnQpOwotCiAgICAgLy8gV2UgZG9uJ3Qga25vdyB0aGUgc2l6ZSBvZiBGVEwgY29kZSwgeWV0
LiBNYWtlIGEgd2lsZCBndWVzcy4gVGhpcyBpcyBtb3N0bHkgdXNlZCBmb3IKICAgICAvLyBHQyBs
b2FkIGVzdGltYXRlcy4KICAgICByZXR1cm4gMTAwMDsKQEAgLTEwNSw4ICsxMDUsNiBAQCBzaXpl
X3QgSklUQ29kZTo6c2l6ZSgpCiAKIGJvb2wgSklUQ29kZTo6Y29udGFpbnModm9pZCopCiB7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQobV9lbnRyeXBvaW50KTsKLQogICAgIC8vIFdlIGhhdmUgbm8gaWRl
YSB3aGF0IGFkZHJlc3NlcyB0aGUgRlRMIGNvZGUgY29udGFpbnMsIHlldC4KICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTcg
KzQ2LDE3IEBAIHB1YmxpYzoKICAgICBKSVRDb2RlKCk7CiAgICAgfkpJVENvZGUoKTsKICAgICAK
LSAgICBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKCk7Ci0gICAgdm9pZCogZXhlY3V0YWJsZUFkZHJl
c3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KTsKLSAgICB2b2lkKiBkYXRhQWRkcmVzc0F0T2Zmc2V0
KHNpemVfdCBvZmZzZXQpOwotICAgIHVuc2lnbmVkIG9mZnNldE9mKHZvaWQqIHBvaW50ZXJJbnRv
Q29kZSk7Ci0gICAgc2l6ZV90IHNpemUoKTsKLSAgICBib29sIGNvbnRhaW5zKHZvaWQqKTsKKyAg
ICBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKFZNJiwgRXhlY3V0YWJsZUJhc2UqLCBBcml0eUNoZWNr
TW9kZSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlKSBPVkVSUklERTsKKyAgICB2b2lkKiBleGVj
dXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpIE9WRVJSSURFOworICAgIHZvaWQq
IGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgT1ZFUlJJREU7CisgICAgdW5zaWdu
ZWQgb2Zmc2V0T2Yodm9pZCogcG9pbnRlckludG9Db2RlKSBPVkVSUklERTsKKyAgICBzaXplX3Qg
c2l6ZSgpIE9WRVJSSURFOworICAgIGJvb2wgY29udGFpbnModm9pZCopIE9WRVJSSURFOwogICAg
IAogICAgIHZvaWQgaW5pdGlhbGl6ZUV4aXRUaHVua3MoQ29kZVJlZik7CiAgICAgdm9pZCBhZGRI
YW5kbGUoUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPik7CiAgICAgdm9pZCBhZGRE
YXRhU2VjdGlvbihSZWZDb3VudGVkQXJyYXk8TFNlY3Rpb25Xb3JkPik7Ci0gICAgdm9pZCBpbml0
aWFsaXplRW50cnlwb2ludChDb2RlUmVmKTsKKyAgICB2b2lkIGluaXRpYWxpemVBcml0eUNoZWNr
RW50cnlwb2ludChDb2RlUmVmKTsKICAgICB2b2lkIGluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChD
b2RlUHRyKTsKICAgICAKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlI
YW5kbGU+PiYgaGFuZGxlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlczsgfQpAQCAtNzUsNyAr
NzUsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZDb3VudGVkQXJyYXk8TFNlY3Rpb25Xb3Jk
Pj4gbV9kYXRhU2VjdGlvbnM7CiAgICAgVmVjdG9yPFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFu
ZGxlPj4gbV9oYW5kbGVzOwogICAgIENvZGVQdHIgbV9hZGRyZXNzRm9yQ2FsbDsKLSAgICBDb2Rl
UmVmIG1fZW50cnlwb2ludDsKKyAgICBDb2RlUmVmIG1fYXJpdHlDaGVja0VudHJ5cG9pbnQ7CiAg
ICAgQ29kZVJlZiBtX2V4aXRUaHVua3M7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMywxMiArMTAzLDEyIEBAIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9u
KCkKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2s7CiAgICAgaWYgKGFy
aXR5Q2hlY2suaXNTZXQoKSkKICAgICAgICAgd2l0aEFyaXR5Q2hlY2sgPSBlbnRyeXBvaW50TGlu
a0J1ZmZlci0+bG9jYXRpb25PZihhcml0eUNoZWNrKTsKLSAgICBqaXRDb2RlLT5pbml0aWFsaXpl
RW50cnlwb2ludCgKKyAgICBqaXRDb2RlLT5pbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQo
CiAgICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAogICAgICAgICAgICAgKmVudHJ5cG9pbnRMaW5r
QnVmZmVyLAogICAgICAgICAgICAgKCJGVEwgZW50cnlwb2ludCB0aHVuayBmb3IgJXMgd2l0aCBM
TFZNIGdlbmVyYXRlZCBjb2RlIGF0ICVwIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBl
KG1fcGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSwgZnVuY3Rp
b24pKSk7CiAgICAgCi0gICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShqaXRDb2RlLCB3
aXRoQXJpdHlDaGVjayk7CisgICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShqaXRDb2Rl
KTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSlNDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpTQ2FsbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpTQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRlRMSlNDYWxsLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitKU0NhbGw6OkpTQ2FsbCh1bnNpZ25lZCBz
dGFja21hcElELCBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4pCisgICAgOiBtX3N0YWNrbWFwSUQoc3RhY2ttYXBJRCkKKyAgICAsIG1fY2FsbFR5
cGUoY2FsbFR5cGUpCisgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKKyAgICAsIG1faW5z
dHJ1Y3Rpb25PZmZzZXQoMCkKK3sKK30KKwordm9pZCBKU0NhbGw6OmVtaXQoQ0NhbGxIZWxwZXJz
JiBqaXQpCit7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0
cldpdGhQYXRjaCgKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVn
VDAsIG1fdGFyZ2V0VG9DaGVjaywKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KDApKTsKKyAgICAKKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksCisg
ICAgICAgIEdQUkluZm86OnJlZ1QxKTsKKyAgICBqaXQuc3RvcmU2NCgKKyAgICAgICAgR1BSSW5m
bzo6cmVnVDEsCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEND
YWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsCisgICAgICAgICAgICBzaXplb2YoUmVn
aXN0ZXIpICogKEpTU3RhY2s6OlNjb3BlQ2hhaW4gLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBD
U2l6ZSkpKTsKKyAgICAKKyAgICBtX2Zhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOworICAgIAorICAgIHNsb3dQYXRoLmxp
bmsoJmppdCk7CisgICAgbV9zbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIAorICAgIGRv
bmUubGluaygmaml0KTsKK30KKwordm9pZCBKU0NhbGw6OmxpbmsoVk0mIHZtLCBMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyLCBDYWxsTGlua0luZm8mIGNhbGxJbmZvKQoreworICAgIFRodW5rR2VuZXJh
dG9yIGdlbmVyYXRvciA9IGxpbmtUaHVua0dlbmVyYXRvckZvcigKKyAgICAgICAgbV9jYWxsVHlw
ZSA9PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9y
Q2FsbCwKKyAgICAgICAgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKKyAgICAKKyAgICBsaW5rQnVm
ZmVyLmxpbmsoCisgICAgICAgIG1fc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLmdldENUSVN0dWIo
Z2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIAorICAgIGNhbGxJ
bmZvLmNhbGxUeXBlID0gbV9jYWxsVHlwZTsKKyAgICBjYWxsSW5mby5jb2RlT3JpZ2luID0gbV9j
b2RlT3JpZ2luOworICAgIGNhbGxJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZk5lYXJDYWxsKG1fc2xvd0NhbGwpOworICAgIGNhbGxJbmZvLmhvdFBhdGhCZWdp
biA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3RhcmdldFRvQ2hlY2spOworICAgIGNhbGxJbmZv
LmhvdFBhdGhPdGhlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fZmFzdENhbGwp
OworICAgIGNhbGxJbmZvLmNhbGxlZUdQUiA9IEdQUkluZm86OnJlZ1QwOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgRlRMSlNDYWxsX2gKKyNkZWZpbmUgRlRMSlNDYWxsX2gKKworI2lmIEVOQUJMRShGVExf
SklUKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZv
LmgiCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitjbGFzcyBKU0NhbGwgeworcHVibGlj
OgorICAgIEpTQ2FsbCh1bnNpZ25lZCBzdGFja21hcElELCBDYWxsTGlua0luZm86OkNhbGxUeXBl
LCBDb2RlT3JpZ2luKTsKKyAgICAKKyAgICB2b2lkIGVtaXQoQ0NhbGxIZWxwZXJzJik7CisgICAg
dm9pZCBsaW5rKFZNJiwgTGlua0J1ZmZlciYsIENhbGxMaW5rSW5mbyYpOworICAgIAorICAgIHVu
c2lnbmVkIHN0YWNrbWFwSUQoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrbWFwSUQ7IH0KKyAgICAK
KyAgICBib29sIG9wZXJhdG9yPChjb25zdCBKU0NhbGwmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1faW5zdHJ1Y3Rpb25PZmZzZXQgPCBvdGhlci5tX2luc3RydWN0aW9uT2Zm
c2V0OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9zdGFja21hcElEOwor
ICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgbV9jYWxsVHlwZTsKKyAgICBDb2RlT3JpZ2luIG1f
Y29kZU9yaWdpbjsKKyAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBtX3RhcmdldFRvQ2hl
Y2s7CisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG1fZmFzdENhbGw7CisgICAgQ0NhbGxIZWxwZXJz
OjpDYWxsIG1fc2xvd0NhbGw7CisKK3B1YmxpYzoKKyAgICB1aW50MzJfdCBtX2luc3RydWN0aW9u
T2Zmc2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExKU0NhbGxfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTYw
Nzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAg
ICAgICBtX2Z0bFN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKICAg
ICAgICAgbV9vdXQuY2FsbCgKLSAgICAgICAgICAgIG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCks
IG1fb3V0LmNvbnN0SW50MzIobV9mdGxTdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQpLAorICAgICAg
ICAgICAgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgbV9vdXQuY29uc3RJbnQ2NChtX2Z0bFN0
YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCksCiAgICAgICAgICAgICBtX291dC5pbnQzMlplcm8sIGNh
cHR1cmVkQWxsb2NhKTsKICAgICAgICAgCiAgICAgICAgIG1fY2FsbEZyYW1lID0gbV9vdXQucHRy
VG9JbnQoCkBAIC0xMjk3LDcgKzEyOTcsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAg
TFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKAogICAgICAgICAgICAgbV9vdXQucGF0Y2hwb2ludElu
dDY0SW50cmluc2ljKCksCi0gICAgICAgICAgICBtX291dC5jb25zdEludDMyKHN0YWNrbWFwSUQp
LCBtX291dC5jb25zdEludDMyKHNpemVPZkdldEJ5SWQoKSksCisgICAgICAgICAgICBtX291dC5j
b25zdEludDY0KHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkdldEJ5SWQoKSks
CiAgICAgICAgICAgICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0SW50MzIoMSks
IGJhc2UpOwogICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExM
Vk1BbnlSZWdDYWxsQ29udik7CiAgICAgICAgIHNldEpTVmFsdWUoY2FsbCk7CkBAIC0xMzIyLDcg
KzEzMjIsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291
dC5jYWxsKAogICAgICAgICAgICAgbV9vdXQucGF0Y2hwb2ludFZvaWRJbnRyaW5zaWMoKSwKLSAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIo
c2l6ZU9mUHV0QnlJZCgpKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoc3RhY2ttYXBJ
RCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mUHV0QnlJZCgpKSwKICAgICAgICAgICAgIGNvbnN0
TnVsbChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigyKSwgYmFzZSwgdmFsdWUpOwogICAg
ICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1BbnlSZWdDYWxs
Q29udik7CiAgICAgICAgIApAQCAtMjQzNywzNSArMjQzNyw0MCBAQCBwcml2YXRlOgogICAgIAog
ICAgIHZvaWQgY29tcGlsZUNhbGxPckNvbnN0cnVjdCgpCiAgICAgewotICAgICAgICAvLyBGSVhN
RTogVGhpcyBpcyB1bmFjY2VwdGFibHkgc2xvdy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMQorICAgICAgICBpbnQgZHVtbXlUaGlzQXJn
dW1lbnQgPSBtX25vZGUtPm9wKCkgPT0gQ2FsbCA/IDAgOiAxOworICAgICAgICBpbnQgbnVtUGFz
c2VkQXJncyA9IG1fbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CisgICAgICAgIGludCBudW1Bcmdz
ID0gbnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50OwogICAgICAgICAKLSAgICAgICAg
Sl9KSVRPcGVyYXRpb25fRSBmdW5jdGlvbiA9Ci0gICAgICAgICAgICBtX25vZGUtPm9wKCkgPT0g
Q2FsbCA/IG9wZXJhdGlvbkZUTENhbGwgOiBvcGVyYXRpb25GVExDb25zdHJ1Y3Q7CisgICAgICAg
IExWYWx1ZSBjYWxsZWUgPSBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAw
KSk7CiAgICAgICAgIAotICAgICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBtX25vZGUtPm9w
KCkgPT0gQ2FsbCA/IDAgOiAxOworICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFj
a21hcElEcysrOwogICAgICAgICAKLSAgICAgICAgaW50IG51bVBhc3NlZEFyZ3MgPSBtX25vZGUt
Pm51bUNoaWxkcmVuKCkgLSAxOworICAgICAgICBWZWN0b3I8TFZhbHVlPiBhcmd1bWVudHM7Cisg
ICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSk7Cisg
ICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMihzaXplT2ZDYWxsKCkpKTsK
KyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjb25zdE51bGwobV9vdXQucmVmOCkpOworICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50MzIoMSArIEpTU3RhY2s6OkNhbGxGcmFt
ZUhlYWRlclNpemUgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSArIG51bUFyZ3MpKTsK
KyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjYWxsZWUpOyAvLyBjYWxsZWUgLT4gJXJkaQorICAg
ICAgICBhcmd1bWVudHMuYXBwZW5kKGdldFVuZGVmKG1fb3V0LmludDY0KSk7IC8vIGNvZGUgYmxv
Y2sKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChnZXRVbmRlZihtX291dC5pbnQ2NCkpOyAvLyBz
Y29wZSBjaGFpbgorICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNhbGxlZSk7IC8vIGNhbGxlZSAt
PiBzdGFjaworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50NjQobnVtQXJn
cykpOyAvLyBhcmd1bWVudCBjb3VudCBhbmQgemVyb3MgZm9yIHRoZSB0YWcKKyAgICAgICAgaWYg
KGR1bW15VGhpc0FyZ3VtZW50KQorICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChnZXRVbmRl
ZihtX291dC5pbnQ2NCkpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFy
Z3M7ICsraSkKKyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobG93SlNWYWx1ZShtX2dyYXBo
LnZhckFyZ0NoaWxkKG1fbm9kZSwgMSArIGkpKSk7CiAgICAgICAgIAotICAgICAgICBMVmFsdWUg
Y2FsbGVlRnJhbWUgPSBtX291dC5hZGQoCi0gICAgICAgICAgICBtX2NhbGxGcmFtZSwKLSAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihSZWdpc3RlcikgKiB2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChtX2dyYXBoLmZyYW1lUmVnaXN0ZXJDb3VudCgpKS5vZmZzZXQoKSkpOworICAg
ICAgICBjYWxsUHJlZmxpZ2h0KCk7CiAgICAgICAgIAotICAgICAgICBtX291dC5zdG9yZTMyKAot
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlzQXJn
dW1lbnQpLAotICAgICAgICAgICAgcGF5bG9hZEZvcihjYWxsZWVGcmFtZSwgSlNTdGFjazo6QXJn
dW1lbnRDb3VudCkpOwotICAgICAgICBtX291dC5zdG9yZTY0KG1fY2FsbEZyYW1lLCBjYWxsZWVG
cmFtZSwgbV9oZWFwcy5DYWxsRnJhbWVfY2FsbGVyRnJhbWUpOwotICAgICAgICBtX291dC5zdG9y
ZTY0KAotICAgICAgICAgICAgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwg
MCkpLAotICAgICAgICAgICAgYWRkcmVzc0ZvcihjYWxsZWVGcmFtZSwgSlNTdGFjazo6Q2FsbGVl
KSk7CisgICAgICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2FsbChtX291dC5wYXRjaHBvaW50SW50
NjRJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKKyAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5n
Q29udmVudGlvbihjYWxsLCBMTFZNV2ViS2l0SlNDYWxsQ29udik7CiAgICAgICAgIAotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewotICAgICAgICAgICAg
bV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobV9ub2RlLCAxICsgaSkpLAotICAgICAgICAgICAgICAgIGFkZHJlc3NGb3IoY2FsbGVl
RnJhbWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkgKyBkdW1teVRoaXNBcmd1bWVudCku
b2Zmc2V0KCkpKTsKLSAgICAgICAgfQorICAgICAgICBtX2Z0bFN0YXRlLmpzQ2FsbHMuYXBwZW5k
KEpTQ2FsbCgKKyAgICAgICAgICAgIHN0YWNrbWFwSUQsCisgICAgICAgICAgICBtX25vZGUtPm9w
KCkgPT0gQ2FsbCA/IENhbGxMaW5rSW5mbzo6Q2FsbCA6IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0
LAorICAgICAgICAgICAgbV9ub2RlLT5jb2RlT3JpZ2luKSk7CiAgICAgICAgIAotICAgICAgICBz
ZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5vcGVyYXRpb24oZnVuY3Rpb24pLCBjYWxsZWVGcmFtZSkp
OworICAgICAgICBzZXRKU1ZhbHVlKGNhbGwpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBp
bGVKdW1wKCkKQEAgLTQwOTIsNyArNDA5Nyw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBl
eGl0Lm1fc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKICAgICAgICAgYXJndW1lbnRzLmlu
c2VydCgwLCBtX291dC5jb25zdEludDMyKE1hY3JvQXNzZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1l
bnRTaXplKCkpKTsKLSAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBtX291dC5jb25zdEludDMy
KGV4aXQubV9zdGFja21hcElEKSk7CisgICAgICAgIGFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQu
Y29uc3RJbnQ2NChleGl0Lm1fc3RhY2ttYXBJRCkpOwogICAgICAgICAKICAgICAgICAgbV9vdXQu
Y2FsbChtX291dC5zdGFja21hcEludHJpbnNpYygpLCBhcmd1bWVudHMpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCShyZXZpc2lvbiAxNjA3
OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lID0gZGZnQ29kZUJs
b2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9
IGRmZ0NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7CiAgICAgREZHOjpKSVRDb2RlKiBkZmdD
b2RlID0gZGZnQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOwogICAgIEZvck9TUkVudHJ5SklU
Q29kZSogZW50cnlDb2RlID0gZW50cnlDb2RlQmxvY2stPmppdENvZGUoKS0+ZnRsRm9yT1NSRW50
cnkoKTsKICAgICAKQEAgLTg3LDcgKzg4LDkgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KAogICAg
IAogICAgIGV4ZWMtPnNldENvZGVCbG9jayhlbnRyeUNvZGVCbG9jayk7CiAgICAgCi0gICAgdm9p
ZCogcmVzdWx0ID0gZW50cnlDb2RlLT5hZGRyZXNzRm9yQ2FsbCgpLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CisgICAgdm9pZCogcmVzdWx0ID0gZW50cnlDb2RlLT5hZGRyZXNzRm9yQ2FsbCgKKyAgICAg
ICAgdm0sIGV4ZWN1dGFibGUsIEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCwKKyAgICAgICAgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICBkYXRhTG9nKCIgICAgRW50cnkgd2lsbCBz
dWNjZWVkLCBnb2luZyB0byBhZGRyZXNzIiwgUmF3UG9pbnRlcihyZXN1bHQpLCAiXG4iKTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAJKHJl
dmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksOSBAQCB2b2lkIFN0YWNrTWFwczo6TG9j
YXRpb246OnJlc3RvcmVJbnRvKAogCiBib29sIFN0YWNrTWFwczo6UmVjb3JkOjpwYXJzZShEYXRh
VmlldyogdmlldywgdW5zaWduZWQmIG9mZnNldCkKIHsKLSAgICBwYXRjaHBvaW50SUQgPSB2aWV3
LT5yZWFkPHVpbnQzMl90PihvZmZzZXQsIHRydWUpOworICAgIGludDY0X3QgaWQgPSB2aWV3LT5y
ZWFkPGludDY0X3Q+KG9mZnNldCwgdHJ1ZSk7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludDMy
X3Q+KGlkKSA9PSBpZCk7CisgICAgcGF0Y2hwb2ludElEID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KGlkKTsKICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocGF0Y2hwb2ludElEKSA8IDApCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKQEAgLTkwLDYgKzkyLDEzIEBAIGJvb2wgU3RhY2tN
YXBzOjpSZWNvcmQ6OnBhcnNlKERhdGFWaWV3KiAKICAgICB3aGlsZSAobGVuZ3RoLS0pCiAgICAg
ICAgIGxvY2F0aW9ucy5hcHBlbmQocmVhZE9iamVjdDxMb2NhdGlvbj4odmlldywgb2Zmc2V0KSk7
CiAgICAgCisgICAgdW5zaWduZWQgbnVtTGl2ZU91dHMgPSB2aWV3LT5yZWFkPHVpbnQxNl90Pihv
ZmZzZXQsIHRydWUpOworICAgIHdoaWxlIChudW1MaXZlT3V0cy0tKSB7CisgICAgICAgIHZpZXct
PnJlYWQ8dWludDE2X3Q+KG9mZnNldCwgdHJ1ZSk7IC8vIHJlZ251bQorICAgICAgICB2aWV3LT5y
ZWFkPHVpbnQ4X3Q+KG9mZnNldCwgdHJ1ZSk7IC8vIHJlc2VydmVkCisgICAgICAgIHZpZXctPnJl
YWQ8dWludDhfdD4ob2Zmc2V0LCB0cnVlKTsgLy8gc2l6ZSBpbiBieXRlcworICAgIH0KKyAgICAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3Rh
dGUuaAkocmV2aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiRlRMSW5s
aW5lQ2FjaGVEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgogI2luY2x1ZGUg
IkZUTEpJVEZpbmFsaXplci5oIgorI2luY2x1ZGUgIkZUTEpTQ2FsbC5oIgogI2luY2x1ZGUgIkZU
TFN0YWNrTWFwcy5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCkBAIC02MCw2ICs2
MSw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBjYXB0dXJlZFN0YWNrbWFwSUQ7CiAgICAgU2Vn
bWVudGVkVmVjdG9yPEdldEJ5SWREZXNjcmlwdG9yPiBnZXRCeUlkczsKICAgICBTZWdtZW50ZWRW
ZWN0b3I8UHV0QnlJZERlc2NyaXB0b3I+IHB1dEJ5SWRzOworICAgIFZlY3RvcjxKU0NhbGw+IGpz
Q2FsbHM7CiAgICAgVmVjdG9yPENTdHJpbmc+IGNvZGVTZWN0aW9uTmFtZXM7CiAgICAgVmVjdG9y
PENTdHJpbmc+IGRhdGFTZWN0aW9uTmFtZXM7CiAgICAgUmVmQ291bnRlZEFycmF5PExTZWN0aW9u
V29yZD4gc3RhY2ttYXBzU2VjdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJ
KHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzA0LDggKzcwNCw3IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6
cHJpdmF0ZUNvbXBpbGUoSkkKICAgICAKICAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQoQ29k
ZUJsb2NrOjpMYXRlU2hyaW5rKTsKICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAg
ICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCBKSVRDb2RlOjpCYXNlbGluZUpJ
VCkpLAotICAgICAgICB3aXRoQXJpdHlDaGVjayk7CisgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJl
Y3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVENvZGU6OkJhc2VsaW5lSklUKSkp
OwogICAgIAogI2lmIEVOQUJMRShKSVRfVkVSQk9TRSkKICAgICBkYXRhTG9nRigiSklUIGdlbmVy
YXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fY29kZUJsb2NrLCByZXN1bHQuZXhl
Y3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmQo
KSk7CkBAIC03MTQsNDIgKzcxMyw2IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNv
bXBpbGUoSkkKICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwogfQogCi12b2lkIEpJ
VDo6bGlua0ZvcihFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGNhbGxlZSwgQ29kZUJsb2Nr
KiBjYWxsZXJDb2RlQmxvY2ssIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBKSVQ6OkNvZGVQ
dHIgY29kZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIFZNKiB2bSwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kKQotewotICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxs
ZXJDb2RlQmxvY2spOwotCi0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8tPmlzTGlua2VkKCkpOwot
ICAgIGNhbGxMaW5rSW5mby0+Y2FsbGVlLnNldCgqdm0sIGNhbGxMaW5rSW5mby0+aG90UGF0aEJl
Z2luLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwotICAgIGNh
bGxMaW5rSW5mby0+bGFzdFNlZW5DYWxsZWUuc2V0KCp2bSwgY2FsbGVyQ29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlu
a0luZm8tPmhvdFBhdGhPdGhlciwgY29kZSk7Ci0KLSAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQot
ICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoZXhlYywgY2FsbExpbmtJ
bmZvKTsKLQotICAgIC8vIFBhdGNoIHRoZSBzbG93IHBhdGNoIHNvIHdlIGRvIG5vdCBjb250aW51
ZSB0byB0cnkgdG8gbGluay4KLSAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewotICAgICAg
ICBBU1NFUlQoY2FsbExpbmtJbmZvLT5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGwKLSAg
ICAgICAgICAgICAgIHx8IGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpD
YWxsVmFyYXJncyk7Ci0gICAgICAgIGlmIChjYWxsTGlua0luZm8tPmNhbGxUeXBlID09IENhbGxM
aW5rSW5mbzo6Q2FsbCkgewotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExp
bmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2Fs
bFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJu
TG9jYXRpb24sIHZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUo
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9y
Q29uc3RydWN0KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxS
ZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJh
dG9yKS5jb2RlKCkpOwotfQotCi12b2lkIEpJVDo6bGlua1Nsb3dDYWxsKENvZGVCbG9jayogY2Fs
bGVyQ29kZUJsb2NrLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKLXsKLSAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKLQotICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBjYWxsZXJDb2RlQmxv
Y2stPnZtKCktPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsK
LX0KLQogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQogewogICAg
IGlmIChtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpICYmIG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENh
bGxGcmFtZVJvbGxiYWNrLmVtcHR5KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJl
dmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTI0MSw5ICsyNDEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IHJldHVybiBqaXQucHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKHZtLCBmdW5jKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHN0YXRpYyB2b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiwgSlNGdW5jdGlv
biogY2FsbGVlLCBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jaywgQ29kZUJsb2NrKiBjYWxsZWVD
b2RlQmxvY2ssIENvZGVQdHIsIENhbGxMaW5rSW5mbyosIFZNKiwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGxpbmtTbG93Q2FsbChDb2RlQmxvY2sqIGNhbGxl
ckNvZGVCbG9jaywgQ2FsbExpbmtJbmZvKik7Ci0gICAgICAgIAogICAgICAgICBzdGF0aWMgdW5z
aWduZWQgZnJhbWVSZWdpc3RlckNvdW50Rm9yKENvZGVCbG9jayopOwogCiAgICAgcHJpdmF0ZToK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlz
aW9uIDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbFNsb3dDYXNlKE9wY29kZUlECiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsKIAotICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwob3Bj
b2RlSUQgPT0gb3BfY29uc3RydWN0ID8gbV92bS0+Z2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1
bmtHZW5lcmF0b3IpLmNvZGUoKSA6IG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVy
YXRvcikuY29kZSgpKTsKKyAgICBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IgPSBsaW5rQ2FsbFRo
dW5rR2VuZXJhdG9yRm9yKAorICAgICAgICBvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBDb2Rl
Rm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwsCisgICAgICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9u
Tm90UmVxdWlyZWQpOworICAgIAorICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwo
bV92bS0+Z2V0Q1RJU3R1YihnZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBzYW1wbGVDb2RlQmxv
Y2sobV9jb2RlQmxvY2spOwogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGluc3RydWN0aW9uKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMTYwNzk0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjI3LDcgKzIyNywxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29k
ZUlECiAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKDE2KSwgcmVnVDEsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKIAotICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwob3Bjb2RlSUQg
PT0gb3BfY29uc3RydWN0ID8gbV92bS0+Z2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5l
cmF0b3IpLmNvZGUoKSA6IG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvciku
Y29kZSgpKTsKKyAgICBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IgPSBsaW5rVGh1bmtHZW5lcmF0
b3JGb3IoCisgICAgICAgIG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IENvZGVGb3JDb25zdHJ1
Y3QgOiBDb2RlRm9yQ2FsbCwKKyAgICAgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJl
ZCk7CisgICAgCisgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRD
VElTdHViKGdlbmVyYXRvcikuY29kZSgpKTsKIAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLWZy
YW1lUmVnaXN0ZXJDb3VudEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9p
bnRlckFsaWdubWVudCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3Bw
CShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJMTEludFRo
dW5rcy5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJSZWdpc3RlclByZXNl
cnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC03Myw1MCArNzQsMzggQEAgRlRMOjpGb3JPU1JFbnRyeUpJ
VENvZGUqIEpJVENvZGU6OmZ0bEZvcgogCiBQYXNzUmVmUHRyPEpJVENvZGU+IEpJVENvZGU6Omhv
c3RGdW5jdGlvbihKSVRDb2RlOjpDb2RlUmVmIGNvZGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBEaXJlY3RKSVRDb2RlKGNvZGUsIEhvc3RDYWxsVGh1bmspKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE5hdGl2ZUpJVENvZGUoY29kZSwgSG9zdENhbGxUaHVuaykpOwogfQogCi1EaXJl
Y3RKSVRDb2RlOjpEaXJlY3RKSVRDb2RlKEpJVFR5cGUgaml0VHlwZSkKK0pJVENvZGVXaXRoQ29k
ZVJlZjo6SklUQ29kZVdpdGhDb2RlUmVmKEpJVFR5cGUgaml0VHlwZSkKICAgICA6IEpJVENvZGUo
aml0VHlwZSkKIHsKIH0KIAotRGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZShjb25zdCBKSVRD
b2RlOjpDb2RlUmVmIHJlZiwgSklUVHlwZSBqaXRUeXBlKQorSklUQ29kZVdpdGhDb2RlUmVmOjpK
SVRDb2RlV2l0aENvZGVSZWYoQ29kZVJlZiByZWYsIEpJVFR5cGUgaml0VHlwZSkKICAgICA6IEpJ
VENvZGUoaml0VHlwZSkKICAgICAsIG1fcmVmKHJlZikKIHsKIH0KIAotRGlyZWN0SklUQ29kZTo6
fkRpcmVjdEpJVENvZGUoKQorSklUQ29kZVdpdGhDb2RlUmVmOjp+SklUQ29kZVdpdGhDb2RlUmVm
KCkKIHsKIH0KIAotdm9pZCBEaXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZihjb25zdCBK
SVRDb2RlOjpDb2RlUmVmIHJlZikKLXsKLSAgICBSRUxFQVNFX0FTU0VSVCghbV9yZWYpOwotICAg
IG1fcmVmID0gcmVmOwotfQotCi1KSVRDb2RlOjpDb2RlUHRyIERpcmVjdEpJVENvZGU6OmFkZHJl
c3NGb3JDYWxsKCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3JlZik7Ci0gICAgcmV0dXJuIG1f
cmVmLmNvZGUoKTsKLX0KLQotdm9pZCogRGlyZWN0SklUQ29kZTo6ZXhlY3V0YWJsZUFkZHJlc3NB
dE9mZnNldChzaXplX3Qgb2Zmc2V0KQordm9pZCogSklUQ29kZVdpdGhDb2RlUmVmOjpleGVjdXRh
YmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQo
bV9yZWYpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihtX3JlZi5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSkgKyBvZmZzZXQ7CiB9CiAKLXZvaWQqIERpcmVjdEpJVENvZGU6
OmRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkKK3ZvaWQqIEpJVENvZGVXaXRoQ29k
ZVJlZjo6ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKG1fcmVmKTsKICAgICBBU1NFUlQob2Zmc2V0IDw9IHNpemUoKSk7IC8vIHVzZSA8PSBp
bnN0ZWFkIG9mIDwgYmVjYXVzZSBpdCBpcyB2YWxpZCB0byBhc2sgZm9yIGFuIGFkZHJlc3MgYXQg
dGhlIGV4Y2x1c2l2ZSBlbmQgb2YgdGhlIGNvZGUuCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KG1fcmVmLmNvZGUoKS5kYXRhTG9jYXRpb24oKSkgKyBvZmZzZXQ7CiB9CiAKLXVu
c2lnbmVkIERpcmVjdEpJVENvZGU6Om9mZnNldE9mKHZvaWQqIHBvaW50ZXJJbnRvQ29kZSkKK3Vu
c2lnbmVkIEpJVENvZGVXaXRoQ29kZVJlZjo6b2Zmc2V0T2Yodm9pZCogcG9pbnRlckludG9Db2Rl
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKICAgICBpbnRwdHJfdCByZXN1bHQgPSBy
ZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVySW50b0NvZGUpIC0gcmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4obV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwpAQCAtMTI0
LDE4ICsxMTMsMTA3IEBAIHVuc2lnbmVkIERpcmVjdEpJVENvZGU6Om9mZnNldE9mKHZvaWQqIHAK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdCk7CiB9CiAKLXNpemVfdCBE
aXJlY3RKSVRDb2RlOjpzaXplKCkKK3NpemVfdCBKSVRDb2RlV2l0aENvZGVSZWY6OnNpemUoKQog
ewogICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKICAgICByZXR1cm4gbV9yZWYuc2l6ZSgpOwog
fQogCi1ib29sIERpcmVjdEpJVENvZGU6OmNvbnRhaW5zKHZvaWQqIGFkZHJlc3MpCitib29sIEpJ
VENvZGVXaXRoQ29kZVJlZjo6Y29udGFpbnModm9pZCogYWRkcmVzcykKIHsKICAgICBSRUxFQVNF
X0FTU0VSVChtX3JlZik7CiAgICAgcmV0dXJuIG1fcmVmLmV4ZWN1dGFibGVNZW1vcnkoKS0+Y29u
dGFpbnMoYWRkcmVzcyk7CiB9CiAKK0RpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUoSklUVHlw
ZSBqaXRUeXBlKQorICAgIDogSklUQ29kZVdpdGhDb2RlUmVmKGppdFR5cGUpCit7Cit9CisKK0Rp
cmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUoCisgICAgSklUQ29kZTo6Q29kZVJlZiByZWYsIEpJ
VENvZGU6OkNvZGVQdHIgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGUgaml0VHlwZSkKKyAgICA6IEpJ
VENvZGVXaXRoQ29kZVJlZihyZWYsIGppdFR5cGUpCisgICAgLCBtX3dpdGhBcml0eUNoZWNrKHdp
dGhBcml0eUNoZWNrKQoreworfQorCitEaXJlY3RKSVRDb2RlOjp+RGlyZWN0SklUQ29kZSgpCit7
Cit9CisKK3ZvaWQgRGlyZWN0SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWYoSklUQ29kZTo6Q29k
ZVJlZiByZWYsIEpJVENvZGU6OkNvZGVQdHIgd2l0aEFyaXR5Q2hlY2spCit7CisgICAgUkVMRUFT
RV9BU1NFUlQoIW1fcmVmKTsKKyAgICBtX3JlZiA9IHJlZjsKKyAgICBtX3dpdGhBcml0eUNoZWNr
ID0gd2l0aEFyaXR5Q2hlY2s7Cit9CisKK0RpcmVjdEpJVENvZGU6OlJlZ2lzdGVyUHJlc2VydmF0
aW9uV3JhcHBlcnMqIERpcmVjdEpJVENvZGU6OmVuc3VyZVdyYXBwZXJzKCkKK3sKKyAgICBpZiAo
IW1fd3JhcHBlcnMpCisgICAgICAgIG1fd3JhcHBlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZ2lz
dGVyUHJlc2VydmF0aW9uV3JhcHBlcnM+KCk7CisgICAgcmV0dXJuIG1fd3JhcHBlcnMuZ2V0KCk7
Cit9CisKK0pJVENvZGU6OkNvZGVQdHIgRGlyZWN0SklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoCisg
ICAgVk0mIHZtLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgQXJpdHlDaGVja01vZGUgYXJp
dHksCisgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sKKyAgICBzd2l0
Y2ggKGFyaXR5KSB7CisgICAgY2FzZSBBcml0eUNoZWNrTm90UmVxdWlyZWQ6CisgICAgICAgIHN3
aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RS
ZXF1aXJlZDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKKyAgICAgICAgICAg
IHJldHVybiBtX3JlZi5jb2RlKCk7CisgICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJz
OiB7CisgICAgICAgICAgICBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJzKiB3cmFwcGVycyA9
IGVuc3VyZVdyYXBwZXJzKCk7CisgICAgICAgICAgICBpZiAoIXdyYXBwZXJzLT53aXRob3V0QXJp
dHlDaGVjaykKKyAgICAgICAgICAgICAgICB3cmFwcGVycy0+d2l0aG91dEFyaXR5Q2hlY2sgPSBn
ZW5lcmF0ZVdyYXBwZXIodm0sIGV4ZWN1dGFibGUsIG1fcmVmLmNvZGUoKSk7CisgICAgICAgICAg
ICByZXR1cm4gd3JhcHBlcnMtPndpdGhvdXRBcml0eUNoZWNrLmNvZGUoKTsKKyAgICAgICAgfSB9
CisgICAgY2FzZSBNdXN0Q2hlY2tBcml0eToKKyAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsK
KyAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobV93aXRoQXJpdHlDaGVjayk7CisgICAgICAgICAgICByZXR1cm4g
bV93aXRoQXJpdHlDaGVjazsKKyAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6IHsK
KyAgICAgICAgICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlcnMqIHdyYXBwZXJzID0gZW5z
dXJlV3JhcHBlcnMoKTsKKyAgICAgICAgICAgIGlmICghd3JhcHBlcnMtPndpdGhBcml0eUNoZWNr
KQorICAgICAgICAgICAgICAgIHdyYXBwZXJzLT53aXRoQXJpdHlDaGVjayA9IGdlbmVyYXRlV3Jh
cHBlcih2bSwgZXhlY3V0YWJsZSwgbV93aXRoQXJpdHlDaGVjayk7CisgICAgICAgICAgICByZXR1
cm4gd3JhcHBlcnMtPndpdGhBcml0eUNoZWNrLmNvZGUoKTsKKyAgICAgICAgfSB9CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIENvZGVQdHIoKTsK
K30KKworTmF0aXZlSklUQ29kZTo6TmF0aXZlSklUQ29kZShKSVRUeXBlIGppdFR5cGUpCisgICAg
OiBKSVRDb2RlV2l0aENvZGVSZWYoaml0VHlwZSkKK3sKK30KKworTmF0aXZlSklUQ29kZTo6TmF0
aXZlSklUQ29kZShDb2RlUmVmIHJlZiwgSklUVHlwZSBqaXRUeXBlKQorICAgIDogSklUQ29kZVdp
dGhDb2RlUmVmKHJlZiwgaml0VHlwZSkKK3sKK30KKworTmF0aXZlSklUQ29kZTo6fk5hdGl2ZUpJ
VENvZGUoKQoreworfQorCit2b2lkIE5hdGl2ZUpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmKENv
ZGVSZWYgcmVmKQoreworICAgIEFTU0VSVCghbV9yZWYpOworICAgIG1fcmVmID0gcmVmOworfQor
CitKSVRDb2RlOjpDb2RlUHRyIE5hdGl2ZUpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKAorICAgIFZN
JiwgRXhlY3V0YWJsZUJhc2UqLCBBcml0eUNoZWNrTW9kZSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25N
b2RlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCEhbV9yZWYpOworICAgIHJldHVybiBtX3JlZi5j
b2RlKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQg
KzI2LDE0IEBACiAjaWZuZGVmIEpJVENvZGVfaAogI2RlZmluZSBKSVRDb2RlX2gKIAotI2lmIEVO
QUJMRShKSVQpIHx8IEVOQUJMRShMTElOVCkKKyNpbmNsdWRlICJBcml0eUNoZWNrTW9kZS5oIgog
I2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogI2luY2x1
ZGUgIkpJVFN0dWJzLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkxlZ2Fj
eVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCi0jZW5kaWYK
KyNpbmNsdWRlICJSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7
CiAKQEAgLTE2NCw3ICsxNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBqaXRDb2RlLT5q
aXRUeXBlKCk7CiAgICAgfQogICAgIAotICAgIHZpcnR1YWwgQ29kZVB0ciBhZGRyZXNzRm9yQ2Fs
bCgpID0gMDsKKyAgICB2aXJ0dWFsIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoVk0mLCBFeGVjdXRh
YmxlQmFzZSosIEFyaXR5Q2hlY2tNb2RlLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNl
dCkgPSAwOwogICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzKCkgeyByZXR1cm4gZXhlY3V0YWJs
ZUFkZHJlc3NBdE9mZnNldCgwKTsgfQogICAgIHZpcnR1YWwgdm9pZCogZGF0YUFkZHJlc3NBdE9m
ZnNldChzaXplX3Qgb2Zmc2V0KSA9IDA7CkBAIC0xODksMjUgKzE4OSw1OCBAQCBwcml2YXRlOgog
ICAgIEpJVFR5cGUgbV9qaXRUeXBlOwogfTsKIAotY2xhc3MgRGlyZWN0SklUQ29kZSA6IHB1Ymxp
YyBKSVRDb2RlIHsKK2NsYXNzIEpJVENvZGVXaXRoQ29kZVJlZiA6IHB1YmxpYyBKSVRDb2RlIHsK
K3Byb3RlY3RlZDoKKyAgICBKSVRDb2RlV2l0aENvZGVSZWYoSklUVHlwZSk7CisgICAgSklUQ29k
ZVdpdGhDb2RlUmVmKENvZGVSZWYsIEpJVFR5cGUpOworCiBwdWJsaWM6Ci0gICAgRGlyZWN0SklU
Q29kZShKSVRUeXBlKTsKLSAgICBEaXJlY3RKSVRDb2RlKGNvbnN0IENvZGVSZWYsIEpJVFR5cGUp
OwotICAgIHZpcnR1YWwgfkRpcmVjdEpJVENvZGUoKTsKLSAgICAKLSAgICB2b2lkIGluaXRpYWxp
emVDb2RlUmVmKENvZGVSZWYgcmVmKTsKKyAgICB2aXJ0dWFsIH5KSVRDb2RlV2l0aENvZGVSZWYo
KTsKIAotICAgIHZpcnR1YWwgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbCgpIE9WRVJSSURFOwogICAg
IHZpcnR1YWwgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSBP
VkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQqIGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9m
ZnNldCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBvZmZzZXRPZih2b2lkKiBwb2lu
dGVySW50b0NvZGUpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgc2l6ZV90IHNpemUoKSBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnModm9pZCopIE9WRVJSSURFOwogCi1wcml2YXRl
OgorcHJvdGVjdGVkOgogICAgIENvZGVSZWYgbV9yZWY7CiB9OwogCitjbGFzcyBEaXJlY3RKSVRD
b2RlIDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7CitwdWJsaWM6CisgICAgRGlyZWN0SklU
Q29kZShKSVRUeXBlKTsKKyAgICBEaXJlY3RKSVRDb2RlKENvZGVSZWYsIENvZGVQdHIgd2l0aEFy
aXR5Q2hlY2ssIEpJVFR5cGUpOworICAgIHZpcnR1YWwgfkRpcmVjdEpJVENvZGUoKTsKKyAgICAK
KyAgICB2b2lkIGluaXRpYWxpemVDb2RlUmVmKENvZGVSZWYgcmVmLCBDb2RlUHRyIHdpdGhBcml0
eUNoZWNrKTsKKworICAgIHZpcnR1YWwgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbChWTSYsIEV4ZWN1
dGFibGVCYXNlKiwgQXJpdHlDaGVja01vZGUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSkgT1ZF
UlJJREU7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBl
cnMgeworICAgICAgICBDb2RlUmVmIHdpdGhvdXRBcml0eUNoZWNrOworICAgICAgICBDb2RlUmVm
IHdpdGhBcml0eUNoZWNrOworICAgIH07CisKKyAgICBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBw
ZXJzKiBlbnN1cmVXcmFwcGVycygpOworICAgIAorICAgIENvZGVQdHIgbV93aXRoQXJpdHlDaGVj
azsKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVy
cz4gbV93cmFwcGVyczsKK307CisKK2NsYXNzIE5hdGl2ZUpJVENvZGUgOiBwdWJsaWMgSklUQ29k
ZVdpdGhDb2RlUmVmIHsKK3B1YmxpYzoKKyAgICBOYXRpdmVKSVRDb2RlKEpJVFR5cGUpOworICAg
IE5hdGl2ZUpJVENvZGUoQ29kZVJlZiwgSklUVHlwZSk7CisgICAgdmlydHVhbCB+TmF0aXZlSklU
Q29kZSgpOworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGVSZWYoQ29kZVJlZiByZWYpOwor
CisgICAgdmlydHVhbCBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKFZNJiwgRXhlY3V0YWJsZUJhc2Uq
LCBBcml0eUNoZWNrTW9kZSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlKSBPVkVSUklERTsKK307
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTYwNzk0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjg1LDcgKzY4NSw4IEBAIHN0YXRpYyB2b2lkKiBoYW5kbGVIb3N0Q2FsbChFeGVj
U3RhdGUqIGUKICAgICByZXR1cm4gdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIH0KIAotaW5s
aW5lIGNoYXIqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCitpbmxpbmUgY2hhciogbGlua0ZvcigKKyAgICBFeGVjU3RhdGUqIGV4ZWND
YWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25N
b2RlIHJlZ2lzdGVycykKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxs
ZXJGcmFtZSgpOwogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpAQCAtNzAzLDkgKzcwNCw5IEBA
IGlubGluZSBjaGFyKiBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGwKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgY29kZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7CiAgICAg
Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0Q2FsbExp
bmtJbmZvKGV4ZWNDYWxsZWUtPnJldHVyblBDKCkpOwotICAgIGlmIChleGVjdXRhYmxlLT5pc0hv
c3RGdW5jdGlvbigpKQotICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklU
Q29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoKTsKLSAgICBlbHNlIHsKKyAgICBpZiAoZXhl
Y3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgeworICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJs
ZS0+ZW50cnlwb2ludEZvcigqdm0sIGtpbmQsIE11c3RDaGVja0FyaXR5LCByZWdpc3RlcnMpOwor
ICAgIH0gZWxzZSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRh
YmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAgICAg
ICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1
dGlvbihleGVjQ2FsbGVlLCBjYWxsZWUtPnNjb3BlKCksIGtpbmQpOwogICAgICAgICBpZiAoZXJy
b3IpIHsKQEAgLTcxMywyOSArNzE0LDQzIEBAIGlubGluZSBjaGFyKiBsaW5rRm9yKEV4ZWNTdGF0
ZSogZXhlY0NhbGwKICAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih2
bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgfQogICAgICAgICBjb2RlQmxvY2sg
PSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKTsKKyAgICAgICAgQXJpdHlD
aGVja01vZGUgYXJpdHk7CiAgICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSkgfHwgY2FsbExpbmtJbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFy
Z3MpCi0gICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRK
SVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCk7CisgICAgICAgICAgICBhcml0eSA9IE11c3RD
aGVja0FyaXR5OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25F
eGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOwor
ICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7CisgICAgICAgIGNvZGVQ
dHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3IoKnZtLCBraW5kLCBhcml0eSwg
cmVnaXN0ZXJzKTsKICAgICB9CiAgICAgaWYgKCFjYWxsTGlua0luZm8uc2Vlbk9uY2UoKSkKICAg
ICAgICAgY2FsbExpbmtJbmZvLnNldFNlZW4oKTsKICAgICBlbHNlCi0gICAgICAgIGxpbmtGb3Io
ZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwga2lu
ZCk7CisgICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ss
IGNhbGxlZSwgY29kZVB0ciwga2luZCwgcmVnaXN0ZXJzKTsKICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKIH0KIAogY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCiB7
Ci0gICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwpOworICAgIHJldHVy
biBsaW5rRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNlcnZhdGlvbk5v
dFJlcXVpcmVkKTsKIH0KIAogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3Ry
dWN0KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKIHsKLSAgICByZXR1cm4gbGlua0ZvcihleGVjQ2Fs
bGVlLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBD
b2RlRm9yQ29uc3RydWN0LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKK30KKwor
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4
ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBD
b2RlRm9yQ2FsbCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKIH0KIAotaW5saW5lIGNoYXIqIHZp
cnR1YWxGb3JXaXRoRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQsIEpTQ2VsbComIGNhbGxlZUFzRnVuY3Rpb25DZWxsKQorY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0
YXRlKiBleGVjQ2FsbGVlKQoreworICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIENvZGVG
b3JDb25zdHJ1Y3QsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7Cit9CisKK2lubGluZSBjaGFyKiB2
aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKAorICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJz
LAorICAgIEpTQ2VsbComIGNhbGxlZUFzRnVuY3Rpb25DZWxsKQogewogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CkBAIC03NTcsMTYgKzc3MiwyMCBAQCBpbmxpbmUgY2hhciogdmlydHVhbEZvcldpdGhGdW5j
dGlvbihFeGVjCiAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0t
PmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVXaXRoQXJp
dHlDaGVja0ZvcihraW5kKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigKKyAgICAgICAgKnZt
LCBraW5kLCBNdXN0Q2hlY2tBcml0eSwgcmVnaXN0ZXJzKS5leGVjdXRhYmxlQWRkcmVzcygpKTsK
IH0KIAotaW5saW5lIGNoYXIqIHZpcnR1YWxGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitpbmxpbmUgY2hhciogdmlydHVhbEZvcigKKyAgICBF
eGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVu
Y3Rpb25DZWxsSWdub3JlZDsKLSAgICByZXR1cm4gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVj
Q2FsbGVlLCBraW5kLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQpOworICAgIHJldHVybiB2
aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGtpbmQsIHJlZ2lzdGVycywgY2FsbGVl
QXNGdW5jdGlvbkNlbGxJZ25vcmVkKTsKIH0KIAotc3RhdGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1p
emVDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEpTQ2VsbCogY2FsbGVlQXNGdW5j
dGlvbkNlbGwsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQorc3RhdGljIGJvb2wgYXR0ZW1w
dFRvT3B0aW1pemVDbG9zdXJlQ2FsbCgKKyAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMsIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNl
bGwsCisgICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7CiAgICAgaWYgKCFjYWxsZWVB
c0Z1bmN0aW9uQ2VsbCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzgwLDcgKzc5OSwxMCBA
QCBzdGF0aWMgYm9vbCBhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKICAgICBBU1NFUlQoY2FsbGVlLT5leGVjdXRhYmxlKCktPmhhc0pJVENv
ZGVGb3JDYWxsKCkpOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0gY2FsbGVl
LT5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJlc3NGb3JDYWxs
KCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPQorICAgICAgICBjYWxsZWUt
PmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwo
CisgICAgICAgICAgICAqZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPnZt
KCksIGNhbGxlZS0+ZXhlY3V0YWJsZSgpLAorICAgICAgICAgICAgQXJpdHlDaGVja05vdFJlcXVp
cmVkLCByZWdpc3RlcnMpOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrOwogICAgIGlm
IChjYWxsZWUtPmV4ZWN1dGFibGUoKS0+aXNIb3N0RnVuY3Rpb24oKSkKQEAgLTc5Myw3ICs4MTUs
NyBAQCBzdGF0aWMgYm9vbCBhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsCiAgICAgCiAgICAg
bGlua0Nsb3N1cmVDYWxsKAogICAgICAgICBleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIGNvZGVC
bG9jaywKLSAgICAgICAgY2FsbGVlLT5zdHJ1Y3R1cmUoKSwgY2FsbGVlLT5leGVjdXRhYmxlKCks
IGNvZGVQdHIpOworICAgICAgICBjYWxsZWUtPnN0cnVjdHVyZSgpLCBjYWxsZWUtPmV4ZWN1dGFi
bGUoKSwgY29kZVB0ciwgcmVnaXN0ZXJzKTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAg
LTgwMSwyNSArODIzLDQ2IEBAIHN0YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNh
bGwKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSkKIHsKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsOwotICAg
IGNoYXIqIHJlc3VsdCA9IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgQ29kZUZv
ckNhbGwsIGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBjaGFyKiByZXN1bHQgPSB2aXJ0dWFs
Rm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNlcnZh
dGlvbk5vdFJlcXVpcmVkLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CiAgICAgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8gPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKS0+
Z2V0Q2FsbExpbmtJbmZvKGV4ZWNDYWxsZWUtPnJldHVyblBDKCkpOwogCi0gICAgaWYgKCFhdHRl
bXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzRnVuY3Rpb25DZWxs
LCBjYWxsTGlua0luZm8pKQotICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlu
a0luZm8sIENvZGVGb3JDYWxsKTsKKyAgICBpZiAoIWF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNh
bGwoZXhlY0NhbGxlZSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCwgY2FsbGVlQXNG
dW5jdGlvbkNlbGwsIGNhbGxMaW5rSW5mbykpCisgICAgICAgIGxpbmtTbG93Rm9yKGV4ZWNDYWxs
ZWUsIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVx
dWlyZWQpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQogeyAgICAKLSAg
ICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCk7CisgICAgcmV0dXJu
IHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIFJlZ2lzdGVyUHJlc2VydmF0aW9u
Tm90UmVxdWlyZWQpOwogfQogCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxD
b25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQogewotICAgIHJldHVybiB2aXJ0dWFsRm9y
KGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4
ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWly
ZWQpOwogfQogCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbFRo
YXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAgICBKU0NlbGwqIGNh
bGxlZUFzRnVuY3Rpb25DZWxsOworICAgIGNoYXIqIHJlc3VsdCA9IHZpcnR1YWxGb3JXaXRoRnVu
Y3Rpb24oZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycywgY2Fs
bGVlQXNGdW5jdGlvbkNlbGwpOworICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhl
Y0NhbGxlZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPmdldENhbGxMaW5rSW5mbyhleGVj
Q2FsbGVlLT5yZXR1cm5QQygpKTsKKworICAgIGlmICghYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJl
Q2FsbChleGVjQ2FsbGVlLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMsIGNhbGxlZUFzRnVuY3Rpb25D
ZWxsLCBjYWxsTGlua0luZm8pKQorICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVlLCBjYWxs
TGlua0luZm8sIENvZGVGb3JDYWxsLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOworICAgIAorICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVh
bENhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7ICAgIAorICAg
IHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBNdXN0UHJlc2VydmVS
ZWdpc3RlcnMpOworfQorCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25z
dHJ1Y3RUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7CisgICAgcmV0
dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCwgTXVzdFByZXNlcnZl
UmVnaXN0ZXJzKTsKK30KIAogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxl
c3MoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AyKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmgJKHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsMTEgKzIxMywxNyBAQCB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWCiB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwog
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsRXZhbChFeGVjU3RhdGUq
KSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxs
KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TGlua0NhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5URVJO
QUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QoRXhlY1N0
YXRlKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29u
c3RydWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTGlua0NhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7
CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2
ZXNSZWdzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVmlydHVhbENhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqKSBXVEZfSU5URVJO
QUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3RUaGF0UHJl
c2VydmVzUmVncyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqKSBXVEZf
SU5URVJOQUw7CisKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwog
c2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKIHNpemVfdCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwpAQCAtMjc5LDYgKzI4NSw2OCBAQCB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShFCiAKIH0gLy8gZXh0ZXJuICJD
IgogCitpbmxpbmUgUF9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb25MaW5rRm9yKAorICAgIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVy
cykKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAg
ICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9u
Tm90UmVxdWlyZWQ6CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uTGlua0NhbGw7CisgICAg
ICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvbkxpbmtDYWxsVGhhdFByZXNlcnZlc1JlZ3M7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykg
eworICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uTGlua0NvbnN0cnVjdDsKKyAgICAgICAgY2FzZSBNdXN0UHJl
c2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uTGlua0NvbnN0cnVj
dFRoYXRQcmVzZXJ2ZXNSZWdzOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitpbmxp
bmUgUF9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb25WaXJ0dWFsRm9yKAorICAgIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sK
KyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICBzd2l0
Y2ggKHJlZ2lzdGVycykgeworICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVx
dWlyZWQ6CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uVmlydHVhbENhbGw7CisgICAgICAg
IGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blZpcnR1YWxDYWxsVGhhdFByZXNlcnZlc1JlZ3M7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykg
eworICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdDsKKyAgICAgICAgY2FzZSBNdXN0
UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uVmlydHVhbENv
bnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQor
CitpbmxpbmUgUF9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxGb3IoUmVn
aXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sKKyAgICBzd2l0Y2ggKHJlZ2lzdGVy
cykgeworICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbDsKKyAgICBjYXNlIE11c3RQcmVzZXJ2ZVJl
Z2lzdGVyczoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVz
ZXJ2ZXNSZWdzOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyUHJlc2VydmF0aW9u
V3JhcHBlckdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclByZXNlcnZhdGlvbldyYXBw
ZXJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaCIKKwor
I2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJBc3NlbWJseUhlbHBlcnMuaCIKKyNpbmNsdWRl
ICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmF0ZVdyYXBwZXIoVk0mIHZtLCBF
eGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHRhcmdldCkK
K3sKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKyAgICAvLyBXZSBzaG91bGRuJ3QgZXZlciBiZSBnZW5l
cmF0aW5nIHdyYXBwZXJzIGZvciBuYXRpdmUgZnVuY3Rpb25zLgorICAgIFNjcmlwdEV4ZWN1dGFi
bGUqIHNjcmlwdEV4ZWN1dGFibGUgPSBqc0Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KGV4ZWN1dGFi
bGUpOworICAgIAorICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmNh
bGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAKKyAgICAvLyBObyBuZWVkIHRvIHByZXNlcnZlIEZQ
IHNpbmNlIHRoYXQgYWx3YXlzIGdldHMgcHJlc2VydmVkIGFueXdheS4KKyAgICBjYWxsZWVTYXZl
cy5jbGVhcihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgCisgICAgdW5zaWduZWQg
bnVtYmVyT2ZDYWxsZWVTYXZlcyA9IGNhbGxlZVNhdmVzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCk7
CisgICAgCisgICAgLy8gTmVlZCB0byBwcmVzZXJ2ZSB0aGUgb2xkIHJldHVybiBQQy4KKyAgICB1
bnNpZ25lZCBudW1iZXJPZlZhbHVlc1RvU2F2ZSA9IG51bWJlck9mQ2FsbGVlU2F2ZXMgKyAxOwor
ICAgIAorICAgIC8vIEFsaWdubWVudC4gUHJlc2VydmUgdGhlIHNhbWUgYWxpZ25tZW50IGludmFy
aWFudHMgdGhhdCB0aGUgY2FsbGVyIGltcG9zZWQuCisgICAgdW5zaWduZWQgbnVtYmVyT2ZOZXdT
dGFja1Nsb3RzID0KKyAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25t
ZW50UmVnaXN0ZXJzKCksIG51bWJlck9mVmFsdWVzVG9TYXZlKTsKKyAgICAKKyAgICBBc3NlbWJs
eUhlbHBlcnMgaml0KCZ2bSwgMCk7CisgICAgCisgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVz
c0FmdGVyQ2FsbChHUFJJbmZvOjpyZWdUMSk7CisgICAgaml0LmxvYWQzMigKKyAgICAgICAgQXNz
ZW1ibHlIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzdGFj
a1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAgICAgIChKU1N0YWNrOjpBcmd1bWVudENvdW50IC0g
SlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxv
YWRPZmZzZXQpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMik7CisgICAgCisgICAgLy8gUGxhY2Ug
dGhlIHN0YWNrIHBvaW50ZXIgd2hlcmUgd2Ugd2FudCBpdCB0byBiZS4KKyAgICBzaXplX3Qgb2Zm
c2V0ID0gc2l6ZW9mKFJlZ2lzdGVyKSAqIG51bWJlck9mTmV3U3RhY2tTbG90czsKKyAgICBqaXQu
c3ViUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKG9mZnNldCksIEFzc2VtYmx5SGVs
cGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIAorICAgIC8vIENvbXB1dGUgdGhlIG51
bWJlciBvZiB0aGluZ3Mgd2Ugd2lsbCBiZSBjb3B5aW5nLgorICAgIGppdC5hZGQzMigKKyAgICAg
ICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoCisgICAgICAgICAgICBKU1N0YWNrOjpD
YWxsRnJhbWVIZWFkZXJTaXplIC0gSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpLAorICAg
ICAgICBHUFJJbmZvOjpyZWdUMik7CisKKyAgICBBU1NFUlQoIWNhbGxlZVNhdmVzLmdldChHUFJJ
bmZvOjpyZWdUNCkpOworICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIsIEdQUkluZm86OnJlZ1Q0KTsKKyAgICAKKyAgICBBc3NlbWJseUhlbHBlcnM6Okxh
YmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICBqaXQuc3ViMzIoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQubG9hZDY0KEFzc2VtYmx5
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUNCwgb2Zmc2V0KSwgR1BSSW5mbzo6cmVnVDAp
OworICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUNCk7CisgICAg
aml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIp
KSwgR1BSSW5mbzo6cmVnVDQpOworICAgIGppdC5icmFuY2hUZXN0MzIoQXNzZW1ibHlIZWxwZXJz
OjpOb25aZXJvLCBHUFJJbmZvOjpyZWdUMikubGlua1RvKGxvb3AsICZqaXQpOworCisgICAgLy8g
QXQgdGhpcyBwb2ludCByZWdUNCArIG9mZnNldCBwb2ludHMgdG8gd2hlcmUgd2Ugc2F2ZSB0aGlu
Z3MuCisgICAgc2l6ZV90IGN1cnJlbnRPZmZzZXQgPSAwOworICAgIGppdC5zdG9yZVB0cihHUFJJ
bmZvOjpyZWdUMSwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1Q0LCBjdXJy
ZW50T2Zmc2V0KSk7CisgICAgCisgICAgZm9yIChHUFJSZWcgZ3ByID0gQXNzZW1ibHlIZWxwZXJz
OjpmaXJzdFJlZ2lzdGVyKCk7IGdwciA8PSBBc3NlbWJseUhlbHBlcnM6Omxhc3RSZWdpc3Rlcigp
OyBncHIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KGdwciArIDEpKSB7CisgICAgICAgIGlmICghY2Fs
bGVlU2F2ZXMuZ2V0KGdwcikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY3VycmVu
dE9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICBqaXQuc3RvcmU2NChncHIsIEFz
c2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUNCwgY3VycmVudE9mZnNldCkpOwor
ICAgIH0KKyAgICAKKyAgICAvLyBBc3N1bWUgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IHNhdmVkIEZQ
IHJlZ2lzdGVycy4KKyAgICAKKyAgICAvLyBSZXN0b3JlIHRoZSB0YWcgcmVnaXN0ZXJzLgorICAg
IGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIGppdC5hZGQ2NChBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW0zMihUYWdNYXNrIC0gVGFnVHlwZU51bWJlciksIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKworICAgIEFz
c2VtYmx5SGVscGVyczo6Q2FsbCBjYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgCisgICAgLy8g
V2UgbmVlZCB0byBwbGFjZSB0aGUgc3RhY2sgcG9pbnRlciBiYWNrIHRvIHdoZXJlIHRoZSBjYWxs
ZXIgdGhvdWdodCB0aGV5IGxlZnQgaXQuCisgICAgLy8gQnV0IGFsc28sIGluIG9yZGVyIHRvIHJl
Y292ZXIgdGhlIHJlZ2lzdGVycywgd2UgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBiaWcgdGhlCisg
ICAgLy8gYXJndW1lbnRzIGFyZWEgaXMuCisgICAgCisgICAgaml0LmxvYWQzMigKKyAgICAgICAg
QXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAgICAgIChKU1N0YWNrOjpBcmd1bWVudENvdW50
IC0gSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBh
eWxvYWRPZmZzZXQpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmxzaGlmdDMy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDMpLCBHUFJJbmZvOjpyZWdUMik7CisgICAg
CisgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihvZmZzZXQpLCBB
c3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBqaXQuYWRkUHRyKEFz
c2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QyKTsKKyAg
ICAKKyAgICAvLyBXZSBzYXZlZCB0aGluZ3MgYXQ6CisgICAgLy8KKyAgICAvLyAgICAgYWRqU1Ag
KyAoSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5k
UENTaXplICsgTnVtQXJncykgKiA4CisgICAgLy8KKyAgICAvLyBXaGVyZToKKyAgICAvLworICAg
IC8vICAgICBhZGpTUCA9IG9yaWdTUCAtIG9mZnNldAorICAgIC8vCisgICAgLy8gcmVnVDIgbm93
IHBvaW50cyBhdDoKKyAgICAvLworICAgIC8vICAgICBvcmlnU1AgKyBOdW1BcmdzICogOAorICAg
IC8vICAgPSBhZGpTUCArIG9mZnNldCArIE51bUFyZ3MgKiA4CisgICAgLy8gCisgICAgLy8gU28g
aWYgd2Ugc3VidHJhY3Qgb2Zmc2V0IGFuZCB0aGVuIGFkZCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFk
ZXJTaXplIGFuZCBzdWJ0cmFjdAorICAgIC8vIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXpl
LCB3ZSdsbCBnZXQgdGhlIHRoaW5nIHdlIHdhbnQuCisgICAgY3VycmVudE9mZnNldCA9IC1vZmZz
ZXQgKyBzaXplb2YoUmVnaXN0ZXIpICogKAorICAgICAgICBKU1N0YWNrOjpDYWxsRnJhbWVIZWFk
ZXJTaXplIC0gSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpOworICAgIGppdC5sb2FkUHRy
KEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgY3VycmVudE9mZnNldCks
IEdQUkluZm86OnJlZ1QxKTsKKyAgICAKKyAgICBmb3IgKEdQUlJlZyBncHIgPSBBc3NlbWJseUhl
bHBlcnM6OmZpcnN0UmVnaXN0ZXIoKTsgZ3ByIDw9IEFzc2VtYmx5SGVscGVyczo6bGFzdFJlZ2lz
dGVyKCk7IGdwciA9IHN0YXRpY19jYXN0PEdQUlJlZz4oZ3ByICsgMSkpIHsKKyAgICAgICAgaWYg
KCFjYWxsZWVTYXZlcy5nZXQoZ3ByKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBj
dXJyZW50T2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgIGppdC5sb2FkNjQoQXNz
ZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBjdXJyZW50T2Zmc2V0KSwgZ3By
KTsKKyAgICB9CisgICAgCisgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDEpOworICAgIAorICAg
IExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBs
aW5rQnVmZmVyLmxpbmsoY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwodGFyZ2V0KSk7CisgICAgCisg
ICAgcmV0dXJuIEZJTkFMSVpFX0RGR19DT0RFKGxpbmtCdWZmZXIsICgiUmVnaXN0ZXIgcHJlc2Vy
dmF0aW9uIHdyYXBwZXIgZm9yICVzLyVzLCAlcCIsIHRvQ1N0cmluZyhzY3JpcHRFeGVjdXRhYmxl
LT5oYXNoRm9yKENvZGVGb3JDYWxsKSkuZGF0YSgpLCB0b0NTdHJpbmcoc2NyaXB0RXhlY3V0YWJs
ZS0+aGFzaEZvcihDb2RlRm9yQ29uc3RydWN0KSkuZGF0YSgpLCB0YXJnZXQuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpOworI2Vsc2UgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgLy8gV2UgZG9uJ3Qgc3Vw
cG9ydCBub24tRlRMIGJ1aWxkcyBmb3IgdHdvIHJlYXNvbnM6CisgICAgLy8gLSBJdCBqdXN0IHNv
IGhhcHBlbnMgdGhhdCBjdXJyZW50bHkgb25seSB0aGUgRlRMIGJvdHRvbXMgb3V0IGluIHRoaXMg
Y29kZS4KKyAgICAvLyAtIFRoZSBjb2RlIGFib3ZlIHVzZXMgNjQtYml0IGluc3RydWN0aW9ucy4g
SXQgZG9lc24ndCBuZWNlc3NhcmlseSBoYXZlIHRvOyBpdCB3b3VsZCBiZQorICAgIC8vICAgZWFz
eSB0byBjaGFuZ2UgaXQgc28gdGhhdCBpdCBkb2Vzbid0LiBCdXQgb2J2aW91c2x5IG1ha2luZyB0
aGF0IGNoYW5nZSB3b3VsZCBiZSBhCisgICAgLy8gICBwcmVyZXF1aXNpdGUgdG8gcmVtb3Zpbmcg
dGhpcyAjaWYuCisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclByZXNlcnZh
dGlvbldyYXBwZXJHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclByZXNlcnZhdGlvbldyYXBw
ZXJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yX2gKKyNkZWZpbmUgUmVnaXN0ZXJQcmVzZXJ2YXRpb25X
cmFwcGVyR2VuZXJhdG9yX2gKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJWTS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyYXRlV3JhcHBlcihWTSYsIEV4ZWN1dGFibGVCYXNl
KiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHRhcmdldCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIFJlZ2lzdGVyUHJlc2VydmF0aW9u
V3JhcHBlckdlbmVyYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcAkocmV2aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3MCwxNyArMTI3MCwxOSBAQCB2b2lkIHJlcGF0
Y2hJbigKICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBvcGVyYXRpb25Jbik7CiB9CiAKLXN0YXRpYyB2b2lkIGxpbmtTbG93Rm9y
KFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLXsKLSAgICBpZiAoa2luZCA9
PSBDb2RlRm9yQ2FsbCkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0lu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2Vu
ZXJhdG9yKS5jb2RlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEFTU0VSVChraW5k
ID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5r
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RU
aHVua0dlbmVyYXRvcikuY29kZSgpKTsKK3N0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKAorICAgIFJl
cGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8sCisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBSZWdpc3RlclByZXNlcnZh
dGlvbk1vZGUgcmVnaXN0ZXJzKQoreworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAorICAgICAg
ICBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLAorICAgICAgICB2bS0+Z2V0Q1RJU3R1
Yih2aXJ0dWFsVGh1bmtHZW5lcmF0b3JGb3Ioa2luZCwgcmVnaXN0ZXJzKSkuY29kZSgpKTsKIH0K
IAotdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0lu
Zm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit2
b2lkIGxpbmtGb3IoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5r
SW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssCisgICAgSlNGdW5jdGlvbiogY2FsbGVl
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kLAorICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgQVNT
RVJUKCFjYWxsTGlua0luZm8uc3R1Yik7CiAgICAgCkBAIC0xMzAyLDI1ICsxMzA0LDMwIEBAIHZv
aWQgbGlua0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW4KICAgICAgICAgY2FsbGVlQ29k
ZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGV4ZWMtPmNhbGxlckZyYW1lKCksICZjYWxsTGlua0lu
Zm8pOwogICAgIAogICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRD
VElTdHViKGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOworICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCB2bS0+
Z2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvckZvcihyZWdpc3RlcnMpKS5j
b2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIEFTU0VSVChraW5kID09
IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBj
YWxsTGlua0luZm8sIENvZGVGb3JDb25zdHJ1Y3QpOworICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hC
dWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIENvZGVGb3JDb25zdHJ1Y3QsIHJlZ2lzdGVycyk7CiB9
CiAKLXZvaWQgbGlua1Nsb3dGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQordm9pZCBsaW5rU2xvd0ZvcigK
KyAgICBFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQsCisgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lz
dGVycykKIHsKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZy
YW1lKCktPmNvZGVCbG9jaygpOwogICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsK
ICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsK
ICAgICAKLSAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBr
aW5kKTsKKyAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBr
aW5kLCByZWdpc3RlcnMpOwogfQogCi12b2lkIGxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4
ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9j
aywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cikKK3ZvaWQgbGlua0Nsb3N1cmVDYWxsKAorICAgIEV4
ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2Fs
bGVlQ29kZUJsb2NrLAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFeGVjdXRhYmxlQmFzZSog
ZXhlY3V0YWJsZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsCisgICAgUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsKICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5z
dHViKTsKICAgICAKQEAgLTEzODAsMTggKzEzODcsMTggQEAgdm9pZCBsaW5rQ2xvc3VyZUNhbGwo
RXhlY1N0YXRlKiBleGVjLCBDYQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgc3R1YkppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZv
OjpyZWdUMSk7CiAjZW5kaWYKLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSksIEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxl
QWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIAogICAgIC8vIEZJWE1FOiBDU3RhY2sg
LSBUaGluayB0aGUgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oKSBpbnN0cnVjdGlv
biBzaG91bGQgYmUgYSBwb2tlCiAgICAgc3R1YkppdC5icmVha3BvaW50KCk7Ci0gICAgc3R1Ykpp
dC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpub25BcmdHUFIyKTsK
KyAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJl
Z1QyKTsKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgpOwog
ICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgY2FsbGVyQ29k
ZUJsb2NrKTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGNv
ZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwg
Y2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KDApKTsKLSAgICBw
YXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKHZtLT5nZXRDVElTdHViKHZp
cnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmso
c2xvdywgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmdldENUSVN0dWIodmlydHVhbFRodW5rR2VuZXJh
dG9yRm9yKENvZGVGb3JDYWxsLCByZWdpc3RlcnMpKS5jb2RlKCkpKTsKICAgICAKICAgICBSZWZQ
dHI8Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZihuZXcgQ2xv
c3VyZUNhbGxTdHViUm91dGluZSgKICAgICAgICAgRklOQUxJWkVfREZHX0NPREUoCkBAIC0xNDA2
LDcgKzE0MTMsNyBAQCB2b2lkIGxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhCiAg
ICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAoCiAgICAgICAgIFJlcGF0Y2hCdWZmZXI6
OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGNhbGxMaW5rSW5mby5ob3RQYXRo
QmVnaW4pLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNv
ZGUoKSkpOwotICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8s
IENvZGVGb3JDYWxsKTsKKyAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExp
bmtJbmZvLCBDb2RlRm9yQ2FsbCwgcmVnaXN0ZXJzKTsKICAgICAKICAgICBjYWxsTGlua0luZm8u
c3R1YiA9IHN0dWJSb3V0aW5lLnJlbGVhc2UoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5oCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtNDEsOSArNDEsOSBAQCB2b2lkIGJ1
aWxkR2V0QnlJRFByb3RvTGlzdChFeGVjU3RhdGUqLCBKCiB2b2lkIHJlcGF0Y2hQdXRCeUlEKEV4
ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwogdm9pZCBidWlsZFB1dEJ5SWRMaXN0
KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0
eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwogdm9pZCByZXBhdGNoSW4oRXhl
Y1N0YXRlKiwgSlNDZWxsKiwgY29uc3QgSWRlbnRpZmllciYsIGJvb2wgd2FzRm91bmQsIGNvbnN0
IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12b2lkIGxpbmtGb3IoRXhlY1N0
YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwotdm9pZCBsaW5rU2xv
d0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsK
LXZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9j
ayosIFN0cnVjdHVyZSosIEV4ZWN1dGFibGVCYXNlKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKTsK
K3ZvaWQgbGlua0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU0Z1
bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlKTsKK3ZvaWQgbGlua1Nsb3dGb3IoRXhlY1N0
YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25Nb2RlKTsKK3ZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5r
SW5mbyYsIENvZGVCbG9jayosIFN0cnVjdHVyZSosIEV4ZWN1dGFibGVCYXNlKiwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpOwogdm9pZCByZXNldEdldEJ5
SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIHJlc2V0UHV0QnlJ
RChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVzZXRJbihSZXBh
dGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDE2MDc5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTksNyArOTksNyBAQCBzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKIH0KIAogc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9yVGh1bmtHZW5lcmF0b3IoCi0gICAgVk0qIHZt
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgVk0qIHZtLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAg
ICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjayBvciBpbiB0aGUgbGluayBy
ZWdpc3Rlci4gV2Ugd2lsbCBoZW5jZQogICAgIC8vIHNhdmUgdGhlIHJldHVybiBhZGRyZXNzIHRv
IHRoZSBjYWxsIGZyYW1lIHdoaWxlIHdlIG1ha2UgYSBDKysgZnVuY3Rpb24gY2FsbApAQCAtMTA5
LDM4ICsxMDksNTkgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rRm9yVGh1bgog
ICAgIAogICAgIENDYWxsSGVscGVycyBqaXQodm0pOwogICAgIAotICAgIHNsb3dQYXRoRm9yKGpp
dCwgdm0sIGtpbmQgPT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25MaW5rQ2FsbCA6IG9wZXJhdGlv
bkxpbmtDb25zdHJ1Y3QpOworICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtG
b3Ioa2luZCwgcmVnaXN0ZXJzKSk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
dm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCiAg
ICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkxpbmsgJXMgc2xvdyBwYXRoIHRodW5rIiwg
a2luZCA9PSBDb2RlRm9yQ2FsbCA/ICJjYWxsIiA6ICJjb25zdHJ1Y3QiKSk7CisgICAgICAgICgi
TGluayAlcyVzIHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyAiY2FsbCIg
OiAiY29uc3RydWN0IiwgcmVnaXN0ZXJzID09IE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyA/ICIgdGhh
dCBwcmVzZXJ2ZXMgcmVnaXN0ZXJzIiA6ICIiKSk7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gbGlua0ZvclRo
dW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ2FsbCk7CisgICAgcmV0dXJuIGxpbmtGb3JUaHVua0dl
bmVyYXRvcih2bSwgQ29kZUZvckNhbGwsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQp
OwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9y
KFZNKiB2bSkKIHsKLSAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9y
Q29uc3RydWN0KTsKKyAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9y
Q29uc3RydWN0LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKIH0KIAotLy8gRm9y
IGNsb3N1cmUgb3B0aW1pemF0aW9ucywgd2Ugb25seSBpbmNsdWRlIGNhbGxzLCBzaW5jZSBpZiB5
b3UncmUgdXNpbmcgY2xvc3VyZXMgZm9yCi0vLyBvYmplY3QgY29uc3RydWN0aW9uIHRoZW4geW91
J3JlIGdvaW5nIHRvIGxvc2UgYmlnIHRpbWUgYW55d2F5LgotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBsaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorewor
ICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsLCBNdXN0UHJl
c2VydmVSZWdpc3RlcnMpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVj
dFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIHJldHVybiBs
aW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QsIE11c3RQcmVzZXJ2ZVJl
Z2lzdGVycyk7Cit9CisKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVD
YWxsRm9yVGh1bmtHZW5lcmF0b3IoCisgICAgVk0qIHZtLCBSZWdpc3RlclByZXNlcnZhdGlvbk1v
ZGUgcmVnaXN0ZXJzKQogewogICAgIENDYWxsSGVscGVycyBqaXQodm0pOwogICAgIAotICAgIHNs
b3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbCk7CisgICAgc2xvd1Bh
dGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsRm9yKHJlZ2lzdGVycykpOwog
ICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktf
SUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxpbmsgY2xvc3Vy
ZSBjYWxsIHNsb3cgcGF0aCB0aHVuayIpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgKCJMaW5rIGNsb3N1cmUgY2FsbCAlcyBzbG93IHBhdGggdGh1bmsiLCByZWdpc3Rl
cnMgPT0gTXVzdFByZXNlcnZlUmVnaXN0ZXJzID8gIiB0aGF0IHByZXNlcnZlcyByZWdpc3RlcnMi
IDogIiIpKTsKK30KKworLy8gRm9yIGNsb3N1cmUgb3B0aW1pemF0aW9ucywgd2Ugb25seSBpbmNs
dWRlIGNhbGxzLCBzaW5jZSBpZiB5b3UncmUgdXNpbmcgY2xvc3VyZXMgZm9yCisvLyBvYmplY3Qg
Y29uc3RydWN0aW9uIHRoZW4geW91J3JlIGdvaW5nIHRvIGxvc2UgYmlnIHRpbWUgYW55d2F5Lgor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2
bSkKK3sKKyAgICByZXR1cm4gbGlua0Nsb3N1cmVDYWxsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIFJl
Z2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSogdm0p
Cit7CisgICAgcmV0dXJuIGxpbmtDbG9zdXJlQ2FsbEZvclRodW5rR2VuZXJhdG9yKHZtLCBNdXN0
UHJlc2VydmVSZWdpc3RlcnMpOwogfQogCiBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZp
cnR1YWxGb3JUaHVua0dlbmVyYXRvcigKLSAgICBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKKyAgICBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsKICAgICAvLyBUaGUgY2FsbGVlIGlzIGlu
IHJlZ1QwIChmb3IgSlNWQUxVRTMyXzY0LCB0aGUgdGFnIGlzIGluIHJlZ1QxKS4KICAgICAvLyBU
aGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrLCBvciBpbiB0aGUgbGluayByZWdpc3Rl
ci4gV2Ugd2lsbCBoZW5jZQpAQCAtMTU1LDMzICsxNzYsMzQgQEAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiB2aXJ0dWFsRm9yVAogICAgIC8vIHRoZSBERkcga25vd3MgdGhhdCB0aGUgdmFs
dWUgaXMgZGVmaW5pdGVseSBhIGNlbGwsIG9yIGRlZmluaXRlbHkgYSBmdW5jdGlvbi4KICAgICAK
ICNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTY0KFRhZ01hc2spLCBHUFJJbmZvOjpyZWdUMik7CisgICAgCiAgICAgc2xvd0Nhc2UuYXBwZW5k
KAogICAgICAgICBqaXQuYnJhbmNoVGVzdDY0KAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpO
b25aZXJvLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpy
ZWdUMikpOwogI2Vsc2UKICAgICBzbG93Q2FzZS5hcHBlbmQoCiAgICAgICAgIGppdC5icmFuY2gz
MigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QxLAog
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykp
KTsKICNlbmRpZgotICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEdQUkluZm86Om5vbkFyZ0dQUjIp
OworICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QyKTsKICAgICBzbG93Q2Fz
ZS5hcHBlbmQoCiAgICAgICAgIGppdC5icmFuY2hQdHIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Ok5vdEVxdWFsLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
Om5vbkFyZ0dQUjIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAorICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBTdHJ1Y3R1cmU6OmNsYXNzSW5m
b09mZnNldCgpKSwKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihKU0Z1
bmN0aW9uOjppbmZvKCkpKSk7CiAgICAgCiAgICAgLy8gTm93IHdlIGtub3cgd2UgaGF2ZSBhIEpT
RnVuY3Rpb24uCiAgICAgCiAgICAgaml0LmxvYWRQdHIoCiAgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkp
LAotICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIyKTsKLSAgICBzbG93Q2FzZS5hcHBlbmQoCi0g
ICAgICAgIGppdC5icmFuY2gzMigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGVzc1RoYW4s
Ci0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgR1BS
SW5mbzo6bm9uQXJnR1BSMiwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mTnVtUGFyYW1ldGVyc0Zv
cihraW5kKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOwor
ICAgICAgICBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmxvYWRQdHIoCisgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OnJlZ1QyLCBFeGVjdXRhYmxl
QmFzZTo6b2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCwgcmVnaXN0ZXJzKSks
CisgICAgICAgIEdQUkluZm86OnJlZ1QyKTsKKyAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5j
aFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMikpOwogICAgIAogICAg
IC8vIE5vdyB3ZSBrbm93IHRoYXQgd2UgaGF2ZSBhIENvZGVCbG9jaywgYW5kIHdlJ3JlIGNvbW1p
dHRlZCB0byBtYWtpbmcgYSBmYXN0CiAgICAgLy8gY2FsbC4KQEAgLTE5NywzNCArMjE5LDQwIEBA
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZvclQKICAgICAgICAgSlNTdGFj
azo6U2NvcGVDaGFpbik7CiAjZW5kaWYKICAgICAKLSAgICBqaXQubG9hZFB0cigKLSAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4ZWN1dGFibGVCYXNl
OjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKSksCi0gICAgICAgIEdQUklu
Zm86OnJlZ1QwKTsKLSAgICAKICAgICAvLyBNYWtlIGEgdGFpbCBjYWxsLiBUaGlzIHdpbGwgcmV0
dXJuIGJhY2sgdG8gSklUIGNvZGUuCi0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BS
SW5mbzo6cmVnVDApOwotICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QwKTsKKyAgICBlbWl0UG9p
bnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0Lmp1bXAoR1BSSW5m
bzo6cmVnVDIpOwogCiAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKICAgICAKICAgICAvLyBIZXJl
IHdlIGRvbid0IGtub3cgYW55dGhpbmcsIHNvIHJldmVydCB0byB0aGUgZnVsbCBzbG93IHBhdGgu
CiAgICAgCi0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwga2luZCA9PSBDb2RlRm9yQ2FsbCA/IG9w
ZXJhdGlvblZpcnR1YWxDYWxsIDogb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdCk7CisgICAgc2xv
d1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uVmlydHVhbEZvcihraW5kLCByZWdpc3RlcnMpKTsK
ICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsCi0g
ICAgICAgICgiVmlydHVhbCAlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxs
ID8gImNhbGwiIDogImNvbnN0cnVjdCIpKTsKKyAgICAgICAgKCJWaXJ0dWFsICVzJXMgc2xvdyBw
YXRoIHRodW5rIiwga2luZCA9PSBDb2RlRm9yQ2FsbCA/ICJjYWxsIiA6ICJjb25zdHJ1Y3QiLCBy
ZWdpc3RlcnMgPT0gTXVzdFByZXNlcnZlUmVnaXN0ZXJzID8gIiB0aGF0IHByZXNlcnZlcyByZWdp
c3RlcnMiIDogIiIpKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGh1
bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0
b3Iodm0sIENvZGVGb3JDYWxsKTsKKyAgICByZXR1cm4gdmlydHVhbEZvclRodW5rR2VuZXJhdG9y
KHZtLCBDb2RlRm9yQ2FsbCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiB9CiAK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQogewotICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JD
b25zdHJ1Y3QpOworICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVG
b3JDb25zdHJ1Y3QsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOworfQorCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJh
dG9yKFZNKiB2bSkKK3sKKyAgICByZXR1cm4gdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKHZtLCBD
b2RlRm9yQ2FsbCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKK30KKworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKFZN
KiB2bSkKK3sKKyAgICByZXR1cm4gdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9y
Q29uc3RydWN0LCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOwogfQogCiBlbnVtIFRodW5rRW50cnlU
eXBlIHsgRW50ZXJWaWFDYWxsLCBFbnRlclZpYUp1bXAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gMTYwNzk0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsOCBAQAogI2lmbmRlZiBUaHVua0dlbmVyYXRvcnNfaAogI2RlZmluZSBUaHVu
a0dlbmVyYXRvcnNfaAogCisjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgorI2lu
Y2x1ZGUgIlJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJh
dG9yLmgiCiAKICNpZiBFTkFCTEUoSklUKQpAQCAtMzUsMTEgKzM3LDc4IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb20KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29u
c3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2Fs
bFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBsaW5rQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSopOwor
CitpbmxpbmUgVGh1bmtHZW5lcmF0b3IgbGlua1RodW5rR2VuZXJhdG9yRm9yKAorICAgIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVy
cykKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAg
ICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9u
Tm90UmVxdWlyZWQ6CisgICAgICAgICAgICByZXR1cm4gbGlua0NhbGxUaHVua0dlbmVyYXRvcjsK
KyAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICByZXR1cm4g
bGlua0NhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgc3dpdGNoIChy
ZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVk
OgorICAgICAgICAgICAgcmV0dXJuIGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcjsKKyAgICAg
ICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICByZXR1cm4gbGlua0Nv
bnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3I7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIDA7Cit9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVu
a0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRo
YXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qKTsKKworaW5saW5lIFRodW5rR2VuZXJh
dG9yIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yRm9yKFJlZ2lzdGVyUHJlc2VydmF0aW9u
TW9kZSByZWdpc3RlcnMpCit7CisgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICBjYXNlIFJl
Z2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgIHJldHVybiBsaW5rQ2xvc3Vy
ZUNhbGxUaHVua0dlbmVyYXRvcjsKKyAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAg
ICAgICAgcmV0dXJuIGxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0
b3I7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IDA7Cit9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9y
KFZNKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJh
dG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxUaGF0UHJlc2VydmVz
UmVnc1RodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENv
bnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qKTsKKworaW5saW5lIFRo
dW5rR2VuZXJhdG9yIHZpcnR1YWxUaHVua0dlbmVyYXRvckZvcigKKyAgICBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCit7Cisg
ICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgc3dpdGNo
IChyZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVp
cmVkOgorICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3I7CisgICAg
ICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAgcmV0dXJuIHZpcnR1
YWxDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcjsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgIHN3aXRjaCAocmVn
aXN0ZXJzKSB7CisgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoK
KyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3I7CisgICAg
ICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAgcmV0dXJuIHZpcnR1
YWxDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiAwOworfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ2FsbEdlbmVy
YXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRv
cihWTSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2lu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50
cnlwb2ludC5jcHAJKHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludEVudHJ5cG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxNCArNDcsMTIg
QEAgc3RhdGljIHZvaWQgc2V0RnVuY3Rpb25FbnRyeXBvaW50KFZNJiB2bQogICAgIGlmICh2bS5j
YW5Vc2VKSVQoKSkgewogICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewogICAgICAg
ICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICAgICAgICAgIGFkb3B0UmVmKG5l
dyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsRW50cnlUaHVua0dl
bmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwKLSAgICAgICAgICAgICAgICB2
bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29k
ZSgpKTsKKyAgICAgICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRD
VElTdHViKGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCB2bS5nZXRDVElTdHVi
KGZ1bmN0aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpLCBKSVRDb2Rl
OjpJbnRlcnByZXRlclRodW5rKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwogICAgICAgICBjb2RlQmxv
Y2stPnNldEpJVENvZGUoCi0gICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2
bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ29uc3RydWN0RW50cnlUaHVua0dlbmVyYXRvciksIEpJ
VENvZGU6OkludGVycHJldGVyVGh1bmspKSwKLSAgICAgICAgICAgIHZtLmdldENUSVN0dWIoZnVu
Y3Rpb25Gb3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAg
ICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGZ1bmN0aW9u
Rm9yQ29uc3RydWN0RW50cnlUaHVua0dlbmVyYXRvciksIHZtLmdldENUSVN0dWIoZnVuY3Rpb25G
b3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSwgSklUQ29kZTo6SW50
ZXJwcmV0ZXJUaHVuaykpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFC
TEUoSklUKQpAQCAtNjIsMTQgKzYwLDEyIEBAIHN0YXRpYyB2b2lkIHNldEZ1bmN0aW9uRW50cnlw
b2ludChWTSYgdm0KICAgICBVTlVTRURfUEFSQU0odm0pOwogICAgIGlmIChraW5kID09IENvZGVG
b3JDYWxsKSB7CiAgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgICAgIGFk
b3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJ
bnRDb2RlUmVmKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlKSwgSklUQ29kZTo6SW50
ZXJwcmV0ZXJUaHVuaykpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVh
dGVMTEludENvZGVQdHIobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2spKTsKKyAg
ICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlKSwg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfZnVuY3Rpb25f
Zm9yX2NhbGxfYXJpdHlfY2hlY2spLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3Qp
OwogICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgYWRvcHRSZWYobmV3IERpcmVj
dEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRf
ZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1
bmspKSwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENvZGVQdHIo
bGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjaykpOworICAgICAgICBhZG9w
dFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50
Q29kZVJlZihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlKSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0
cnVjdF9hcml0eV9jaGVjayksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiB9CiAKIHN0
YXRpYyB2b2lkIHNldEV2YWxFbnRyeXBvaW50KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CkBAIC03NywxNiArNzMsMTQgQEAgc3RhdGljIHZvaWQgc2V0RXZhbEVudHJ5cG9pbnQoVk0mIHZt
LCBDbwogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKHZtLmNhblVzZUpJVCgpKSB7CiAgICAgICAg
IGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RK
SVRDb2RlKHZtLmdldENUSVN0dWIoZXZhbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJ
bnRlcnByZXRlclRodW5rKSksCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7
CisgICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGV2
YWxFbnRyeVRodW5rR2VuZXJhdG9yKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksIEpJVENvZGU6
OkludGVycHJldGVyVGh1bmspKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKIAogICAgIFVOVVNFRF9QQVJBTSh2bSk7CiAgICAgY29kZUJsb2NrLT5zZXRK
SVRDb2RlKAotICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9ldmFsX3Byb2xvZ3VlKSwgSklUQ29k
ZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7
CisgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2V2YWxfcHJvbG9ndWUpLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIoKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKIH0KIAogc3RhdGljIHZv
aWQgc2V0UHJvZ3JhbUVudHJ5cG9pbnQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKQEAg
LTk0LDE2ICs4OCwxNCBAQCBzdGF0aWMgdm9pZCBzZXRQcm9ncmFtRW50cnlwb2ludChWTSYgdm0s
CiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAodm0uY2FuVXNlSklUKCkpIHsKICAgICAgICAgY29k
ZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENv
ZGUodm0uZ2V0Q1RJU3R1Yihwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6Oklu
dGVycHJldGVyVGh1bmspKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsK
KyAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIocHJv
Z3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IpLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSwgSklUQ29k
ZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAv
LyBFTkFCTEUoSklUKQogCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKICAgICBjb2RlQmxvY2stPnNl
dEpJVENvZGUoCi0gICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X3Byb2dyYW1fcHJvbG9ndWUpLCBK
SVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSksCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cigpKTsKKyAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSksIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cigpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogfQogCiB2
b2lkIHNldEVudHJ5cG9pbnQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNp
b24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQwLDcgKzM0MCw5IEBAIHN0YXRpYyBTbG93UGF0aFJl
dHVyblR5cGUgZW50cnlPU1IoRXhlY1MKICAgICBpZiAoa2luZCA9PSBQcm9sb2d1ZSkKICAgICAg
ICAgTExJTlRfUkVUVVJOX1RXTyhjb2RlQmxvY2stPmppdENvZGUoKS0+ZXhlY3V0YWJsZUFkZHJl
c3MoKSwgZXhlYyk7CiAgICAgQVNTRVJUKGtpbmQgPT0gQXJpdHlDaGVjayk7Ci0gICAgTExJTlRf
UkVUVVJOX1RXTyhjb2RlQmxvY2stPmppdENvZGVXaXRoQXJpdHlDaGVjaygpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksIGV4ZWMpOworICAgIExMSU5UX1JFVFVSTl9UV08oY29kZUJsb2NrLT5qaXRDb2Rl
KCktPmFkZHJlc3NGb3JDYWxsKAorICAgICAgICAqY29kZUJsb2NrLT52bSgpLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBNdXN0Q2hlY2tBcml0eSwKKyAgICAgICAgUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25Ob3RSZXF1aXJlZCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgZXhlYyk7CiB9CiAKIExM
SU5UX1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcikKQEAgLTEwNDAsNyArMTA0Miw3IEBAIGlubGlu
ZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKEV4ZWMKICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY29kZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7CiAgICAgaWYgKGV4
ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxl
LT5ob3N0Q29kZUVudHJ5Rm9yKGtpbmQpOworICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+
ZW50cnlwb2ludEZvcih2bSwga2luZCwgTXVzdENoZWNrQXJpdHksIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTm90UmVxdWlyZWQpOwogICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpOwogICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUt
PnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKTsK
QEAgLTEwNDgsMTIgKzEwNTAsMTYgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENh
bGwoRXhlYwogICAgICAgICAgICAgTExJTlRfQ0FMTF9USFJPVyhleGVjQ2FsbGVlLT5jYWxsZXJG
cmFtZSgpLCBlcnJvcik7CiAgICAgICAgIGNvZGVCbG9jayA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+
Y29kZUJsb2NrRm9yKGtpbmQpOwogICAgICAgICBBU1NFUlQoY29kZUJsb2NrKTsKKyAgICAgICAg
QXJpdHlDaGVja01vZGUgYXJpdHk7CiAgICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSkpCi0gICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5q
c0NvZGVXaXRoQXJpdHlDaGVja0VudHJ5Rm9yKGtpbmQpOworICAgICAgICAgICAgYXJpdHkgPSBN
dXN0Q2hlY2tBcml0eTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0
aW9uRXhlY3V0YWJsZS0+anNDb2RlRW50cnlGb3Ioa2luZCk7CisgICAgICAgICAgICBhcml0eSA9
IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKKyAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0
YWJsZS0+ZW50cnlwb2ludEZvcih2bSwga2luZCwgYXJpdHksIFJlZ2lzdGVyUHJlc2VydmF0aW9u
Tm90UmVxdWlyZWQpOwogICAgIH0KICAgICAKKyAgICBBU1NFUlQoISFjb2RlUHRyKTsKKyAgICAK
ICAgICBpZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1NfU0xPVyAmJiBjYWxsTGlua0luZm8pIHsKICAg
ICAgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVyID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsK
ICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAg
LTI5MCw2ICsyOTAsMTEgQEAgbWFjcm8gc2xvd1BhdGhGb3JDYWxsKHNsb3dQYXRoKQogICAgICAg
ICAgICAgaWYgQ19MT09QCiAgICAgICAgICAgICAgICAgY2xvb3BDYWxsSlNGdW5jdGlvbiBjYWxs
ZWUKICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpZiBBU1NFUlRfRU5BQkxFRAor
ICAgICAgICAgICAgICAgICAgICBicGEgdDEsIDB4MTAwMCwgLm9rCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrCisgICAgICAgICAgICAgICAgLm9rOgorICAgICAgICAgICAgICAgIGVuZAogICAg
ICAgICAgICAgICAgIGFkZHAgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHQxLCBzcAogICAgICAgICAg
ICAgICAgIGNhbGwgY2FsbGVlCiAgICAgICAgICAgICAgICAgcmVzdG9yZVN0YWNrUG9pbnRlckFm
dGVyQ2FsbCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcml0eUNoZWNr
TW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyaXR5
Q2hlY2tNb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Bcml0eUNoZWNrTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBcml0eUNo
ZWNrTW9kZV9oCisjZGVmaW5lIEFyaXR5Q2hlY2tNb2RlX2gKKworbmFtZXNwYWNlIEpTQyB7CisK
K2VudW0gQXJpdHlDaGVja01vZGUgeworICAgIEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCwKKyAgICBN
dXN0Q2hlY2tBcml0eQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcml0
eUNoZWNrTW9kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDEyICsxMTgsMTQg
QEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShDb2RlQgogICAgIHN3aXRjaCAo
a2luZCkgewogICAgIGNhc2UgQ29kZUZvckNhbGw6CiAgICAgICAgIG1faml0Q29kZUZvckNhbGwg
PSBnZW5lcmljQ29kZUJsb2NrLT5qaXRDb2RlKCk7Ci0gICAgICAgIG1faml0Q29kZUZvckNhbGxX
aXRoQXJpdHlDaGVjayA9IGdlbmVyaWNDb2RlQmxvY2stPmppdENvZGVXaXRoQXJpdHlDaGVjaygp
OworICAgICAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIoKTsKKyAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrQW5kUHJl
c2VydmVSZWdzID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CiAgICAgICAgIG1fbnVtUGFyYW1l
dGVyc0ZvckNhbGwgPSBnZW5lcmljQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKICAgICAgICAgbV9qaXRDb2RlRm9y
Q29uc3RydWN0ID0gZ2VuZXJpY0NvZGVCbG9jay0+aml0Q29kZSgpOwotICAgICAgICBtX2ppdENv
ZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IGdlbmVyaWNDb2RlQmxvY2stPmppdENvZGVX
aXRoQXJpdHlDaGVjaygpOworICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlD
aGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworICAgICAgICBtX2ppdENvZGVGb3JDb25z
dHJ1Y3RXaXRoQXJpdHlDaGVja0FuZFByZXNlcnZlUmVncyA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0
cigpOwogICAgICAgICBtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3QgPSBnZW5lcmljQ29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEzMyw3ICsx
MzUsNiBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKENvZGVCCiAgICAgICAg
IFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxl
Kj4odGhpcyk7CiAgICAgICAgIFByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19j
YXN0PFByb2dyYW1Db2RlQmxvY2sqPihnZW5lcmljQ29kZUJsb2NrKTsKICAgICAgICAgCi0gICAg
ICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2soKSk7CiAgICAgICAg
IEFTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKICAgICAgICAgCiAgICAgICAgIG9sZENvZGVC
bG9jayA9IGV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jazsKQEAgLTE0NSw3ICsxNDYsNiBA
QCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKENvZGVCCiAgICAgICAgIEV2YWxF
eGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyk7CiAg
ICAgICAgIEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PEV2YWxDb2RlQmxv
Y2sqPihnZW5lcmljQ29kZUJsb2NrKTsKICAgICAgICAgCi0gICAgICAgIEFTU0VSVCghY29kZUJs
b2NrLT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2soKSk7CiAgICAgICAgIEFTU0VSVChraW5kID09IENv
ZGVGb3JDYWxsKTsKICAgICAgICAgCiAgICAgICAgIG9sZENvZGVCbG9jayA9IGV4ZWN1dGFibGUt
Pm1fZXZhbENvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmgJKHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lm
bmRlZiBFeGVjdXRhYmxlX2gKICNkZWZpbmUgRXhlY3V0YWJsZV9oCiAKKyNpbmNsdWRlICJBcml0
eUNoZWNrTW9kZS5oIgogI2luY2x1ZGUgIkNhbGxEYXRhLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
SGFzaC5oIgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKQEAgLTM2LDYgKzM3
LDcgQEAKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNp
bmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyUHJlc2VydmF0aW9u
TW9kZS5oIgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgogI2luY2x1ZGUgIlNvdXJjZUNvZGUu
aCIKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgpAQCAtMTQ0LDM3ICsxNDYsOTQgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKICAgICAg
ICAgcmV0dXJuIGdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3QoKTsKICAgICB9Ci0KLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgZ2VuZXJhdGVkSklUQ29kZUZvckNhbGxXaXRoQXJpdHlDaGVj
aygpCi0gICAgewotICAgICAgICBBU1NFUlQobV9qaXRDb2RlRm9yQ2FsbCk7Ci0gICAgICAgIEFT
U0VSVChtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOwotICAgICAgICByZXR1cm4gbV9q
aXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrOwotICAgIH0KLQotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBnZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2soKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKG1faml0Q29kZUZvckNvbnN0cnVjdCk7Ci0gICAgICAgIEFTU0VS
VChtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7Ci0gICAgICAgIHJldHVybiBt
X2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjazsKLSAgICB9Ci0gICAgICAgIAotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZW5lcmF0ZWRKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Io
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgaWYgKGtpbmQgPT0g
Q29kZUZvckNhbGwpCi0gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVkSklUQ29kZUZvckNhbGxX
aXRoQXJpdHlDaGVjaygpOwotICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0
KTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlD
aGVjaygpOwotICAgIH0KLSAgICAgICAgCi0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJ
VENvZGVXaXRoQXJpdHlDaGVja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAg
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGVudHJ5cG9pbnRGb3IoCisgICAgICAgIFZNJiB2
bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBBcml0eUNoZWNrTW9kZSBhcml0eSwgUmVn
aXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKICAgICB7Ci0gICAgICAgIGlmIChraW5k
ID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVj
dXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKLSAgICAgICAgQVNT
RVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgICAgIHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNr
KTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIGNhY2hlZCByZXN1bHQuIFdlIG9ubHkg
aGF2ZSBpdCBmb3IgYXJpdHkgY2hlY2sgYmVjYXVzZSB3ZSB1c2UgdGhlCisgICAgICAgIC8vIG5v
LWFyaXR5IGVudHJ5cG9pbnQgaW4gbm9uLXZpcnR1YWwgY2FsbHMsIHdoaWNoIHdpbGwgImNhY2hl
IiB0aGlzIHZhbHVlIGRpcmVjdGx5IGluCisgICAgICAgIC8vIG1hY2hpbmUgY29kZS4KKyAgICAg
ICAgaWYgKGFyaXR5ID09IE11c3RDaGVja0FyaXR5KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGtp
bmQpIHsKKyAgICAgICAgICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAgICAgICAgICAgc3dp
dGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgcmVzdWx0ID0gbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAg
ICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0gbV9qaXRDb2RlRm9y
Q2FsbFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdzKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDb2RlRm9y
Q29uc3RydWN0OgorICAgICAgICAgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAg
ICAgICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9IG1faml0Q29kZUZv
ckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIChNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgcmVzdWx0ID0gbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hl
Y2tBbmRQcmVzZXJ2ZVJlZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9CisgICAgICAgICAgICBnZW5lcmF0ZWRKSVRDb2RlRm9y
KGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCh2bSwgdGhpcywgYXJpdHksIHJlZ2lzdGVycyk7CisgICAg
ICAgIGlmIChhcml0eSA9PSBNdXN0Q2hlY2tBcml0eSkgeworICAgICAgICAgICAgLy8gQ2FjaGUg
dGhlIHJlc3VsdDsgdGhpcyBpcyBuZWNlc3NhcnkgZm9yIHRoZSBKSVQncyB2aXJ0dWFsIGNhbGwg
b3B0aW1pemF0aW9ucy4KKyAgICAgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICAgICAg
Y2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgewor
ICAgICAgICAgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAg
ICAgICAgICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gcmVzdWx0
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE11c3RQ
cmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdp
dGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdzID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgICAgICAgICAgc3dpdGNoIChy
ZWdpc3RlcnMpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90
UmVxdWlyZWQ6CisgICAgICAgICAgICAgICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhB
cml0eUNoZWNrID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAgICAgICAgICAg
bV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3MgPSByZXN1
bHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb2Rl
V2l0aEFyaXR5Q2hlY2tGb3IoCisgICAgICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoa2luZCkgeworICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAgICAgc3dpdGNo
IChyZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RS
ZXF1aXJlZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFi
bGVCYXNlLCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOworICAgICAgICAgICAgY2Fz
ZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrQW5k
UHJlc2VydmVSZWdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb2RlRm9yQ29uc3Ry
dWN0OgorICAgICAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIGNhc2Ug
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVCYXNlLCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRo
QXJpdHlDaGVjayk7CisgICAgICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVCYXNlLCBtX2pp
dENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVja0FuZFByZXNlcnZlUmVncyk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgICAgICAKKyAgICAKICAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVyc0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCiAgICAgewogICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKQEAgLTIxMSwyMSAr
MjcwLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gTm9JbnRyaW5zaWM7CiAgICAgfQogICAg
ICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaG9zdENvZGVFbnRyeUZvcihDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQpCi0gICAgewotICAgICAgICByZXR1cm4gZ2VuZXJhdGVkSklU
Q29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoKTsKLSAgICB9Ci0KLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIganNDb2RlRW50cnlGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NG
b3JDYWxsKCk7Ci0gICAgfQotCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGpzQ29kZVdpdGhB
cml0eUNoZWNrRW50cnlGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKTsKLSAg
ICB9Ci0KIHByb3RlY3RlZDoKICAgICBFeGVjdXRhYmxlQmFzZSogbV9wcmV2OwogICAgIEV4ZWN1
dGFibGVCYXNlKiBtX25leHQ7CkBAIC0yMzQsNiArMjc4LDggQEAgcHJvdGVjdGVkOgogICAgIFJl
ZlB0cjxKSVRDb2RlPiBtX2ppdENvZGVGb3JDb25zdHJ1Y3Q7CiAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjazsKICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2s7CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVja0FuZFByZXNlcnZl
UmVnczsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0
aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3M7CiB9OwogCiBjbGFzcyBOYXRpdmVFeGVjdXRhYmxl
IDogcHVibGljIEV4ZWN1dGFibGVCYXNlIHsKQEAgLTI4OCw4ICszMzQsNiBAQCBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFBhc3NSZWZQdHI8SklUQ29kZT4gY2Fs
bFRodW5rLCBQYXNzUmVmUHRyPEpJVENvZGU+IGNvbnN0cnVjdFRodW5rLCBJbnRyaW5zaWMgaW50
cmluc2ljKQogICAgIHsKICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAg
ICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBjYWxsVGh1bmsgPyBjYWxsVGh1bmst
PmFkZHJlc3NGb3JDYWxsKCkgOiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKLSAgICAgICAgbV9q
aXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBjb25zdHJ1Y3RUaHVuayA/IGNvbnN0
cnVjdFRodW5rLT5hZGRyZXNzRm9yQ2FsbCgpIDogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CiAg
ICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBjYWxsVGh1bms7CiAgICAgICAgIG1faml0Q29kZUZv
ckNvbnN0cnVjdCA9IGNvbnN0cnVjdFRodW5rOwogICAgICAgICBtX2ludHJpbnNpYyA9IGludHJp
bnNpYzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ2lzdGVyUHJlc2Vy
dmF0aW9uTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZV9oCisjZGVmaW5lIFJl
Z2lzdGVyUHJlc2VydmF0aW9uTW9kZV9oCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTW9kZSB7CisgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJl
ZCwKKyAgICBNdXN0UHJlc2VydmVSZWdpc3RlcnMKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219620</attachid>
            <date>2013-12-18 22:59:23 -0800</date>
            <delta_ts>2013-12-18 23:52:42 -0800</delta_ts>
            <desc>the beginnings of preserved-registers-aware OSR exit</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>136908</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjA3OTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjY3LDYgKzI2NywxNiBAQAogCQkwRjY2NkVDRDE4MzZC
MzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVDQjE4MzZCMzdF
MDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkIxNERGM0Yx
NjAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGph
Y2VuY3lMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZFMTY5MTRERjNGMTMwMEI3QjJF
NCAvKiBERkdFZGdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEY2QjFDQjUxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCMzE4NUZDOUU5
MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCAqLzsgfTsKKwkJMEY2QjFDQjYxODVGQzlFOTAwODQ1
RDk3IC8qIEZUTEpTQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkIxQ0I5MTg2MTI0
NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNrTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQjcxODYxMjQ0QzAwODQ1RDk3IC8qIEFyaXR5Q2hl
Y2tNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEY2QjFDQkExODYxMjQ0QzAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQjgx
ODYxMjQ0QzAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkIxQ0JEMTg2MTI0NkEw
MDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQkIxODYxMjQ2
QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAgKi87
IH07CisJCTBGNkIxQ0JFMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldy
YXBwZXJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNkIxQ0JDMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldy
YXBwZXJHZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjZCMUNDMzE4NjJDNDc4MDA4NDVEOTcgLyogRlRMUmVnaXN0ZXJBdE9mZnNl
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZC
MUNCRjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMUmVnaXN0ZXJBdE9mZnNldC5jcHAgKi87IH07CisJ
CTBGNkIxQ0M0MTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExSZWdpc3RlckF0T2Zmc2V0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNDMDE4NjJDNDc4
MDA4NDVEOTcgLyogRlRMUmVnaXN0ZXJBdE9mZnNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkIxQ0M1MTg2MkM0NzgwMDg0NUQ5NyAvKiBG
VExVbndpbmRJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNkIxQ0MxMTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmNwcCAqLzsg
fTsKKwkJMEY2QjFDQzYxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0MyMTg2MkM0Nzgw
MDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3MDI1QTkxNzE0QjBGQTAwMzgyQzBFIC8qIERGR09TUkV4
aXRDb21waWxlckNvbW1vbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjcwMjVBNzE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcCAqLzsgfTsKIAkJMEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4
aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3MDI1QTgxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNv
bW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0
Q0ExMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAq
LzsgfTsKQEAgLTE1NzksNiArMTU4OSwxNiBAQAogCQkwRjY2NkVDQjE4MzZCMzdFMDBEMDE3RjEg
LyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oOyBwYXRo
ID0gZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGphY2VuY3lMaXN0
Lmg7IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7IHBhdGggPSBkZmcvREZHRWRnZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZCMUNCMzE4NUZDOUU5MDA4NDVEOTcgLyog
RlRMSlNDYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpT
Q2FsbC5jcHA7IHBhdGggPSBmdGwvRlRMSlNDYWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGwuaDsgcGF0aCA9IGZ0bC9GVExKU0Nh
bGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QjFDQjcxODYxMjQ0QzAwODQ1
RDk3IC8qIEFyaXR5Q2hlY2tNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEFyaXR5Q2hlY2tNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNkIxQ0I4
MTg2MTI0NEMwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNkIxQ0JCMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdp
c3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QjFDQkMxODYxMjQ2QTAwODQ1RDk3
IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QjFDQkYxODYyQzQ3ODAwODQ1RDk3
IC8qIEZUTFJlZ2lzdGVyQXRPZmZzZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gRlRMUmVnaXN0ZXJBdE9mZnNldC5jcHA7IHBhdGggPSBmdGwvRlRMUmVnaXN0ZXJB
dE9mZnNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNkIxQ0MwMTg2MkM0
NzgwMDg0NUQ5NyAvKiBGVExSZWdpc3RlckF0T2Zmc2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEZUTFJlZ2lzdGVyQXRPZmZzZXQuaDsgcGF0aCA9IGZ0bC9GVExSZWdpc3Rl
ckF0T2Zmc2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNkIxQ0MxMTg2MkM0
NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IEZUTFVud2luZEluZm8uY3BwOyBwYXRoID0gZnRsL0ZUTFVud2luZEluZm8u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZCMUNDMjE4NjJDNDc4MDA4NDVE
OTcgLyogRlRMVW53aW5kSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
VExVbndpbmRJbmZvLmg7IHBhdGggPSBmdGwvRlRMVW53aW5kSW5mby5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjcwMjVBNzE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA7IHBhdGggPSBkZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MDI1QTgxNzE0QjBG
ODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDsgcGF0aCA9IGRmZy9E
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQmFja3dhcmRzUHJv
cGFnYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFz
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODU4LDYgKzI4NzgsOCBAQAog
CQkJCTBGRUEwQTAzMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmggKi8sCiAJCQkJQTc4
QTk3N0QxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5jcHAgKi8sCiAJCQkJQTc4
QTk3N0UxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5oICovLAorCQkJCTBGNkIx
Q0IzMTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwICovLAorCQkJCTBGNkIxQ0I0MTg1
RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuaCAqLywKIAkJCQkwRjhGMkI5MzE3MkUwNDlFMDA3
REJEQTUgLyogRlRMTGluay5jcHAgKi8sCiAJCQkJMEY4RjJCOTQxNzJFMDQ5RTAwN0RCREE1IC8q
IEZUTExpbmsuaCAqLywKIAkJCQkwRkNFRkFERDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRp
b24uY3BwICovLApAQCAtMjg3NCw2ICsyODk2LDggQEAKIAkJCQkwRjIzNUJDQTE3MTc4RTFDMDA2
OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGVyLmggKi8sCiAJCQkJMEZFQTBBMjkxNzA5NjI5NjAw
QkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgKi8sCiAJCQkJMEZFQTBBMDYxNzA1MTNEQjAwQkI3MjJD
IC8qIEZUTE91dHB1dC5oICovLAorCQkJCTBGNkIxQ0JGMTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExS
ZWdpc3RlckF0T2Zmc2V0LmNwcCAqLywKKwkJCQkwRjZCMUNDMDE4NjJDNDc4MDA4NDVEOTcgLyog
RlRMUmVnaXN0ZXJBdE9mZnNldC5oICovLAogCQkJCTBGQ0VGQUE5MTgwNEMxM0UwMDQ3MkNFNCAv
KiBGVExTYXZlUmVzdG9yZS5jcHAgKi8sCiAJCQkJMEZDRUZBQUExODA0QzEzRTAwNDcyQ0U0IC8q
IEZUTFNhdmVSZXN0b3JlLmggKi8sCiAJCQkJMEYyNUYxQUExODE2MzVGMzAwNTIyRjM5IC8qIEZU
TFNsb3dQYXRoQ2FsbC5jcHAgKi8sCkBAIC0yODg4LDYgKzI5MTIsOCBAQAogCQkJCTBGMjM1QkNC
MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExUaHVua3MuY3BwICovLAogCQkJCTBGMjM1QkNDMTcxNzhF
MUMwMDY5MEM3RiAvKiBGVExUaHVua3MuaCAqLywKIAkJCQkwRkVBMEExQjE3MDhCMDA3MDBCQjcy
MkMgLyogRlRMVHlwZWRQb2ludGVyLmggKi8sCisJCQkJMEY2QjFDQzExODYyQzQ3ODAwODQ1RDk3
IC8qIEZUTFVud2luZEluZm8uY3BwICovLAorCQkJCTBGNkIxQ0MyMTg2MkM0NzgwMDg0NUQ5NyAv
KiBGVExVbndpbmRJbmZvLmggKi8sCiAJCQkJMEYyMzVCQ0QxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TFZhbHVlRm9ybWF0LmNwcCAqLywKIAkJCQkwRjIzNUJDRTE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
VmFsdWVGb3JtYXQuaCAqLywKIAkJCQkwRkRCMkNDODE3M0RBNTFFMDA3QjNDMUIgLyogRlRMVmFs
dWVGcm9tQmxvY2suaCAqLywKQEAgLTMwMzIsNiArMzA1OCw4IEBACiAJCQkJMEZDNzEyRTExN0NE
ODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8s
CiAJCQkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovLAog
CQkJCUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovLAorCQkJ
CTBGNkIxQ0JCMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJH
ZW5lcmF0b3IuY3BwICovLAorCQkJCTBGNkIxQ0JDMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3Rl
clByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaCAqLywKIAkJCQkwRkMzMTQxNDE4MTQ2RDcw
MDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuY3BwICovLAogCQkJCTBGQzMxNDEwMTgxNDU1OTEwMDAz
MzIzMiAvKiBSZWdpc3RlclNldC5oICovLAogCQkJCTBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAv
KiBSZXBhdGNoLmNwcCAqLywKQEAgLTMzNjksNiArMzM5Nyw3IEBACiAJCQkJQTc2MTQwQzgxODI5
ODJDQjAwNzUwNjI0IC8qIEFyZ3VtZW50c0l0ZXJhdG9yQ29uc3RydWN0b3IuaCAqLywKIAkJCQlB
NzYxNDBDOTE4Mjk4MkNCMDA3NTA2MjQgLyogQXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGUuY3Bw
ICovLAogCQkJCUE3NjE0MENBMTgyOTgyQ0IwMDc1MDYyNCAvKiBBcmd1bWVudHNJdGVyYXRvclBy
b3RvdHlwZS5oICovLAorCQkJCTBGNkIxQ0I3MTg2MTI0NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNr
TW9kZS5oICovLAogCQkJCUE3QThBRjI1MTdBREI1RjIwMDVBQjE3NCAvKiBBcnJheUJ1ZmZlci5j
cHAgKi8sCiAJCQkJQTdBOEFGMjYxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggKi8s
CiAJCQkJMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0
Y2hwb2ludC5jcHAgKi8sCkBAIC0zNjY3LDYgKzM2OTYsNyBAQAogCQkJCUY2OTJBODdDMDI1NTU5
N0QwMUZGNjBGNyAvKiBSZWdFeHBPYmplY3QuaCAqLywKIAkJCQlCQ0QyMDJCRjBFMTcwNkE3MDAy
QzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmNwcCAqLywKIAkJCQlCQ0QyMDJDMDBFMTcwNkE3MDAy
QzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmggKi8sCisJCQkJMEY2QjFDQjgxODYxMjQ0QzAwODQ1
RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oICovLAogCQkJCTBGQjdGMzkxMTVFRDhF
MzgwMEYxNjdCMiAvKiBSZWplY3QuaCAqLywKIAkJCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkg
LyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLywKIAkJCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkg
LyogU2FtcGxpbmdDb3VudGVyLmggKi8sCkBAIC00MzI1LDYgKzQzNTUsNyBAQAogCQkJCUMyRUFB
M0ZBMTQ5QTgzNUUwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzJDOEQwMkQxNEEzQzZFMDAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY1QTUyRDAxN0FERDcxNzAwOEVDQjJEIC8qIENvcHlUb2tlbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEY2QjFDQzYxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8u
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyMjM5RDE4MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5Vmlz
aXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMTkxNjI2MkJERDAwNUFDNUZEIC8qIENv
cHlWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIxOEQxNDAxNjU1Q0ZENTAw
NjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC00Mzk1LDYgKzQ0MjYs
NyBAQAogCQkJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzUxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZp
bmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzcxNzk3MzhCODAwOURGNzQ0IC8q
IERGR0ZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2QjFDQjYxODVGQzlFOTAwODQ1
RDk3IC8qIEZUTEpTQ2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDMTYxNTFDNUQ0RjAw
Q0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQzMzk3MTdG
RkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5
Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCkBA
IC00NDMwLDYgKzQ0NjIsNyBAQAogCQkJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdP
U1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkEx
NDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkM5
OUQxMTg0RUM4QUQwMDlDMTBBQiAvKiBDb25zdGFudE1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGNkIxQ0JBMTg2MTI0NEMwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0
QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RUQxODIzNDBCNDAwQTgyRTY5IC8qIFJl
bW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFD
MTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVy
cyAqLywKQEAgLTQ1ODgsNiArNDYyMSw3IEBACiAJCQkJMEY0NjgwODIxNEJBNTcyRDAwQkZFMjcy
IC8qIEpJVEV4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjE0RTFGMTgxMjRBQ0Uw
MDlCNkI0RCAvKiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZDQzg1QTEwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGluZXMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGNkIxQ0JFMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBw
ZXJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTREMTdFRTI3NDkwMEFCQjIx
NyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzkwREQ3MDE4MkY0OTk3
MDA1ODg4MDcgLyogSlNTZXRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNEU1NEUx
N0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbldyYXBwZXJzLmggaW4gSGVhZGVycyAqLywK
QEAgLTQ2MDMsNiArNDYzNyw3IEBACiAJCQkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJ
VFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQxNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNBY3RpdmF0aW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjZCMUNCOTE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlDaGVja01vZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg0MDQ4MDEzMTAyMUExRDkwMDhFN0YwMSAvKiBKU0FQSVZh
bHVlV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJDRjM5QzIxNkUxNUE4MTAwREQ2OUJF
IC8qIEpTQVBJV3JhcHBlck9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc2MTQwRDIxODI5
ODJDQjAwNzUwNjI0IC8qIEpTQXJndW1lbnRzSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAt
NDY1NSw2ICs0NjkwLDcgQEAKIAkJCQlCQzE4QzQyMzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNMb2Nr
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjVENzA5QzE2REU5OUY0MDBGQ0E2QkMgLyogSlNNYW5h
Z2VkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAv
KiBKU01hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2QjFDQzQxODYyQzQ3ODAwODQ1RDk3IC8q
IEZUTFJlZ2lzdGVyQXRPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0ODc0QUU0MTVFQkRF
NEEwMDJFMzU4NyAvKiBKU05hbWVTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjQw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQy
NTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNPYmplY3RSZWYuaCBpbiBIZWFkZXJzICovLApAQCAtNTQ5
NSw2ICs1NTMxLDcgQEAKIAkJCQk4Njg4MEY0RDE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGRjE3QTBCOENDMDA3NzNB
RDggLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUZC
NEY0MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGNkIxQ0JEMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlv
bldyYXBwZXJHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMDk3QTExNDZCMjhD
QTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyNzE3
RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkQ4QTMyOTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC01NTQ5LDggKzU1ODYs
MTAgQEAKIAkJCQkwRkNFRkFBQjE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQjExODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQ
YXRoQ2FsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI1RjFCMzE4MTYzNUYzMDA1MjJGMzkg
LyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNkIxQ0M1MTg2
MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
OUQzMzlBMTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZFQTBBMTYxNzA2QkI5MDAwQkI3MjJDIC8qIEZUTFN0YXRlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGNkIxQ0I1MTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYyMzVCRTExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJFMzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVG
b3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0IxMDdFQzM3NjAwNDI3QTQ4IC8q
IEZ1bmN0aW9uQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC01NzM3LDYgKzU3NzYs
NyBAQAogCQkJCTBGNjY2RUNDMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JW
YWxpZGF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEIxNjc1NDgzMTAw
RjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4
RDE2NzU0ODM3MDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjZCMUNDMzE4NjJDNDc4MDA4NDVEOTcgLyogRlRMUmVnaXN0ZXJBdE9mZnNldC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyQjE2NzcxQzNBMDA5Q0NCMDcgLyogUHJvZmls
ZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0ZCNjBBNDEwM0Y3
REMyMDAxN0EyODYgLyogUHJvcGVydHlEZXNjcmlwdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0NDY5REU3MTA3RUM3RTcwMDY1MDQ0NiAvKiBQcm9wZXJ0eU5hbWVBcnJheS5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMTYwNzk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzA5LDkgKzMwOSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCogZGF0YUxvY2F0
aW9uKCkgY29uc3QgeyBBU1NFUlRfVkFMSURfQ09ERV9QT0lOVEVSKG1fdmFsdWUpOyByZXR1cm4g
bV92YWx1ZTsgfQogI2VuZGlmCiAKLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0CisgICAgdHlw
ZWRlZiB2b2lkKiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7
CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuICFtX3ZhbHVlOworICAgICAgICByZXR1cm4gISFtX3ZhbHVlID8gcmVpbnRlcnBy
ZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oMSkgOiAwOwogICAgIH0KICAgICAKICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBvdGhlcikgY29uc3QK
QEAgLTQzNCw3ICs0MzUsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSlNDOjp0cnlUb0Rp
c2Fzc2VtYmxlKG1fY29kZVB0ciwgc2l6ZSgpLCBwcmVmaXgsIFdURjo6ZGF0YUZpbGUoKSk7CiAg
ICAgfQogICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fY29kZVB0
cjsgfQorICAgIHR5cGVkZWYgdm9pZCogKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6KlVuc3BlY2lm
aWVkQm9vbFR5cGUpOworICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhIW1fY29kZVB0ciA/IHJlaW50ZXJwcmV0X2Nhc3Q8VW5z
cGVjaWZpZWRCb29sVHlwZSo+KDEpIDogMDsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDE2MDc5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zNywxNSArMzcsMTUgQEAgdm9pZCBDYWxsTGlua0luZm86OnVubGluayhWTSYgdm0sIFJl
cGF0YwogewogICAgIEFTU0VSVChpc0xpbmtlZCgpKTsKICAgICAKKyAgICBpZiAoT3B0aW9uczo6
c2hvd0Rpc2Fzc2VtYmx5KCkpCisgICAgICAgIGRhdGFMb2coIlVubGlua2luZyBjYWxsIGluICIs
ICpyZXBhdGNoQnVmZmVyLmNvZGVCbG9jaygpLCAiIGF0ICIsIGNvZGVPcmlnaW4sICJcbiIpOwor
ICAgIAogICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJX
aXRoUGF0Y2goUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0
ZXIoaG90UGF0aEJlZ2luKSwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+
KGNhbGxlZUdQUiksIDApOwotICAgIGlmIChpc0RGRykgewotI2lmIEVOQUJMRShERkdfSklUKQot
ICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIChjYWxsVHlw
ZSA9PSBDb25zdHJ1Y3QgPyB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRv
cikgOiB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpKS5jb2RlKCkpOwotI2Vs
c2UKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgIH0g
ZWxzZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIGNh
bGxUeXBlID09IENvbnN0cnVjdCA/IHZtLmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRodW5rR2Vu
ZXJhdG9yKS5jb2RlKCkgOiB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNv
ZGUoKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCisgICAgICAgIGNhbGxSZXR1cm5Mb2Nh
dGlvbiwKKyAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rVGh1bmtHZW5lcmF0b3JGb3IoCisgICAg
ICAgICAgICBjYWxsVHlwZSA9PSBDb25zdHJ1Y3QgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZv
ckNhbGwsCisgICAgICAgICAgICByZXBhdGNoQnVmZmVyLmNvZGVCbG9jaygpLT5qaXRUeXBlKCkg
PT0gSklUQ29kZTo6RlRMSklUID8gTXVzdFByZXNlcnZlUmVnaXN0ZXJzIDogUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25Ob3RSZXF1aXJlZCkpLmNvZGUoKSk7CiAgICAgaGFzU2VlblNob3VsZFJlcGF0Y2gg
PSBmYWxzZTsKICAgICBjYWxsZWUuY2xlYXIoKTsKICAgICBzdHViLmNsZWFyKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lv
biAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZv
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDYgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6
IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgICAgICAKICAgICBDYWxsTGlua0luZm8oKQogICAgICAg
ICA6IGhhc1NlZW5TaG91bGRSZXBhdGNoKGZhbHNlKQotICAgICAgICAsIGlzREZHKGZhbHNlKQog
ICAgICAgICAsIGhhc1NlZW5DbG9zdXJlKGZhbHNlKQogICAgICAgICAsIGNhbGxUeXBlKE5vbmUp
CiAgICAgewpAQCAtODAsNyArNzksNiBAQCBzdHJ1Y3QgQ2FsbExpbmtJbmZvIDogcHVibGljIEJh
c2ljUmF3U2VuCiAgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IGxhc3RTZWVuQ2FsbGVlOwog
ICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHViOwogICAgIGJvb2wgaGFzU2Vl
blNob3VsZFJlcGF0Y2ggOiAxOwotICAgIGJvb2wgaXNERkcgOiAxOwogICAgIGJvb2wgaGFzU2Vl
bkNsb3N1cmUgOiAxOwogICAgIHVuc2lnbmVkIGNhbGxUeXBlIDogNTsgLy8gQ2FsbFR5cGUKICAg
ICB1bnNpZ25lZCBjYWxsZWVHUFIgOiA4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcsMTcgKzI1
NywxNSBAQCBwdWJsaWM6CiAgICAgLy8gRXhhY3RseSBlcXVpdmFsZW50IHRvIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKGNvZGVCbG9jay0+
c3BlY2lhbGl6YXRpb25LaW5kKCkpCiAgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IG5ld1JlcGxh
Y2VtZW50KCk7CiAgICAgCi0gICAgdm9pZCBzZXRKSVRDb2RlKFBhc3NSZWZQdHI8SklUQ29kZT4g
Y29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVXaXRoQXJpdHlDaGVjaykKKyAgICB2b2lk
IHNldEpJVENvZGUoUGFzc1JlZlB0cjxKSVRDb2RlPiBjb2RlKQogICAgIHsKICAgICAgICAgQVNT
RVJUKG1faGVhcC0+aXNEZWZlcnJlZCgpKTsKICAgICAgICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1l
bW9yeUNvc3QoY29kZS0+c2l6ZSgpKTsKICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhpcyBpcyBw
cm9iYWJseSBub3QgbmVlZGVkIGJlY2F1c2UgdGhlIGxvY2sgd2lsbCBhbHNvIGRvIHNvbWV0aGlu
ZyBzaW1pbGFyLCBidXQgaXQncyBnb29kIHRvIGJlIHBhcmFub2lkLgogICAgICAgICBtX2ppdENv
ZGUgPSBjb2RlOwotICAgICAgICBtX2ppdENvZGVXaXRoQXJpdHlDaGVjayA9IGNvZGVXaXRoQXJp
dHlDaGVjazsKICAgICB9CiAgICAgUGFzc1JlZlB0cjxKSVRDb2RlPiBqaXRDb2RlKCkgeyByZXR1
cm4gbV9qaXRDb2RlOyB9Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGppdENvZGVXaXRoQXJp
dHlDaGVjaygpIHsgcmV0dXJuIG1faml0Q29kZVdpdGhBcml0eUNoZWNrOyB9CiAgICAgSklUQ29k
ZTo6SklUVHlwZSBqaXRUeXBlKCkgY29uc3QKICAgICB7CiAgICAgICAgIEpJVENvZGUqIGppdENv
ZGUgPSBtX2ppdENvZGUuZ2V0KCk7CkBAIC0xMDY2LDcgKzEwNjQsNiBAQCBwcml2YXRlOgogICAg
IFNlbnRpbmVsTGlua2VkTGlzdDxMTEludENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50aW5lbE5v
ZGU8TExJbnRDYWxsTGlua0luZm8+PiBtX2luY29taW5nTExJbnRDYWxsczsKICNlbmRpZgogICAg
IFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGU7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1f
aml0Q29kZVdpdGhBcml0eUNoZWNrOwogI2lmIEVOQUJMRShKSVQpCiAgICAgQmFnPFN0cnVjdHVy
ZVN0dWJJbmZvPiBtX3N0dWJJbmZvczsKICAgICBWZWN0b3I8QnlWYWxJbmZvPiBtX2J5VmFsSW5m
b3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lv
biAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTczLDYgKzczLDIzIEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBj
b21waWxlSW1wbCgKICAgICBpZiAoIU9wdGlvbnM6OmJ5dGVjb2RlUmFuZ2VUb0RGR0NvbXBpbGUo
KS5pc0luUmFuZ2UoY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkpKQogICAgICAgICByZXR1
cm4gQ29tcGlsYXRpb25GYWlsZWQ7CiAgICAgCisgICAgaWYgKGNvZGVCbG9jay0+aGFzaCgpID09
IENvZGVCbG9ja0hhc2goIkJVMGNnRCIpKQorICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWls
ZWQ7CisgICAgCisgICAgaWYgKG1vZGUgPT0gRlRMRm9yT1NSRW50cnlNb2RlKQorICAgICAgICBy
ZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CisgICAgCisgICAgLy8gRGlzYWJsaW5nIGNvbXBpbGF0
aW9uIG9mIG1vbnRTcXJUbyNDREZlUW0gbWFrZXMgdGhpbmdzIHdvcmsuCisgICAgCisgICAgaWYg
KGNvZGVCbG9jay0+aGFzaCgpID09IENvZGVCbG9ja0hhc2goIkFQTUNYUyIpKQorICAgICAgICBy
ZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CisgICAgCisgICAgaWYgKGNvZGVCbG9jay0+aGFzaCgp
ID09IENvZGVCbG9ja0hhc2goIkJmVkdqayIpKQorICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25G
YWlsZWQ7CisgICAgCisgICAgaWYgKGNvZGVCbG9jay0+aGFzaCgpID09IENvZGVCbG9ja0hhc2go
IkVsRzRBWSIpKQorICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CisgICAgCiAgICAg
aWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcygpKQogICAgICAgICBkYXRhTG9nKCJERkcoRHJpdmVy
KSBjb21waWxpbmcgIiwgKmNvZGVCbG9jaywgIiB3aXRoICIsIG1vZGUsICIsIG51bWJlciBvZiBp
bnN0cnVjdGlvbnMgPSAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSwgIlxuIik7CiAg
ICAgCkBAIC04MCwxMSArOTcsMTkgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJ
bXBsKAogICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFsbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRvZXMg
ZmluYWxpemF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICB2bS5nZXRDVElTdHViKG9zckV4
aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwogICAgIHZtLmdldENUSVN0dWIodGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKLSAgICB2bS5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpOwotICAgIHZtLmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRodW5r
R2VuZXJhdG9yKTsKLSAgICB2bS5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJh
dG9yKTsKLSAgICB2bS5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpOwotICAg
IHZtLmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKTsKKyAgICBpZiAo
bW9kZSA9PSBERkdNb2RlKSB7CisgICAgICAgIHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dl
bmVyYXRvcik7CisgICAgICAgIHZtLmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRodW5rR2VuZXJh
dG9yKTsKKyAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRv
cik7CisgICAgICAgIHZtLmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcik7Cisg
ICAgICAgIHZtLmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGhhdFByZXNlcnZlc1Jl
Z3NUaHVua0dlbmVyYXRvcik7CisgICAgICAgIHZtLmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRo
YXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOworICAgICAgICB2bS5nZXRDVElTdHViKGxp
bmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOworICAgICAgICB2
bS5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcik7
CisgICAgICAgIHZtLmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdz
VGh1bmtHZW5lcmF0b3IpOworICAgIH0KICAgICAKICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFk
b3B0UmVmKAogICAgICAgICBuZXcgUGxhbihjb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNv
ZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVlcykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzAsOSArMjMwLDExIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qc0NhbGxzLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7
CiAgICAgICAgIGluZm8uY2FsbFR5cGUgPSBtX2pzQ2FsbHNbaV0ubV9jYWxsVHlwZTsKLSAgICAg
ICAgaW5mby5pc0RGRyA9IHRydWU7CiAgICAgICAgIGluZm8uY29kZU9yaWdpbiA9IG1fanNDYWxs
c1tpXS5tX2NvZGVPcmlnaW47Ci0gICAgICAgIGxpbmtCdWZmZXIubGluayhtX2pzQ2FsbHNbaV0u
bV9zbG93Q2FsbCwgRnVuY3Rpb25QdHIoKG1fdm0tPmdldENUSVN0dWIoaW5mby5jYWxsVHlwZSA9
PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA/IGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvciA6
IGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwor
ICAgICAgICBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IgPSBsaW5rVGh1bmtHZW5lcmF0b3JGb3Io
CisgICAgICAgICAgICBpbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0ID8g
Q29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsLAorICAgICAgICAgICAgUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CisgICAgICAgIGxpbmtCdWZmZXIubGluayhtX2pzQ2FsbHNb
aV0ubV9zbG93Q2FsbCwgRnVuY3Rpb25QdHIobV92bS0+Z2V0Q1RJU3R1YihnZW5lcmF0b3IpLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0
aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9qc0NhbGxzW2ldLm1fc2xvd0Nh
bGwpOwogICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZiht
X2pzQ2FsbHNbaV0ubV90YXJnZXRUb0NoZWNrKTsKICAgICAgICAgaW5mby5ob3RQYXRoT3RoZXIg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2pzQ2FsbHNbaV0ubV9mYXN0Q2FsbCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3Bw
CShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZp
bmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDkgQEAgSklURmluYWxpemVy
Ojp+SklURmluYWxpemVyKCkKIAogYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKCkKIHsKLSAg
ICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmKG1fbGlua0J1ZmZlci0+ZmluYWxpemVDb2Rl
V2l0aG91dERpc2Fzc2VtYmx5KCkpOwotICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUo
bV9qaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CisgICAgbV9qaXRDb2RlLT5pbml0
aWFsaXplQ29kZVJlZigKKyAgICAgICAgbV9saW5rQnVmZmVyLT5maW5hbGl6ZUNvZGVXaXRob3V0
RGlzYXNzZW1ibHkoKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOworICAgIG1fcGxhbi5jb2Rl
QmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlKTsKICAgICAKICAgICBmaW5hbGl6ZUNvbW1vbigp
OwogICAgIApAQCAtNTksOCArNjAsOSBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemUoKQog
Ym9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKCFtX3dpdGhBcml0eUNoZWNrLmlzRW1wdHlWYWx1ZSgpKTsKLSAgICBtX2ppdENvZGUtPmlu
aXRpYWxpemVDb2RlUmVmKG1fbGlua0J1ZmZlci0+ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2Vt
Ymx5KCkpOwotICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLCBtX3dp
dGhBcml0eUNoZWNrKTsKKyAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmKAorICAgICAg
ICBtX2xpbmtCdWZmZXItPmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpLCBtX3dpdGhB
cml0eUNoZWNrKTsKKyAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZSk7
CiAgICAgCiAgICAgZmluYWxpemVDb21tb24oKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTYw
Nzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzA0LDExICs3MDQsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CiAKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAg
SklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIEpJVENvbXBpbGVyOjpKdW1wIHNs
b3dQYXRoOwogCiAgICAgbV9qaXQuZW1pdFN0b3JlQ29kZU9yaWdpbihub2RlLT5jb2RlT3JpZ2lu
KTsKICAgICAKLSAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCB0YXJnZXRUb0NoZWNrLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSkpOworICAgIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNo
UHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCB0YXJnZXRU
b0NoZWNrLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSk7CiAKICAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgT0JKRUNUX09GRlNFVE9G
KEpTRnVuY3Rpb24sIG1fc2NvcGUpKSwgcmVzdWx0R1BSKTsKICAgICBtX2ppdC5zdG9yZTY0KHJl
c3VsdEdQUiwgY2FsbGVlRnJhbWVTbG90KEpTU3RhY2s6OlNjb3BlQ2hhaW4pKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9u
IDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw4IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2
ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIEZ1bmN0aW9uUmVlbnRyeVdhdGNocG9pbnQ6
CiAgICAgY2FzZSBWYXJpYWJsZVdhdGNocG9pbnQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKKyAg
ICBjYXNlIENhbGw6CisgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBP
Sy4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRCeUlkOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2
ICszNyw3IEBACiAjaW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVTaXplLmgiCiAjaW5jbHVkZSAiRlRM
SklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTFRodW5rcy5oIgorI2luY2x1ZGUgIkZUTFVud2luZElu
Zm8uaCIKICNpbmNsdWRlICJKSVRTdHVicy5oIgogI2luY2x1ZGUgIkxMVk1BUEkuaCIKICNpbmNs
dWRlICJMaW5rQnVmZmVyLmgiCkBAIC00OSw3ICs1MCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBERkc7
CiBzdGF0aWMgdWludDhfdCogbW1BbGxvY2F0ZUNvZGVTZWN0aW9uKAogICAgIHZvaWQqIG9wYXF1
ZVN0YXRlLCB1aW50cHRyX3Qgc2l6ZSwgdW5zaWduZWQgYWxpZ25tZW50LCB1bnNpZ25lZCwgY29u
c3QgY2hhciogc2VjdGlvbk5hbWUpCiB7Ci0gICAgCiAgICAgU3RhdGUmIHN0YXRlID0gKnN0YXRp
Y19jYXN0PFN0YXRlKj4ob3BhcXVlU3RhdGUpOwogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKGFs
aWdubWVudCA8PSBqaXRBbGxvY2F0aW9uR3JhbnVsZSk7CkBAIC01OCw2ICs1OCwxMSBAQCBzdGF0
aWMgdWludDhfdCogbW1BbGxvY2F0ZUNvZGVTZWN0aW9uKAogICAgICAgICBzdGF0ZS5ncmFwaC5t
X3ZtLmV4ZWN1dGFibGVBbGxvY2F0b3IuYWxsb2NhdGUoCiAgICAgICAgICAgICBzdGF0ZS5ncmFw
aC5tX3ZtLCBzaXplLCBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0
U3VjY2VlZCk7CiAgICAgCisgICAgaWYgKCFzdHJjbXAoc2VjdGlvbk5hbWUsICJfX2NvbXBhY3Rf
dW53aW5kIikpIHsKKyAgICAgICAgc3RhdGUuY29tcGFjdFVud2luZCA9IHJlc3VsdC0+c3RhcnQo
KTsKKyAgICAgICAgc3RhdGUuY29tcGFjdFVud2luZFNpemUgPSByZXN1bHQtPnNpemVJbkJ5dGVz
KCk7CisgICAgfQorICAgIAogICAgIHN0YXRlLmppdENvZGUtPmFkZEhhbmRsZShyZXN1bHQpOwog
ICAgIHN0YXRlLmNvZGVTZWN0aW9uTmFtZXMuYXBwZW5kKHNlY3Rpb25OYW1lKTsKICAgICAKQEAg
LTI5OSw2ICszMDQsNDQgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBz
KAogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIC8vIEhhbmRsaW5nIEpTIGNhbGxzIGlzIHdl
aXJkOiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIHNvcnQgdGhlbSBieSB0aGUgUEMgaW4gTExW
TQorICAgIC8vIGdlbmVyYXRlZCBjb2RlLiBUaGF0IGltcGxpZXMgZmlyc3QgcHJ1bmluZyB0aGUg
b25lcyB0aGF0IExMVk0gZGlkbid0IGdlbmVyYXRlLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzdGF0ZS5qc0NhbGxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEpTQ2FsbCYgY2FsbCA9
IHN0YXRlLmpzQ2FsbHNbaV07CisgICAgICAgIAorICAgICAgICBTdGFja01hcHM6OlJlY29yZE1h
cDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGNhbGwuc3RhY2ttYXBJRCgpKTsKKyAg
ICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CisgICAgICAgICAgICAvLyBJdCB3
YXMgb3B0aW1pemVkIG91dC4gUHJ1bmUgaXQuCisgICAgICAgICAgICBjYWxsID0gc3RhdGUuanND
YWxscy5sYXN0KCk7CisgICAgICAgICAgICBzdGF0ZS5qc0NhbGxzLnJlbW92ZUxhc3QoKTsKKyAg
ICAgICAgICAgIGktLTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBjYWxsLm1faW5zdHJ1Y3Rpb25PZmZzZXQgPSBpdGVyLT52YWx1ZS5pbnN0cnVj
dGlvbk9mZnNldDsKKyAgICB9CisgICAgCisgICAgc3RkOjpzb3J0KHN0YXRlLmpzQ2FsbHMuYmVn
aW4oKSwgc3RhdGUuanNDYWxscy5lbmQoKSk7CisgICAgCisgICAgY29kZUJsb2NrLT5zZXROdW1i
ZXJPZkNhbGxMaW5rSW5mb3Moc3RhdGUuanNDYWxscy5zaXplKCkpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IHN0YXRlLmpzQ2FsbHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIEpTQ2FsbCYgY2Fs
bCA9IHN0YXRlLmpzQ2FsbHNbaV07CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzIGZhc3RQYXRoSklU
KCZ2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgY2FsbC5lbWl0KGZhc3RQYXRoSklUKTsKKyAgICAg
ICAgCisgICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJh
dGVkRnVuY3Rpb24pICsgY2FsbC5tX2luc3RydWN0aW9uT2Zmc2V0OworICAgICAgICAKKyAgICAg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCAmZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJQywgc2l6
ZU9mQ2FsbCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZlci5pc1ZhbGlkKCkp
OworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFzc2VtYmxlclR5cGVfVDo6Zmls
bE5vcHMoCisgICAgICAgICAgICBzdGFydE9mSUMgKyBsaW5rQnVmZmVyLnNpemUoKSwgc2l6ZU9m
Q2FsbCgpIC0gbGlua0J1ZmZlci5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgQ2FsbExpbmtJ
bmZvJiBpbmZvID0gY29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CisgICAgICAgIGNhbGwubGlu
ayh2bSwgbGlua0J1ZmZlciwgaW5mbyk7CisgICAgfQorICAgIAogICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgIAogICAgIGZvciAodW5zaWduZWQgZXhpdElu
ZGV4ID0gaml0Q29kZS0+b3NyRXhpdC5zaXplKCk7IGV4aXRJbmRleC0tOykgewpAQCAtMzk4LDcg
KzQ0MSw3IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICBFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlKiBoYW5kbGUgPSBzdGF0ZS5qaXRDb2RlLT5oYW5kbGVzKClbaV0uZ2V0
KCk7CiAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICJHZW5lcmF0ZWQgTExW
TSBjb2RlIGZvciAiLAotICAgICAgICAgICAgICAgIENvZGVCbG9ja1dpdGhKSVRUeXBlKHN0YXRl
LmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQpLAorICAgICAgICAgICAgICAgIENv
ZGVCbG9ja1dpdGhKSVRUeXBlKHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpGVExK
SVQpLAogICAgICAgICAgICAgICAgICIgIyIsIGksICIsICIsIHN0YXRlLmNvZGVTZWN0aW9uTmFt
ZXNbaV0sICI6XG4iKTsKICAgICAgICAgICAgIGRpc2Fzc2VtYmxlKAogICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cihoYW5kbGUtPnN0YXJ0KCkpLCBoYW5kbGUtPnNpemVJbkJ5
dGVzKCksCkBAIC00MDksMTcgKzQ1MiwyMiBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlKQog
ICAgICAgICAgICAgY29uc3QgUmVmQ291bnRlZEFycmF5PExTZWN0aW9uV29yZD4mIHNlY3Rpb24g
PSBzdGF0ZS5qaXRDb2RlLT5kYXRhU2VjdGlvbnMoKVtpXTsKICAgICAgICAgICAgIGRhdGFMb2co
CiAgICAgICAgICAgICAgICAgIkdlbmVyYXRlZCBMTFZNIGRhdGEgc2VjdGlvbiBmb3IgIiwKLSAg
ICAgICAgICAgICAgICBDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9j
aywgSklUQ29kZTo6REZHSklUKSwKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2tXaXRoSklUVHlw
ZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSwKICAgICAgICAgICAg
ICAgICAiICMiLCBpLCAiLCAiLCBzdGF0ZS5kYXRhU2VjdGlvbk5hbWVzW2ldLCAiOlxuIik7CiAg
ICAgICAgICAgICBkdW1wRGF0YVNlY3Rpb24oc2VjdGlvbiwgIiAgICAiKTsKICAgICAgICAgfQog
ICAgIH0KICAgICAKKyAgICBVbndpbmRJbmZvIHVud2luZDsKKyAgICB1bndpbmQucGFyc2Uoc3Rh
dGUuY29tcGFjdFVud2luZCwgc3RhdGUuY29tcGFjdFVud2luZFNpemUpOworICAgIGlmIChERkc6
OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKQorICAgICAgICBkYXRhTG9nKCJVbndpbmQgaW5mbyBm
b3IgIiwgQ29kZUJsb2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENv
ZGU6OkZUTEpJVCksICI6XG4gICAgIiwgdW53aW5kLCAiXG4iKTsKKyAgICAKICAgICBpZiAoc3Rh
dGUuc3RhY2ttYXBzU2VjdGlvbi5zaXplKCkpIHsKICAgICAgICAgaWYgKHNob3VsZFNob3dEaXNh
c3NlbWJseSgpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICJHZW5l
cmF0ZWQgTExWTSBzdGFja21hcHMgc2VjdGlvbiBmb3IgIiwKLSAgICAgICAgICAgICAgICBDb2Rl
QmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklU
KSwgIjpcbiIpOworICAgICAgICAgICAgICAgIENvZGVCbG9ja1dpdGhKSVRUeXBlKHN0YXRlLmdy
YXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpLCAiOlxuIik7CiAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgUmF3IGRhdGE6XG4iKTsKICAgICAgICAgICAgIGR1bXBEYXRhU2VjdGlvbihz
dGF0ZS5zdGFja21hcHNTZWN0aW9uLCAiICAgICIpOwogICAgICAgICB9CkBAIC00NDYsNyArNDk0
LDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAgICAgICBFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlKiBoYW5kbGUgPSBzdGF0ZS5qaXRDb2RlLT5oYW5kbGVzKClbaV0uZ2V0
KCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAgICAgIkdlbmVy
YXRlZCBMTFZNIGNvZGUgYWZ0ZXIgc3RhY2ttYXAtYmFzZWQgZml4LXVwIGZvciAiLAotICAgICAg
ICAgICAgICAgICAgICBDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9j
aywgSklUQ29kZTo6REZHSklUKSwKKyAgICAgICAgICAgICAgICAgICAgQ29kZUJsb2NrV2l0aEpJ
VFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCksCiAgICAgICAg
ICAgICAgICAgICAgICIgIyIsIGksICIsICIsIHN0YXRlLmNvZGVTZWN0aW9uTmFtZXNbaV0sICI6
XG4iKTsKICAgICAgICAgICAgICAgICBkaXNhc3NlbWJsZSgKICAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGhhbmRsZS0+c3RhcnQoKSksIGhhbmRsZS0+c2l6ZUluQnl0
ZXMoKSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXpl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNh
Y2hlU2l6ZS5jcHAJKHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsMTEg
QEAgc2l6ZV90IHNpemVPZlB1dEJ5SWQoKQogICAgIHJldHVybiAzMjsKIH0KIAorc2l6ZV90IHNp
emVPZkNhbGwoKQoreworICAgIHJldHVybiA0MzsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgJKHJldmlzaW9uIDE2MDc5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDYgKzMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewog
CiBzaXplX3Qgc2l6ZU9mR2V0QnlJZCgpOwogc2l6ZV90IHNpemVPZlB1dEJ5SWQoKTsKK3NpemVf
dCBzaXplT2ZDYWxsKCk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJ
KHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmlu
c2ljUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0Myw5IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhmcmFtZUFkZHJlc3MsICJsbHZtLmZy
YW1lYWRkcmVzcyIsIGZ1bmN0aW9uVHlwZShwb2ludGVyVHlwZShpbnQ4KSwgaW50MzIpKSBcCiAg
ICAgbWFjcm8obXVsV2l0aE92ZXJmbG93MzIsICJsbHZtLnNtdWwud2l0aC5vdmVyZmxvdy5pMzIi
LCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDMyLCBib29sZWFuKSwgaW50
MzIsIGludDMyKSkgXAogICAgIG1hY3JvKG11bFdpdGhPdmVyZmxvdzY0LCAibGx2bS5zbXVsLndp
dGgub3ZlcmZsb3cuaTY0IiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQ2
NCwgYm9vbGVhbiksIGludDY0LCBpbnQ2NCkpIFwKLSAgICBtYWNybyhwYXRjaHBvaW50SW50NjQs
ICJsbHZtLmV4cGVyaW1lbnRhbC5wYXRjaHBvaW50Lmk2NCIsIGZ1bmN0aW9uVHlwZShpbnQ2NCwg
aW50MzIsIGludDMyLCByZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBcCi0gICAgbWFjcm8ocGF0Y2hw
b2ludFZvaWQsICJsbHZtLmV4cGVyaW1lbnRhbC5wYXRjaHBvaW50LnZvaWQiLCBmdW5jdGlvblR5
cGUodm9pZFR5cGUsIGludDMyLCBpbnQzMiwgcmVmOCwgaW50MzIsIFZhcmlhZGljKSkgXAotICAg
IG1hY3JvKHN0YWNrbWFwLCAibGx2bS5leHBlcmltZW50YWwuc3RhY2ttYXAiLCBmdW5jdGlvblR5
cGUodm9pZFR5cGUsIGludDMyLCBpbnQzMiwgVmFyaWFkaWMpKSBcCisgICAgbWFjcm8ocGF0Y2hw
b2ludEludDY0LCAibGx2bS5leHBlcmltZW50YWwucGF0Y2hwb2ludC5pNjQiLCBmdW5jdGlvblR5
cGUoaW50NjQsIGludDY0LCBpbnQzMiwgcmVmOCwgaW50MzIsIFZhcmlhZGljKSkgXAorICAgIG1h
Y3JvKHBhdGNocG9pbnRWb2lkLCAibGx2bS5leHBlcmltZW50YWwucGF0Y2hwb2ludC52b2lkIiwg
ZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQ2NCwgaW50MzIsIHJlZjgsIGludDMyLCBWYXJpYWRp
YykpIFwKKyAgICBtYWNybyhzdGFja21hcCwgImxsdm0uZXhwZXJpbWVudGFsLnN0YWNrbWFwIiwg
ZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQ2NCwgaW50MzIsIFZhcmlhZGljKSkgXAogICAgIG1h
Y3JvKHN1YldpdGhPdmVyZmxvdzMyLCAibGx2bS5zc3ViLndpdGgub3ZlcmZsb3cuaTMyIiwgZnVu
Y3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQzMiwgYm9vbGVhbiksIGludDMyLCBp
bnQzMikpIFwKICAgICBtYWNybyhzdWJXaXRoT3ZlcmZsb3c2NCwgImxsdm0uc3N1Yi53aXRoLm92
ZXJmbG93Lmk2NCIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50NjQsIGJv
b2xlYW4pLCBpbnQ2NCwgaW50NjQpKSBcCiAgICAgbWFjcm8odHJhcCwgImxsdm0udHJhcCIsIGZ1
bmN0aW9uVHlwZSh2b2lkVHlwZSkpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKSVRDb2RlLmNwcAkocmV2aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsOSArNTQsOSBAQCB2b2lk
IEpJVENvZGU6OmFkZERhdGFTZWN0aW9uKFJlZkNvdW50ZWRBCiAgICAgbV9kYXRhU2VjdGlvbnMu
YXBwZW5kKGRhdGFTZWN0aW9uKTsKIH0KIAotdm9pZCBKSVRDb2RlOjppbml0aWFsaXplRW50cnlw
b2ludChDb2RlUmVmIGVudHJ5cG9pbnQpCit2b2lkIEpJVENvZGU6OmluaXRpYWxpemVBcml0eUNo
ZWNrRW50cnlwb2ludChDb2RlUmVmIGVudHJ5cG9pbnQpCiB7Ci0gICAgbV9lbnRyeXBvaW50ID0g
ZW50cnlwb2ludDsKKyAgICBtX2FyaXR5Q2hlY2tFbnRyeXBvaW50ID0gZW50cnlwb2ludDsKIH0K
IAogdm9pZCBKSVRDb2RlOjppbml0aWFsaXplQWRkcmVzc0ZvckNhbGwoQ29kZVB0ciBhZGRyZXNz
KQpAQCAtNjQsMjEgKzY0LDI1IEBAIHZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUFkZHJlc3NGb3JD
YWxsKEMKICAgICBtX2FkZHJlc3NGb3JDYWxsID0gYWRkcmVzczsKIH0KIAotSklUQ29kZTo6Q29k
ZVB0ciBKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbCgpCitKSVRDb2RlOjpDb2RlUHRyIEpJVENvZGU6
OmFkZHJlc3NGb3JDYWxsKFZNJiwgRXhlY3V0YWJsZUJhc2UqLCBBcml0eUNoZWNrTW9kZSBhcml0
eUNoZWNrLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpCiB7Ci0gICAgcmV0dXJuIG1fYWRkcmVz
c0ZvckNhbGw7CisgICAgc3dpdGNoIChhcml0eUNoZWNrKSB7CisgICAgY2FzZSBBcml0eUNoZWNr
Tm90UmVxdWlyZWQ6CisgICAgICAgIHJldHVybiBtX2FkZHJlc3NGb3JDYWxsOworICAgIGNhc2Ug
TXVzdENoZWNrQXJpdHk6CisgICAgICAgIHJldHVybiBtX2FyaXR5Q2hlY2tFbnRyeXBvaW50LmNv
ZGUoKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gQ29kZVB0cigpOwogfQogCiB2b2lkKiBKSVRDb2RlOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zm
c2V0KHNpemVfdCBvZmZzZXQpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9lbnRyeXBvaW50KTsK
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9hZGRyZXNzRm9yQ2FsbC5leGVj
dXRhYmxlQWRkcmVzcygpKSArIG9mZnNldDsKIH0KIAogdm9pZCogSklUQ29kZTo6ZGF0YUFkZHJl
c3NBdE9mZnNldChzaXplX3QpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9lbnRyeXBvaW50KTsK
LQogICAgIC8vIFdlIGNhbid0IHBhdGNoIEZUTCBjb2RlLCB5ZXQuIEV2ZW4gaWYgd2UgZGlkLCBp
dCdzIG5vdCBjbGVhciB0aGF0IHdlIHdvdWxkIGRvIHNvCiAgICAgLy8gdGhyb3VnaCB0aGlzIEFQ
SS4KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtODcsOCArOTEsNiBAQCB2
b2lkKiBKSVRDb2RlOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfCiAKIHVuc2lnbmVkIEpJVENv
ZGU6Om9mZnNldE9mKHZvaWQqKQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fZW50cnlwb2ludCk7
Ci0KICAgICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgaGF2ZSB2aXNpYmlsaXR5IGludG8gdGhlIEZU
TCBjb2RlLgogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7
CkBAIC05Niw4ICs5OCw2IEBAIHVuc2lnbmVkIEpJVENvZGU6Om9mZnNldE9mKHZvaWQqKQogCiBz
aXplX3QgSklUQ29kZTo6c2l6ZSgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9lbnRyeXBvaW50
KTsKLQogICAgIC8vIFdlIGRvbid0IGtub3cgdGhlIHNpemUgb2YgRlRMIGNvZGUsIHlldC4gTWFr
ZSBhIHdpbGQgZ3Vlc3MuIFRoaXMgaXMgbW9zdGx5IHVzZWQgZm9yCiAgICAgLy8gR0MgbG9hZCBl
c3RpbWF0ZXMuCiAgICAgcmV0dXJuIDEwMDA7CkBAIC0xMDUsOCArMTA1LDYgQEAgc2l6ZV90IEpJ
VENvZGU6OnNpemUoKQogCiBib29sIEpJVENvZGU6OmNvbnRhaW5zKHZvaWQqKQogewotICAgIFJF
TEVBU0VfQVNTRVJUKG1fZW50cnlwb2ludCk7Ci0KICAgICAvLyBXZSBoYXZlIG5vIGlkZWEgd2hh
dCBhZGRyZXNzZXMgdGhlIEZUTCBjb2RlIGNvbnRhaW5zLCB5ZXQuCiAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE3ICs0Niwx
NyBAQCBwdWJsaWM6CiAgICAgSklUQ29kZSgpOwogICAgIH5KSVRDb2RlKCk7CiAgICAgCi0gICAg
Q29kZVB0ciBhZGRyZXNzRm9yQ2FsbCgpOwotICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzQXRP
ZmZzZXQoc2l6ZV90IG9mZnNldCk7Ci0gICAgdm9pZCogZGF0YUFkZHJlc3NBdE9mZnNldChzaXpl
X3Qgb2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBvZmZzZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUp
OwotICAgIHNpemVfdCBzaXplKCk7Ci0gICAgYm9vbCBjb250YWlucyh2b2lkKik7CisgICAgQ29k
ZVB0ciBhZGRyZXNzRm9yQ2FsbChWTSYsIEV4ZWN1dGFibGVCYXNlKiwgQXJpdHlDaGVja01vZGUs
IFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSkgT1ZFUlJJREU7CisgICAgdm9pZCogZXhlY3V0YWJs
ZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSBPVkVSUklERTsKKyAgICB2b2lkKiBkYXRh
QWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpIE9WRVJSSURFOworICAgIHVuc2lnbmVkIG9m
ZnNldE9mKHZvaWQqIHBvaW50ZXJJbnRvQ29kZSkgT1ZFUlJJREU7CisgICAgc2l6ZV90IHNpemUo
KSBPVkVSUklERTsKKyAgICBib29sIGNvbnRhaW5zKHZvaWQqKSBPVkVSUklERTsKICAgICAKICAg
ICB2b2lkIGluaXRpYWxpemVFeGl0VGh1bmtzKENvZGVSZWYpOwogICAgIHZvaWQgYWRkSGFuZGxl
KFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4pOwogICAgIHZvaWQgYWRkRGF0YVNl
Y3Rpb24oUmVmQ291bnRlZEFycmF5PExTZWN0aW9uV29yZD4pOwotICAgIHZvaWQgaW5pdGlhbGl6
ZUVudHJ5cG9pbnQoQ29kZVJlZik7CisgICAgdm9pZCBpbml0aWFsaXplQXJpdHlDaGVja0VudHJ5
cG9pbnQoQ29kZVJlZik7CiAgICAgdm9pZCBpbml0aWFsaXplQWRkcmVzc0ZvckNhbGwoQ29kZVB0
cik7CiAgICAgCiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
Pj4mIGhhbmRsZXMoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsZXM7IH0KQEAgLTc1LDcgKzc1LDcg
QEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmQ291bnRlZEFycmF5PExTZWN0aW9uV29yZD4+IG1f
ZGF0YVNlY3Rpb25zOwogICAgIFZlY3RvcjxSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4+
IG1faGFuZGxlczsKICAgICBDb2RlUHRyIG1fYWRkcmVzc0ZvckNhbGw7Ci0gICAgQ29kZVJlZiBt
X2VudHJ5cG9pbnQ7CisgICAgQ29kZVJlZiBtX2FyaXR5Q2hlY2tFbnRyeXBvaW50OwogICAgIENv
ZGVSZWYgbV9leGl0VGh1bmtzOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkocmV2aXNpb24gMTYwNzk0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDMsMTIgKzEwMywxMiBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNrOwogICAgIGlmIChhcml0eUNo
ZWNrLmlzU2V0KCkpCiAgICAgICAgIHdpdGhBcml0eUNoZWNrID0gZW50cnlwb2ludExpbmtCdWZm
ZXItPmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7Ci0gICAgaml0Q29kZS0+aW5pdGlhbGl6ZUVudHJ5
cG9pbnQoCisgICAgaml0Q29kZS0+aW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50KAogICAg
ICAgICBGSU5BTElaRV9ERkdfQ09ERSgKICAgICAgICAgICAgICplbnRyeXBvaW50TGlua0J1ZmZl
ciwKICAgICAgICAgICAgICgiRlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggTExWTSBn
ZW5lcmF0ZWQgY29kZSBhdCAlcCIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3Bs
YW4uY29kZUJsb2NrLmdldCgpLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCksIGZ1bmN0aW9uKSkp
OwogICAgIAotICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29kZSwgd2l0aEFy
aXR5Q2hlY2spOworICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29kZSk7CiAg
ICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpTQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKU0NhbGwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKU0NhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZUTEpTQ2FsbC5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworSlNDYWxsOjpKU0NhbGwodW5zaWduZWQgc3RhY2tt
YXBJRCwgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZSwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luKQorICAgIDogbV9zdGFja21hcElEKHN0YWNrbWFwSUQpCisgICAgLCBtX2NhbGxUeXBlKGNh
bGxUeXBlKQorICAgICwgbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4pCisgICAgLCBtX2luc3RydWN0
aW9uT2Zmc2V0KDApCit7Cit9CisKK3ZvaWQgSlNDYWxsOjplbWl0KENDYWxsSGVscGVycyYgaml0
KQoreworICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRo
UGF0Y2goCisgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCBt
X3RhcmdldFRvQ2hlY2ssCisgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSk7
CisgICAgCisgICAgaml0LmxvYWRQdHIoCisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLAorICAgICAg
ICBHUFJJbmZvOjpyZWdUMSk7CisgICAgaml0LnN0b3JlNjQoCisgICAgICAgIEdQUkluZm86OnJl
Z1QxLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLAorICAgICAgICAgICAgc2l6ZW9mKFJlZ2lzdGVy
KSAqIChKU1N0YWNrOjpTY29wZUNoYWluIC0gSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUp
KSk7CisgICAgCisgICAgbV9mYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIENDYWxsSGVs
cGVyczo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKKyAgICAKKyAgICBzbG93UGF0aC5saW5rKCZq
aXQpOworICAgIG1fc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAKKyAgICBkb25lLmxp
bmsoJmppdCk7Cit9CisKK3ZvaWQgSlNDYWxsOjpsaW5rKFZNJiB2bSwgTGlua0J1ZmZlciYgbGlu
a0J1ZmZlciwgQ2FsbExpbmtJbmZvJiBjYWxsSW5mbykKK3sKKyAgICBUaHVua0dlbmVyYXRvciBn
ZW5lcmF0b3IgPSBsaW5rVGh1bmtHZW5lcmF0b3JGb3IoCisgICAgICAgIG1fY2FsbFR5cGUgPT0g
Q2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGws
CisgICAgICAgIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CisgICAgCisgICAgbGlua0J1ZmZlci5s
aW5rKAorICAgICAgICBtX3Nsb3dDYWxsLCBGdW5jdGlvblB0cih2bS5nZXRDVElTdHViKGdlbmVy
YXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAKKyAgICBjYWxsSW5mby5j
YWxsVHlwZSA9IG1fY2FsbFR5cGU7CisgICAgY2FsbEluZm8uY29kZU9yaWdpbiA9IG1fY29kZU9y
aWdpbjsKKyAgICBjYWxsSW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbChtX3Nsb3dDYWxsKTsKKyAgICBjYWxsSW5mby5ob3RQYXRoQmVnaW4gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YobV90YXJnZXRUb0NoZWNrKTsKKyAgICBjYWxsSW5mby5ob3RQ
YXRoT3RoZXIgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2Zhc3RDYWxsKTsKKyAg
ICBjYWxsSW5mby5jYWxsZWVHUFIgPSBHUFJJbmZvOjpyZWdUMDsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEZUTEpTQ2FsbF9oCisjZGVmaW5lIEZUTEpTQ2FsbF9oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KworI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgor
I2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgSlNDYWxsIHsKK3B1YmxpYzoKKyAg
ICBKU0NhbGwodW5zaWduZWQgc3RhY2ttYXBJRCwgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSwgQ29k
ZU9yaWdpbik7CisgICAgCisgICAgdm9pZCBlbWl0KENDYWxsSGVscGVycyYpOworICAgIHZvaWQg
bGluayhWTSYsIExpbmtCdWZmZXImLCBDYWxsTGlua0luZm8mKTsKKyAgICAKKyAgICB1bnNpZ25l
ZCBzdGFja21hcElEKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja21hcElEOyB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgSlNDYWxsJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2luc3RydWN0aW9uT2Zmc2V0IDwgb3RoZXIubV9pbnN0cnVjdGlvbk9mZnNldDsK
KyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fc3RhY2ttYXBJRDsKKyAgICBD
YWxsTGlua0luZm86OkNhbGxUeXBlIG1fY2FsbFR5cGU7CisgICAgQ29kZU9yaWdpbiBtX2NvZGVP
cmlnaW47CisgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgbV90YXJnZXRUb0NoZWNrOwor
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBtX2Zhc3RDYWxsOworICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBtX3Nsb3dDYWxsOworCitwdWJsaWM6CisgICAgdWludDMyX3QgbV9pbnN0cnVjdGlvbk9mZnNl
dDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShG
VExfSklUKQorCisjZW5kaWYgLy8gRlRMSlNDYWxsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE2MDc5NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjMsNyArMTIzLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAg
bV9mdGxTdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CiAgICAgICAg
IG1fb3V0LmNhbGwoCi0gICAgICAgICAgICBtX291dC5zdGFja21hcEludHJpbnNpYygpLCBtX291
dC5jb25zdEludDMyKG1fZnRsU3RhdGUuY2FwdHVyZWRTdGFja21hcElEKSwKKyAgICAgICAgICAg
IG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksIG1fb3V0LmNvbnN0SW50NjQobV9mdGxTdGF0ZS5j
YXB0dXJlZFN0YWNrbWFwSUQpLAogICAgICAgICAgICAgbV9vdXQuaW50MzJaZXJvLCBjYXB0dXJl
ZEFsbG9jYSk7CiAgICAgICAgIAogICAgICAgICBtX2NhbGxGcmFtZSA9IG1fb3V0LnB0clRvSW50
KApAQCAtMTI5Nyw3ICsxMjk3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIExWYWx1
ZSBjYWxsID0gbV9vdXQuY2FsbCgKICAgICAgICAgICAgIG1fb3V0LnBhdGNocG9pbnRJbnQ2NElu
dHJpbnNpYygpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihzdGFja21hcElEKSwgbV9v
dXQuY29uc3RJbnQzMihzaXplT2ZHZXRCeUlkKCkpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQ2NChzdGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXplT2ZHZXRCeUlkKCkpLAogICAg
ICAgICAgICAgY29uc3ROdWxsKG1fb3V0LnJlZjgpLCBtX291dC5jb25zdEludDMyKDEpLCBiYXNl
KTsKICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55
UmVnQ2FsbENvbnYpOwogICAgICAgICBzZXRKU1ZhbHVlKGNhbGwpOwpAQCAtMTMyMiw3ICsxMzIy
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2Fs
bCgKICAgICAgICAgICAgIG1fb3V0LnBhdGNocG9pbnRWb2lkSW50cmluc2ljKCksCi0gICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVP
ZlB1dEJ5SWQoKSksCisgICAgICAgICAgICBtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpLCBt
X291dC5jb25zdEludDMyKHNpemVPZlB1dEJ5SWQoKSksCiAgICAgICAgICAgICBjb25zdE51bGwo
bV9vdXQucmVmOCksIG1fb3V0LmNvbnN0SW50MzIoMiksIGJhc2UsIHZhbHVlKTsKICAgICAgICAg
c2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55UmVnQ2FsbENvbnYp
OwogICAgICAgICAKQEAgLTI0MzcsMzUgKzI0MzcsNDAgQEAgcHJpdmF0ZToKICAgICAKICAgICB2
b2lkIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QoKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFRo
aXMgaXMgdW5hY2NlcHRhYmx5IHNsb3cuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjEKKyAgICAgICAgaW50IGR1bW15VGhpc0FyZ3VtZW50
ID0gbV9ub2RlLT5vcCgpID09IENhbGwgPyAwIDogMTsKKyAgICAgICAgaW50IG51bVBhc3NlZEFy
Z3MgPSBtX25vZGUtPm51bUNoaWxkcmVuKCkgLSAxOworICAgICAgICBpbnQgbnVtQXJncyA9IG51
bVBhc3NlZEFyZ3MgKyBkdW1teVRoaXNBcmd1bWVudDsKICAgICAgICAgCi0gICAgICAgIEpfSklU
T3BlcmF0aW9uX0UgZnVuY3Rpb24gPQotICAgICAgICAgICAgbV9ub2RlLT5vcCgpID09IENhbGwg
PyBvcGVyYXRpb25GVExDYWxsIDogb3BlcmF0aW9uRlRMQ29uc3RydWN0OworICAgICAgICBMVmFs
dWUgY2FsbGVlID0gbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpOwog
ICAgICAgICAKLSAgICAgICAgaW50IGR1bW15VGhpc0FyZ3VtZW50ID0gbV9ub2RlLT5vcCgpID09
IENhbGwgPyAwIDogMTsKKyAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJ
RHMrKzsKICAgICAgICAgCi0gICAgICAgIGludCBudW1QYXNzZWRBcmdzID0gbV9ub2RlLT5udW1D
aGlsZHJlbigpIC0gMTsKKyAgICAgICAgVmVjdG9yPExWYWx1ZT4gYXJndW1lbnRzOworICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50NjQoc3RhY2ttYXBJRCkpOworICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mQ2FsbCgpKSk7CisgICAg
ICAgIGFyZ3VtZW50cy5hcHBlbmQoY29uc3ROdWxsKG1fb3V0LnJlZjgpKTsKKyAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDMyKDEgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFk
ZXJTaXplIC0gSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUgKyBudW1BcmdzKSk7CisgICAg
ICAgIGFyZ3VtZW50cy5hcHBlbmQoY2FsbGVlKTsgLy8gY2FsbGVlIC0+ICVyZGkKKyAgICAgICAg
YXJndW1lbnRzLmFwcGVuZChnZXRVbmRlZihtX291dC5pbnQ2NCkpOyAvLyBjb2RlIGJsb2NrCisg
ICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoZ2V0VW5kZWYobV9vdXQuaW50NjQpKTsgLy8gc2NvcGUg
Y2hhaW4KKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjYWxsZWUpOyAvLyBjYWxsZWUgLT4gc3Rh
Y2sKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDY0KG51bUFyZ3MpKTsg
Ly8gYXJndW1lbnQgY291bnQgYW5kIHplcm9zIGZvciB0aGUgdGFnCisgICAgICAgIGlmIChkdW1t
eVRoaXNBcmd1bWVudCkKKyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoZ2V0VW5kZWYobV9v
dXQuaW50NjQpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyAr
K2kpCisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGxvd0pTVmFsdWUobV9ncmFwaC52YXJB
cmdDaGlsZChtX25vZGUsIDEgKyBpKSkpOwogICAgICAgICAKLSAgICAgICAgTFZhbHVlIGNhbGxl
ZUZyYW1lID0gbV9vdXQuYWRkKAotICAgICAgICAgICAgbV9jYWxsRnJhbWUsCi0gICAgICAgICAg
ICBtX291dC5jb25zdEludFB0cihzaXplb2YoUmVnaXN0ZXIpICogdmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwobV9ncmFwaC5mcmFtZVJlZ2lzdGVyQ291bnQoKSkub2Zmc2V0KCkpKTsKKyAgICAgICAg
Y2FsbFByZWZsaWdodCgpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmUzMigKLSAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIobnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50
KSwKLSAgICAgICAgICAgIHBheWxvYWRGb3IoY2FsbGVlRnJhbWUsIEpTU3RhY2s6OkFyZ3VtZW50
Q291bnQpKTsKLSAgICAgICAgbV9vdXQuc3RvcmU2NChtX2NhbGxGcmFtZSwgY2FsbGVlRnJhbWUs
IG1faGVhcHMuQ2FsbEZyYW1lX2NhbGxlckZyYW1lKTsKLSAgICAgICAgbV9vdXQuc3RvcmU2NCgK
LSAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwK
LSAgICAgICAgICAgIGFkZHJlc3NGb3IoY2FsbGVlRnJhbWUsIEpTU3RhY2s6OkNhbGxlZSkpOwor
ICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwobV9vdXQucGF0Y2hwb2ludEludDY0SW50
cmluc2ljKCksIGFyZ3VtZW50cyk7CisgICAgICAgIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZl
bnRpb24oY2FsbCwgTExWTVdlYktpdEpTQ2FsbENvbnYpOwogICAgICAgICAKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKLSAgICAgICAgICAgIG1fb3V0
LnN0b3JlNjQoCi0gICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMSArIGkpKSwKLSAgICAgICAgICAgICAgICBhZGRyZXNzRm9yKGNhbGxlZUZyYW1l
LCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpICsgZHVtbXlUaGlzQXJndW1lbnQpLm9mZnNl
dCgpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgbV9mdGxTdGF0ZS5qc0NhbGxzLmFwcGVuZChKU0Nh
bGwoCisgICAgICAgICAgICBzdGFja21hcElELAorICAgICAgICAgICAgbV9ub2RlLT5vcCgpID09
IENhbGwgPyBDYWxsTGlua0luZm86OkNhbGwgOiBDYWxsTGlua0luZm86OkNvbnN0cnVjdCwKKyAg
ICAgICAgICAgIG1fbm9kZS0+Y29kZU9yaWdpbikpOwogICAgICAgICAKLSAgICAgICAgc2V0SlNW
YWx1ZSh2bUNhbGwobV9vdXQub3BlcmF0aW9uKGZ1bmN0aW9uKSwgY2FsbGVlRnJhbWUpKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZShjYWxsKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlSnVt
cCgpCkBAIC00MDkyLDcgKzQwOTcsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgZXhpdC5t
X3N0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CiAgICAgICAgIGFyZ3VtZW50cy5pbnNlcnQo
MCwgbV9vdXQuY29uc3RJbnQzMihNYWNyb0Fzc2VtYmxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6
ZSgpKSk7Ci0gICAgICAgIGFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQzMihleGl0
Lm1fc3RhY2ttYXBJRCkpOworICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1fb3V0LmNvbnN0
SW50NjQoZXhpdC5tX3N0YWNrbWFwSUQpKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmNhbGwo
bV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAkocmV2aXNpb24gMTYwNzk0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDYgKzQyLDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KAogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZSA9IGRmZ0NvZGVCbG9jay0+
YmFzZWxpbmVWZXJzaW9uKCk7CisgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBkZmdD
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOwogICAgIERGRzo6SklUQ29kZSogZGZnQ29kZSA9
IGRmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKICAgICBGb3JPU1JFbnRyeUpJVENvZGUq
IGVudHJ5Q29kZSA9IGVudHJ5Q29kZUJsb2NrLT5qaXRDb2RlKCktPmZ0bEZvck9TUkVudHJ5KCk7
CiAgICAgCkBAIC04Nyw3ICs4OCw5IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeSgKICAgICAKICAg
ICBleGVjLT5zZXRDb2RlQmxvY2soZW50cnlDb2RlQmxvY2spOwogICAgIAotICAgIHZvaWQqIHJl
c3VsdCA9IGVudHJ5Q29kZS0+YWRkcmVzc0ZvckNhbGwoKS5leGVjdXRhYmxlQWRkcmVzcygpOwor
ICAgIHZvaWQqIHJlc3VsdCA9IGVudHJ5Q29kZS0+YWRkcmVzc0ZvckNhbGwoCisgICAgICAgIHZt
LCBleGVjdXRhYmxlLCBBcml0eUNoZWNrTm90UmVxdWlyZWQsCisgICAgICAgIFJlZ2lzdGVyUHJl
c2VydmF0aW9uTm90UmVxdWlyZWQpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAgZGF0YUxvZygiICAgIEVudHJ5IHdpbGwgc3VjY2Vl
ZCwgZ29pbmcgdG8gYWRkcmVzcyIsIFJhd1BvaW50ZXIocmVzdWx0KSwgIlxuIik7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFJlZ2lzdGVyQXRPZmZzZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUmVnaXN0ZXJBdE9mZnNl
dC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFJlZ2lz
dGVyQXRPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkZUTFJlZ2lzdGVyQXRPZmZzZXQuaCIKKworI2lmIEVOQUJMRShGVExfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQgUmVnaXN0ZXJBdE9m
ZnNldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChncHIo
KSwgIiBhdCAiLCBvZmZzZXQoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKwor
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFJlZ2lzdGVyQXRPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFJlZ2lzdGVyQXRPZmZzZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMUmVnaXN0ZXJBdE9mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBGVExSZWdpc3RlckF0T2Zmc2V0X2gKKyNkZWZpbmUgRlRMUmVnaXN0ZXJB
dE9mZnNldF9oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkdQUkluZm8uaCIK
KyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgeworCitjbGFzcyBSZWdpc3RlckF0T2Zmc2V0IHsKK3B1YmxpYzoKKyAgICBSZWdpc3Rl
ckF0T2Zmc2V0KCkKKyAgICAgICAgOiBtX2dwcihJbnZhbGlkR1BSUmVnKQorICAgICAgICAsIG1f
b2Zmc2V0KDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBSZWdpc3RlckF0T2Zmc2V0KEdQUlJl
ZyBncHIsIHB0cmRpZmZfdCBvZmZzZXQpCisgICAgICAgIDogbV9ncHIoZ3ByKQorICAgICAgICAs
IG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3Ih
KCkgY29uc3QgeyByZXR1cm4gbV9ncHIgPT0gSW52YWxpZEdQUlJlZzsgfQorICAgIAorICAgIEdQ
UlJlZyBncHIoKSBjb25zdCB7IHJldHVybiBtX2dwcjsgfQorICAgIHB0cmRpZmZfdCBvZmZzZXQo
KSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBHUFJSZWcgbV9ncHI7CisgICAgcHRy
ZGlmZl90IG1fb2Zmc2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5k
aWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExSZWdpc3RlckF0T2Zmc2V0X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAkocmV2
aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw5IEBAIHZvaWQgU3RhY2tNYXBzOjpMb2Nh
dGlvbjo6cmVzdG9yZUludG8oCiAKIGJvb2wgU3RhY2tNYXBzOjpSZWNvcmQ6OnBhcnNlKERhdGFW
aWV3KiB2aWV3LCB1bnNpZ25lZCYgb2Zmc2V0KQogewotICAgIHBhdGNocG9pbnRJRCA9IHZpZXct
PnJlYWQ8dWludDMyX3Q+KG9mZnNldCwgdHJ1ZSk7CisgICAgaW50NjRfdCBpZCA9IHZpZXctPnJl
YWQ8aW50NjRfdD4ob2Zmc2V0LCB0cnVlKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50MzJf
dD4oaWQpID09IGlkKTsKKyAgICBwYXRjaHBvaW50SUQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
aWQpOwogICAgIGlmIChzdGF0aWNfY2FzdDxpbnQzMl90PihwYXRjaHBvaW50SUQpIDwgMCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIApAQCAtOTAsNiArOTIsMTMgQEAgYm9vbCBTdGFja01h
cHM6OlJlY29yZDo6cGFyc2UoRGF0YVZpZXcqIAogICAgIHdoaWxlIChsZW5ndGgtLSkKICAgICAg
ICAgbG9jYXRpb25zLmFwcGVuZChyZWFkT2JqZWN0PExvY2F0aW9uPih2aWV3LCBvZmZzZXQpKTsK
ICAgICAKKyAgICB1bnNpZ25lZCBudW1MaXZlT3V0cyA9IHZpZXctPnJlYWQ8dWludDE2X3Q+KG9m
ZnNldCwgdHJ1ZSk7CisgICAgd2hpbGUgKG51bUxpdmVPdXRzLS0pIHsKKyAgICAgICAgdmlldy0+
cmVhZDx1aW50MTZfdD4ob2Zmc2V0LCB0cnVlKTsgLy8gcmVnbnVtCisgICAgICAgIHZpZXctPnJl
YWQ8dWludDhfdD4ob2Zmc2V0LCB0cnVlKTsgLy8gcmVzZXJ2ZWQKKyAgICAgICAgdmlldy0+cmVh
ZDx1aW50OF90PihvZmZzZXQsIHRydWUpOyAvLyBzaXplIGluIGJ5dGVzCisgICAgfQorICAgIAog
ICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0
YXRlLmNwcAkocmV2aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAgU3RhdGU6OlN0YXRl
KEdyYXBoJiBncmFwaCkKICAgICAsIG1vZHVsZSgwKQogICAgICwgZnVuY3Rpb24oMCkKICAgICAs
IGdlbmVyYXRlZEZ1bmN0aW9uKDApCisgICAgLCBjb21wYWN0VW53aW5kKDApCiB7CiAgICAgc3dp
dGNoIChncmFwaC5tX3BsYW4ubW9kZSkgewogICAgIGNhc2UgRlRMTW9kZTogewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNpb24gMTYwNzk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICsz
Niw3IEBACiAjaW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAi
RlRMSklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTEpJVEZpbmFsaXplci5oIgorI2luY2x1ZGUgIkZU
TEpTQ2FsbC5oIgogI2luY2x1ZGUgIkZUTFN0YWNrTWFwcy5oIgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgogCkBAIC02MCw4ICs2MSwxMSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgY2Fw
dHVyZWRTdGFja21hcElEOwogICAgIFNlZ21lbnRlZFZlY3RvcjxHZXRCeUlkRGVzY3JpcHRvcj4g
Z2V0QnlJZHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFB1dEJ5SWREZXNjcmlwdG9yPiBwdXRCeUlk
czsKKyAgICBWZWN0b3I8SlNDYWxsPiBqc0NhbGxzOwogICAgIFZlY3RvcjxDU3RyaW5nPiBjb2Rl
U2VjdGlvbk5hbWVzOwogICAgIFZlY3RvcjxDU3RyaW5nPiBkYXRhU2VjdGlvbk5hbWVzOworICAg
IHZvaWQqIGNvbXBhY3RVbndpbmQ7CisgICAgc2l6ZV90IGNvbXBhY3RVbndpbmRTaXplOwogICAg
IFJlZkNvdW50ZWRBcnJheTxMU2VjdGlvbldvcmQ+IHN0YWNrbWFwc1NlY3Rpb247CiAgICAgCiAg
ICAgdm9pZCBkdW1wU3RhdGUoY29uc3QgY2hhciogd2hlbik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFVud2luZEluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMVW53aW5kSW5mby5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFVud2luZEluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExVbndpbmRJbmZvLmgiCisKKyNp
ZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorI2luY2x1ZGUg
PG1hY2gtby9jb21wYWN0X3Vud2luZF9lbmNvZGluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKK1Vud2luZEluZm86OlVud2luZEluZm8oKSB7IH0KK1Vud2luZEluZm86
On5VbndpbmRJbmZvKCkgeyB9CisKK25hbWVzcGFjZSB7CisKK3N0cnVjdCBDb21wYWN0VW53aW5k
IHsKKyAgICB2b2lkKiBmdW5jdGlvbjsKKyAgICB1aW50MzJfdCBzaXplOworICAgIGNvbXBhY3Rf
dW53aW5kX2VuY29kaW5nX3QgZW5jb2Rpbmc7CisgICAgdm9pZCogcGVyc29uYWxpdHk7CisgICAg
dm9pZCogbHNkYTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIFVud2lu
ZEluZm86OnBhcnNlKHZvaWQqIHNlY3Rpb24sIHNpemVfdCBzaXplKQoreworICAgIG1fcmVnaXN0
ZXJzLmNsZWFyKCk7CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZSA+PSBzaXplb2YoQ29t
cGFjdFVud2luZCkpOworICAgIAorICAgIENvbXBhY3RVbndpbmQqIGRhdGEgPSBiaXR3aXNlX2Nh
c3Q8Q29tcGFjdFVud2luZCo+KHNlY3Rpb24pOworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKCFk
YXRhLT5wZXJzb25hbGl0eSk7IC8vIFdlIGRvbid0IGtub3cgaG93IHRvIGhhbmRsZSB0aGlzLgor
ICAgIFJFTEVBU0VfQVNTRVJUKCFkYXRhLT5sc2RhKTsgLy8gV2UgZG9uJ3Qga25vdyBob3cgdG8g
aGFuZGxlIHRoaXMuCisgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZSA9PSBzaXplb2YoQ29tcGFjdFVu
d2luZCkgfHwgIWRhdGFbMV0uZnVuY3Rpb24pOyAvLyBUaGVyZSB3aWxsIG9ubHkgYmUgb25lIGZ1
bmN0aW9uLgorICAgIAorICAgIGNvbXBhY3RfdW53aW5kX2VuY29kaW5nX3QgZW5jb2RpbmcgPSBk
YXRhLT5lbmNvZGluZzsKKyAgICBSRUxFQVNFX0FTU0VSVCghKGVuY29kaW5nICYgVU5XSU5EX0lT
X05PVF9GVU5DVElPTl9TVEFSVCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCEoZW5jb2RpbmcgJiBV
TldJTkRfSEFTX0xTREEpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghKGVuY29kaW5nICYgVU5XSU5E
X1BFUlNPTkFMSVRZX01BU0spKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgoZW5jb2RpbmcgJiBVTldJ
TkRfWDg2XzY0X01PREVfTUFTSykgPT0gVU5XSU5EX1g4Nl82NF9NT0RFX1JCUF9GUkFNRSk7Cisg
ICAgCisgICAgaW50MzJfdCBvZmZzZXQgPSAtKChlbmNvZGluZyAmIFVOV0lORF9YODZfNjRfUkJQ
X0ZSQU1FX09GRlNFVCkgPj4gMTYpICogODsKKyAgICB1aW50MzJfdCBuZXh0UmVnaXN0ZXJzID0g
ZW5jb2Rpbmc7CisgICAgZm9yICh1bnNpZ25lZCBpID0gNTsgaS0tOykgeworICAgICAgICB1aW50
MzJfdCBjdXJyZW50UmVnaXN0ZXIgPSBuZXh0UmVnaXN0ZXJzICYgNzsKKyAgICAgICAgbmV4dFJl
Z2lzdGVycyA+Pj0gMzsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoY3VycmVudFJlZ2lzdGVy
KSB7CisgICAgICAgIGNhc2UgVU5XSU5EX1g4Nl82NF9SRUdfTk9ORToKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVU5XSU5EX1g4Nl82NF9SRUdfUkJYOgor
ICAgICAgICAgICAgbV9yZWdpc3RlcnMuYXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoWDg2UmVnaXN0
ZXJzOjplYngsIG9mZnNldCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBVTldJTkRfWDg2XzY0X1JFR19SMTI6CisgICAgICAgICAgICBtX3JlZ2lzdGVy
cy5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChYODZSZWdpc3RlcnM6OnIxMiwgb2Zmc2V0KSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVOV0lORF9YODZf
NjRfUkVHX1IxMzoKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJzLmFwcGVuZChSZWdpc3RlckF0T2Zm
c2V0KFg4NlJlZ2lzdGVyczo6cjEzLCBvZmZzZXQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgVU5XSU5EX1g4Nl82NF9SRUdfUjE0OgorICAgICAgICAg
ICAgbV9yZWdpc3RlcnMuYXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoWDg2UmVnaXN0ZXJzOjpyMTQs
IG9mZnNldCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBVTldJTkRfWDg2XzY0X1JFR19SMTU6CisgICAgICAgICAgICBtX3JlZ2lzdGVycy5hcHBlbmQo
UmVnaXN0ZXJBdE9mZnNldChYODZSZWdpc3RlcnM6OnIxNSwgb2Zmc2V0KSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVOV0lORF9YODZfNjRfUkVHX1JC
UDoKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJzLmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KFg4NlJl
Z2lzdGVyczo6ZWJwLCBvZmZzZXQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvZmZzZXQgKz0gODsKKyAgICB9Cit9
CisKK3ZvaWQgVW53aW5kSW5mbzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludChsaXN0RHVtcChtX3JlZ2lzdGVycykpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExVbndpbmRJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExVbndpbmRJbmZvLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFVud2luZEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgRlRMVW53aW5kSW5mb19oCisjZGVmaW5lIEZUTFVud2luZEluZm9faAorCisjaWYg
RU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExSZWdpc3RlckF0T2Zmc2V0LmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworc3RydWN0IFVud2luZEluZm8geworICAg
IFVud2luZEluZm8oKTsKKyAgICB+VW53aW5kSW5mbygpOworICAgIAorICAgIHZvaWQgcGFyc2Uo
dm9pZCosIHNpemVfdCk7CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgCisgICAgVmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+IG1fcmVnaXN0ZXJzOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisK
KyNlbmRpZiAvLyBGVExVbndpbmRJbmZvX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAkocmV2aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDQsOCArNzA0LDcgQEAgQ29tcGlsYXRpb25SZXN1bHQg
SklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgIAogICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0Zp
dChDb2RlQmxvY2s6OkxhdGVTaHJpbmspOwogICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKAot
ICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIEpJVENvZGU6OkJhc2Vs
aW5lSklUKSksCi0gICAgICAgIHdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgYWRvcHRSZWYobmV3
IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUQ29kZTo6QmFzZWxpbmVK
SVQpKSk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFKQogICAgIGRhdGFMb2dGKCJKSVQg
Z2VuZXJhdGVkIGNvZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ssIHJlc3Vs
dC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0KCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCkt
PmVuZCgpKTsKQEAgLTcxNCw0MiArNzEzLDYgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2
YXRlQ29tcGlsZShKSQogICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9CiAKLXZv
aWQgSklUOjpsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiogY2FsbGVlLCBDb2Rl
QmxvY2sqIGNhbGxlckNvZGVCbG9jaywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpJVDo6
Q29kZVB0ciBjb2RlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgVk0qIHZtLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KGNhbGxlckNvZGVCbG9jayk7Ci0KLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5rZWQo
KSk7Ci0gICAgY2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0KCp2bSwgY2FsbExpbmtJbmZvLT5ob3RQ
YXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7Ci0g
ICAgY2FsbExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZS5zZXQoKnZtLCBjYWxsZXJDb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNh
bGxMaW5rSW5mby0+aG90UGF0aE90aGVyLCBjb2RlKTsKLQotICAgIGlmIChjYWxsZWVDb2RlQmxv
Y2spCi0gICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChleGVjLCBjYWxs
TGlua0luZm8pOwotCi0gICAgLy8gUGF0Y2ggdGhlIHNsb3cgcGF0Y2ggc28gd2UgZG8gbm90IGNv
bnRpbnVlIHRvIHRyeSB0byBsaW5rLgotICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0g
ICAgICAgIEFTU0VSVChjYWxsTGlua0luZm8tPmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2Fs
bAotICAgICAgICAgICAgICAgfHwgY2FsbExpbmtJbmZvLT5jYWxsVHlwZSA9PSBDYWxsTGlua0lu
Zm86OkNhbGxWYXJhcmdzKTsKLSAgICAgICAgaWYgKGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUgPT0g
Q2FsbExpbmtJbmZvOjpDYWxsKSB7Ci0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhj
YWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1
cmVDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxS
ZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvciku
Y29kZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChraW5kID09IENv
ZGVGb3JDb25zdHJ1Y3QpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+
Y2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0VGh1bmtH
ZW5lcmF0b3IpLmNvZGUoKSk7Ci19Ci0KLXZvaWQgSklUOjpsaW5rU2xvd0NhbGwoQ29kZUJsb2Nr
KiBjYWxsZXJDb2RlQmxvY2ssIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQotewotICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwotCi0gICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGNhbGxlckNv
ZGVCbG9jay0+dm0oKS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2Rl
KCkpOwotfQotCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCiB7
CiAgICAgaWYgKG1fZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkgJiYgbV9leGNlcHRpb25DaGVja3NX
aXRoQ2FsbEZyYW1lUm9sbGJhY2suZW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkocmV2aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjQxLDkgKzI0MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwodm0sIGZ1bmMpOwog
ICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIHZvaWQgbGlua0ZvcihFeGVjU3RhdGUqLCBKU0Z1
bmN0aW9uKiBjYWxsZWUsIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGNh
bGxlZUNvZGVCbG9jaywgQ29kZVB0ciwgQ2FsbExpbmtJbmZvKiwgVk0qLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kKTsKLSAgICAgICAgc3RhdGljIHZvaWQgbGlua1Nsb3dDYWxsKENvZGVCbG9jayog
Y2FsbGVyQ29kZUJsb2NrLCBDYWxsTGlua0luZm8qKTsKLSAgICAgICAgCiAgICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7CiAKICAgICBwcml2
YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAko
cmV2aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTksNyArMjk5LDExIEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOwogCi0gICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2Fs
bChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBtX3ZtLT5nZXRDVElTdHViKGxpbmtDb25zdHJ1
Y3RUaHVua0dlbmVyYXRvcikuY29kZSgpIDogbV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKS5jb2RlKCkpOworICAgIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciA9IGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3JGb3IoCisgICAgICAgIG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/
IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCwKKyAgICAgICAgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Ob3RSZXF1aXJlZCk7CisgICAgCisgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2Vk
Q2FsbChtX3ZtLT5nZXRDVElTdHViKGdlbmVyYXRvcikuY29kZSgpKTsKIAogICAgIHNhbXBsZUNv
ZGVCbG9jayhtX2NvZGVCbG9jayk7CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoaW5zdHJ1Y3Rpb24p
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAxNjA3
OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjcsNyArMjI3LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Uo
T3Bjb2RlSUQKIAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoMTYpLCByZWdUMSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogCi0gICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNv
ZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBtX3ZtLT5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVu
a0dlbmVyYXRvcikuY29kZSgpIDogbV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKS5jb2RlKCkpOworICAgIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciA9IGxpbmtUaHVua0dl
bmVyYXRvckZvcigKKyAgICAgICAgb3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gQ29kZUZvckNv
bnN0cnVjdCA6IENvZGVGb3JDYWxsLAorICAgICAgICBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJl
cXVpcmVkKTsKKyAgICAKKyAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG1fdm0t
PmdldENUSVN0dWIoZ2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MigtZnJhbWVSZWdpc3RlckNvdW50Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3Rh
Y2tQb2ludGVyQWxpZ25tZW50KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29k
ZS5jcHAJKHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkxM
SW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlJlZ2lzdGVy
UHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTczLDUwICs3NCwzOCBAQCBGVEw6OkZvck9TUkVu
dHJ5SklUQ29kZSogSklUQ29kZTo6ZnRsRm9yCiAKIFBhc3NSZWZQdHI8SklUQ29kZT4gSklUQ29k
ZTo6aG9zdEZ1bmN0aW9uKEpJVENvZGU6OkNvZGVSZWYgY29kZSkKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IERpcmVjdEpJVENvZGUoY29kZSwgSG9zdENhbGxUaHVuaykpOworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgTmF0aXZlSklUQ29kZShjb2RlLCBIb3N0Q2FsbFRodW5rKSk7CiB9CiAK
LURpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUoSklUVHlwZSBqaXRUeXBlKQorSklUQ29kZVdp
dGhDb2RlUmVmOjpKSVRDb2RlV2l0aENvZGVSZWYoSklUVHlwZSBqaXRUeXBlKQogICAgIDogSklU
Q29kZShqaXRUeXBlKQogewogfQogCi1EaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2RlKGNvbnN0
IEpJVENvZGU6OkNvZGVSZWYgcmVmLCBKSVRUeXBlIGppdFR5cGUpCitKSVRDb2RlV2l0aENvZGVS
ZWY6OkpJVENvZGVXaXRoQ29kZVJlZihDb2RlUmVmIHJlZiwgSklUVHlwZSBqaXRUeXBlKQogICAg
IDogSklUQ29kZShqaXRUeXBlKQogICAgICwgbV9yZWYocmVmKQogewogfQogCi1EaXJlY3RKSVRD
b2RlOjp+RGlyZWN0SklUQ29kZSgpCitKSVRDb2RlV2l0aENvZGVSZWY6On5KSVRDb2RlV2l0aENv
ZGVSZWYoKQogewogfQogCi12b2lkIERpcmVjdEpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmKGNv
bnN0IEpJVENvZGU6OkNvZGVSZWYgcmVmKQotewotICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlZik7
Ci0gICAgbV9yZWYgPSByZWY7Ci19Ci0KLUpJVENvZGU6OkNvZGVQdHIgRGlyZWN0SklUQ29kZTo6
YWRkcmVzc0ZvckNhbGwoKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKLSAgICByZXR1
cm4gbV9yZWYuY29kZSgpOwotfQotCi12b2lkKiBEaXJlY3RKSVRDb2RlOjpleGVjdXRhYmxlQWRk
cmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCit2b2lkKiBKSVRDb2RlV2l0aENvZGVSZWY6OmV4
ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVChtX3JlZik7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fcmVmLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSArIG9mZnNldDsKIH0KIAotdm9pZCogRGlyZWN0SklU
Q29kZTo6ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KQordm9pZCogSklUQ29kZVdp
dGhDb2RlUmVmOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQobV9yZWYpOwogICAgIEFTU0VSVChvZmZzZXQgPD0gc2l6ZSgpKTsgLy8gdXNl
IDw9IGluc3RlYWQgb2YgPCBiZWNhdXNlIGl0IGlzIHZhbGlkIHRvIGFzayBmb3IgYW4gYWRkcmVz
cyBhdCB0aGUgZXhjbHVzaXZlIGVuZCBvZiB0aGUgY29kZS4KICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4obV9yZWYuY29kZSgpLmRhdGFMb2NhdGlvbigpKSArIG9mZnNldDsKIH0K
IAotdW5zaWduZWQgRGlyZWN0SklUQ29kZTo6b2Zmc2V0T2Yodm9pZCogcG9pbnRlckludG9Db2Rl
KQordW5zaWduZWQgSklUQ29kZVdpdGhDb2RlUmVmOjpvZmZzZXRPZih2b2lkKiBwb2ludGVySW50
b0NvZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOwogICAgIGludHB0cl90IHJlc3Vs
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXJJbnRvQ29kZSkgLSByZWludGVy
cHJldF9jYXN0PGludHB0cl90PihtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CkBA
IC0xMjQsMTggKzExMywxMDcgQEAgdW5zaWduZWQgRGlyZWN0SklUQ29kZTo6b2Zmc2V0T2Yodm9p
ZCogcAogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KTsKIH0KIAotc2l6
ZV90IERpcmVjdEpJVENvZGU6OnNpemUoKQorc2l6ZV90IEpJVENvZGVXaXRoQ29kZVJlZjo6c2l6
ZSgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOwogICAgIHJldHVybiBtX3JlZi5zaXpl
KCk7CiB9CiAKLWJvb2wgRGlyZWN0SklUQ29kZTo6Y29udGFpbnModm9pZCogYWRkcmVzcykKK2Jv
b2wgSklUQ29kZVdpdGhDb2RlUmVmOjpjb250YWlucyh2b2lkKiBhZGRyZXNzKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKG1fcmVmKTsKICAgICByZXR1cm4gbV9yZWYuZXhlY3V0YWJsZU1lbW9yeSgp
LT5jb250YWlucyhhZGRyZXNzKTsKIH0KIAorRGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZShK
SVRUeXBlIGppdFR5cGUpCisgICAgOiBKSVRDb2RlV2l0aENvZGVSZWYoaml0VHlwZSkKK3sKK30K
KworRGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZSgKKyAgICBKSVRDb2RlOjpDb2RlUmVmIHJl
ZiwgSklUQ29kZTo6Q29kZVB0ciB3aXRoQXJpdHlDaGVjaywgSklUVHlwZSBqaXRUeXBlKQorICAg
IDogSklUQ29kZVdpdGhDb2RlUmVmKHJlZiwgaml0VHlwZSkKKyAgICAsIG1fd2l0aEFyaXR5Q2hl
Y2sod2l0aEFyaXR5Q2hlY2spCit7Cit9CisKK0RpcmVjdEpJVENvZGU6On5EaXJlY3RKSVRDb2Rl
KCkKK3sKK30KKwordm9pZCBEaXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZihKSVRDb2Rl
OjpDb2RlUmVmIHJlZiwgSklUQ29kZTo6Q29kZVB0ciB3aXRoQXJpdHlDaGVjaykKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVCghbV9yZWYpOworICAgIG1fcmVmID0gcmVmOworICAgIG1fd2l0aEFyaXR5
Q2hlY2sgPSB3aXRoQXJpdHlDaGVjazsKK30KKworRGlyZWN0SklUQ29kZTo6UmVnaXN0ZXJQcmVz
ZXJ2YXRpb25XcmFwcGVycyogRGlyZWN0SklUQ29kZTo6ZW5zdXJlV3JhcHBlcnMoKQoreworICAg
IGlmICghbV93cmFwcGVycykKKyAgICAgICAgbV93cmFwcGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8
UmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVycz4oKTsKKyAgICByZXR1cm4gbV93cmFwcGVycy5n
ZXQoKTsKK30KKworSklUQ29kZTo6Q29kZVB0ciBEaXJlY3RKSVRDb2RlOjphZGRyZXNzRm9yQ2Fs
bCgKKyAgICBWTSYgdm0sIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlLCBBcml0eUNoZWNrTW9k
ZSBhcml0eSwKKyAgICBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQoreworICAg
IHN3aXRjaCAoYXJpdHkpIHsKKyAgICBjYXNlIEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDoKKyAgICAg
ICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlv
bk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOworICAgICAg
ICAgICAgcmV0dXJuIG1fcmVmLmNvZGUoKTsKKyAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdp
c3RlcnM6IHsKKyAgICAgICAgICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlcnMqIHdyYXBw
ZXJzID0gZW5zdXJlV3JhcHBlcnMoKTsKKyAgICAgICAgICAgIGlmICghd3JhcHBlcnMtPndpdGhv
dXRBcml0eUNoZWNrKQorICAgICAgICAgICAgICAgIHdyYXBwZXJzLT53aXRob3V0QXJpdHlDaGVj
ayA9IGdlbmVyYXRlV3JhcHBlcih2bSwgZXhlY3V0YWJsZSwgbV9yZWYuY29kZSgpKTsKKyAgICAg
ICAgICAgIHJldHVybiB3cmFwcGVycy0+d2l0aG91dEFyaXR5Q2hlY2suY29kZSgpOworICAgICAg
ICB9IH0KKyAgICBjYXNlIE11c3RDaGVja0FyaXR5OgorICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVy
cykgeworICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3dpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgICAgIHJl
dHVybiBtX3dpdGhBcml0eUNoZWNrOworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVy
czogeworICAgICAgICAgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVycyogd3JhcHBlcnMg
PSBlbnN1cmVXcmFwcGVycygpOworICAgICAgICAgICAgaWYgKCF3cmFwcGVycy0+d2l0aEFyaXR5
Q2hlY2spCisgICAgICAgICAgICAgICAgd3JhcHBlcnMtPndpdGhBcml0eUNoZWNrID0gZ2VuZXJh
dGVXcmFwcGVyKHZtLCBleGVjdXRhYmxlLCBtX3dpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgICAg
IHJldHVybiB3cmFwcGVycy0+d2l0aEFyaXR5Q2hlY2suY29kZSgpOworICAgICAgICB9IH0KKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQ29kZVB0
cigpOworfQorCitOYXRpdmVKSVRDb2RlOjpOYXRpdmVKSVRDb2RlKEpJVFR5cGUgaml0VHlwZSkK
KyAgICA6IEpJVENvZGVXaXRoQ29kZVJlZihqaXRUeXBlKQoreworfQorCitOYXRpdmVKSVRDb2Rl
OjpOYXRpdmVKSVRDb2RlKENvZGVSZWYgcmVmLCBKSVRUeXBlIGppdFR5cGUpCisgICAgOiBKSVRD
b2RlV2l0aENvZGVSZWYocmVmLCBqaXRUeXBlKQoreworfQorCitOYXRpdmVKSVRDb2RlOjp+TmF0
aXZlSklUQ29kZSgpCit7Cit9CisKK3ZvaWQgTmF0aXZlSklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVS
ZWYoQ29kZVJlZiByZWYpCit7CisgICAgQVNTRVJUKCFtX3JlZik7CisgICAgbV9yZWYgPSByZWY7
Cit9CisKK0pJVENvZGU6OkNvZGVQdHIgTmF0aXZlSklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoCisg
ICAgVk0mLCBFeGVjdXRhYmxlQmFzZSosIEFyaXR5Q2hlY2tNb2RlLCBSZWdpc3RlclByZXNlcnZh
dGlvbk1vZGUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoISFtX3JlZik7CisgICAgcmV0dXJuIG1f
cmVmLmNvZGUoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDE2MDc5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NiwxNCArMjYsMTQgQEAKICNpZm5kZWYgSklUQ29kZV9oCiAjZGVmaW5lIEpJVENvZGVfaAogCi0j
aWYgRU5BQkxFKEpJVCkgfHwgRU5BQkxFKExMSU5UKQorI2luY2x1ZGUgIkFyaXR5Q2hlY2tNb2Rl
LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCiAj
aW5jbHVkZSAiSklUU3R1YnMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAi
TGVnYWN5UHJvZmlsZXIuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKLSNl
bmRpZgorI2luY2x1ZGUgIlJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIApAQCAtMTY0LDcgKzE2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGppdENv
ZGUtPmppdFR5cGUoKTsKICAgICB9CiAgICAgCi0gICAgdmlydHVhbCBDb2RlUHRyIGFkZHJlc3NG
b3JDYWxsKCkgPSAwOworICAgIHZpcnR1YWwgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbChWTSYsIEV4
ZWN1dGFibGVCYXNlKiwgQXJpdHlDaGVja01vZGUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qg
b2Zmc2V0KSA9IDA7CiAgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MoKSB7IHJldHVybiBleGVj
dXRhYmxlQWRkcmVzc0F0T2Zmc2V0KDApOyB9CiAgICAgdmlydHVhbCB2b2lkKiBkYXRhQWRkcmVz
c0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpID0gMDsKQEAgLTE4OSwyNSArMTg5LDU4IEBAIHByaXZh
dGU6CiAgICAgSklUVHlwZSBtX2ppdFR5cGU7CiB9OwogCi1jbGFzcyBEaXJlY3RKSVRDb2RlIDog
cHVibGljIEpJVENvZGUgeworY2xhc3MgSklUQ29kZVdpdGhDb2RlUmVmIDogcHVibGljIEpJVENv
ZGUgeworcHJvdGVjdGVkOgorICAgIEpJVENvZGVXaXRoQ29kZVJlZihKSVRUeXBlKTsKKyAgICBK
SVRDb2RlV2l0aENvZGVSZWYoQ29kZVJlZiwgSklUVHlwZSk7CisKIHB1YmxpYzoKLSAgICBEaXJl
Y3RKSVRDb2RlKEpJVFR5cGUpOwotICAgIERpcmVjdEpJVENvZGUoY29uc3QgQ29kZVJlZiwgSklU
VHlwZSk7Ci0gICAgdmlydHVhbCB+RGlyZWN0SklUQ29kZSgpOwotICAgIAotICAgIHZvaWQgaW5p
dGlhbGl6ZUNvZGVSZWYoQ29kZVJlZiByZWYpOworICAgIHZpcnR1YWwgfkpJVENvZGVXaXRoQ29k
ZVJlZigpOwogCi0gICAgdmlydHVhbCBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKCkgT1ZFUlJJREU7
CiAgICAgdmlydHVhbCB2b2lkKiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZz
ZXQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCogZGF0YUFkZHJlc3NBdE9mZnNldChzaXpl
X3Qgb2Zmc2V0KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIG9mZnNldE9mKHZvaWQq
IHBvaW50ZXJJbnRvQ29kZSkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBzaXplX3Qgc2l6ZSgpIE9W
RVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBjb250YWlucyh2b2lkKikgT1ZFUlJJREU7CiAKLXBy
aXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgQ29kZVJlZiBtX3JlZjsKIH07CiAKK2NsYXNzIERpcmVj
dEpJVENvZGUgOiBwdWJsaWMgSklUQ29kZVdpdGhDb2RlUmVmIHsKK3B1YmxpYzoKKyAgICBEaXJl
Y3RKSVRDb2RlKEpJVFR5cGUpOworICAgIERpcmVjdEpJVENvZGUoQ29kZVJlZiwgQ29kZVB0ciB3
aXRoQXJpdHlDaGVjaywgSklUVHlwZSk7CisgICAgdmlydHVhbCB+RGlyZWN0SklUQ29kZSgpOwor
ICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGVSZWYoQ29kZVJlZiByZWYsIENvZGVQdHIgd2l0
aEFyaXR5Q2hlY2spOworCisgICAgdmlydHVhbCBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKFZNJiwg
RXhlY3V0YWJsZUJhc2UqLCBBcml0eUNoZWNrTW9kZSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2Rl
KSBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUmVnaXN0ZXJQcmVzZXJ2YXRpb25X
cmFwcGVycyB7CisgICAgICAgIENvZGVSZWYgd2l0aG91dEFyaXR5Q2hlY2s7CisgICAgICAgIENv
ZGVSZWYgd2l0aEFyaXR5Q2hlY2s7CisgICAgfTsKKworICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9u
V3JhcHBlcnMqIGVuc3VyZVdyYXBwZXJzKCk7CisgICAgCisgICAgQ29kZVB0ciBtX3dpdGhBcml0
eUNoZWNrOworICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWdpc3RlclByZXNlcnZhdGlvbldy
YXBwZXJzPiBtX3dyYXBwZXJzOworfTsKKworY2xhc3MgTmF0aXZlSklUQ29kZSA6IHB1YmxpYyBK
SVRDb2RlV2l0aENvZGVSZWYgeworcHVibGljOgorICAgIE5hdGl2ZUpJVENvZGUoSklUVHlwZSk7
CisgICAgTmF0aXZlSklUQ29kZShDb2RlUmVmLCBKSVRUeXBlKTsKKyAgICB2aXJ0dWFsIH5OYXRp
dmVKSVRDb2RlKCk7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplQ29kZVJlZihDb2RlUmVmIHJl
Zik7CisKKyAgICB2aXJ0dWFsIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoVk0mLCBFeGVjdXRhYmxl
QmFzZSosIEFyaXR5Q2hlY2tNb2RlLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpIE9WRVJSSURF
OworfTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNjA3
OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02ODUsNyArNjg1LDggQEAgc3RhdGljIHZvaWQqIGhhbmRsZUhvc3RDYWxs
KEV4ZWNTdGF0ZSogZQogICAgIHJldHVybiB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogfQog
Ci1pbmxpbmUgY2hhciogbGlua0ZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKK2lubGluZSBjaGFyKiBsaW5rRm9yKAorICAgIEV4ZWNTdGF0ZSog
ZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBSZWdpc3RlclByZXNlcnZh
dGlvbk1vZGUgcmVnaXN0ZXJzKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUt
PmNhbGxlckZyYW1lKCk7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkBAIC03MDMsOSArNzA0
LDkgQEAgaW5saW5lIGNoYXIqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbAogICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsK
ICAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRD
YWxsTGlua0luZm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7Ci0gICAgaWYgKGV4ZWN1dGFibGUt
PmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5nZW5lcmF0
ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOwotICAgIGVsc2UgeworICAgIGlm
IChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7CisgICAgICAgIGNvZGVQdHIgPSBleGVj
dXRhYmxlLT5lbnRyeXBvaW50Rm9yKCp2bSwga2luZCwgTXVzdENoZWNrQXJpdHksIHJlZ2lzdGVy
cyk7CisgICAgfSBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4
ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsK
ICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9y
RXhlY3V0aW9uKGV4ZWNDYWxsZWUsIGNhbGxlZS0+c2NvcGUoKSwga2luZCk7CiAgICAgICAgIGlm
IChlcnJvcikgewpAQCAtNzEzLDI5ICs3MTQsNDMgQEAgaW5saW5lIGNoYXIqIGxpbmtGb3IoRXhl
Y1N0YXRlKiBleGVjQ2FsbAogICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICB9CiAgICAgICAgIGNvZGVC
bG9jayA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpOworICAgICAgICBB
cml0eUNoZWNrTW9kZSBhcml0eTsKICAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpKSB8fCBjYWxsTGlua0luZm8uY2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZvOjpDYWxs
VmFyYXJncykKLSAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVy
YXRlZEpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKTsKKyAgICAgICAgICAgIGFyaXR5ID0g
TXVzdENoZWNrQXJpdHk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5j
dGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxs
KCk7CisgICAgICAgICAgICBhcml0eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKKyAgICAgICAg
Y29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigqdm0sIGtpbmQsIGFy
aXR5LCByZWdpc3RlcnMpOwogICAgIH0KICAgICBpZiAoIWNhbGxMaW5rSW5mby5zZWVuT25jZSgp
KQogICAgICAgICBjYWxsTGlua0luZm8uc2V0U2VlbigpOwogICAgIGVsc2UKLSAgICAgICAgbGlu
a0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRy
LCBraW5kKTsKKyAgICAgICAgbGlua0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIGNvZGVC
bG9jaywgY2FsbGVlLCBjb2RlUHRyLCBraW5kLCByZWdpc3RlcnMpOwogICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogfQogCiBj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxl
ZSkKIHsKLSAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCk7CisgICAg
cmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTm90UmVxdWlyZWQpOwogfQogCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtD
b25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQogewotICAgIHJldHVybiBsaW5rRm9yKGV4
ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxs
ZWUsIENvZGVGb3JDb25zdHJ1Y3QsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwor
fQorCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsVGhhdFByZXNlcnZlc1Jl
Z3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQoreworICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxs
ZWUsIENvZGVGb3JDYWxsLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOwogfQogCi1pbmxpbmUgY2hh
ciogdmlydHVhbEZvcldpdGhGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCwgSlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCitjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVncyhF
eGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7CisgICAgcmV0dXJuIGxpbmtGb3IoZXhlY0NhbGxlZSwg
Q29kZUZvckNvbnN0cnVjdCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKK30KKworaW5saW5lIGNo
YXIqIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oCisgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdp
c3RlcnMsCisgICAgSlNDZWxsKiYgY2FsbGVlQXNGdW5jdGlvbkNlbGwpCiB7CiAgICAgRXhlY1N0
YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKQEAgLTc1NywxNiArNzcyLDIwIEBAIGlubGluZSBjaGFyKiB2aXJ0dWFsRm9yV2l0
aEZ1bmN0aW9uKEV4ZWMKICAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
Pih2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdp
dGhBcml0eUNoZWNrRm9yKGtpbmQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKAorICAgICAg
ICAqdm0sIGtpbmQsIE11c3RDaGVja0FyaXR5LCByZWdpc3RlcnMpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpOwogfQogCi1pbmxpbmUgY2hhciogdmlydHVhbEZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsZWUs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK2lubGluZSBjaGFyKiB2aXJ0dWFsRm9yKAor
ICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBS
ZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewogICAgIEpTQ2VsbCogY2FsbGVl
QXNGdW5jdGlvbkNlbGxJZ25vcmVkOwotICAgIHJldHVybiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9u
KGV4ZWNDYWxsZWUsIGtpbmQsIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZCk7CisgICAgcmV0
dXJuIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwga2luZCwgcmVnaXN0ZXJzLCBj
YWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQpOwogfQogCi1zdGF0aWMgYm9vbCBhdHRlbXB0VG9P
cHRpbWl6ZUNsb3N1cmVDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNDZWxsKiBjYWxsZWVB
c0Z1bmN0aW9uQ2VsbCwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCitzdGF0aWMgYm9vbCBh
dHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKAorICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycywgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0
aW9uQ2VsbCwKKyAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKICAgICBpZiAoIWNh
bGxlZUFzRnVuY3Rpb25DZWxsKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03ODAsNyArNzk5
LDEwIEBAIHN0YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAogICAgIEFTU0VSVChjYWxsZWUtPmV4ZWN1dGFibGUoKS0+aGFz
SklUQ29kZUZvckNhbGwoKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBj
YWxsZWUtPmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0Zv
ckNhbGwoKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciA9CisgICAgICAgIGNh
bGxlZS0+ZXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5hZGRyZXNzRm9y
Q2FsbCgKKyAgICAgICAgICAgICpleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2so
KS0+dm0oKSwgY2FsbGVlLT5leGVjdXRhYmxlKCksCisgICAgICAgICAgICBBcml0eUNoZWNrTm90
UmVxdWlyZWQsIHJlZ2lzdGVycyk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7CiAg
ICAgaWYgKGNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigpKQpAQCAtNzkzLDcg
KzgxNSw3IEBAIHN0YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwKICAgICAK
ICAgICBsaW5rQ2xvc3VyZUNhbGwoCiAgICAgICAgIGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywg
Y29kZUJsb2NrLAotICAgICAgICBjYWxsZWUtPnN0cnVjdHVyZSgpLCBjYWxsZWUtPmV4ZWN1dGFi
bGUoKSwgY29kZVB0cik7CisgICAgICAgIGNhbGxlZS0+c3RydWN0dXJlKCksIGNhbGxlZS0+ZXhl
Y3V0YWJsZSgpLCBjb2RlUHRyLCByZWdpc3RlcnMpOwogICAgIAogICAgIHJldHVybiB0cnVlOwog
fQpAQCAtODAxLDI1ICs4MjMsNDYgQEAgc3RhdGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9z
dXJlQ2FsbAogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwoRXhl
Y1N0YXRlKiBleGVjQ2FsbGVlKQogewogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGw7
Ci0gICAgY2hhciogcmVzdWx0ID0gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVlLCBD
b2RlRm9yQ2FsbCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOworICAgIGNoYXIqIHJlc3VsdCA9IHZp
cnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIFJlZ2lzdGVyUHJl
c2VydmF0aW9uTm90UmVxdWlyZWQsIGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKICAgICBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9j
aygpLT5nZXRDYWxsTGlua0luZm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7CiAKLSAgICBpZiAo
IWF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNGdW5jdGlv
bkNlbGwsIGNhbGxMaW5rSW5mbykpCi0gICAgICAgIGxpbmtTbG93Rm9yKGV4ZWNDYWxsZWUsIGNh
bGxMaW5rSW5mbywgQ29kZUZvckNhbGwpOworICAgIGlmICghYXR0ZW1wdFRvT3B0aW1pemVDbG9z
dXJlQ2FsbChleGVjQ2FsbGVlLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkLCBjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCwgY2FsbExpbmtJbmZvKSkKKyAgICAgICAgbGlua1Nsb3dGb3IoZXhl
Y0NhbGxlZSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25O
b3RSZXF1aXJlZCk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCiB7ICAg
IAotICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsKTsKKyAgICBy
ZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Ob3RSZXF1aXJlZCk7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmly
dHVhbENvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCiB7Ci0gICAgcmV0dXJuIHZpcnR1
YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJuIHZpcnR1YWxG
b3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RS
ZXF1aXJlZCk7CiB9CiAKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVD
YWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQoreworICAgIEpTQ2Vs
bCogY2FsbGVlQXNGdW5jdGlvbkNlbGw7CisgICAgY2hhciogcmVzdWx0ID0gdmlydHVhbEZvcldp
dGhGdW5jdGlvbihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJz
LCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CisgICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8g
PSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKS0+Z2V0Q2FsbExpbmtJbmZv
KGV4ZWNDYWxsZWUtPnJldHVyblBDKCkpOworCisgICAgaWYgKCFhdHRlbXB0VG9PcHRpbWl6ZUNs
b3N1cmVDYWxsKGV4ZWNDYWxsZWUsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycywgY2FsbGVlQXNGdW5j
dGlvbkNlbGwsIGNhbGxMaW5rSW5mbykpCisgICAgICAgIGxpbmtTbG93Rm9yKGV4ZWNDYWxsZWUs
IGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CisgICAg
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25W
aXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sgICAg
CisgICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIE11c3RQcmVz
ZXJ2ZVJlZ2lzdGVycyk7Cit9CisKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVh
bENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAg
ICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0LCBNdXN0UHJl
c2VydmVSZWdpc3RlcnMpOworfQogCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21w
YXJlTGVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMywxMSArMjEzLDE3
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVYKIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJO
QUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxFdmFsKEV4ZWNT
dGF0ZSopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVh
bENhbGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25MaW5rQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Citj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSopIFdURl9J
TlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdChF
eGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxp
bmtDb25zdHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25MaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSopIFdURl9JTlRF
Uk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsVGhhdFBy
ZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25WaXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSopIFdURl9J
TlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdFRo
YXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSop
IFdURl9JTlRFUk5BTDsKKwogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxl
c3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJO
QUw7CiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzc0VxKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogc2l6ZV90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CkBAIC0yNzksNiArMjg1LDY4
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRUb1Njb3BlKEUKIAogfSAvLyBleHRl
cm4gIkMiCiAKK2lubGluZSBQX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvbkxpbmtGb3IoCisgICAg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVn
aXN0ZXJzKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgQ29kZUZvckNhbGw6Cisg
ICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5rQ2FsbDsK
KyAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uTGlua0NhbGxUaGF0UHJlc2VydmVzUmVnczsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgIHN3aXRjaCAocmVnaXN0
ZXJzKSB7CisgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5rQ29uc3RydWN0OworICAgICAgICBjYXNlIE11
c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5rQ29u
c3RydWN0VGhhdFByZXNlcnZlc1JlZ3M7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K2lubGluZSBQX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvblZpcnR1YWxGb3IoCisgICAgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJz
KQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAg
IHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25O
b3RSZXF1aXJlZDoKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25WaXJ0dWFsQ2FsbDsKKyAg
ICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uVmlydHVhbENhbGxUaGF0UHJlc2VydmVzUmVnczsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgIHN3aXRjaCAocmVnaXN0
ZXJzKSB7CisgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAg
ICAgICAgICAgIHJldHVybiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0OworICAgICAgICBjYXNl
IE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25WaXJ0
dWFsQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3M7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK2lubGluZSBQX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbEZv
cihSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQoreworICAgIHN3aXRjaCAocmVn
aXN0ZXJzKSB7CisgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgorICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsOworICAgIGNhc2UgTXVzdFByZXNl
cnZlUmVnaXN0ZXJzOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsVGhh
dFByZXNlcnZlc1JlZ3M7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJQcmVzZXJ2
YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyUHJlc2VydmF0aW9u
V3JhcHBlckdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5o
IgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkFzc2VtYmx5SGVscGVycy5oIgorI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyYXRlV3JhcHBlcihWTSYg
dm0sIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFy
Z2V0KQoreworI2lmIEVOQUJMRShGVExfSklUKQorICAgIC8vIFdlIHNob3VsZG4ndCBldmVyIGJl
IGdlbmVyYXRpbmcgd3JhcHBlcnMgZm9yIG5hdGl2ZSBmdW5jdGlvbnMuCisgICAgU2NyaXB0RXhl
Y3V0YWJsZSogc2NyaXB0RXhlY3V0YWJsZSA9IGpzQ2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4oZXhl
Y3V0YWJsZSk7CisgICAgCisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNl
dDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIAorICAgIC8vIE5vIG5lZWQgdG8gcHJlc2Vy
dmUgRlAgc2luY2UgdGhhdCBhbHdheXMgZ2V0cyBwcmVzZXJ2ZWQgYW55d2F5LgorICAgIGNhbGxl
ZVNhdmVzLmNsZWFyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAKKyAgICB1bnNp
Z25lZCBudW1iZXJPZkNhbGxlZVNhdmVzID0gY2FsbGVlU2F2ZXMubnVtYmVyT2ZTZXRSZWdpc3Rl
cnMoKTsKKyAgICAKKyAgICAvLyBOZWVkIHRvIHByZXNlcnZlIHRoZSBvbGQgcmV0dXJuIFBDLgor
ICAgIHVuc2lnbmVkIG51bWJlck9mVmFsdWVzVG9TYXZlID0gbnVtYmVyT2ZDYWxsZWVTYXZlcyAr
IDE7CisgICAgCisgICAgLy8gQWxpZ25tZW50LiBQcmVzZXJ2ZSB0aGUgc2FtZSBhbGlnbm1lbnQg
aW52YXJpYW50cyB0aGF0IHRoZSBjYWxsZXIgaW1wb3NlZC4KKyAgICB1bnNpZ25lZCBudW1iZXJP
Zk5ld1N0YWNrU2xvdHMgPQorICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tB
bGlnbm1lbnRSZWdpc3RlcnMoKSwgbnVtYmVyT2ZWYWx1ZXNUb1NhdmUpOworICAgIAorICAgIEFz
c2VtYmx5SGVscGVycyBqaXQoJnZtLCAwKTsKKyAgICAKKyAgICBqaXQucHJlc2VydmVSZXR1cm5B
ZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86OnJlZ1QxKTsKKyAgICBqaXQubG9hZDMyKAorICAgICAg
ICBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyLAorICAgICAgICAgICAgKEpTU3RhY2s6OkFyZ3VtZW50Q291
bnQgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSkgKiBzaXplb2YoUmVnaXN0ZXIpICsg
UGF5bG9hZE9mZnNldCksCisgICAgICAgIEdQUkluZm86OnJlZ1QyKTsKKyAgICAKKyAgICAvLyBQ
bGFjZSB0aGUgc3RhY2sgcG9pbnRlciB3aGVyZSB3ZSB3YW50IGl0IHRvIGJlLgorICAgIHNpemVf
dCBvZmZzZXQgPSBzaXplb2YoUmVnaXN0ZXIpICogbnVtYmVyT2ZOZXdTdGFja1Nsb3RzOworICAg
IGppdC5zdWJQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIob2Zmc2V0KSwgQXNzZW1i
bHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgCisgICAgLy8gQ29tcHV0ZSB0
aGUgbnVtYmVyIG9mIHRoaW5ncyB3ZSB3aWxsIGJlIGNvcHlpbmcuCisgICAgaml0LmFkZDMyKAor
ICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigKKyAgICAgICAgICAgIEpTU3Rh
Y2s6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSks
CisgICAgICAgIEdQUkluZm86OnJlZ1QyKTsKKworICAgIEFTU0VSVCghY2FsbGVlU2F2ZXMuZ2V0
KEdQUkluZm86OnJlZ1Q0KSk7CisgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDQpOworICAgIAorICAgIEFzc2VtYmx5SGVscGVy
czo6TGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgIGppdC5zdWIzMihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5sb2FkNjQoQXNz
ZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1Q0LCBvZmZzZXQpLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1Q0KTsK
KyAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihSZWdp
c3RlcikpLCBHUFJJbmZvOjpyZWdUNCk7CisgICAgaml0LmJyYW5jaFRlc3QzMihBc3NlbWJseUhl
bHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJlZ1QyKS5saW5rVG8obG9vcCwgJmppdCk7CisKKyAg
ICAvLyBBdCB0aGlzIHBvaW50IHJlZ1Q0ICsgb2Zmc2V0IHBvaW50cyB0byB3aGVyZSB3ZSBzYXZl
IHRoaW5ncy4KKyAgICBzaXplX3QgY3VycmVudE9mZnNldCA9IDA7CisgICAgaml0LnN0b3JlUHRy
KEdQUkluZm86OnJlZ1QxLCBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDQs
IGN1cnJlbnRPZmZzZXQpKTsKKyAgICAKKyAgICBmb3IgKEdQUlJlZyBncHIgPSBBc3NlbWJseUhl
bHBlcnM6OmZpcnN0UmVnaXN0ZXIoKTsgZ3ByIDw9IEFzc2VtYmx5SGVscGVyczo6bGFzdFJlZ2lz
dGVyKCk7IGdwciA9IHN0YXRpY19jYXN0PEdQUlJlZz4oZ3ByICsgMSkpIHsKKyAgICAgICAgaWYg
KCFjYWxsZWVTYXZlcy5nZXQoZ3ByKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBj
dXJyZW50T2Zmc2V0ICs9IHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgIGppdC5zdG9yZTY0KGdw
ciwgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1Q0LCBjdXJyZW50T2Zmc2V0
KSk7CisgICAgfQorICAgIAorICAgIC8vIEFzc3VtZSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgc2F2
ZWQgRlAgcmVnaXN0ZXJzLgorICAgIAorICAgIC8vIFJlc3RvcmUgdGhlIHRhZyByZWdpc3RlcnMu
CisgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJl
ciksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgaml0LmFkZDY0KEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKFRhZ01hc2sgLSBUYWdUeXBlTnVtYmVyKSwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworCisg
ICAgQXNzZW1ibHlIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAKKyAg
ICAvLyBXZSBuZWVkIHRvIHBsYWNlIHRoZSBzdGFjayBwb2ludGVyIGJhY2sgdG8gd2hlcmUgdGhl
IGNhbGxlciB0aG91Z2h0IHRoZXkgbGVmdCBpdC4KKyAgICAvLyBCdXQgYWxzbywgaW4gb3JkZXIg
dG8gcmVjb3ZlciB0aGUgcmVnaXN0ZXJzLCB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGJpZyB0
aGUKKyAgICAvLyBhcmd1bWVudHMgYXJlYSBpcy4KKyAgICAKKyAgICBqaXQubG9hZDMyKAorICAg
ICAgICBBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBBc3NlbWJseUhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLAorICAgICAgICAgICAgKEpTU3RhY2s6OkFyZ3VtZW50
Q291bnQgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSkgKiBzaXplb2YoUmVnaXN0ZXIp
ICsgUGF5bG9hZE9mZnNldCksCisgICAgICAgIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQubHNo
aWZ0MzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMyksIEdQUkluZm86OnJlZ1QyKTsK
KyAgICAKKyAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKG9mZnNl
dCksIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGppdC5hZGRQ
dHIoQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDIp
OworICAgIAorICAgIC8vIFdlIHNhdmVkIHRoaW5ncyBhdDoKKyAgICAvLworICAgIC8vICAgICBh
ZGpTUCArIChKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gSlNTdGFjazo6Q2FsbGVyRnJh
bWVBbmRQQ1NpemUgKyBOdW1BcmdzKSAqIDgKKyAgICAvLworICAgIC8vIFdoZXJlOgorICAgIC8v
CisgICAgLy8gICAgIGFkalNQID0gb3JpZ1NQIC0gb2Zmc2V0CisgICAgLy8KKyAgICAvLyByZWdU
MiBub3cgcG9pbnRzIGF0OgorICAgIC8vCisgICAgLy8gICAgIG9yaWdTUCArIE51bUFyZ3MgKiA4
CisgICAgLy8gICA9IGFkalNQICsgb2Zmc2V0ICsgTnVtQXJncyAqIDgKKyAgICAvLyAKKyAgICAv
LyBTbyBpZiB3ZSBzdWJ0cmFjdCBvZmZzZXQgYW5kIHRoZW4gYWRkIEpTU3RhY2s6OkNhbGxGcmFt
ZUhlYWRlclNpemUgYW5kIHN1YnRyYWN0CisgICAgLy8gSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQ
Q1NpemUsIHdlJ2xsIGdldCB0aGUgdGhpbmcgd2Ugd2FudC4KKyAgICBjdXJyZW50T2Zmc2V0ID0g
LW9mZnNldCArIHNpemVvZihSZWdpc3RlcikgKiAoCisgICAgICAgIEpTU3RhY2s6OkNhbGxGcmFt
ZUhlYWRlclNpemUgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSk7CisgICAgaml0Lmxv
YWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBjdXJyZW50T2Zm
c2V0KSwgR1BSSW5mbzo6cmVnVDEpOworICAgIAorICAgIGZvciAoR1BSUmVnIGdwciA9IEFzc2Vt
Ymx5SGVscGVyczo6Zmlyc3RSZWdpc3RlcigpOyBncHIgPD0gQXNzZW1ibHlIZWxwZXJzOjpsYXN0
UmVnaXN0ZXIoKTsgZ3ByID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihncHIgKyAxKSkgeworICAgICAg
ICBpZiAoIWNhbGxlZVNhdmVzLmdldChncHIpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGN1cnJlbnRPZmZzZXQgKz0gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgaml0LmxvYWQ2
NChBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIGN1cnJlbnRPZmZzZXQp
LCBncHIpOworICAgIH0KKyAgICAKKyAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMSk7CisgICAg
CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwor
ICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQpKTsKKyAg
ICAKKyAgICByZXR1cm4gRklOQUxJWkVfREZHX0NPREUobGlua0J1ZmZlciwgKCJSZWdpc3RlciBw
cmVzZXJ2YXRpb24gd3JhcHBlciBmb3IgJXMvJXMsICVwIiwgdG9DU3RyaW5nKHNjcmlwdEV4ZWN1
dGFibGUtPmhhc2hGb3IoQ29kZUZvckNhbGwpKS5kYXRhKCksIHRvQ1N0cmluZyhzY3JpcHRFeGVj
dXRhYmxlLT5oYXNoRm9yKENvZGVGb3JDb25zdHJ1Y3QpKS5kYXRhKCksIHRhcmdldC5leGVjdXRh
YmxlQWRkcmVzcygpKSk7CisjZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICAvLyBXZSBkb24n
dCBzdXBwb3J0IG5vbi1GVEwgYnVpbGRzIGZvciB0d28gcmVhc29uczoKKyAgICAvLyAtIEl0IGp1
c3Qgc28gaGFwcGVucyB0aGF0IGN1cnJlbnRseSBvbmx5IHRoZSBGVEwgYm90dG9tcyBvdXQgaW4g
dGhpcyBjb2RlLgorICAgIC8vIC0gVGhlIGNvZGUgYWJvdmUgdXNlcyA2NC1iaXQgaW5zdHJ1Y3Rp
b25zLiBJdCBkb2Vzbid0IG5lY2Vzc2FyaWx5IGhhdmUgdG87IGl0IHdvdWxkIGJlCisgICAgLy8g
ICBlYXN5IHRvIGNoYW5nZSBpdCBzbyB0aGF0IGl0IGRvZXNuJ3QuIEJ1dCBvYnZpb3VzbHkgbWFr
aW5nIHRoYXQgY2hhbmdlIHdvdWxkIGJlIGEKKyAgICAvLyAgIHByZXJlcXVpc2l0ZSB0byByZW1v
dmluZyB0aGlzICNpZi4KKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBF
TkFCTEUoSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyUHJl
c2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyUHJlc2VydmF0aW9u
V3JhcHBlckdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBSZWdpc3Rl
clByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3JfaAorI2RlZmluZSBSZWdpc3RlclByZXNlcnZh
dGlvbldyYXBwZXJHZW5lcmF0b3JfaAorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJhdGVXcmFwcGVyKFZNJiwgRXhlY3V0YWJs
ZUJhc2UqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFyZ2V0KTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gUmVnaXN0ZXJQcmVzZXJ2
YXRpb25XcmFwcGVyR2VuZXJhdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcwLDE3ICsxMjcwLDE5IEBAIHZvaWQg
cmVwYXRjaEluKAogICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkluKTsKIH0KIAotc3RhdGljIHZvaWQgbGlua1Ns
b3dGb3IoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgVk0qIHZtLCBDYWxsTGlua0luZm8m
IGNhbGxMaW5rSW5mbywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotewotICAgIGlmIChr
aW5kID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxM
aW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1
bmtHZW5lcmF0b3IpLmNvZGUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJU
KGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2Fs
bExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIodmlydHVhbENvbnN0
cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOworc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoCisg
ICAgUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgVk0qIHZtLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbywKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJl
c2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCit7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCisg
ICAgICAgIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sCisgICAgICAgIHZtLT5nZXRD
VElTdHViKHZpcnR1YWxUaHVua0dlbmVyYXRvckZvcihraW5kLCByZWdpc3RlcnMpKS5jb2RlKCkp
OwogfQogCi12b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpTRnVuY3Rpb24qIGNhbGxlZSwg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKK3ZvaWQgbGlua0ZvcigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKKyAgICBKU0Z1bmN0aW9uKiBj
YWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQsCisgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsKICAg
ICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKTsKICAgICAKQEAgLTEyOTYsMzEgKzEyOTgsMzgg
QEAgdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbgogICAgIEFTU0VSVCgh
Y2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOwogICAgIGNhbGxMaW5rSW5mby5jYWxsZWUuc2V0KGV4
ZWMtPmNhbGxlckZyYW1lKCktPnZtKCksIGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4sIGNhbGxl
ckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CiAgICAgY2FsbExpbmtJbmZv
Lmxhc3RTZWVuQ2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT52bSgpLCBjYWxsZXJDb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOworICAgIGlmIChPcHRpb25zOjpzaG93
RGlzYXNzZW1ibHkoKSkKKyAgICAgICAgZGF0YUxvZygiTGlua2luZyBjYWxsIGluICIsICpjYWxs
ZXJDb2RlQmxvY2ssICIgYXQgIiwgY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4sICIgdG8gIiwgcG9p
bnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwgZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAi
XG4iKTsKICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uaG90UGF0aE90aGVy
LCBjb2RlUHRyKTsKICAgICAKICAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQogICAgICAgICBjYWxs
ZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoZXhlYy0+Y2FsbGVyRnJhbWUoKSwgJmNhbGxM
aW5rSW5mbyk7CiAgICAgCiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0t
PmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24s
IHZtLT5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yRm9yKHJlZ2lzdGVy
cykpLmNvZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKGtp
bmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwg
dm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgbGlua1Nsb3dGb3IocmVw
YXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNvbnN0cnVjdCwgcmVnaXN0ZXJz
KTsKIH0KIAotdm9pZCBsaW5rU2xvd0ZvcihFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYg
Y2FsbExpbmtJbmZvLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit2b2lkIGxpbmtTbG93
Rm9yKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwKKyAgICBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUg
cmVnaXN0ZXJzKQogewogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+Y2Fs
bGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7CiAgICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52
bSgpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxv
Y2spOwogICAgIAotICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0lu
Zm8sIGtpbmQpOworICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0lu
Zm8sIGtpbmQsIHJlZ2lzdGVycyk7CiB9CiAKLXZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0
ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29k
ZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUs
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQordm9pZCBsaW5rQ2xvc3VyZUNhbGwoCisg
ICAgRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2Nr
KiBjYWxsZWVDb2RlQmxvY2ssCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEV4ZWN1dGFibGVC
YXNlKiBleGVjdXRhYmxlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciwKKyAgICBSZWdp
c3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewogICAgIEFTU0VSVCghY2FsbExpbmtJ
bmZvLnN0dWIpOwogICAgIApAQCAtMTM4MCwxOCArMTM4OSwxOCBAQCB2b2lkIGxpbmtDbG9zdXJl
Q2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBzdHVi
Sml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQ
UkluZm86OnJlZ1QxKTsKICNlbmRpZgotICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRk
cmVzcygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgCiAgICAgLy8gRklYTUU6IENT
dGFjayAtIFRoaW5rIHRoZSByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybigpIGluc3Ry
dWN0aW9uIHNob3VsZCBiZSBhIHBva2UKICAgICBzdHViSml0LmJyZWFrcG9pbnQoKTsKLSAgICBz
dHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86Om5vbkFyZ0dQ
UjIpOworICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5m
bzo6cmVnVDIpOwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBzbG93ID0gc3R1YkppdC5qdW1w
KCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBjYWxs
ZXJDb2RlQmxvY2spOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25Q
dHIoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhk
b25lLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoMCkpOwot
ICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmdldENUSVN0
dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgcGF0Y2hCdWZmZXIu
bGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsVGh1bmtH
ZW5lcmF0b3JGb3IoQ29kZUZvckNhbGwsIHJlZ2lzdGVycykpLmNvZGUoKSkpOwogICAgIAogICAg
IFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGFkb3B0UmVmKG5l
dyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAogICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKQEAg
LTE0MDYsNyArMTQxNSw3IEBAIHZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSogZXhlYywg
Q2EKICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgKICAgICAgICAgUmVwYXRjaEJ1
ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoY2FsbExpbmtJbmZvLmhv
dFBhdGhCZWdpbiksCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKSk7Ci0gICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5r
SW5mbywgQ29kZUZvckNhbGwpOworICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBj
YWxsTGlua0luZm8sIENvZGVGb3JDYWxsLCByZWdpc3RlcnMpOwogICAgIAogICAgIGNhbGxMaW5r
SW5mby5zdHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmgJKHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw5ICs0MSw5IEBAIHZv
aWQgYnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZWNTdGF0ZSosIEoKIHZvaWQgcmVwYXRjaFB1dEJ5
SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7CiB2b2lkIGJ1aWxkUHV0QnlJ
ZExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFB1dFBy
b3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7CiB2b2lkIHJlcGF0Y2hJ
bihFeGVjU3RhdGUqLCBKU0NlbGwqLCBjb25zdCBJZGVudGlmaWVyJiwgYm9vbCB3YXNGb3VuZCwg
Y29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgbGlua0ZvcihF
eGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU0Z1bmN0aW9uKiBjYWxsZWUs
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7Ci12b2lkIGxp
bmtTbG93Rm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQpOwotdm9pZCBsaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29k
ZUJsb2NrKiwgU3RydWN0dXJlKiwgRXhlY3V0YWJsZUJhc2UqLCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIpOwordm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayos
IEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpOwordm9pZCBsaW5rU2xvd0ZvcihF
eGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBSZWdpc3Rl
clByZXNlcnZhdGlvbk1vZGUpOwordm9pZCBsaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiwgQ2Fs
bExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlKiwgRXhlY3V0YWJsZUJhc2UqLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSk7CiB2b2lkIHJlc2V0
R2V0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVzZXRQ
dXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCByZXNldElu
KFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMTYwNzk0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAogfQogCiBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JUaHVua0dlbmVyYXRvcigKLSAgICBW
TSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICBWTSogdm0sIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykK
IHsKICAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrIG9yIGluIHRoZSBs
aW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhlbmNlCiAgICAgLy8gc2F2ZSB0aGUgcmV0dXJuIGFkZHJl
c3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hpbGUgd2UgbWFrZSBhIEMrKyBmdW5jdGlvbiBjYWxsCkBA
IC0xMDksMzggKzEwOSw1OSBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JU
aHVuCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CiAgICAgCi0gICAgc2xvd1BhdGhG
b3Ioaml0LCB2bSwga2luZCA9PSBDb2RlRm9yQ2FsbCA/IG9wZXJhdGlvbkxpbmtDYWxsIDogb3Bl
cmF0aW9uTGlua0NvbnN0cnVjdCk7CisgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9u
TGlua0ZvcihraW5kLCByZWdpc3RlcnMpKTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09E
RSgKICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiTGluayAlcyBzbG93IHBhdGggdGh1
bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDogImNvbnN0cnVjdCIpKTsKKyAgICAg
ICAgKCJMaW5rICVzJXMgc2xvdyBwYXRoIHRodW5rIiwga2luZCA9PSBDb2RlRm9yQ2FsbCA/ICJj
YWxsIiA6ICJjb25zdHJ1Y3QiLCByZWdpc3RlcnMgPT0gTXVzdFByZXNlcnZlUmVnaXN0ZXJzID8g
IiB0aGF0IHByZXNlcnZlcyByZWdpc3RlcnMiIDogIiIpKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBsaW5r
Rm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsKTsKKyAgICByZXR1cm4gbGlua0ZvclRo
dW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ2FsbCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1
aXJlZCk7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0VGh1bmtHZW5l
cmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENv
ZGVGb3JDb25zdHJ1Y3QpOworICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENv
ZGVGb3JDb25zdHJ1Y3QsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwogfQogCi0v
LyBGb3IgY2xvc3VyZSBvcHRpbWl6YXRpb25zLCB3ZSBvbmx5IGluY2x1ZGUgY2FsbHMsIHNpbmNl
IGlmIHlvdSdyZSB1c2luZyBjbG9zdXJlcyBmb3IKLS8vIG9iamVjdCBjb25zdHJ1Y3Rpb24gdGhl
biB5b3UncmUgZ29pbmcgdG8gbG9zZSBiaWcgdGltZSBhbnl3YXkuCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGxpbmtDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSogdm0p
Cit7CisgICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNhbGwsIE11
c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29u
c3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSogdm0pCit7CisgICAgcmV0
dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCwgTXVzdFByZXNl
cnZlUmVnaXN0ZXJzKTsKK30KKworc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xv
c3VyZUNhbGxGb3JUaHVua0dlbmVyYXRvcigKKyAgICBWTSogdm0sIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CiAgICAgCi0g
ICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKTsKKyAgICBz
bG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxGb3IocmVnaXN0ZXJz
KSk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9U
SFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiTGluayBj
bG9zdXJlIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCAoIkxpbmsgY2xvc3VyZSBjYWxsICVzIHNsb3cgcGF0aCB0aHVuayIsIHJl
Z2lzdGVycyA9PSBNdXN0UHJlc2VydmVSZWdpc3RlcnMgPyAiIHRoYXQgcHJlc2VydmVzIHJlZ2lz
dGVycyIgOiAiIikpOworfQorCisvLyBGb3IgY2xvc3VyZSBvcHRpbWl6YXRpb25zLCB3ZSBvbmx5
IGluY2x1ZGUgY2FsbHMsIHNpbmNlIGlmIHlvdSdyZSB1c2luZyBjbG9zdXJlcyBmb3IKKy8vIG9i
amVjdCBjb25zdHJ1Y3Rpb24gdGhlbiB5b3UncmUgZ29pbmcgdG8gbG9zZSBiaWcgdGltZSBhbnl3
YXkuCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3Io
Vk0qIHZtKQoreworICAgIHJldHVybiBsaW5rQ2xvc3VyZUNhbGxGb3JUaHVua0dlbmVyYXRvcih2
bSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7Cit9CisKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKFZN
KiB2bSkKK3sKKyAgICByZXR1cm4gbGlua0Nsb3N1cmVDYWxsRm9yVGh1bmtHZW5lcmF0b3Iodm0s
IE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CiB9CiAKIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKAotICAgIFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQorICAgIFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBS
ZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewogICAgIC8vIFRoZSBjYWxsZWUg
aXMgaW4gcmVnVDAgKGZvciBKU1ZBTFVFMzJfNjQsIHRoZSB0YWcgaXMgaW4gcmVnVDEpLgogICAg
IC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUgc3RhY2ssIG9yIGluIHRoZSBsaW5rIHJl
Z2lzdGVyLiBXZSB3aWxsIGhlbmNlCkBAIC0xNTUsMzMgKzE3NiwzNCBAQCBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUCiAgICAgLy8gdGhlIERGRyBrbm93cyB0aGF0IHRo
ZSB2YWx1ZSBpcyBkZWZpbml0ZWx5IGEgY2VsbCwgb3IgZGVmaW5pdGVseSBhIGZ1bmN0aW9uLgog
ICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tNjQoVGFnTWFzayksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAKICAgICBzbG93Q2FzZS5h
cHBlbmQoCiAgICAgICAgIGppdC5icmFuY2hUZXN0NjQoCi0gICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Ok5vblplcm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsK
KyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6cmVnVDAsIEdQUklu
Zm86OnJlZ1QyKSk7CiAjZWxzZQogICAgIHNsb3dDYXNlLmFwcGVuZCgKICAgICAgICAgaml0LmJy
YW5jaDMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVn
VDEsCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSkpOwogI2VuZGlmCi0gICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OnJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMik7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDIpOwogICAgIHNs
b3dDYXNlLmFwcGVuZCgKICAgICAgICAgaml0LmJyYW5jaFB0cigKICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Tm90RXF1YWwsCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BS
SW5mbzo6bm9uQXJnR1BSMiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksCisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIFN0cnVjdHVyZTo6Y2xh
c3NJbmZvT2Zmc2V0KCkpLAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KEpTRnVuY3Rpb246OmluZm8oKSkpKTsKICAgICAKICAgICAvLyBOb3cgd2Uga25vdyB3ZSBoYXZl
IGEgSlNGdW5jdGlvbi4KICAgICAKICAgICBqaXQubG9hZFB0cigKICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFi
bGUoKSksCi0gICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjIpOwotICAgIHNsb3dDYXNlLmFwcGVu
ZCgKLSAgICAgICAgaml0LmJyYW5jaDMyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMZXNz
VGhhbiwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgICAg
ICBHUFJJbmZvOjpub25BcmdHUFIyLCBFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZOdW1QYXJhbWV0
ZXJzRm9yKGtpbmQpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDAp
KSk7CisgICAgICAgIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDIsIEV4ZWN1
dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kLCByZWdpc3Rl
cnMpKSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDIpOworICAgIHNsb3dDYXNlLmFwcGVuZChqaXQu
YnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQUkluZm86OnJlZ1QyKSk7CiAgICAg
CiAgICAgLy8gTm93IHdlIGtub3cgdGhhdCB3ZSBoYXZlIGEgQ29kZUJsb2NrLCBhbmQgd2UncmUg
Y29tbWl0dGVkIHRvIG1ha2luZyBhIGZhc3QKICAgICAvLyBjYWxsLgpAQCAtMTk3LDM0ICsyMTks
NDAgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yVAogICAgICAgICBK
U1N0YWNrOjpTY29wZUNoYWluKTsKICNlbmRpZgogICAgIAotICAgIGppdC5sb2FkUHRyKAotICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMiwgRXhlY3V0YWJs
ZUJhc2U6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQpKSwKLSAgICAgICAg
R1BSSW5mbzo6cmVnVDApOwotICAgIAogICAgIC8vIE1ha2UgYSB0YWlsIGNhbGwuIFRoaXMgd2ls
bCByZXR1cm4gYmFjayB0byBKSVQgY29kZS4KLSAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDApOworICAgIGVt
aXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuanVtcChH
UFJJbmZvOjpyZWdUMik7CiAKICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwogICAgIAogICAgIC8v
IEhlcmUgd2UgZG9uJ3Qga25vdyBhbnl0aGluZywgc28gcmV2ZXJ0IHRvIHRoZSBmdWxsIHNsb3cg
cGF0aC4KICAgICAKLSAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBraW5kID09IENvZGVGb3JDYWxs
ID8gb3BlcmF0aW9uVmlydHVhbENhbGwgOiBvcGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KTsKKyAg
ICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25WaXJ0dWFsRm9yKGtpbmQsIHJlZ2lzdGVy
cykpOwogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxf
VEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZl
ciwKLSAgICAgICAgKCJWaXJ0dWFsICVzIHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZv
ckNhbGwgPyAiY2FsbCIgOiAiY29uc3RydWN0IikpOworICAgICAgICAoIlZpcnR1YWwgJXMlcyBz
bG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDogImNvbnN0cnVj
dCIsIHJlZ2lzdGVycyA9PSBNdXN0UHJlc2VydmVSZWdpc3RlcnMgPyAiIHRoYXQgcHJlc2VydmVz
IHJlZ2lzdGVycyIgOiAiIikpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENh
bGxUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dl
bmVyYXRvcih2bSwgQ29kZUZvckNhbGwpOworICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5l
cmF0b3Iodm0sIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsK
IH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRv
cihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29k
ZUZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcih2bSwg
Q29kZUZvckNvbnN0cnVjdCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7Cit9CisK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQoreworICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Io
dm0sIENvZGVGb3JDYWxsLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOworfQorCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0
b3IoVk0qIHZtKQoreworICAgIHJldHVybiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENv
ZGVGb3JDb25zdHJ1Y3QsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CiB9CiAKIGVudW0gVGh1bmtF
bnRyeVR5cGUgeyBFbnRlclZpYUNhbGwsIEVudGVyVmlhSnVtcCB9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAxNjA3OTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVmIFRodW5rR2VuZXJhdG9yc19oCiAjZGVmaW5l
IFRodW5rR2VuZXJhdG9yc19oCiAKKyNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgi
CisjaW5jbHVkZSAiUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmgiCiAjaW5jbHVkZSAiVGh1bmtH
ZW5lcmF0b3IuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBAIC0zNSwxMSArMzcsNzggQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbQogCiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxp
bmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxp
bmtDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKFZN
Kik7CisKK2lubGluZSBUaHVua0dlbmVyYXRvciBsaW5rVGh1bmtHZW5lcmF0b3JGb3IoCisgICAg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVn
aXN0ZXJzKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgQ29kZUZvckNhbGw6Cisg
ICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgIHJldHVybiBsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yOworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAgIHJl
dHVybiBsaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3I7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICBzd2l0
Y2ggKHJlZ2lzdGVycykgeworICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVx
dWlyZWQ6CisgICAgICAgICAgICByZXR1cm4gbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yOwor
ICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAgIHJldHVybiBs
aW5rQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcjsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gMDsKK30KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2Fs
bFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVD
YWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSopOworCitpbmxpbmUgVGh1bmtH
ZW5lcmF0b3IgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3JGb3IoUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sKKyAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgIGNh
c2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgcmV0dXJuIGxpbmtD
bG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yOworICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJz
OgorICAgICAgICByZXR1cm4gbGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dl
bmVyYXRvcjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGh1bmtHZW5l
cmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGh1bmtH
ZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRoYXRQcmVz
ZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0
dWFsQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSopOworCitpbmxp
bmUgVGh1bmtHZW5lcmF0b3IgdmlydHVhbFRodW5rR2VuZXJhdG9yRm9yKAorICAgIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykK
K3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICBz
d2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90
UmVxdWlyZWQ6CisgICAgICAgICAgICByZXR1cm4gdmlydHVhbENhbGxUaHVua0dlbmVyYXRvcjsK
KyAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICByZXR1cm4g
dmlydHVhbENhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgc3dpdGNo
IChyZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVp
cmVkOgorICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcjsK
KyAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICByZXR1cm4g
dmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3I7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIDA7Cit9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDYWxs
R2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ29uc3RydWN0R2Vu
ZXJhdG9yKFZNKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRy
eXBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRFbnRyeXBvaW50LmNwcAkocmV2aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDE0ICs0
NywxMiBAQCBzdGF0aWMgdm9pZCBzZXRGdW5jdGlvbkVudHJ5cG9pbnQoVk0mIHZtCiAgICAgaWYg
KHZtLmNhblVzZUpJVCgpKSB7CiAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7CiAg
ICAgICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgICAgICAgICAgYWRvcHRS
ZWYobmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNhbGxFbnRyeVRo
dW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAotICAgICAgICAgICAg
ICAgIHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9y
KS5jb2RlKCkpOworICAgICAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHZt
LmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsRW50cnlUaHVua0dlbmVyYXRvciksIHZtLmdldENU
SVN0dWIoZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKS5jb2RlKCksIEpJ
VENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CiAgICAgICAgIGNv
ZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRD
b2RlKHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9y
KSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAotICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1
YihmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpKTsK
KyAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIoZnVu
Y3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKSwgdm0uZ2V0Q1RJU3R1YihmdW5j
dGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpLCBKSVRDb2Rl
OjpJbnRlcnByZXRlclRodW5rKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCkBAIC02MiwxNCArNjAsMTIgQEAgc3RhdGljIHZvaWQgc2V0RnVuY3Rpb25F
bnRyeXBvaW50KFZNJiB2bQogICAgIFVOVVNFRF9QQVJBTSh2bSk7CiAgICAgaWYgKGtpbmQgPT0g
Q29kZUZvckNhbGwpIHsKICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICAg
ICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVh
dGVMTEludENvZGVSZWYobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpLCBKSVRDb2Rl
OjpJbnRlcnByZXRlclRodW5rKSksCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6
OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjaykp
OworICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9n
dWUpLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9mdW5j
dGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjayksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0
cnVjdCk7CiAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9wdFJlZihuZXcg
RGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihs
bGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlKSwgSklUQ29kZTo6SW50ZXJwcmV0
ZXJUaHVuaykpLAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29k
ZVB0cihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrKSk7CisgICAgICAg
IGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRl
TExJbnRDb2RlUmVmKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUpLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9mdW5jdGlvbl9mb3Jf
Y29uc3RydWN0X2FyaXR5X2NoZWNrKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKIH0K
IAogc3RhdGljIHZvaWQgc2V0RXZhbEVudHJ5cG9pbnQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaykKQEAgLTc3LDE2ICs3MywxNCBAQCBzdGF0aWMgdm9pZCBzZXRFdmFsRW50cnlwb2ludChW
TSYgdm0sIENvCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAodm0uY2FuVXNlSklUKCkpIHsKICAg
ICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICAgICAgYWRvcHRSZWYobmV3IERp
cmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1YihldmFsRW50cnlUaHVua0dlbmVyYXRvciksIEpJVENv
ZGU6OkludGVycHJldGVyVGh1bmspKSwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cigpKTsKKyAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0
dWIoZXZhbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSwgSklU
Q29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQogCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKICAgICBjb2RlQmxvY2st
PnNldEpJVENvZGUoCi0gICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2V2YWxfcHJvbG9ndWUpLCBK
SVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSksCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cigpKTsKKyAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZXZhbF9wcm9sb2d1ZSksIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cigpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogfQogCiBzdGF0
aWMgdm9pZCBzZXRQcm9ncmFtRW50cnlwb2ludChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2Nr
KQpAQCAtOTQsMTYgKzg4LDE0IEBAIHN0YXRpYyB2b2lkIHNldFByb2dyYW1FbnRyeXBvaW50KFZN
JiB2bSwKICNpZiBFTkFCTEUoSklUKQogICAgIGlmICh2bS5jYW5Vc2VKSVQoKSkgewogICAgICAg
ICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0
SklUQ29kZSh2bS5nZXRDVElTdHViKHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29k
ZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
KCkpOworICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1
Yihwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvciksIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLCBK
SVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCiAKICAgICBVTlVTRURfUEFSQU0odm0pOwogICAgIGNvZGVCbG9j
ay0+c2V0SklUQ29kZSgKLSAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9B
c3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfcHJvZ3JhbV9wcm9sb2d1
ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKCkpOworICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9wcm9ncmFtX3Byb2xvZ3VlKSwg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiB9
CiAKIHZvaWQgc2V0RW50cnlwb2ludChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShy
ZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDAsNyArMzQwLDkgQEAgc3RhdGljIFNsb3dQ
YXRoUmV0dXJuVHlwZSBlbnRyeU9TUihFeGVjUwogICAgIGlmIChraW5kID09IFByb2xvZ3VlKQog
ICAgICAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5leGVjdXRhYmxl
QWRkcmVzcygpLCBleGVjKTsKICAgICBBU1NFUlQoa2luZCA9PSBBcml0eUNoZWNrKTsKLSAgICBM
TElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZVdpdGhBcml0eUNoZWNrKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSwgZXhlYyk7CisgICAgTExJTlRfUkVUVVJOX1RXTyhjb2RlQmxvY2stPmpp
dENvZGUoKS0+YWRkcmVzc0ZvckNhbGwoCisgICAgICAgICpjb2RlQmxvY2stPnZtKCksIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIE11c3RDaGVja0FyaXR5LAorICAgICAgICBSZWdpc3Rl
clByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKS5leGVjdXRhYmxlQWRkcmVzcygpLCBleGVjKTsKIH0K
IAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyKQpAQCAtMTA0MCw3ICsxMDQyLDcgQEAg
aW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKICAgICBp
ZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1
dGFibGUtPmhvc3RDb2RlRW50cnlGb3Ioa2luZCk7CisgICAgICAgIGNvZGVQdHIgPSBleGVjdXRh
YmxlLT5lbnRyeXBvaW50Rm9yKHZtLCBraW5kLCBNdXN0Q2hlY2tBcml0eSwgUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiAgICAgZWxzZSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0
YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4oZXhlY3V0YWJsZSk7CiAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0
YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBjYWxsZWUtPnNjb3BlKCksIGtp
bmQpOwpAQCAtMTA0OCwxMiArMTA1MCwxNiBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNl
dFVwQ2FsbChFeGVjCiAgICAgICAgICAgICBMTElOVF9DQUxMX1RIUk9XKGV4ZWNDYWxsZWUtPmNh
bGxlckZyYW1lKCksIGVycm9yKTsKICAgICAgICAgY29kZUJsb2NrID0gZnVuY3Rpb25FeGVjdXRh
YmxlLT5jb2RlQmxvY2tGb3Ioa2luZCk7CiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2spOworICAg
ICAgICBBcml0eUNoZWNrTW9kZSBhcml0eTsKICAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpKSkKLSAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFi
bGUtPmpzQ29kZVdpdGhBcml0eUNoZWNrRW50cnlGb3Ioa2luZCk7CisgICAgICAgICAgICBhcml0
eSA9IE11c3RDaGVja0FyaXR5OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb2RlUHRyID0g
ZnVuY3Rpb25FeGVjdXRhYmxlLT5qc0NvZGVFbnRyeUZvcihraW5kKTsKKyAgICAgICAgICAgIGFy
aXR5ID0gQXJpdHlDaGVja05vdFJlcXVpcmVkOworICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25F
eGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKHZtLCBraW5kLCBhcml0eSwgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Ob3RSZXF1aXJlZCk7CiAgICAgfQogICAgIAorICAgIEFTU0VSVCghIWNvZGVQdHIpOwor
ICAgIAogICAgIGlmICghTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XICYmIGNhbGxMaW5rSW5mbykg
ewogICAgICAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZXIgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFt
ZSgpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5
KQpAQCAtMjkwLDYgKzI5MCwxMSBAQCBtYWNybyBzbG93UGF0aEZvckNhbGwoc2xvd1BhdGgpCiAg
ICAgICAgICAgICBpZiBDX0xPT1AKICAgICAgICAgICAgICAgICBjbG9vcENhbGxKU0Z1bmN0aW9u
IGNhbGxlZQogICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIEFTU0VSVF9FTkFC
TEVECisgICAgICAgICAgICAgICAgICAgIGJwYSB0MSwgMHgxMDAwLCAub2sKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAub2s6CisgICAgICAgICAgICAgICAgZW5k
CiAgICAgICAgICAgICAgICAgYWRkcCBDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgdDEsIHNwCiAgICAg
ICAgICAgICAgICAgY2FsbCBjYWxsZWUKICAgICAgICAgICAgICAgICByZXN0b3JlU3RhY2tQb2lu
dGVyQWZ0ZXJDYWxsKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyaXR5
Q2hlY2tNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJpdHlDaGVja01vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FyaXR5Q2hlY2tNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFy
aXR5Q2hlY2tNb2RlX2gKKyNkZWZpbmUgQXJpdHlDaGVja01vZGVfaAorCituYW1lc3BhY2UgSlND
IHsKKworZW51bSBBcml0eUNoZWNrTW9kZSB7CisgICAgQXJpdHlDaGVja05vdFJlcXVpcmVkLAor
ICAgIE11c3RDaGVja0FyaXR5Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEFyaXR5Q2hlY2tNb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzcsNiArMjM3LDEwIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90b190aGlzKQog
ewogICAgIEJFR0lOKCk7CiAgICAgSlNWYWx1ZSB2MSA9IE9QKDEpLmpzVmFsdWUoKTsKKyAgICBp
ZiAodjEgPT0ganNOdW1iZXIoMCkpIHsKKyAgICAgICAgZGF0YUxvZygiICAgIFdlIGhhdmUgYSB3
aW5uZXIhIVxuIik7CisgICAgICAgIGFzbSB2b2xhdGlsZSAoImludCAkM1xuIik7CisgICAgfQog
ICAgIGlmICh2MS5pc0NlbGwoKSkKICAgICAgICAgcGNbMl0udS5zdHJ1Y3R1cmUuc2V0KGV4ZWMt
PnZtKCksIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgdjEuYXNDZWxsKCkt
PnN0cnVjdHVyZSgpKTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCwx
MiArMTE4LDE0IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoQ29kZUIKICAg
ICBzd2l0Y2ggKGtpbmQpIHsKICAgICBjYXNlIENvZGVGb3JDYWxsOgogICAgICAgICBtX2ppdENv
ZGVGb3JDYWxsID0gZ2VuZXJpY0NvZGVCbG9jay0+aml0Q29kZSgpOwotICAgICAgICBtX2ppdENv
ZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBnZW5lcmljQ29kZUJsb2NrLT5qaXRDb2RlV2l0aEFy
aXR5Q2hlY2soKTsKKyAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisgICAgICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlD
aGVja0FuZFByZXNlcnZlUmVncyA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwogICAgICAgICBt
X251bVBhcmFtZXRlcnNGb3JDYWxsID0gZ2VuZXJpY0NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CiAgICAgICAgIG1f
aml0Q29kZUZvckNvbnN0cnVjdCA9IGdlbmVyaWNDb2RlQmxvY2stPmppdENvZGUoKTsKLSAgICAg
ICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBnZW5lcmljQ29kZUJsb2Nr
LT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKKyAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0
V2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICAgICAgbV9qaXRD
b2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3MgPSBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIoKTsKICAgICAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0ID0gZ2Vu
ZXJpY0NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0xMzMsNyArMTM1LDYgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShDb2Rl
QgogICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFt
RXhlY3V0YWJsZSo+KHRoaXMpOwogICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBzdGF0aWNfY2FzdDxQcm9ncmFtQ29kZUJsb2NrKj4oZ2VuZXJpY0NvZGVCbG9jayk7CiAgICAg
ICAgIAotICAgICAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZVdpdGhBcml0eUNoZWNrKCkp
OwogICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CiAgICAgICAgIAogICAgICAg
ICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX3Byb2dyYW1Db2RlQmxvY2s7CkBAIC0xNDUs
NyArMTQ2LDYgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShDb2RlQgogICAg
ICAgICBFdmFsRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+
KHRoaXMpOwogICAgICAgICBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxF
dmFsQ29kZUJsb2NrKj4oZ2VuZXJpY0NvZGVCbG9jayk7CiAgICAgICAgIAotICAgICAgICBBU1NF
UlQoIWNvZGVCbG9jay0+aml0Q29kZVdpdGhBcml0eUNoZWNrKCkpOwogICAgICAgICBBU1NFUlQo
a2luZCA9PSBDb2RlRm9yQ2FsbCk7CiAgICAgICAgIAogICAgICAgICBvbGRDb2RlQmxvY2sgPSBl
eGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDcgQEAKICNpZm5kZWYgRXhlY3V0YWJsZV9oCiAjZGVmaW5lIEV4ZWN1dGFibGVfaAogCisjaW5j
bHVkZSAiQXJpdHlDaGVja01vZGUuaCIKICNpbmNsdWRlICJDYWxsRGF0YS5oIgogI2luY2x1ZGUg
IkNvZGVCbG9ja0hhc2guaCIKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCkBA
IC0zNiw2ICszNyw3IEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKSVRD
b2RlLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJSZWdpc3RlclBy
ZXNlcnZhdGlvbk1vZGUuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKICNpbmNsdWRlICJT
b3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKQEAgLTE0NCwzNyAr
MTQ2LDk0IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVj
dCk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCk7CiAgICAg
fQotCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGdlbmVyYXRlZEpJVENvZGVGb3JDYWxsV2l0
aEFyaXR5Q2hlY2soKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1faml0Q29kZUZvckNhbGwpOwot
ICAgICAgICBBU1NFUlQobV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKLSAgICAgICAg
cmV0dXJuIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjazsKLSAgICB9Ci0KLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgZ2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNo
ZWNrKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2ppdENvZGVGb3JDb25zdHJ1Y3QpOwotICAg
ICAgICBBU1NFUlQobV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2spOwotICAgICAg
ICByZXR1cm4gbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2s7Ci0gICAgfQotICAg
ICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZ2VuZXJhdGVkSklUQ29kZVdpdGhBcml0
eUNoZWNrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIGlm
IChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENv
ZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2soKTsKLSAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZv
ckNvbnN0cnVjdCk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0
V2l0aEFyaXR5Q2hlY2soKTsKLSAgICB9Ci0gICAgICAgIAotICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kKQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBlbnRyeXBvaW50Rm9yKAorICAg
ICAgICBWTSYgdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgQXJpdHlDaGVja01vZGUg
YXJpdHksIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiAgICAgewotICAgICAg
ICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7Ci0g
ICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgICAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVCYXNlLCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRo
QXJpdHlDaGVjayk7CisgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBjYWNoZWQgcmVzdWx0
LiBXZSBvbmx5IGhhdmUgaXQgZm9yIGFyaXR5IGNoZWNrIGJlY2F1c2Ugd2UgdXNlIHRoZQorICAg
ICAgICAvLyBuby1hcml0eSBlbnRyeXBvaW50IGluIG5vbi12aXJ0dWFsIGNhbGxzLCB3aGljaCB3
aWxsICJjYWNoZSIgdGhpcyB2YWx1ZSBkaXJlY3RseSBpbgorICAgICAgICAvLyBtYWNoaW5lIGNv
ZGUuCisgICAgICAgIGlmIChhcml0eSA9PSBNdXN0Q2hlY2tBcml0eSkgeworICAgICAgICAgICAg
c3dpdGNoIChraW5kKSB7CisgICAgICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAg
ICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgICAgICAgICAgY2FzZSBSZWdpc3Rl
clByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgICAgICAgICBpZiAoTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9IG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgor
ICAgICAgICAgICAgICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9IG1f
aml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVja0FuZFByZXNlcnZlUmVncykKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykg
eworICAgICAgICAgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoK
KyAgICAgICAgICAgICAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPSBt
X2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAgICAgICAgICBp
ZiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9IG1faml0Q29kZUZvckNvbnN0cnVjdFdp
dGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPQorICAgICAgICAgICAgZ2VuZXJhdGVk
SklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwodm0sIHRoaXMsIGFyaXR5LCByZWdpc3Rl
cnMpOworICAgICAgICBpZiAoYXJpdHkgPT0gTXVzdENoZWNrQXJpdHkpIHsKKyAgICAgICAgICAg
IC8vIENhY2hlIHRoZSByZXN1bHQ7IHRoaXMgaXMgbmVjZXNzYXJ5IGZvciB0aGUgSklUJ3Mgdmly
dHVhbCBjYWxsIG9wdGltaXphdGlvbnMuCisgICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAg
ICAgICAgICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAgICAgICAgICAgc3dpdGNoIChyZWdp
c3RlcnMpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVx
dWlyZWQ6CisgICAgICAgICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVj
ayA9IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICAgICAgICAgIG1faml0Q29k
ZUZvckNhbGxXaXRoQXJpdHlDaGVja0FuZFByZXNlcnZlUmVncyA9IHJlc3VsdDsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICAgICAgICAg
IHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgICAgICAgICAgY2FzZSBSZWdpc3RlclByZXNl
cnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgICAgICAgICBtX2ppdENvZGVGb3JDb25z
dHJ1Y3RXaXRoQXJpdHlDaGVjayA9IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAg
ICAgICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVS
ZWdzID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKAorICAgICAgICBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAg
ICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKKyAgICAg
ICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAgICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1faml0Q29kZUZvckNhbGxXaXRoQXJp
dHlDaGVja0FuZFByZXNlcnZlUmVncyk7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgQ29k
ZUZvckNvbnN0cnVjdDoKKyAgICAgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAg
ICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ29u
c3RydWN0V2l0aEFyaXR5Q2hlY2spOworICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdp
c3RlcnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxl
QmFzZSwgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3Mp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICAgICAgCisgICAgCiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnNGb3IoQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQogICAgIHsKICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCkBA
IC0yMTEsMjEgKzI3MCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE5vSW50cmluc2ljOwog
ICAgIH0KICAgICAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGhvc3RDb2RlRW50cnlG
b3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdl
bmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKCk7Ci0gICAgfQotCi0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGpzQ29kZUVudHJ5Rm9yKENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQp
LT5hZGRyZXNzRm9yQ2FsbCgpOwotICAgIH0KLQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBq
c0NvZGVXaXRoQXJpdHlDaGVja0VudHJ5Rm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Io
a2luZCk7Ci0gICAgfQotCiBwcm90ZWN0ZWQ6CiAgICAgRXhlY3V0YWJsZUJhc2UqIG1fcHJldjsK
ICAgICBFeGVjdXRhYmxlQmFzZSogbV9uZXh0OwpAQCAtMjM0LDYgKzI3OCw4IEBAIHByb3RlY3Rl
ZDoKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlRm9yQ29uc3RydWN0OwogICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2s7CiAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrOwor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2tB
bmRQcmVzZXJ2ZVJlZ3M7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZUZvckNv
bnN0cnVjdFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdzOwogfTsKIAogY2xhc3MgTmF0aXZl
RXhlY3V0YWJsZSA6IHB1YmxpYyBFeGVjdXRhYmxlQmFzZSB7CkBAIC0yODgsOCArMzM0LDYgQEAg
cHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBQYXNzUmVmUHRyPEpJ
VENvZGU+IGNhbGxUaHVuaywgUGFzc1JlZlB0cjxKSVRDb2RlPiBjb25zdHJ1Y3RUaHVuaywgSW50
cmluc2ljIGludHJpbnNpYykKICAgICB7CiAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKLSAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gY2FsbFRodW5rID8g
Y2FsbFRodW5rLT5hZGRyZXNzRm9yQ2FsbCgpIDogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7Ci0g
ICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gY29uc3RydWN0VGh1
bmsgPyBjb25zdHJ1Y3RUaHVuay0+YWRkcmVzc0ZvckNhbGwoKSA6IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cigpOwogICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gY2FsbFRodW5rOwogICAgICAgICBt
X2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBjb25zdHJ1Y3RUaHVuazsKICAgICAgICAgbV9pbnRyaW5z
aWMgPSBpbnRyaW5zaWM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdp
c3RlclByZXNlcnZhdGlvbk1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdpc3RlclByZXNlcnZhdGlvbk1vZGUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGVfaAor
I2RlZmluZSBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGVfaAorCituYW1lc3BhY2UgSlNDIHsKKwor
ZW51bSBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgeworICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9u
Tm90UmVxdWlyZWQsCisgICAgTXVzdFByZXNlcnZlUmVnaXN0ZXJzCit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZV9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219626</attachid>
            <date>2013-12-18 23:52:42 -0800</date>
            <delta_ts>2013-12-19 15:06:29 -0800</delta_ts>
            <desc>I might be done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>150893</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwODI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NyBA
QAorMjAxMy0xMi0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgYmUgYWJsZSB0byBkbyBjYWxsIElDcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1ODExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGQgQ2FsbC9Db25zdHJ1Y3QgaW5s
aW5lIGNhY2hpbmcgdG8gdGhlIEZUTC4gVGhhdCBwYXJ0IGlzIHN1cGVyIGVhc3kuCisgICAgICAg
IAorICAgICAgICBCdXQgdG8gbWFrZSBpdCBwb3NzaWJsZSBmb3IgdGhlIEZUTCAod2hpY2ggcHJl
c2VydmVzIHN5c3RlbSBBQkkgY2FsbGVlLXNhdmUgcmVnaXN0ZXJzCisgICAgICAgIGFuZCBleHBl
Y3RzIGNhbGxzIHRvIHByZXNlcnZlIHRoZW0pIHRvIGNhbGwgaW50byBub24tRlRMIEpTQyBKSVRz
ICh3aGljaCBkb24ndCBwcmVzZXJ2ZQorICAgICAgICBhbnkgcmVnaXN0ZXJzKSwgd2UgbmVlZCB0
byBoYXZlIHNvbWUgc3BlY2lhbCB0aHVua3MuIFRoYXQncyBtb3N0IG9mIHRoZSBwYXRjaC4KKwor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckNvZGVQdHI6Om9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpvcGVyYXRvciBVbnNwZWNpZmllZEJv
b2xUeXBlKik6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcDoKKyAgICAgICAg
KEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5r
SW5mby5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OkNhbGxMaW5rSW5mbyk6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0
SklUQ29kZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aml0Q29kZSk6CisgICAgICAgICog
ZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZUltcGwpOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmxpbmspOgorICAgICAgICAqIGRmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVEZpbmFsaXplcjo6ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpERkc6
OkpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0
Q2FsbCk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6Om1tQWxsb2NhdGVDb2RlU2VjdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6
Zml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxl
KToKKyAgICAgICAgKiBmdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcDoKKyAgICAgICAgKEpTQzo6
RlRMOjpzaXplT2ZDYWxsKToKKyAgICAgICAgKiBmdGwvRlRMSW5saW5lQ2FjaGVTaXplLmg6Cisg
ICAgICAgICogZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwvRlRM
SklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6aW5pdGlhbGl6ZUFyaXR5
Q2hlY2tFbnRyeXBvaW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjphZGRyZXNzRm9y
Q2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9m
ZnNldCk6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6ZGF0YUFkZHJlc3NBdE9mZnNldCk6
CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6b2Zmc2V0T2YpOgorICAgICAgICAoSlNDOjpG
VEw6OkpJVENvZGU6OnNpemUpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmNvbnRhaW5z
KToKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5oOgorICAgICAgICAqIGZ0bC9GVExKSVRGaW5h
bGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5j
dGlvbik6CisgICAgICAgICogZnRsL0ZUTEpTQ2FsbC5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpGVEw6OkpTQ2FsbDo6SlNDYWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OmVtaXQp
OgorICAgICAgICAoSlNDOjpGVEw6OkpTQ2FsbDo6bGluayk6CisgICAgICAgICogZnRsL0ZUTEpT
Q2FsbC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OnN0YWNrbWFwSUQpOgor
ICAgICAgICAoSlNDOjpGVEw6OkpTQ2FsbDo6b3BlcmF0b3I8KToKKyAgICAgICAgKiBmdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjps
b3dlcik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVHZXRCeUlk
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVB1dEJ5SWQpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ2FsbE9yQ29uc3RydWN0
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y2FsbFN0YWNrbWFwKToKKyAg
ICAgICAgKiBmdGwvRlRMT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OnByZXBhcmVP
U1JFbnRyeSk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6Y29tcGlsZVN0dWIpOgorICAgICAgICAqIGZ0bC9GVExSZWdpc3RlckF0T2Zm
c2V0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6UmVnaXN0ZXJBdE9mZnNldDo6ZHVt
cCk6CisgICAgICAgICogZnRsL0ZUTFJlZ2lzdGVyQXRPZmZzZXQuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkZUTDo6UmVnaXN0ZXJBdE9mZnNldDo6UmVnaXN0ZXJBdE9mZnNldCk6CisgICAgICAg
IChKU0M6OkZUTDo6UmVnaXN0ZXJBdE9mZnNldDo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6
RlRMOjpSZWdpc3RlckF0T2Zmc2V0OjpncHIpOgorICAgICAgICAoSlNDOjpGVEw6OlJlZ2lzdGVy
QXRPZmZzZXQ6Om9mZnNldCk6CisgICAgICAgIChKU0M6OkZUTDo6UmVnaXN0ZXJBdE9mZnNldDo6
b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkZUTDo6UmVnaXN0ZXJBdE9mZnNldDo6b3BlcmF0
b3I8KToKKyAgICAgICAgKEpTQzo6RlRMOjpSZWdpc3RlckF0T2Zmc2V0OjpnZXRHUFIpOgorICAg
ICAgICAqIGZ0bC9GVExTdGFja01hcHMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlN0YWNrTWFw
czo6UmVjb3JkOjpwYXJzZSk6CisgICAgICAgICogZnRsL0ZUTFN0YXRlLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAqIGZ0bC9GVExTdGF0ZS5oOgorICAg
ICAgICAqIGZ0bC9GVExVbndpbmRJbmZvLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6
VW53aW5kSW5mbzo6VW53aW5kSW5mbyk6CisgICAgICAgIChKU0M6OkZUTDo6VW53aW5kSW5mbzo6
flVud2luZEluZm8pOgorICAgICAgICAoSlNDOjpGVEw6OlVud2luZEluZm86OnBhcnNlKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpVbndpbmRJbmZvOjpkdW1wKToKKyAgICAgICAgKEpTQzo6RlRMOjpV
bndpbmRJbmZvOjpmaW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpVbndpbmRJbmZvOjppbmRleE9m
KToKKyAgICAgICAgKiBmdGwvRlRMVW53aW5kSW5mby5oOiBBZGRlZC4KKyAgICAgICAgKiBqaXQv
SklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICog
aml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlT3BDYWxsU2xvd0Nhc2UpOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJfNjQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6CisgICAgICAgICog
aml0L0pJVENvZGUuY3BwOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpob3N0RnVuY3Rpb24pOgor
ICAgICAgICAoSlNDOjpKSVRDb2RlV2l0aENvZGVSZWY6OkpJVENvZGVXaXRoQ29kZVJlZik6Cisg
ICAgICAgIChKU0M6OkpJVENvZGVXaXRoQ29kZVJlZjo6fkpJVENvZGVXaXRoQ29kZVJlZik6Cisg
ICAgICAgIChKU0M6OkpJVENvZGVXaXRoQ29kZVJlZjo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNl
dCk6CisgICAgICAgIChKU0M6OkpJVENvZGVXaXRoQ29kZVJlZjo6ZGF0YUFkZHJlc3NBdE9mZnNl
dCk6CisgICAgICAgIChKU0M6OkpJVENvZGVXaXRoQ29kZVJlZjo6b2Zmc2V0T2YpOgorICAgICAg
ICAoSlNDOjpKSVRDb2RlV2l0aENvZGVSZWY6OnNpemUpOgorICAgICAgICAoSlNDOjpKSVRDb2Rl
V2l0aENvZGVSZWY6OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6RGlyZWN0SklUQ29kZTo6RGly
ZWN0SklUQ29kZSk6CisgICAgICAgIChKU0M6OkRpcmVjdEpJVENvZGU6On5EaXJlY3RKSVRDb2Rl
KToKKyAgICAgICAgKEpTQzo6RGlyZWN0SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVSZWYpOgorICAg
ICAgICAoSlNDOjpEaXJlY3RKSVRDb2RlOjplbnN1cmVXcmFwcGVycyk6CisgICAgICAgIChKU0M6
OkRpcmVjdEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6TmF0aXZlSklU
Q29kZTo6TmF0aXZlSklUQ29kZSk6CisgICAgICAgIChKU0M6Ok5hdGl2ZUpJVENvZGU6On5OYXRp
dmVKSVRDb2RlKToKKyAgICAgICAgKEpTQzo6TmF0aXZlSklUQ29kZTo6aW5pdGlhbGl6ZUNvZGVS
ZWYpOgorICAgICAgICAoSlNDOjpOYXRpdmVKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbCk6CisgICAg
ICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6b3BlcmF0aW9uTGlu
a0Zvcik6CisgICAgICAgIChKU0M6Om9wZXJhdGlvblZpcnR1YWxGb3IpOgorICAgICAgICAoSlND
OjpvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxGb3IpOgorICAgICAgICAqIGppdC9SZWdpc3RlclBy
ZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6cmVn
aXN0ZXJzVG9QcmVzZXJ2ZSk6CisgICAgICAgIChKU0M6OnJlZ2lzdGVyUHJlc2VydmF0aW9uT2Zm
c2V0KToKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVXcmFwcGVyKToKKyAgICAgICAgKEpTQzo6Z2Vu
ZXJhdGVSZWdpc3RlclJlc3RvcmF0aW9uKToKKyAgICAgICAgKEpTQzo6cmVnaXN0ZXJSZXN0b3Jh
dGlvblRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvUmVnaXN0ZXJQcmVzZXJ2YXRpb25X
cmFwcGVyR2VuZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAg
ICAgICAgKEpTQzo6bGlua1Nsb3dGb3IpOgorICAgICAgICAoSlNDOjpsaW5rRm9yKToKKyAgICAg
ICAgKEpTQzo6bGlua0Nsb3N1cmVDYWxsKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5oOgorICAg
ICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjpsaW5rRm9yVGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6bGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
bGlua0NhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
bGlua0NvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpsaW5rQ2xvc3VyZUNhbGxGb3JUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6Omxp
bmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bGlua0Nsb3N1cmVD
YWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1
YWxGb3JUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxDYWxsVGh1bmtHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjp2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjp2aXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjp2aXJ0dWFsQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dl
bmVyYXRvcik6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAgICAoSlND
OjpsaW5rVGh1bmtHZW5lcmF0b3JGb3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2xvc3VyZUNhbGxU
aHVua0dlbmVyYXRvckZvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVua0dlbmVyYXRvckZv
cik6CisgICAgICAgICogbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcDoKKyAgICAgICAgKEpTQzo6
TExJbnQ6OnNldEZ1bmN0aW9uRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRF
dmFsRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRQcm9ncmFtRW50cnlwb2lu
dCk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpM
TEludDo6ZW50cnlPU1IpOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAg
ICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBydW50aW1lL0Fy
aXR5Q2hlY2tNb2RlLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHJ1bnRpbWUv
RXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxD
b2RlKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RXhl
Y3V0YWJsZUJhc2U6OmVudHJ5cG9pbnRGb3IpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFz
ZTo6b2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3IpOgorICAgICAgICAoSlNDOjpOYXRp
dmVFeGVjdXRhYmxlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9SZWdpc3Rl
clByZXNlcnZhdGlvbk1vZGUuaDogQWRkZWQuCisKIDIwMTMtMTItMTggIE1hcmsgTGFtICA8bWFy
ay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIENTdGFjazogUmVuYW1lIGZ1bmN0aW9ucyBpbiBK
U1N0YWNrIHRvIGZpdCBXZWJLaXQgQ29kaW5nIFN0eWxlLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjcsNiArMjY3LDE2IEBACiAJCTBGNjY2RUNEMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1
cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUNCMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJl
Y3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjY2RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNl
bmN5TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2RTE2QzE0REYzRjE2
MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0VkZ2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjZCMUNCNTE4NUZD
OUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0IzMTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwu
Y3BwICovOyB9OworCQkwRjZCMUNCNjE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCNDE4NUZD
OUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2QjFDQjkxODYxMjQ0QzAwODQ1RDk3IC8qIEFyaXR5Q2hl
Y2tNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjZCMUNCNzE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlDaGVja01vZGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjZCMUNCQTE4NjEyNDRDMDA4
NDVEOTcgLyogUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCODE4NjEyNDRDMDA4NDVEOTcgLyogUmVn
aXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEY2QjFDQkQxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJl
c2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCQjE4NjEyNDZBMDA4NDVEOTcgLyogUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcCAqLzsgfTsKKwkJMEY2QjFDQkUxODYxMjQ2
QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQkMxODYxMjQ2
QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkIxQ0MzMTg2
MkM0NzgwMDg0NUQ5NyAvKiBGVExSZWdpc3RlckF0T2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0JGMTg2MkM0NzgwMDg0NUQ5NyAv
KiBGVExSZWdpc3RlckF0T2Zmc2V0LmNwcCAqLzsgfTsKKwkJMEY2QjFDQzQxODYyQzQ3ODAwODQ1
RDk3IC8qIEZUTFJlZ2lzdGVyQXRPZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0MwMTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExSZWdpc3Rl
ckF0T2Zmc2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEY2QjFDQzUxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQzExODYyQzQ3
ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uY3BwICovOyB9OworCQkwRjZCMUNDNjE4NjJDNDc4
MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQzIxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZElu
Zm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjcwMjVBOTE3MTRCMEZBMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzAyNUE3MTcx
NEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwICovOyB9OwogCQkw
RjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcwMjVBODE3MTRC
MEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3MTRDQTQxNkVBOTJGMDAwRjNF
QkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8q
IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovOyB9OwpAQCAtMTU3OSw2ICsxNTg5
LDE2IEBACiAJCTBGNjY2RUNCMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JW
YWxpZGF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUmVz
dXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHUmVzdXJyZWN0aW9u
Rm9yVmFsaWRhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZF
MTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FkamFjZW5jeUxpc3QuaDsgcGF0aCA9IGRmZy9ERkdBZGph
Y2VuY3lMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZFMTY5MTRERjNG
MTMwMEI3QjJFNCAvKiBERkdFZGdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0VkZ2UuaDsgcGF0aCA9IGRmZy9ERkdFZGdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNkIxQ0IzMTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMSlNDYWxsLmNwcDsgcGF0aCA9IGZ0bC9G
VExKU0NhbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZCMUNCNDE4NUZD
OUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEZUTEpTQ2FsbC5oOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjZCMUNCNzE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlDaGVja01vZGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJpdHlDaGVja01vZGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QjFDQjgxODYxMjQ0QzAwODQ1RDk3IC8qIFJl
Z2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2QjFDQkIxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBl
ckdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWdp
c3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjZCMUNCQzE4NjEyNDZBMDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVzZXJ2YXRp
b25XcmFwcGVyR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
Z2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjZCMUNCRjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMUmVnaXN0ZXJBdE9mZnNl
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExSZWdpc3RlckF0
T2Zmc2V0LmNwcDsgcGF0aCA9IGZ0bC9GVExSZWdpc3RlckF0T2Zmc2V0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QjFDQzAxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFJlZ2lz
dGVyQXRPZmZzZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMUmVnaXN0
ZXJBdE9mZnNldC5oOyBwYXRoID0gZnRsL0ZUTFJlZ2lzdGVyQXRPZmZzZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QjFDQzExODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2lu
ZEluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMVW53aW5k
SW5mby5jcHA7IHBhdGggPSBmdGwvRlRMVW53aW5kSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNkIxQ0MyMTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFVud2luZEluZm8uaDsgcGF0aCA9
IGZ0bC9GVExVbndpbmRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzAy
NUE3MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjcwMjVBODE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09T
UkV4aXRDb21waWxlckNvbW1vbi5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1v
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcxNENBMTE2RUE5MkVEMDBGM0VC
RUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgcGF0
aCA9IGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTI4NTgsNiArMjg3OCw4IEBACiAJCQkJMEZFQTBBMDMxNzA1MTNEQjAw
QkI3MjJDIC8qIEZUTEpJVENvZGUuaCAqLywKIAkJCQlBNzhBOTc3RDE3OTczOEQ1MDA5REY3NDQg
LyogRlRMSklURmluYWxpemVyLmNwcCAqLywKIAkJCQlBNzhBOTc3RTE3OTczOEQ1MDA5REY3NDQg
LyogRlRMSklURmluYWxpemVyLmggKi8sCisJCQkJMEY2QjFDQjMxODVGQzlFOTAwODQ1RDk3IC8q
IEZUTEpTQ2FsbC5jcHAgKi8sCisJCQkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpT
Q2FsbC5oICovLAogCQkJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAq
LywKIAkJCQkwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICovLAogCQkJCTBG
Q0VGQUREMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8sCkBAIC0yODc0LDYg
KzI4OTYsOCBAQAogCQkJCTBGMjM1QkNBMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29t
cGlsZXIuaCAqLywKIAkJCQkwRkVBMEEyOTE3MDk2Mjk2MDBCQjcyMkMgLyogRlRMT3V0cHV0LmNw
cCAqLywKIAkJCQkwRkVBMEEwNjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMT3V0cHV0LmggKi8sCisJ
CQkJMEY2QjFDQkYxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFJlZ2lzdGVyQXRPZmZzZXQuY3BwICov
LAorCQkJCTBGNkIxQ0MwMTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExSZWdpc3RlckF0T2Zmc2V0Lmgg
Ki8sCiAJCQkJMEZDRUZBQTkxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAq
LywKIAkJCQkwRkNFRkFBQTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuaCAqLywK
IAkJCQkwRjI1RjFBQTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmNwcCAqLywK
QEAgLTI4ODgsNiArMjkxMiw4IEBACiAJCQkJMEYyMzVCQ0IxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TFRodW5rcy5jcHAgKi8sCiAJCQkJMEYyMzVCQ0MxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5r
cy5oICovLAogCQkJCTBGRUEwQTFCMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExUeXBlZFBvaW50ZXIu
aCAqLywKKwkJCQkwRjZCMUNDMTE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5jcHAg
Ki8sCisJCQkJMEY2QjFDQzIxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uaCAqLywK
IAkJCQkwRjIzNUJDRDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuY3BwICovLAog
CQkJCTBGMjM1QkNFMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5oICovLAogCQkJ
CTBGREIyQ0M4MTczREE1MUUwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oICovLApAQCAt
MzAzMiw2ICszMDU4LDggQEAKIAkJCQkwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5M0MgLyogSklUVG9E
RkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywKIAkJCQlBNzZGNTRBMjEzQjI4QUFC
MDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggKi8sCiAJCQkJQTc2QzUxNzQxMTgyNzQ4RDAw
NzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggKi8sCisJCQkJMEY2QjFDQkIxODYxMjQ2QTAwODQ1
RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAgKi8sCisJCQkJ
MEY2QjFDQkMxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdl
bmVyYXRvci5oICovLAogCQkJCTBGQzMxNDE0MTgxNDZENzAwMDAzMzIzMiAvKiBSZWdpc3RlclNl
dC5jcHAgKi8sCiAJCQkJMEZDMzE0MTAxODE0NTU5MTAwMDMzMjMyIC8qIFJlZ2lzdGVyU2V0Lmgg
Ki8sCiAJCQkJMEYyNEU1NDkxN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3BwICovLApAQCAt
MzM2OSw2ICszMzk3LDcgQEAKIAkJCQlBNzYxNDBDODE4Mjk4MkNCMDA3NTA2MjQgLyogQXJndW1l
bnRzSXRlcmF0b3JDb25zdHJ1Y3Rvci5oICovLAogCQkJCUE3NjE0MEM5MTgyOTgyQ0IwMDc1MDYy
NCAvKiBBcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQTc2MTQwQ0ExODI5
ODJDQjAwNzUwNjI0IC8qIEFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBlLmggKi8sCisJCQkJMEY2
QjFDQjcxODYxMjQ0QzAwODQ1RDk3IC8qIEFyaXR5Q2hlY2tNb2RlLmggKi8sCiAJCQkJQTdBOEFG
MjUxN0FEQjVGMjAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmNwcCAqLywKIAkJCQlBN0E4QUYyNjE3
QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRkZDOTlEMjE4NEVFMzE4
MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcCAqLywKQEAgLTM2
NjcsNiArMzY5Niw3IEBACiAJCQkJRjY5MkE4N0MwMjU1NTk3RDAxRkY2MEY3IC8qIFJlZ0V4cE9i
amVjdC5oICovLAogCQkJCUJDRDIwMkJGMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBQcm90b3R5
cGUuY3BwICovLAogCQkJCUJDRDIwMkMwMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBQcm90b3R5
cGUuaCAqLywKKwkJCQkwRjZCMUNCODE4NjEyNDRDMDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Nb2RlLmggKi8sCiAJCQkJMEZCN0YzOTExNUVEOEUzODAwRjE2N0IyIC8qIFJlamVjdC5o
ICovLAogCQkJCTBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3Bw
ICovLAogCQkJCTBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAq
LywKQEAgLTQzMjUsNiArNDM1NSw3IEBACiAJCQkJQzJFQUEzRkExNDlBODM1RTAwRkNFMTEyIC8q
IENvcGllZFNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkM4RDAyRDE0QTNDNkUwMDA1NzhF
NjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNTJEMDE3
QURENzE3MDA4RUNCMkQgLyogQ29weVRva2VuLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjZCMUND
NjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzIyMzlEMTgxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlDMjIzOUQxOTE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDMjE4RDE0MDE2NTVDRkQ1MDA2MkJCODEgLyogQ29weVdvcmtMaXN0
LmggaW4gSGVhZGVycyAqLywKQEAgLTQzOTUsNiArNDQyNiw3IEBACiAJCQkJMEZCQzBBRTgxNDk2
QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhB
OTc3NTE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzhBOTc3NzE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjZCMUNCNjE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0Zs
dXNoZWRBdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8q
IERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKQEAgLTQ0MzAsNiArNDQ2Miw3IEBACiAJ
CQkJMEZEOEEzMjYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0NDIgLyogREZH
T1NSRXhpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQzk5RDExODRFQzhBRDAwOUMxMEFCIC8q
IENvbnN0YW50TW9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2QjFDQkExODYxMjQ0QzAwODQ1
RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
MzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNUJBMTVFRDE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVj
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUMxNkQwMkYxMTAwNTVBNURCIC8qIERG
R09TUkV4aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtNDU4OCw2ICs0NjIx
LDcgQEAKIAkJCQkwRjQ2ODA4MjE0QkE1NzJEMDBCRkUyNzIgLyogSklURXhjZXB0aW9ucy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZCMTRFMUYxODEyNEFDRTAwOUI2QjREIC8qIEpJVElubGluZUNh
Y2hlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkNDODVBMTBFRTc5QTQ3MDAyODg2
ODIgLyogSklUSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2QjFDQkUxODYxMjQ2QTAw
ODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyNEU1NEQxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3OTBERDcwMTgyRjQ5OTcwMDU4ODgwNyAvKiBKU1NldEl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU0RTE3RUUyNzQ5MDBBQkIyMTcgLyogSklU
T3BlcmF0aW9uV3JhcHBlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtNDYwMyw2ICs0NjM3LDcgQEAK
IAkJCQkwRkM3MTJFMzE3Q0Q4NzkzMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJD
RSAvKiBKSVRXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE2MEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKU0FjdGl2YXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNkIxQ0I5
MTg2MTI0NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNrTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODQwNDgwMTMxMDIxQTFEOTAwOEU3RjAxIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzYxNDBEMjE4Mjk4MkNCMDA3NTA2MjQgLyogSlNBcmd1
bWVudHNJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC00NjU1LDYgKzQ2OTAsNyBAQAogCQkJ
CUJDMThDNDIzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0xvY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTcwMDg3NDIxN0NCRThFQjAwQzNFNjQzIC8qIEpTTWFwLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjZCMUNDNDE4NjJDNDc4MDA4NDVEOTcgLyogRlRMUmVnaXN0ZXJBdE9mZnNldC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4NzRBRTQxNUVCREU0QTAwMkUzNTg3IC8qIEpTTmFtZVNj
b3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNP
YmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U09iamVjdFJlZi5oIGluIEhlYWRlcnMgKi8sCkBAIC01NDk1LDYgKzU1MzEsNyBAQAogCQkJCTg2
ODgwRjREMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3RDg5Q0ZGMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdTU0FDb252ZXJzaW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4IC8q
IERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2QjFDQkQxODYx
MjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBDRjI0NDIgLyogREZHVGh1bmtz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzI3MTdENTFGNTcwMENBMkM0MCAvKiBERkdU
aWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzI5
MTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTU1NDksOCArNTU4NiwxMCBAQAogCQkJCTBGQ0VGQUFCMTgw
NEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjI1RjFCMTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMjVGMUIzMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXku
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2QjFDQzUxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVu
d2luZEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDMzOUExODAzQURCNzAwNzNDMkJD
IC8qIEZUTFN0YWNrTWFwcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEExNjE3MDZCQjkw
MDBCQjcyMkMgLyogRlRMU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2QjFDQjUxODVG
QzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJF
MTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MjM1QkUzMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDdGMzlDQjEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25Db25zdHJ1Y3Rvci5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTU3MzcsNiArNTc3Niw3IEBACiAJCQkJMEY2NjZFQ0MxODM2
QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkIxMDU4QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JF
eGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQ
cm9maWxlck9TUkV4aXRTaXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNkIxQ0MzMTg2MkM0
NzgwMDg0NUQ5NyAvKiBGVExSZWdpc3RlckF0T2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMTM5MTJCMTY3NzFDM0EwMDlDQ0IwNyAvKiBQcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQcm9wZXJ0
eURlc2NyaXB0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTcxMDdFQzdFNzAwNjUw
NDQ2IC8qIFByb3BlcnR5TmFtZUFycmF5LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDksOSArMzA5
LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkKiBkYXRhTG9jYXRpb24oKSBjb25zdCB7IEFTU0VSVF9W
QUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7IHJldHVybiBtX3ZhbHVlOyB9CiAjZW5kaWYKIAot
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKKyAgICB0eXBlZGVmIHZvaWQqIChNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRvciBVbnNwZWNp
ZmllZEJvb2xUeXBlKigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gIW1fdmFsdWU7Cisg
ICAgICAgIHJldHVybiAhIW1fdmFsdWUgPyByZWludGVycHJldF9jYXN0PFVuc3BlY2lmaWVkQm9v
bFR5cGUqPigxKSA6IDA7CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHImIG90aGVyKSBjb25zdApAQCAtNDM0LDcgKzQzNSwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBKU0M6OnRyeVRvRGlzYXNzZW1ibGUobV9jb2RlUHRyLCBz
aXplKCksIHByZWZpeCwgV1RGOjpkYXRhRmlsZSgpKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb2RlUHRyOyB9CisgICAgdHlwZWRlZiB2b2lk
KiAoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3Bl
cmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICEhbV9jb2RlUHRyID8gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oMSkg
OiAwOworICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
ICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZv
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmNwcAkocmV2aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDE1ICszNywxNSBAQCB2
b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSwgUmVwYXRjCiB7CiAgICAgQVNTRVJUKGlz
TGlua2VkKCkpOwogICAgIAorICAgIGlmIChPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKSkKKyAg
ICAgICAgZGF0YUxvZygiVW5saW5raW5nIGNhbGwgaW4gIiwgKnJlcGF0Y2hCdWZmZXIuY29kZUJs
b2NrKCksICIgYXQgIiwgY29kZU9yaWdpbiwgIlxuIik7CisgICAgCiAgICAgcmVwYXRjaEJ1ZmZl
ci5yZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaChSZXBhdGNoQnVmZmVy
OjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3Rlcihob3RQYXRoQmVnaW4pLCBzdGF0
aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oY2FsbGVlR1BSKSwgMCk7Ci0gICAg
aWYgKGlzREZHKSB7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlvbiwgKGNhbGxUeXBlID09IENvbnN0cnVjdCA/IHZtLmdl
dENUSVN0dWIobGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKSA6IHZtLmdldENUSVN0dWIobGlu
a0NhbGxUaHVua0dlbmVyYXRvcikpLmNvZGUoKSk7Ci0jZWxzZQotICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgfSBlbHNlCi0gICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlvbiwgY2FsbFR5cGUgPT0gQ29uc3RydWN0ID8g
dm0uZ2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSA6IHZtLmdl
dENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKKyAgICByZXBhdGNoQnVm
ZmVyLnJlbGluaygKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLAorICAgICAgICB2bS5nZXRD
VElTdHViKGxpbmtUaHVua0dlbmVyYXRvckZvcigKKyAgICAgICAgICAgIGNhbGxUeXBlID09IENv
bnN0cnVjdCA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCwKKyAgICAgICAgICAgIHJl
cGF0Y2hCdWZmZXIuY29kZUJsb2NrKCktPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQgPyBN
dXN0UHJlc2VydmVSZWdpc3RlcnMgOiBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKSku
Y29kZSgpKTsKICAgICBoYXNTZWVuU2hvdWxkUmVwYXRjaCA9IGZhbHNlOwogICAgIGNhbGxlZS5j
bGVhcigpOwogICAgIHN0dWIuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
NTYsNyArNTYsNiBAQCBzdHJ1Y3QgQ2FsbExpbmtJbmZvIDogcHVibGljIEJhc2ljUmF3U2VuCiAg
ICAgICAgIAogICAgIENhbGxMaW5rSW5mbygpCiAgICAgICAgIDogaGFzU2VlblNob3VsZFJlcGF0
Y2goZmFsc2UpCi0gICAgICAgICwgaXNERkcoZmFsc2UpCiAgICAgICAgICwgaGFzU2VlbkNsb3N1
cmUoZmFsc2UpCiAgICAgICAgICwgY2FsbFR5cGUoTm9uZSkKICAgICB7CkBAIC04MCw3ICs3OSw2
IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBwdWJsaWMgQmFzaWNSYXdTZW4KICAgICBXcml0ZUJh
cnJpZXI8SlNGdW5jdGlvbj4gbGFzdFNlZW5DYWxsZWU7CiAgICAgUmVmUHRyPENsb3N1cmVDYWxs
U3R1YlJvdXRpbmU+IHN0dWI7CiAgICAgYm9vbCBoYXNTZWVuU2hvdWxkUmVwYXRjaCA6IDE7Ci0g
ICAgYm9vbCBpc0RGRyA6IDE7CiAgICAgYm9vbCBoYXNTZWVuQ2xvc3VyZSA6IDE7CiAgICAgdW5z
aWduZWQgY2FsbFR5cGUgOiA1OyAvLyBDYWxsVHlwZQogICAgIHVuc2lnbmVkIGNhbGxlZUdQUiA6
IDg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1NywxNyArMjU3LDE1IEBAIHB1YmxpYzoKICAgICAv
LyBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bmV3
UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSkK
ICAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gbmV3UmVwbGFjZW1lbnQoKTsKICAgICAKLSAgICB2
b2lkIHNldEpJVENvZGUoUGFzc1JlZlB0cjxKSVRDb2RlPiBjb2RlLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY29kZVdpdGhBcml0eUNoZWNrKQorICAgIHZvaWQgc2V0SklUQ29kZShQYXNzUmVmUHRy
PEpJVENvZGU+IGNvZGUpCiAgICAgewogICAgICAgICBBU1NFUlQobV9oZWFwLT5pc0RlZmVycmVk
KCkpOwogICAgICAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChjb2RlLT5zaXplKCkp
OwogICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOyAvLyBUaGlzIGlzIHByb2JhYmx5IG5vdCBuZWVkZWQgYmVj
YXVzZSB0aGUgbG9jayB3aWxsIGFsc28gZG8gc29tZXRoaW5nIHNpbWlsYXIsIGJ1dCBpdCdzIGdv
b2QgdG8gYmUgcGFyYW5vaWQuCiAgICAgICAgIG1faml0Q29kZSA9IGNvZGU7Ci0gICAgICAgIG1f
aml0Q29kZVdpdGhBcml0eUNoZWNrID0gY29kZVdpdGhBcml0eUNoZWNrOwogICAgIH0KICAgICBQ
YXNzUmVmUHRyPEpJVENvZGU+IGppdENvZGUoKSB7IHJldHVybiBtX2ppdENvZGU7IH0KLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgaml0Q29kZVdpdGhBcml0eUNoZWNrKCkgeyByZXR1cm4gbV9q
aXRDb2RlV2l0aEFyaXR5Q2hlY2s7IH0KICAgICBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUoKSBj
b25zdAogICAgIHsKICAgICAgICAgSklUQ29kZSogaml0Q29kZSA9IG1faml0Q29kZS5nZXQoKTsK
QEAgLTEwNjYsNyArMTA2NCw2IEBAIHByaXZhdGU6CiAgICAgU2VudGluZWxMaW5rZWRMaXN0PExM
SW50Q2FsbExpbmtJbmZvLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMTEludENhbGxMaW5rSW5mbz4+
IG1faW5jb21pbmdMTEludENhbGxzOwogI2VuZGlmCiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0
Q29kZTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2s7
CiAjaWYgRU5BQkxFKEpJVCkKICAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1YkluZm9z
OwogICAgIFZlY3RvcjxCeVZhbEluZm8+IG1fYnlWYWxJbmZvczsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMTEg
KzgwLDE5IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICAvLyBt
YWtlIHN1cmUgdGhhdCBhbGwgSklUIGNvZGUgZ2VuZXJhdGlvbiBkb2VzIGZpbmFsaXphdGlvbiBv
biB0aGUgbWFpbiB0aHJlYWQuCiAgICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRo
dW5rR2VuZXJhdG9yKTsKICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcik7Ci0gICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKTsKLSAgICB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7Ci0g
ICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcik7Ci0gICAgdm0u
Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKTsKLSAgICB2bS5nZXRDVElTdHVi
KHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7CisgICAgaWYgKG1vZGUgPT0gREZHTW9k
ZSkgeworICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOworICAg
ICAgICB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7CisgICAgICAg
IHZtLmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgICAgICB2
bS5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgICAgICB2bS5nZXRD
VElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0
b3IpOworICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVn
c1RodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxU
aGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgdm0uZ2V0Q1RJU3R1Yih2
aXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOworICAgICAgICB2bS5n
ZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9y
KTsKKyAgICB9CiAgICAgCiAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigKICAgICAg
ICAgbmV3IFBsYW4oY29kZUJsb2NrLCBtb2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIG11c3RI
YW5kbGVWYWx1ZXMpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDkgKzIzMCwxMSBA
QCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fanNDYWxscy5zaXplKCk7ICsraSkgewogICAgICAgICBDYWxsTGlu
a0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvKGkpOwogICAgICAgICBpbmZv
LmNhbGxUeXBlID0gbV9qc0NhbGxzW2ldLm1fY2FsbFR5cGU7Ci0gICAgICAgIGluZm8uaXNERkcg
PSB0cnVlOwogICAgICAgICBpbmZvLmNvZGVPcmlnaW4gPSBtX2pzQ2FsbHNbaV0ubV9jb2RlT3Jp
Z2luOwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsobV9qc0NhbGxzW2ldLm1fc2xvd0NhbGwsIEZ1
bmN0aW9uUHRyKChtX3ZtLT5nZXRDVElTdHViKGluZm8uY2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZv
OjpDb25zdHJ1Y3QgPyBsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IgOiBsaW5rQ2FsbFRodW5r
R2VuZXJhdG9yKSkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgVGh1bmtH
ZW5lcmF0b3IgZ2VuZXJhdG9yID0gbGlua1RodW5rR2VuZXJhdG9yRm9yKAorICAgICAgICAgICAg
aW5mby5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA/IENvZGVGb3JDb25zdHJ1
Y3QgOiBDb2RlRm9yQ2FsbCwKKyAgICAgICAgICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVx
dWlyZWQpOworICAgICAgICBsaW5rQnVmZmVyLmxpbmsobV9qc0NhbGxzW2ldLm1fc2xvd0NhbGws
IEZ1bmN0aW9uUHRyKG1fdm0tPmdldENUSVN0dWIoZ2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSkpOwogICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fanNDYWxsc1tpXS5tX3Nsb3dDYWxsKTsKICAgICAgICAg
aW5mby5ob3RQYXRoQmVnaW4gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9qc0NhbGxzW2ldLm1f
dGFyZ2V0VG9DaGVjayk7CiAgICAgICAgIGluZm8uaG90UGF0aE90aGVyID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGwobV9qc0NhbGxzW2ldLm1fZmFzdENhbGwpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkocmV2aXNpb24gMTYw
Nzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCw5IEBAIEpJVEZpbmFsaXplcjo6fkpJVEZpbmFsaXpl
cigpCiAKIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZSgpCiB7Ci0gICAgbV9qaXRDb2RlLT5p
bml0aWFsaXplQ29kZVJlZihtX2xpbmtCdWZmZXItPmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3Nl
bWJseSgpKTsKLSAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZSwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKCkpOworICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYo
CisgICAgICAgIG1fbGlua0J1ZmZlci0+ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCks
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKKyAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRD
b2RlKG1faml0Q29kZSk7CiAgICAgCiAgICAgZmluYWxpemVDb21tb24oKTsKICAgICAKQEAgLTU5
LDggKzYwLDkgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKCkKIGJvb2wgSklURmluYWxp
emVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV93aXRoQXJp
dHlDaGVjay5pc0VtcHR5VmFsdWUoKSk7Ci0gICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJl
ZihtX2xpbmtCdWZmZXItPmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpKTsKLSAgICBt
X3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZSwgbV93aXRoQXJpdHlDaGVjayk7
CisgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZigKKyAgICAgICAgbV9saW5rQnVmZmVy
LT5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoKSwgbV93aXRoQXJpdHlDaGVjayk7Cisg
ICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUpOwogICAgIAogICAgIGZp
bmFsaXplQ29tbW9uKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcwNCwxMSArNzA0LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCiAgICAgSklU
Q29tcGlsZXI6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwotICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBzbG93UGF0aDsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aDsKIAogICAg
IG1faml0LmVtaXRTdG9yZUNvZGVPcmlnaW4obm9kZS0+Y29kZU9yaWdpbik7CiAgICAgCi0gICAg
c2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVjaywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoMCkpKTsKKyAgICBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVjaywgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCkpOwogCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBt
X3Njb3BlKSksIHJlc3VsdEdQUik7CiAgICAgbV9qaXQuc3RvcmU2NChyZXN1bHRHUFIsIGNhbGxl
ZUZyYW1lU2xvdChKU1N0YWNrOjpTY29wZUNoYWluKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNjA3OTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMyw2ICsxMDMsOCBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUo
Tm9kZSogCiAgICAgY2FzZSBGdW5jdGlvblJlZW50cnlXYXRjaHBvaW50OgogICAgIGNhc2UgVmFy
aWFibGVXYXRjaHBvaW50OgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CisgICAgY2FzZSBDYWxsOgor
ICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgR2V0QnlJZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDb21waWxlLmNwcAkocmV2aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2lu
Y2x1ZGUgIkZUTElubGluZUNhY2hlU2l6ZS5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNp
bmNsdWRlICJGVExUaHVua3MuaCIKKyNpbmNsdWRlICJGVExVbndpbmRJbmZvLmgiCiAjaW5jbHVk
ZSAiSklUU3R1YnMuaCIKICNpbmNsdWRlICJMTFZNQVBJLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgpAQCAtNDksNyArNTAsNiBAQCB1c2luZyBuYW1lc3BhY2UgREZHOwogc3RhdGljIHVpbnQ4
X3QqIG1tQWxsb2NhdGVDb2RlU2VjdGlvbigKICAgICB2b2lkKiBvcGFxdWVTdGF0ZSwgdWludHB0
cl90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCwgdW5zaWduZWQsIGNvbnN0IGNoYXIqIHNlY3Rp
b25OYW1lKQogewotICAgIAogICAgIFN0YXRlJiBzdGF0ZSA9ICpzdGF0aWNfY2FzdDxTdGF0ZSo+
KG9wYXF1ZVN0YXRlKTsKICAgICAKICAgICBSRUxFQVNFX0FTU0VSVChhbGlnbm1lbnQgPD0gaml0
QWxsb2NhdGlvbkdyYW51bGUpOwpAQCAtNTgsNiArNTgsMTEgQEAgc3RhdGljIHVpbnQ4X3QqIG1t
QWxsb2NhdGVDb2RlU2VjdGlvbigKICAgICAgICAgc3RhdGUuZ3JhcGgubV92bS5leGVjdXRhYmxl
QWxsb2NhdG9yLmFsbG9jYXRlKAogICAgICAgICAgICAgc3RhdGUuZ3JhcGgubV92bSwgc2l6ZSwg
c3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwogICAg
IAorICAgIGlmICghc3RyY21wKHNlY3Rpb25OYW1lLCAiX19jb21wYWN0X3Vud2luZCIpKSB7Cisg
ICAgICAgIHN0YXRlLmNvbXBhY3RVbndpbmQgPSByZXN1bHQtPnN0YXJ0KCk7CisgICAgICAgIHN0
YXRlLmNvbXBhY3RVbndpbmRTaXplID0gcmVzdWx0LT5zaXplSW5CeXRlcygpOworICAgIH0KKyAg
ICAKICAgICBzdGF0ZS5qaXRDb2RlLT5hZGRIYW5kbGUocmVzdWx0KTsKICAgICBzdGF0ZS5jb2Rl
U2VjdGlvbk5hbWVzLmFwcGVuZChzZWN0aW9uTmFtZSk7CiAgICAgCkBAIC0yOTksNiArMzA0LDQ0
IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgfQog
ICAgIH0KICAgICAKKyAgICAvLyBIYW5kbGluZyBKUyBjYWxscyBpcyB3ZWlyZDogd2UgbmVlZCB0
byBlbnN1cmUgdGhhdCB3ZSBzb3J0IHRoZW0gYnkgdGhlIFBDIGluIExMVk0KKyAgICAvLyBnZW5l
cmF0ZWQgY29kZS4gVGhhdCBpbXBsaWVzIGZpcnN0IHBydW5pbmcgdGhlIG9uZXMgdGhhdCBMTFZN
IGRpZG4ndCBnZW5lcmF0ZS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuanND
YWxscy5zaXplKCk7ICsraSkgeworICAgICAgICBKU0NhbGwmIGNhbGwgPSBzdGF0ZS5qc0NhbGxz
W2ldOworICAgICAgICAKKyAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0
ZXIgPSByZWNvcmRNYXAuZmluZChjYWxsLnN0YWNrbWFwSUQoKSk7CisgICAgICAgIGlmIChpdGVy
ID09IHJlY29yZE1hcC5lbmQoKSkgeworICAgICAgICAgICAgLy8gSXQgd2FzIG9wdGltaXplZCBv
dXQuIFBydW5lIGl0LgorICAgICAgICAgICAgY2FsbCA9IHN0YXRlLmpzQ2FsbHMubGFzdCgpOwor
ICAgICAgICAgICAgc3RhdGUuanNDYWxscy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBpLS07
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2Fs
bC5tX2luc3RydWN0aW9uT2Zmc2V0ID0gaXRlci0+dmFsdWUuaW5zdHJ1Y3Rpb25PZmZzZXQ7Cisg
ICAgfQorICAgIAorICAgIHN0ZDo6c29ydChzdGF0ZS5qc0NhbGxzLmJlZ2luKCksIHN0YXRlLmpz
Q2FsbHMuZW5kKCkpOworICAgIAorICAgIGNvZGVCbG9jay0+c2V0TnVtYmVyT2ZDYWxsTGlua0lu
Zm9zKHN0YXRlLmpzQ2FsbHMuc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5q
c0NhbGxzLnNpemUoKTsgaS0tOykgeworICAgICAgICBKU0NhbGwmIGNhbGwgPSBzdGF0ZS5qc0Nh
bGxzW2ldOworCisgICAgICAgIENDYWxsSGVscGVycyBmYXN0UGF0aEpJVCgmdm0sIGNvZGVCbG9j
ayk7CisgICAgICAgIGNhbGwuZW1pdChmYXN0UGF0aEpJVCk7CisgICAgICAgIAorICAgICAgICBj
aGFyKiBzdGFydE9mSUMgPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSAr
IGNhbGwubV9pbnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAgCisgICAgICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcih2bSwgJmZhc3RQYXRoSklULCBzdGFydE9mSUMsIHNpemVPZkNhbGwoKSk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtCdWZmZXIuaXNWYWxpZCgpKTsKKyAgICAgICAgCisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBc3NlbWJsZXJUeXBlX1Q6OmZpbGxOb3BzKAorICAgICAg
ICAgICAgc3RhcnRPZklDICsgbGlua0J1ZmZlci5zaXplKCksIHNpemVPZkNhbGwoKSAtIGxpbmtC
dWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IGNv
ZGVCbG9jay0+Y2FsbExpbmtJbmZvKGkpOworICAgICAgICBjYWxsLmxpbmsodm0sIGxpbmtCdWZm
ZXIsIGluZm8pOworICAgIH0KKyAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIo
Y29kZUJsb2NrKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGV4aXRJbmRleCA9IGppdENvZGUt
Pm9zckV4aXQuc2l6ZSgpOyBleGl0SW5kZXgtLTspIHsKQEAgLTM5OCw3ICs0NDEsNyBAQCB2b2lk
IGNvbXBpbGUoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRs
ZSogaGFuZGxlID0gc3RhdGUuaml0Q29kZS0+aGFuZGxlcygpW2ldLmdldCgpOwogICAgICAgICAg
ICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAiR2VuZXJhdGVkIExMVk0gY29kZSBmb3IgIiwK
LSAgICAgICAgICAgICAgICBDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVC
bG9jaywgSklUQ29kZTo6REZHSklUKSwKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2tXaXRoSklU
VHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSwKICAgICAgICAg
ICAgICAgICAiICMiLCBpLCAiLCAiLCBzdGF0ZS5jb2RlU2VjdGlvbk5hbWVzW2ldLCAiOlxuIik7
CiAgICAgICAgICAgICBkaXNhc3NlbWJsZSgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIoaGFuZGxlLT5zdGFydCgpKSwgaGFuZGxlLT5zaXplSW5CeXRlcygpLApAQCAtNDA5
LDE3ICs0NTIsMjEgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAgIGNv
bnN0IFJlZkNvdW50ZWRBcnJheTxMU2VjdGlvbldvcmQ+JiBzZWN0aW9uID0gc3RhdGUuaml0Q29k
ZS0+ZGF0YVNlY3Rpb25zKClbaV07CiAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAg
ICAgICJHZW5lcmF0ZWQgTExWTSBkYXRhIHNlY3Rpb24gZm9yICIsCi0gICAgICAgICAgICAgICAg
Q29kZUJsb2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkRG
R0pJVCksCisgICAgICAgICAgICAgICAgQ29kZUJsb2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgu
bV9jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCksCiAgICAgICAgICAgICAgICAgIiAjIiwgaSwg
IiwgIiwgc3RhdGUuZGF0YVNlY3Rpb25OYW1lc1tpXSwgIjpcbiIpOwogICAgICAgICAgICAgZHVt
cERhdGFTZWN0aW9uKHNlY3Rpb24sICIgICAgIik7CiAgICAgICAgIH0KICAgICB9CiAgICAgCisg
ICAgc3RhdGUuaml0Q29kZS0+dW53aW5kLnBhcnNlKHN0YXRlLmNvbXBhY3RVbndpbmQsIHN0YXRl
LmNvbXBhY3RVbndpbmRTaXplKTsKKyAgICBpZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHko
KSkKKyAgICAgICAgZGF0YUxvZygiVW53aW5kIGluZm8gZm9yICIsIENvZGVCbG9ja1dpdGhKSVRU
eXBlKHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpLCAiOlxuICAgICIs
IHN0YXRlLmppdENvZGUtPnVud2luZCwgIlxuIik7CisgICAgCiAgICAgaWYgKHN0YXRlLnN0YWNr
bWFwc1NlY3Rpb24uc2l6ZSgpKSB7CiAgICAgICAgIGlmIChzaG91bGRTaG93RGlzYXNzZW1ibHko
KSkgewogICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAiR2VuZXJhdGVkIExM
Vk0gc3RhY2ttYXBzIHNlY3Rpb24gZm9yICIsCi0gICAgICAgICAgICAgICAgQ29kZUJsb2NrV2l0
aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCksICI6XG4i
KTsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5tX2Nv
ZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSwgIjpcbiIpOwogICAgICAgICAgICAgZGF0YUxvZygi
ICAgIFJhdyBkYXRhOlxuIik7CiAgICAgICAgICAgICBkdW1wRGF0YVNlY3Rpb24oc3RhdGUuc3Rh
Y2ttYXBzU2VjdGlvbiwgIiAgICAiKTsKICAgICAgICAgfQpAQCAtNDQ2LDcgKzQ5Myw3IEBAIHZv
aWQgY29tcGlsZShTdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICAgICAgRXhlY3V0YWJsZU1lbW9y
eUhhbmRsZSogaGFuZGxlID0gc3RhdGUuaml0Q29kZS0+aGFuZGxlcygpW2ldLmdldCgpOwogICAg
ICAgICAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAgICAgICAgICJHZW5lcmF0ZWQgTExW
TSBjb2RlIGFmdGVyIHN0YWNrbWFwLWJhc2VkIGZpeC11cCBmb3IgIiwKLSAgICAgICAgICAgICAg
ICAgICAgQ29kZUJsb2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENv
ZGU6OkRGR0pJVCksCisgICAgICAgICAgICAgICAgICAgIENvZGVCbG9ja1dpdGhKSVRUeXBlKHN0
YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpLAogICAgICAgICAgICAgICAg
ICAgICAiICMiLCBpLCAiLCAiLCBzdGF0ZS5jb2RlU2VjdGlvbk5hbWVzW2ldLCAiOlxuIik7CiAg
ICAgICAgICAgICAgICAgZGlzYXNzZW1ibGUoCiAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cihoYW5kbGUtPnN0YXJ0KCkpLCBoYW5kbGUtPnNpemVJbkJ5dGVzKCksCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUu
Y3BwCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
bGluZUNhY2hlU2l6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDExIEBAIHNpemVf
dCBzaXplT2ZQdXRCeUlkKCkKICAgICByZXR1cm4gMzI7CiB9CiAKK3NpemVfdCBzaXplT2ZDYWxs
KCkKK3sKKyAgICByZXR1cm4gNDM7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAog
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExJbmxpbmVDYWNoZVNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw2ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogc2l6ZV90
IHNpemVPZkdldEJ5SWQoKTsKIHNpemVfdCBzaXplT2ZQdXRCeUlkKCk7CitzaXplX3Qgc2l6ZU9m
Q2FsbCgpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCShyZXZpc2lv
biAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9z
aXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsOSBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oZnJhbWVBZGRyZXNzLCAibGx2bS5mcmFtZWFkZHJl
c3MiLCBmdW5jdGlvblR5cGUocG9pbnRlclR5cGUoaW50OCksIGludDMyKSkgXAogICAgIG1hY3Jv
KG11bFdpdGhPdmVyZmxvdzMyLCAibGx2bS5zbXVsLndpdGgub3ZlcmZsb3cuaTMyIiwgZnVuY3Rp
b25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQzMiwgYm9vbGVhbiksIGludDMyLCBpbnQz
MikpIFwKICAgICBtYWNybyhtdWxXaXRoT3ZlcmZsb3c2NCwgImxsdm0uc211bC53aXRoLm92ZXJm
bG93Lmk2NCIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50NjQsIGJvb2xl
YW4pLCBpbnQ2NCwgaW50NjQpKSBcCi0gICAgbWFjcm8ocGF0Y2hwb2ludEludDY0LCAibGx2bS5l
eHBlcmltZW50YWwucGF0Y2hwb2ludC5pNjQiLCBmdW5jdGlvblR5cGUoaW50NjQsIGludDMyLCBp
bnQzMiwgcmVmOCwgaW50MzIsIFZhcmlhZGljKSkgXAotICAgIG1hY3JvKHBhdGNocG9pbnRWb2lk
LCAibGx2bS5leHBlcmltZW50YWwucGF0Y2hwb2ludC52b2lkIiwgZnVuY3Rpb25UeXBlKHZvaWRU
eXBlLCBpbnQzMiwgaW50MzIsIHJlZjgsIGludDMyLCBWYXJpYWRpYykpIFwKLSAgICBtYWNybyhz
dGFja21hcCwgImxsdm0uZXhwZXJpbWVudGFsLnN0YWNrbWFwIiwgZnVuY3Rpb25UeXBlKHZvaWRU
eXBlLCBpbnQzMiwgaW50MzIsIFZhcmlhZGljKSkgXAorICAgIG1hY3JvKHBhdGNocG9pbnRJbnQ2
NCwgImxsdm0uZXhwZXJpbWVudGFsLnBhdGNocG9pbnQuaTY0IiwgZnVuY3Rpb25UeXBlKGludDY0
LCBpbnQ2NCwgaW50MzIsIHJlZjgsIGludDMyLCBWYXJpYWRpYykpIFwKKyAgICBtYWNybyhwYXRj
aHBvaW50Vm9pZCwgImxsdm0uZXhwZXJpbWVudGFsLnBhdGNocG9pbnQudm9pZCIsIGZ1bmN0aW9u
VHlwZSh2b2lkVHlwZSwgaW50NjQsIGludDMyLCByZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBcCisg
ICAgbWFjcm8oc3RhY2ttYXAsICJsbHZtLmV4cGVyaW1lbnRhbC5zdGFja21hcCIsIGZ1bmN0aW9u
VHlwZSh2b2lkVHlwZSwgaW50NjQsIGludDMyLCBWYXJpYWRpYykpIFwKICAgICBtYWNybyhzdWJX
aXRoT3ZlcmZsb3czMiwgImxsdm0uc3N1Yi53aXRoLm92ZXJmbG93LmkzMiIsIGZ1bmN0aW9uVHlw
ZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50MzIsIGJvb2xlYW4pLCBpbnQzMiwgaW50MzIpKSBc
CiAgICAgbWFjcm8oc3ViV2l0aE92ZXJmbG93NjQsICJsbHZtLnNzdWIud2l0aC5vdmVyZmxvdy5p
NjQiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDY0LCBib29sZWFuKSwg
aW50NjQsIGludDY0KSkgXAogICAgIG1hY3JvKHRyYXAsICJsbHZtLnRyYXAiLCBmdW5jdGlvblR5
cGUodm9pZFR5cGUpKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENv
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29k
ZS5jcHAJKHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDkgKzU0LDkgQEAgdm9pZCBKSVRDb2Rl
OjphZGREYXRhU2VjdGlvbihSZWZDb3VudGVkQQogICAgIG1fZGF0YVNlY3Rpb25zLmFwcGVuZChk
YXRhU2VjdGlvbik7CiB9CiAKLXZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUVudHJ5cG9pbnQoQ29k
ZVJlZiBlbnRyeXBvaW50KQordm9pZCBKSVRDb2RlOjppbml0aWFsaXplQXJpdHlDaGVja0VudHJ5
cG9pbnQoQ29kZVJlZiBlbnRyeXBvaW50KQogewotICAgIG1fZW50cnlwb2ludCA9IGVudHJ5cG9p
bnQ7CisgICAgbV9hcml0eUNoZWNrRW50cnlwb2ludCA9IGVudHJ5cG9pbnQ7CiB9CiAKIHZvaWQg
SklUQ29kZTo6aW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKENvZGVQdHIgYWRkcmVzcykKQEAgLTY0
LDIxICs2NCwyNSBAQCB2b2lkIEpJVENvZGU6OmluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChDCiAg
ICAgbV9hZGRyZXNzRm9yQ2FsbCA9IGFkZHJlc3M7CiB9CiAKLUpJVENvZGU6OkNvZGVQdHIgSklU
Q29kZTo6YWRkcmVzc0ZvckNhbGwoKQorSklUQ29kZTo6Q29kZVB0ciBKSVRDb2RlOjphZGRyZXNz
Rm9yQ2FsbChWTSYsIEV4ZWN1dGFibGVCYXNlKiwgQXJpdHlDaGVja01vZGUgYXJpdHlDaGVjaywg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlKQogewotICAgIHJldHVybiBtX2FkZHJlc3NGb3JDYWxs
OworICAgIHN3aXRjaCAoYXJpdHlDaGVjaykgeworICAgIGNhc2UgQXJpdHlDaGVja05vdFJlcXVp
cmVkOgorICAgICAgICByZXR1cm4gbV9hZGRyZXNzRm9yQ2FsbDsKKyAgICBjYXNlIE11c3RDaGVj
a0FyaXR5OgorICAgICAgICByZXR1cm4gbV9hcml0eUNoZWNrRW50cnlwb2ludC5jb2RlKCk7Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIENvZGVQ
dHIoKTsKIH0KIAogdm9pZCogSklUQ29kZTo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChzaXpl
X3Qgb2Zmc2V0KQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fZW50cnlwb2ludCk7CiAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fYWRkcmVzc0ZvckNhbGwuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkgKyBvZmZzZXQ7CiB9CiAKIHZvaWQqIEpJVENvZGU6OmRhdGFBZGRyZXNzQXRPZmZz
ZXQoc2l6ZV90KQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fZW50cnlwb2ludCk7Ci0KICAgICAv
LyBXZSBjYW4ndCBwYXRjaCBGVEwgY29kZSwgeWV0LiBFdmVuIGlmIHdlIGRpZCwgaXQncyBub3Qg
Y2xlYXIgdGhhdCB3ZSB3b3VsZCBkbyBzbwogICAgIC8vIHRocm91Z2ggdGhpcyBBUEkuCiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTg3LDggKzkxLDYgQEAgdm9pZCogSklU
Q29kZTo6ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplXwogCiB1bnNpZ25lZCBKSVRDb2RlOjpvZmZz
ZXRPZih2b2lkKikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2VudHJ5cG9pbnQpOwotCiAgICAg
Ly8gV2UgY3VycmVudGx5IGRvbid0IGhhdmUgdmlzaWJpbGl0eSBpbnRvIHRoZSBGVEwgY29kZS4K
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwpAQCAtOTYs
OCArOTgsNiBAQCB1bnNpZ25lZCBKSVRDb2RlOjpvZmZzZXRPZih2b2lkKikKIAogc2l6ZV90IEpJ
VENvZGU6OnNpemUoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fZW50cnlwb2ludCk7Ci0KICAg
ICAvLyBXZSBkb24ndCBrbm93IHRoZSBzaXplIG9mIEZUTCBjb2RlLCB5ZXQuIE1ha2UgYSB3aWxk
IGd1ZXNzLiBUaGlzIGlzIG1vc3RseSB1c2VkIGZvcgogICAgIC8vIEdDIGxvYWQgZXN0aW1hdGVz
LgogICAgIHJldHVybiAxMDAwOwpAQCAtMTA1LDggKzEwNSw2IEBAIHNpemVfdCBKSVRDb2RlOjpz
aXplKCkKIAogYm9vbCBKSVRDb2RlOjpjb250YWlucyh2b2lkKikKIHsKLSAgICBSRUxFQVNFX0FT
U0VSVChtX2VudHJ5cG9pbnQpOwotCiAgICAgLy8gV2UgaGF2ZSBubyBpZGVhIHdoYXQgYWRkcmVz
c2VzIHRoZSBGVEwgY29kZSBjb250YWlucywgeWV0LgogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKSVRDb2RlLmgJKHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j
bHVkZSAiREZHQ29tbW9uRGF0YS5oIgogI2luY2x1ZGUgIkZUTE9TUkV4aXQuaCIKICNpbmNsdWRl
ICJGVExTdGFja01hcHMuaCIKKyNpbmNsdWRlICJGVExVbndpbmRJbmZvLmgiCiAjaW5jbHVkZSAi
SklUQ29kZS5oIgogI2luY2x1ZGUgIkxMVk1BUEkuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZEFycmF5Lmg+CkBAIC00NiwxNyArNDcsMTcgQEAgcHVibGljOgogICAgIEpJVENvZGUoKTsKICAg
ICB+SklUQ29kZSgpOwogICAgIAotICAgIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoKTsKLSAgICB2
b2lkKiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpOwotICAgIHZvaWQq
IGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCk7Ci0gICAgdW5zaWduZWQgb2Zmc2V0
T2Yodm9pZCogcG9pbnRlckludG9Db2RlKTsKLSAgICBzaXplX3Qgc2l6ZSgpOwotICAgIGJvb2wg
Y29udGFpbnModm9pZCopOworICAgIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoVk0mLCBFeGVjdXRh
YmxlQmFzZSosIEFyaXR5Q2hlY2tNb2RlLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpIE9WRVJS
SURFOworICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkg
T1ZFUlJJREU7CisgICAgdm9pZCogZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSBP
VkVSUklERTsKKyAgICB1bnNpZ25lZCBvZmZzZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUpIE9W
RVJSSURFOworICAgIHNpemVfdCBzaXplKCkgT1ZFUlJJREU7CisgICAgYm9vbCBjb250YWlucyh2
b2lkKikgT1ZFUlJJREU7CiAgICAgCiAgICAgdm9pZCBpbml0aWFsaXplRXhpdFRodW5rcyhDb2Rl
UmVmKTsKICAgICB2b2lkIGFkZEhhbmRsZShQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5k
bGU+KTsKICAgICB2b2lkIGFkZERhdGFTZWN0aW9uKFJlZkNvdW50ZWRBcnJheTxMU2VjdGlvbldv
cmQ+KTsKLSAgICB2b2lkIGluaXRpYWxpemVFbnRyeXBvaW50KENvZGVSZWYpOworICAgIHZvaWQg
aW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50KENvZGVSZWYpOwogICAgIHZvaWQgaW5pdGlh
bGl6ZUFkZHJlc3NGb3JDYWxsKENvZGVQdHIpOwogICAgIAogICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4+JiBoYW5kbGVzKCkgY29uc3QgeyByZXR1cm4gbV9o
YW5kbGVzOyB9CkBAIC03MCwxMiArNzEsMTMgQEAgcHVibGljOgogICAgIERGRzo6Q29tbW9uRGF0
YSBjb21tb247CiAgICAgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXQsIDg+IG9zckV4aXQ7CiAgICAg
U3RhY2tNYXBzIHN0YWNrbWFwczsKKyAgICBVbndpbmRJbmZvIHVud2luZEluZm87CiAgICAgCiBw
cml2YXRlOgogICAgIFZlY3RvcjxSZWZDb3VudGVkQXJyYXk8TFNlY3Rpb25Xb3JkPj4gbV9kYXRh
U2VjdGlvbnM7CiAgICAgVmVjdG9yPFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPj4gbV9o
YW5kbGVzOwogICAgIENvZGVQdHIgbV9hZGRyZXNzRm9yQ2FsbDsKLSAgICBDb2RlUmVmIG1fZW50
cnlwb2ludDsKKyAgICBDb2RlUmVmIG1fYXJpdHlDaGVja0VudHJ5cG9pbnQ7CiAgICAgQ29kZVJl
ZiBtX2V4aXRUaHVua3M7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMywx
MiArMTAzLDEyIEBAIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2s7CiAgICAgaWYgKGFyaXR5Q2hlY2su
aXNTZXQoKSkKICAgICAgICAgd2l0aEFyaXR5Q2hlY2sgPSBlbnRyeXBvaW50TGlua0J1ZmZlci0+
bG9jYXRpb25PZihhcml0eUNoZWNrKTsKLSAgICBqaXRDb2RlLT5pbml0aWFsaXplRW50cnlwb2lu
dCgKKyAgICBqaXRDb2RlLT5pbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoCiAgICAgICAg
IEZJTkFMSVpFX0RGR19DT0RFKAogICAgICAgICAgICAgKmVudHJ5cG9pbnRMaW5rQnVmZmVyLAog
ICAgICAgICAgICAgKCJGVEwgZW50cnlwb2ludCB0aHVuayBmb3IgJXMgd2l0aCBMTFZNIGdlbmVy
YXRlZCBjb2RlIGF0ICVwIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5j
b2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSwgZnVuY3Rpb24pKSk7CiAg
ICAgCi0gICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShqaXRDb2RlLCB3aXRoQXJpdHlD
aGVjayk7CisgICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShqaXRDb2RlKTsKICAgICAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SlNDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpT
Q2FsbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpT
Q2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRlRMSlNDYWxsLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgeworCitKU0NhbGw6OkpTQ2FsbCh1bnNpZ25lZCBzdGFja21hcElE
LCBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4p
CisgICAgOiBtX3N0YWNrbWFwSUQoc3RhY2ttYXBJRCkKKyAgICAsIG1fY2FsbFR5cGUoY2FsbFR5
cGUpCisgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKKyAgICAsIG1faW5zdHJ1Y3Rpb25P
ZmZzZXQoMCkKK3sKK30KKwordm9pZCBKU0NhbGw6OmVtaXQoQ0NhbGxIZWxwZXJzJiBqaXQpCit7
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRj
aCgKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVnVDAsIG1fdGFy
Z2V0VG9DaGVjaywKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApKTsKKyAg
ICAKKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86OnJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksCisgICAgICAgIEdQ
UkluZm86OnJlZ1QxKTsKKyAgICBqaXQuc3RvcmU2NCgKKyAgICAgICAgR1BSSW5mbzo6cmVnVDEs
CisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIENDYWxsSGVscGVy
czo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsCisgICAgICAgICAgICBzaXplb2YoUmVnaXN0ZXIpICog
KEpTU3RhY2s6OlNjb3BlQ2hhaW4gLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSkpKTsK
KyAgICAKKyAgICBtX2Zhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOworICAgIAorICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7
CisgICAgbV9zbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgIAorICAgIGRvbmUubGluaygm
aml0KTsKK30KKwordm9pZCBKU0NhbGw6OmxpbmsoVk0mIHZtLCBMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyLCBDYWxsTGlua0luZm8mIGNhbGxJbmZvKQoreworICAgIFRodW5rR2VuZXJhdG9yIGdlbmVy
YXRvciA9IGxpbmtUaHVua0dlbmVyYXRvckZvcigKKyAgICAgICAgbV9jYWxsVHlwZSA9PSBDYWxs
TGlua0luZm86OkNvbnN0cnVjdCA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCwKKyAg
ICAgICAgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKKyAgICAKKyAgICBsaW5rQnVmZmVyLmxpbmso
CisgICAgICAgIG1fc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9y
KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIAorICAgIGNhbGxJbmZvLmNhbGxU
eXBlID0gbV9jYWxsVHlwZTsKKyAgICBjYWxsSW5mby5jb2RlT3JpZ2luID0gbV9jb2RlT3JpZ2lu
OworICAgIGNhbGxJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsKG1fc2xvd0NhbGwpOworICAgIGNhbGxJbmZvLmhvdFBhdGhCZWdpbiA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZihtX3RhcmdldFRvQ2hlY2spOworICAgIGNhbGxJbmZvLmhvdFBhdGhP
dGhlciA9IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fZmFzdENhbGwpOworICAgIGNh
bGxJbmZvLmNhbGxlZUdQUiA9IEdQUkluZm86OnJlZ1QwOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKU0NhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRM
SlNDYWxsX2gKKyNkZWZpbmUgRlRMSlNDYWxsX2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisj
aW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCisjaW5j
bHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitjbGFzcyBKU0NhbGwgeworcHVibGljOgorICAgIEpT
Q2FsbCh1bnNpZ25lZCBzdGFja21hcElELCBDYWxsTGlua0luZm86OkNhbGxUeXBlLCBDb2RlT3Jp
Z2luKTsKKyAgICAKKyAgICB2b2lkIGVtaXQoQ0NhbGxIZWxwZXJzJik7CisgICAgdm9pZCBsaW5r
KFZNJiwgTGlua0J1ZmZlciYsIENhbGxMaW5rSW5mbyYpOworICAgIAorICAgIHVuc2lnbmVkIHN0
YWNrbWFwSUQoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrbWFwSUQ7IH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yPChjb25zdCBKU0NhbGwmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1faW5zdHJ1Y3Rpb25PZmZzZXQgPCBvdGhlci5tX2luc3RydWN0aW9uT2Zmc2V0OworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9zdGFja21hcElEOworICAgIENhbGxM
aW5rSW5mbzo6Q2FsbFR5cGUgbV9jYWxsVHlwZTsKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdp
bjsKKyAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBtX3RhcmdldFRvQ2hlY2s7CisgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIG1fZmFzdENhbGw7CisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG1f
c2xvd0NhbGw7CisKK3B1YmxpYzoKKyAgICB1aW50MzJfdCBtX2luc3RydWN0aW9uT2Zmc2V0Owor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCisKKyNlbmRpZiAvLyBGVExKU0NhbGxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTYwNzk0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBtX2Z0
bFN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKICAgICAgICAgbV9v
dXQuY2FsbCgKLSAgICAgICAgICAgIG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksIG1fb3V0LmNv
bnN0SW50MzIobV9mdGxTdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQpLAorICAgICAgICAgICAgbV9v
dXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgbV9vdXQuY29uc3RJbnQ2NChtX2Z0bFN0YXRlLmNhcHR1
cmVkU3RhY2ttYXBJRCksCiAgICAgICAgICAgICBtX291dC5pbnQzMlplcm8sIGNhcHR1cmVkQWxs
b2NhKTsKICAgICAgICAgCiAgICAgICAgIG1fY2FsbEZyYW1lID0gbV9vdXQucHRyVG9JbnQoCkBA
IC0xMjk3LDcgKzEyOTcsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTFZhbHVlIGNh
bGwgPSBtX291dC5jYWxsKAogICAgICAgICAgICAgbV9vdXQucGF0Y2hwb2ludEludDY0SW50cmlu
c2ljKCksCi0gICAgICAgICAgICBtX291dC5jb25zdEludDMyKHN0YWNrbWFwSUQpLCBtX291dC5j
b25zdEludDMyKHNpemVPZkdldEJ5SWQoKSksCisgICAgICAgICAgICBtX291dC5jb25zdEludDY0
KHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkdldEJ5SWQoKSksCiAgICAgICAg
ICAgICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0SW50MzIoMSksIGJhc2UpOwog
ICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1BbnlSZWdD
YWxsQ29udik7CiAgICAgICAgIHNldEpTVmFsdWUoY2FsbCk7CkBAIC0xMzIyLDcgKzEzMjIsNyBA
QCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKAog
ICAgICAgICAgICAgbV9vdXQucGF0Y2hwb2ludFZvaWRJbnRyaW5zaWMoKSwKLSAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50MzIoc3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mUHV0
QnlJZCgpKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoc3RhY2ttYXBJRCksIG1fb3V0
LmNvbnN0SW50MzIoc2l6ZU9mUHV0QnlJZCgpKSwKICAgICAgICAgICAgIGNvbnN0TnVsbChtX291
dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigyKSwgYmFzZSwgdmFsdWUpOwogICAgICAgICBzZXRJ
bnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1BbnlSZWdDYWxsQ29udik7CiAg
ICAgICAgIApAQCAtMjQzNywzNSArMjQzNyw0MCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQg
Y29tcGlsZUNhbGxPckNvbnN0cnVjdCgpCiAgICAgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBp
cyB1bmFjY2VwdGFibHkgc2xvdy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMzYyMQorICAgICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBt
X25vZGUtPm9wKCkgPT0gQ2FsbCA/IDAgOiAxOworICAgICAgICBpbnQgbnVtUGFzc2VkQXJncyA9
IG1fbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CisgICAgICAgIGludCBudW1BcmdzID0gbnVtUGFz
c2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50OwogICAgICAgICAKLSAgICAgICAgSl9KSVRPcGVy
YXRpb25fRSBmdW5jdGlvbiA9Ci0gICAgICAgICAgICBtX25vZGUtPm9wKCkgPT0gQ2FsbCA/IG9w
ZXJhdGlvbkZUTENhbGwgOiBvcGVyYXRpb25GVExDb25zdHJ1Y3Q7CisgICAgICAgIExWYWx1ZSBj
YWxsZWUgPSBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSk7CiAgICAg
ICAgIAotICAgICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBtX25vZGUtPm9wKCkgPT0gQ2Fs
bCA/IDAgOiAxOworICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFja21hcElEcysr
OwogICAgICAgICAKLSAgICAgICAgaW50IG51bVBhc3NlZEFyZ3MgPSBtX25vZGUtPm51bUNoaWxk
cmVuKCkgLSAxOworICAgICAgICBWZWN0b3I8TFZhbHVlPiBhcmd1bWVudHM7CisgICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSk7CisgICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMihzaXplT2ZDYWxsKCkpKTsKKyAgICAgICAg
YXJndW1lbnRzLmFwcGVuZChjb25zdE51bGwobV9vdXQucmVmOCkpOworICAgICAgICBhcmd1bWVu
dHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50MzIoMSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNp
emUgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSArIG51bUFyZ3MpKTsKKyAgICAgICAg
YXJndW1lbnRzLmFwcGVuZChjYWxsZWUpOyAvLyBjYWxsZWUgLT4gJXJkaQorICAgICAgICBhcmd1
bWVudHMuYXBwZW5kKGdldFVuZGVmKG1fb3V0LmludDY0KSk7IC8vIGNvZGUgYmxvY2sKKyAgICAg
ICAgYXJndW1lbnRzLmFwcGVuZChnZXRVbmRlZihtX291dC5pbnQ2NCkpOyAvLyBzY29wZSBjaGFp
bgorICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNhbGxlZSk7IC8vIGNhbGxlZSAtPiBzdGFjawor
ICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50NjQobnVtQXJncykpOyAvLyBh
cmd1bWVudCBjb3VudCBhbmQgemVyb3MgZm9yIHRoZSB0YWcKKyAgICAgICAgaWYgKGR1bW15VGhp
c0FyZ3VtZW50KQorICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChnZXRVbmRlZihtX291dC5p
bnQ2NCkpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkK
KyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMSArIGkpKSk7CiAgICAgICAgIAotICAgICAgICBMVmFsdWUgY2FsbGVlRnJh
bWUgPSBtX291dC5hZGQoCi0gICAgICAgICAgICBtX2NhbGxGcmFtZSwKLSAgICAgICAgICAgIG1f
b3V0LmNvbnN0SW50UHRyKHNpemVvZihSZWdpc3RlcikgKiB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChtX2dyYXBoLmZyYW1lUmVnaXN0ZXJDb3VudCgpKS5vZmZzZXQoKSkpOworICAgICAgICBjYWxs
UHJlZmxpZ2h0KCk7CiAgICAgICAgIAotICAgICAgICBtX291dC5zdG9yZTMyKAotICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnQzMihudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQpLAot
ICAgICAgICAgICAgcGF5bG9hZEZvcihjYWxsZWVGcmFtZSwgSlNTdGFjazo6QXJndW1lbnRDb3Vu
dCkpOwotICAgICAgICBtX291dC5zdG9yZTY0KG1fY2FsbEZyYW1lLCBjYWxsZWVGcmFtZSwgbV9o
ZWFwcy5DYWxsRnJhbWVfY2FsbGVyRnJhbWUpOwotICAgICAgICBtX291dC5zdG9yZTY0KAotICAg
ICAgICAgICAgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLAotICAg
ICAgICAgICAgYWRkcmVzc0ZvcihjYWxsZWVGcmFtZSwgSlNTdGFjazo6Q2FsbGVlKSk7CisgICAg
ICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2FsbChtX291dC5wYXRjaHBvaW50SW50NjRJbnRyaW5z
aWMoKSwgYXJndW1lbnRzKTsKKyAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlv
bihjYWxsLCBMTFZNV2ViS2l0SlNDYWxsQ29udik7CiAgICAgICAgIAotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgewotICAgICAgICAgICAgbV9vdXQuc3Rv
cmU2NCgKLSAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9u
b2RlLCAxICsgaSkpLAotICAgICAgICAgICAgICAgIGFkZHJlc3NGb3IoY2FsbGVlRnJhbWUsIHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkgKyBkdW1teVRoaXNBcmd1bWVudCkub2Zmc2V0KCkp
KTsKLSAgICAgICAgfQorICAgICAgICBtX2Z0bFN0YXRlLmpzQ2FsbHMuYXBwZW5kKEpTQ2FsbCgK
KyAgICAgICAgICAgIHN0YWNrbWFwSUQsCisgICAgICAgICAgICBtX25vZGUtPm9wKCkgPT0gQ2Fs
bCA/IENhbGxMaW5rSW5mbzo6Q2FsbCA6IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0LAorICAgICAg
ICAgICAgbV9ub2RlLT5jb2RlT3JpZ2luKSk7CiAgICAgICAgIAotICAgICAgICBzZXRKU1ZhbHVl
KHZtQ2FsbChtX291dC5vcGVyYXRpb24oZnVuY3Rpb24pLCBjYWxsZWVGcmFtZSkpOworICAgICAg
ICBzZXRKU1ZhbHVlKGNhbGwpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVKdW1wKCkK
QEAgLTQwOTIsNyArNDA5Nyw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBleGl0Lm1fc3Rh
Y2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKICAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBt
X291dC5jb25zdEludDMyKE1hY3JvQXNzZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkp
KTsKLSAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBtX291dC5jb25zdEludDMyKGV4aXQubV9z
dGFja21hcElEKSk7CisgICAgICAgIGFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQ2
NChleGl0Lm1fc3RhY2ttYXBJRCkpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuY2FsbChtX291
dC5zdGFja21hcEludHJpbnNpYygpLCBhcmd1bWVudHMpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCShyZXZpc2lvbiAxNjA3OTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNiArNDIsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lID0gZGZnQ29kZUJsb2NrLT5iYXNl
bGluZVZlcnNpb24oKTsKKyAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGRmZ0NvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCk7CiAgICAgREZHOjpKSVRDb2RlKiBkZmdDb2RlID0gZGZn
Q29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOwogICAgIEZvck9TUkVudHJ5SklUQ29kZSogZW50
cnlDb2RlID0gZW50cnlDb2RlQmxvY2stPmppdENvZGUoKS0+ZnRsRm9yT1NSRW50cnkoKTsKICAg
ICAKQEAgLTg3LDcgKzg4LDkgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KAogICAgIAogICAgIGV4
ZWMtPnNldENvZGVCbG9jayhlbnRyeUNvZGVCbG9jayk7CiAgICAgCi0gICAgdm9pZCogcmVzdWx0
ID0gZW50cnlDb2RlLT5hZGRyZXNzRm9yQ2FsbCgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAg
dm9pZCogcmVzdWx0ID0gZW50cnlDb2RlLT5hZGRyZXNzRm9yQ2FsbCgKKyAgICAgICAgdm0sIGV4
ZWN1dGFibGUsIEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCwKKyAgICAgICAgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Ob3RSZXF1aXJlZCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKQogICAgICAgICBkYXRhTG9nKCIgICAgRW50cnkgd2lsbCBzdWNjZWVkLCBn
b2luZyB0byBhZGRyZXNzIiwgUmF3UG9pbnRlcihyZXN1bHQpLCAiXG4iKTsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJ
KHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsOSArNjEsMTAgQEAgc3RhdGljIHZv
aWQgY29tcGlsZVN0dWIoCiAgICAgCiAgICAgLy8gV2UgbmVlZCBzY3JhdGNoIHNwYWNlIHRvIHNh
dmUgYWxsIHJlZ2lzdGVycyBhbmQgdG8gYnVpbGQgdXAgdGhlIEpTU3RhY2suCiAgICAgLy8gVXNl
IGEgc2NyYXRjaCBidWZmZXIgdG8gdHJhbnNmZXIgYWxsIHZhbHVlcy4KLSAgICBTY3JhdGNoQnVm
ZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkgKiBleGl0Lm1fdmFsdWVzLnNpemUoKSArIHJlcXVpcmVkU2NyYXRjaE1lbW9y
eVNpemVJbkJ5dGVzKCkpOworICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+
c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIGV4aXQubV92YWx1
ZXMuc2l6ZSgpICsgcmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMoKSArIGppdENvZGUt
PnVud2luZEluZm8ubV9yZWdpc3RlcnMuc2l6ZSgpICogc2l6ZW9mKHVpbnQ2NF90KSk7CiAgICAg
RW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2ggPSBzY3JhdGNoQnVmZmVyID8gc3RhdGljX2Nhc3Q8RW5j
b2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogMDsKICAgICBjaGFy
KiByZWdpc3RlclNjcmF0Y2ggPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHNjcmF0Y2ggKyBleGl0Lm1f
dmFsdWVzLnNpemUoKSk7CisgICAgdWludDY0X3QqIHVud2luZFNjcmF0Y2ggPSBiaXR3aXNlX2Nh
c3Q8dWludDY0X3QqPihyZWdpc3RlclNjcmF0Y2ggKyByZXF1aXJlZFNjcmF0Y2hNZW1vcnlTaXpl
SW5CeXRlcygpKTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBzYXZlQWxsUmVnaXN0ZXJz
KCkgaGFzIGEgcGxhY2Ugb24gdG9wIG9mIHRoZSBzdGFjayB0byBzcGlsbCB0aGluZ3MuIFRoYXQK
ICAgICAvLyBmdW5jdGlvbiBleHBlY3RzIHRvIGJlIGFibGUgdG8gdXNlIHRvcCBvZiBzdGFjayBm
b3Igc2NyYXRjaCBtZW1vcnkuCkBAIC0xMzksNiArMTQwLDYwIEBAIHN0YXRpYyB2b2lkIGNvbXBp
bGVTdHViKAogICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaCArIGlu
ZGV4KTsKICAgICB9CiAgICAgCisgICAgLy8gSGVuY2Vmb3J0aCB3ZSBtYWtlIGl0IGxvb2sgbGlr
ZSB3ZSBoYWQgY2FsbGVkIHRocm91Z2ggYSByZWdpc3RlciBwcmVzZXJ2YXRpb24gd3JhcHBlci4K
KyAgICAvLyBUaGlzIGltcGxpZXMgdGhhdCBGUCBtdXN0IGJlIG51ZGdlZCBkb3duIGJ5IGEgY2Vy
dGFpbiBhbW91bnQuIFRoZW4gd2UgcmVzdG9yZSB0aGUKKyAgICAvLyB2YXJpb3VzIHRoaW5ncyBh
Y2NvcmRpbmcgdG8gZWl0aGVyIGV4aXQubV92YWx1ZXMgb3IgYnkgY29weWluZyBmcm9tIHRoZSBv
bGQgZnJhbWUsIGFuZAorICAgIC8vIGZpbmFsbHkgd2Ugc2F2ZSB0aGUgdmFyaW91cyByZWdpc3Rl
cnMuCisgICAgCisgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ2lzdGVyUHJlc2VydmF0aW9uT2Zm
c2V0KCk7CisgICAgUmVnaXN0ZXJTZXQgdG9TYXZlID0gcmVnaXN0ZXJzVG9QcmVzZXJ2ZSgpOwor
ICAgIAorICAgIC8vIEJlZm9yZSB3ZSBzdGFydCBtZXNzaW5nIHdpdGggdGhlIGZyYW1lLCB3ZSBu
ZWVkIHRvIHNldCBhc2lkZSBhbnkgcmVnaXN0ZXJzIHRoYXQgdGhlCisgICAgLy8gRlRMIGNvZGUg
d2FzIHByZXNlcnZpbmcuCisgICAgZm9yICh1bnNpZ25lZCBpID0gaml0Q29kZS0+dW53aW5kSW5m
by5tX3JlZ2lzdGVycy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBl
bnRyeSA9IGppdENvZGUtPnVud2luZEluZm8ubV9yZWdpc3RlcnNbaV07CisgICAgICAgIGppdC5s
b2FkNjQoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxl
cjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpKSwKKyAgICAgICAgICAgIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHVud2lu
ZFNjcmF0Y2ggKyBpKTsKKyAgICB9CisgICAgCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6
OnBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIEdQUkluZm86OnJlZ1QyKTsKKwor
ICAgIC8vIEZpcnN0IHNldCB1cCBTUCBzbyB0aGF0IG91ciBkYXRhIGRvZXNuJ3QgZ2V0IGNsb2Ji
ZXJlZCBieSBzaWduYWxzLgorICAgIGppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigtcmVnaXN0ZXJQcmVzZXJ2YXRpb25PZmZzZXQoKSAtIGV4aXQubV92YWx1ZXMubnVtYmVy
T2ZMb2NhbHMoKSAqIHNpemVvZihSZWdpc3RlcikpLCBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2lu
dGVyUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
CisgICAgaml0LnN1YlB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJQcmVzZXJ2YXRpb25PZmZzZXQo
KSksIE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7CisgICAgCisgICAgLy8g
Q29weSB0aGUgb2xkIGZyYW1lIGRhdGEgaW50byBpdHMgbmV3IGxvY2F0aW9uLgorICAgIGppdC5h
ZGQzMihKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplLCBHUFJJbmZvOjpyZWdUMik7CisgICAg
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpy
ZWdUMSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAg
ICBqaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmVn
VDIpOworICAgIGppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVn
VDEsIG9mZnNldCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpy
ZWdUMCwgR1BSSW5mbzo6cmVnVDEpOworICAgIGppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIGppdC5i
cmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIEdQUkluZm86OnJlZ1QyKS5saW5r
VG8obG9vcCwgJmppdCk7CisgICAgCisgICAgLy8gQXQgdGhpcyBwb2ludCByZWdUMSBwb2ludHMg
dG8gd2hlcmUgd2Ugd291bGQgc2F2ZSBvdXIgcmVnaXN0ZXJzLiBTYXZlIHRoZW0gaGVyZS4KKyAg
ICBwdHJkaWZmX3QgY3VycmVudE9mZnNldCA9IG9mZnNldDsKKyAgICBmb3IgKEdQUlJlZyBncHIg
PSBBc3NlbWJseUhlbHBlcnM6OmZpcnN0UmVnaXN0ZXIoKTsgZ3ByIDw9IEFzc2VtYmx5SGVscGVy
czo6bGFzdFJlZ2lzdGVyKCk7IGdwciA9IHN0YXRpY19jYXN0PEdQUlJlZz4oZ3ByICsgMSkpIHsK
KyAgICAgICAgaWYgKCF0b1NhdmUuZ2V0KGdwcikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgY3VycmVudE9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICB1bnNpZ25l
ZCB1bndpbmRJbmRleCA9IGppdENvZGUtPnVud2luZEluZm8ubV9yZWdpc3RlcnMuZmluZChncHIp
OworICAgICAgICBpZiAodW53aW5kSW5kZXggPT0gVUlOVF9NQVgpCisgICAgICAgICAgICBqaXQu
bG9hZDY0KHJlZ2lzdGVyU2NyYXRjaCArIG9mZnNldE9mR1BSKGdwciksIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaml0LmxvYWQ2NCh1bndpbmRTY3JhdGNoICsg
dW53aW5kSW5kZXgsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgaml0LnN0b3JlNjQoZ3ByLCBB
c3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDEsIGN1cnJlbnRPZmZzZXQpKTsK
KyAgICB9CisgICAgCisgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSByZXR1cm4g
aW50byB0aGUgcmVnaXN0ZXIgcmVzdG9yYXRpb24gdGh1bmsuCisgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjphZGRyZXNzRm9yKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rl
ciwgQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDApOworICAgIGpp
dC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEpOworICAgIGppdC5zdG9y
ZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2bS0+Z2V0Q1RJU3R1YihyZWdpc3Rl
clJlc3RvcmF0aW9uVGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSwg
Q0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdp
c3RlciwgQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKSk7CisgICAgCiAgICAgLy8gTm93IGdl
dCBzdGF0ZSBvdXQgb2YgdGhlIHNjcmF0Y2ggYnVmZmVyIGFuZCBwbGFjZSBpdCBiYWNrIGludG8g
dGhlIHN0YWNrLiBUaGlzIHBhcnQgZG9lcwogICAgIC8vIGFsbCByZWJveGluZy4KICAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4ID0gZXhpdC5tX3ZhbHVlcy5zaXplKCk7IGluZGV4LS07KSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFJlZ2lzdGVyQXRPZmZzZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUmVnaXN0ZXJBdE9mZnNldC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFJlZ2lzdGVy
QXRPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZUTFJlZ2lzdGVyQXRPZmZzZXQuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQgUmVnaXN0ZXJBdE9mZnNl
dDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChncHIoKSwg
IiBhdCAiLCBvZmZzZXQoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2Vu
ZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFJlZ2lzdGVyQXRPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFJlZ2lzdGVyQXRPZmZzZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMUmVnaXN0ZXJBdE9mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBGVExSZWdpc3RlckF0T2Zmc2V0X2gKKyNkZWZpbmUgRlRMUmVnaXN0ZXJBdE9m
ZnNldF9oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgeworCitjbGFzcyBSZWdpc3RlckF0T2Zmc2V0IHsKK3B1YmxpYzoKKyAgICBSZWdpc3RlckF0
T2Zmc2V0KCkKKyAgICAgICAgOiBtX2dwcihJbnZhbGlkR1BSUmVnKQorICAgICAgICAsIG1fb2Zm
c2V0KDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBSZWdpc3RlckF0T2Zmc2V0KEdQUlJlZyBn
cHIsIHB0cmRpZmZfdCBvZmZzZXQpCisgICAgICAgIDogbV9ncHIoZ3ByKQorICAgICAgICAsIG1f
b2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QgeyByZXR1cm4gbV9ncHIgPT0gSW52YWxpZEdQUlJlZzsgfQorICAgIAorICAgIEdQUlJl
ZyBncHIoKSBjb25zdCB7IHJldHVybiBtX2dwcjsgfQorICAgIHB0cmRpZmZfdCBvZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBSZWdpc3RlckF0T2Zmc2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBn
cHIoKSA9PSBvdGhlci5ncHIoKSAmJiBvZmZzZXQoKSA9PSBvdGhlci5vZmZzZXQoKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoZ3ByKCkgIT0gb3RoZXIuZ3ByKCkpCisgICAgICAg
ICAgICByZXR1cm4gZ3ByKCkgPCBvdGhlci5ncHIoKTsKKyAgICAgICAgcmV0dXJuIG9mZnNldCgp
IDwgb3RoZXIub2Zmc2V0KCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBHUFJSZWcgZ2V0R1BS
KFJlZ2lzdGVyQXRPZmZzZXQqIHZhbHVlKSB7IHJldHVybiB2YWx1ZS0+Z3ByKCk7IH0KKyAgICAK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
R1BSUmVnIG1fZ3ByOworICAgIHB0cmRpZmZfdCBtX29mZnNldDsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8g
RlRMUmVnaXN0ZXJBdE9mZnNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU3RhY2tNYXBzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFN0YWNrTWFwcy5jcHAJKHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksOSBA
QCB2b2lkIFN0YWNrTWFwczo6TG9jYXRpb246OnJlc3RvcmVJbnRvKAogCiBib29sIFN0YWNrTWFw
czo6UmVjb3JkOjpwYXJzZShEYXRhVmlldyogdmlldywgdW5zaWduZWQmIG9mZnNldCkKIHsKLSAg
ICBwYXRjaHBvaW50SUQgPSB2aWV3LT5yZWFkPHVpbnQzMl90PihvZmZzZXQsIHRydWUpOworICAg
IGludDY0X3QgaWQgPSB2aWV3LT5yZWFkPGludDY0X3Q+KG9mZnNldCwgdHJ1ZSk7CisgICAgQVNT
RVJUKHN0YXRpY19jYXN0PGludDMyX3Q+KGlkKSA9PSBpZCk7CisgICAgcGF0Y2hwb2ludElEID0g
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KGlkKTsKICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
cGF0Y2hwb2ludElEKSA8IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKQEAgLTkwLDYg
KzkyLDEzIEBAIGJvb2wgU3RhY2tNYXBzOjpSZWNvcmQ6OnBhcnNlKERhdGFWaWV3KiAKICAgICB3
aGlsZSAobGVuZ3RoLS0pCiAgICAgICAgIGxvY2F0aW9ucy5hcHBlbmQocmVhZE9iamVjdDxMb2Nh
dGlvbj4odmlldywgb2Zmc2V0KSk7CiAgICAgCisgICAgdW5zaWduZWQgbnVtTGl2ZU91dHMgPSB2
aWV3LT5yZWFkPHVpbnQxNl90PihvZmZzZXQsIHRydWUpOworICAgIHdoaWxlIChudW1MaXZlT3V0
cy0tKSB7CisgICAgICAgIHZpZXctPnJlYWQ8dWludDE2X3Q+KG9mZnNldCwgdHJ1ZSk7IC8vIHJl
Z251bQorICAgICAgICB2aWV3LT5yZWFkPHVpbnQ4X3Q+KG9mZnNldCwgdHJ1ZSk7IC8vIHJlc2Vy
dmVkCisgICAgICAgIHZpZXctPnJlYWQ8dWludDhfdD4ob2Zmc2V0LCB0cnVlKTsgLy8gc2l6ZSBp
biBieXRlcworICAgIH0KKyAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAJKHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2
ICs0Myw4IEBAIFN0YXRlOjpTdGF0ZShHcmFwaCYgZ3JhcGgpCiAgICAgLCBtb2R1bGUoMCkKICAg
ICAsIGZ1bmN0aW9uKDApCiAgICAgLCBnZW5lcmF0ZWRGdW5jdGlvbigwKQorICAgICwgY29tcGFj
dFVud2luZCgwKQorICAgICwgY29tcGFjdFVud2luZFNpemUoMCkKIHsKICAgICBzd2l0Y2ggKGdy
YXBoLm1fcGxhbi5tb2RlKSB7CiAgICAgY2FzZSBGVExNb2RlOiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAK
ICNpbmNsdWRlICJGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCIKICNpbmNsdWRlICJGVExKSVRD
b2RlLmgiCiAjaW5jbHVkZSAiRlRMSklURmluYWxpemVyLmgiCisjaW5jbHVkZSAiRlRMSlNDYWxs
LmgiCiAjaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CiAKQEAgLTYwLDggKzYxLDExIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBjYXB0dXJlZFN0
YWNrbWFwSUQ7CiAgICAgU2VnbWVudGVkVmVjdG9yPEdldEJ5SWREZXNjcmlwdG9yPiBnZXRCeUlk
czsKICAgICBTZWdtZW50ZWRWZWN0b3I8UHV0QnlJZERlc2NyaXB0b3I+IHB1dEJ5SWRzOworICAg
IFZlY3RvcjxKU0NhbGw+IGpzQ2FsbHM7CiAgICAgVmVjdG9yPENTdHJpbmc+IGNvZGVTZWN0aW9u
TmFtZXM7CiAgICAgVmVjdG9yPENTdHJpbmc+IGRhdGFTZWN0aW9uTmFtZXM7CisgICAgdm9pZCog
Y29tcGFjdFVud2luZDsKKyAgICBzaXplX3QgY29tcGFjdFVud2luZFNpemU7CiAgICAgUmVmQ291
bnRlZEFycmF5PExTZWN0aW9uV29yZD4gc3RhY2ttYXBzU2VjdGlvbjsKICAgICAKICAgICB2b2lk
IGR1bXBTdGF0ZShjb25zdCBjaGFyKiB3aGVuKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMVW53aW5kSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExVbndpbmRJbmZvLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMVW53aW5kSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTFVud2luZEluZm8uaCIKKworI2lmIEVOQUJM
RShGVExfSklUKQorCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisjaW5jbHVkZSA8bWFjaC1v
L2NvbXBhY3RfdW53aW5kX2VuY29kaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKKworVW53aW5kSW5mbzo6VW53aW5kSW5mbygpIHsgfQorVW53aW5kSW5mbzo6flVud2lu
ZEluZm8oKSB7IH0KKworbmFtZXNwYWNlIHsKKworc3RydWN0IENvbXBhY3RVbndpbmQgeworICAg
IHZvaWQqIGZ1bmN0aW9uOworICAgIHVpbnQzMl90IHNpemU7CisgICAgY29tcGFjdF91bndpbmRf
ZW5jb2RpbmdfdCBlbmNvZGluZzsKKyAgICB2b2lkKiBwZXJzb25hbGl0eTsKKyAgICB2b2lkKiBs
c2RhOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgVW53aW5kSW5mbzo6
cGFyc2Uodm9pZCogc2VjdGlvbiwgc2l6ZV90IHNpemUpCit7CisgICAgbV9yZWdpc3RlcnMuY2xl
YXIoKTsKKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChzZWN0aW9uKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChzaXplID49IHNpemVvZihDb21wYWN0VW53aW5kKSk7CisgICAgCisgICAgQ29tcGFjdFVu
d2luZCogZGF0YSA9IGJpdHdpc2VfY2FzdDxDb21wYWN0VW53aW5kKj4oc2VjdGlvbik7CisgICAg
CisgICAgUkVMRUFTRV9BU1NFUlQoIWRhdGEtPnBlcnNvbmFsaXR5KTsgLy8gV2UgZG9uJ3Qga25v
dyBob3cgdG8gaGFuZGxlIHRoaXMuCisgICAgUkVMRUFTRV9BU1NFUlQoIWRhdGEtPmxzZGEpOyAv
LyBXZSBkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgdGhpcy4KKyAgICBSRUxFQVNFX0FTU0VSVChz
aXplID09IHNpemVvZihDb21wYWN0VW53aW5kKSB8fCAhZGF0YVsxXS5mdW5jdGlvbik7IC8vIFRo
ZXJlIHdpbGwgb25seSBiZSBvbmUgZnVuY3Rpb24uCisgICAgCisgICAgY29tcGFjdF91bndpbmRf
ZW5jb2RpbmdfdCBlbmNvZGluZyA9IGRhdGEtPmVuY29kaW5nOworICAgIFJFTEVBU0VfQVNTRVJU
KCEoZW5jb2RpbmcgJiBVTldJTkRfSVNfTk9UX0ZVTkNUSU9OX1NUQVJUKSk7CisgICAgUkVMRUFT
RV9BU1NFUlQoIShlbmNvZGluZyAmIFVOV0lORF9IQVNfTFNEQSkpOworICAgIFJFTEVBU0VfQVNT
RVJUKCEoZW5jb2RpbmcgJiBVTldJTkRfUEVSU09OQUxJVFlfTUFTSykpOworICAgIFJFTEVBU0Vf
QVNTRVJUKChlbmNvZGluZyAmIFVOV0lORF9YODZfNjRfTU9ERV9NQVNLKSA9PSBVTldJTkRfWDg2
XzY0X01PREVfUkJQX0ZSQU1FKTsKKyAgICAKKyAgICBpbnQzMl90IG9mZnNldCA9IC0oKGVuY29k
aW5nICYgVU5XSU5EX1g4Nl82NF9SQlBfRlJBTUVfT0ZGU0VUKSA+PiAxNikgKiA4OworICAgIHVp
bnQzMl90IG5leHRSZWdpc3RlcnMgPSBlbmNvZGluZzsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSA1
OyBpLS07KSB7CisgICAgICAgIHVpbnQzMl90IGN1cnJlbnRSZWdpc3RlciA9IG5leHRSZWdpc3Rl
cnMgJiA3OworICAgICAgICBuZXh0UmVnaXN0ZXJzID4+PSAzOworICAgICAgICAKKyAgICAgICAg
c3dpdGNoIChjdXJyZW50UmVnaXN0ZXIpIHsKKyAgICAgICAgY2FzZSBVTldJTkRfWDg2XzY0X1JF
R19OT05FOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBV
TldJTkRfWDg2XzY0X1JFR19SQlg6CisgICAgICAgICAgICBtX3JlZ2lzdGVycy5hcHBlbmQoUmVn
aXN0ZXJBdE9mZnNldChYODZSZWdpc3RlcnM6OmVieCwgb2Zmc2V0KSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVOV0lORF9YODZfNjRfUkVHX1IxMjoK
KyAgICAgICAgICAgIG1fcmVnaXN0ZXJzLmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KFg4NlJlZ2lz
dGVyczo6cjEyLCBvZmZzZXQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgVU5XSU5EX1g4Nl82NF9SRUdfUjEzOgorICAgICAgICAgICAgbV9yZWdpc3Rl
cnMuYXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoWDg2UmVnaXN0ZXJzOjpyMTMsIG9mZnNldCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBVTldJTkRfWDg2
XzY0X1JFR19SMTQ6CisgICAgICAgICAgICBtX3JlZ2lzdGVycy5hcHBlbmQoUmVnaXN0ZXJBdE9m
ZnNldChYODZSZWdpc3RlcnM6OnIxNCwgb2Zmc2V0KSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIFVOV0lORF9YODZfNjRfUkVHX1IxNToKKyAgICAgICAg
ICAgIG1fcmVnaXN0ZXJzLmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KFg4NlJlZ2lzdGVyczo6cjE1
LCBvZmZzZXQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgVU5XSU5EX1g4Nl82NF9SRUdfUkJQOgorICAgICAgICAgICAgbV9yZWdpc3RlcnMuYXBwZW5k
KFJlZ2lzdGVyQXRPZmZzZXQoWDg2UmVnaXN0ZXJzOjplYnAsIG9mZnNldCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IG9mZnNldCArPSA4OworICAgIH0KKyAgICAKKyAgICBzdGQ6OnNvcnQobV9yZWdpc3RlcnMuYmVn
aW4oKSwgbV9yZWdpc3RlcnMuZW5kKCkpOworfQorCit2b2lkIFVud2luZEluZm86OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobGlzdER1bXAobV9yZWdpc3Rl
cnMpKTsKK30KKworUmVnaXN0ZXJBdE9mZnNldCogVW53aW5kSW5mbzo6ZmluZChHUFJSZWcgZ3By
KSBjb25zdAoreworICAgIHJldHVybiB0cnlCaW5hcnlTZWFyY2g8UmVnaXN0ZXJBdE9mZnNldCwg
R1BSUmVnPihtX3JlZ2lzdGVycywgbV9yZWdpc3RlcnMuc2l6ZSgpLCBncHIsIFJlZ2lzdGVyQXRP
ZmZzZXQ6OmdldEdQUik7Cit9CisKK2ludCBVbndpbmRJbmZvOjppbmRleE9mKEdQUlJlZyBncHIp
IGNvbnN0Cit7CisgICAgaWYgKFJlZ2lzdGVyQXRPZmZzZXQqIHBvaW50ZXIgPSBmaW5kKGdwcikp
CisgICAgICAgIHJldHVybiBwb2ludGVyIC0gbV9yZWdpc3RlcnMuYmVnaW4oKTsKKyAgICByZXR1
cm4gVUlOVF9NQVg7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8v
IEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFVu
d2luZEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFVu
d2luZEluZm8uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
VW53aW5kSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExVbndpbmRJbmZv
X2gKKyNkZWZpbmUgRlRMVW53aW5kSW5mb19oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2lu
Y2x1ZGUgIkZUTFJlZ2lzdGVyQXRPZmZzZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgeworCitzdHJ1Y3QgVW53aW5kSW5mbyB7CisgICAgVW53aW5kSW5mbygpOworICAgIH5V
bndpbmRJbmZvKCk7CisgICAgCisgICAgdm9pZCBwYXJzZSh2b2lkKiwgc2l6ZV90KTsKKyAgICAK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICBSZWdpc3RlckF0
T2Zmc2V0KiBmaW5kKEdQUlJlZyBncHIpIGNvbnN0OworICAgIHVuc2lnbmVkIGluZGV4T2YoR1BS
UmVnIGdwcikgY29uc3Q7IC8vIFJldHVybiBVSU5UX01BWCBpZiBub3QgZm91bmQuCisgICAgCisg
ICAgVmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+IG1fcmVnaXN0ZXJzOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAv
LyBGVExVbndpbmRJbmZvX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2
aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MDQsOCArNzA0LDcgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2
YXRlQ29tcGlsZShKSQogICAgIAogICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChDb2RlQmxv
Y2s6OkxhdGVTaHJpbmspOwogICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBh
ZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIEpJVENvZGU6OkJhc2VsaW5lSklUKSks
Ci0gICAgICAgIHdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJ
VENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUQ29kZTo6QmFzZWxpbmVKSVQpKSk7CiAg
ICAgCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFKQogICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVk
IGNvZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRh
YmxlTWVtb3J5KCktPnN0YXJ0KCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpKTsK
QEAgLTcxNCw0MiArNzEzLDYgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGls
ZShKSQogICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9CiAKLXZvaWQgSklUOjps
aW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sqIGNh
bGxlckNvZGVCbG9jaywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpJVDo6Q29kZVB0ciBj
b2RlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgVk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCi17Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNv
ZGVCbG9jayk7Ci0KLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5rZWQoKSk7Ci0gICAg
Y2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0KCp2bSwgY2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4s
IGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7Ci0gICAgY2FsbExp
bmtJbmZvLT5sYXN0U2VlbkNhbGxlZS5zZXQoKnZtLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBjYWxsZWUpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5m
by0+aG90UGF0aE90aGVyLCBjb2RlKTsKLQotICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCi0gICAg
ICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChleGVjLCBjYWxsTGlua0luZm8p
OwotCi0gICAgLy8gUGF0Y2ggdGhlIHNsb3cgcGF0Y2ggc28gd2UgZG8gbm90IGNvbnRpbnVlIHRv
IHRyeSB0byBsaW5rLgotICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgIEFT
U0VSVChjYWxsTGlua0luZm8tPmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbAotICAgICAg
ICAgICAgICAgfHwgY2FsbExpbmtJbmZvLT5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGxW
YXJhcmdzKTsKLSAgICAgICAgaWYgKGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUgPT0gQ2FsbExpbmtJ
bmZvOjpDYWxsKSB7Ci0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0lu
Zm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1
bmtHZW5lcmF0b3IpLmNvZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgdm0tPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25z
dHJ1Y3QpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVy
bkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3Ip
LmNvZGUoKSk7Ci19Ci0KLXZvaWQgSklUOjpsaW5rU2xvd0NhbGwoQ29kZUJsb2NrKiBjYWxsZXJD
b2RlQmxvY2ssIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQotewotICAgIFJlcGF0Y2hCdWZm
ZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwotCi0gICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGNhbGxlckNvZGVCbG9jay0+
dm0oKS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwotfQot
CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCiB7CiAgICAgaWYg
KG1fZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkgJiYgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZy
YW1lUm9sbGJhY2suZW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNp
b24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjQxLDkgKzI0MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0
dXJuIGppdC5wcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwodm0sIGZ1bmMpOwogICAgICAgICB9
CiAKLSAgICAgICAgc3RhdGljIHZvaWQgbGlua0ZvcihFeGVjU3RhdGUqLCBKU0Z1bmN0aW9uKiBj
YWxsZWUsIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVC
bG9jaywgQ29kZVB0ciwgQ2FsbExpbmtJbmZvKiwgVk0qLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
KTsKLSAgICAgICAgc3RhdGljIHZvaWQgbGlua1Nsb3dDYWxsKENvZGVCbG9jayogY2FsbGVyQ29k
ZUJsb2NrLCBDYWxsTGlua0luZm8qKTsKLSAgICAgICAgCiAgICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7CiAKICAgICBwcml2YXRlOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24g
MTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTksNyArMjk5LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
U2xvd0Nhc2UoT3Bjb2RlSUQKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwogCi0gICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJ
RCA9PSBvcF9jb25zdHJ1Y3QgPyBtX3ZtLT5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dl
bmVyYXRvcikuY29kZSgpIDogbV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KS5jb2RlKCkpOworICAgIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciA9IGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3JGb3IoCisgICAgICAgIG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IENvZGVGb3JD
b25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCwKKyAgICAgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RS
ZXF1aXJlZCk7CisgICAgCisgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChtX3Zt
LT5nZXRDVElTdHViKGdlbmVyYXRvcikuY29kZSgpKTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayht
X2NvZGVCbG9jayk7CiAgICAgZW1pdFB1dENhbGxSZXN1bHQoaW5zdHJ1Y3Rpb24pOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAxNjA3OTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MjcsNyArMjI3LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQK
IAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoMTYpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwogCi0gICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBv
cF9jb25zdHJ1Y3QgPyBtX3ZtLT5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRv
cikuY29kZSgpIDogbV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2Rl
KCkpOworICAgIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciA9IGxpbmtUaHVua0dlbmVyYXRvckZv
cigKKyAgICAgICAgb3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gQ29kZUZvckNvbnN0cnVjdCA6
IENvZGVGb3JDYWxsLAorICAgICAgICBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsK
KyAgICAKKyAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5m
b0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0
dWIoZ2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtZnJhbWVS
ZWdpc3RlckNvdW50Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHJl
dmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkxMSW50VGh1bmtz
LmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyUHJlc2VydmF0
aW9uV3JhcHBlckdlbmVyYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTczLDUwICs3NCwzOCBAQCBGVEw6OkZvck9TUkVudHJ5SklUQ29k
ZSogSklUQ29kZTo6ZnRsRm9yCiAKIFBhc3NSZWZQdHI8SklUQ29kZT4gSklUQ29kZTo6aG9zdEZ1
bmN0aW9uKEpJVENvZGU6OkNvZGVSZWYgY29kZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IERpcmVjdEpJVENvZGUoY29kZSwgSG9zdENhbGxUaHVuaykpOworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgTmF0aXZlSklUQ29kZShjb2RlLCBIb3N0Q2FsbFRodW5rKSk7CiB9CiAKLURpcmVjdEpJ
VENvZGU6OkRpcmVjdEpJVENvZGUoSklUVHlwZSBqaXRUeXBlKQorSklUQ29kZVdpdGhDb2RlUmVm
OjpKSVRDb2RlV2l0aENvZGVSZWYoSklUVHlwZSBqaXRUeXBlKQogICAgIDogSklUQ29kZShqaXRU
eXBlKQogewogfQogCi1EaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2RlKGNvbnN0IEpJVENvZGU6
OkNvZGVSZWYgcmVmLCBKSVRUeXBlIGppdFR5cGUpCitKSVRDb2RlV2l0aENvZGVSZWY6OkpJVENv
ZGVXaXRoQ29kZVJlZihDb2RlUmVmIHJlZiwgSklUVHlwZSBqaXRUeXBlKQogICAgIDogSklUQ29k
ZShqaXRUeXBlKQogICAgICwgbV9yZWYocmVmKQogewogfQogCi1EaXJlY3RKSVRDb2RlOjp+RGly
ZWN0SklUQ29kZSgpCitKSVRDb2RlV2l0aENvZGVSZWY6On5KSVRDb2RlV2l0aENvZGVSZWYoKQog
ewogfQogCi12b2lkIERpcmVjdEpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmKGNvbnN0IEpJVENv
ZGU6OkNvZGVSZWYgcmVmKQotewotICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlZik7Ci0gICAgbV9y
ZWYgPSByZWY7Ci19Ci0KLUpJVENvZGU6OkNvZGVQdHIgRGlyZWN0SklUQ29kZTo6YWRkcmVzc0Zv
ckNhbGwoKQotewotICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKLSAgICByZXR1cm4gbV9yZWYu
Y29kZSgpOwotfQotCi12b2lkKiBEaXJlY3RKSVRDb2RlOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zm
c2V0KHNpemVfdCBvZmZzZXQpCit2b2lkKiBKSVRDb2RlV2l0aENvZGVSZWY6OmV4ZWN1dGFibGVB
ZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX3Jl
Zik7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fcmVmLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpKSArIG9mZnNldDsKIH0KIAotdm9pZCogRGlyZWN0SklUQ29kZTo6ZGF0
YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KQordm9pZCogSklUQ29kZVdpdGhDb2RlUmVm
OjpkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQobV9yZWYpOwogICAgIEFTU0VSVChvZmZzZXQgPD0gc2l6ZSgpKTsgLy8gdXNlIDw9IGluc3Rl
YWQgb2YgPCBiZWNhdXNlIGl0IGlzIHZhbGlkIHRvIGFzayBmb3IgYW4gYWRkcmVzcyBhdCB0aGUg
ZXhjbHVzaXZlIGVuZCBvZiB0aGUgY29kZS4KICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4obV9yZWYuY29kZSgpLmRhdGFMb2NhdGlvbigpKSArIG9mZnNldDsKIH0KIAotdW5zaWdu
ZWQgRGlyZWN0SklUQ29kZTo6b2Zmc2V0T2Yodm9pZCogcG9pbnRlckludG9Db2RlKQordW5zaWdu
ZWQgSklUQ29kZVdpdGhDb2RlUmVmOjpvZmZzZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUpCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOwogICAgIGludHB0cl90IHJlc3VsdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXJJbnRvQ29kZSkgLSByZWludGVycHJldF9jYXN0
PGludHB0cl90PihtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CkBAIC0xMjQsMTgg
KzExMywxMDcgQEAgdW5zaWduZWQgRGlyZWN0SklUQ29kZTo6b2Zmc2V0T2Yodm9pZCogcAogICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KTsKIH0KIAotc2l6ZV90IERpcmVj
dEpJVENvZGU6OnNpemUoKQorc2l6ZV90IEpJVENvZGVXaXRoQ29kZVJlZjo6c2l6ZSgpCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOwogICAgIHJldHVybiBtX3JlZi5zaXplKCk7CiB9CiAK
LWJvb2wgRGlyZWN0SklUQ29kZTo6Y29udGFpbnModm9pZCogYWRkcmVzcykKK2Jvb2wgSklUQ29k
ZVdpdGhDb2RlUmVmOjpjb250YWlucyh2b2lkKiBhZGRyZXNzKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKG1fcmVmKTsKICAgICByZXR1cm4gbV9yZWYuZXhlY3V0YWJsZU1lbW9yeSgpLT5jb250YWlu
cyhhZGRyZXNzKTsKIH0KIAorRGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZShKSVRUeXBlIGpp
dFR5cGUpCisgICAgOiBKSVRDb2RlV2l0aENvZGVSZWYoaml0VHlwZSkKK3sKK30KKworRGlyZWN0
SklUQ29kZTo6RGlyZWN0SklUQ29kZSgKKyAgICBKSVRDb2RlOjpDb2RlUmVmIHJlZiwgSklUQ29k
ZTo6Q29kZVB0ciB3aXRoQXJpdHlDaGVjaywgSklUVHlwZSBqaXRUeXBlKQorICAgIDogSklUQ29k
ZVdpdGhDb2RlUmVmKHJlZiwgaml0VHlwZSkKKyAgICAsIG1fd2l0aEFyaXR5Q2hlY2sod2l0aEFy
aXR5Q2hlY2spCit7Cit9CisKK0RpcmVjdEpJVENvZGU6On5EaXJlY3RKSVRDb2RlKCkKK3sKK30K
Kwordm9pZCBEaXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZihKSVRDb2RlOjpDb2RlUmVm
IHJlZiwgSklUQ29kZTo6Q29kZVB0ciB3aXRoQXJpdHlDaGVjaykKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVCghbV9yZWYpOworICAgIG1fcmVmID0gcmVmOworICAgIG1fd2l0aEFyaXR5Q2hlY2sgPSB3
aXRoQXJpdHlDaGVjazsKK30KKworRGlyZWN0SklUQ29kZTo6UmVnaXN0ZXJQcmVzZXJ2YXRpb25X
cmFwcGVycyogRGlyZWN0SklUQ29kZTo6ZW5zdXJlV3JhcHBlcnMoKQoreworICAgIGlmICghbV93
cmFwcGVycykKKyAgICAgICAgbV93cmFwcGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVnaXN0ZXJQ
cmVzZXJ2YXRpb25XcmFwcGVycz4oKTsKKyAgICByZXR1cm4gbV93cmFwcGVycy5nZXQoKTsKK30K
KworSklUQ29kZTo6Q29kZVB0ciBEaXJlY3RKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbCgKKyAgICBW
TSYgdm0sIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlLCBBcml0eUNoZWNrTW9kZSBhcml0eSwK
KyAgICBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQoreworICAgIHN3aXRjaCAo
YXJpdHkpIHsKKyAgICBjYXNlIEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDoKKyAgICAgICAgc3dpdGNo
IChyZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVp
cmVkOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOworICAgICAgICAgICAgcmV0
dXJuIG1fcmVmLmNvZGUoKTsKKyAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6IHsK
KyAgICAgICAgICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlcnMqIHdyYXBwZXJzID0gZW5z
dXJlV3JhcHBlcnMoKTsKKyAgICAgICAgICAgIGlmICghd3JhcHBlcnMtPndpdGhvdXRBcml0eUNo
ZWNrKQorICAgICAgICAgICAgICAgIHdyYXBwZXJzLT53aXRob3V0QXJpdHlDaGVjayA9IGdlbmVy
YXRlUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyKHZtLCBleGVjdXRhYmxlLCBtX3JlZi5jb2Rl
KCkpOworICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXJzLT53aXRob3V0QXJpdHlDaGVjay5jb2Rl
KCk7CisgICAgICAgIH0gfQorICAgIGNhc2UgTXVzdENoZWNrQXJpdHk6CisgICAgICAgIHN3aXRj
aCAocmVnaXN0ZXJzKSB7CisgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1
aXJlZDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fd2l0aEFyaXR5Q2hlY2spOworICAg
ICAgICAgICAgcmV0dXJuIG1fd2l0aEFyaXR5Q2hlY2s7CisgICAgICAgIGNhc2UgTXVzdFByZXNl
cnZlUmVnaXN0ZXJzOiB7CisgICAgICAgICAgICBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJz
KiB3cmFwcGVycyA9IGVuc3VyZVdyYXBwZXJzKCk7CisgICAgICAgICAgICBpZiAoIXdyYXBwZXJz
LT53aXRoQXJpdHlDaGVjaykKKyAgICAgICAgICAgICAgICB3cmFwcGVycy0+d2l0aEFyaXR5Q2hl
Y2sgPSBnZW5lcmF0ZVJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlcih2bSwgZXhlY3V0YWJsZSwg
bV93aXRoQXJpdHlDaGVjayk7CisgICAgICAgICAgICByZXR1cm4gd3JhcHBlcnMtPndpdGhBcml0
eUNoZWNrLmNvZGUoKTsKKyAgICAgICAgfSB9CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIENvZGVQdHIoKTsKK30KKworTmF0aXZlSklUQ29kZTo6
TmF0aXZlSklUQ29kZShKSVRUeXBlIGppdFR5cGUpCisgICAgOiBKSVRDb2RlV2l0aENvZGVSZWYo
aml0VHlwZSkKK3sKK30KKworTmF0aXZlSklUQ29kZTo6TmF0aXZlSklUQ29kZShDb2RlUmVmIHJl
ZiwgSklUVHlwZSBqaXRUeXBlKQorICAgIDogSklUQ29kZVdpdGhDb2RlUmVmKHJlZiwgaml0VHlw
ZSkKK3sKK30KKworTmF0aXZlSklUQ29kZTo6fk5hdGl2ZUpJVENvZGUoKQoreworfQorCit2b2lk
IE5hdGl2ZUpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmKENvZGVSZWYgcmVmKQoreworICAgIEFT
U0VSVCghbV9yZWYpOworICAgIG1fcmVmID0gcmVmOworfQorCitKSVRDb2RlOjpDb2RlUHRyIE5h
dGl2ZUpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKAorICAgIFZNJiwgRXhlY3V0YWJsZUJhc2UqLCBB
cml0eUNoZWNrTW9kZSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKCEhbV9yZWYpOworICAgIHJldHVybiBtX3JlZi5jb2RlKCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5oCShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDE0IEBACiAjaWZuZGVmIEpJ
VENvZGVfaAogI2RlZmluZSBKSVRDb2RlX2gKIAotI2lmIEVOQUJMRShKSVQpIHx8IEVOQUJMRShM
TElOVCkKKyNpbmNsdWRlICJBcml0eUNoZWNrTW9kZS5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5o
IgogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkpJVFN0dWJzLmgiCiAjaW5j
bHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkxlZ2FjeVByb2ZpbGVyLmgiCiAjaW5jbHVk
ZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCi0jZW5kaWYKKyNpbmNsdWRlICJSZWdpc3RlclBy
ZXNlcnZhdGlvbk1vZGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTE2NCw3ICsxNjQsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBqaXRDb2RlLT5qaXRUeXBlKCk7CiAgICAgfQogICAg
IAotICAgIHZpcnR1YWwgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbCgpID0gMDsKKyAgICB2aXJ0dWFs
IENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoVk0mLCBFeGVjdXRhYmxlQmFzZSosIEFyaXR5Q2hlY2tN
b2RlLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQqIGV4
ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgPSAwOwogICAgIHZvaWQqIGV4
ZWN1dGFibGVBZGRyZXNzKCkgeyByZXR1cm4gZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldCgwKTsg
fQogICAgIHZpcnR1YWwgdm9pZCogZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSA9
IDA7CkBAIC0xODksMjUgKzE4OSw1OCBAQCBwcml2YXRlOgogICAgIEpJVFR5cGUgbV9qaXRUeXBl
OwogfTsKIAotY2xhc3MgRGlyZWN0SklUQ29kZSA6IHB1YmxpYyBKSVRDb2RlIHsKK2NsYXNzIEpJ
VENvZGVXaXRoQ29kZVJlZiA6IHB1YmxpYyBKSVRDb2RlIHsKK3Byb3RlY3RlZDoKKyAgICBKSVRD
b2RlV2l0aENvZGVSZWYoSklUVHlwZSk7CisgICAgSklUQ29kZVdpdGhDb2RlUmVmKENvZGVSZWYs
IEpJVFR5cGUpOworCiBwdWJsaWM6Ci0gICAgRGlyZWN0SklUQ29kZShKSVRUeXBlKTsKLSAgICBE
aXJlY3RKSVRDb2RlKGNvbnN0IENvZGVSZWYsIEpJVFR5cGUpOwotICAgIHZpcnR1YWwgfkRpcmVj
dEpJVENvZGUoKTsKLSAgICAKLSAgICB2b2lkIGluaXRpYWxpemVDb2RlUmVmKENvZGVSZWYgcmVm
KTsKKyAgICB2aXJ0dWFsIH5KSVRDb2RlV2l0aENvZGVSZWYoKTsKIAotICAgIHZpcnR1YWwgQ29k
ZVB0ciBhZGRyZXNzRm9yQ2FsbCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCogZXhlY3V0
YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KSBPVkVSUklERTsKICAgICB2aXJ0dWFs
IHZvaWQqIGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCB1bnNpZ25lZCBvZmZzZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUpIE9WRVJSSURF
OwogICAgIHZpcnR1YWwgc2l6ZV90IHNpemUoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wg
Y29udGFpbnModm9pZCopIE9WRVJSSURFOwogCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIENv
ZGVSZWYgbV9yZWY7CiB9OwogCitjbGFzcyBEaXJlY3RKSVRDb2RlIDogcHVibGljIEpJVENvZGVX
aXRoQ29kZVJlZiB7CitwdWJsaWM6CisgICAgRGlyZWN0SklUQ29kZShKSVRUeXBlKTsKKyAgICBE
aXJlY3RKSVRDb2RlKENvZGVSZWYsIENvZGVQdHIgd2l0aEFyaXR5Q2hlY2ssIEpJVFR5cGUpOwor
ICAgIHZpcnR1YWwgfkRpcmVjdEpJVENvZGUoKTsKKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemVD
b2RlUmVmKENvZGVSZWYgcmVmLCBDb2RlUHRyIHdpdGhBcml0eUNoZWNrKTsKKworICAgIHZpcnR1
YWwgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbChWTSYsIEV4ZWN1dGFibGVCYXNlKiwgQXJpdHlDaGVj
a01vZGUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSkgT1ZFUlJJREU7CisKK3ByaXZhdGU6Cisg
ICAgc3RydWN0IFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlcnMgeworICAgICAgICBDb2RlUmVm
IHdpdGhvdXRBcml0eUNoZWNrOworICAgICAgICBDb2RlUmVmIHdpdGhBcml0eUNoZWNrOworICAg
IH07CisKKyAgICBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJzKiBlbnN1cmVXcmFwcGVycygp
OworICAgIAorICAgIENvZGVQdHIgbV93aXRoQXJpdHlDaGVjazsKKyAgICAKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVycz4gbV93cmFwcGVyczsKK307CisK
K2NsYXNzIE5hdGl2ZUpJVENvZGUgOiBwdWJsaWMgSklUQ29kZVdpdGhDb2RlUmVmIHsKK3B1Ymxp
YzoKKyAgICBOYXRpdmVKSVRDb2RlKEpJVFR5cGUpOworICAgIE5hdGl2ZUpJVENvZGUoQ29kZVJl
ZiwgSklUVHlwZSk7CisgICAgdmlydHVhbCB+TmF0aXZlSklUQ29kZSgpOworICAgIAorICAgIHZv
aWQgaW5pdGlhbGl6ZUNvZGVSZWYoQ29kZVJlZiByZWYpOworCisgICAgdmlydHVhbCBDb2RlUHRy
IGFkZHJlc3NGb3JDYWxsKFZNJiwgRXhlY3V0YWJsZUJhc2UqLCBBcml0eUNoZWNrTW9kZSwgUmVn
aXN0ZXJQcmVzZXJ2YXRpb25Nb2RlKSBPVkVSUklERTsKK307CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg1LDcgKzY4NSw4
IEBAIHN0YXRpYyB2b2lkKiBoYW5kbGVIb3N0Q2FsbChFeGVjU3RhdGUqIGUKICAgICByZXR1cm4g
dm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIH0KIAotaW5saW5lIGNoYXIqIGxpbmtGb3IoRXhl
Y1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitpbmxpbmUg
Y2hhciogbGlua0ZvcigKKyAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwpAQCAtNzAzLDkgKzcwNCw5IEBAIGlubGluZSBjaGFyKiBsaW5rRm9y
KEV4ZWNTdGF0ZSogZXhlY0NhbGwKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cjsK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7CiAgICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0Q2FsbExpbmtJbmZvKGV4ZWNDYWxsZWUtPnJl
dHVyblBDKCkpOwotICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQotICAgICAg
ICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVz
c0ZvckNhbGwoKTsKLSAgICBlbHNlIHsKKyAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rp
b24oKSkgeworICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigqdm0s
IGtpbmQsIE11c3RDaGVja0FyaXR5LCByZWdpc3RlcnMpOworICAgIH0gZWxzZSB7CiAgICAgICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBjYWxs
ZWUtPnNjb3BlKCksIGtpbmQpOwogICAgICAgICBpZiAoZXJyb3IpIHsKQEAgLTcxMywyOSArNzE0
LDQzIEBAIGlubGluZSBjaGFyKiBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGwKICAgICAgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4
Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpKTsKICAgICAgICAgfQogICAgICAgICBjb2RlQmxvY2sgPSBmdW5jdGlvbkV4ZWN1dGFibGUt
PmNvZGVCbG9ja0ZvcihraW5kKTsKKyAgICAgICAgQXJpdHlDaGVja01vZGUgYXJpdHk7CiAgICAg
ICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGlj
X2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZv
LmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3MpCi0gICAgICAgICAgICBjb2Rl
UHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlV2l0aEFyaXR5Q2hlY2tG
b3Ioa2luZCk7CisgICAgICAgICAgICBhcml0eSA9IE11c3RDaGVja0FyaXR5OwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRK
SVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOworICAgICAgICAgICAgYXJpdHkgPSBB
cml0eUNoZWNrTm90UmVxdWlyZWQ7CisgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFi
bGUtPmVudHJ5cG9pbnRGb3IoKnZtLCBraW5kLCBhcml0eSwgcmVnaXN0ZXJzKTsKICAgICB9CiAg
ICAgaWYgKCFjYWxsTGlua0luZm8uc2Vlbk9uY2UoKSkKICAgICAgICAgY2FsbExpbmtJbmZvLnNl
dFNlZW4oKTsKICAgICBlbHNlCi0gICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgY2FsbExpbmtJ
bmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwga2luZCk7CisgICAgICAgIGxpbmtGb3Io
ZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwga2lu
ZCwgcmVnaXN0ZXJzKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZVB0
ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKIH0KIAogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25MaW5rQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCiB7Ci0gICAgcmV0dXJuIGxpbmtGb3Io
ZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwpOworICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUs
IENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKIH0KIAogY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlY0Nh
bGxlZSkKIHsKLSAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0
KTsKKyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0LCBSZWdp
c3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKK30KKworY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25MaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkK
K3sKKyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwgTXVzdFByZXNl
cnZlUmVnaXN0ZXJzKTsKIH0KIAotaW5saW5lIGNoYXIqIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24o
RXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTQ2Vs
bComIGNhbGxlZUFzRnVuY3Rpb25DZWxsKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25M
aW5rQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQorewor
ICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QsIE11c3RQcmVz
ZXJ2ZVJlZ2lzdGVycyk7Cit9CisKK2lubGluZSBjaGFyKiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9u
KAorICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
LCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzLAorICAgIEpTQ2VsbComIGNhbGxl
ZUFzRnVuY3Rpb25DZWxsKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNh
bGxlckZyYW1lKCk7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkBAIC03NTcsMTYgKzc3Miwy
MCBAQCBpbmxpbmUgY2hhciogdmlydHVhbEZvcldpdGhGdW5jdGlvbihFeGVjCiAgICAgICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKS5leGVj
dXRhYmxlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZXhl
Y3V0YWJsZS0+ZW50cnlwb2ludEZvcigKKyAgICAgICAgKnZtLCBraW5kLCBNdXN0Q2hlY2tBcml0
eSwgcmVnaXN0ZXJzKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKIH0KIAotaW5saW5lIGNoYXIqIHZp
cnR1YWxGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCitpbmxpbmUgY2hhciogdmlydHVhbEZvcigKKyAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJl
Z2lzdGVycykKIHsKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZDsKLSAg
ICByZXR1cm4gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVlLCBraW5kLCBjYWxsZWVB
c0Z1bmN0aW9uQ2VsbElnbm9yZWQpOworICAgIHJldHVybiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9u
KGV4ZWNDYWxsZWUsIGtpbmQsIHJlZ2lzdGVycywgY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVk
KTsKIH0KIAotc3RhdGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChFeGVjU3Rh
dGUqIGV4ZWNDYWxsZWUsIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwsIENhbGxMaW5rSW5m
byYgY2FsbExpbmtJbmZvKQorc3RhdGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2Fs
bCgKKyAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSBy
ZWdpc3RlcnMsIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwsCisgICAgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8pCiB7CiAgICAgaWYgKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNzgwLDcgKzc5OSwxMCBAQCBzdGF0aWMgYm9vbCBhdHRlbXB0
VG9PcHRpbWl6ZUNsb3N1cmVDYWxsCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBB
U1NFUlQoY2FsbGVlLT5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOwotICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0gY2FsbGVlLT5leGVjdXRhYmxlKCktPmdlbmVy
YXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJlc3NGb3JDYWxsKCk7CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGNvZGVQdHIgPQorICAgICAgICBjYWxsZWUtPmV4ZWN1dGFibGUoKS0+Z2VuZXJh
dGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoCisgICAgICAgICAgICAqZXhlY0Nh
bGxlZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPnZtKCksIGNhbGxlZS0+ZXhlY3V0YWJs
ZSgpLAorICAgICAgICAgICAgQXJpdHlDaGVja05vdFJlcXVpcmVkLCByZWdpc3RlcnMpOwogICAg
IAogICAgIENvZGVCbG9jayogY29kZUJsb2NrOwogICAgIGlmIChjYWxsZWUtPmV4ZWN1dGFibGUo
KS0+aXNIb3N0RnVuY3Rpb24oKSkKQEAgLTc5Myw3ICs4MTUsNyBAQCBzdGF0aWMgYm9vbCBhdHRl
bXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsCiAgICAgCiAgICAgbGlua0Nsb3N1cmVDYWxsKAogICAg
ICAgICBleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIGNvZGVCbG9jaywKLSAgICAgICAgY2FsbGVl
LT5zdHJ1Y3R1cmUoKSwgY2FsbGVlLT5leGVjdXRhYmxlKCksIGNvZGVQdHIpOworICAgICAgICBj
YWxsZWUtPnN0cnVjdHVyZSgpLCBjYWxsZWUtPmV4ZWN1dGFibGUoKSwgY29kZVB0ciwgcmVnaXN0
ZXJzKTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTgwMSwyNSArODIzLDQ2IEBAIHN0
YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwKIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKIHsKICAg
ICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsOwotICAgIGNoYXIqIHJlc3VsdCA9IHZpcnR1
YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIGNhbGxlZUFzRnVuY3Rp
b25DZWxsKTsKKyAgICBjaGFyKiByZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWND
YWxsZWUsIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkLCBjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCk7CiAgICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBleGVj
Q2FsbGVlLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKS0+Z2V0Q2FsbExpbmtJbmZvKGV4ZWND
YWxsZWUtPnJldHVyblBDKCkpOwogCi0gICAgaWYgKCFhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVD
YWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBjYWxsTGlua0luZm8pKQotICAg
ICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsKTsK
KyAgICBpZiAoIWF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoZXhlY0NhbGxlZSwgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwsIGNhbGxMaW5r
SW5mbykpCisgICAgICAgIGxpbmtTbG93Rm9yKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgQ29k
ZUZvckNhbGwsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwogICAgIAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENh
bGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQogeyAgICAKLSAgICByZXR1cm4gdmlydHVhbEZvcihl
eGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCk7CisgICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxl
ZSwgQ29kZUZvckNhbGwsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwogfQogCiBj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QoRXhlY1N0YXRlKiBl
eGVjQ2FsbGVlKQogewotICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JD
b25zdHJ1Y3QpOworICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25z
dHJ1Y3QsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwogfQogCitjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNT
dGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsOwor
ICAgIGNoYXIqIHJlc3VsdCA9IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgQ29k
ZUZvckNhbGwsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycywgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwor
ICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUo
KS0+Y29kZUJsb2NrKCktPmdldENhbGxMaW5rSW5mbyhleGVjQ2FsbGVlLT5yZXR1cm5QQygpKTsK
KworICAgIGlmICghYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChleGVjQ2FsbGVlLCBNdXN0
UHJlc2VydmVSZWdpc3RlcnMsIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBjYWxsTGlua0luZm8pKQor
ICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxs
LCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGxUaGF0UHJlc2VydmVzUmVn
cyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7ICAgIAorICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4
ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOworfQorCitjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVn
cyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7CisgICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0Nh
bGxlZSwgQ29kZUZvckNvbnN0cnVjdCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKK30KIAogc2l6
ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9u
IDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTMsMTEgKzIxMywxNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxH
ZW5lcmljKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbEdlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25DYWxsRXZhbChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7Ci1jaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRF
Uk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRlKikg
V1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNh
bGwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwog
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KEV4ZWNTdGF0ZSopIFdU
Rl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGxUaGF0UHJl
c2VydmVzUmVncyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSopIFdU
Rl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGxUaGF0
UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUq
KSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1
Y3RUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CisKIHNpemVfdCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogc2l6ZV90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ29tcGFyZUxlc3NFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNv
bXBhcmVHcmVhdGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkg
V1RGX0lOVEVSTkFMOwpAQCAtMjc5LDYgKzI4NSw2OCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0VG9TY29wZShFCiAKIH0gLy8gZXh0ZXJuICJDIgogCitpbmxpbmUgUF9KSVRPcGVy
YXRpb25fRSBvcGVyYXRpb25MaW5rRm9yKAorICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sKKyAgICBzd2l0Y2ggKGtp
bmQpIHsKKyAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykg
eworICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uTGlua0NhbGw7CisgICAgICAgIGNhc2UgTXVzdFByZXNlcnZl
UmVnaXN0ZXJzOgorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkxpbmtDYWxsVGhhdFByZXNl
cnZlc1JlZ3M7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2RlRm9yQ29u
c3RydWN0OgorICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAgICBjYXNlIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
TGlua0NvbnN0cnVjdDsKKyAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uTGlua0NvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitpbmxpbmUgUF9KSVRPcGVyYXRpb25fRSBv
cGVyYXRpb25WaXJ0dWFsRm9yKAorICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVn
aXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsK
KyAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAg
ICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uVmlydHVhbENhbGw7CisgICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVn
aXN0ZXJzOgorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblZpcnR1YWxDYWxsVGhhdFByZXNl
cnZlc1JlZ3M7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2RlRm9yQ29u
c3RydWN0OgorICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAgICBjYXNlIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
VmlydHVhbENvbnN0cnVjdDsKKyAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6Cisg
ICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNS
ZWdzOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitpbmxpbmUgUF9KSVRPcGVyYXRp
b25fRSBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxGb3IoUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2Rl
IHJlZ2lzdGVycykKK3sKKyAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgIGNhc2UgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkxpbmtD
bG9zdXJlQ2FsbDsKKyAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgcmV0
dXJuIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzOworICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclByZXNlcnZh
dGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWdpc3Rl
clByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNp
bmNsdWRlICJBc3NlbWJseUhlbHBlcnMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5j
bHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1JlZ2lzdGVyU2V0
IHJlZ2lzdGVyc1RvUHJlc2VydmUoKQoreworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzID0g
UmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAKKyAgICAvLyBObyBuZWVk
IHRvIHByZXNlcnZlIEZQIHNpbmNlIHRoYXQgYWx3YXlzIGdldHMgcHJlc2VydmVkIGFueXdheS4K
KyAgICBjYWxsZWVTYXZlcy5jbGVhcihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAg
CisgICAgcmV0dXJuIGNhbGxlZVNhdmVzOworfQorCitwdHJkaWZmX3QgcmVnaXN0ZXJQcmVzZXJ2
YXRpb25PZmZzZXQoKQoreworICAgIHVuc2lnbmVkIG51bWJlck9mQ2FsbGVlU2F2ZXMgPSByZWdp
c3RlcnNUb1ByZXNlcnZlKCkubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKTsKKyAgICAKKyAgICAvLyBO
ZWVkIHRvIHByZXNlcnZlIHRoZSBvbGQgcmV0dXJuIFBDLgorICAgIHVuc2lnbmVkIG51bWJlck9m
VmFsdWVzVG9TYXZlID0gbnVtYmVyT2ZDYWxsZWVTYXZlcyArIDE7CisgICAgCisgICAgLy8gQWxp
Z25tZW50LiBQcmVzZXJ2ZSB0aGUgc2FtZSBhbGlnbm1lbnQgaW52YXJpYW50cyB0aGF0IHRoZSBj
YWxsZXIgaW1wb3NlZC4KKyAgICB1bnNpZ25lZCBudW1iZXJPZk5ld1N0YWNrU2xvdHMgPQorICAg
ICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwg
bnVtYmVyT2ZWYWx1ZXNUb1NhdmUpOworICAgIAorICAgIHJldHVybiBzaXplb2YoUmVnaXN0ZXIp
ICogbnVtYmVyT2ZOZXdTdGFja1Nsb3RzOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2Vu
ZXJhdGVXcmFwcGVyKFZNJiB2bSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciB0YXJnZXQpCit7CisjaWYgRU5BQkxFKEZUTF9KSVQpCisgICAgLy8gV2Ug
c2hvdWxkbid0IGV2ZXIgYmUgZ2VuZXJhdGluZyB3cmFwcGVycyBmb3IgbmF0aXZlIGZ1bmN0aW9u
cy4KKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBzY3JpcHRFeGVjdXRhYmxlID0ganNDYXN0PFNjcmlw
dEV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKyAgICAKKyAgICBSZWdpc3RlclNldCB0b1NhdmUg
PSByZWdpc3RlcnNUb1ByZXNlcnZlKCk7CisgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ2lzdGVy
UHJlc2VydmF0aW9uT2Zmc2V0KCk7CisgICAgCisgICAgQXNzZW1ibHlIZWxwZXJzIGppdCgmdm0s
IDApOworICAgIAorICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5m
bzo6cmVnVDEpOworICAgIGppdC5sb2FkMzIoCisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6QWRk
cmVzcygKKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIs
CisgICAgICAgICAgICAoSlNTdGFjazo6QXJndW1lbnRDb3VudCAtIEpTU3RhY2s6OkNhbGxlckZy
YW1lQW5kUENTaXplKSAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSwKKyAgICAg
ICAgR1BSSW5mbzo6cmVnVDIpOworICAgIAorICAgIC8vIFBsYWNlIHRoZSBzdGFjayBwb2ludGVy
IHdoZXJlIHdlIHdhbnQgaXQgdG8gYmUuCisgICAgaml0LnN1YlB0cihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihvZmZzZXQpLCBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICAKKyAgICAvLyBDb21wdXRlIHRoZSBudW1iZXIgb2YgdGhpbmdzIHdlIHdpbGwg
YmUgY29weWluZy4KKyAgICBqaXQuYWRkMzIoCisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTMyKAorICAgICAgICAgICAgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIEpT
U3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDIpOwor
CisgICAgQVNTRVJUKCF0b1NhdmUuZ2V0KEdQUkluZm86OnJlZ1Q0KSk7CisgICAgaml0Lm1vdmUo
QXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDQpOwor
ICAgIAorICAgIEFzc2VtYmx5SGVscGVyczo6TGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAg
IGppdC5zdWIzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmVn
VDIpOworICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJl
Z1Q0LCBvZmZzZXQpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6
cmVnVDAsIEdQUkluZm86OnJlZ1Q0KTsKKyAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTMyKHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpyZWdUNCk7CisgICAgaml0
LmJyYW5jaFRlc3QzMihBc3NlbWJseUhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJlZ1QyKS5s
aW5rVG8obG9vcCwgJmppdCk7CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IHJlZ1Q0ICsgb2Zmc2V0
IHBvaW50cyB0byB3aGVyZSB3ZSBzYXZlIHRoaW5ncy4KKyAgICBwdHJkaWZmX3QgY3VycmVudE9m
ZnNldCA9IDA7CisgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QxLCBBc3NlbWJseUhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDQsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAKKyAgICBm
b3IgKEdQUlJlZyBncHIgPSBBc3NlbWJseUhlbHBlcnM6OmZpcnN0UmVnaXN0ZXIoKTsgZ3ByIDw9
IEFzc2VtYmx5SGVscGVyczo6bGFzdFJlZ2lzdGVyKCk7IGdwciA9IHN0YXRpY19jYXN0PEdQUlJl
Zz4oZ3ByICsgMSkpIHsKKyAgICAgICAgaWYgKCF0b1NhdmUuZ2V0KGdwcikpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgY3VycmVudE9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwor
ICAgICAgICBqaXQuc3RvcmU2NChncHIsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpyZWdUNCwgY3VycmVudE9mZnNldCkpOworICAgIH0KKyAgICAKKyAgICAvLyBBc3N1bWUgdGhh
dCB0aGVyZSBhcmVuJ3QgYW55IHNhdmVkIEZQIHJlZ2lzdGVycy4KKyAgICAKKyAgICAvLyBSZXN0
b3JlIHRoZSB0YWcgcmVnaXN0ZXJzLgorICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
OworICAgIGppdC5hZGQ2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihUYWdNYXNrIC0g
VGFnVHlwZU51bWJlciksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6
dGFnTWFza1JlZ2lzdGVyKTsKKworICAgIEFzc2VtYmx5SGVscGVyczo6Q2FsbCBjYWxsID0gaml0
Lm5lYXJDYWxsKCk7CisgICAgCisgICAgZ2VuZXJhdGVSZWdpc3RlclJlc3RvcmF0aW9uKGppdCk7
CisgICAgCisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCAmaml0LCBHTE9CQUxfVEhVTktf
SUQpOworICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQp
KTsKKyAgICAKKyAgICByZXR1cm4gRklOQUxJWkVfREZHX0NPREUobGlua0J1ZmZlciwgKCJSZWdp
c3RlciBwcmVzZXJ2YXRpb24gd3JhcHBlciBmb3IgJXMvJXMsICVwIiwgdG9DU3RyaW5nKHNjcmlw
dEV4ZWN1dGFibGUtPmhhc2hGb3IoQ29kZUZvckNhbGwpKS5kYXRhKCksIHRvQ1N0cmluZyhzY3Jp
cHRFeGVjdXRhYmxlLT5oYXNoRm9yKENvZGVGb3JDb25zdHJ1Y3QpKS5kYXRhKCksIHRhcmdldC5l
eGVjdXRhYmxlQWRkcmVzcygpKSk7CisjZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICAvLyBX
ZSBkb24ndCBzdXBwb3J0IG5vbi1GVEwgYnVpbGRzIGZvciB0d28gcmVhc29uczoKKyAgICAvLyAt
IEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IGN1cnJlbnRseSBvbmx5IHRoZSBGVEwgYm90dG9tcyBv
dXQgaW4gdGhpcyBjb2RlLgorICAgIC8vIC0gVGhlIGNvZGUgYWJvdmUgdXNlcyA2NC1iaXQgaW5z
dHJ1Y3Rpb25zLiBJdCBkb2Vzbid0IG5lY2Vzc2FyaWx5IGhhdmUgdG87IGl0IHdvdWxkIGJlCisg
ICAgLy8gICBlYXN5IHRvIGNoYW5nZSBpdCBzbyB0aGF0IGl0IGRvZXNuJ3QuIEJ1dCBvYnZpb3Vz
bHkgbWFraW5nIHRoYXQgY2hhbmdlIHdvdWxkIGJlIGEKKyAgICAvLyAgIHByZXJlcXVpc2l0ZSB0
byByZW1vdmluZyB0aGlzICNpZi4KKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKK30KKwordm9pZCBnZW5lcmF0ZVJlZ2lzdGVyUmVzdG9y
YXRpb24oQXNzZW1ibHlIZWxwZXJzJiBqaXQpCit7CisgICAgUmVnaXN0ZXJTZXQgdG9TYXZlID0g
cmVnaXN0ZXJzVG9QcmVzZXJ2ZSgpOworICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWdpc3RlclBy
ZXNlcnZhdGlvbk9mZnNldCgpOworICAgIAorICAgIC8vIFdlIG5lZWQgdG8gcGxhY2UgdGhlIHN0
YWNrIHBvaW50ZXIgYmFjayB0byB3aGVyZSB0aGUgY2FsbGVyIHRob3VnaHQgdGhleSBsZWZ0IGl0
LgorICAgIC8vIEJ1dCBhbHNvLCBpbiBvcmRlciB0byByZWNvdmVyIHRoZSByZWdpc3RlcnMsIHdl
IG5lZWQgdG8gZmlndXJlIG91dCBob3cgYmlnIHRoZQorICAgIC8vIGFyZ3VtZW50cyBhcmVhIGlz
LgorICAgIAorICAgIGppdC5sb2FkMzIoCisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6QWRkcmVz
cygKKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsCisg
ICAgICAgICAgICAoSlNTdGFjazo6QXJndW1lbnRDb3VudCAtIEpTU3RhY2s6OkNhbGxlckZyYW1l
QW5kUENTaXplKSAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSwKKyAgICAgICAg
R1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5sc2hpZnQzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW0zMigzKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIAorICAgIGppdC5hZGRQdHIoQXNzZW1i
bHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIob2Zmc2V0KSwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMik7CisgICAgCisgICAgLy8gV2Ugc2F2ZWQgdGhp
bmdzIGF0OgorICAgIC8vCisgICAgLy8gICAgIGFkalNQICsgKEpTU3RhY2s6OkNhbGxGcmFtZUhl
YWRlclNpemUgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSArIE51bUFyZ3MpICogOAor
ICAgIC8vCisgICAgLy8gV2hlcmU6CisgICAgLy8KKyAgICAvLyAgICAgYWRqU1AgPSBvcmlnU1Ag
LSBvZmZzZXQKKyAgICAvLworICAgIC8vIHJlZ1QyIG5vdyBwb2ludHMgYXQ6CisgICAgLy8KKyAg
ICAvLyAgICAgb3JpZ1NQICsgTnVtQXJncyAqIDgKKyAgICAvLyAgID0gYWRqU1AgKyBvZmZzZXQg
KyBOdW1BcmdzICogOAorICAgIC8vIAorICAgIC8vIFNvIGlmIHdlIHN1YnRyYWN0IG9mZnNldCBh
bmQgdGhlbiBhZGQgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSBhbmQgc3VidHJhY3QKKyAg
ICAvLyBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgd2UnbGwgZ2V0IHRoZSB0aGluZyB3
ZSB3YW50LgorICAgIHB0cmRpZmZfdCBjdXJyZW50T2Zmc2V0ID0gLW9mZnNldCArIHNpemVvZihS
ZWdpc3RlcikgKiAoCisgICAgICAgIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBKU1N0
YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSk7CisgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBjdXJyZW50T2Zmc2V0KSwgR1BSSW5mbzo6cmVn
VDEpOworICAgIAorICAgIGZvciAoR1BSUmVnIGdwciA9IEFzc2VtYmx5SGVscGVyczo6Zmlyc3RS
ZWdpc3RlcigpOyBncHIgPD0gQXNzZW1ibHlIZWxwZXJzOjpsYXN0UmVnaXN0ZXIoKTsgZ3ByID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihncHIgKyAxKSkgeworICAgICAgICBpZiAoIXRvU2F2ZS5nZXQo
Z3ByKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IHNp
emVvZihSZWdpc3Rlcik7CisgICAgICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QyLCBjdXJyZW50T2Zmc2V0KSwgZ3ByKTsKKyAgICB9CisgICAgCisg
ICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDEpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
cmVnaXN0ZXJSZXN0b3JhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAgICBBc3NlbWJs
eUhlbHBlcnMgaml0KHZtLCAwKTsKKyAgICBnZW5lcmF0ZVJlZ2lzdGVyUmVzdG9yYXRpb24oaml0
KTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7
CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJSZWdpc3RlciByZXN0b3Jh
dGlvbiB0aHVuayIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFC
TEUoSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyUHJlc2Vy
dmF0aW9uV3JhcHBlckdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyUHJlc2VydmF0aW9uV3Jh
cHBlckdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBSZWdpc3RlclBy
ZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3JfaAorI2RlZmluZSBSZWdpc3RlclByZXNlcnZhdGlv
bldyYXBwZXJHZW5lcmF0b3JfaAorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkFzc2Vt
Ymx5SGVscGVycy5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1
ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitSZWdpc3RlclNldCByZWdpc3RlcnNUb1By
ZXNlcnZlKCk7CisKK3B0cmRpZmZfdCByZWdpc3RlclByZXNlcnZhdGlvbk9mZnNldCgpOworCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJhdGVSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXIo
Vk0mLCBFeGVjdXRhYmxlQmFzZSosIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpOworCit2
b2lkIGdlbmVyYXRlUmVnaXN0ZXJSZXN0b3JhdGlvbihBc3NlbWJseUhlbHBlcnMmKTsKKworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHJlZ2lzdGVyUmVzdG9yYXRpb25UaHVua0dlbmVyYXRvcihWTSop
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRp
ZiAvLyBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3JfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzAs
MTcgKzEyNzAsMTkgQEAgdm9pZCByZXBhdGNoSW4oCiAgICAgcmVwYXRjaENhbGwoZXhlYy0+Y29k
ZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uSW4pOwogfQog
Ci1zdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBW
TSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpCi17Ci0gICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENU
SVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0
Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CitzdGF0aWMg
dm9pZCBsaW5rU2xvd0ZvcigKKyAgICBSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBWTSog
dm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLAorICAgIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sKKyAgICByZXBh
dGNoQnVmZmVyLnJlbGluaygKKyAgICAgICAgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biwKKyAgICAgICAgdm0tPmdldENUSVN0dWIodmlydHVhbFRodW5rR2VuZXJhdG9yRm9yKGtpbmQs
IHJlZ2lzdGVycykpLmNvZGUoKSk7CiB9CiAKLXZvaWQgbGlua0ZvcihFeGVjU3RhdGUqIGV4ZWMs
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywg
SlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQordm9pZCBsaW5rRm9yKAorICAgIEV4ZWNTdGF0ZSogZXhl
YywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2Nr
LAorICAgIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwKKyAgICBSZWdpc3RlclByZXNlcnZhdGlvbk1v
ZGUgcmVnaXN0ZXJzKQogewogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIpOwogICAgIApA
QCAtMTI5NiwzMSArMTI5OCwzOCBAQCB2b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjLCBDYWxs
TGlua0luCiAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uaXNMaW5rZWQoKSk7CiAgICAgY2FsbExp
bmtJbmZvLmNhbGxlZS5zZXQoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+dm0oKSwgY2FsbExpbmtJbmZv
LmhvdFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVl
KTsKICAgICBjYWxsTGlua0luZm8ubGFzdFNlZW5DYWxsZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1l
KCktPnZtKCksIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7Cisg
ICAgaWYgKE9wdGlvbnM6OnNob3dEaXNhc3NlbWJseSgpKQorICAgICAgICBkYXRhTG9nKCJMaW5r
aW5nIGNhbGwgaW4gIiwgKmNhbGxlckNvZGVCbG9jaywgIiBhdCAiLCBjYWxsTGlua0luZm8uY29k
ZU9yaWdpbiwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBv
aW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOwogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxM
aW5rSW5mby5ob3RQYXRoT3RoZXIsIGNvZGVQdHIpOwogICAgIAogICAgIGlmIChjYWxsZWVDb2Rl
QmxvY2spCiAgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChleGVjLT5j
YWxsZXJGcmFtZSgpLCAmY2FsbExpbmtJbmZvKTsKICAgICAKICAgICBpZiAoa2luZCA9PSBDb2Rl
Rm9yQ2FsbCkgewotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVy
YXRvcikuY29kZSgpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtH
ZW5lcmF0b3JGb3IocmVnaXN0ZXJzKSkuY29kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICBsaW5rU2xv
d0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ29uc3RydWN0KTsK
KyAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBDb2RlRm9y
Q29uc3RydWN0LCByZWdpc3RlcnMpOwogfQogCi12b2lkIGxpbmtTbG93Rm9yKEV4ZWNTdGF0ZSog
ZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKK3ZvaWQgbGlua1Nsb3dGb3IoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLAorICAgIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJD
b2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKICAgICBWTSogdm0g
PSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNo
QnVmZmVyKGNhbGxlckNvZGVCbG9jayk7CiAgICAgCi0gICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1
ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywga2luZCk7CisgICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1
ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywga2luZCwgcmVnaXN0ZXJzKTsKIH0KIAotdm9pZCBsaW5r
Q2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywg
Q29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFeGVjdXRh
YmxlQmFzZSogZXhlY3V0YWJsZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCit2b2lk
IGxpbmtDbG9zdXJlQ2FsbCgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjb2RlUHRyLAorICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAg
ICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1Yik7CiAgICAgCkBAIC0xMzgwLDE4ICsxMzg5LDE4
IEBAIHZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSogZXhlYywgQ2EKICNpZiBVU0UoSlNW
QUxVRTMyXzY0KQogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOwogI2VuZGlmCi0gICAgc3R1YkppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICBz
dHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1QyKTsKICAg
ICAKICAgICAvLyBGSVhNRTogQ1N0YWNrIC0gVGhpbmsgdGhlIHJlc3RvcmVSZXR1cm5BZGRyZXNz
QmVmb3JlUmV0dXJuKCkgaW5zdHJ1Y3Rpb24gc2hvdWxkIGJlIGEgcG9rZQogICAgIHN0dWJKaXQu
YnJlYWtwb2ludCgpOwotICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1
cm4oR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVz
c0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUMik7CiAgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1w
IHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCp2bSwgJnN0dWJKaXQsIGNhbGxlckNvZGVCbG9jayk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIu
bGluayhjYWxsLCBGdW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldCgwKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRp
b25MYWJlbCh2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkp
KTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKHZtLT5nZXRD
VElTdHViKHZpcnR1YWxUaHVua0dlbmVyYXRvckZvcihDb2RlRm9yQ2FsbCwgcmVnaXN0ZXJzKSku
Y29kZSgpKSk7CiAgICAgCiAgICAgUmVmUHRyPENsb3N1cmVDYWxsU3R1YlJvdXRpbmU+IHN0dWJS
b3V0aW5lID0gYWRvcHRSZWYobmV3IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCiAgICAgICAgIEZJ
TkFMSVpFX0RGR19DT0RFKApAQCAtMTQwNiw3ICsxNDE1LDcgQEAgdm9pZCBsaW5rQ2xvc3VyZUNh
bGwoRXhlY1N0YXRlKiBleGVjLCBDYQogICAgIHJlcGF0Y2hCdWZmZXIucmVwbGFjZVdpdGhKdW1w
KAogICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdp
c3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKSwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICBsaW5rU2xvd0ZvcihyZXBhdGNo
QnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCk7CisgICAgbGlua1Nsb3dGb3Io
cmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwsIHJlZ2lzdGVycyk7
CiAgICAgCiAgICAgY2FsbExpbmtJbmZvLnN0dWIgPSBzdHViUm91dGluZS5yZWxlYXNlKCk7CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkocmV2aXNpb24gMTYwNzk0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDkgKzQxLDkgQEAgdm9pZCBidWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0YXRlKiwg
Sgogdm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5k
KTsKIHZvaWQgYnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRL
aW5kKTsKIHZvaWQgcmVwYXRjaEluKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGNvbnN0IElkZW50aWZp
ZXImLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5m
byYpOwotdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayos
IEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kKTsKLXZvaWQgbGlua1Nsb3dGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCk7Ci12b2lkIGxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUq
LCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmUqLCBFeGVjdXRhYmxlQmFzZSos
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cik7Cit2b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiwgQ2FsbExp
bmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSk7
Cit2b2lkIGxpbmtTbG93Rm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSk7Cit2b2lkIGxpbmtDbG9zdXJl
Q2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmUqLCBF
eGVjdXRhYmxlQmFzZSosIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgUmVnaXN0ZXJQcmVzZXJ2YXRp
b25Nb2RlKTsKIHZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwogdm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJ
bmZvJik7CiB2b2lkIHJlc2V0SW4oUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
CShyZXZpc2lvbiAxNjA3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgc3RhdGljIHZvaWQg
c2xvd1BhdGhGb3IoCiB9CiAKIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0ZvclRo
dW5rR2VuZXJhdG9yKAotICAgIFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQor
ICAgIFZNKiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBSZWdpc3RlclByZXNlcnZh
dGlvbk1vZGUgcmVnaXN0ZXJzKQogewogICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0
aGUgc3RhY2sgb3IgaW4gdGhlIGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKICAgICAvLyBz
YXZlIHRoZSByZXR1cm4gYWRkcmVzcyB0byB0aGUgY2FsbCBmcmFtZSB3aGlsZSB3ZSBtYWtlIGEg
QysrIGZ1bmN0aW9uIGNhbGwKQEAgLTEwOSwzOCArMTA5LDU5IEBAIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbGlua0ZvclRodW4KICAgICAKICAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsK
ICAgICAKLSAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBraW5kID09IENvZGVGb3JDYWxsID8gb3Bl
cmF0aW9uTGlua0NhbGwgOiBvcGVyYXRpb25MaW5rQ29uc3RydWN0KTsKKyAgICBzbG93UGF0aEZv
cihqaXQsIHZtLCBvcGVyYXRpb25MaW5rRm9yKGtpbmQsIHJlZ2lzdGVycykpOwogICAgIAogICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKAogICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJM
aW5rICVzIHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyAiY2FsbCIgOiAi
Y29uc3RydWN0IikpOworICAgICAgICAoIkxpbmsgJXMlcyBzbG93IHBhdGggdGh1bmsiLCBraW5k
ID09IENvZGVGb3JDYWxsID8gImNhbGwiIDogImNvbnN0cnVjdCIsIHJlZ2lzdGVycyA9PSBNdXN0
UHJlc2VydmVSZWdpc3RlcnMgPyAiIHRoYXQgcHJlc2VydmVzIHJlZ2lzdGVycyIgOiAiIikpOwog
fQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0p
CiB7Ci0gICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNhbGwpOwor
ICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsLCBSZWdpc3Rl
clByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxp
bmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIGxpbmtGb3JU
aHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJuIGxpbmtGb3JU
aHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25O
b3RSZXF1aXJlZCk7CiB9CiAKLS8vIEZvciBjbG9zdXJlIG9wdGltaXphdGlvbnMsIHdlIG9ubHkg
aW5jbHVkZSBjYWxscywgc2luY2UgaWYgeW91J3JlIHVzaW5nIGNsb3N1cmVzIGZvcgotLy8gb2Jq
ZWN0IGNvbnN0cnVjdGlvbiB0aGVuIHlvdSdyZSBnb2luZyB0byBsb3NlIGJpZyB0aW1lIGFueXdh
eS4KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcihW
TSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaGF0UHJlc2VydmVzUmVnc1Ro
dW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9y
KHZtLCBDb2RlRm9yQ2FsbCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKK30KKworTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9y
KFZNKiB2bSkKK3sKKyAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9y
Q29uc3RydWN0LCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOworfQorCitzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbEZvclRodW5rR2VuZXJhdG9yKAorICAgIFZNKiB2
bSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsKICAgICBDQ2FsbEhlbHBl
cnMgaml0KHZtKTsKICAgICAKLSAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5r
Q2xvc3VyZUNhbGwpOworICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtDbG9z
dXJlQ2FsbEZvcihyZWdpc3RlcnMpKTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgKCJMaW5rIGNsb3N1cmUgY2FsbCBzbG93IHBhdGggdGh1bmsiKSk7CisgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiTGluayBjbG9zdXJlIGNhbGwgJXMg
c2xvdyBwYXRoIHRodW5rIiwgcmVnaXN0ZXJzID09IE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyA/ICIg
dGhhdCBwcmVzZXJ2ZXMgcmVnaXN0ZXJzIiA6ICIiKSk7Cit9CisKKy8vIEZvciBjbG9zdXJlIG9w
dGltaXphdGlvbnMsIHdlIG9ubHkgaW5jbHVkZSBjYWxscywgc2luY2UgaWYgeW91J3JlIHVzaW5n
IGNsb3N1cmVzIGZvcgorLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiB0aGVuIHlvdSdyZSBnb2luZyB0
byBsb3NlIGJpZyB0aW1lIGFueXdheS4KK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3Vy
ZUNhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCit7CisgICAgcmV0dXJuIGxpbmtDbG9zdXJlQ2Fs
bEZvclRodW5rR2VuZXJhdG9yKHZtLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsK
K30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNS
ZWdzVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIHJldHVybiBsaW5rQ2xvc3VyZUNhbGxG
b3JUaHVua0dlbmVyYXRvcih2bSwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKIH0KIAogc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3IoCi0gICAgVk0q
IHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgVk0qIHZtLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7
CiAgICAgLy8gVGhlIGNhbGxlZSBpcyBpbiByZWdUMCAoZm9yIEpTVkFMVUUzMl82NCwgdGhlIHRh
ZyBpcyBpbiByZWdUMSkuCiAgICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFj
aywgb3IgaW4gdGhlIGxpbmsgcmVnaXN0ZXIuIFdlIHdpbGwgaGVuY2UKQEAgLTE1NSwzMyArMTc2
LDM0IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZvclQKICAgICAvLyB0
aGUgREZHIGtub3dzIHRoYXQgdGhlIHZhbHVlIGlzIGRlZmluaXRlbHkgYSBjZWxsLCBvciBkZWZp
bml0ZWx5IGEgZnVuY3Rpb24uCiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChUYWdNYXNrKSwgR1BSSW5mbzo6cmVnVDIpOwor
ICAgIAogICAgIHNsb3dDYXNlLmFwcGVuZCgKICAgICAgICAgaml0LmJyYW5jaFRlc3Q2NCgKLSAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86
OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBH
UFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDIpKTsKICNlbHNlCiAgICAgc2xvd0Nhc2UuYXBw
ZW5kKAogICAgICAgICBqaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBHUFJJbmZvOjpyZWdUMSwKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAjZW5kaWYKLSAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBHUFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBHUFJJ
bmZvOjpyZWdUMik7CiAgICAgc2xvd0Nhc2UuYXBwZW5kKAogICAgICAgICBqaXQuYnJhbmNoUHRy
KAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIyLCBTdHJ1Y3R1cmU6OmNsYXNzSW5m
b09mZnNldCgpKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpy
ZWdUMiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksCiAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvbjo6aW5mbygpKSkpOwogICAgIAogICAgIC8v
IE5vdyB3ZSBrbm93IHdlIGhhdmUgYSBKU0Z1bmN0aW9uLgogICAgIAogICAgIGppdC5sb2FkUHRy
KAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTRnVuY3Rp
b246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKLSAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMik7
Ci0gICAgc2xvd0Nhc2UuYXBwZW5kKAotICAgICAgICBqaXQuYnJhbmNoMzIoCi0gICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okxlc3NUaGFuLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKAotICAgICAgICAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjIsIEV4ZWN1dGFibGVCYXNl
OjpvZmZzZXRPZk51bVBhcmFtZXRlcnNGb3Ioa2luZCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgR1BSSW5mbzo6cmVnVDIpOworICAgIGpp
dC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBH
UFJJbmZvOjpyZWdUMiwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNo
ZWNrRm9yKGtpbmQsIHJlZ2lzdGVycykpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMik7CisgICAg
c2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6WmVybywgR1BS
SW5mbzo6cmVnVDIpKTsKICAgICAKICAgICAvLyBOb3cgd2Uga25vdyB0aGF0IHdlIGhhdmUgYSBD
b2RlQmxvY2ssIGFuZCB3ZSdyZSBjb21taXR0ZWQgdG8gbWFraW5nIGEgZmFzdAogICAgIC8vIGNh
bGwuCkBAIC0xOTcsMzQgKzIxOSw0MCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZp
cnR1YWxGb3JUCiAgICAgICAgIEpTU3RhY2s6OlNjb3BlQ2hhaW4pOwogI2VuZGlmCiAgICAgCi0g
ICAgaml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpu
b25BcmdHUFIyLCBFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tG
b3Ioa2luZCkpLAotICAgICAgICBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgCiAgICAgLy8gTWFrZSBh
IHRhaWwgY2FsbC4gVGhpcyB3aWxsIHJldHVybiBiYWNrIHRvIEpJVCBjb2RlLgotICAgIGVtaXRQ
b2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1QwKTsKLSAgICBqaXQuanVtcChHUFJJ
bmZvOjpyZWdUMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVn
VDIpOworICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1QyKTsKIAogICAgIHNsb3dDYXNlLmxpbmso
JmppdCk7CiAgICAgCiAgICAgLy8gSGVyZSB3ZSBkb24ndCBrbm93IGFueXRoaW5nLCBzbyByZXZl
cnQgdG8gdGhlIGZ1bGwgc2xvdyBwYXRoLgogICAgIAotICAgIHNsb3dQYXRoRm9yKGppdCwgdm0s
IGtpbmQgPT0gQ29kZUZvckNhbGwgPyBvcGVyYXRpb25WaXJ0dWFsQ2FsbCA6IG9wZXJhdGlvblZp
cnR1YWxDb25zdHJ1Y3QpOworICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvblZpcnR1
YWxGb3Ioa2luZCwgcmVnaXN0ZXJzKSk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
CiAgICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIlZpcnR1YWwgJXMgc2xvdyBwYXRoIHRo
dW5rIiwga2luZCA9PSBDb2RlRm9yQ2FsbCA/ICJjYWxsIiA6ICJjb25zdHJ1Y3QiKSk7CisgICAg
ICAgICgiVmlydHVhbCAlcyVzIHNsb3cgcGF0aCB0aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwg
PyAiY2FsbCIgOiAiY29uc3RydWN0IiwgcmVnaXN0ZXJzID09IE11c3RQcmVzZXJ2ZVJlZ2lzdGVy
cyA/ICIgdGhhdCBwcmVzZXJ2ZXMgcmVnaXN0ZXJzIiA6ICIiKSk7CiB9CiAKIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1
cm4gdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ2FsbCk7CisgICAgcmV0dXJu
IHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNhbGwsIFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uTm90UmVxdWlyZWQpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENv
bnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gdmlydHVhbEZvclRo
dW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICByZXR1cm4gdmlydHVhbEZv
clRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ29uc3RydWN0LCBSZWdpc3RlclByZXNlcnZhdGlv
bk5vdFJlcXVpcmVkKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsVGhh
dFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSogdm0pCit7CisgICAgcmV0dXJuIHZpcnR1
YWxGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNhbGwsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVy
cyk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGhhdFByZXNl
cnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSogdm0pCit7CisgICAgcmV0dXJuIHZpcnR1YWxGb3JU
aHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJz
KTsKIH0KIAogZW51bSBUaHVua0VudHJ5VHlwZSB7IEVudGVyVmlhQ2FsbCwgRW50ZXJWaWFKdW1w
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJ
KHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpZm5kZWYgVGh1bmtH
ZW5lcmF0b3JzX2gKICNkZWZpbmUgVGh1bmtHZW5lcmF0b3JzX2gKIAorI2luY2x1ZGUgIkNvZGVT
cGVjaWFsaXphdGlvbktpbmQuaCIKKyNpbmNsdWRlICJSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUu
aCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvci5oIgogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTM1
LDExICszNyw3OCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tCiAK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7CiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9y
KFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNS
ZWdzVGh1bmtHZW5lcmF0b3IoVk0qKTsKKworaW5saW5lIFRodW5rR2VuZXJhdG9yIGxpbmtUaHVu
a0dlbmVyYXRvckZvcigKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVy
UHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAg
Y2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAg
Y2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgcmV0dXJu
IGxpbmtDYWxsVGh1bmtHZW5lcmF0b3I7CisgICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0
ZXJzOgorICAgICAgICAgICAgcmV0dXJuIGxpbmtDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dl
bmVyYXRvcjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENvZGVGb3JDb25z
dHJ1Y3Q6CisgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgIGNhc2UgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgIHJldHVybiBsaW5rQ29uc3Ry
dWN0VGh1bmtHZW5lcmF0b3I7CisgICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgor
ICAgICAgICAgICAgcmV0dXJuIGxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnc1RodW5rR2Vu
ZXJhdG9yOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQogCiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKFZN
Kik7CisKK2lubGluZSBUaHVua0dlbmVyYXRvciBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRv
ckZvcihSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQoreworICAgIHN3aXRjaCAo
cmVnaXN0ZXJzKSB7CisgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgor
ICAgICAgICByZXR1cm4gbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3I7CisgICAgY2FzZSBN
dXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgIHJldHVybiBsaW5rQ2xvc3VyZUNhbGxUaGF0
UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
dmlydHVhbENhbGxUaHVua0dlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZp
cnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHZpcnR1YWxDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnc1RodW5rR2Vu
ZXJhdG9yKFZNKik7CisKK2lubGluZSBUaHVua0dlbmVyYXRvciB2aXJ0dWFsVGh1bmtHZW5lcmF0
b3JGb3IoCisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBSZWdpc3RlclByZXNlcnZh
dGlvbk1vZGUgcmVnaXN0ZXJzKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgQ29k
ZUZvckNhbGw6CisgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgIGNhc2UgUmVn
aXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFs
Q2FsbFRodW5rR2VuZXJhdG9yOworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoK
KyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5l
cmF0b3I7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2RlRm9yQ29uc3Ry
dWN0OgorICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAgICBjYXNlIFJlZ2lzdGVy
UHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICByZXR1cm4gdmlydHVhbENvbnN0
cnVjdFRodW5rR2VuZXJhdG9yOworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoK
KyAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVu
a0dlbmVyYXRvcjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KIAogTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IoVk0qKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnQuY3BwCShyZXZpc2lvbiAxNjA3OTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsMTQgKzQ3LDEyIEBAIHN0YXRpYyB2b2lkIHNldEZ1bmN0aW9uRW50cnlw
b2ludChWTSYgdm0KICAgICBpZiAodm0uY2FuVXNlSklUKCkpIHsKICAgICAgICAgaWYgKGtpbmQg
PT0gQ29kZUZvckNhbGwpIHsKICAgICAgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAg
ICAgICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGZ1
bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRo
dW5rKSksCi0gICAgICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNhbGxBcml0
eUNoZWNrVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgICAgICAgICAgICAgYWRvcHRSZWYo
bmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNhbGxFbnRyeVRodW5r
R2VuZXJhdG9yKSwgdm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNhbGxBcml0eUNoZWNrVGh1bmtH
ZW5lcmF0b3IpLmNvZGUoKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29u
c3RydWN0KTsKICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICAgICAgYWRv
cHRSZWYobmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNvbnN0cnVj
dEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSksCi0gICAg
ICAgICAgICB2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1RodW5r
R2VuZXJhdG9yKS5jb2RlKCkpOworICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENv
ZGUodm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3Ip
LCB2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1RodW5rR2VuZXJh
dG9yKS5jb2RlKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKQEAgLTYyLDE0ICs2MCwxMiBAQCBzdGF0
aWMgdm9pZCBzZXRGdW5jdGlvbkVudHJ5cG9pbnQoVk0mIHZtCiAgICAgVU5VU0VEX1BBUkFNKHZt
KTsKICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewogICAgICAgICBjb2RlQmxvY2stPnNl
dEpJVENvZGUoCi0gICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fz
c2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9mdW5jdGlvbl9mb3JfY2Fs
bF9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9uX2Zv
cl9jYWxsX2FyaXR5X2NoZWNrKSk7CisgICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklU
Q29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9mdW5j
dGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSksIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJ
bnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrKSwgSklUQ29kZTo6
SW50ZXJwcmV0ZXJUaHVuaykpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBBU1NFUlQo
a2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0g
ICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6
Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUp
LCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSksCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJp
dHlfY2hlY2spKTsKKyAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0
cnVjdF9wcm9sb2d1ZSksIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRy
KGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2spLCBKSVRDb2RlOjpJbnRl
cnByZXRlclRodW5rKSkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRFdmFsRW50cnlwb2ludChWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrKQpAQCAtNzcsMTYgKzczLDE0IEBAIHN0YXRpYyB2b2lk
IHNldEV2YWxFbnRyeXBvaW50KFZNJiB2bSwgQ28KICNpZiBFTkFCTEUoSklUKQogICAgIGlmICh2
bS5jYW5Vc2VKSVQoKSkgewogICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAg
ICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGV2YWxFbnRyeVRo
dW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOworICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVj
dEpJVENvZGUodm0uZ2V0Q1RJU3R1YihldmFsRW50cnlUaHVua0dlbmVyYXRvciksIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cigpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICAgICBVTlVTRURfUEFSQU0o
dm0pOwogICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgYWRvcHRSZWYobmV3IERp
cmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxp
bnRfZXZhbF9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOworICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklU
Q29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9ldmFs
X3Byb2xvZ3VlKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksIEpJVENvZGU6OkludGVycHJldGVy
VGh1bmspKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldFByb2dyYW1FbnRyeXBvaW50KFZNJiB2bSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2spCkBAIC05NCwxNiArODgsMTQgQEAgc3RhdGljIHZvaWQgc2V0
UHJvZ3JhbUVudHJ5cG9pbnQoVk0mIHZtLAogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKHZtLmNh
blVzZUpJVCgpKSB7CiAgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgICAg
IGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIocHJvZ3JhbUVudHJ5VGh1
bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSksCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CisgICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0
SklUQ29kZSh2bS5nZXRDVElTdHViKHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKSwgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogICAgIFVOVVNFRF9QQVJB
TSh2bSk7CiAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9wdFJlZihuZXcg
RGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihs
bGludF9wcm9ncmFtX3Byb2xvZ3VlKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAotICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CisgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJl
Y3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50
X3Byb2dyYW1fcHJvbG9ndWUpLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSwgSklUQ29kZTo6SW50
ZXJwcmV0ZXJUaHVuaykpKTsKIH0KIAogdm9pZCBzZXRFbnRyeXBvaW50KFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0MCw3ICsz
NDAsOSBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NSKEV4ZWNTCiAgICAgaWYg
KGtpbmQgPT0gUHJvbG9ndWUpCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08oY29kZUJsb2NrLT5q
aXRDb2RlKCktPmV4ZWN1dGFibGVBZGRyZXNzKCksIGV4ZWMpOwogICAgIEFTU0VSVChraW5kID09
IEFyaXR5Q2hlY2spOwotICAgIExMSU5UX1JFVFVSTl9UV08oY29kZUJsb2NrLT5qaXRDb2RlV2l0
aEFyaXR5Q2hlY2soKS5leGVjdXRhYmxlQWRkcmVzcygpLCBleGVjKTsKKyAgICBMTElOVF9SRVRV
Uk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZSgpLT5hZGRyZXNzRm9yQ2FsbCgKKyAgICAgICAgKmNv
ZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgTXVzdENoZWNrQXJp
dHksCisgICAgICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksIGV4ZWMpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3IpCkBA
IC0xMDQwLDcgKzEwNDIsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChF
eGVjCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7CiAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSAwOwogICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQotICAg
ICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+aG9zdENvZGVFbnRyeUZvcihraW5kKTsKKyAgICAg
ICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Iodm0sIGtpbmQsIE11c3RDaGVj
a0FyaXR5LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKICAgICBlbHNlIHsKICAg
ICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKICAgICAgICAgSlNPYmplY3QqIGVy
cm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUs
IGNhbGxlZS0+c2NvcGUoKSwga2luZCk7CkBAIC0xMDQ4LDEyICsxMDUwLDE2IEBAIGlubGluZSBT
bG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKEV4ZWMKICAgICAgICAgICAgIExMSU5UX0NBTExf
VEhST1coZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKSwgZXJyb3IpOwogICAgICAgICBjb2RlQmxv
Y2sgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKTsKICAgICAgICAgQVNT
RVJUKGNvZGVCbG9jayk7CisgICAgICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5OwogICAgICAgICBp
ZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0
PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQotICAgICAgICAgICAgY29kZVB0
ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+anNDb2RlV2l0aEFyaXR5Q2hlY2tFbnRyeUZvcihraW5k
KTsKKyAgICAgICAgICAgIGFyaXR5ID0gTXVzdENoZWNrQXJpdHk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmpzQ29kZUVudHJ5Rm9yKGtp
bmQpOworICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7CisgICAgICAg
IGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Iodm0sIGtpbmQsIGFy
aXR5LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKICAgICB9CiAgICAgCisgICAg
QVNTRVJUKCEhY29kZVB0cik7CisgICAgCiAgICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNTX1NM
T1cgJiYgY2FsbExpbmtJbmZvKSB7CiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlciA9IGV4
ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24g
MTYwNzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsNiArMjkwLDExIEBAIG1hY3JvIHNsb3dQYXRo
Rm9yQ2FsbChzbG93UGF0aCkKICAgICAgICAgICAgIGlmIENfTE9PUAogICAgICAgICAgICAgICAg
IGNsb29wQ2FsbEpTRnVuY3Rpb24gY2FsbGVlCiAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgICAgICAgICAgICAgYnBhIHQxLCAweDEw
MDAsIC5vaworICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIC5vazoK
KyAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgICBhZGRwIENhbGxlckZyYW1lQW5k
UENTaXplLCB0MSwgc3AKICAgICAgICAgICAgICAgICBjYWxsIGNhbGxlZQogICAgICAgICAgICAg
ICAgIHJlc3RvcmVTdGFja1BvaW50ZXJBZnRlckNhbGwoKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJpdHlDaGVja01vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Bcml0eUNoZWNrTW9kZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJpdHlDaGVja01vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQXJpdHlDaGVja01vZGVfaAorI2RlZmluZSBBcml0eUNoZWNrTW9k
ZV9oCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIEFyaXR5Q2hlY2tNb2RlIHsKKyAgICBBcml0
eUNoZWNrTm90UmVxdWlyZWQsCisgICAgTXVzdENoZWNrQXJpdHkKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gQXJpdHlDaGVja01vZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9u
IDE2MDc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw2ICsyMzcsMTAgQEAgU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX3RvX3RoaXMpCiB7CiAgICAgQkVHSU4oKTsKICAgICBKU1ZhbHVlIHYxID0gT1Ao
MSkuanNWYWx1ZSgpOworICAgIGlmICh2MSA9PSBqc051bWJlcigwKSkgeworICAgICAgICBkYXRh
TG9nKCIgICAgV2UgaGF2ZSBhIHdpbm5lciEhXG4iKTsKKyAgICAgICAgYXNtIHZvbGF0aWxlICgi
aW50ICQzXG4iKTsKKyAgICB9CiAgICAgaWYgKHYxLmlzQ2VsbCgpKQogICAgICAgICBwY1syXS51
LnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgZXhlYy0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0
YWJsZSgpLCB2MS5hc0NlbGwoKS0+c3RydWN0dXJlKCkpOwogICAgIGVsc2UKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxNjA3
OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE4LDEyICsxMTgsMTQgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpp
bnN0YWxsQ29kZShDb2RlQgogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgQ29kZUZvckNh
bGw6CiAgICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBnZW5lcmljQ29kZUJsb2NrLT5qaXRDb2Rl
KCk7Ci0gICAgICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IGdlbmVyaWNDb2Rl
QmxvY2stPmppdENvZGVXaXRoQXJpdHlDaGVjaygpOworICAgICAgICBtX2ppdENvZGVGb3JDYWxs
V2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAgICAgICAgbV9qaXRD
b2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdzID0gTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKCk7CiAgICAgICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBnZW5lcmljQ29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29kZUZvckNv
bnN0cnVjdDoKICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gZ2VuZXJpY0NvZGVCbG9j
ay0+aml0Q29kZSgpOwotICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVj
ayA9IGdlbmVyaWNDb2RlQmxvY2stPmppdENvZGVXaXRoQXJpdHlDaGVjaygpOworICAgICAgICBt
X2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0
cigpOworICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVja0FuZFByZXNl
cnZlUmVncyA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwogICAgICAgICBtX251bVBhcmFtZXRl
cnNGb3JDb25zdHJ1Y3QgPSBnZW5lcmljQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KQEAgLTEzMyw3ICsxMzUsNiBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFi
bGU6Omluc3RhbGxDb2RlKENvZGVCCiAgICAgICAgIFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRh
YmxlID0ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyk7CiAgICAgICAgIFByb2dyYW1D
b2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PFByb2dyYW1Db2RlQmxvY2sqPihnZW5l
cmljQ29kZUJsb2NrKTsKICAgICAgICAgCi0gICAgICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRD
b2RlV2l0aEFyaXR5Q2hlY2soKSk7CiAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDYWxs
KTsKICAgICAgICAgCiAgICAgICAgIG9sZENvZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fcHJvZ3Jh
bUNvZGVCbG9jazsKQEAgLTE0NSw3ICsxNDYsNiBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omlu
c3RhbGxDb2RlKENvZGVCCiAgICAgICAgIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganND
YXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyk7CiAgICAgICAgIEV2YWxDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IHN0YXRpY19jYXN0PEV2YWxDb2RlQmxvY2sqPihnZW5lcmljQ29kZUJsb2NrKTsKICAg
ICAgICAgCi0gICAgICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2so
KSk7CiAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKICAgICAgICAgCiAgICAg
ICAgIG9sZENvZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fZXZhbENvZGVCbG9jazsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDE2MDc5
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBFeGVjdXRhYmxlX2gKICNkZWZpbmUg
RXhlY3V0YWJsZV9oCiAKKyNpbmNsdWRlICJBcml0eUNoZWNrTW9kZS5oIgogI2luY2x1ZGUgIkNh
bGxEYXRhLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrSGFzaC5oIgogI2luY2x1ZGUgIkNvZGVTcGVj
aWFsaXphdGlvbktpbmQuaCIKQEAgLTM2LDYgKzM3LDcgQEAKICNpbmNsdWRlICJJbnRlcnByZXRl
ci5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgor
I2luY2x1ZGUgIlJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oIgogI2luY2x1ZGUgIlNhbXBsaW5n
VG9vbC5oIgogI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJVbmxpbmtlZENvZGVC
bG9jay5oIgpAQCAtMTQ0LDM3ICsxNDYsOTQgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoa2lu
ZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENvZGVG
b3JDb25zdHJ1Y3QoKTsKICAgICB9Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZ2VuZXJh
dGVkSklUQ29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaygpCi0gICAgewotICAgICAgICBBU1NFUlQo
bV9qaXRDb2RlRm9yQ2FsbCk7Ci0gICAgICAgIEFTU0VSVChtX2ppdENvZGVGb3JDYWxsV2l0aEFy
aXR5Q2hlY2spOwotICAgICAgICByZXR1cm4gbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNr
OwotICAgIH0KLQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZW5lcmF0ZWRKSVRDb2RlRm9y
Q29uc3RydWN0V2l0aEFyaXR5Q2hlY2soKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1faml0Q29k
ZUZvckNvbnN0cnVjdCk7Ci0gICAgICAgIEFTU0VSVChtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRo
QXJpdHlDaGVjayk7Ci0gICAgICAgIHJldHVybiBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJp
dHlDaGVjazsKLSAgICB9Ci0gICAgICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZW5l
cmF0ZWRKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
KQotICAgIHsKLSAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICBy
ZXR1cm4gZ2VuZXJhdGVkSklUQ29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaygpOwotICAgICAgICBB
U1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRl
ZEpJVENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaygpOwotICAgIH0KLSAgICAgICAgCi0g
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGVudHJ5cG9pbnRGb3IoCisgICAgICAgIFZNJiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kLCBBcml0eUNoZWNrTW9kZSBhcml0eSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lz
dGVycykKICAgICB7Ci0gICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAg
ICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ2Fs
bFdpdGhBcml0eUNoZWNrKTsKLSAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVj
dCk7Ci0gICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1faml0
Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgd2Ug
aGF2ZSBhIGNhY2hlZCByZXN1bHQuIFdlIG9ubHkgaGF2ZSBpdCBmb3IgYXJpdHkgY2hlY2sgYmVj
YXVzZSB3ZSB1c2UgdGhlCisgICAgICAgIC8vIG5vLWFyaXR5IGVudHJ5cG9pbnQgaW4gbm9uLXZp
cnR1YWwgY2FsbHMsIHdoaWNoIHdpbGwgImNhY2hlIiB0aGlzIHZhbHVlIGRpcmVjdGx5IGluCisg
ICAgICAgIC8vIG1hY2hpbmUgY29kZS4KKyAgICAgICAgaWYgKGFyaXR5ID09IE11c3RDaGVja0Fy
aXR5KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgQ29k
ZUZvckNhbGw6CisgICAgICAgICAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAg
ICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0gbV9qaXRDb2RlRm9y
Q2FsbFdpdGhBcml0eUNoZWNrKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNdXN0
UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgcmVzdWx0ID0gbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrQW5kUHJlc2Vy
dmVSZWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICAgICAgICAg
IHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgICAgICAgICAgY2FzZSBSZWdpc3RlclByZXNl
cnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgICAgICAgICBpZiAoTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIHJlc3VsdCA9IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0gbV9q
aXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3MpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9Cisg
ICAgICAgICAgICBnZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCh2bSwg
dGhpcywgYXJpdHksIHJlZ2lzdGVycyk7CisgICAgICAgIGlmIChhcml0eSA9PSBNdXN0Q2hlY2tB
cml0eSkgeworICAgICAgICAgICAgLy8gQ2FjaGUgdGhlIHJlc3VsdDsgdGhpcyBpcyBuZWNlc3Nh
cnkgZm9yIHRoZSBKSVQncyB2aXJ0dWFsIGNhbGwgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgICAg
IHN3aXRjaCAoa2luZCkgeworICAgICAgICAgICAgY2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAgICAgICAgICAgIGNhc2UgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2Rl
Rm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAg
ICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdz
ID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1
Y3Q6CisgICAgICAgICAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICAgICAg
ICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gcmVzdWx0OworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJl
Z2lzdGVyczoKKyAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFy
aXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3MgPSByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3IoCisgICAgICAg
IENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJl
Z2lzdGVycykKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIENv
ZGVGb3JDYWxsOgorICAgICAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgICAg
IGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVCYXNlLCBtX2ppdENvZGVGb3JDYWxsV2l0
aEFyaXR5Q2hlY2spOworICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9q
aXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdzKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICAgICAgc3dpdGNoIChy
ZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1
aXJlZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVC
YXNlLCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7CisgICAgICAgICAgICBj
YXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAgICAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEV4ZWN1dGFibGVCYXNlLCBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlD
aGVja0FuZFByZXNlcnZlUmVncyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQot
ICAgICAgICAKKyAgICAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVy
c0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgewogICAgICAgICBpZiAoa2lu
ZCA9PSBDb2RlRm9yQ2FsbCkKQEAgLTIxMSwyMSArMjcwLDYgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gTm9JbnRyaW5zaWM7CiAgICAgfQogICAgICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgaG9zdENvZGVFbnRyeUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi0gICAg
ewotICAgICAgICByZXR1cm4gZ2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNh
bGwoKTsKLSAgICB9Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIganNDb2RlRW50cnlGb3Io
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdlbmVy
YXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKCk7Ci0gICAgfQotCi0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGpzQ29kZVdpdGhBcml0eUNoZWNrRW50cnlGb3IoQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEpJVENv
ZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKTsKLSAgICB9Ci0KIHByb3RlY3RlZDoKICAgICBFeGVj
dXRhYmxlQmFzZSogbV9wcmV2OwogICAgIEV4ZWN1dGFibGVCYXNlKiBtX25leHQ7CkBAIC0yMzQs
NiArMjc4LDggQEAgcHJvdGVjdGVkOgogICAgIFJlZlB0cjxKSVRDb2RlPiBtX2ppdENvZGVGb3JD
b25zdHJ1Y3Q7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZUZvckNhbGxXaXRo
QXJpdHlDaGVjazsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRDb2RlRm9yQ29uc3Ry
dWN0V2l0aEFyaXR5Q2hlY2s7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZUZv
ckNhbGxXaXRoQXJpdHlDaGVja0FuZFByZXNlcnZlUmVnczsKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3M7
CiB9OwogCiBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlIDogcHVibGljIEV4ZWN1dGFibGVCYXNlIHsK
QEAgLTI4OCw4ICszMzQsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIFBhc3NSZWZQdHI8SklUQ29kZT4gY2FsbFRodW5rLCBQYXNzUmVmUHRyPEpJVENvZGU+
IGNvbnN0cnVjdFRodW5rLCBJbnRyaW5zaWMgaW50cmluc2ljKQogICAgIHsKICAgICAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5
Q2hlY2sgPSBjYWxsVGh1bmsgPyBjYWxsVGh1bmstPmFkZHJlc3NGb3JDYWxsKCkgOiBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIoKTsKLSAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5
Q2hlY2sgPSBjb25zdHJ1Y3RUaHVuayA/IGNvbnN0cnVjdFRodW5rLT5hZGRyZXNzRm9yQ2FsbCgp
IDogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CiAgICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBj
YWxsVGh1bms7CiAgICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IGNvbnN0cnVjdFRodW5r
OwogICAgICAgICBtX2ludHJpbnNpYyA9IGludHJpbnNpYzsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25Nb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFJlZ2lzdGVy
UHJlc2VydmF0aW9uTW9kZV9oCisjZGVmaW5lIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZV9oCisK
K25hbWVzcGFjZSBKU0MgeworCitlbnVtIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSB7CisgICAg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCwKKyAgICBNdXN0UHJlc2VydmVSZWdpc3Rl
cnMKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Nb2RlX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219688</attachid>
            <date>2013-12-19 15:06:29 -0800</date>
            <delta_ts>2013-12-19 15:07:26 -0800</delta_ts>
            <desc>ready for review</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>151797</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwODUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4MSBA
QAorMjAxMy0xMi0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgYmUgYWJsZSB0byBkbyBjYWxsIElDcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1ODExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGQgQ2FsbC9Db25zdHJ1Y3QgaW5s
aW5lIGNhY2hpbmcgdG8gdGhlIEZUTC4gVGhhdCBwYXJ0IGlzIHN1cGVyIGVhc3kuCisgICAgICAg
IAorICAgICAgICBCdXQgdG8gbWFrZSBpdCBwb3NzaWJsZSBmb3IgdGhlIEZUTCAod2hpY2ggcHJl
c2VydmVzIHN5c3RlbSBBQkkgY2FsbGVlLXNhdmUgcmVnaXN0ZXJzCisgICAgICAgIGFuZCBleHBl
Y3RzIGNhbGxzIHRvIHByZXNlcnZlIHRoZW0pIHRvIGNhbGwgaW50byBub24tRlRMIEpTQyBKSVRz
ICh3aGljaCBkb24ndCBwcmVzZXJ2ZQorICAgICAgICBhbnkgcmVnaXN0ZXJzKSwgd2UgbmVlZCB0
byBoYXZlIHNvbWUgc3BlY2lhbCB0aHVua3MuIFRoYXQncyBtb3N0IG9mIHRoZSBwYXRjaC4gSW4K
KyAgICAgICAgcGFydGljdWxhciwgYWxsIEpJVENvZGUncyBjYW4gbm93IGdpdmUgeW91IGVudHJ5
cG9pbnRzIHdpdGggb3Igd2l0aG91dCByZWdpc3RlcgorICAgICAgICBwcmVzZXJ2YXRpb24gYW5k
IHRoaXMgbWF5IG1lYW4gbGF6aWx5IGNyZWF0aW5nIHdyYXBwZXIgdGh1bmtzIHRoYXQgcHJlc2Vy
dmUgcmVnaXN0ZXJzLgorICAgICAgICBGVEwgT1NSIGV4aXQgbWF5IGludm9sdmUgZXhpdGluZyBp
bnRvIGEgcmVnaXN0ZXIgcmVzdG9yYXRpb24gdGh1bmsgYW5kIGl0IG1heSBhbHNvCisgICAgICAg
IGludm9sdmUgZGVjb2RpbmcgRlRMIHVud2luZCBpbmZvIGluIG9yZGVyIHRvIGZpZ3VyZSBvdXQg
d2hlcmUgcmVnaXN0ZXJzIHdlcmUgcHJlc2VydmVkLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6
b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSopOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6Om9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKToKKyAgICAgICAgKiBi
eXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnVu
bGluayk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmg6CisgICAgICAgIChKU0M6
OkNhbGxMaW5rSW5mbzo6Q2FsbExpbmtJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRKSVRDb2RlKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpqaXRDb2RlKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpjb21waWxlSW1wbCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBp
bGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAg
ICogZGZnL0RGR0pJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxp
emVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5hbGl6
ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKiBmdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAg
ICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bW1BbGxvY2F0
ZUNvZGVTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpmaXhGdW5jdGlvbkJhc2VkT25TdGFj
a01hcHMpOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExJ
bmxpbmVDYWNoZVNpemUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OnNpemVPZkNhbGwpOgorICAg
ICAgICAqIGZ0bC9GVExJbmxpbmVDYWNoZVNpemUuaDoKKyAgICAgICAgKiBmdGwvRlRMSW50cmlu
c2ljUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExKSVRDb2RlLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpKSVRDb2RlOjppbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6
RlRMOjpKSVRDb2RlOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
RlRMOjpKSVRDb2RlOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpK
SVRDb2RlOjpvZmZzZXRPZik6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6Y29udGFpbnMpOgorICAgICAgICAqIGZ0bC9GVExK
SVRDb2RlLmg6CisgICAgICAgICogZnRsL0ZUTEpJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBmdGwv
RlRMSlNDYWxsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6SlNDYWxsOjpKU0NhbGwp
OgorICAgICAgICAoSlNDOjpGVEw6OkpTQ2FsbDo6ZW1pdCk6CisgICAgICAgIChKU0M6OkZUTDo6
SlNDYWxsOjpsaW5rKToKKyAgICAgICAgKiBmdGwvRlRMSlNDYWxsLmg6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpGVEw6OkpTQ2FsbDo6c3RhY2ttYXBJRCk6CisgICAgICAgIChKU0M6OkZUTDo6SlND
YWxsOjpvcGVyYXRvcjwpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd2VyKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEJ5SWQpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjYWxsU3RhY2ttYXApOgorICAgICAgICAqIGZ0bC9GVExPU1JFbnRy
eS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBm
dGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1
Yik6CisgICAgICAgICogZnRsL0ZUTFJlZ2lzdGVyQXRPZmZzZXQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6RlRMOjpSZWdpc3RlckF0T2Zmc2V0OjpkdW1wKToKKyAgICAgICAgKiBmdGwvRlRM
UmVnaXN0ZXJBdE9mZnNldC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpSZWdpc3RlckF0
T2Zmc2V0OjpSZWdpc3RlckF0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpSZWdpc3RlckF0
T2Zmc2V0OjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OlJlZ2lzdGVyQXRPZmZzZXQ6
Omdwcik6CisgICAgICAgIChKU0M6OkZUTDo6UmVnaXN0ZXJBdE9mZnNldDo6b2Zmc2V0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpSZWdpc3RlckF0T2Zmc2V0OjpvcGVyYXRvcj09KToKKyAgICAgICAg
KEpTQzo6RlRMOjpSZWdpc3RlckF0T2Zmc2V0OjpvcGVyYXRvcjwpOgorICAgICAgICAoSlNDOjpG
VEw6OlJlZ2lzdGVyQXRPZmZzZXQ6OmdldEdQUik6CisgICAgICAgICogZnRsL0ZUTFN0YWNrTWFw
cy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpSZWNvcmQ6OnBhcnNlKToKKyAg
ICAgICAgKiBmdGwvRlRMU3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlN0YXRlOjpTdGF0
ZSk6CisgICAgICAgICogZnRsL0ZUTFN0YXRlLmg6CisgICAgICAgICogZnRsL0ZUTFVud2luZElu
Zm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpVbndpbmRJbmZvOjpVbndpbmRJbmZv
KToKKyAgICAgICAgKEpTQzo6RlRMOjpVbndpbmRJbmZvOjp+VW53aW5kSW5mbyk6CisgICAgICAg
IChKU0M6OkZUTDo6VW53aW5kSW5mbzo6cGFyc2UpOgorICAgICAgICAoSlNDOjpGVEw6OlVud2lu
ZEluZm86OmR1bXApOgorICAgICAgICAoSlNDOjpGVEw6OlVud2luZEluZm86OmZpbmQpOgorICAg
ICAgICAoSlNDOjpGVEw6OlVud2luZEluZm86OmluZGV4T2YpOgorICAgICAgICAqIGZ0bC9GVExV
bndpbmRJbmZvLmg6IEFkZGVkLgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICog
aml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2Fz
ZSk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5jcHA6CisgICAg
ICAgIChKU0M6OkpJVENvZGU6Omhvc3RGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpJVENvZGVX
aXRoQ29kZVJlZjo6SklUQ29kZVdpdGhDb2RlUmVmKToKKyAgICAgICAgKEpTQzo6SklUQ29kZVdp
dGhDb2RlUmVmOjp+SklUQ29kZVdpdGhDb2RlUmVmKToKKyAgICAgICAgKEpTQzo6SklUQ29kZVdp
dGhDb2RlUmVmOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SklU
Q29kZVdpdGhDb2RlUmVmOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SklU
Q29kZVdpdGhDb2RlUmVmOjpvZmZzZXRPZik6CisgICAgICAgIChKU0M6OkpJVENvZGVXaXRoQ29k
ZVJlZjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkpJVENvZGVXaXRoQ29kZVJlZjo6Y29udGFpbnMp
OgorICAgICAgICAoSlNDOjpEaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2RlKToKKyAgICAgICAg
KEpTQzo6RGlyZWN0SklUQ29kZTo6fkRpcmVjdEpJVENvZGUpOgorICAgICAgICAoSlNDOjpEaXJl
Y3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZik6CisgICAgICAgIChKU0M6OkRpcmVjdEpJVENv
ZGU6OmVuc3VyZVdyYXBwZXJzKToKKyAgICAgICAgKEpTQzo6RGlyZWN0SklUQ29kZTo6YWRkcmVz
c0ZvckNhbGwpOgorICAgICAgICAoSlNDOjpOYXRpdmVKSVRDb2RlOjpOYXRpdmVKSVRDb2RlKToK
KyAgICAgICAgKEpTQzo6TmF0aXZlSklUQ29kZTo6fk5hdGl2ZUpJVENvZGUpOgorICAgICAgICAo
SlNDOjpOYXRpdmVKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZik6CisgICAgICAgIChKU0M6Ok5h
dGl2ZUpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgor
ICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0
aW9ucy5oOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25MaW5rRm9yKToKKyAgICAgICAgKEpTQzo6
b3BlcmF0aW9uVmlydHVhbEZvcik6CisgICAgICAgIChKU0M6Om9wZXJhdGlvbkxpbmtDbG9zdXJl
Q2FsbEZvcik6CisgICAgICAgICogaml0L1JlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVy
YXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpyZWdpc3RlcnNUb1ByZXNlcnZlKToKKyAg
ICAgICAgKEpTQzo6cmVnaXN0ZXJQcmVzZXJ2YXRpb25PZmZzZXQpOgorICAgICAgICAoSlNDOjpn
ZW5lcmF0ZVdyYXBwZXIpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZVJlZ2lzdGVyUmVzdG9yYXRp
b24pOgorICAgICAgICAoSlNDOjpyZWdpc3RlclJlc3RvcmF0aW9uVGh1bmtHZW5lcmF0b3IpOgor
ICAgICAgICAqIGppdC9SZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaDogQWRk
ZWQuCisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpsaW5rU2xvd0Zv
cik6CisgICAgICAgIChKU0M6OmxpbmtGb3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2xvc3VyZUNh
bGwpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmg6CisgICAgICAgICogaml0L1RodW5rR2VuZXJh
dG9ycy5jcHA6CisgICAgICAgIChKU0M6OmxpbmtGb3JUaHVua0dlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OmxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ29uc3Ry
dWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNS
ZWdzVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ29uc3RydWN0VGhhdFByZXNl
cnZlc1JlZ3NUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmxpbmtDbG9zdXJlQ2FsbEZv
clRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVnc1Ro
dW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6dmlydHVhbEZvclRodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6dmlydHVhbENhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OnZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxD
YWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1
YWxDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBq
aXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgIChKU0M6OmxpbmtUaHVua0dlbmVyYXRvckZv
cik6CisgICAgICAgIChKU0M6OmxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yRm9yKToKKyAg
ICAgICAgKEpTQzo6dmlydHVhbFRodW5rR2VuZXJhdG9yRm9yKToKKyAgICAgICAgKiBsbGludC9M
TEludEVudHJ5cG9pbnQuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0RnVuY3Rpb25FbnRy
eXBvaW50KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldEV2YWxFbnRyeXBvaW50KToKKyAgICAg
ICAgKEpTQzo6TExJbnQ6OnNldFByb2dyYW1FbnRyeXBvaW50KToKKyAgICAgICAgKiBsbGludC9M
TEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjplbnRyeU9TUik6CisgICAg
ICAgIChKU0M6OkxMSW50OjpzZXRVcENhbGwpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQXJpdHlDaGVja01vZGUuaDogQWRkZWQu
CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpT
TE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAg
ICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUpOgorICAgICAgICAqIHJ1bnRp
bWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6ZW50cnlwb2lu
dEZvcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRo
QXJpdHlDaGVja0Zvcik6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1JlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oOiBB
ZGRlZC4KKwogMjAxMy0xMi0xOCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgog
CiAgICAgICAgIENsYXJpZmllZCBzdGFjayBtYWludGFpbmVuY2UgY29kZQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2MDg1MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yNjcsNiArMjY3LDE2IEBACiAJCTBGNjY2RUNEMTgzNkIzN0UwMEQwMTdGMSAv
KiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUNCMTgzNkIzN0UwMEQwMTdGMSAvKiBE
RkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2RTE2QjE0REYzRjE2MDBCN0IyRTQgLyog
REZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2RTE2
QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0VkZ2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjZC
MUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0IzMTg1RkM5RTkwMDg0NUQ5NyAvKiBG
VExKU0NhbGwuY3BwICovOyB9OworCQkwRjZCMUNCNjE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlND
YWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZC
MUNCNDE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2QjFDQjkxODYxMjQ0QzAwODQ1RDk3IC8q
IEFyaXR5Q2hlY2tNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjZCMUNCNzE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlDaGVja01vZGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjZCMUNCQTE4
NjEyNDRDMDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCODE4NjEyNDRDMDA4NDVE
OTcgLyogUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2QjFDQkQxODYxMjQ2QTAwODQ1RDk3IC8qIFJl
Z2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCQjE4NjEyNDZBMDA4NDVEOTcgLyog
UmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcCAqLzsgfTsKKwkJMEY2QjFD
QkUxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFD
QkMxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
NkIxQ0MzMTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExSZWdpc3RlckF0T2Zmc2V0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0JGMTg2MkM0Nzgw
MDg0NUQ5NyAvKiBGVExSZWdpc3RlckF0T2Zmc2V0LmNwcCAqLzsgfTsKKwkJMEY2QjFDQzQxODYy
QzQ3ODAwODQ1RDk3IC8qIEZUTFJlZ2lzdGVyQXRPZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0MwMTg2MkM0NzgwMDg0NUQ5NyAvKiBG
VExSZWdpc3RlckF0T2Zmc2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEY2QjFDQzUxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFD
QzExODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uY3BwICovOyB9OworCQkwRjZCMUND
NjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQzIxODYyQzQ3ODAwODQ1RDk3IC8qIEZU
TFVud2luZEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjcwMjVBOTE3MTRCMEZBMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NzAyNUE3MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwICov
OyB9OwogCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcw
MjVBODE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3MTRDQTQxNkVB
OTJGMDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MTRDQTExNkVBOTJFRDAw
RjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovOyB9OwpAQCAtMTU3
OSw2ICsxNTg5LDE2IEBACiAJCTBGNjY2RUNCMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJl
Y3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHUmVz
dXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FkamFjZW5jeUxpc3QuaDsgcGF0aCA9IGRm
Zy9ERkdBZGphY2VuY3lMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZF
MTY5MTRERjNGMTMwMEI3QjJFNCAvKiBERkdFZGdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0VkZ2UuaDsgcGF0aCA9IGRmZy9ERkdFZGdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNkIxQ0IzMTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMSlNDYWxsLmNwcDsgcGF0
aCA9IGZ0bC9GVExKU0NhbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZC
MUNCNDE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEZUTEpTQ2FsbC5oOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjZCMUNCNzE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlD
aGVja01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJpdHlDaGVja01v
ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QjFDQjgxODYxMjQ0QzAwODQ1
RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY2QjFDQkIxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0
aW9uV3JhcHBlckdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjZCMUNCQzE4NjEyNDZBMDA4NDVEOTcgLyogUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjZCMUNCRjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMUmVnaXN0
ZXJBdE9mZnNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExS
ZWdpc3RlckF0T2Zmc2V0LmNwcDsgcGF0aCA9IGZ0bC9GVExSZWdpc3RlckF0T2Zmc2V0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QjFDQzAxODYyQzQ3ODAwODQ1RDk3IC8q
IEZUTFJlZ2lzdGVyQXRPZmZzZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
RlRMUmVnaXN0ZXJBdE9mZnNldC5oOyBwYXRoID0gZnRsL0ZUTFJlZ2lzdGVyQXRPZmZzZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QjFDQzExODYyQzQ3ODAwODQ1RDk3IC8q
IEZUTFVud2luZEluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
RlRMVW53aW5kSW5mby5jcHA7IHBhdGggPSBmdGwvRlRMVW53aW5kSW5mby5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNkIxQ0MyMTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndp
bmRJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFVud2luZEluZm8u
aDsgcGF0aCA9IGZ0bC9GVExVbndpbmRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNzAyNUE3MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcwMjVBODE3MTRCMEY4MDAzODJDMEUgLyog
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcxNENBMTE2RUE5
MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNl
LmNwcDsgcGF0aCA9IGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4NTgsNiArMjg3OCw4IEBACiAJCQkJMEZFQTBBMDMx
NzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuaCAqLywKIAkJCQlBNzhBOTc3RDE3OTczOEQ1
MDA5REY3NDQgLyogRlRMSklURmluYWxpemVyLmNwcCAqLywKIAkJCQlBNzhBOTc3RTE3OTczOEQ1
MDA5REY3NDQgLyogRlRMSklURmluYWxpemVyLmggKi8sCisJCQkJMEY2QjFDQjMxODVGQzlFOTAw
ODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgKi8sCisJCQkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3
IC8qIEZUTEpTQ2FsbC5oICovLAogCQkJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExM
aW5rLmNwcCAqLywKIAkJCQkwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICov
LAogCQkJCTBGQ0VGQUREMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8sCkBA
IC0yODc0LDYgKzI4OTYsOCBAQAogCQkJCTBGMjM1QkNBMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExP
U1JFeGl0Q29tcGlsZXIuaCAqLywKIAkJCQkwRkVBMEEyOTE3MDk2Mjk2MDBCQjcyMkMgLyogRlRM
T3V0cHV0LmNwcCAqLywKIAkJCQkwRkVBMEEwNjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMT3V0cHV0
LmggKi8sCisJCQkJMEY2QjFDQkYxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFJlZ2lzdGVyQXRPZmZz
ZXQuY3BwICovLAorCQkJCTBGNkIxQ0MwMTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExSZWdpc3RlckF0
T2Zmc2V0LmggKi8sCiAJCQkJMEZDRUZBQTkxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0
b3JlLmNwcCAqLywKIAkJCQkwRkNFRkFBQTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3Rv
cmUuaCAqLywKIAkJCQkwRjI1RjFBQTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxs
LmNwcCAqLywKQEAgLTI4ODgsNiArMjkxMiw4IEBACiAJCQkJMEYyMzVCQ0IxNzE3OEUxQzAwNjkw
QzdGIC8qIEZUTFRodW5rcy5jcHAgKi8sCiAJCQkJMEYyMzVCQ0MxNzE3OEUxQzAwNjkwQzdGIC8q
IEZUTFRodW5rcy5oICovLAogCQkJCTBGRUEwQTFCMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExUeXBl
ZFBvaW50ZXIuaCAqLywKKwkJCQkwRjZCMUNDMTE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5k
SW5mby5jcHAgKi8sCisJCQkJMEY2QjFDQzIxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZElu
Zm8uaCAqLywKIAkJCQkwRjIzNUJDRDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQu
Y3BwICovLAogCQkJCTBGMjM1QkNFMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5o
ICovLAogCQkJCTBGREIyQ0M4MTczREE1MUUwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5o
ICovLApAQCAtMzAzMiw2ICszMDU4LDggQEAKIAkJCQkwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5M0Mg
LyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywKIAkJCQlBNzZGNTRB
MjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggKi8sCiAJCQkJQTc2QzUxNzQx
MTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggKi8sCisJCQkJMEY2QjFDQkIxODYx
MjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAg
Ki8sCisJCQkJMEY2QjFDQkMxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9u
V3JhcHBlckdlbmVyYXRvci5oICovLAogCQkJCTBGQzMxNDE0MTgxNDZENzAwMDAzMzIzMiAvKiBS
ZWdpc3RlclNldC5jcHAgKi8sCiAJCQkJMEZDMzE0MTAxODE0NTU5MTAwMDMzMjMyIC8qIFJlZ2lz
dGVyU2V0LmggKi8sCiAJCQkJMEYyNEU1NDkxN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3Bw
ICovLApAQCAtMzM2OSw2ICszMzk3LDcgQEAKIAkJCQlBNzYxNDBDODE4Mjk4MkNCMDA3NTA2MjQg
LyogQXJndW1lbnRzSXRlcmF0b3JDb25zdHJ1Y3Rvci5oICovLAogCQkJCUE3NjE0MEM5MTgyOTgy
Q0IwMDc1MDYyNCAvKiBBcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQTc2
MTQwQ0ExODI5ODJDQjAwNzUwNjI0IC8qIEFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBlLmggKi8s
CisJCQkJMEY2QjFDQjcxODYxMjQ0QzAwODQ1RDk3IC8qIEFyaXR5Q2hlY2tNb2RlLmggKi8sCiAJ
CQkJQTdBOEFGMjUxN0FEQjVGMjAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmNwcCAqLywKIAkJCQlB
N0E4QUYyNjE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRkZDOTlE
MjE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcCAq
LywKQEAgLTM2NjcsNiArMzY5Niw3IEBACiAJCQkJRjY5MkE4N0MwMjU1NTk3RDAxRkY2MEY3IC8q
IFJlZ0V4cE9iamVjdC5oICovLAogCQkJCUJDRDIwMkJGMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdF
eHBQcm90b3R5cGUuY3BwICovLAogCQkJCUJDRDIwMkMwMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdF
eHBQcm90b3R5cGUuaCAqLywKKwkJCQkwRjZCMUNCODE4NjEyNDRDMDA4NDVEOTcgLyogUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Nb2RlLmggKi8sCiAJCQkJMEZCN0YzOTExNUVEOEUzODAwRjE2N0IyIC8q
IFJlamVjdC5oICovLAogCQkJCTBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0Nv
dW50ZXIuY3BwICovLAogCQkJCTBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0Nv
dW50ZXIuaCAqLywKQEAgLTQzMjUsNiArNDM1NSw3IEBACiAJCQkJQzJFQUEzRkExNDlBODM1RTAw
RkNFMTEyIC8qIENvcGllZFNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkM4RDAyRDE0QTND
NkUwMDA1NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjVBNTJEMDE3QURENzE3MDA4RUNCMkQgLyogQ29weVRva2VuLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzIyMzlEMTgxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMjIzOUQxOTE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjE4RDE0MDE2NTVDRkQ1MDA2MkJCODEgLyogQ29w
eVdvcmtMaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTQzOTUsNiArNDQyNiw3IEBACiAJCQkJMEZC
QzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzhBOTc3NTE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzhBOTc3NzE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjZCMUNCNjE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlND
YWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZH
Rml4dXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJD
IC8qIERGR0ZsdXNoZWRBdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKQEAgLTQ0MzAsNiArNDQ2
Miw3IEBACiAJCQkJMEZEOEEzMjYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRD
cmVhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0
NDIgLyogREZHT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQzk5RDExODRFQzhBRDAw
OUMxMEFCIC8qIENvbnN0YW50TW9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2QjFDQkExODYx
MjQ0QzAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNUJBMTVFRDE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9y
WFBDQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUMxNkQwMkYxMTAwNTVB
NURCIC8qIERGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtNDU4
OCw2ICs0NjIxLDcgQEAKIAkJCQkwRjQ2ODA4MjE0QkE1NzJEMDBCRkUyNzIgLyogSklURXhjZXB0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTRFMUYxODEyNEFDRTAwOUI2QjREIC8qIEpJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkNDODVBMTBFRTc5
QTQ3MDAyODg2ODIgLyogSklUSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2QjFDQkUx
ODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNEU1NEQxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJh
dGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OTBERDcwMTgyRjQ5OTcwMDU4ODgwNyAvKiBK
U1NldEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU0RTE3RUUyNzQ5MDBBQkIy
MTcgLyogSklUT3BlcmF0aW9uV3JhcHBlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtNDYwMyw2ICs0
NjM3LDcgQEAKIAkJCQkwRkM3MTJFMzE3Q0Q4NzkzMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkY1NEEzMTNCMjhB
QUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDE2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0FjdGl2YXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGNkIxQ0I5MTg2MTI0NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNrTW9kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODQwNDgwMTMxMDIxQTFEOTAwOEU3RjAxIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFw
cGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzYxNDBEMjE4Mjk4MkNCMDA3NTA2MjQg
LyogSlNBcmd1bWVudHNJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC00NjU1LDYgKzQ2OTAs
NyBAQAogCQkJCUJDMThDNDIzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0xvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcwMDg3NDIxN0NCRThFQjAwQzNFNjQzIC8qIEpTTWFwLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjZCMUNDNDE4NjJDNDc4MDA4NDVEOTcgLyogRlRMUmVnaXN0ZXJB
dE9mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4NzRBRTQxNUVCREU0QTAwMkUzNTg3IC8q
IEpTTmFtZVNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNDBFMTZGNUNEMDBCMzQ0
NjAgLyogSlNPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI1MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBKU09iamVjdFJlZi5oIGluIEhlYWRlcnMgKi8sCkBAIC01NDk1LDYgKzU1MzEsNyBA
QAogCQkJCTg2ODgwRjREMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0ZGMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdTU0FD
b252ZXJzaW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RkI0RjQxN0ZDQjkxNzAw
Q0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2
QjFDQkQxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVy
YXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBDRjI0NDIgLyog
REZHVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzI3MTdENTFGNTcwMENBMkM0
MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRDhBMzI5MTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKQEAgLTU1NDksOCArNTU4NiwxMCBAQAogCQkJCTBG
Q0VGQUFCMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjI1RjFCMTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMjVGMUIzMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0
aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2QjFDQzUxODYyQzQ3ODAwODQ1RDk3
IC8qIEZUTFVud2luZEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDMzOUExODAzQURC
NzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEx
NjE3MDZCQjkwMDBCQjcyMkMgLyogRlRMU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2
QjFDQjUxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjIzNUJFMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMjM1QkUzMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDdGMzlDQjEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25Db25z
dHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTU3MzcsNiArNTc3Niw3IEBACiAJCQkJMEY2
NjZFQ0MxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJv
ZmlsZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4
QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNkIx
Q0MzMTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExSZWdpc3RlckF0T2Zmc2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMTM5MTJCMTY3NzFDM0EwMDlDQ0IwNyAvKiBQcm9maWxlclByb2ZpbGVkQnl0
ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAv
KiBQcm9wZXJ0eURlc2NyaXB0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTcxMDdF
QzdFNzAwNjUwNDQ2IC8qIFByb3BlcnR5TmFtZUFycmF5LmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQ29kZVJlZi5oCShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDksOSArMzA5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkKiBkYXRhTG9jYXRpb24oKSBjb25zdCB7
IEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7IHJldHVybiBtX3ZhbHVlOyB9CiAj
ZW5kaWYKIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKKyAgICB0eXBlZGVmIHZvaWQqIChN
YWNyb0Fzc2VtYmxlckNvZGVQdHI6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRv
ciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gIW1f
dmFsdWU7CisgICAgICAgIHJldHVybiAhIW1fdmFsdWUgPyByZWludGVycHJldF9jYXN0PFVuc3Bl
Y2lmaWVkQm9vbFR5cGUqPigxKSA6IDA7CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIG90aGVyKSBjb25zdApAQCAtNDM0LDcgKzQz
NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKU0M6OnRyeVRvRGlzYXNzZW1ibGUobV9j
b2RlUHRyLCBzaXplKCksIHByZWZpeCwgV1RGOjpkYXRhRmlsZSgpKTsKICAgICB9CiAgICAgCi0g
ICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb2RlUHRyOyB9CisgICAgdHlw
ZWRlZiB2b2lkKiAoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7
CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICEhbV9jb2RlUHRyID8gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xU
eXBlKj4oMSkgOiAwOworICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2Fs
bExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMTYwODUxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDE1ICsz
NywxNSBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSwgUmVwYXRjCiB7CiAgICAg
QVNTRVJUKGlzTGlua2VkKCkpOwogICAgIAorICAgIGlmIChPcHRpb25zOjpzaG93RGlzYXNzZW1i
bHkoKSkKKyAgICAgICAgZGF0YUxvZygiVW5saW5raW5nIGNhbGwgaW4gIiwgKnJlcGF0Y2hCdWZm
ZXIuY29kZUJsb2NrKCksICIgYXQgIiwgY29kZU9yaWdpbiwgIlxuIik7CisgICAgCiAgICAgcmVw
YXRjaEJ1ZmZlci5yZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaChSZXBh
dGNoQnVmZmVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3Rlcihob3RQYXRoQmVn
aW4pLCBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oY2FsbGVlR1BSKSwg
MCk7Ci0gICAgaWYgKGlzREZHKSB7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlvbiwgKGNhbGxUeXBlID09IENvbnN0cnVj
dCA/IHZtLmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKSA6IHZtLmdldENU
SVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikpLmNvZGUoKSk7Ci0jZWxzZQotICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgfSBlbHNlCi0gICAgICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlvbiwgY2FsbFR5cGUgPT0gQ29u
c3RydWN0ID8gdm0uZ2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpLmNvZGUo
KSA6IHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKKyAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluaygKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLAorICAgICAg
ICB2bS5nZXRDVElTdHViKGxpbmtUaHVua0dlbmVyYXRvckZvcigKKyAgICAgICAgICAgIGNhbGxU
eXBlID09IENvbnN0cnVjdCA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCwKKyAgICAg
ICAgICAgIHJlcGF0Y2hCdWZmZXIuY29kZUJsb2NrKCktPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpG
VExKSVQgPyBNdXN0UHJlc2VydmVSZWdpc3RlcnMgOiBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJl
cXVpcmVkKSkuY29kZSgpKTsKICAgICBoYXNTZWVuU2hvdWxkUmVwYXRjaCA9IGZhbHNlOwogICAg
IGNhbGxlZS5jbGVhcigpOwogICAgIHN0dWIuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDE2MDg1MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBj
b3B5KQpAQCAtNTYsNyArNTYsNiBAQCBzdHJ1Y3QgQ2FsbExpbmtJbmZvIDogcHVibGljIEJhc2lj
UmF3U2VuCiAgICAgICAgIAogICAgIENhbGxMaW5rSW5mbygpCiAgICAgICAgIDogaGFzU2VlblNo
b3VsZFJlcGF0Y2goZmFsc2UpCi0gICAgICAgICwgaXNERkcoZmFsc2UpCiAgICAgICAgICwgaGFz
U2VlbkNsb3N1cmUoZmFsc2UpCiAgICAgICAgICwgY2FsbFR5cGUoTm9uZSkKICAgICB7CkBAIC04
MCw3ICs3OSw2IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBwdWJsaWMgQmFzaWNSYXdTZW4KICAg
ICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gbGFzdFNlZW5DYWxsZWU7CiAgICAgUmVmUHRyPENs
b3N1cmVDYWxsU3R1YlJvdXRpbmU+IHN0dWI7CiAgICAgYm9vbCBoYXNTZWVuU2hvdWxkUmVwYXRj
aCA6IDE7Ci0gICAgYm9vbCBpc0RGRyA6IDE7CiAgICAgYm9vbCBoYXNTZWVuQ2xvc3VyZSA6IDE7
CiAgICAgdW5zaWduZWQgY2FsbFR5cGUgOiA1OyAvLyBDYWxsVHlwZQogICAgIHVuc2lnbmVkIGNh
bGxlZUdQUiA6IDg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1NywxNyArMjU3LDE1IEBAIHB1Ymxp
YzoKICAgICAvLyBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoY29kZUJsb2NrLT5zcGVjaWFsaXphdGlv
bktpbmQoKSkKICAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gbmV3UmVwbGFjZW1lbnQoKTsKICAg
ICAKLSAgICB2b2lkIHNldEpJVENvZGUoUGFzc1JlZlB0cjxKSVRDb2RlPiBjb2RlLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgY29kZVdpdGhBcml0eUNoZWNrKQorICAgIHZvaWQgc2V0SklUQ29kZShQ
YXNzUmVmUHRyPEpJVENvZGU+IGNvZGUpCiAgICAgewogICAgICAgICBBU1NFUlQobV9oZWFwLT5p
c0RlZmVycmVkKCkpOwogICAgICAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChjb2Rl
LT5zaXplKCkpOwogICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwog
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOyAvLyBUaGlzIGlzIHByb2JhYmx5IG5vdCBu
ZWVkZWQgYmVjYXVzZSB0aGUgbG9jayB3aWxsIGFsc28gZG8gc29tZXRoaW5nIHNpbWlsYXIsIGJ1
dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCiAgICAgICAgIG1faml0Q29kZSA9IGNvZGU7Ci0g
ICAgICAgIG1faml0Q29kZVdpdGhBcml0eUNoZWNrID0gY29kZVdpdGhBcml0eUNoZWNrOwogICAg
IH0KICAgICBQYXNzUmVmUHRyPEpJVENvZGU+IGppdENvZGUoKSB7IHJldHVybiBtX2ppdENvZGU7
IH0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaml0Q29kZVdpdGhBcml0eUNoZWNrKCkgeyBy
ZXR1cm4gbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2s7IH0KICAgICBKSVRDb2RlOjpKSVRUeXBlIGpp
dFR5cGUoKSBjb25zdAogICAgIHsKICAgICAgICAgSklUQ29kZSogaml0Q29kZSA9IG1faml0Q29k
ZS5nZXQoKTsKQEAgLTEwNjcsNyArMTA2NSw2IEBAIHByaXZhdGU6CiAgICAgU2VudGluZWxMaW5r
ZWRMaXN0PExMSW50Q2FsbExpbmtJbmZvLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMTEludENhbGxM
aW5rSW5mbz4+IG1faW5jb21pbmdMTEludENhbGxzOwogI2VuZGlmCiAgICAgUmVmUHRyPEpJVENv
ZGU+IG1faml0Q29kZTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRDb2RlV2l0aEFy
aXR5Q2hlY2s7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+IG1f
c3R1YkluZm9zOwogICAgIFZlY3RvcjxCeVZhbEluZm8+IG1fYnlWYWxJbmZvczsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDE2MDg1MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODAsMTEgKzgwLDE5IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgK
ICAgICAvLyBtYWtlIHN1cmUgdGhhdCBhbGwgSklUIGNvZGUgZ2VuZXJhdGlvbiBkb2VzIGZpbmFs
aXphdGlvbiBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0R2Vu
ZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7Ci0gICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRo
dW5rR2VuZXJhdG9yKTsKLSAgICB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVy
YXRvcik7Ci0gICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcik7
Ci0gICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKTsKLSAgICB2bS5n
ZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7CisgICAgaWYgKG1vZGUg
PT0gREZHTW9kZSkgeworICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpOworICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7
CisgICAgICAgIHZtLmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IpOwor
ICAgICAgICB2bS5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgICAg
ICB2bS5nZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1
bmtHZW5lcmF0b3IpOworICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaGF0UHJl
c2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2xv
c3VyZUNhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgdm0uZ2V0
Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOworICAg
ICAgICB2bS5nZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnc1RodW5r
R2VuZXJhdG9yKTsKKyAgICB9CiAgICAgCiAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJl
ZigKICAgICAgICAgbmV3IFBsYW4oY29kZUJsb2NrLCBtb2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5k
ZXgsIG11c3RIYW5kbGVWYWx1ZXMpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDkg
KzIzMCwxMSBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fanNDYWxscy5zaXplKCk7ICsraSkgewogICAgICAg
ICBDYWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvKGkpOwogICAg
ICAgICBpbmZvLmNhbGxUeXBlID0gbV9qc0NhbGxzW2ldLm1fY2FsbFR5cGU7Ci0gICAgICAgIGlu
Zm8uaXNERkcgPSB0cnVlOwogICAgICAgICBpbmZvLmNvZGVPcmlnaW4gPSBtX2pzQ2FsbHNbaV0u
bV9jb2RlT3JpZ2luOwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsobV9qc0NhbGxzW2ldLm1fc2xv
d0NhbGwsIEZ1bmN0aW9uUHRyKChtX3ZtLT5nZXRDVElTdHViKGluZm8uY2FsbFR5cGUgPT0gQ2Fs
bExpbmtJbmZvOjpDb25zdHJ1Y3QgPyBsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IgOiBsaW5r
Q2FsbFRodW5rR2VuZXJhdG9yKSkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAg
ICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbGlua1RodW5rR2VuZXJhdG9yRm9yKAorICAg
ICAgICAgICAgaW5mby5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA/IENvZGVG
b3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCwKKyAgICAgICAgICAgIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTm90UmVxdWlyZWQpOworICAgICAgICBsaW5rQnVmZmVyLmxpbmsobV9qc0NhbGxzW2ldLm1f
c2xvd0NhbGwsIEZ1bmN0aW9uUHRyKG1fdm0tPmdldENUSVN0dWIoZ2VuZXJhdG9yKS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fanNDYWxsc1tpXS5tX3Nsb3dDYWxsKTsK
ICAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9qc0Nh
bGxzW2ldLm1fdGFyZ2V0VG9DaGVjayk7CiAgICAgICAgIGluZm8uaG90UGF0aE90aGVyID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9qc0NhbGxzW2ldLm1fZmFzdENhbGwpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkocmV2
aXNpb24gMTYwODUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCw5IEBAIEpJVEZpbmFsaXplcjo6fkpJ
VEZpbmFsaXplcigpCiAKIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZSgpCiB7Ci0gICAgbV9q
aXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZihtX2xpbmtCdWZmZXItPmZpbmFsaXplQ29kZVdpdGhv
dXREaXNhc3NlbWJseSgpKTsKLSAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0
Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOworICAgIG1faml0Q29kZS0+aW5pdGlhbGl6
ZUNvZGVSZWYoCisgICAgICAgIG1fbGlua0J1ZmZlci0+ZmluYWxpemVDb2RlV2l0aG91dERpc2Fz
c2VtYmx5KCksIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKKyAgICBtX3BsYW4uY29kZUJsb2Nr
LT5zZXRKSVRDb2RlKG1faml0Q29kZSk7CiAgICAgCiAgICAgZmluYWxpemVDb21tb24oKTsKICAg
ICAKQEAgLTU5LDggKzYwLDkgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKCkKIGJvb2wg
SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
bV93aXRoQXJpdHlDaGVjay5pc0VtcHR5VmFsdWUoKSk7Ci0gICAgbV9qaXRDb2RlLT5pbml0aWFs
aXplQ29kZVJlZihtX2xpbmtCdWZmZXItPmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgp
KTsKLSAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZSwgbV93aXRoQXJp
dHlDaGVjayk7CisgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZigKKyAgICAgICAgbV9s
aW5rQnVmZmVyLT5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoKSwgbV93aXRoQXJpdHlD
aGVjayk7CisgICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUpOwogICAg
IAogICAgIGZpbmFsaXplQ29tbW9uKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE2MDg1MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcwNCwxMSArNzA0LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRDYWxsKE5vZGUqIG5vZGUKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwog
CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwotICAgIEpJVENv
bXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0
aDsKIAogICAgIG1faml0LmVtaXRTdG9yZUNvZGVPcmlnaW4obm9kZS0+Y29kZU9yaWdpbik7CiAg
ICAgCi0gICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVjaywgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoMCkpKTsKKyAgICBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0cldp
dGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVj
aywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCkpOwogCiAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1
bmN0aW9uLCBtX3Njb3BlKSksIHJlc3VsdEdQUik7CiAgICAgbV9qaXQuc3RvcmU2NChyZXN1bHRH
UFIsIGNhbGxlZUZyYW1lU2xvdChKU1N0YWNrOjpTY29wZUNoYWluKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNjA4
NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsOCBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNh
bkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBGdW5jdGlvblJlZW50cnlXYXRjaHBvaW50OgogICAg
IGNhc2UgVmFyaWFibGVXYXRjaHBvaW50OgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CisgICAgY2Fz
ZSBDYWxsOgorICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0QnlJZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTYwODUxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
NyBAQAogI2luY2x1ZGUgIkZUTElubGluZUNhY2hlU2l6ZS5oIgogI2luY2x1ZGUgIkZUTEpJVENv
ZGUuaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKKyNpbmNsdWRlICJGVExVbndpbmRJbmZvLmgi
CiAjaW5jbHVkZSAiSklUU3R1YnMuaCIKICNpbmNsdWRlICJMTFZNQVBJLmgiCiAjaW5jbHVkZSAi
TGlua0J1ZmZlci5oIgpAQCAtNDksNyArNTAsNiBAQCB1c2luZyBuYW1lc3BhY2UgREZHOwogc3Rh
dGljIHVpbnQ4X3QqIG1tQWxsb2NhdGVDb2RlU2VjdGlvbigKICAgICB2b2lkKiBvcGFxdWVTdGF0
ZSwgdWludHB0cl90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCwgdW5zaWduZWQsIGNvbnN0IGNo
YXIqIHNlY3Rpb25OYW1lKQogewotICAgIAogICAgIFN0YXRlJiBzdGF0ZSA9ICpzdGF0aWNfY2Fz
dDxTdGF0ZSo+KG9wYXF1ZVN0YXRlKTsKICAgICAKICAgICBSRUxFQVNFX0FTU0VSVChhbGlnbm1l
bnQgPD0gaml0QWxsb2NhdGlvbkdyYW51bGUpOwpAQCAtNTgsNiArNTgsMTEgQEAgc3RhdGljIHVp
bnQ4X3QqIG1tQWxsb2NhdGVDb2RlU2VjdGlvbigKICAgICAgICAgc3RhdGUuZ3JhcGgubV92bS5l
eGVjdXRhYmxlQWxsb2NhdG9yLmFsbG9jYXRlKAogICAgICAgICAgICAgc3RhdGUuZ3JhcGgubV92
bSwgc2l6ZSwgc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2Nl
ZWQpOwogICAgIAorICAgIGlmICghc3RyY21wKHNlY3Rpb25OYW1lLCAiX19jb21wYWN0X3Vud2lu
ZCIpKSB7CisgICAgICAgIHN0YXRlLmNvbXBhY3RVbndpbmQgPSByZXN1bHQtPnN0YXJ0KCk7Cisg
ICAgICAgIHN0YXRlLmNvbXBhY3RVbndpbmRTaXplID0gcmVzdWx0LT5zaXplSW5CeXRlcygpOwor
ICAgIH0KKyAgICAKICAgICBzdGF0ZS5qaXRDb2RlLT5hZGRIYW5kbGUocmVzdWx0KTsKICAgICBz
dGF0ZS5jb2RlU2VjdGlvbk5hbWVzLmFwcGVuZChzZWN0aW9uTmFtZSk7CiAgICAgCkBAIC0yOTks
NiArMzA0LDQ0IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAg
ICAgICAgfQogICAgIH0KICAgICAKKyAgICAvLyBIYW5kbGluZyBKUyBjYWxscyBpcyB3ZWlyZDog
d2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBzb3J0IHRoZW0gYnkgdGhlIFBDIGluIExMVk0KKyAg
ICAvLyBnZW5lcmF0ZWQgY29kZS4gVGhhdCBpbXBsaWVzIGZpcnN0IHBydW5pbmcgdGhlIG9uZXMg
dGhhdCBMTFZNIGRpZG4ndCBnZW5lcmF0ZS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c3RhdGUuanNDYWxscy5zaXplKCk7ICsraSkgeworICAgICAgICBKU0NhbGwmIGNhbGwgPSBzdGF0
ZS5qc0NhbGxzW2ldOworICAgICAgICAKKyAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0
ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAuZmluZChjYWxsLnN0YWNrbWFwSUQoKSk7CisgICAgICAg
IGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkgeworICAgICAgICAgICAgLy8gSXQgd2FzIG9w
dGltaXplZCBvdXQuIFBydW5lIGl0LgorICAgICAgICAgICAgY2FsbCA9IHN0YXRlLmpzQ2FsbHMu
bGFzdCgpOworICAgICAgICAgICAgc3RhdGUuanNDYWxscy5yZW1vdmVMYXN0KCk7CisgICAgICAg
ICAgICBpLS07CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgY2FsbC5tX2luc3RydWN0aW9uT2Zmc2V0ID0gaXRlci0+dmFsdWUuaW5zdHJ1Y3Rpb25P
ZmZzZXQ7CisgICAgfQorICAgIAorICAgIHN0ZDo6c29ydChzdGF0ZS5qc0NhbGxzLmJlZ2luKCks
IHN0YXRlLmpzQ2FsbHMuZW5kKCkpOworICAgIAorICAgIGNvZGVCbG9jay0+c2V0TnVtYmVyT2ZD
YWxsTGlua0luZm9zKHN0YXRlLmpzQ2FsbHMuc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBzdGF0ZS5qc0NhbGxzLnNpemUoKTsgaS0tOykgeworICAgICAgICBKU0NhbGwmIGNhbGwgPSBz
dGF0ZS5qc0NhbGxzW2ldOworCisgICAgICAgIENDYWxsSGVscGVycyBmYXN0UGF0aEpJVCgmdm0s
IGNvZGVCbG9jayk7CisgICAgICAgIGNhbGwuZW1pdChmYXN0UGF0aEpJVCk7CisgICAgICAgIAor
ICAgICAgICBjaGFyKiBzdGFydE9mSUMgPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1
bmN0aW9uKSArIGNhbGwubV9pbnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAgCisgICAgICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgJmZhc3RQYXRoSklULCBzdGFydE9mSUMsIHNpemVPZkNh
bGwoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtCdWZmZXIuaXNWYWxpZCgpKTsKKyAg
ICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBc3NlbWJsZXJUeXBlX1Q6OmZpbGxOb3Bz
KAorICAgICAgICAgICAgc3RhcnRPZklDICsgbGlua0J1ZmZlci5zaXplKCksIHNpemVPZkNhbGwo
KSAtIGxpbmtCdWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIENhbGxMaW5rSW5mbyYg
aW5mbyA9IGNvZGVCbG9jay0+Y2FsbExpbmtJbmZvKGkpOworICAgICAgICBjYWxsLmxpbmsodm0s
IGxpbmtCdWZmZXIsIGluZm8pOworICAgIH0KKyAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGV4aXRJbmRleCA9
IGppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyBleGl0SW5kZXgtLTspIHsKQEAgLTM5OCw3ICs0NDEs
NyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgRXhlY3V0YWJsZU1l
bW9yeUhhbmRsZSogaGFuZGxlID0gc3RhdGUuaml0Q29kZS0+aGFuZGxlcygpW2ldLmdldCgpOwog
ICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAiR2VuZXJhdGVkIExMVk0gY29k
ZSBmb3IgIiwKLSAgICAgICAgICAgICAgICBDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFw
aC5tX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSwKKyAgICAgICAgICAgICAgICBDb2RlQmxv
Y2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSwK
ICAgICAgICAgICAgICAgICAiICMiLCBpLCAiLCAiLCBzdGF0ZS5jb2RlU2VjdGlvbk5hbWVzW2ld
LCAiOlxuIik7CiAgICAgICAgICAgICBkaXNhc3NlbWJsZSgKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIoaGFuZGxlLT5zdGFydCgpKSwgaGFuZGxlLT5zaXplSW5CeXRlcygp
LApAQCAtNDA5LDE3ICs0NTIsMjEgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSkKICAgICAg
ICAgICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxMU2VjdGlvbldvcmQ+JiBzZWN0aW9uID0gc3Rh
dGUuaml0Q29kZS0+ZGF0YVNlY3Rpb25zKClbaV07CiAgICAgICAgICAgICBkYXRhTG9nKAogICAg
ICAgICAgICAgICAgICJHZW5lcmF0ZWQgTExWTSBkYXRhIHNlY3Rpb24gZm9yICIsCi0gICAgICAg
ICAgICAgICAgQ29kZUJsb2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJ
VENvZGU6OkRGR0pJVCksCisgICAgICAgICAgICAgICAgQ29kZUJsb2NrV2l0aEpJVFR5cGUoc3Rh
dGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCksCiAgICAgICAgICAgICAgICAg
IiAjIiwgaSwgIiwgIiwgc3RhdGUuZGF0YVNlY3Rpb25OYW1lc1tpXSwgIjpcbiIpOwogICAgICAg
ICAgICAgZHVtcERhdGFTZWN0aW9uKHNlY3Rpb24sICIgICAgIik7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCisgICAgc3RhdGUuaml0Q29kZS0+dW53aW5kSW5mby5wYXJzZShzdGF0ZS5jb21wYWN0
VW53aW5kLCBzdGF0ZS5jb21wYWN0VW53aW5kU2l6ZSk7CisgICAgaWYgKERGRzo6c2hvdWxkU2hv
d0Rpc2Fzc2VtYmx5KCkpCisgICAgICAgIGRhdGFMb2coIlVud2luZCBpbmZvIGZvciAiLCBDb2Rl
QmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29kZTo6RlRMSklU
KSwgIjpcbiAgICAiLCBzdGF0ZS5qaXRDb2RlLT51bndpbmRJbmZvLCAiXG4iKTsKKyAgICAKICAg
ICBpZiAoc3RhdGUuc3RhY2ttYXBzU2VjdGlvbi5zaXplKCkpIHsKICAgICAgICAgaWYgKHNob3Vs
ZFNob3dEaXNhc3NlbWJseSgpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAg
ICAgICJHZW5lcmF0ZWQgTExWTSBzdGFja21hcHMgc2VjdGlvbiBmb3IgIiwKLSAgICAgICAgICAg
ICAgICBDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29k
ZTo6REZHSklUKSwgIjpcbiIpOworICAgICAgICAgICAgICAgIENvZGVCbG9ja1dpdGhKSVRUeXBl
KHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpLCAiOlxuIik7CiAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgUmF3IGRhdGE6XG4iKTsKICAgICAgICAgICAgIGR1bXBEYXRh
U2VjdGlvbihzdGF0ZS5zdGFja21hcHNTZWN0aW9uLCAiICAgICIpOwogICAgICAgICB9CkBAIC00
NDYsNyArNDkzLDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAgICAg
ICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBoYW5kbGUgPSBzdGF0ZS5qaXRDb2RlLT5oYW5kbGVz
KClbaV0uZ2V0KCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAg
ICAgIkdlbmVyYXRlZCBMTFZNIGNvZGUgYWZ0ZXIgc3RhY2ttYXAtYmFzZWQgZml4LXVwIGZvciAi
LAotICAgICAgICAgICAgICAgICAgICBDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5t
X2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSwKKyAgICAgICAgICAgICAgICAgICAgQ29kZUJs
b2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCks
CiAgICAgICAgICAgICAgICAgICAgICIgIyIsIGksICIsICIsIHN0YXRlLmNvZGVTZWN0aW9uTmFt
ZXNbaV0sICI6XG4iKTsKICAgICAgICAgICAgICAgICBkaXNhc3NlbWJsZSgKICAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGhhbmRsZS0+c3RhcnQoKSksIGhhbmRsZS0+
c2l6ZUluQnl0ZXMoKSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5l
Q2FjaGVTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TElubGluZUNhY2hlU2l6ZS5jcHAJKHJldmlzaW9uIDE2MDg1MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
NiArNDcsMTEgQEAgc2l6ZV90IHNpemVPZlB1dEJ5SWQoKQogICAgIHJldHVybiAzMjsKIH0KIAor
c2l6ZV90IHNpemVPZkNhbGwoKQoreworICAgIHJldHVybiA0MzsKK30KKwogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgJKHJldmlzaW9uIDE2
MDg1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgewogCiBzaXplX3Qgc2l6ZU9mR2V0QnlJZCgpOwogc2l6ZV90IHNpemVPZlB1dEJ5SWQo
KTsKK3NpemVfdCBzaXplT2ZDYWxsKCk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBv
c2l0b3J5LmgJKHJldmlzaW9uIDE2MDg1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0Myw5IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhmcmFtZUFkZHJlc3Ms
ICJsbHZtLmZyYW1lYWRkcmVzcyIsIGZ1bmN0aW9uVHlwZShwb2ludGVyVHlwZShpbnQ4KSwgaW50
MzIpKSBcCiAgICAgbWFjcm8obXVsV2l0aE92ZXJmbG93MzIsICJsbHZtLnNtdWwud2l0aC5vdmVy
Zmxvdy5pMzIiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDMyLCBib29s
ZWFuKSwgaW50MzIsIGludDMyKSkgXAogICAgIG1hY3JvKG11bFdpdGhPdmVyZmxvdzY0LCAibGx2
bS5zbXVsLndpdGgub3ZlcmZsb3cuaTY0IiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250
ZXh0LCBpbnQ2NCwgYm9vbGVhbiksIGludDY0LCBpbnQ2NCkpIFwKLSAgICBtYWNybyhwYXRjaHBv
aW50SW50NjQsICJsbHZtLmV4cGVyaW1lbnRhbC5wYXRjaHBvaW50Lmk2NCIsIGZ1bmN0aW9uVHlw
ZShpbnQ2NCwgaW50MzIsIGludDMyLCByZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBcCi0gICAgbWFj
cm8ocGF0Y2hwb2ludFZvaWQsICJsbHZtLmV4cGVyaW1lbnRhbC5wYXRjaHBvaW50LnZvaWQiLCBm
dW5jdGlvblR5cGUodm9pZFR5cGUsIGludDMyLCBpbnQzMiwgcmVmOCwgaW50MzIsIFZhcmlhZGlj
KSkgXAotICAgIG1hY3JvKHN0YWNrbWFwLCAibGx2bS5leHBlcmltZW50YWwuc3RhY2ttYXAiLCBm
dW5jdGlvblR5cGUodm9pZFR5cGUsIGludDMyLCBpbnQzMiwgVmFyaWFkaWMpKSBcCisgICAgbWFj
cm8ocGF0Y2hwb2ludEludDY0LCAibGx2bS5leHBlcmltZW50YWwucGF0Y2hwb2ludC5pNjQiLCBm
dW5jdGlvblR5cGUoaW50NjQsIGludDY0LCBpbnQzMiwgcmVmOCwgaW50MzIsIFZhcmlhZGljKSkg
XAorICAgIG1hY3JvKHBhdGNocG9pbnRWb2lkLCAibGx2bS5leHBlcmltZW50YWwucGF0Y2hwb2lu
dC52b2lkIiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQ2NCwgaW50MzIsIHJlZjgsIGludDMy
LCBWYXJpYWRpYykpIFwKKyAgICBtYWNybyhzdGFja21hcCwgImxsdm0uZXhwZXJpbWVudGFsLnN0
YWNrbWFwIiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQ2NCwgaW50MzIsIFZhcmlhZGljKSkg
XAogICAgIG1hY3JvKHN1YldpdGhPdmVyZmxvdzMyLCAibGx2bS5zc3ViLndpdGgub3ZlcmZsb3cu
aTMyIiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQzMiwgYm9vbGVhbiks
IGludDMyLCBpbnQzMikpIFwKICAgICBtYWNybyhzdWJXaXRoT3ZlcmZsb3c2NCwgImxsdm0uc3N1
Yi53aXRoLm92ZXJmbG93Lmk2NCIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwg
aW50NjQsIGJvb2xlYW4pLCBpbnQ2NCwgaW50NjQpKSBcCiAgICAgbWFjcm8odHJhcCwgImxsdm0u
dHJhcCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSkpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkocmV2aXNpb24gMTYwODUxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsOSArNTQs
OSBAQCB2b2lkIEpJVENvZGU6OmFkZERhdGFTZWN0aW9uKFJlZkNvdW50ZWRBCiAgICAgbV9kYXRh
U2VjdGlvbnMuYXBwZW5kKGRhdGFTZWN0aW9uKTsKIH0KIAotdm9pZCBKSVRDb2RlOjppbml0aWFs
aXplRW50cnlwb2ludChDb2RlUmVmIGVudHJ5cG9pbnQpCit2b2lkIEpJVENvZGU6OmluaXRpYWxp
emVBcml0eUNoZWNrRW50cnlwb2ludChDb2RlUmVmIGVudHJ5cG9pbnQpCiB7Ci0gICAgbV9lbnRy
eXBvaW50ID0gZW50cnlwb2ludDsKKyAgICBtX2FyaXR5Q2hlY2tFbnRyeXBvaW50ID0gZW50cnlw
b2ludDsKIH0KIAogdm9pZCBKSVRDb2RlOjppbml0aWFsaXplQWRkcmVzc0ZvckNhbGwoQ29kZVB0
ciBhZGRyZXNzKQpAQCAtNjQsMjEgKzY0LDI1IEBAIHZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUFk
ZHJlc3NGb3JDYWxsKEMKICAgICBtX2FkZHJlc3NGb3JDYWxsID0gYWRkcmVzczsKIH0KIAotSklU
Q29kZTo6Q29kZVB0ciBKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbCgpCitKSVRDb2RlOjpDb2RlUHRy
IEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKFZNJiwgRXhlY3V0YWJsZUJhc2UqLCBBcml0eUNoZWNr
TW9kZSBhcml0eUNoZWNrLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpCiB7Ci0gICAgcmV0dXJu
IG1fYWRkcmVzc0ZvckNhbGw7CisgICAgc3dpdGNoIChhcml0eUNoZWNrKSB7CisgICAgY2FzZSBB
cml0eUNoZWNrTm90UmVxdWlyZWQ6CisgICAgICAgIHJldHVybiBtX2FkZHJlc3NGb3JDYWxsOwor
ICAgIGNhc2UgTXVzdENoZWNrQXJpdHk6CisgICAgICAgIHJldHVybiBtX2FyaXR5Q2hlY2tFbnRy
eXBvaW50LmNvZGUoKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gQ29kZVB0cigpOwogfQogCiB2b2lkKiBKSVRDb2RlOjpleGVjdXRhYmxlQWRk
cmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9lbnRy
eXBvaW50KTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9hZGRyZXNzRm9y
Q2FsbC5leGVjdXRhYmxlQWRkcmVzcygpKSArIG9mZnNldDsKIH0KIAogdm9pZCogSklUQ29kZTo6
ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3QpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9lbnRy
eXBvaW50KTsKLQogICAgIC8vIFdlIGNhbid0IHBhdGNoIEZUTCBjb2RlLCB5ZXQuIEV2ZW4gaWYg
d2UgZGlkLCBpdCdzIG5vdCBjbGVhciB0aGF0IHdlIHdvdWxkIGRvIHNvCiAgICAgLy8gdGhyb3Vn
aCB0aGlzIEFQSS4KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtODcsOCAr
OTEsNiBAQCB2b2lkKiBKSVRDb2RlOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfCiAKIHVuc2ln
bmVkIEpJVENvZGU6Om9mZnNldE9mKHZvaWQqKQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fZW50
cnlwb2ludCk7Ci0KICAgICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgaGF2ZSB2aXNpYmlsaXR5IGlu
dG8gdGhlIEZUTCBjb2RlLgogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
cmV0dXJuIDA7CkBAIC05Niw4ICs5OCw2IEBAIHVuc2lnbmVkIEpJVENvZGU6Om9mZnNldE9mKHZv
aWQqKQogCiBzaXplX3QgSklUQ29kZTo6c2l6ZSgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9l
bnRyeXBvaW50KTsKLQogICAgIC8vIFdlIGRvbid0IGtub3cgdGhlIHNpemUgb2YgRlRMIGNvZGUs
IHlldC4gTWFrZSBhIHdpbGQgZ3Vlc3MuIFRoaXMgaXMgbW9zdGx5IHVzZWQgZm9yCiAgICAgLy8g
R0MgbG9hZCBlc3RpbWF0ZXMuCiAgICAgcmV0dXJuIDEwMDA7CkBAIC0xMDUsOCArMTA1LDYgQEAg
c2l6ZV90IEpJVENvZGU6OnNpemUoKQogCiBib29sIEpJVENvZGU6OmNvbnRhaW5zKHZvaWQqKQog
ewotICAgIFJFTEVBU0VfQVNTRVJUKG1fZW50cnlwb2ludCk7Ci0KICAgICAvLyBXZSBoYXZlIG5v
IGlkZWEgd2hhdCBhZGRyZXNzZXMgdGhlIEZUTCBjb2RlIGNvbnRhaW5zLCB5ZXQuCiAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMTYwODUxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCiAjaW5jbHVkZSAiRlRMT1NS
RXhpdC5oIgogI2luY2x1ZGUgIkZUTFN0YWNrTWFwcy5oIgorI2luY2x1ZGUgIkZUTFVud2luZElu
Zm8uaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiTExWTUFQSS5oIgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkQXJyYXkuaD4KQEAgLTQ2LDE3ICs0NywxNyBAQCBwdWJsaWM6CiAg
ICAgSklUQ29kZSgpOwogICAgIH5KSVRDb2RlKCk7CiAgICAgCi0gICAgQ29kZVB0ciBhZGRyZXNz
Rm9yQ2FsbCgpOwotICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9m
ZnNldCk7Ci0gICAgdm9pZCogZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KTsKLSAg
ICB1bnNpZ25lZCBvZmZzZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUpOwotICAgIHNpemVfdCBz
aXplKCk7Ci0gICAgYm9vbCBjb250YWlucyh2b2lkKik7CisgICAgQ29kZVB0ciBhZGRyZXNzRm9y
Q2FsbChWTSYsIEV4ZWN1dGFibGVCYXNlKiwgQXJpdHlDaGVja01vZGUsIFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uTW9kZSkgT1ZFUlJJREU7CisgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNl
dChzaXplX3Qgb2Zmc2V0KSBPVkVSUklERTsKKyAgICB2b2lkKiBkYXRhQWRkcmVzc0F0T2Zmc2V0
KHNpemVfdCBvZmZzZXQpIE9WRVJSSURFOworICAgIHVuc2lnbmVkIG9mZnNldE9mKHZvaWQqIHBv
aW50ZXJJbnRvQ29kZSkgT1ZFUlJJREU7CisgICAgc2l6ZV90IHNpemUoKSBPVkVSUklERTsKKyAg
ICBib29sIGNvbnRhaW5zKHZvaWQqKSBPVkVSUklERTsKICAgICAKICAgICB2b2lkIGluaXRpYWxp
emVFeGl0VGh1bmtzKENvZGVSZWYpOwogICAgIHZvaWQgYWRkSGFuZGxlKFBhc3NSZWZQdHI8RXhl
Y3V0YWJsZU1lbW9yeUhhbmRsZT4pOwogICAgIHZvaWQgYWRkRGF0YVNlY3Rpb24oUmVmQ291bnRl
ZEFycmF5PExTZWN0aW9uV29yZD4pOwotICAgIHZvaWQgaW5pdGlhbGl6ZUVudHJ5cG9pbnQoQ29k
ZVJlZik7CisgICAgdm9pZCBpbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoQ29kZVJlZik7
CiAgICAgdm9pZCBpbml0aWFsaXplQWRkcmVzc0ZvckNhbGwoQ29kZVB0cik7CiAgICAgCiAgICAg
Y29uc3QgVmVjdG9yPFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPj4mIGhhbmRsZXMoKSBj
b25zdCB7IHJldHVybiBtX2hhbmRsZXM7IH0KQEAgLTcwLDEyICs3MSwxMyBAQCBwdWJsaWM6CiAg
ICAgREZHOjpDb21tb25EYXRhIGNvbW1vbjsKICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdCwg
OD4gb3NyRXhpdDsKICAgICBTdGFja01hcHMgc3RhY2ttYXBzOworICAgIFVud2luZEluZm8gdW53
aW5kSW5mbzsKICAgICAKIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZkNvdW50ZWRBcnJheTxMU2Vj
dGlvbldvcmQ+PiBtX2RhdGFTZWN0aW9uczsKICAgICBWZWN0b3I8UmVmUHRyPEV4ZWN1dGFibGVN
ZW1vcnlIYW5kbGU+PiBtX2hhbmRsZXM7CiAgICAgQ29kZVB0ciBtX2FkZHJlc3NGb3JDYWxsOwot
ICAgIENvZGVSZWYgbV9lbnRyeXBvaW50OworICAgIENvZGVSZWYgbV9hcml0eUNoZWNrRW50cnlw
b2ludDsKICAgICBDb2RlUmVmIG1fZXhpdFRodW5rczsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDE2MDg1MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAzLDEyICsxMDMsMTIgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXpl
RnVuY3Rpb24oKQogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVjazsKICAg
ICBpZiAoYXJpdHlDaGVjay5pc1NldCgpKQogICAgICAgICB3aXRoQXJpdHlDaGVjayA9IGVudHJ5
cG9pbnRMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGFyaXR5Q2hlY2spOwotICAgIGppdENvZGUtPmlu
aXRpYWxpemVFbnRyeXBvaW50KAorICAgIGppdENvZGUtPmluaXRpYWxpemVBcml0eUNoZWNrRW50
cnlwb2ludCgKICAgICAgICAgRklOQUxJWkVfREZHX0NPREUoCiAgICAgICAgICAgICAqZW50cnlw
b2ludExpbmtCdWZmZXIsCiAgICAgICAgICAgICAoIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAl
cyB3aXRoIExMVk0gZ2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0
aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jay5nZXQoKSwgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgp
LCBmdW5jdGlvbikpKTsKICAgICAKLSAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKGpp
dENvZGUsIHdpdGhBcml0eUNoZWNrKTsKKyAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2Rl
KGppdENvZGUpOwogICAgIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExKU0NhbGwuaCIKKworI2lmIEVOQUJMRShGVExfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK0pTQ2FsbDo6SlNDYWxsKHVu
c2lnbmVkIHN0YWNrbWFwSUQsIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUsIENvZGVP
cmlnaW4gY29kZU9yaWdpbikKKyAgICA6IG1fc3RhY2ttYXBJRChzdGFja21hcElEKQorICAgICwg
bV9jYWxsVHlwZShjYWxsVHlwZSkKKyAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQorICAg
ICwgbV9pbnN0cnVjdGlvbk9mZnNldCgwKQoreworfQorCit2b2lkIEpTQ2FsbDo6ZW1pdChDQ2Fs
bEhlbHBlcnMmIGppdCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQu
YnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJ
bmZvOjpyZWdUMCwgbV90YXJnZXRUb0NoZWNrLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoMCkpOworICAgIAorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFp
bigpKSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDEpOworICAgIGppdC5zdG9yZTY0KAorICAgICAg
ICBHUFJJbmZvOjpyZWdUMSwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAgICAgIHNp
emVvZihSZWdpc3RlcikgKiAoSlNTdGFjazo6U2NvcGVDaGFpbiAtIEpTU3RhY2s6OkNhbGxlckZy
YW1lQW5kUENTaXplKSkpOworICAgIAorICAgIG1fZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsK
KyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7CisgICAgCisgICAgc2xv
d1BhdGgubGluaygmaml0KTsKKyAgICBtX3Nsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAg
CisgICAgZG9uZS5saW5rKCZqaXQpOworfQorCit2b2lkIEpTQ2FsbDo6bGluayhWTSYgdm0sIExp
bmtCdWZmZXImIGxpbmtCdWZmZXIsIENhbGxMaW5rSW5mbyYgY2FsbEluZm8pCit7CisgICAgVGh1
bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbGlua1RodW5rR2VuZXJhdG9yRm9yKAorICAgICAgICBt
X2NhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0ID8gQ29kZUZvckNvbnN0cnVjdCA6
IENvZGVGb3JDYWxsLAorICAgICAgICBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOworICAgIAorICAg
IGxpbmtCdWZmZXIubGluaygKKyAgICAgICAgbV9zbG93Q2FsbCwgRnVuY3Rpb25QdHIodm0uZ2V0
Q1RJU3R1YihnZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgCisg
ICAgY2FsbEluZm8uY2FsbFR5cGUgPSBtX2NhbGxUeXBlOworICAgIGNhbGxJbmZvLmNvZGVPcmln
aW4gPSBtX2NvZGVPcmlnaW47CisgICAgY2FsbEluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9zbG93Q2FsbCk7CisgICAgY2FsbEluZm8uaG90
UGF0aEJlZ2luID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fdGFyZ2V0VG9DaGVjayk7CisgICAg
Y2FsbEluZm8uaG90UGF0aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9m
YXN0Q2FsbCk7CisgICAgY2FsbEluZm8uY2FsbGVlR1BSID0gR1BSSW5mbzo6cmVnVDA7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBGVExKU0NhbGxfaAorI2RlZmluZSBGVExKU0NhbGxfaAorCisjaWYgRU5B
QkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWxs
TGlua0luZm8uaCIKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEpTQ2FsbCB7
CitwdWJsaWM6CisgICAgSlNDYWxsKHVuc2lnbmVkIHN0YWNrbWFwSUQsIENhbGxMaW5rSW5mbzo6
Q2FsbFR5cGUsIENvZGVPcmlnaW4pOworICAgIAorICAgIHZvaWQgZW1pdChDQ2FsbEhlbHBlcnMm
KTsKKyAgICB2b2lkIGxpbmsoVk0mLCBMaW5rQnVmZmVyJiwgQ2FsbExpbmtJbmZvJik7CisgICAg
CisgICAgdW5zaWduZWQgc3RhY2ttYXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEpTQ2FsbCYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9pbnN0cnVjdGlvbk9mZnNldCA8IG90aGVyLm1faW5zdHJ1
Y3Rpb25PZmZzZXQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3N0YWNr
bWFwSUQ7CisgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBtX2NhbGxUeXBlOworICAgIENvZGVP
cmlnaW4gbV9jb2RlT3JpZ2luOworICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIG1fdGFy
Z2V0VG9DaGVjazsKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgbV9mYXN0Q2FsbDsKKyAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgbV9zbG93Q2FsbDsKKworcHVibGljOgorICAgIHVpbnQzMl90IG1faW5z
dHJ1Y3Rpb25PZmZzZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRp
ZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEpTQ2FsbF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZp
c2lvbiAxNjA4NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgICAgIG1fZnRsU3RhdGUuY2FwdHVyZWRTdGFja21hcElEID0gbV9zdGFja21hcElE
cysrOwogICAgICAgICBtX291dC5jYWxsKAotICAgICAgICAgICAgbV9vdXQuc3RhY2ttYXBJbnRy
aW5zaWMoKSwgbV9vdXQuY29uc3RJbnQzMihtX2Z0bFN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCks
CisgICAgICAgICAgICBtX291dC5zdGFja21hcEludHJpbnNpYygpLCBtX291dC5jb25zdEludDY0
KG1fZnRsU3RhdGUuY2FwdHVyZWRTdGFja21hcElEKSwKICAgICAgICAgICAgIG1fb3V0LmludDMy
WmVybywgY2FwdHVyZWRBbGxvY2EpOwogICAgICAgICAKICAgICAgICAgbV9jYWxsRnJhbWUgPSBt
X291dC5wdHJUb0ludCgKQEAgLTEyOTcsNyArMTI5Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwoCiAgICAgICAgICAgICBtX291dC5wYXRj
aHBvaW50SW50NjRJbnRyaW5zaWMoKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3Rh
Y2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mR2V0QnlJZCgpKSwKKyAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50NjQoc3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mR2V0
QnlJZCgpKSwKICAgICAgICAgICAgIGNvbnN0TnVsbChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJ
bnQzMigxKSwgYmFzZSk7CiAgICAgICAgIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24o
Y2FsbCwgTExWTUFueVJlZ0NhbGxDb252KTsKICAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsKQEAg
LTEzMjIsNyArMTMyMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgY2Fs
bCA9IG1fb3V0LmNhbGwoCiAgICAgICAgICAgICBtX291dC5wYXRjaHBvaW50Vm9pZEludHJpbnNp
YygpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihzdGFja21hcElEKSwgbV9vdXQuY29u
c3RJbnQzMihzaXplT2ZQdXRCeUlkKCkpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChz
dGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXplT2ZQdXRCeUlkKCkpLAogICAgICAgICAg
ICAgY29uc3ROdWxsKG1fb3V0LnJlZjgpLCBtX291dC5jb25zdEludDMyKDIpLCBiYXNlLCB2YWx1
ZSk7CiAgICAgICAgIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFu
eVJlZ0NhbGxDb252KTsKICAgICAgICAgCkBAIC0yNDM3LDM1ICsyNDM3LDQwIEBAIHByaXZhdGU6
CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2FsbE9yQ29uc3RydWN0KCkKICAgICB7Ci0gICAgICAg
IC8vIEZJWE1FOiBUaGlzIGlzIHVuYWNjZXB0YWJseSBzbG93LgotICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIxCisgICAgICAgIGludCBkdW1t
eVRoaXNBcmd1bWVudCA9IG1fbm9kZS0+b3AoKSA9PSBDYWxsID8gMCA6IDE7CisgICAgICAgIGlu
dCBudW1QYXNzZWRBcmdzID0gbV9ub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKKyAgICAgICAgaW50
IG51bUFyZ3MgPSBudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQ7CiAgICAgICAgIAot
ICAgICAgICBKX0pJVE9wZXJhdGlvbl9FIGZ1bmN0aW9uID0KLSAgICAgICAgICAgIG1fbm9kZS0+
b3AoKSA9PSBDYWxsID8gb3BlcmF0aW9uRlRMQ2FsbCA6IG9wZXJhdGlvbkZUTENvbnN0cnVjdDsK
KyAgICAgICAgTFZhbHVlIGNhbGxlZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDApKTsKICAgICAgICAgCi0gICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IG1f
bm9kZS0+b3AoKSA9PSBDYWxsID8gMCA6IDE7CisgICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQg
PSBtX3N0YWNrbWFwSURzKys7CiAgICAgICAgIAotICAgICAgICBpbnQgbnVtUGFzc2VkQXJncyA9
IG1fbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CisgICAgICAgIFZlY3RvcjxMVmFsdWU+IGFyZ3Vt
ZW50czsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDY0KHN0YWNrbWFw
SUQpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDMyKHNpemVPZkNh
bGwoKSkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNvbnN0TnVsbChtX291dC5yZWY4KSk7
CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMigxICsgSlNTdGFjazo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplICsgbnVt
QXJncykpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNhbGxlZSk7IC8vIGNhbGxlZSAtPiAl
cmF4CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoZ2V0VW5kZWYobV9vdXQuaW50NjQpKTsgLy8g
Y29kZSBibG9jaworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGdldFVuZGVmKG1fb3V0LmludDY0
KSk7IC8vIHNjb3BlIGNoYWluCisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoY2FsbGVlKTsgLy8g
Y2FsbGVlIC0+IHN0YWNrCisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQ2
NChudW1BcmdzKSk7IC8vIGFyZ3VtZW50IGNvdW50IGFuZCB6ZXJvcyBmb3IgdGhlIHRhZworICAg
ICAgICBpZiAoZHVtbXlUaGlzQXJndW1lbnQpCisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5k
KGdldFVuZGVmKG1fb3V0LmludDY0KSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
UGFzc2VkQXJnczsgKytpKQorICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChsb3dKU1ZhbHVl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxICsgaSkpKTsKICAgICAgICAgCi0gICAgICAg
IExWYWx1ZSBjYWxsZWVGcmFtZSA9IG1fb3V0LmFkZCgKLSAgICAgICAgICAgIG1fY2FsbEZyYW1l
LAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIobV9ncmFwaC5zdGFja1BvaW50ZXJPZmZz
ZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOworICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7CiAgICAg
ICAgIAotICAgICAgICBtX291dC5zdG9yZTMyKAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQz
MihudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQpLAotICAgICAgICAgICAgcGF5bG9h
ZEZvcihjYWxsZWVGcmFtZSwgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwotICAgICAgICBtX291
dC5zdG9yZTY0KG1fY2FsbEZyYW1lLCBjYWxsZWVGcmFtZSwgbV9oZWFwcy5DYWxsRnJhbWVfY2Fs
bGVyRnJhbWUpOwotICAgICAgICBtX291dC5zdG9yZTY0KAotICAgICAgICAgICAgbG93SlNWYWx1
ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLAotICAgICAgICAgICAgYWRkcmVzc0Zv
cihjYWxsZWVGcmFtZSwgSlNTdGFjazo6Q2FsbGVlKSk7CisgICAgICAgIExWYWx1ZSBjYWxsID0g
bV9vdXQuY2FsbChtX291dC5wYXRjaHBvaW50SW50NjRJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsK
KyAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNV2ViS2l0
SlNDYWxsQ29udik7CiAgICAgICAgIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBh
c3NlZEFyZ3M7ICsraSkgewotICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAg
ICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxICsgaSkpLAotICAg
ICAgICAgICAgICAgIGFkZHJlc3NGb3IoY2FsbGVlRnJhbWUsIHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGkgKyBkdW1teVRoaXNBcmd1bWVudCkub2Zmc2V0KCkpKTsKLSAgICAgICAgfQorICAg
ICAgICBtX2Z0bFN0YXRlLmpzQ2FsbHMuYXBwZW5kKEpTQ2FsbCgKKyAgICAgICAgICAgIHN0YWNr
bWFwSUQsCisgICAgICAgICAgICBtX25vZGUtPm9wKCkgPT0gQ2FsbCA/IENhbGxMaW5rSW5mbzo6
Q2FsbCA6IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0LAorICAgICAgICAgICAgbV9ub2RlLT5jb2Rl
T3JpZ2luKSk7CiAgICAgICAgIAotICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5vcGVy
YXRpb24oZnVuY3Rpb24pLCBjYWxsZWVGcmFtZSkpOworICAgICAgICBzZXRKU1ZhbHVlKGNhbGwp
OwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVKdW1wKCkKQEAgLTQwOTIsNyArNDA5Nyw3
IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBleGl0Lm1fc3RhY2ttYXBJRCA9IG1fc3RhY2tt
YXBJRHMrKzsKICAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBtX291dC5jb25zdEludDMyKE1h
Y3JvQXNzZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkpKTsKLSAgICAgICAgYXJndW1l
bnRzLmluc2VydCgwLCBtX291dC5jb25zdEludDMyKGV4aXQubV9zdGFja21hcElEKSk7CisgICAg
ICAgIGFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQ2NChleGl0Lm1fc3RhY2ttYXBJ
RCkpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuY2FsbChtX291dC5zdGFja21hcEludHJpbnNp
YygpLCBhcmd1bWVudHMpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRW50cnkuY3BwCShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCB2
b2lkKiBwcmVwYXJlT1NSRW50cnkoCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lID0gZGZnQ29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAg
ICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGRmZ0NvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCk7CiAgICAgREZHOjpKSVRDb2RlKiBkZmdDb2RlID0gZGZnQ29kZUJsb2NrLT5qaXRDb2Rl
KCktPmRmZygpOwogICAgIEZvck9TUkVudHJ5SklUQ29kZSogZW50cnlDb2RlID0gZW50cnlDb2Rl
QmxvY2stPmppdENvZGUoKS0+ZnRsRm9yT1NSRW50cnkoKTsKICAgICAKQEAgLTg3LDcgKzg4LDkg
QEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KAogICAgIAogICAgIGV4ZWMtPnNldENvZGVCbG9jayhl
bnRyeUNvZGVCbG9jayk7CiAgICAgCi0gICAgdm9pZCogcmVzdWx0ID0gZW50cnlDb2RlLT5hZGRy
ZXNzRm9yQ2FsbCgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgdm9pZCogcmVzdWx0ID0gZW50
cnlDb2RlLT5hZGRyZXNzRm9yQ2FsbCgKKyAgICAgICAgdm0sIGV4ZWN1dGFibGUsIEFyaXR5Q2hl
Y2tOb3RSZXF1aXJlZCwKKyAgICAgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCku
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAg
ICAgICBkYXRhTG9nKCIgICAgRW50cnkgd2lsbCBzdWNjZWVkLCBnb2luZyB0byBhZGRyZXNzIiwg
UmF3UG9pbnRlcihyZXN1bHQpLCAiXG4iKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDE2MDg1MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOSBAQAogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNp
bmNsdWRlICJGVExPU1JFeGl0LmgiCiAjaW5jbHVkZSAiRlRMU2F2ZVJlc3RvcmUuaCIKKyNpbmNs
dWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIk9wZXJhdGlv
bnMuaCIKKyNpbmNsdWRlICJSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaCIK
ICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKQEAgLTYxLDkgKzYzLDEwIEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgIAog
ICAgIC8vIFdlIG5lZWQgc2NyYXRjaCBzcGFjZSB0byBzYXZlIGFsbCByZWdpc3RlcnMgYW5kIHRv
IGJ1aWxkIHVwIHRoZSBKU1N0YWNrLgogICAgIC8vIFVzZSBhIHNjcmF0Y2ggYnVmZmVyIHRvIHRy
YW5zZmVyIGFsbCB2YWx1ZXMuCi0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZt
LT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogZXhpdC5tX3Zh
bHVlcy5zaXplKCkgKyByZXF1aXJlZFNjcmF0Y2hNZW1vcnlTaXplSW5CeXRlcygpKTsKKyAgICBT
Y3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkgKiBleGl0Lm1fdmFsdWVzLnNpemUoKSArIHJlcXVpcmVkU2Ny
YXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkgKyBqaXRDb2RlLT51bndpbmRJbmZvLm1fcmVnaXN0ZXJz
LnNpemUoKSAqIHNpemVvZih1aW50NjRfdCkpOwogICAgIEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNo
ID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1
ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IDA7CiAgICAgY2hhciogcmVnaXN0ZXJTY3JhdGNoID0gYml0
d2lzZV9jYXN0PGNoYXIqPihzY3JhdGNoICsgZXhpdC5tX3ZhbHVlcy5zaXplKCkpOworICAgIHVp
bnQ2NF90KiB1bndpbmRTY3JhdGNoID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4ocmVnaXN0ZXJT
Y3JhdGNoICsgcmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMoKSk7CiAgICAgCiAgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgc2F2ZUFsbFJlZ2lzdGVycygpIGhhcyBhIHBsYWNlIG9uIHRvcCBv
ZiB0aGUgc3RhY2sgdG8gc3BpbGwgdGhpbmdzLiBUaGF0CiAgICAgLy8gZnVuY3Rpb24gZXhwZWN0
cyB0byBiZSBhYmxlIHRvIHVzZSB0b3Agb2Ygc3RhY2sgZm9yIHNjcmF0Y2ggbWVtb3J5LgpAQCAt
MTM5LDYgKzE0Miw3OCBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICAgICAgaml0LnN0
b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2ggKyBpbmRleCk7CiAgICAgfQogICAgIAorICAg
IC8vIEhlbmNlZm9ydGggd2UgbWFrZSBpdCBsb29rIGxpa2Ugd2UgaGFkIGNhbGxlZCB0aHJvdWdo
IGEgcmVnaXN0ZXIgcHJlc2VydmF0aW9uIHdyYXBwZXIuCisgICAgLy8gVGhpcyBpbXBsaWVzIHRo
YXQgRlAgbXVzdCBiZSBudWRnZWQgZG93biBieSBhIGNlcnRhaW4gYW1vdW50LiBUaGVuIHdlIHJl
c3RvcmUgdGhlCisgICAgLy8gdmFyaW91cyB0aGluZ3MgYWNjb3JkaW5nIHRvIGVpdGhlciBleGl0
Lm1fdmFsdWVzIG9yIGJ5IGNvcHlpbmcgZnJvbSB0aGUgb2xkIGZyYW1lLCBhbmQKKyAgICAvLyBm
aW5hbGx5IHdlIHNhdmUgdGhlIHZhcmlvdXMgY2FsbGVlLXNhdmUgcmVnaXN0ZXJzIGludG8gd2hl
cmUgdGhlIHJlc3RvcmF0aW9uIHRodW5rIHdvdWxkCisgICAgLy8gcmVzdG9yZSB0aGVtIGZyb20u
CisgICAgCisgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ2lzdGVyUHJlc2VydmF0aW9uT2Zmc2V0
KCk7CisgICAgUmVnaXN0ZXJTZXQgdG9TYXZlID0gcmVnaXN0ZXJzVG9QcmVzZXJ2ZSgpOworICAg
IAorICAgIC8vIEJlZm9yZSB3ZSBzdGFydCBtZXNzaW5nIHdpdGggdGhlIGZyYW1lLCB3ZSBuZWVk
IHRvIHNldCBhc2lkZSBhbnkgcmVnaXN0ZXJzIHRoYXQgdGhlCisgICAgLy8gRlRMIGNvZGUgd2Fz
IHByZXNlcnZpbmcuCisgICAgZm9yICh1bnNpZ25lZCBpID0gaml0Q29kZS0+dW53aW5kSW5mby5t
X3JlZ2lzdGVycy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRy
eSA9IGppdENvZGUtPnVud2luZEluZm8ubV9yZWdpc3RlcnNbaV07CisgICAgICAgIGppdC5sb2Fk
NjQoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6
ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpKSwKKyAgICAgICAgICAgIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHVud2luZFNj
cmF0Y2ggKyBpKTsKKyAgICB9CisgICAgCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OnBh
eWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIEdQUkluZm86OnJlZ1QyKTsKKworICAg
IC8vIEZpcnN0IHNldCB1cCBTUCBzbyB0aGF0IG91ciBkYXRhIGRvZXNuJ3QgZ2V0IGNsb2JiZXJl
ZCBieSBzaWduYWxzLgorICAgIGppdC5hZGRQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoCisgICAgICAgICAgICAtcmVnaXN0ZXJQcmVzZXJ2YXRpb25PZmZzZXQoKSAt
IGV4aXQubV92YWx1ZXMubnVtYmVyT2ZMb2NhbHMoKSAqIHNpemVvZihSZWdpc3RlcikgLQorICAg
ICAgICAgICAgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLAorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgCisgICAgaml0LnN1YlB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihyZWdpc3RlclByZXNlcnZhdGlvbk9mZnNldCgpKSwKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAKKyAgICAvLyBDb3B5
IHRoZSBvbGQgZnJhbWUgZGF0YSBpbnRvIGl0cyBuZXcgbG9jYXRpb24uCisgICAgaml0LmFkZDMy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQ
b2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QxKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgIGppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmxvYWQ2NChNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgb2Zmc2V0KSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgaml0
LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihSZWdpc3RlcikpLCBH
UFJJbmZvOjpyZWdUMSk7CisgICAgaml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgR1BSSW5mbzo6cmVnVDIpLmxpbmtUbyhsb29wLCAmaml0KTsKKyAgICAKKyAgICAvLyBB
dCB0aGlzIHBvaW50IHJlZ1QxIHBvaW50cyB0byB3aGVyZSB3ZSB3b3VsZCBzYXZlIG91ciByZWdp
c3RlcnMuIFNhdmUgdGhlbSBoZXJlLgorICAgIHB0cmRpZmZfdCBjdXJyZW50T2Zmc2V0ID0gMDsK
KyAgICBmb3IgKEdQUlJlZyBncHIgPSBBc3NlbWJseUhlbHBlcnM6OmZpcnN0UmVnaXN0ZXIoKTsg
Z3ByIDw9IEFzc2VtYmx5SGVscGVyczo6bGFzdFJlZ2lzdGVyKCk7IGdwciA9IHN0YXRpY19jYXN0
PEdQUlJlZz4oZ3ByICsgMSkpIHsKKyAgICAgICAgaWYgKCF0b1NhdmUuZ2V0KGdwcikpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY3VycmVudE9mZnNldCArPSBzaXplb2YoUmVnaXN0
ZXIpOworICAgICAgICB1bnNpZ25lZCB1bndpbmRJbmRleCA9IGppdENvZGUtPnVud2luZEluZm8u
aW5kZXhPZihncHIpOworICAgICAgICBpZiAodW53aW5kSW5kZXggPT0gVUlOVF9NQVgpIHsKKyAg
ICAgICAgICAgIC8vIFRoZSBGVEwgY29tcGlsYXRpb24gZGlkbid0IHByZXNlcnZlIHRoaXMgcmVn
aXN0ZXIuIFRoaXMgbWVhbnMgdGhhdCBpdCBhbHNvCisgICAgICAgICAgICAvLyBkaWRuJ3QgdXNl
IHRoZSByZWdpc3Rlci4gU28gaXRzIHZhbHVlIGF0IHRoZSBiZWdpbm5pbmcgb2YgT1NSIGV4aXQg
c2hvdWxkIGJlCisgICAgICAgICAgICAvLyBwcmVzZXJ2ZWQgYnkgdGhlIHRodW5rLiBMdWNraWx5
LCB3ZSBzYXZlZCBhbGwgcmVnaXN0ZXJzIGludG8gdGhlIHJlZ2lzdGVyCisgICAgICAgICAgICAv
LyBzY3JhdGNoIGJ1ZmZlciwgc28gd2UgY2FuIHJlc3RvcmUgdGhlbSBmcm9tIHRoZXJlLgorICAg
ICAgICAgICAgaml0LmxvYWQ2NChyZWdpc3RlclNjcmF0Y2ggKyBvZmZzZXRPZkdQUihncHIpLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGUgRlRM
IGNvbXBpbGF0aW9uIHByZXNlcnZlZCB0aGUgcmVnaXN0ZXIuIEl0cyBuZXcgdmFsdWUgaXMgdGhl
cmVmb3JlCisgICAgICAgICAgICAvLyBpcnJlbGV2YW50LCBidXQgd2UgY2FuIGdldCB0aGUgdmFs
dWUgdGhhdCB3YXMgcHJlc2VydmVkIGJ5IHVzaW5nIHRoZSB1bndpbmQKKyAgICAgICAgICAgIC8v
IGRhdGEuIFdlJ3ZlIGFscmVhZHkgY29waWVkIGFsbCB1bndpbmQtYWJsZSBwcmVzZXJ2ZWQgcmVn
aXN0ZXJzIGludG8gdGhlIHVud2luZAorICAgICAgICAgICAgLy8gc2NyYXRjaCBidWZmZXIsIHNv
IHdlIGNhbiBnZXQgaXQgZnJvbSB0aGVyZS4KKyAgICAgICAgICAgIGppdC5sb2FkNjQodW53aW5k
U2NyYXRjaCArIHVud2luZEluZGV4LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIH0KKyAgICAg
ICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMSwgY3VycmVudE9mZnNldCkpOworICAgIH0KKyAgICAKKyAgICAvLyBXZSBu
ZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIHJldHVybiBpbnRvIHRoZSByZWdpc3RlciByZXN0b3Jh
dGlvbiB0aHVuay4KKyAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNy
b0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENPZmZz
ZXQoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAs
IEdQUkluZm86OnJlZ1QxKTsKKyAgICBqaXQuc3RvcmVQdHIoCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHZtLT5nZXRDVElTdHViKHJlZ2lzdGVyUmVzdG9yYXRpb25UaHVu
a0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpLAorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENh
bGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSkpOworICAgIAogICAgIC8vIE5vdyBnZXQgc3RhdGUg
b3V0IG9mIHRoZSBzY3JhdGNoIGJ1ZmZlciBhbmQgcGxhY2UgaXQgYmFjayBpbnRvIHRoZSBzdGFj
ay4gVGhpcyBwYXJ0IGRvZXMKICAgICAvLyBhbGwgcmVib3hpbmcuCiAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyBpbmRleC0tOykgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExSZWdpc3RlckF0T2Zmc2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFJlZ2lzdGVyQXRPZmZzZXQuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExSZWdpc3RlckF0T2Zmc2V0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGVExSZWdpc3RlckF0T2Zmc2V0LmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lkIFJlZ2lzdGVyQXRPZmZzZXQ6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoZ3ByKCksICIgYXQgIiwg
b2Zmc2V0KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExSZWdp
c3RlckF0T2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExSZWdpc3RlckF0T2Zmc2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFJlZ2lzdGVyQXRPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgRlRMUmVnaXN0ZXJBdE9mZnNldF9oCisjZGVmaW5lIEZUTFJlZ2lzdGVyQXRPZmZzZXRfaAor
CisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSA8
d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwor
Y2xhc3MgUmVnaXN0ZXJBdE9mZnNldCB7CitwdWJsaWM6CisgICAgUmVnaXN0ZXJBdE9mZnNldCgp
CisgICAgICAgIDogbV9ncHIoSW52YWxpZEdQUlJlZykKKyAgICAgICAgLCBtX29mZnNldCgwKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgUmVnaXN0ZXJBdE9mZnNldChHUFJSZWcgZ3ByLCBwdHJk
aWZmX3Qgb2Zmc2V0KQorICAgICAgICA6IG1fZ3ByKGdwcikKKyAgICAgICAgLCBtX29mZnNldChv
ZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsg
cmV0dXJuIG1fZ3ByID09IEludmFsaWRHUFJSZWc7IH0KKyAgICAKKyAgICBHUFJSZWcgZ3ByKCkg
Y29uc3QgeyByZXR1cm4gbV9ncHI7IH0KKyAgICBwdHJkaWZmX3Qgb2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaXN0
ZXJBdE9mZnNldCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZ3ByKCkgPT0g
b3RoZXIuZ3ByKCkgJiYgb2Zmc2V0KCkgPT0gb3RoZXIub2Zmc2V0KCk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKGdwcigpICE9IG90aGVyLmdwcigpKQorICAgICAgICAgICAgcmV0
dXJuIGdwcigpIDwgb3RoZXIuZ3ByKCk7CisgICAgICAgIHJldHVybiBvZmZzZXQoKSA8IG90aGVy
Lm9mZnNldCgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgR1BSUmVnIGdldEdQUihSZWdpc3Rl
ckF0T2Zmc2V0KiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUtPmdwcigpOyB9CisgICAgCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIEdQUlJlZyBt
X2dwcjsKKyAgICBwdHJkaWZmX3QgbV9vZmZzZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTFJlZ2lz
dGVyQXRPZmZzZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNr
TWFwcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFj
a01hcHMuY3BwCShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFN0YWNrTWFwcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDkgQEAgdm9pZCBT
dGFja01hcHM6OkxvY2F0aW9uOjpyZXN0b3JlSW50bygKIAogYm9vbCBTdGFja01hcHM6OlJlY29y
ZDo6cGFyc2UoRGF0YVZpZXcqIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQpCiB7Ci0gICAgcGF0Y2hw
b2ludElEID0gdmlldy0+cmVhZDx1aW50MzJfdD4ob2Zmc2V0LCB0cnVlKTsKKyAgICBpbnQ2NF90
IGlkID0gdmlldy0+cmVhZDxpbnQ2NF90PihvZmZzZXQsIHRydWUpOworICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxpbnQzMl90PihpZCkgPT0gaWQpOworICAgIHBhdGNocG9pbnRJRCA9IHN0YXRpY19j
YXN0PHVpbnQzMl90PihpZCk7CiAgICAgaWYgKHN0YXRpY19jYXN0PGludDMyX3Q+KHBhdGNocG9p
bnRJRCkgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBAIC05MCw2ICs5MiwxMyBA
QCBib29sIFN0YWNrTWFwczo6UmVjb3JkOjpwYXJzZShEYXRhVmlldyogCiAgICAgd2hpbGUgKGxl
bmd0aC0tKQogICAgICAgICBsb2NhdGlvbnMuYXBwZW5kKHJlYWRPYmplY3Q8TG9jYXRpb24+KHZp
ZXcsIG9mZnNldCkpOwogICAgIAorICAgIHVuc2lnbmVkIG51bUxpdmVPdXRzID0gdmlldy0+cmVh
ZDx1aW50MTZfdD4ob2Zmc2V0LCB0cnVlKTsKKyAgICB3aGlsZSAobnVtTGl2ZU91dHMtLSkgewor
ICAgICAgICB2aWV3LT5yZWFkPHVpbnQxNl90PihvZmZzZXQsIHRydWUpOyAvLyByZWdudW0KKyAg
ICAgICAgdmlldy0+cmVhZDx1aW50OF90PihvZmZzZXQsIHRydWUpOyAvLyByZXNlcnZlZAorICAg
ICAgICB2aWV3LT5yZWFkPHVpbnQ4X3Q+KG9mZnNldCwgdHJ1ZSk7IC8vIHNpemUgaW4gYnl0ZXMK
KyAgICB9CisgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU3RhdGUuY3BwCShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBTdGF0ZTo6U3RhdGUoR3JhcGgmIGdyYXBoKQogICAgICwgbW9kdWxlKDApCiAgICAgLCBmdW5j
dGlvbigwKQogICAgICwgZ2VuZXJhdGVkRnVuY3Rpb24oMCkKKyAgICAsIGNvbXBhY3RVbndpbmQo
MCkKKyAgICAsIGNvbXBhY3RVbndpbmRTaXplKDApCiB7CiAgICAgc3dpdGNoIChncmFwaC5tX3Bs
YW4ubW9kZSkgewogICAgIGNhc2UgRlRMTW9kZTogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU3RhdGUuaAkocmV2aXNpb24gMTYwODUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVk
ZSAiRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgog
I2luY2x1ZGUgIkZUTEpJVEZpbmFsaXplci5oIgorI2luY2x1ZGUgIkZUTEpTQ2FsbC5oIgogI2lu
Y2x1ZGUgIkZUTFN0YWNrTWFwcy5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCkBA
IC02MCw4ICs2MSwxMSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgY2FwdHVyZWRTdGFja21hcElE
OwogICAgIFNlZ21lbnRlZFZlY3RvcjxHZXRCeUlkRGVzY3JpcHRvcj4gZ2V0QnlJZHM7CiAgICAg
U2VnbWVudGVkVmVjdG9yPFB1dEJ5SWREZXNjcmlwdG9yPiBwdXRCeUlkczsKKyAgICBWZWN0b3I8
SlNDYWxsPiBqc0NhbGxzOwogICAgIFZlY3RvcjxDU3RyaW5nPiBjb2RlU2VjdGlvbk5hbWVzOwog
ICAgIFZlY3RvcjxDU3RyaW5nPiBkYXRhU2VjdGlvbk5hbWVzOworICAgIHZvaWQqIGNvbXBhY3RV
bndpbmQ7CisgICAgc2l6ZV90IGNvbXBhY3RVbndpbmRTaXplOwogICAgIFJlZkNvdW50ZWRBcnJh
eTxMU2VjdGlvbldvcmQ+IHN0YWNrbWFwc1NlY3Rpb247CiAgICAgCiAgICAgdm9pZCBkdW1wU3Rh
dGUoY29uc3QgY2hhciogd2hlbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFVud2luZEluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMVW53aW5kSW5mby5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFVud2luZEluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGVExVbndpbmRJbmZvLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJ
VCkKKworI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorI2luY2x1ZGUgPG1hY2gtby9jb21wYWN0
X3Vud2luZF9lbmNvZGluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisK
K1Vud2luZEluZm86OlVud2luZEluZm8oKSB7IH0KK1Vud2luZEluZm86On5VbndpbmRJbmZvKCkg
eyB9CisKK25hbWVzcGFjZSB7CisKK3N0cnVjdCBDb21wYWN0VW53aW5kIHsKKyAgICB2b2lkKiBm
dW5jdGlvbjsKKyAgICB1aW50MzJfdCBzaXplOworICAgIGNvbXBhY3RfdW53aW5kX2VuY29kaW5n
X3QgZW5jb2Rpbmc7CisgICAgdm9pZCogcGVyc29uYWxpdHk7CisgICAgdm9pZCogbHNkYTsKK307
CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIFVud2luZEluZm86OnBhcnNlKHZv
aWQqIHNlY3Rpb24sIHNpemVfdCBzaXplKQoreworICAgIG1fcmVnaXN0ZXJzLmNsZWFyKCk7Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlQoc2VjdGlvbik7CisgICAgUkVMRUFTRV9BU1NFUlQoc2l6
ZSA+PSBzaXplb2YoQ29tcGFjdFVud2luZCkpOworICAgIAorICAgIENvbXBhY3RVbndpbmQqIGRh
dGEgPSBiaXR3aXNlX2Nhc3Q8Q29tcGFjdFVud2luZCo+KHNlY3Rpb24pOworICAgIAorICAgIFJF
TEVBU0VfQVNTRVJUKCFkYXRhLT5wZXJzb25hbGl0eSk7IC8vIFdlIGRvbid0IGtub3cgaG93IHRv
IGhhbmRsZSB0aGlzLgorICAgIFJFTEVBU0VfQVNTRVJUKCFkYXRhLT5sc2RhKTsgLy8gV2UgZG9u
J3Qga25vdyBob3cgdG8gaGFuZGxlIHRoaXMuCisgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZSA9PSBz
aXplb2YoQ29tcGFjdFVud2luZCkgfHwgIWRhdGFbMV0uZnVuY3Rpb24pOyAvLyBUaGVyZSB3aWxs
IG9ubHkgYmUgb25lIGZ1bmN0aW9uLgorICAgIAorICAgIGNvbXBhY3RfdW53aW5kX2VuY29kaW5n
X3QgZW5jb2RpbmcgPSBkYXRhLT5lbmNvZGluZzsKKyAgICBSRUxFQVNFX0FTU0VSVCghKGVuY29k
aW5nICYgVU5XSU5EX0lTX05PVF9GVU5DVElPTl9TVEFSVCkpOworICAgIFJFTEVBU0VfQVNTRVJU
KCEoZW5jb2RpbmcgJiBVTldJTkRfSEFTX0xTREEpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghKGVu
Y29kaW5nICYgVU5XSU5EX1BFUlNPTkFMSVRZX01BU0spKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgo
ZW5jb2RpbmcgJiBVTldJTkRfWDg2XzY0X01PREVfTUFTSykgPT0gVU5XSU5EX1g4Nl82NF9NT0RF
X1JCUF9GUkFNRSk7CisgICAgCisgICAgaW50MzJfdCBvZmZzZXQgPSAtKChlbmNvZGluZyAmIFVO
V0lORF9YODZfNjRfUkJQX0ZSQU1FX09GRlNFVCkgPj4gMTYpICogODsKKyAgICB1aW50MzJfdCBu
ZXh0UmVnaXN0ZXJzID0gZW5jb2Rpbmc7CisgICAgZm9yICh1bnNpZ25lZCBpID0gNTsgaS0tOykg
eworICAgICAgICB1aW50MzJfdCBjdXJyZW50UmVnaXN0ZXIgPSBuZXh0UmVnaXN0ZXJzICYgNzsK
KyAgICAgICAgbmV4dFJlZ2lzdGVycyA+Pj0gMzsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAo
Y3VycmVudFJlZ2lzdGVyKSB7CisgICAgICAgIGNhc2UgVU5XSU5EX1g4Nl82NF9SRUdfTk9ORToK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVU5XSU5EX1g4
Nl82NF9SRUdfUkJYOgorICAgICAgICAgICAgbV9yZWdpc3RlcnMuYXBwZW5kKFJlZ2lzdGVyQXRP
ZmZzZXQoWDg2UmVnaXN0ZXJzOjplYngsIG9mZnNldCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBVTldJTkRfWDg2XzY0X1JFR19SMTI6CisgICAgICAg
ICAgICBtX3JlZ2lzdGVycy5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChYODZSZWdpc3RlcnM6OnIx
Miwgb2Zmc2V0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIFVOV0lORF9YODZfNjRfUkVHX1IxMzoKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJzLmFwcGVu
ZChSZWdpc3RlckF0T2Zmc2V0KFg4NlJlZ2lzdGVyczo6cjEzLCBvZmZzZXQpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVU5XSU5EX1g4Nl82NF9SRUdf
UjE0OgorICAgICAgICAgICAgbV9yZWdpc3RlcnMuYXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoWDg2
UmVnaXN0ZXJzOjpyMTQsIG9mZnNldCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBVTldJTkRfWDg2XzY0X1JFR19SMTU6CisgICAgICAgICAgICBtX3Jl
Z2lzdGVycy5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChYODZSZWdpc3RlcnM6OnIxNSwgb2Zmc2V0
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVOV0lO
RF9YODZfNjRfUkVHX1JCUDoKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJzLmFwcGVuZChSZWdpc3Rl
ckF0T2Zmc2V0KFg4NlJlZ2lzdGVyczo6ZWJwLCBvZmZzZXQpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvZmZzZXQg
Kz0gODsKKyAgICB9CisgICAgCisgICAgc3RkOjpzb3J0KG1fcmVnaXN0ZXJzLmJlZ2luKCksIG1f
cmVnaXN0ZXJzLmVuZCgpKTsKK30KKwordm9pZCBVbndpbmRJbmZvOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGxpc3REdW1wKG1fcmVnaXN0ZXJzKSk7Cit9
CisKK1JlZ2lzdGVyQXRPZmZzZXQqIFVud2luZEluZm86OmZpbmQoR1BSUmVnIGdwcikgY29uc3QK
K3sKKyAgICByZXR1cm4gdHJ5QmluYXJ5U2VhcmNoPFJlZ2lzdGVyQXRPZmZzZXQsIEdQUlJlZz4o
bV9yZWdpc3RlcnMsIG1fcmVnaXN0ZXJzLnNpemUoKSwgZ3ByLCBSZWdpc3RlckF0T2Zmc2V0Ojpn
ZXRHUFIpOworfQorCit1bnNpZ25lZCBVbndpbmRJbmZvOjppbmRleE9mKEdQUlJlZyBncHIpIGNv
bnN0Cit7CisgICAgaWYgKFJlZ2lzdGVyQXRPZmZzZXQqIHBvaW50ZXIgPSBmaW5kKGdwcikpCisg
ICAgICAgIHJldHVybiBwb2ludGVyIC0gbV9yZWdpc3RlcnMuYmVnaW4oKTsKKyAgICByZXR1cm4g
VUlOVF9NQVg7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFVud2lu
ZEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFVud2lu
ZEluZm8uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVW53
aW5kSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExVbndpbmRJbmZvX2gK
KyNkZWZpbmUgRlRMVW53aW5kSW5mb19oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1
ZGUgIkZUTFJlZ2lzdGVyQXRPZmZzZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgeworCitzdHJ1Y3QgVW53aW5kSW5mbyB7CisgICAgVW53aW5kSW5mbygpOworICAgIH5Vbndp
bmRJbmZvKCk7CisgICAgCisgICAgdm9pZCBwYXJzZSh2b2lkKiwgc2l6ZV90KTsKKyAgICAKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICBSZWdpc3RlckF0T2Zm
c2V0KiBmaW5kKEdQUlJlZyBncHIpIGNvbnN0OworICAgIHVuc2lnbmVkIGluZGV4T2YoR1BSUmVn
IGdwcikgY29uc3Q7IC8vIFJldHVybiBVSU5UX01BWCBpZiBub3QgZm91bmQuCisgICAgCisgICAg
VmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+IG1fcmVnaXN0ZXJzOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBG
VExVbndpbmRJbmZvX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNp
b24gMTYwODUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MDUsOCArNzA1LDcgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRl
Q29tcGlsZShKSQogICAgIAogICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6
OkxhdGVTaHJpbmspOwogICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9w
dFJlZihuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIEpJVENvZGU6OkJhc2VsaW5lSklUKSksCi0g
ICAgICAgIHdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENv
ZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUQ29kZTo6QmFzZWxpbmVKSVQpKSk7CiAgICAg
CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFKQogICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVkIGNv
ZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxl
TWVtb3J5KCktPnN0YXJ0KCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpKTsKQEAg
LTcxNSw0MiArNzE0LDYgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShK
SQogICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9CiAKLXZvaWQgSklUOjpsaW5r
Rm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sqIGNhbGxl
ckNvZGVCbG9jaywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpJVDo6Q29kZVB0ciBjb2Rl
LCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgVk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCi17Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVC
bG9jayk7Ci0KLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5rZWQoKSk7Ci0gICAgY2Fs
bExpbmtJbmZvLT5jYWxsZWUuc2V0KCp2bSwgY2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4sIGNh
bGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7Ci0gICAgY2FsbExpbmtJ
bmZvLT5sYXN0U2VlbkNhbGxlZS5zZXQoKnZtLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBjYWxsZWUpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+
aG90UGF0aE90aGVyLCBjb2RlKTsKLQotICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCi0gICAgICAg
IGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChleGVjLCBjYWxsTGlua0luZm8pOwot
Ci0gICAgLy8gUGF0Y2ggdGhlIHNsb3cgcGF0Y2ggc28gd2UgZG8gbm90IGNvbnRpbnVlIHRvIHRy
eSB0byBsaW5rLgotICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgIEFTU0VS
VChjYWxsTGlua0luZm8tPmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbAotICAgICAgICAg
ICAgICAgfHwgY2FsbExpbmtJbmZvLT5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGxWYXJh
cmdzKTsKLSAgICAgICAgaWYgKGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZv
OjpDYWxsKSB7Ci0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8t
PmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtH
ZW5lcmF0b3IpLmNvZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlv
biwgdm0tPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1
Y3QpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpLmNv
ZGUoKSk7Ci19Ci0KLXZvaWQgSklUOjpsaW5rU2xvd0NhbGwoQ29kZUJsb2NrKiBjYWxsZXJDb2Rl
QmxvY2ssIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQotewotICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwotCi0gICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGNhbGxlckNvZGVCbG9jay0+dm0o
KS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwotfQotCiB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCiB7CiAgICAgaWYgKG1f
ZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkgJiYgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1l
Um9sbGJhY2suZW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24g
MTYwODUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjQxLDkgKzI0MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJu
IGppdC5wcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwodm0sIGZ1bmMpOwogICAgICAgICB9CiAK
LSAgICAgICAgc3RhdGljIHZvaWQgbGlua0ZvcihFeGVjU3RhdGUqLCBKU0Z1bmN0aW9uKiBjYWxs
ZWUsIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9j
aywgQ29kZVB0ciwgQ2FsbExpbmtJbmZvKiwgVk0qLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsK
LSAgICAgICAgc3RhdGljIHZvaWQgbGlua1Nsb3dDYWxsKENvZGVCbG9jayogY2FsbGVyQ29kZUJs
b2NrLCBDYWxsTGlua0luZm8qKTsKLSAgICAgICAgCiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBm
cmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyBpbnQgc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
OSw3ICsyOTksMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRAog
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKLSAgICBt
X2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxs
UmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/
IG1fdm0tPmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkgOiBt
X3ZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgVGh1
bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbGlua0NhbGxUaHVua0dlbmVyYXRvckZvcigKKyAgICAg
ICAgb3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JD
YWxsLAorICAgICAgICBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKKyAgICAKKyAg
ICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5j
YWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIoZ2VuZXJh
dG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICBl
bWl0UHV0Q2FsbFJlc3VsdChpbnN0cnVjdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDE2MDg1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw3ICsyMjcsMTEgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRAogCiAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMigxNiksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKLSAgICBtX2NhbGxT
dHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJu
TG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fdm0t
PmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkgOiBtX3ZtLT5n
ZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgVGh1bmtHZW5l
cmF0b3IgZ2VuZXJhdG9yID0gbGlua1RodW5rR2VuZXJhdG9yRm9yKAorICAgICAgICBvcGNvZGVJ
RCA9PSBvcF9jb25zdHJ1Y3QgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwsCisgICAg
ICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOworICAgIAorICAgIG1fY2FsbFN0
cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5M
b2NhdGlvbiA9IGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihnZW5lcmF0b3IpLmNvZGUo
KSk7CiAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2Nv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCShyZXZpc2lvbiAxNjA4NTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIk9wZXJh
dGlvbnMuaCIKKyNpbmNsdWRlICJSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3Iu
aCIKICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03
Myw1MCArNzQsMzggQEAgRlRMOjpGb3JPU1JFbnRyeUpJVENvZGUqIEpJVENvZGU6OmZ0bEZvcgog
CiBQYXNzUmVmUHRyPEpJVENvZGU+IEpJVENvZGU6Omhvc3RGdW5jdGlvbihKSVRDb2RlOjpDb2Rl
UmVmIGNvZGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKGNvZGUs
IEhvc3RDYWxsVGh1bmspKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5hdGl2ZUpJVENvZGUo
Y29kZSwgSG9zdENhbGxUaHVuaykpOwogfQogCi1EaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2Rl
KEpJVFR5cGUgaml0VHlwZSkKK0pJVENvZGVXaXRoQ29kZVJlZjo6SklUQ29kZVdpdGhDb2RlUmVm
KEpJVFR5cGUgaml0VHlwZSkKICAgICA6IEpJVENvZGUoaml0VHlwZSkKIHsKIH0KIAotRGlyZWN0
SklUQ29kZTo6RGlyZWN0SklUQ29kZShjb25zdCBKSVRDb2RlOjpDb2RlUmVmIHJlZiwgSklUVHlw
ZSBqaXRUeXBlKQorSklUQ29kZVdpdGhDb2RlUmVmOjpKSVRDb2RlV2l0aENvZGVSZWYoQ29kZVJl
ZiByZWYsIEpJVFR5cGUgaml0VHlwZSkKICAgICA6IEpJVENvZGUoaml0VHlwZSkKICAgICAsIG1f
cmVmKHJlZikKIHsKIH0KIAotRGlyZWN0SklUQ29kZTo6fkRpcmVjdEpJVENvZGUoKQorSklUQ29k
ZVdpdGhDb2RlUmVmOjp+SklUQ29kZVdpdGhDb2RlUmVmKCkKIHsKIH0KIAotdm9pZCBEaXJlY3RK
SVRDb2RlOjppbml0aWFsaXplQ29kZVJlZihjb25zdCBKSVRDb2RlOjpDb2RlUmVmIHJlZikKLXsK
LSAgICBSRUxFQVNFX0FTU0VSVCghbV9yZWYpOwotICAgIG1fcmVmID0gcmVmOwotfQotCi1KSVRD
b2RlOjpDb2RlUHRyIERpcmVjdEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKCkKLXsKLSAgICBSRUxF
QVNFX0FTU0VSVChtX3JlZik7Ci0gICAgcmV0dXJuIG1fcmVmLmNvZGUoKTsKLX0KLQotdm9pZCog
RGlyZWN0SklUQ29kZTo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KQor
dm9pZCogSklUQ29kZVdpdGhDb2RlUmVmOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVf
dCBvZmZzZXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOwogICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkgKyBv
ZmZzZXQ7CiB9CiAKLXZvaWQqIERpcmVjdEpJVENvZGU6OmRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6
ZV90IG9mZnNldCkKK3ZvaWQqIEpJVENvZGVXaXRoQ29kZVJlZjo6ZGF0YUFkZHJlc3NBdE9mZnNl
dChzaXplX3Qgb2Zmc2V0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKICAgICBBU1NF
UlQob2Zmc2V0IDw9IHNpemUoKSk7IC8vIHVzZSA8PSBpbnN0ZWFkIG9mIDwgYmVjYXVzZSBpdCBp
cyB2YWxpZCB0byBhc2sgZm9yIGFuIGFkZHJlc3MgYXQgdGhlIGV4Y2x1c2l2ZSBlbmQgb2YgdGhl
IGNvZGUuCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fcmVmLmNvZGUoKS5k
YXRhTG9jYXRpb24oKSkgKyBvZmZzZXQ7CiB9CiAKLXVuc2lnbmVkIERpcmVjdEpJVENvZGU6Om9m
ZnNldE9mKHZvaWQqIHBvaW50ZXJJbnRvQ29kZSkKK3Vuc2lnbmVkIEpJVENvZGVXaXRoQ29kZVJl
Zjo6b2Zmc2V0T2Yodm9pZCogcG9pbnRlckludG9Db2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KG1fcmVmKTsKICAgICBpbnRwdHJfdCByZXN1bHQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90
Pihwb2ludGVySW50b0NvZGUpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9yZWYuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwpAQCAtMTI0LDE4ICsxMTMsMTA3IEBAIHVuc2lnbmVk
IERpcmVjdEpJVENvZGU6Om9mZnNldE9mKHZvaWQqIHAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHJlc3VsdCk7CiB9CiAKLXNpemVfdCBEaXJlY3RKSVRDb2RlOjpzaXplKCkKK3Np
emVfdCBKSVRDb2RlV2l0aENvZGVSZWY6OnNpemUoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1f
cmVmKTsKICAgICByZXR1cm4gbV9yZWYuc2l6ZSgpOwogfQogCi1ib29sIERpcmVjdEpJVENvZGU6
OmNvbnRhaW5zKHZvaWQqIGFkZHJlc3MpCitib29sIEpJVENvZGVXaXRoQ29kZVJlZjo6Y29udGFp
bnModm9pZCogYWRkcmVzcykKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX3JlZik7CiAgICAgcmV0
dXJuIG1fcmVmLmV4ZWN1dGFibGVNZW1vcnkoKS0+Y29udGFpbnMoYWRkcmVzcyk7CiB9CiAKK0Rp
cmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUoSklUVHlwZSBqaXRUeXBlKQorICAgIDogSklUQ29k
ZVdpdGhDb2RlUmVmKGppdFR5cGUpCit7Cit9CisKK0RpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENv
ZGUoCisgICAgSklUQ29kZTo6Q29kZVJlZiByZWYsIEpJVENvZGU6OkNvZGVQdHIgd2l0aEFyaXR5
Q2hlY2ssIEpJVFR5cGUgaml0VHlwZSkKKyAgICA6IEpJVENvZGVXaXRoQ29kZVJlZihyZWYsIGpp
dFR5cGUpCisgICAgLCBtX3dpdGhBcml0eUNoZWNrKHdpdGhBcml0eUNoZWNrKQoreworfQorCitE
aXJlY3RKSVRDb2RlOjp+RGlyZWN0SklUQ29kZSgpCit7Cit9CisKK3ZvaWQgRGlyZWN0SklUQ29k
ZTo6aW5pdGlhbGl6ZUNvZGVSZWYoSklUQ29kZTo6Q29kZVJlZiByZWYsIEpJVENvZGU6OkNvZGVQ
dHIgd2l0aEFyaXR5Q2hlY2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmVmKTsKKyAgICBt
X3JlZiA9IHJlZjsKKyAgICBtX3dpdGhBcml0eUNoZWNrID0gd2l0aEFyaXR5Q2hlY2s7Cit9CisK
K0RpcmVjdEpJVENvZGU6OlJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlcnMqIERpcmVjdEpJVENv
ZGU6OmVuc3VyZVdyYXBwZXJzKCkKK3sKKyAgICBpZiAoIW1fd3JhcHBlcnMpCisgICAgICAgIG1f
d3JhcHBlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlcnM+
KCk7CisgICAgcmV0dXJuIG1fd3JhcHBlcnMuZ2V0KCk7Cit9CisKK0pJVENvZGU6OkNvZGVQdHIg
RGlyZWN0SklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoCisgICAgVk0mIHZtLCBFeGVjdXRhYmxlQmFz
ZSogZXhlY3V0YWJsZSwgQXJpdHlDaGVja01vZGUgYXJpdHksCisgICAgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sKKyAgICBzd2l0Y2ggKGFyaXR5KSB7CisgICAgY2FzZSBB
cml0eUNoZWNrTm90UmVxdWlyZWQ6CisgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAg
ICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1fcmVmKTsKKyAgICAgICAgICAgIHJldHVybiBtX3JlZi5jb2RlKCk7Cisg
ICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOiB7CisgICAgICAgICAgICBSZWdpc3Rl
clByZXNlcnZhdGlvbldyYXBwZXJzKiB3cmFwcGVycyA9IGVuc3VyZVdyYXBwZXJzKCk7CisgICAg
ICAgICAgICBpZiAoIXdyYXBwZXJzLT53aXRob3V0QXJpdHlDaGVjaykKKyAgICAgICAgICAgICAg
ICB3cmFwcGVycy0+d2l0aG91dEFyaXR5Q2hlY2sgPSBnZW5lcmF0ZVJlZ2lzdGVyUHJlc2VydmF0
aW9uV3JhcHBlcih2bSwgZXhlY3V0YWJsZSwgbV9yZWYuY29kZSgpKTsKKyAgICAgICAgICAgIHJl
dHVybiB3cmFwcGVycy0+d2l0aG91dEFyaXR5Q2hlY2suY29kZSgpOworICAgICAgICB9IH0KKyAg
ICBjYXNlIE11c3RDaGVja0FyaXR5OgorICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAg
ICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChtX3dpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgICAgIHJldHVybiBtX3dp
dGhBcml0eUNoZWNrOworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczogeworICAg
ICAgICAgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVycyogd3JhcHBlcnMgPSBlbnN1cmVX
cmFwcGVycygpOworICAgICAgICAgICAgaWYgKCF3cmFwcGVycy0+d2l0aEFyaXR5Q2hlY2spCisg
ICAgICAgICAgICAgICAgd3JhcHBlcnMtPndpdGhBcml0eUNoZWNrID0gZ2VuZXJhdGVSZWdpc3Rl
clByZXNlcnZhdGlvbldyYXBwZXIodm0sIGV4ZWN1dGFibGUsIG1fd2l0aEFyaXR5Q2hlY2spOwor
ICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXJzLT53aXRoQXJpdHlDaGVjay5jb2RlKCk7CisgICAg
ICAgIH0gfQorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBDb2RlUHRyKCk7Cit9CisKK05hdGl2ZUpJVENvZGU6Ok5hdGl2ZUpJVENvZGUoSklUVHlw
ZSBqaXRUeXBlKQorICAgIDogSklUQ29kZVdpdGhDb2RlUmVmKGppdFR5cGUpCit7Cit9CisKK05h
dGl2ZUpJVENvZGU6Ok5hdGl2ZUpJVENvZGUoQ29kZVJlZiByZWYsIEpJVFR5cGUgaml0VHlwZSkK
KyAgICA6IEpJVENvZGVXaXRoQ29kZVJlZihyZWYsIGppdFR5cGUpCit7Cit9CisKK05hdGl2ZUpJ
VENvZGU6On5OYXRpdmVKSVRDb2RlKCkKK3sKK30KKwordm9pZCBOYXRpdmVKSVRDb2RlOjppbml0
aWFsaXplQ29kZVJlZihDb2RlUmVmIHJlZikKK3sKKyAgICBBU1NFUlQoIW1fcmVmKTsKKyAgICBt
X3JlZiA9IHJlZjsKK30KKworSklUQ29kZTo6Q29kZVB0ciBOYXRpdmVKSVRDb2RlOjphZGRyZXNz
Rm9yQ2FsbCgKKyAgICBWTSYsIEV4ZWN1dGFibGVCYXNlKiwgQXJpdHlDaGVja01vZGUsIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTW9kZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghIW1fcmVmKTsKKyAg
ICByZXR1cm4gbV9yZWYuY29kZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNw
YWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24g
MTYwODUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDE0ICsyNiwxNCBAQAogI2lmbmRlZiBKSVRDb2RlX2gKICNkZWZpbmUgSklU
Q29kZV9oCiAKLSNpZiBFTkFCTEUoSklUKSB8fCBFTkFCTEUoTExJTlQpCisjaW5jbHVkZSAiQXJp
dHlDaGVja01vZGUuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJEaXNhc3Nl
bWJsZXIuaCIKICNpbmNsdWRlICJKSVRTdHVicy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIK
ICNpbmNsdWRlICJMZWdhY3lQcm9maWxlci5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oIgotI2VuZGlmCisjaW5jbHVkZSAiUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNjQsNyArMTY0LDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gaml0Q29kZS0+aml0VHlwZSgpOwogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIENvZGVQ
dHIgYWRkcmVzc0ZvckNhbGwoKSA9IDA7CisgICAgdmlydHVhbCBDb2RlUHRyIGFkZHJlc3NGb3JD
YWxsKFZNJiwgRXhlY3V0YWJsZUJhc2UqLCBBcml0eUNoZWNrTW9kZSwgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Nb2RlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkKiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zm
c2V0KHNpemVfdCBvZmZzZXQpID0gMDsKICAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcygpIHsg
cmV0dXJuIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoMCk7IH0KICAgICB2aXJ0dWFsIHZvaWQq
IGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgPSAwOwpAQCAtMTg5LDI1ICsxODks
NTggQEAgcHJpdmF0ZToKICAgICBKSVRUeXBlIG1faml0VHlwZTsKIH07CiAKLWNsYXNzIERpcmVj
dEpJVENvZGUgOiBwdWJsaWMgSklUQ29kZSB7CitjbGFzcyBKSVRDb2RlV2l0aENvZGVSZWYgOiBw
dWJsaWMgSklUQ29kZSB7Citwcm90ZWN0ZWQ6CisgICAgSklUQ29kZVdpdGhDb2RlUmVmKEpJVFR5
cGUpOworICAgIEpJVENvZGVXaXRoQ29kZVJlZihDb2RlUmVmLCBKSVRUeXBlKTsKKwogcHVibGlj
OgotICAgIERpcmVjdEpJVENvZGUoSklUVHlwZSk7Ci0gICAgRGlyZWN0SklUQ29kZShjb25zdCBD
b2RlUmVmLCBKSVRUeXBlKTsKLSAgICB2aXJ0dWFsIH5EaXJlY3RKSVRDb2RlKCk7Ci0gICAgCi0g
ICAgdm9pZCBpbml0aWFsaXplQ29kZVJlZihDb2RlUmVmIHJlZik7CisgICAgdmlydHVhbCB+SklU
Q29kZVdpdGhDb2RlUmVmKCk7CiAKLSAgICB2aXJ0dWFsIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwo
KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQo
c2l6ZV90IG9mZnNldCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkKiBkYXRhQWRkcmVzc0F0
T2Zmc2V0KHNpemVfdCBvZmZzZXQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdW5zaWduZWQgb2Zm
c2V0T2Yodm9pZCogcG9pbnRlckludG9Db2RlKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHNpemVf
dCBzaXplKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGNvbnRhaW5zKHZvaWQqKSBPVkVS
UklERTsKIAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICBDb2RlUmVmIG1fcmVmOwogfTsKIAor
Y2xhc3MgRGlyZWN0SklUQ29kZSA6IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVSZWYgeworcHVibGlj
OgorICAgIERpcmVjdEpJVENvZGUoSklUVHlwZSk7CisgICAgRGlyZWN0SklUQ29kZShDb2RlUmVm
LCBDb2RlUHRyIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlKTsKKyAgICB2aXJ0dWFsIH5EaXJlY3RK
SVRDb2RlKCk7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplQ29kZVJlZihDb2RlUmVmIHJlZiwg
Q29kZVB0ciB3aXRoQXJpdHlDaGVjayk7CisKKyAgICB2aXJ0dWFsIENvZGVQdHIgYWRkcmVzc0Zv
ckNhbGwoVk0mLCBFeGVjdXRhYmxlQmFzZSosIEFyaXR5Q2hlY2tNb2RlLCBSZWdpc3RlclByZXNl
cnZhdGlvbk1vZGUpIE9WRVJSSURFOworCitwcml2YXRlOgorICAgIHN0cnVjdCBSZWdpc3RlclBy
ZXNlcnZhdGlvbldyYXBwZXJzIHsKKyAgICAgICAgQ29kZVJlZiB3aXRob3V0QXJpdHlDaGVjazsK
KyAgICAgICAgQ29kZVJlZiB3aXRoQXJpdHlDaGVjazsKKyAgICB9OworCisgICAgUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25XcmFwcGVycyogZW5zdXJlV3JhcHBlcnMoKTsKKyAgICAKKyAgICBDb2RlUHRy
IG1fd2l0aEFyaXR5Q2hlY2s7CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyUHJl
c2VydmF0aW9uV3JhcHBlcnM+IG1fd3JhcHBlcnM7Cit9OworCitjbGFzcyBOYXRpdmVKSVRDb2Rl
IDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7CitwdWJsaWM6CisgICAgTmF0aXZlSklUQ29k
ZShKSVRUeXBlKTsKKyAgICBOYXRpdmVKSVRDb2RlKENvZGVSZWYsIEpJVFR5cGUpOworICAgIHZp
cnR1YWwgfk5hdGl2ZUpJVENvZGUoKTsKKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemVDb2RlUmVm
KENvZGVSZWYgcmVmKTsKKworICAgIHZpcnR1YWwgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbChWTSYs
IEV4ZWN1dGFibGVCYXNlKiwgQXJpdHlDaGVja01vZGUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9k
ZSkgT1ZFUlJJREU7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDE2MDg1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4NCw3ICs2ODQsOCBAQCBzdGF0aWMgdm9pZCogaGFu
ZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBlCiAgICAgcmV0dXJuIHZtLT5nZXRDVElTdHViKHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CiB9CiAKLWlubGluZSBjaGFyKiBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoraW5saW5lIGNoYXIqIGxpbmtGb3IoCisgICAg
RXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0g
ZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKQEAg
LTcwMiw5ICs3MDMsOSBAQCBpbmxpbmUgY2hhciogbGlua0ZvcihFeGVjU3RhdGUqIGV4ZWNDYWxs
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7CiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSAwOwogICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhlYy0+Y29kZUJs
b2NrKCktPmdldENhbGxMaW5rSW5mbyhleGVjQ2FsbGVlLT5yZXR1cm5QQygpKTsKLSAgICBpZiAo
ZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFi
bGUtPmdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKCk7Ci0gICAgZWxz
ZSB7CisgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsKKyAgICAgICAgY29k
ZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3IoKnZtLCBraW5kLCBNdXN0Q2hlY2tBcml0
eSwgcmVnaXN0ZXJzKTsKKyAgICB9IGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpOwogICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUt
PnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKTsK
ICAgICAgICAgaWYgKGVycm9yKSB7CkBAIC03MTIsMjkgKzcxMyw0MyBAQCBpbmxpbmUgY2hhciog
bGlua0ZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsCiAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgICAgIH0KICAg
ICAgICAgY29kZUJsb2NrID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCk7
CisgICAgICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5OwogICAgICAgICBpZiAoZXhlY0NhbGxlZS0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby5jYWxsVHlwZSA9PSBDYWxsTGlu
a0luZm86OkNhbGxWYXJhcmdzKQotICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0
YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQpOworICAgICAgICAg
ICAgYXJpdHkgPSBNdXN0Q2hlY2tBcml0eTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29k
ZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRk
cmVzc0ZvckNhbGwoKTsKKyAgICAgICAgICAgIGFyaXR5ID0gQXJpdHlDaGVja05vdFJlcXVpcmVk
OworICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKCp2
bSwga2luZCwgYXJpdHksIHJlZ2lzdGVycyk7CiAgICAgfQogICAgIGlmICghY2FsbExpbmtJbmZv
LnNlZW5PbmNlKCkpCiAgICAgICAgIGNhbGxMaW5rSW5mby5zZXRTZWVuKCk7CiAgICAgZWxzZQot
ICAgICAgICBsaW5rRm9yKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxs
ZWUsIGNvZGVQdHIsIGtpbmQpOworICAgICAgICBsaW5rRm9yKGV4ZWNDYWxsZWUsIGNhbGxMaW5r
SW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIsIGtpbmQsIHJlZ2lzdGVycyk7CiAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRl
KiBleGVjQ2FsbGVlKQogewotICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JD
YWxsKTsKKyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTGlua0NvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCiB7Ci0gICAgcmV0dXJu
IGxpbmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJuIGxpbmtG
b3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RS
ZXF1aXJlZCk7Cit9CisKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGxUaGF0
UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7CisgICAgcmV0dXJuIGxpbmtG
b3IoZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CiB9CiAK
LWlubGluZSBjaGFyKiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlY0NhbGxl
ZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0aW9u
Q2VsbCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdFRoYXRQcmVz
ZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAgICByZXR1cm4gbGlua0Zvcihl
eGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0LCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOworfQor
CitpbmxpbmUgY2hhciogdmlydHVhbEZvcldpdGhGdW5jdGlvbigKKyAgICBFeGVjU3RhdGUqIGV4
ZWNDYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRp
b25Nb2RlIHJlZ2lzdGVycywKKyAgICBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKIHsK
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwogICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwpAQCAtNzU2LDE2ICs3NzEsMjAgQEAgaW5saW5lIGNoYXIqIHZp
cnR1YWxGb3JXaXRoRnVuY3Rpb24oRXhlYwogICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0
aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICB9CiAgICAg
fQotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihleGVjdXRhYmxlLT5nZW5lcmF0
ZWRKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cisg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRG
b3IoCisgICAgICAgICp2bSwga2luZCwgTXVzdENoZWNrQXJpdHksIHJlZ2lzdGVycykuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CiB9CiAKLWlubGluZSBjaGFyKiB2aXJ0dWFsRm9yKEV4ZWNTdGF0ZSog
ZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoraW5saW5lIGNoYXIqIHZp
cnR1YWxGb3IoCisgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgSlND
ZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQ7Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JX
aXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwga2luZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVk
KTsKKyAgICByZXR1cm4gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVlLCBraW5kLCBy
ZWdpc3RlcnMsIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZCk7CiB9CiAKLXN0YXRpYyBib29s
IGF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBKU0Nl
bGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3N0
YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoCisgICAgRXhlY1N0YXRlKiBl
eGVjQ2FsbGVlLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzLCBKU0NlbGwqIGNh
bGxlZUFzRnVuY3Rpb25DZWxsLAorICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewog
ICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTc3OSw3ICs3OTgsMTAgQEAgc3RhdGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2Fs
bAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgQVNTRVJUKGNhbGxlZS0+ZXhlY3V0
YWJsZSgpLT5oYXNKSVRDb2RlRm9yQ2FsbCgpKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Y29kZVB0ciA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgp
LT5hZGRyZXNzRm9yQ2FsbCgpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0K
KyAgICAgICAgY2FsbGVlLT5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkt
PmFkZHJlc3NGb3JDYWxsKAorICAgICAgICAgICAgKmV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCkt
PmNvZGVCbG9jaygpLT52bSgpLCBjYWxsZWUtPmV4ZWN1dGFibGUoKSwKKyAgICAgICAgICAgIEFy
aXR5Q2hlY2tOb3RSZXF1aXJlZCwgcmVnaXN0ZXJzKTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jazsKICAgICBpZiAoY2FsbGVlLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkp
CkBAIC03OTIsNyArODE0LDcgQEAgc3RhdGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJl
Q2FsbAogICAgIAogICAgIGxpbmtDbG9zdXJlQ2FsbCgKICAgICAgICAgZXhlY0NhbGxlZSwgY2Fs
bExpbmtJbmZvLCBjb2RlQmxvY2ssCi0gICAgICAgIGNhbGxlZS0+c3RydWN0dXJlKCksIGNhbGxl
ZS0+ZXhlY3V0YWJsZSgpLCBjb2RlUHRyKTsKKyAgICAgICAgY2FsbGVlLT5zdHJ1Y3R1cmUoKSwg
Y2FsbGVlLT5leGVjdXRhYmxlKCksIGNvZGVQdHIsIHJlZ2lzdGVycyk7CiAgICAgCiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC04MDAsMjUgKzgyMiw0NiBAQCBzdGF0aWMgYm9vbCBhdHRlbXB0VG9P
cHRpbWl6ZUNsb3N1cmVDYWxsCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9z
dXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCiB7CiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbDsKLSAgICBjaGFyKiByZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4
ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CisgICAgY2hhciog
cmVzdWx0ID0gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwog
ICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUo
KS0+Y29kZUJsb2NrKCktPmdldENhbGxMaW5rSW5mbyhleGVjQ2FsbGVlLT5yZXR1cm5QQygpKTsK
IAotICAgIGlmICghYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChleGVjQ2FsbGVlLCBjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCwgY2FsbExpbmtJbmZvKSkKLSAgICAgICAgbGlua1Nsb3dGb3IoZXhl
Y0NhbGxlZSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCk7CisgICAgaWYgKCFhdHRlbXB0VG9P
cHRpbWl6ZUNsb3N1cmVDYWxsKGV4ZWNDYWxsZWUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVx
dWlyZWQsIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBjYWxsTGlua0luZm8pKQorICAgICAgICBsaW5r
U2xvd0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsLCBSZWdpc3RlclBy
ZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhlY0Nh
bGxlZSkKIHsgICAgCi0gICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNh
bGwpOworICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBSZWdp
c3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKIH0KIAogY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKIHsKLSAgICBy
ZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICByZXR1
cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0LCBSZWdpc3RlclByZXNl
cnZhdGlvbk5vdFJlcXVpcmVkKTsKIH0KIAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25M
aW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7
CisgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbDsKKyAgICBjaGFyKiByZXN1bHQgPSB2
aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBNdXN0UHJlc2Vy
dmVSZWdpc3RlcnMsIGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5nZXRD
YWxsTGlua0luZm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7CisKKyAgICBpZiAoIWF0dGVtcHRU
b09wdGltaXplQ2xvc3VyZUNhbGwoZXhlY0NhbGxlZSwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzLCBj
YWxsZWVBc0Z1bmN0aW9uQ2VsbCwgY2FsbExpbmtJbmZvKSkKKyAgICAgICAgbGlua1Nsb3dGb3Io
ZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCwgTXVzdFByZXNlcnZlUmVnaXN0
ZXJzKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblZpcnR1YWxDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2Fs
bGVlKQoreyAgICAKKyAgICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2Fs
bCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKK30KKworY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25WaXJ0dWFsQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2Fs
bGVlKQoreworICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1
Y3QsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7Cit9CiAKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNvbXBhcmVMZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjE1
LDExICsyMTUsMTcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5Vgog
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJO
QUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUp
IFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2Fs
bEV2YWwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSopIFdURl9J
TlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0
YXRlKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFs
Q29uc3RydWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTGlua0NvbnN0cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRl
KikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3Vy
ZUNhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0
YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFs
Q29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3Mo
RXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRp
b25Db21wYXJlTGVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUp
IFdURl9JTlRFUk5BTDsKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNz
RXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJO
QUw7CiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKQEAgLTI4
MSw2ICsyODcsNjggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dFRvU2NvcGUoRQog
CiB9IC8vIGV4dGVybiAiQyIKIAoraW5saW5lIFBfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uTGlu
a0ZvcigKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTW9kZSByZWdpc3RlcnMpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBDb2Rl
Rm9yQ2FsbDoKKyAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdp
c3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
bkxpbmtDYWxsOworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25MaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgc3dp
dGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJl
cXVpcmVkOgorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3Q7CisgICAg
ICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvbkxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnczsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gMDsKK30KKworaW5saW5lIFBfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uVmlydHVhbEZvcigK
KyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9k
ZSByZWdpc3RlcnMpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBDb2RlRm9yQ2Fs
bDoKKyAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdpc3RlclBy
ZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblZpcnR1
YWxDYWxsOworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25WaXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgc3dp
dGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJl
cXVpcmVkOgorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3Q7Cisg
ICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnczsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKworaW5saW5lIFBfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uTGlua0Ns
b3N1cmVDYWxsRm9yKFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCit7CisgICAg
c3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVx
dWlyZWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGw7CisgICAgY2Fz
ZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5rQ2xv
c3VyZUNhbGxUaGF0UHJlc2VydmVzUmVnczsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVy
R2VuZXJhdG9yLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQXNzZW1ibHlIZWxw
ZXJzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitSZWdpc3RlclNldCByZWdpc3RlcnNUb1ByZXNlcnZl
KCkKK3sKKyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CisgICAgCisgICAgLy8gTm8gbmVlZCB0byBwcmVzZXJ2ZSBGUCBzaW5j
ZSB0aGF0IGFsd2F5cyBnZXRzIHByZXNlcnZlZCBhbnl3YXkuCisgICAgY2FsbGVlU2F2ZXMuY2xl
YXIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIAorICAgIHJldHVybiBjYWxsZWVT
YXZlczsKK30KKworcHRyZGlmZl90IHJlZ2lzdGVyUHJlc2VydmF0aW9uT2Zmc2V0KCkKK3sKKyAg
ICB1bnNpZ25lZCBudW1iZXJPZkNhbGxlZVNhdmVzID0gcmVnaXN0ZXJzVG9QcmVzZXJ2ZSgpLm51
bWJlck9mU2V0UmVnaXN0ZXJzKCk7CisgICAgCisgICAgLy8gTmVlZCB0byBwcmVzZXJ2ZSB0aGUg
b2xkIHJldHVybiBQQy4KKyAgICB1bnNpZ25lZCBudW1iZXJPZlZhbHVlc1RvU2F2ZSA9IG51bWJl
ck9mQ2FsbGVlU2F2ZXMgKyAxOworICAgIAorICAgIC8vIEFsaWdubWVudC4gUHJlc2VydmUgdGhl
IHNhbWUgYWxpZ25tZW50IGludmFyaWFudHMgdGhhdCB0aGUgY2FsbGVyIGltcG9zZWQuCisgICAg
dW5zaWduZWQgbnVtYmVyT2ZOZXdTdGFja1Nsb3RzID0KKyAgICAgICAgV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIG51bWJlck9mVmFsdWVzVG9TYXZl
KTsKKyAgICAKKyAgICByZXR1cm4gc2l6ZW9mKFJlZ2lzdGVyKSAqIG51bWJlck9mTmV3U3RhY2tT
bG90czsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyYXRlUmVnaXN0ZXJQcmVzZXJ2
YXRpb25XcmFwcGVyKFZNJiB2bSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciB0YXJnZXQpCit7CisjaWYgRU5BQkxFKEZUTF9KSVQpCisgICAgLy8gV2Ug
c2hvdWxkbid0IGV2ZXIgYmUgZ2VuZXJhdGluZyB3cmFwcGVycyBmb3IgbmF0aXZlIGZ1bmN0aW9u
cy4KKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBzY3JpcHRFeGVjdXRhYmxlID0ganNDYXN0PFNjcmlw
dEV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKyAgICAKKyAgICBSZWdpc3RlclNldCB0b1NhdmUg
PSByZWdpc3RlcnNUb1ByZXNlcnZlKCk7CisgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ2lzdGVy
UHJlc2VydmF0aW9uT2Zmc2V0KCk7CisgICAgCisgICAgQXNzZW1ibHlIZWxwZXJzIGppdCgmdm0s
IDApOworICAgIAorICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5m
bzo6cmVnVDEpOworICAgIGppdC5sb2FkMzIoCisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6QWRk
cmVzcygKKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIs
CisgICAgICAgICAgICAoSlNTdGFjazo6QXJndW1lbnRDb3VudCAtIEpTU3RhY2s6OkNhbGxlckZy
YW1lQW5kUENTaXplKSAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSwKKyAgICAg
ICAgR1BSSW5mbzo6cmVnVDIpOworICAgIAorICAgIC8vIFBsYWNlIHRoZSBzdGFjayBwb2ludGVy
IHdoZXJlIHdlIHdhbnQgaXQgdG8gYmUuCisgICAgaml0LnN1YlB0cihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihvZmZzZXQpLCBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICAKKyAgICAvLyBDb21wdXRlIHRoZSBudW1iZXIgb2YgdGhpbmdzIHdlIHdpbGwg
YmUgY29weWluZy4KKyAgICBqaXQuYWRkMzIoCisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTMyKAorICAgICAgICAgICAgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIEpT
U3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDIpOwor
CisgICAgQVNTRVJUKCF0b1NhdmUuZ2V0KEdQUkluZm86OnJlZ1Q0KSk7CisgICAgaml0Lm1vdmUo
QXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDQpOwor
ICAgIAorICAgIEFzc2VtYmx5SGVscGVyczo6TGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAg
IGppdC5zdWIzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmVn
VDIpOworICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJl
Z1Q0LCBvZmZzZXQpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6
cmVnVDAsIEdQUkluZm86OnJlZ1Q0KTsKKyAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTMyKHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpyZWdUNCk7CisgICAgaml0
LmJyYW5jaFRlc3QzMihBc3NlbWJseUhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJlZ1QyKS5s
aW5rVG8obG9vcCwgJmppdCk7CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IHJlZ1Q0ICsgb2Zmc2V0
IHBvaW50cyB0byB3aGVyZSB3ZSBzYXZlIHRoaW5ncy4KKyAgICBwdHJkaWZmX3QgY3VycmVudE9m
ZnNldCA9IDA7CisgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QxLCBBc3NlbWJseUhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDQsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAKKyAgICBm
b3IgKEdQUlJlZyBncHIgPSBBc3NlbWJseUhlbHBlcnM6OmZpcnN0UmVnaXN0ZXIoKTsgZ3ByIDw9
IEFzc2VtYmx5SGVscGVyczo6bGFzdFJlZ2lzdGVyKCk7IGdwciA9IHN0YXRpY19jYXN0PEdQUlJl
Zz4oZ3ByICsgMSkpIHsKKyAgICAgICAgaWYgKCF0b1NhdmUuZ2V0KGdwcikpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgY3VycmVudE9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwor
ICAgICAgICBqaXQuc3RvcmU2NChncHIsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpyZWdUNCwgY3VycmVudE9mZnNldCkpOworICAgIH0KKyAgICAKKyAgICAvLyBBc3N1bWUgdGhh
dCB0aGVyZSBhcmVuJ3QgYW55IHNhdmVkIEZQIHJlZ2lzdGVycy4KKyAgICAKKyAgICAvLyBSZXN0
b3JlIHRoZSB0YWcgcmVnaXN0ZXJzLgorICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
OworICAgIGppdC5hZGQ2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihUYWdNYXNrIC0g
VGFnVHlwZU51bWJlciksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6
dGFnTWFza1JlZ2lzdGVyKTsKKworICAgIEFzc2VtYmx5SGVscGVyczo6Q2FsbCBjYWxsID0gaml0
Lm5lYXJDYWxsKCk7CisgICAgCisgICAgZ2VuZXJhdGVSZWdpc3RlclJlc3RvcmF0aW9uKGppdCk7
CisgICAgCisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCAmaml0LCBHTE9CQUxfVEhVTktf
SUQpOworICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQp
KTsKKyAgICAKKyAgICByZXR1cm4gRklOQUxJWkVfREZHX0NPREUobGlua0J1ZmZlciwgKCJSZWdp
c3RlciBwcmVzZXJ2YXRpb24gd3JhcHBlciBmb3IgJXMvJXMsICVwIiwgdG9DU3RyaW5nKHNjcmlw
dEV4ZWN1dGFibGUtPmhhc2hGb3IoQ29kZUZvckNhbGwpKS5kYXRhKCksIHRvQ1N0cmluZyhzY3Jp
cHRFeGVjdXRhYmxlLT5oYXNoRm9yKENvZGVGb3JDb25zdHJ1Y3QpKS5kYXRhKCksIHRhcmdldC5l
eGVjdXRhYmxlQWRkcmVzcygpKSk7CisjZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICAvLyBX
ZSBkb24ndCBzdXBwb3J0IG5vbi1GVEwgYnVpbGRzIGZvciB0d28gcmVhc29uczoKKyAgICAvLyAt
IEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IGN1cnJlbnRseSBvbmx5IHRoZSBGVEwgYm90dG9tcyBv
dXQgaW4gdGhpcyBjb2RlLgorICAgIC8vIC0gVGhlIGNvZGUgYWJvdmUgdXNlcyA2NC1iaXQgaW5z
dHJ1Y3Rpb25zLiBJdCBkb2Vzbid0IG5lY2Vzc2FyaWx5IGhhdmUgdG87IGl0IHdvdWxkIGJlCisg
ICAgLy8gICBlYXN5IHRvIGNoYW5nZSBpdCBzbyB0aGF0IGl0IGRvZXNuJ3QuIEJ1dCBvYnZpb3Vz
bHkgbWFraW5nIHRoYXQgY2hhbmdlIHdvdWxkIGJlIGEKKyAgICAvLyAgIHByZXJlcXVpc2l0ZSB0
byByZW1vdmluZyB0aGlzICNpZi4KKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKK30KKwordm9pZCBnZW5lcmF0ZVJlZ2lzdGVyUmVzdG9y
YXRpb24oQXNzZW1ibHlIZWxwZXJzJiBqaXQpCit7CisgICAgUmVnaXN0ZXJTZXQgdG9TYXZlID0g
cmVnaXN0ZXJzVG9QcmVzZXJ2ZSgpOworICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWdpc3RlclBy
ZXNlcnZhdGlvbk9mZnNldCgpOworICAgIAorICAgIC8vIFdlIG5lZWQgdG8gcGxhY2UgdGhlIHN0
YWNrIHBvaW50ZXIgYmFjayB0byB3aGVyZSB0aGUgY2FsbGVyIHRob3VnaHQgdGhleSBsZWZ0IGl0
LgorICAgIC8vIEJ1dCBhbHNvLCBpbiBvcmRlciB0byByZWNvdmVyIHRoZSByZWdpc3RlcnMsIHdl
IG5lZWQgdG8gZmlndXJlIG91dCBob3cgYmlnIHRoZQorICAgIC8vIGFyZ3VtZW50cyBhcmVhIGlz
LgorICAgIAorICAgIGppdC5sb2FkMzIoCisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6QWRkcmVz
cygKKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsCisg
ICAgICAgICAgICAoSlNTdGFjazo6QXJndW1lbnRDb3VudCAtIEpTU3RhY2s6OkNhbGxlckZyYW1l
QW5kUENTaXplKSAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSwKKyAgICAgICAg
R1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5sc2hpZnQzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW0zMigzKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIAorICAgIGppdC5hZGRQdHIoQXNzZW1i
bHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIob2Zmc2V0KSwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMik7CisgICAgCisgICAgLy8gV2Ugc2F2ZWQgdGhp
bmdzIGF0OgorICAgIC8vCisgICAgLy8gICAgIGFkalNQICsgKEpTU3RhY2s6OkNhbGxGcmFtZUhl
YWRlclNpemUgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSArIE51bUFyZ3MpICogOAor
ICAgIC8vCisgICAgLy8gV2hlcmU6CisgICAgLy8KKyAgICAvLyAgICAgYWRqU1AgPSBvcmlnU1Ag
LSBvZmZzZXQKKyAgICAvLworICAgIC8vIHJlZ1QyIG5vdyBwb2ludHMgYXQ6CisgICAgLy8KKyAg
ICAvLyAgICAgb3JpZ1NQICsgTnVtQXJncyAqIDgKKyAgICAvLyAgID0gYWRqU1AgKyBvZmZzZXQg
KyBOdW1BcmdzICogOAorICAgIC8vIAorICAgIC8vIFNvIGlmIHdlIHN1YnRyYWN0IG9mZnNldCBh
bmQgdGhlbiBhZGQgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSBhbmQgc3VidHJhY3QKKyAg
ICAvLyBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgd2UnbGwgZ2V0IHRoZSB0aGluZyB3
ZSB3YW50LgorICAgIHB0cmRpZmZfdCBjdXJyZW50T2Zmc2V0ID0gLW9mZnNldCArIHNpemVvZihS
ZWdpc3RlcikgKiAoCisgICAgICAgIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBKU1N0
YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSk7CisgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBjdXJyZW50T2Zmc2V0KSwgR1BSSW5mbzo6cmVn
VDEpOworICAgIAorICAgIGZvciAoR1BSUmVnIGdwciA9IEFzc2VtYmx5SGVscGVyczo6Zmlyc3RS
ZWdpc3RlcigpOyBncHIgPD0gQXNzZW1ibHlIZWxwZXJzOjpsYXN0UmVnaXN0ZXIoKTsgZ3ByID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihncHIgKyAxKSkgeworICAgICAgICBpZiAoIXRvU2F2ZS5nZXQo
Z3ByKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IHNp
emVvZihSZWdpc3Rlcik7CisgICAgICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QyLCBjdXJyZW50T2Zmc2V0KSwgZ3ByKTsKKyAgICB9CisgICAgCisg
ICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDEpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
cmVnaXN0ZXJSZXN0b3JhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAgICBBc3NlbWJs
eUhlbHBlcnMgaml0KHZtLCAwKTsKKyAgICBnZW5lcmF0ZVJlZ2lzdGVyUmVzdG9yYXRpb24oaml0
KTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQp
OworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiUmVnaXN0ZXIgcmVzdG9y
YXRpb24gdGh1bmsiKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclByZXNl
cnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclByZXNlcnZhdGlvbldy
YXBwZXJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yX2gKKyNkZWZpbmUgUmVnaXN0ZXJQcmVzZXJ2YXRp
b25XcmFwcGVyR2VuZXJhdG9yX2gKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJBc3Nl
bWJseUhlbHBlcnMuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNs
dWRlICJWTS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworUmVnaXN0ZXJTZXQgcmVnaXN0ZXJzVG9Q
cmVzZXJ2ZSgpOworCitwdHJkaWZmX3QgcmVnaXN0ZXJQcmVzZXJ2YXRpb25PZmZzZXQoKTsKKwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyYXRlUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVy
KFZNJiwgRXhlY3V0YWJsZUJhc2UqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFyZ2V0KTsKKwor
dm9pZCBnZW5lcmF0ZVJlZ2lzdGVyUmVzdG9yYXRpb24oQXNzZW1ibHlIZWxwZXJzJik7CisKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiByZWdpc3RlclJlc3RvcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0q
KTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5k
aWYgLy8gUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcw
LDE3ICsxMjcwLDE5IEBAIHZvaWQgcmVwYXRjaEluKAogICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNv
ZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkluKTsKIH0K
IAotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwg
Vk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQotewotICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRD
VElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdl
dENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOworc3RhdGlj
IHZvaWQgbGlua1Nsb3dGb3IoCisgICAgUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgVk0q
IHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCit7CisgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoCisgICAgICAgIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sCisgICAgICAgIHZtLT5nZXRDVElTdHViKHZpcnR1YWxUaHVua0dlbmVyYXRvckZvcihraW5k
LCByZWdpc3RlcnMpKS5jb2RlKCkpOwogfQogCi12b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVj
LCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ss
IEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKK3ZvaWQgbGlua0ZvcigKKyAgICBFeGVjU3RhdGUqIGV4
ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9j
aywKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRy
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsCisgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25N
b2RlIHJlZ2lzdGVycykKIHsKICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKTsKICAgICAK
QEAgLTEyOTYsMzEgKzEyOTgsMzggQEAgdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2Fs
bExpbmtJbgogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOwogICAgIGNhbGxM
aW5rSW5mby5jYWxsZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1lKCktPnZtKCksIGNhbGxMaW5rSW5m
by5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxl
ZSk7CiAgICAgY2FsbExpbmtJbmZvLmxhc3RTZWVuQ2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFt
ZSgpLT52bSgpLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwor
ICAgIGlmIChPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKSkKKyAgICAgICAgZGF0YUxvZygiTGlu
a2luZyBjYWxsIGluICIsICpjYWxsZXJDb2RlQmxvY2ssICIgYXQgIiwgY2FsbExpbmtJbmZvLmNv
ZGVPcmlnaW4sICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwgZW50cnlw
b2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxs
TGlua0luZm8uaG90UGF0aE90aGVyLCBjb2RlUHRyKTsKICAgICAKICAgICBpZiAoY2FsbGVlQ29k
ZUJsb2NrKQogICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoZXhlYy0+
Y2FsbGVyRnJhbWUoKSwgJmNhbGxMaW5rSW5mbyk7CiAgICAgCiAgICAgaWYgKGtpbmQgPT0gQ29k
ZUZvckNhbGwpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5l
cmF0b3IpLmNvZGUoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbFRodW5r
R2VuZXJhdG9yRm9yKHJlZ2lzdGVycykpLmNvZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCiAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgbGlua1Ns
b3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNvbnN0cnVjdCk7
CisgICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZv
ckNvbnN0cnVjdCwgcmVnaXN0ZXJzKTsKIH0KIAotdm9pZCBsaW5rU2xvd0ZvcihFeGVjU3RhdGUq
IGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpCit2b2lkIGxpbmtTbG93Rm9yKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJ
bmZvJiBjYWxsTGlua0luZm8sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwKKyAgICBSZWdp
c3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewogICAgIENvZGVCbG9jayogY2FsbGVy
Q29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7CiAgICAgVk0qIHZt
ID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwogICAgIAotICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hC
dWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIGtpbmQpOworICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hC
dWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIGtpbmQsIHJlZ2lzdGVycyk7CiB9CiAKLXZvaWQgbGlu
a0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8s
IENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXhlY3V0
YWJsZUJhc2UqIGV4ZWN1dGFibGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQordm9p
ZCBsaW5rQ2xvc3VyZUNhbGwoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssCisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlLCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY29kZVB0ciwKKyAgICBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewog
ICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIpOwogICAgIApAQCAtMTM4MCwxOCArMTM4OSwx
OCBAQCB2b2lkIGxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhCiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKICNlbmRpZgotICAgIHN0dWJKaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAg
c3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUMik7CiAg
ICAgCiAgICAgLy8gRklYTUU6IENTdGFjayAtIFRoaW5rIHRoZSByZXN0b3JlUmV0dXJuQWRkcmVz
c0JlZm9yZVJldHVybigpIGluc3RydWN0aW9uIHNob3VsZCBiZSBhIHBva2UKICAgICBzdHViSml0
LmJyZWFrcG9pbnQoKTsKLSAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0
dXJuKEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJl
c3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDIpOwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVt
cCBzbG93ID0gc3R1YkppdC5qdW1wKCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdm0sICZzdHViSml0LCBjYWxsZXJDb2RlQmxvY2spOwogICAgIAogICAgIHBhdGNoQnVmZmVy
LmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAg
ICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0
aW9uTGFiZWwodm0tPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgp
KSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+Z2V0
Q1RJU3R1Yih2aXJ0dWFsVGh1bmtHZW5lcmF0b3JGb3IoQ29kZUZvckNhbGwsIHJlZ2lzdGVycykp
LmNvZGUoKSkpOwogICAgIAogICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHVi
Um91dGluZSA9IGFkb3B0UmVmKG5ldyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAogICAgICAgICBG
SU5BTElaRV9ERkdfQ09ERSgKQEAgLTE0MDYsNyArMTQxNSw3IEBAIHZvaWQgbGlua0Nsb3N1cmVD
YWxsKEV4ZWNTdGF0ZSogZXhlYywgQ2EKICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVt
cCgKICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVn
aXN0ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbiksCiAgICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgbGlua1Nsb3dGb3IocmVwYXRj
aEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwpOworICAgIGxpbmtTbG93Rm9y
KHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsLCByZWdpc3RlcnMp
OwogICAgIAogICAgIGNhbGxMaW5rSW5mby5zdHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHJldmlzaW9uIDE2MDg1
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw5ICs0MSw5IEBAIHZvaWQgYnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZWNTdGF0ZSos
IEoKIHZvaWQgcmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2lu
ZCk7CiB2b2lkIGJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0
S2luZCk7CiB2b2lkIHJlcGF0Y2hJbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBjb25zdCBJZGVudGlm
aWVyJiwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1Yklu
Zm8mKTsKLXZvaWQgbGlua0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sq
LCBKU0Z1bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCk7Ci12b2lkIGxpbmtTbG93Rm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwotdm9pZCBsaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRl
KiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlKiwgRXhlY3V0YWJsZUJhc2Uq
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIpOwordm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxM
aW5rSW5mbyYsIENvZGVCbG9jayosIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUp
Owordm9pZCBsaW5rU2xvd0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpOwordm9pZCBsaW5rQ2xvc3Vy
ZUNhbGwoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlKiwg
RXhlY3V0YWJsZUJhc2UqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIsIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTW9kZSk7CiB2b2lkIHJlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1
YkluZm8mKTsKIHZvaWQgcmVzZXRQdXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwogdm9pZCByZXNldEluKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cAkocmV2aXNpb24gMTYwODUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyB2b2lk
IHNsb3dQYXRoRm9yKAogfQogCiBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JU
aHVua0dlbmVyYXRvcigKLSAgICBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
KyAgICBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsKICAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb24g
dGhlIHN0YWNrIG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhlbmNlCiAgICAgLy8g
c2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hpbGUgd2UgbWFrZSBh
IEMrKyBmdW5jdGlvbiBjYWxsCkBAIC0xMDksMzggKzEwOSw1OSBAQCBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGxpbmtGb3JUaHVuCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7
CiAgICAgCi0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwga2luZCA9PSBDb2RlRm9yQ2FsbCA/IG9w
ZXJhdGlvbkxpbmtDYWxsIDogb3BlcmF0aW9uTGlua0NvbnN0cnVjdCk7CisgICAgc2xvd1BhdGhG
b3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0ZvcihraW5kLCByZWdpc3RlcnMpKTsKICAgICAKICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgi
TGluayAlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDog
ImNvbnN0cnVjdCIpKTsKKyAgICAgICAgKCJMaW5rICVzJXMgc2xvdyBwYXRoIHRodW5rIiwga2lu
ZCA9PSBDb2RlRm9yQ2FsbCA/ICJjYWxsIiA6ICJjb25zdHJ1Y3QiLCByZWdpc3RlcnMgPT0gTXVz
dFByZXNlcnZlUmVnaXN0ZXJzID8gIiB0aGF0IHByZXNlcnZlcyByZWdpc3RlcnMiIDogIiIpKTsK
IH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZt
KQogewotICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsKTsK
KyAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ2FsbCwgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBs
aW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBsaW5rRm9y
VGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QpOworICAgIHJldHVybiBsaW5rRm9y
VGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QsIFJlZ2lzdGVyUHJlc2VydmF0aW9u
Tm90UmVxdWlyZWQpOwogfQogCi0vLyBGb3IgY2xvc3VyZSBvcHRpbWl6YXRpb25zLCB3ZSBvbmx5
IGluY2x1ZGUgY2FsbHMsIHNpbmNlIGlmIHlvdSdyZSB1c2luZyBjbG9zdXJlcyBmb3IKLS8vIG9i
amVjdCBjb25zdHJ1Y3Rpb24gdGhlbiB5b3UncmUgZ29pbmcgdG8gbG9zZSBiaWcgdGltZSBhbnl3
YXkuCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3Io
Vk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGhhdFByZXNlcnZlc1JlZ3NU
aHVua0dlbmVyYXRvcihWTSogdm0pCit7CisgICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRv
cih2bSwgQ29kZUZvckNhbGwsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7Cit9CisKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRv
cihWTSogdm0pCit7CisgICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZv
ckNvbnN0cnVjdCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKK30KKworc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxGb3JUaHVua0dlbmVyYXRvcigKKyAgICBWTSog
dm0sIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgQ0NhbGxIZWxw
ZXJzIGppdCh2bSk7CiAgICAgCi0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlu
a0Nsb3N1cmVDYWxsKTsKKyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2xv
c3VyZUNhbGxGb3IocmVnaXN0ZXJzKSk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
cGF0Y2hCdWZmZXIsICgiTGluayBjbG9zdXJlIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOworICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxpbmsgY2xvc3VyZSBjYWxsICVz
IHNsb3cgcGF0aCB0aHVuayIsIHJlZ2lzdGVycyA9PSBNdXN0UHJlc2VydmVSZWdpc3RlcnMgPyAi
IHRoYXQgcHJlc2VydmVzIHJlZ2lzdGVycyIgOiAiIikpOworfQorCisvLyBGb3IgY2xvc3VyZSBv
cHRpbWl6YXRpb25zLCB3ZSBvbmx5IGluY2x1ZGUgY2FsbHMsIHNpbmNlIGlmIHlvdSdyZSB1c2lu
ZyBjbG9zdXJlcyBmb3IKKy8vIG9iamVjdCBjb25zdHJ1Y3Rpb24gdGhlbiB5b3UncmUgZ29pbmcg
dG8gbG9zZSBiaWcgdGltZSBhbnl3YXkuCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1
cmVDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIHJldHVybiBsaW5rQ2xvc3VyZUNh
bGxGb3JUaHVua0dlbmVyYXRvcih2bSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7
Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVz
UmVnc1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAgICByZXR1cm4gbGlua0Nsb3N1cmVDYWxs
Rm9yVGh1bmtHZW5lcmF0b3Iodm0sIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CiB9CiAKIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKAotICAgIFZN
KiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgIFZNKiB2bSwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQog
ewogICAgIC8vIFRoZSBjYWxsZWUgaXMgaW4gcmVnVDAgKGZvciBKU1ZBTFVFMzJfNjQsIHRoZSB0
YWcgaXMgaW4gcmVnVDEpLgogICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUgc3Rh
Y2ssIG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhlbmNlCkBAIC0xNTUsMzMgKzE3
NiwzNCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUCiAgICAgLy8g
dGhlIERGRyBrbm93cyB0aGF0IHRoZSB2YWx1ZSBpcyBkZWZpbml0ZWx5IGEgY2VsbCwgb3IgZGVm
aW5pdGVseSBhIGZ1bmN0aW9uLgogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoVGFnTWFzayksIEdQUkluZm86OnJlZ1QyKTsK
KyAgICAKICAgICBzbG93Q2FzZS5hcHBlbmQoCiAgICAgICAgIGppdC5icmFuY2hUZXN0NjQoCi0g
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm9uWmVybywg
R1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QyKSk7CiAjZWxzZQogICAgIHNsb3dDYXNlLmFw
cGVuZCgKICAgICAgICAgaml0LmJyYW5jaDMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpO
b3RFcXVhbCwgR1BSSW5mbzo6cmVnVDEsCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwogI2VuZGlmCi0gICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgR1BS
SW5mbzo6cmVnVDIpOwogICAgIHNsb3dDYXNlLmFwcGVuZCgKICAgICAgICAgaml0LmJyYW5jaFB0
cigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMiwgU3RydWN0dXJlOjpjbGFzc0lu
Zm9PZmZzZXQoKSksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
cmVnVDIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAogICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTRnVuY3Rpb246OmluZm8oKSkpKTsKICAgICAKICAgICAv
LyBOb3cgd2Uga25vdyB3ZSBoYXZlIGEgSlNGdW5jdGlvbi4KICAgICAKICAgICBqaXQubG9hZFB0
cigKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksCi0gICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjIp
OwotICAgIHNsb3dDYXNlLmFwcGVuZCgKLSAgICAgICAgaml0LmJyYW5jaDMyKAotICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcygKLSAgICAgICAgICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIyLCBFeGVjdXRhYmxlQmFz
ZTo6b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzRm9yKGtpbmQpKSwKLSAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIEdQUkluZm86OnJlZ1QyKTsKKyAgICBq
aXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAg
R1BSSW5mbzo6cmVnVDIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlD
aGVja0ZvcihraW5kLCByZWdpc3RlcnMpKSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDIpOworICAg
IHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQ
UkluZm86OnJlZ1QyKSk7CiAgICAgCiAgICAgLy8gTm93IHdlIGtub3cgdGhhdCB3ZSBoYXZlIGEg
Q29kZUJsb2NrLCBhbmQgd2UncmUgY29tbWl0dGVkIHRvIG1ha2luZyBhIGZhc3QKICAgICAvLyBj
YWxsLgpAQCAtMTk3LDM0ICsyMTksNDAgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2
aXJ0dWFsRm9yVAogICAgICAgICBKU1N0YWNrOjpTY29wZUNoYWluKTsKICNlbmRpZgogICAgIAot
ICAgIGppdC5sb2FkUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
bm9uQXJnR1BSMiwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNr
Rm9yKGtpbmQpKSwKLSAgICAgICAgR1BSSW5mbzo6cmVnVDApOwotICAgIAogICAgIC8vIE1ha2Ug
YSB0YWlsIGNhbGwuIFRoaXMgd2lsbCByZXR1cm4gYmFjayB0byBKSVQgY29kZS4KLSAgICBlbWl0
UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgaml0Lmp1bXAoR1BS
SW5mbzo6cmVnVDApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJl
Z1QyKTsKKyAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMik7CiAKICAgICBzbG93Q2FzZS5saW5r
KCZqaXQpOwogICAgIAogICAgIC8vIEhlcmUgd2UgZG9uJ3Qga25vdyBhbnl0aGluZywgc28gcmV2
ZXJ0IHRvIHRoZSBmdWxsIHNsb3cgcGF0aC4KICAgICAKLSAgICBzbG93UGF0aEZvcihqaXQsIHZt
LCBraW5kID09IENvZGVGb3JDYWxsID8gb3BlcmF0aW9uVmlydHVhbENhbGwgOiBvcGVyYXRpb25W
aXJ0dWFsQ29uc3RydWN0KTsKKyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25WaXJ0
dWFsRm9yKGtpbmQsIHJlZ2lzdGVycykpOwogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KAogICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJWaXJ0dWFsICVzIHNsb3cgcGF0aCB0
aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyAiY2FsbCIgOiAiY29uc3RydWN0IikpOworICAg
ICAgICAoIlZpcnR1YWwgJXMlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxs
ID8gImNhbGwiIDogImNvbnN0cnVjdCIsIHJlZ2lzdGVycyA9PSBNdXN0UHJlc2VydmVSZWdpc3Rl
cnMgPyAiIHRoYXQgcHJlc2VydmVzIHJlZ2lzdGVycyIgOiAiIikpOwogfQogCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0
dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNhbGwpOworICAgIHJldHVy
biB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNl
cnZhdGlvbk5vdFJlcXVpcmVkKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxD
b25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JU
aHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJuIHZpcnR1YWxG
b3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCwgUmVnaXN0ZXJQcmVzZXJ2YXRp
b25Ob3RSZXF1aXJlZCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRo
YXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIHJldHVybiB2aXJ0
dWFsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsLCBNdXN0UHJlc2VydmVSZWdpc3Rl
cnMpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdFRoYXRQcmVz
ZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIHJldHVybiB2aXJ0dWFsRm9y
VGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVy
cyk7CiB9CiAKIGVudW0gVGh1bmtFbnRyeVR5cGUgeyBFbnRlclZpYUNhbGwsIEVudGVyVmlhSnVt
cCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5o
CShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVmIFRodW5r
R2VuZXJhdG9yc19oCiAjZGVmaW5lIFRodW5rR2VuZXJhdG9yc19oCiAKKyNpbmNsdWRlICJDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2Rl
LmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3IuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBAIC0z
NSwxMSArMzcsNzggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbQog
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSopOwogTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSopOworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRv
cihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVz
UmVnc1RodW5rR2VuZXJhdG9yKFZNKik7CisKK2lubGluZSBUaHVua0dlbmVyYXRvciBsaW5rVGh1
bmtHZW5lcmF0b3JGb3IoCisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBSZWdpc3Rl
clByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAg
IGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAg
IGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgIHJldHVy
biBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yOworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lz
dGVyczoKKyAgICAgICAgICAgIHJldHVybiBsaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtH
ZW5lcmF0b3I7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2RlRm9yQ29u
c3RydWN0OgorICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAgICBjYXNlIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICByZXR1cm4gbGlua0NvbnN0
cnVjdFRodW5rR2VuZXJhdG9yOworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoK
KyAgICAgICAgICAgIHJldHVybiBsaW5rQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dl
bmVyYXRvcjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KIAogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihW
TSopOworCitpbmxpbmUgVGh1bmtHZW5lcmF0b3IgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0
b3JGb3IoUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sKKyAgICBzd2l0Y2gg
KHJlZ2lzdGVycykgeworICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoK
KyAgICAgICAgcmV0dXJuIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yOworICAgIGNhc2Ug
TXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICByZXR1cm4gbGlua0Nsb3N1cmVDYWxsVGhh
dFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2
aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB2aXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dl
bmVyYXRvcihWTSopOworCitpbmxpbmUgVGh1bmtHZW5lcmF0b3IgdmlydHVhbFRodW5rR2VuZXJh
dG9yRm9yKAorICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIENv
ZGVGb3JDYWxsOgorICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAgICBjYXNlIFJl
Z2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICByZXR1cm4gdmlydHVh
bENhbGxUaHVua0dlbmVyYXRvcjsKKyAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6
CisgICAgICAgICAgICByZXR1cm4gdmlydHVhbENhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2Vu
ZXJhdG9yOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29kZUZvckNvbnN0
cnVjdDoKKyAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdpc3Rl
clByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxDb25z
dHJ1Y3RUaHVua0dlbmVyYXRvcjsKKyAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6
CisgICAgICAgICAgICByZXR1cm4gdmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzVGh1
bmtHZW5lcmF0b3I7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CiAKIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcAkocmV2aXNpb24gMTYwODUxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDE0ICs0NywxMiBAQCBzdGF0aWMgdm9pZCBzZXRGdW5jdGlvbkVudHJ5
cG9pbnQoVk0mIHZtCiAgICAgaWYgKHZtLmNhblVzZUpJVCgpKSB7CiAgICAgICAgIGlmIChraW5k
ID09IENvZGVGb3JDYWxsKSB7CiAgICAgICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0g
ICAgICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1Yihm
dW5jdGlvbkZvckNhbGxFbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJU
aHVuaykpLAotICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsQXJp
dHlDaGVja1RodW5rR2VuZXJhdG9yKS5jb2RlKCkpOworICAgICAgICAgICAgICAgIGFkb3B0UmVm
KG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsRW50cnlUaHVu
a0dlbmVyYXRvciksIHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5r
R2VuZXJhdG9yKS5jb2RlKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNv
bnN0cnVjdCk7CiAgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgICAgIGFk
b3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1
Y3RFbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAotICAg
ICAgICAgICAgdm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVu
a0dlbmVyYXRvcikuY29kZSgpKTsKKyAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRD
b2RlKHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9y
KSwgdm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVy
YXRvcikuY29kZSgpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkBAIC02MiwxNCArNjAsMTIgQEAgc3Rh
dGljIHZvaWQgc2V0RnVuY3Rpb25FbnRyeXBvaW50KFZNJiB2bQogICAgIFVOVVNFRF9QQVJBTSh2
bSk7CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKICAgICAgICAgY29kZUJsb2NrLT5z
ZXRKSVRDb2RlKAotICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9B
c3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVuY3Rpb25fZm9yX2Nh
bGxfcHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSksCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9mdW5jdGlvbl9m
b3JfY2FsbF9hcml0eV9jaGVjaykpOworICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJ
VENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVu
Y3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxM
SW50Q29kZVB0cihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjayksIEpJVENvZGU6
OkludGVycHJldGVyVGh1bmspKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJU
KGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CiAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAot
ICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6
OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3Vl
KSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2Fy
aXR5X2NoZWNrKSk7CisgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25z
dHJ1Y3RfcHJvbG9ndWUpLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0
cihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrKSwgSklUQ29kZTo6SW50
ZXJwcmV0ZXJUaHVuaykpKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0RXZhbEVudHJ5cG9pbnQoVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKQEAgLTc3LDE2ICs3MywxNCBAQCBzdGF0aWMgdm9p
ZCBzZXRFdmFsRW50cnlwb2ludChWTSYgdm0sIENvCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAo
dm0uY2FuVXNlSklUKCkpIHsKICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAg
ICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1YihldmFsRW50cnlU
aHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKKyAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJl
Y3RKSVRDb2RlKHZtLmdldENUSVN0dWIoZXZhbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIoKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAgICAgVU5VU0VEX1BBUkFN
KHZtKTsKICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgIGFkb3B0UmVmKG5ldyBE
aXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxs
aW50X2V2YWxfcHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSksCi0gICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKKyAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJ
VENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZXZh
bF9wcm9sb2d1ZSksIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLCBKSVRDb2RlOjpJbnRlcnByZXRl
clRodW5rKSkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRQcm9ncmFtRW50cnlwb2ludChWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrKQpAQCAtOTQsMTYgKzg4LDE0IEBAIHN0YXRpYyB2b2lkIHNl
dFByb2dyYW1FbnRyeXBvaW50KFZNJiB2bSwKICNpZiBFTkFCTEUoSklUKQogICAgIGlmICh2bS5j
YW5Vc2VKSVQoKSkgewogICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgICAg
ICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKHByb2dyYW1FbnRyeVRo
dW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOworICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVj
dEpJVENvZGUodm0uZ2V0Q1RJU3R1Yihwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvciksIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cigpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICAgICBVTlVTRURfUEFS
QU0odm0pOwogICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgYWRvcHRSZWYobmV3
IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYo
bGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOworICAgICAgICBhZG9wdFJlZihuZXcgRGly
ZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGlu
dF9wcm9ncmFtX3Byb2xvZ3VlKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksIEpJVENvZGU6Oklu
dGVycHJldGVyVGh1bmspKSk7CiB9CiAKIHZvaWQgc2V0RW50cnlwb2ludChWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsNyAr
MzQ2LDkgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihFeGVjUwogICAgIGlm
IChraW5kID09IFByb2xvZ3VlKQogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+
aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzcygpLCAwKTsKICAgICBBU1NFUlQoa2luZCA9PSBB
cml0eUNoZWNrKTsKLSAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZVdpdGhB
cml0eUNoZWNrKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgMCk7CisgICAgTExJTlRfUkVUVVJOX1RX
Tyhjb2RlQmxvY2stPmppdENvZGUoKS0+YWRkcmVzc0ZvckNhbGwoCisgICAgICAgICpjb2RlQmxv
Y2stPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIE11c3RDaGVja0FyaXR5LAor
ICAgICAgICBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKS5leGVjdXRhYmxlQWRkcmVz
cygpLCAwKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyKQpAQCAtMTA0Niw3
ICsxMDQ4LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gMDsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29k
ZVB0ciA9IGV4ZWN1dGFibGUtPmhvc3RDb2RlRW50cnlGb3Ioa2luZCk7CisgICAgICAgIGNvZGVQ
dHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKHZtLCBraW5kLCBNdXN0Q2hlY2tBcml0eSwg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiAgICAgZWxzZSB7CiAgICAgICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1
bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBjYWxsZWUt
PnNjb3BlKCksIGtpbmQpOwpAQCAtMTA1NCwxMiArMTA1NiwxNiBAQCBpbmxpbmUgU2xvd1BhdGhS
ZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjCiAgICAgICAgICAgICBMTElOVF9DQUxMX1RIUk9XKGV4
ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCksIGVycm9yKTsKICAgICAgICAgY29kZUJsb2NrID0gZnVu
Y3Rpb25FeGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCk7CiAgICAgICAgIEFTU0VSVChjb2Rl
QmxvY2spOworICAgICAgICBBcml0eUNoZWNrTW9kZSBhcml0eTsKICAgICAgICAgaWYgKGV4ZWND
YWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+
KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKLSAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5j
dGlvbkV4ZWN1dGFibGUtPmpzQ29kZVdpdGhBcml0eUNoZWNrRW50cnlGb3Ioa2luZCk7CisgICAg
ICAgICAgICBhcml0eSA9IE11c3RDaGVja0FyaXR5OwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5qc0NvZGVFbnRyeUZvcihraW5kKTsKKyAg
ICAgICAgICAgIGFyaXR5ID0gQXJpdHlDaGVja05vdFJlcXVpcmVkOworICAgICAgICBjb2RlUHRy
ID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKHZtLCBraW5kLCBhcml0eSwgUmVn
aXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiAgICAgfQogICAgIAorICAgIEFTU0VSVCgh
IWNvZGVQdHIpOworICAgIAogICAgIGlmICghTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XICYmIGNh
bGxMaW5rSW5mbykgewogICAgICAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZXIgPSBleGVjQ2FsbGVl
LT5jYWxsZXJGcmFtZSgpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FyaXR5Q2hlY2tNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJpdHlDaGVja01vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyaXR5Q2hlY2tNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEFyaXR5Q2hlY2tNb2RlX2gKKyNkZWZpbmUgQXJpdHlDaGVja01vZGVfaAorCitu
YW1lc3BhY2UgSlNDIHsKKworZW51bSBBcml0eUNoZWNrTW9kZSB7CisgICAgQXJpdHlDaGVja05v
dFJlcXVpcmVkLAorICAgIE11c3RDaGVja0FyaXR5Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEFyaXR5Q2hlY2tNb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNjA4NTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzcsNiArMjM3LDEwIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF90b190aGlzKQogewogICAgIEJFR0lOKCk7CiAgICAgSlNWYWx1ZSB2MSA9IE9QKDEpLmpzVmFs
dWUoKTsKKyAgICBpZiAodjEgPT0ganNOdW1iZXIoMCkpIHsKKyAgICAgICAgZGF0YUxvZygiICAg
IFdlIGhhdmUgYSB3aW5uZXIhIVxuIik7CisgICAgICAgIGFzbSB2b2xhdGlsZSAoImludCAkM1xu
Iik7CisgICAgfQogICAgIGlmICh2MS5pc0NlbGwoKSkKICAgICAgICAgcGNbMl0udS5zdHJ1Y3R1
cmUuc2V0KGV4ZWMtPnZtKCksIGV4ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwg
djEuYXNDZWxsKCktPnN0cnVjdHVyZSgpKTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMTYwODUxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExOCwxMiArMTE4LDE0IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENv
ZGUoQ29kZUIKICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICBjYXNlIENvZGVGb3JDYWxsOgogICAg
ICAgICBtX2ppdENvZGVGb3JDYWxsID0gZ2VuZXJpY0NvZGVCbG9jay0+aml0Q29kZSgpOwotICAg
ICAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBnZW5lcmljQ29kZUJsb2NrLT5q
aXRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKKyAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0
eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisgICAgICAgIG1faml0Q29kZUZvckNh
bGxXaXRoQXJpdHlDaGVja0FuZFByZXNlcnZlUmVncyA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigp
OwogICAgICAgICBtX251bVBhcmFtZXRlcnNGb3JDYWxsID0gZ2VuZXJpY0NvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6
CiAgICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IGdlbmVyaWNDb2RlQmxvY2stPmppdENv
ZGUoKTsKLSAgICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBnZW5l
cmljQ29kZUJsb2NrLT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKKyAgICAgICAgbV9qaXRDb2Rl
Rm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKKyAg
ICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3Mg
PSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKICAgICAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ29u
c3RydWN0ID0gZ2VuZXJpY0NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOwogICAgICAgICBicmVh
azsKICAgICB9CkBAIC0xMzMsNyArMTM1LDYgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0
YWxsQ29kZShDb2RlQgogICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpz
Q2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOwogICAgICAgICBQcm9ncmFtQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxQcm9ncmFtQ29kZUJsb2NrKj4oZ2VuZXJpY0NvZGVC
bG9jayk7CiAgICAgICAgIAotICAgICAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZVdpdGhB
cml0eUNoZWNrKCkpOwogICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CiAgICAg
ICAgIAogICAgICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX3Byb2dyYW1Db2RlQmxv
Y2s7CkBAIC0xNDUsNyArMTQ2LDYgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29k
ZShDb2RlQgogICAgICAgICBFdmFsRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxFdmFs
RXhlY3V0YWJsZSo+KHRoaXMpOwogICAgICAgICBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBz
dGF0aWNfY2FzdDxFdmFsQ29kZUJsb2NrKj4oZ2VuZXJpY0NvZGVCbG9jayk7CiAgICAgICAgIAot
ICAgICAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZVdpdGhBcml0eUNoZWNrKCkpOwogICAg
ICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CiAgICAgICAgIAogICAgICAgICBvbGRD
b2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxNjA4NTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgRXhlY3V0YWJsZV9oCiAjZGVmaW5lIEV4ZWN1dGFi
bGVfaAogCisjaW5jbHVkZSAiQXJpdHlDaGVja01vZGUuaCIKICNpbmNsdWRlICJDYWxsRGF0YS5o
IgogI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRp
b25LaW5kLmgiCkBAIC0zNiw2ICszNyw3IEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNp
bmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRl
ICJSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUuaCIKICNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIK
ICNpbmNsdWRlICJTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIK
QEAgLTE0NCwzNyArMTQ2LDk0IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29k
ZUZvckNvbnN0cnVjdCk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3Ry
dWN0KCk7CiAgICAgfQotCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGdlbmVyYXRlZEpJVENv
ZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2soKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1faml0Q29k
ZUZvckNhbGwpOwotICAgICAgICBBU1NFUlQobV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNr
KTsKLSAgICAgICAgcmV0dXJuIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjazsKLSAgICB9
Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZ2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVj
dFdpdGhBcml0eUNoZWNrKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2ppdENvZGVGb3JDb25z
dHJ1Y3QpOwotICAgICAgICBBU1NFUlQobV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hl
Y2spOwotICAgICAgICByZXR1cm4gbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2s7
Ci0gICAgfQotICAgICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZ2VuZXJhdGVkSklU
Q29kZVdpdGhBcml0eUNoZWNrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLSAgICB7
Ci0gICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgcmV0dXJuIGdl
bmVyYXRlZEpJVENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2soKTsKLSAgICAgICAgQVNTRVJUKGtp
bmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRDb2Rl
Rm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2soKTsKLSAgICB9Ci0gICAgICAgIAotICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3IoQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kKQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBlbnRyeXBv
aW50Rm9yKAorICAgICAgICBWTSYgdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgQXJp
dHlDaGVja01vZGUgYXJpdHksIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiAg
ICAgewotICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1faml0Q29kZUZvckNhbGxXaXRoQXJp
dHlDaGVjayk7Ci0gICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAg
ICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVCYXNlLCBtX2ppdENvZGVGb3JD
b25zdHJ1Y3RXaXRoQXJpdHlDaGVjayk7CisgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBj
YWNoZWQgcmVzdWx0LiBXZSBvbmx5IGhhdmUgaXQgZm9yIGFyaXR5IGNoZWNrIGJlY2F1c2Ugd2Ug
dXNlIHRoZQorICAgICAgICAvLyBuby1hcml0eSBlbnRyeXBvaW50IGluIG5vbi12aXJ0dWFsIGNh
bGxzLCB3aGljaCB3aWxsICJjYWNoZSIgdGhpcyB2YWx1ZSBkaXJlY3RseSBpbgorICAgICAgICAv
LyBtYWNoaW5lIGNvZGUuCisgICAgICAgIGlmIChhcml0eSA9PSBNdXN0Q2hlY2tBcml0eSkgewor
ICAgICAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgICAgICBjYXNlIENvZGVGb3JDYWxs
OgorICAgICAgICAgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgICAgICAg
ICBpZiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9IG1faml0Q29kZUZvckNhbGxXaXRo
QXJpdHlDaGVjaykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTXVzdFByZXNlcnZl
UmVnaXN0ZXJzOgorICAgICAgICAgICAgICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IHJlc3VsdCA9IG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVja0FuZFByZXNlcnZlUmVncykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KHJlZ2lzdGVycykgeworICAgICAgICAgICAgICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25O
b3RSZXF1aXJlZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciByZXN1bHQgPSBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAg
ICAgICAgICAgICBpZiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9IG1faml0Q29kZUZv
ckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdzKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPQorICAgICAgICAg
ICAgZ2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwodm0sIHRoaXMsIGFy
aXR5LCByZWdpc3RlcnMpOworICAgICAgICBpZiAoYXJpdHkgPT0gTXVzdENoZWNrQXJpdHkpIHsK
KyAgICAgICAgICAgIC8vIENhY2hlIHRoZSByZXN1bHQ7IHRoaXMgaXMgbmVjZXNzYXJ5IGZvciB0
aGUgSklUJ3MgdmlydHVhbCBjYWxsIG9wdGltaXphdGlvbnMuCisgICAgICAgICAgICBzd2l0Y2gg
KGtpbmQpIHsKKyAgICAgICAgICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAgICAgICAgICAg
c3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGxX
aXRoQXJpdHlDaGVjayA9IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICAgICAg
ICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVja0FuZFByZXNlcnZlUmVncyA9IHJlc3Vs
dDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAg
ICAgICAgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgICAgICAgICAgY2FzZSBS
ZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgICAgICAgICBtX2pp
dENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IHJlc3VsdDsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6
CisgICAgICAgICAgICAgICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNr
QW5kUHJlc2VydmVSZWdzID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKAorICAgICAgICBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMp
CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBDb2RlRm9yQ2Fs
bDoKKyAgICAgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAgICAgICBjYXNlIFJl
Z2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNo
ZWNrKTsKKyAgICAgICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAg
ICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1faml0Q29kZUZv
ckNhbGxXaXRoQXJpdHlDaGVja0FuZFByZXNlcnZlUmVncyk7CisgICAgICAgICAgICB9CisgICAg
ICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJz
KSB7CisgICAgICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9q
aXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2spOworICAgICAgICAgICAgY2FzZSBNdXN0
UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2tBbmRQ
cmVzZXJ2ZVJlZ3MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICAgICAg
CisgICAgCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnNGb3IoQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogICAgIHsKICAgICAgICAgaWYgKGtpbmQgPT0gQ29k
ZUZvckNhbGwpCkBAIC0yMTEsMjEgKzI3MCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE5v
SW50cmluc2ljOwogICAgIH0KICAgICAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGhv
c3RDb2RlRW50cnlGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKCk7Ci0g
ICAgfQotCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGpzQ29kZUVudHJ5Rm9yKENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRD
b2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOwotICAgIH0KLQotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBqc0NvZGVXaXRoQXJpdHlDaGVja0VudHJ5Rm9yKENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0ZWRKSVRDb2RlV2l0aEFy
aXR5Q2hlY2tGb3Ioa2luZCk7Ci0gICAgfQotCiBwcm90ZWN0ZWQ6CiAgICAgRXhlY3V0YWJsZUJh
c2UqIG1fcHJldjsKICAgICBFeGVjdXRhYmxlQmFzZSogbV9uZXh0OwpAQCAtMjM0LDYgKzI3OCw4
IEBAIHByb3RlY3RlZDoKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlRm9yQ29uc3RydWN0
OwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hl
Y2s7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhB
cml0eUNoZWNrOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVGb3JDYWxsV2l0
aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3M7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1f
aml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdzOwogfTsKIAog
Y2xhc3MgTmF0aXZlRXhlY3V0YWJsZSA6IHB1YmxpYyBFeGVjdXRhYmxlQmFzZSB7CkBAIC0yODgs
OCArMzM0LDYgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBQ
YXNzUmVmUHRyPEpJVENvZGU+IGNhbGxUaHVuaywgUGFzc1JlZlB0cjxKSVRDb2RlPiBjb25zdHJ1
Y3RUaHVuaywgSW50cmluc2ljIGludHJpbnNpYykKICAgICB7CiAgICAgICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKLSAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0g
Y2FsbFRodW5rID8gY2FsbFRodW5rLT5hZGRyZXNzRm9yQ2FsbCgpIDogTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKCk7Ci0gICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0g
Y29uc3RydWN0VGh1bmsgPyBjb25zdHJ1Y3RUaHVuay0+YWRkcmVzc0ZvckNhbGwoKSA6IE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cigpOwogICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gY2FsbFRodW5r
OwogICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBjb25zdHJ1Y3RUaHVuazsKICAgICAg
ICAgbV9pbnRyaW5zaWMgPSBpbnRyaW5zaWM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdpc3RlclByZXNlcnZhdGlvbk1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdpc3RlclByZXNlcnZhdGlvbk1vZGUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ2lzdGVyUHJlc2VydmF0
aW9uTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBSZWdpc3RlclByZXNlcnZh
dGlvbk1vZGVfaAorI2RlZmluZSBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGVfaAorCituYW1lc3Bh
Y2UgSlNDIHsKKworZW51bSBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgeworICAgIFJlZ2lzdGVy
UHJlc2VydmF0aW9uTm90UmVxdWlyZWQsCisgICAgTXVzdFByZXNlcnZlUmVnaXN0ZXJzCit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9k
ZV9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219689</attachid>
            <date>2013-12-19 15:07:26 -0800</date>
            <delta_ts>2013-12-19 15:40:02 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>151165</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwODUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4MSBA
QAorMjAxMy0xMi0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgYmUgYWJsZSB0byBkbyBjYWxsIElDcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1ODExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGQgQ2FsbC9Db25zdHJ1Y3QgaW5s
aW5lIGNhY2hpbmcgdG8gdGhlIEZUTC4gVGhhdCBwYXJ0IGlzIHN1cGVyIGVhc3kuCisgICAgICAg
IAorICAgICAgICBCdXQgdG8gbWFrZSBpdCBwb3NzaWJsZSBmb3IgdGhlIEZUTCAod2hpY2ggcHJl
c2VydmVzIHN5c3RlbSBBQkkgY2FsbGVlLXNhdmUgcmVnaXN0ZXJzCisgICAgICAgIGFuZCBleHBl
Y3RzIGNhbGxzIHRvIHByZXNlcnZlIHRoZW0pIHRvIGNhbGwgaW50byBub24tRlRMIEpTQyBKSVRz
ICh3aGljaCBkb24ndCBwcmVzZXJ2ZQorICAgICAgICBhbnkgcmVnaXN0ZXJzKSwgd2UgbmVlZCB0
byBoYXZlIHNvbWUgc3BlY2lhbCB0aHVua3MuIFRoYXQncyBtb3N0IG9mIHRoZSBwYXRjaC4gSW4K
KyAgICAgICAgcGFydGljdWxhciwgYWxsIEpJVENvZGUncyBjYW4gbm93IGdpdmUgeW91IGVudHJ5
cG9pbnRzIHdpdGggb3Igd2l0aG91dCByZWdpc3RlcgorICAgICAgICBwcmVzZXJ2YXRpb24gYW5k
IHRoaXMgbWF5IG1lYW4gbGF6aWx5IGNyZWF0aW5nIHdyYXBwZXIgdGh1bmtzIHRoYXQgcHJlc2Vy
dmUgcmVnaXN0ZXJzLgorICAgICAgICBGVEwgT1NSIGV4aXQgbWF5IGludm9sdmUgZXhpdGluZyBp
bnRvIGEgcmVnaXN0ZXIgcmVzdG9yYXRpb24gdGh1bmsgYW5kIGl0IG1heSBhbHNvCisgICAgICAg
IGludm9sdmUgZGVjb2RpbmcgRlRMIHVud2luZCBpbmZvIGluIG9yZGVyIHRvIGZpZ3VyZSBvdXQg
d2hlcmUgcmVnaXN0ZXJzIHdlcmUgcHJlc2VydmVkLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6
b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSopOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6Om9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKToKKyAgICAgICAgKiBi
eXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnVu
bGluayk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmg6CisgICAgICAgIChKU0M6
OkNhbGxMaW5rSW5mbzo6Q2FsbExpbmtJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRKSVRDb2RlKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpqaXRDb2RlKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpjb21waWxlSW1wbCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBp
bGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAg
ICogZGZnL0RGR0pJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxp
emVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5hbGl6
ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKiBmdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAg
ICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bW1BbGxvY2F0
ZUNvZGVTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpmaXhGdW5jdGlvbkJhc2VkT25TdGFj
a01hcHMpOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExJ
bmxpbmVDYWNoZVNpemUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OnNpemVPZkNhbGwpOgorICAg
ICAgICAqIGZ0bC9GVExJbmxpbmVDYWNoZVNpemUuaDoKKyAgICAgICAgKiBmdGwvRlRMSW50cmlu
c2ljUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExKSVRDb2RlLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpKSVRDb2RlOjppbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6
RlRMOjpKSVRDb2RlOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
RlRMOjpKSVRDb2RlOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpK
SVRDb2RlOjpvZmZzZXRPZik6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6Y29udGFpbnMpOgorICAgICAgICAqIGZ0bC9GVExK
SVRDb2RlLmg6CisgICAgICAgICogZnRsL0ZUTEpJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBmdGwv
RlRMSlNDYWxsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6SlNDYWxsOjpKU0NhbGwp
OgorICAgICAgICAoSlNDOjpGVEw6OkpTQ2FsbDo6ZW1pdCk6CisgICAgICAgIChKU0M6OkZUTDo6
SlNDYWxsOjpsaW5rKToKKyAgICAgICAgKiBmdGwvRlRMSlNDYWxsLmg6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpGVEw6OkpTQ2FsbDo6c3RhY2ttYXBJRCk6CisgICAgICAgIChKU0M6OkZUTDo6SlND
YWxsOjpvcGVyYXRvcjwpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd2VyKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEJ5SWQpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjYWxsU3RhY2ttYXApOgorICAgICAgICAqIGZ0bC9GVExPU1JFbnRy
eS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBm
dGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1
Yik6CisgICAgICAgICogZnRsL0ZUTFJlZ2lzdGVyQXRPZmZzZXQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6RlRMOjpSZWdpc3RlckF0T2Zmc2V0OjpkdW1wKToKKyAgICAgICAgKiBmdGwvRlRM
UmVnaXN0ZXJBdE9mZnNldC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpSZWdpc3RlckF0
T2Zmc2V0OjpSZWdpc3RlckF0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpSZWdpc3RlckF0
T2Zmc2V0OjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OlJlZ2lzdGVyQXRPZmZzZXQ6
Omdwcik6CisgICAgICAgIChKU0M6OkZUTDo6UmVnaXN0ZXJBdE9mZnNldDo6b2Zmc2V0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpSZWdpc3RlckF0T2Zmc2V0OjpvcGVyYXRvcj09KToKKyAgICAgICAg
KEpTQzo6RlRMOjpSZWdpc3RlckF0T2Zmc2V0OjpvcGVyYXRvcjwpOgorICAgICAgICAoSlNDOjpG
VEw6OlJlZ2lzdGVyQXRPZmZzZXQ6OmdldEdQUik6CisgICAgICAgICogZnRsL0ZUTFN0YWNrTWFw
cy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpSZWNvcmQ6OnBhcnNlKToKKyAg
ICAgICAgKiBmdGwvRlRMU3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlN0YXRlOjpTdGF0
ZSk6CisgICAgICAgICogZnRsL0ZUTFN0YXRlLmg6CisgICAgICAgICogZnRsL0ZUTFVud2luZElu
Zm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpVbndpbmRJbmZvOjpVbndpbmRJbmZv
KToKKyAgICAgICAgKEpTQzo6RlRMOjpVbndpbmRJbmZvOjp+VW53aW5kSW5mbyk6CisgICAgICAg
IChKU0M6OkZUTDo6VW53aW5kSW5mbzo6cGFyc2UpOgorICAgICAgICAoSlNDOjpGVEw6OlVud2lu
ZEluZm86OmR1bXApOgorICAgICAgICAoSlNDOjpGVEw6OlVud2luZEluZm86OmZpbmQpOgorICAg
ICAgICAoSlNDOjpGVEw6OlVud2luZEluZm86OmluZGV4T2YpOgorICAgICAgICAqIGZ0bC9GVExV
bndpbmRJbmZvLmg6IEFkZGVkLgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICog
aml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2Fz
ZSk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5jcHA6CisgICAg
ICAgIChKU0M6OkpJVENvZGU6Omhvc3RGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpJVENvZGVX
aXRoQ29kZVJlZjo6SklUQ29kZVdpdGhDb2RlUmVmKToKKyAgICAgICAgKEpTQzo6SklUQ29kZVdp
dGhDb2RlUmVmOjp+SklUQ29kZVdpdGhDb2RlUmVmKToKKyAgICAgICAgKEpTQzo6SklUQ29kZVdp
dGhDb2RlUmVmOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SklU
Q29kZVdpdGhDb2RlUmVmOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SklU
Q29kZVdpdGhDb2RlUmVmOjpvZmZzZXRPZik6CisgICAgICAgIChKU0M6OkpJVENvZGVXaXRoQ29k
ZVJlZjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkpJVENvZGVXaXRoQ29kZVJlZjo6Y29udGFpbnMp
OgorICAgICAgICAoSlNDOjpEaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2RlKToKKyAgICAgICAg
KEpTQzo6RGlyZWN0SklUQ29kZTo6fkRpcmVjdEpJVENvZGUpOgorICAgICAgICAoSlNDOjpEaXJl
Y3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZik6CisgICAgICAgIChKU0M6OkRpcmVjdEpJVENv
ZGU6OmVuc3VyZVdyYXBwZXJzKToKKyAgICAgICAgKEpTQzo6RGlyZWN0SklUQ29kZTo6YWRkcmVz
c0ZvckNhbGwpOgorICAgICAgICAoSlNDOjpOYXRpdmVKSVRDb2RlOjpOYXRpdmVKSVRDb2RlKToK
KyAgICAgICAgKEpTQzo6TmF0aXZlSklUQ29kZTo6fk5hdGl2ZUpJVENvZGUpOgorICAgICAgICAo
SlNDOjpOYXRpdmVKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZik6CisgICAgICAgIChKU0M6Ok5h
dGl2ZUpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgor
ICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0
aW9ucy5oOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25MaW5rRm9yKToKKyAgICAgICAgKEpTQzo6
b3BlcmF0aW9uVmlydHVhbEZvcik6CisgICAgICAgIChKU0M6Om9wZXJhdGlvbkxpbmtDbG9zdXJl
Q2FsbEZvcik6CisgICAgICAgICogaml0L1JlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVy
YXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpyZWdpc3RlcnNUb1ByZXNlcnZlKToKKyAg
ICAgICAgKEpTQzo6cmVnaXN0ZXJQcmVzZXJ2YXRpb25PZmZzZXQpOgorICAgICAgICAoSlNDOjpn
ZW5lcmF0ZVdyYXBwZXIpOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZVJlZ2lzdGVyUmVzdG9yYXRp
b24pOgorICAgICAgICAoSlNDOjpyZWdpc3RlclJlc3RvcmF0aW9uVGh1bmtHZW5lcmF0b3IpOgor
ICAgICAgICAqIGppdC9SZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaDogQWRk
ZWQuCisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpsaW5rU2xvd0Zv
cik6CisgICAgICAgIChKU0M6OmxpbmtGb3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2xvc3VyZUNh
bGwpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmg6CisgICAgICAgICogaml0L1RodW5rR2VuZXJh
dG9ycy5jcHA6CisgICAgICAgIChKU0M6OmxpbmtGb3JUaHVua0dlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OmxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ29uc3Ry
dWN0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNS
ZWdzVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ29uc3RydWN0VGhhdFByZXNl
cnZlc1JlZ3NUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmxpbmtDbG9zdXJlQ2FsbEZv
clRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVnc1Ro
dW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6dmlydHVhbEZvclRodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6dmlydHVhbENhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OnZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxD
YWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1
YWxDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBq
aXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgIChKU0M6OmxpbmtUaHVua0dlbmVyYXRvckZv
cik6CisgICAgICAgIChKU0M6OmxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yRm9yKToKKyAg
ICAgICAgKEpTQzo6dmlydHVhbFRodW5rR2VuZXJhdG9yRm9yKToKKyAgICAgICAgKiBsbGludC9M
TEludEVudHJ5cG9pbnQuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0RnVuY3Rpb25FbnRy
eXBvaW50KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldEV2YWxFbnRyeXBvaW50KToKKyAgICAg
ICAgKEpTQzo6TExJbnQ6OnNldFByb2dyYW1FbnRyeXBvaW50KToKKyAgICAgICAgKiBsbGludC9M
TEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjplbnRyeU9TUik6CisgICAg
ICAgIChKU0M6OkxMSW50OjpzZXRVcENhbGwpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQXJpdHlDaGVja01vZGUuaDogQWRkZWQu
CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpT
TE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAg
ICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUpOgorICAgICAgICAqIHJ1bnRp
bWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6ZW50cnlwb2lu
dEZvcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRo
QXJpdHlDaGVja0Zvcik6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1JlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oOiBB
ZGRlZC4KKwogMjAxMy0xMi0xOCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgog
CiAgICAgICAgIENsYXJpZmllZCBzdGFjayBtYWludGFpbmVuY2UgY29kZQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2MDg1MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yNjcsNiArMjY3LDE2IEBACiAJCTBGNjY2RUNEMTgzNkIzN0UwMEQwMTdGMSAv
KiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUNCMTgzNkIzN0UwMEQwMTdGMSAvKiBE
RkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2RTE2QjE0REYzRjE2MDBCN0IyRTQgLyog
REZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2RTE2
QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0VkZ2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjZC
MUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0IzMTg1RkM5RTkwMDg0NUQ5NyAvKiBG
VExKU0NhbGwuY3BwICovOyB9OworCQkwRjZCMUNCNjE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlND
YWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZC
MUNCNDE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2QjFDQjkxODYxMjQ0QzAwODQ1RDk3IC8q
IEFyaXR5Q2hlY2tNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjZCMUNCNzE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlDaGVja01vZGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjZCMUNCQTE4
NjEyNDRDMDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCODE4NjEyNDRDMDA4NDVE
OTcgLyogUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2QjFDQkQxODYxMjQ2QTAwODQ1RDk3IC8qIFJl
Z2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCQjE4NjEyNDZBMDA4NDVEOTcgLyog
UmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcCAqLzsgfTsKKwkJMEY2QjFD
QkUxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFD
QkMxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
NkIxQ0MzMTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExSZWdpc3RlckF0T2Zmc2V0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0JGMTg2MkM0Nzgw
MDg0NUQ5NyAvKiBGVExSZWdpc3RlckF0T2Zmc2V0LmNwcCAqLzsgfTsKKwkJMEY2QjFDQzQxODYy
QzQ3ODAwODQ1RDk3IC8qIEZUTFJlZ2lzdGVyQXRPZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0MwMTg2MkM0NzgwMDg0NUQ5NyAvKiBG
VExSZWdpc3RlckF0T2Zmc2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEY2QjFDQzUxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFD
QzExODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uY3BwICovOyB9OworCQkwRjZCMUND
NjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQzIxODYyQzQ3ODAwODQ1RDk3IC8qIEZU
TFVud2luZEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjcwMjVBOTE3MTRCMEZBMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NzAyNUE3MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwICov
OyB9OwogCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcw
MjVBODE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3MTRDQTQxNkVB
OTJGMDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MTRDQTExNkVBOTJFRDAw
RjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovOyB9OwpAQCAtMTU3
OSw2ICsxNTg5LDE2IEBACiAJCTBGNjY2RUNCMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJl
Y3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHUmVz
dXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FkamFjZW5jeUxpc3QuaDsgcGF0aCA9IGRm
Zy9ERkdBZGphY2VuY3lMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZF
MTY5MTRERjNGMTMwMEI3QjJFNCAvKiBERkdFZGdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0VkZ2UuaDsgcGF0aCA9IGRmZy9ERkdFZGdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNkIxQ0IzMTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMSlNDYWxsLmNwcDsgcGF0
aCA9IGZ0bC9GVExKU0NhbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZC
MUNCNDE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEZUTEpTQ2FsbC5oOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjZCMUNCNzE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlD
aGVja01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJpdHlDaGVja01v
ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QjFDQjgxODYxMjQ0QzAwODQ1
RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY2QjFDQkIxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0
aW9uV3JhcHBlckdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjZCMUNCQzE4NjEyNDZBMDA4NDVEOTcgLyogUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjZCMUNCRjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMUmVnaXN0
ZXJBdE9mZnNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExS
ZWdpc3RlckF0T2Zmc2V0LmNwcDsgcGF0aCA9IGZ0bC9GVExSZWdpc3RlckF0T2Zmc2V0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QjFDQzAxODYyQzQ3ODAwODQ1RDk3IC8q
IEZUTFJlZ2lzdGVyQXRPZmZzZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
RlRMUmVnaXN0ZXJBdE9mZnNldC5oOyBwYXRoID0gZnRsL0ZUTFJlZ2lzdGVyQXRPZmZzZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QjFDQzExODYyQzQ3ODAwODQ1RDk3IC8q
IEZUTFVud2luZEluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
RlRMVW53aW5kSW5mby5jcHA7IHBhdGggPSBmdGwvRlRMVW53aW5kSW5mby5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNkIxQ0MyMTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndp
bmRJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFVud2luZEluZm8u
aDsgcGF0aCA9IGZ0bC9GVExVbndpbmRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNzAyNUE3MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcwMjVBODE3MTRCMEY4MDAzODJDMEUgLyog
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcxNENBMTE2RUE5
MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNl
LmNwcDsgcGF0aCA9IGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4NTgsNiArMjg3OCw4IEBACiAJCQkJMEZFQTBBMDMx
NzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuaCAqLywKIAkJCQlBNzhBOTc3RDE3OTczOEQ1
MDA5REY3NDQgLyogRlRMSklURmluYWxpemVyLmNwcCAqLywKIAkJCQlBNzhBOTc3RTE3OTczOEQ1
MDA5REY3NDQgLyogRlRMSklURmluYWxpemVyLmggKi8sCisJCQkJMEY2QjFDQjMxODVGQzlFOTAw
ODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgKi8sCisJCQkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3
IC8qIEZUTEpTQ2FsbC5oICovLAogCQkJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExM
aW5rLmNwcCAqLywKIAkJCQkwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICov
LAogCQkJCTBGQ0VGQUREMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8sCkBA
IC0yODc0LDYgKzI4OTYsOCBAQAogCQkJCTBGMjM1QkNBMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExP
U1JFeGl0Q29tcGlsZXIuaCAqLywKIAkJCQkwRkVBMEEyOTE3MDk2Mjk2MDBCQjcyMkMgLyogRlRM
T3V0cHV0LmNwcCAqLywKIAkJCQkwRkVBMEEwNjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMT3V0cHV0
LmggKi8sCisJCQkJMEY2QjFDQkYxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFJlZ2lzdGVyQXRPZmZz
ZXQuY3BwICovLAorCQkJCTBGNkIxQ0MwMTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExSZWdpc3RlckF0
T2Zmc2V0LmggKi8sCiAJCQkJMEZDRUZBQTkxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0
b3JlLmNwcCAqLywKIAkJCQkwRkNFRkFBQTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3Rv
cmUuaCAqLywKIAkJCQkwRjI1RjFBQTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxs
LmNwcCAqLywKQEAgLTI4ODgsNiArMjkxMiw4IEBACiAJCQkJMEYyMzVCQ0IxNzE3OEUxQzAwNjkw
QzdGIC8qIEZUTFRodW5rcy5jcHAgKi8sCiAJCQkJMEYyMzVCQ0MxNzE3OEUxQzAwNjkwQzdGIC8q
IEZUTFRodW5rcy5oICovLAogCQkJCTBGRUEwQTFCMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExUeXBl
ZFBvaW50ZXIuaCAqLywKKwkJCQkwRjZCMUNDMTE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5k
SW5mby5jcHAgKi8sCisJCQkJMEY2QjFDQzIxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZElu
Zm8uaCAqLywKIAkJCQkwRjIzNUJDRDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQu
Y3BwICovLAogCQkJCTBGMjM1QkNFMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5o
ICovLAogCQkJCTBGREIyQ0M4MTczREE1MUUwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5o
ICovLApAQCAtMzAzMiw2ICszMDU4LDggQEAKIAkJCQkwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5M0Mg
LyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywKIAkJCQlBNzZGNTRB
MjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggKi8sCiAJCQkJQTc2QzUxNzQx
MTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggKi8sCisJCQkJMEY2QjFDQkIxODYx
MjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAg
Ki8sCisJCQkJMEY2QjFDQkMxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9u
V3JhcHBlckdlbmVyYXRvci5oICovLAogCQkJCTBGQzMxNDE0MTgxNDZENzAwMDAzMzIzMiAvKiBS
ZWdpc3RlclNldC5jcHAgKi8sCiAJCQkJMEZDMzE0MTAxODE0NTU5MTAwMDMzMjMyIC8qIFJlZ2lz
dGVyU2V0LmggKi8sCiAJCQkJMEYyNEU1NDkxN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3Bw
ICovLApAQCAtMzM2OSw2ICszMzk3LDcgQEAKIAkJCQlBNzYxNDBDODE4Mjk4MkNCMDA3NTA2MjQg
LyogQXJndW1lbnRzSXRlcmF0b3JDb25zdHJ1Y3Rvci5oICovLAogCQkJCUE3NjE0MEM5MTgyOTgy
Q0IwMDc1MDYyNCAvKiBBcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQTc2
MTQwQ0ExODI5ODJDQjAwNzUwNjI0IC8qIEFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBlLmggKi8s
CisJCQkJMEY2QjFDQjcxODYxMjQ0QzAwODQ1RDk3IC8qIEFyaXR5Q2hlY2tNb2RlLmggKi8sCiAJ
CQkJQTdBOEFGMjUxN0FEQjVGMjAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmNwcCAqLywKIAkJCQlB
N0E4QUYyNjE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIuaCAqLywKIAkJCQkwRkZDOTlE
MjE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcCAq
LywKQEAgLTM2NjcsNiArMzY5Niw3IEBACiAJCQkJRjY5MkE4N0MwMjU1NTk3RDAxRkY2MEY3IC8q
IFJlZ0V4cE9iamVjdC5oICovLAogCQkJCUJDRDIwMkJGMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdF
eHBQcm90b3R5cGUuY3BwICovLAogCQkJCUJDRDIwMkMwMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdF
eHBQcm90b3R5cGUuaCAqLywKKwkJCQkwRjZCMUNCODE4NjEyNDRDMDA4NDVEOTcgLyogUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Nb2RlLmggKi8sCiAJCQkJMEZCN0YzOTExNUVEOEUzODAwRjE2N0IyIC8q
IFJlamVjdC5oICovLAogCQkJCTBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0Nv
dW50ZXIuY3BwICovLAogCQkJCTBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0Nv
dW50ZXIuaCAqLywKQEAgLTQzMjUsNiArNDM1NSw3IEBACiAJCQkJQzJFQUEzRkExNDlBODM1RTAw
RkNFMTEyIC8qIENvcGllZFNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkM4RDAyRDE0QTND
NkUwMDA1NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjVBNTJEMDE3QURENzE3MDA4RUNCMkQgLyogQ29weVRva2VuLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzIyMzlEMTgxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMjIzOUQxOTE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjE4RDE0MDE2NTVDRkQ1MDA2MkJCODEgLyogQ29w
eVdvcmtMaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTQzOTUsNiArNDQyNiw3IEBACiAJCQkJMEZC
QzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzhBOTc3NTE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzhBOTc3NzE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjZCMUNCNjE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlND
YWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZH
Rml4dXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJD
IC8qIERGR0ZsdXNoZWRBdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKQEAgLTQ0MzAsNiArNDQ2
Miw3IEBACiAJCQkJMEZEOEEzMjYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRD
cmVhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0
NDIgLyogREZHT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQzk5RDExODRFQzhBRDAw
OUMxMEFCIC8qIENvbnN0YW50TW9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2QjFDQkExODYx
MjQ0QzAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNUJBMTVFRDE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9y
WFBDQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUMxNkQwMkYxMTAwNTVB
NURCIC8qIERGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtNDU4
OCw2ICs0NjIxLDcgQEAKIAkJCQkwRjQ2ODA4MjE0QkE1NzJEMDBCRkUyNzIgLyogSklURXhjZXB0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTRFMUYxODEyNEFDRTAwOUI2QjREIC8qIEpJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkNDODVBMTBFRTc5
QTQ3MDAyODg2ODIgLyogSklUSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2QjFDQkUx
ODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNEU1NEQxN0VFMjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJh
dGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OTBERDcwMTgyRjQ5OTcwMDU4ODgwNyAvKiBK
U1NldEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU0RTE3RUUyNzQ5MDBBQkIy
MTcgLyogSklUT3BlcmF0aW9uV3JhcHBlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtNDYwMyw2ICs0
NjM3LDcgQEAKIAkJCQkwRkM3MTJFMzE3Q0Q4NzkzMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkY1NEEzMTNCMjhB
QUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDE2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0FjdGl2YXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGNkIxQ0I5MTg2MTI0NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNrTW9kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODQwNDgwMTMxMDIxQTFEOTAwOEU3RjAxIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFw
cGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzYxNDBEMjE4Mjk4MkNCMDA3NTA2MjQg
LyogSlNBcmd1bWVudHNJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC00NjU1LDYgKzQ2OTAs
NyBAQAogCQkJCUJDMThDNDIzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0xvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcwMDg3NDIxN0NCRThFQjAwQzNFNjQzIC8qIEpTTWFwLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjZCMUNDNDE4NjJDNDc4MDA4NDVEOTcgLyogRlRMUmVnaXN0ZXJB
dE9mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4NzRBRTQxNUVCREU0QTAwMkUzNTg3IC8q
IEpTTmFtZVNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNDBFMTZGNUNEMDBCMzQ0
NjAgLyogSlNPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI1MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBKU09iamVjdFJlZi5oIGluIEhlYWRlcnMgKi8sCkBAIC01NDk1LDYgKzU1MzEsNyBA
QAogCQkJCTg2ODgwRjREMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0ZGMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdTU0FD
b252ZXJzaW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RkI0RjQxN0ZDQjkxNzAw
Q0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2
QjFDQkQxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVy
YXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBDRjI0NDIgLyog
REZHVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzI3MTdENTFGNTcwMENBMkM0
MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRDhBMzI5MTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKQEAgLTU1NDksOCArNTU4NiwxMCBAQAogCQkJCTBG
Q0VGQUFCMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjI1RjFCMTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMjVGMUIzMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0
aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2QjFDQzUxODYyQzQ3ODAwODQ1RDk3
IC8qIEZUTFVud2luZEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDMzOUExODAzQURC
NzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEx
NjE3MDZCQjkwMDBCQjcyMkMgLyogRlRMU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2
QjFDQjUxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjIzNUJFMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMjM1QkUzMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDdGMzlDQjEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25Db25z
dHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTU3MzcsNiArNTc3Niw3IEBACiAJCQkJMEY2
NjZFQ0MxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJv
ZmlsZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4
QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNkIx
Q0MzMTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExSZWdpc3RlckF0T2Zmc2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMTM5MTJCMTY3NzFDM0EwMDlDQ0IwNyAvKiBQcm9maWxlclByb2ZpbGVkQnl0
ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAv
KiBQcm9wZXJ0eURlc2NyaXB0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTcxMDdF
QzdFNzAwNjUwNDQ2IC8qIFByb3BlcnR5TmFtZUFycmF5LmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQ29kZVJlZi5oCShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDksOSArMzA5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkKiBkYXRhTG9jYXRpb24oKSBjb25zdCB7
IEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92YWx1ZSk7IHJldHVybiBtX3ZhbHVlOyB9CiAj
ZW5kaWYKIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKKyAgICB0eXBlZGVmIHZvaWQqIChN
YWNyb0Fzc2VtYmxlckNvZGVQdHI6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRv
ciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gIW1f
dmFsdWU7CisgICAgICAgIHJldHVybiAhIW1fdmFsdWUgPyByZWludGVycHJldF9jYXN0PFVuc3Bl
Y2lmaWVkQm9vbFR5cGUqPigxKSA6IDA7CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIG90aGVyKSBjb25zdApAQCAtNDM0LDcgKzQz
NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKU0M6OnRyeVRvRGlzYXNzZW1ibGUobV9j
b2RlUHRyLCBzaXplKCksIHByZWZpeCwgV1RGOjpkYXRhRmlsZSgpKTsKICAgICB9CiAgICAgCi0g
ICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb2RlUHRyOyB9CisgICAgdHlw
ZWRlZiB2b2lkKiAoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7
CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICEhbV9jb2RlUHRyID8gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xU
eXBlKj4oMSkgOiAwOworICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2Fs
bExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMTYwODUxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDE1ICsz
NywxNSBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dW5saW5rKFZNJiB2bSwgUmVwYXRjCiB7CiAgICAg
QVNTRVJUKGlzTGlua2VkKCkpOwogICAgIAorICAgIGlmIChPcHRpb25zOjpzaG93RGlzYXNzZW1i
bHkoKSkKKyAgICAgICAgZGF0YUxvZygiVW5saW5raW5nIGNhbGwgaW4gIiwgKnJlcGF0Y2hCdWZm
ZXIuY29kZUJsb2NrKCksICIgYXQgIiwgY29kZU9yaWdpbiwgIlxuIik7CisgICAgCiAgICAgcmVw
YXRjaEJ1ZmZlci5yZXZlcnRKdW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaChSZXBh
dGNoQnVmZmVyOjpzdGFydE9mQnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3Rlcihob3RQYXRoQmVn
aW4pLCBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oY2FsbGVlR1BSKSwg
MCk7Ci0gICAgaWYgKGlzREZHKSB7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlvbiwgKGNhbGxUeXBlID09IENvbnN0cnVj
dCA/IHZtLmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKSA6IHZtLmdldENU
SVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikpLmNvZGUoKSk7Ci0jZWxzZQotICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgfSBlbHNlCi0gICAgICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxSZXR1cm5Mb2NhdGlvbiwgY2FsbFR5cGUgPT0gQ29u
c3RydWN0ID8gdm0uZ2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpLmNvZGUo
KSA6IHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKKyAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluaygKKyAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLAorICAgICAg
ICB2bS5nZXRDVElTdHViKGxpbmtUaHVua0dlbmVyYXRvckZvcigKKyAgICAgICAgICAgIGNhbGxU
eXBlID09IENvbnN0cnVjdCA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCwKKyAgICAg
ICAgICAgIHJlcGF0Y2hCdWZmZXIuY29kZUJsb2NrKCktPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpG
VExKSVQgPyBNdXN0UHJlc2VydmVSZWdpc3RlcnMgOiBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJl
cXVpcmVkKSkuY29kZSgpKTsKICAgICBoYXNTZWVuU2hvdWxkUmVwYXRjaCA9IGZhbHNlOwogICAg
IGNhbGxlZS5jbGVhcigpOwogICAgIHN0dWIuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDE2MDg1MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBj
b3B5KQpAQCAtNTYsNyArNTYsNiBAQCBzdHJ1Y3QgQ2FsbExpbmtJbmZvIDogcHVibGljIEJhc2lj
UmF3U2VuCiAgICAgICAgIAogICAgIENhbGxMaW5rSW5mbygpCiAgICAgICAgIDogaGFzU2VlblNo
b3VsZFJlcGF0Y2goZmFsc2UpCi0gICAgICAgICwgaXNERkcoZmFsc2UpCiAgICAgICAgICwgaGFz
U2VlbkNsb3N1cmUoZmFsc2UpCiAgICAgICAgICwgY2FsbFR5cGUoTm9uZSkKICAgICB7CkBAIC04
MCw3ICs3OSw2IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBwdWJsaWMgQmFzaWNSYXdTZW4KICAg
ICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gbGFzdFNlZW5DYWxsZWU7CiAgICAgUmVmUHRyPENs
b3N1cmVDYWxsU3R1YlJvdXRpbmU+IHN0dWI7CiAgICAgYm9vbCBoYXNTZWVuU2hvdWxkUmVwYXRj
aCA6IDE7Ci0gICAgYm9vbCBpc0RGRyA6IDE7CiAgICAgYm9vbCBoYXNTZWVuQ2xvc3VyZSA6IDE7
CiAgICAgdW5zaWduZWQgY2FsbFR5cGUgOiA1OyAvLyBDYWxsVHlwZQogICAgIHVuc2lnbmVkIGNh
bGxlZUdQUiA6IDg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1NywxNyArMjU3LDE1IEBAIHB1Ymxp
YzoKICAgICAvLyBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoY29kZUJsb2NrLT5zcGVjaWFsaXphdGlv
bktpbmQoKSkKICAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gbmV3UmVwbGFjZW1lbnQoKTsKICAg
ICAKLSAgICB2b2lkIHNldEpJVENvZGUoUGFzc1JlZlB0cjxKSVRDb2RlPiBjb2RlLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgY29kZVdpdGhBcml0eUNoZWNrKQorICAgIHZvaWQgc2V0SklUQ29kZShQ
YXNzUmVmUHRyPEpJVENvZGU+IGNvZGUpCiAgICAgewogICAgICAgICBBU1NFUlQobV9oZWFwLT5p
c0RlZmVycmVkKCkpOwogICAgICAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChjb2Rl
LT5zaXplKCkpOwogICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwog
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOyAvLyBUaGlzIGlzIHByb2JhYmx5IG5vdCBu
ZWVkZWQgYmVjYXVzZSB0aGUgbG9jayB3aWxsIGFsc28gZG8gc29tZXRoaW5nIHNpbWlsYXIsIGJ1
dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCiAgICAgICAgIG1faml0Q29kZSA9IGNvZGU7Ci0g
ICAgICAgIG1faml0Q29kZVdpdGhBcml0eUNoZWNrID0gY29kZVdpdGhBcml0eUNoZWNrOwogICAg
IH0KICAgICBQYXNzUmVmUHRyPEpJVENvZGU+IGppdENvZGUoKSB7IHJldHVybiBtX2ppdENvZGU7
IH0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaml0Q29kZVdpdGhBcml0eUNoZWNrKCkgeyBy
ZXR1cm4gbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2s7IH0KICAgICBKSVRDb2RlOjpKSVRUeXBlIGpp
dFR5cGUoKSBjb25zdAogICAgIHsKICAgICAgICAgSklUQ29kZSogaml0Q29kZSA9IG1faml0Q29k
ZS5nZXQoKTsKQEAgLTEwNjcsNyArMTA2NSw2IEBAIHByaXZhdGU6CiAgICAgU2VudGluZWxMaW5r
ZWRMaXN0PExMSW50Q2FsbExpbmtJbmZvLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMTEludENhbGxM
aW5rSW5mbz4+IG1faW5jb21pbmdMTEludENhbGxzOwogI2VuZGlmCiAgICAgUmVmUHRyPEpJVENv
ZGU+IG1faml0Q29kZTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRDb2RlV2l0aEFy
aXR5Q2hlY2s7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+IG1f
c3R1YkluZm9zOwogICAgIFZlY3RvcjxCeVZhbEluZm8+IG1fYnlWYWxJbmZvczsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDE2MDg1MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODAsMTEgKzgwLDE5IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgK
ICAgICAvLyBtYWtlIHN1cmUgdGhhdCBhbGwgSklUIGNvZGUgZ2VuZXJhdGlvbiBkb2VzIGZpbmFs
aXphdGlvbiBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0R2Vu
ZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKICAgICB2bS5nZXRDVElTdHViKHRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7Ci0gICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRo
dW5rR2VuZXJhdG9yKTsKLSAgICB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVy
YXRvcik7Ci0gICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcik7
Ci0gICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKTsKLSAgICB2bS5n
ZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7CisgICAgaWYgKG1vZGUg
PT0gREZHTW9kZSkgeworICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpOworICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7
CisgICAgICAgIHZtLmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IpOwor
ICAgICAgICB2bS5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgICAg
ICB2bS5nZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1
bmtHZW5lcmF0b3IpOworICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaGF0UHJl
c2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2xv
c3VyZUNhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgdm0uZ2V0
Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOworICAg
ICAgICB2bS5nZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnc1RodW5r
R2VuZXJhdG9yKTsKKyAgICB9CiAgICAgCiAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJl
ZigKICAgICAgICAgbmV3IFBsYW4oY29kZUJsb2NrLCBtb2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5k
ZXgsIG11c3RIYW5kbGVWYWx1ZXMpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDkg
KzIzMCwxMSBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fanNDYWxscy5zaXplKCk7ICsraSkgewogICAgICAg
ICBDYWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvKGkpOwogICAg
ICAgICBpbmZvLmNhbGxUeXBlID0gbV9qc0NhbGxzW2ldLm1fY2FsbFR5cGU7Ci0gICAgICAgIGlu
Zm8uaXNERkcgPSB0cnVlOwogICAgICAgICBpbmZvLmNvZGVPcmlnaW4gPSBtX2pzQ2FsbHNbaV0u
bV9jb2RlT3JpZ2luOwotICAgICAgICBsaW5rQnVmZmVyLmxpbmsobV9qc0NhbGxzW2ldLm1fc2xv
d0NhbGwsIEZ1bmN0aW9uUHRyKChtX3ZtLT5nZXRDVElTdHViKGluZm8uY2FsbFR5cGUgPT0gQ2Fs
bExpbmtJbmZvOjpDb25zdHJ1Y3QgPyBsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IgOiBsaW5r
Q2FsbFRodW5rR2VuZXJhdG9yKSkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAg
ICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbGlua1RodW5rR2VuZXJhdG9yRm9yKAorICAg
ICAgICAgICAgaW5mby5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA/IENvZGVG
b3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCwKKyAgICAgICAgICAgIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTm90UmVxdWlyZWQpOworICAgICAgICBsaW5rQnVmZmVyLmxpbmsobV9qc0NhbGxzW2ldLm1f
c2xvd0NhbGwsIEZ1bmN0aW9uUHRyKG1fdm0tPmdldENUSVN0dWIoZ2VuZXJhdG9yKS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fanNDYWxsc1tpXS5tX3Nsb3dDYWxsKTsK
ICAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9qc0Nh
bGxzW2ldLm1fdGFyZ2V0VG9DaGVjayk7CiAgICAgICAgIGluZm8uaG90UGF0aE90aGVyID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9qc0NhbGxzW2ldLm1fZmFzdENhbGwpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkocmV2
aXNpb24gMTYwODUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCw5IEBAIEpJVEZpbmFsaXplcjo6fkpJ
VEZpbmFsaXplcigpCiAKIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZSgpCiB7Ci0gICAgbV9q
aXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZihtX2xpbmtCdWZmZXItPmZpbmFsaXplQ29kZVdpdGhv
dXREaXNhc3NlbWJseSgpKTsKLSAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0
Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOworICAgIG1faml0Q29kZS0+aW5pdGlhbGl6
ZUNvZGVSZWYoCisgICAgICAgIG1fbGlua0J1ZmZlci0+ZmluYWxpemVDb2RlV2l0aG91dERpc2Fz
c2VtYmx5KCksIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKKyAgICBtX3BsYW4uY29kZUJsb2Nr
LT5zZXRKSVRDb2RlKG1faml0Q29kZSk7CiAgICAgCiAgICAgZmluYWxpemVDb21tb24oKTsKICAg
ICAKQEAgLTU5LDggKzYwLDkgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKCkKIGJvb2wg
SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCgh
bV93aXRoQXJpdHlDaGVjay5pc0VtcHR5VmFsdWUoKSk7Ci0gICAgbV9qaXRDb2RlLT5pbml0aWFs
aXplQ29kZVJlZihtX2xpbmtCdWZmZXItPmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgp
KTsKLSAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZSwgbV93aXRoQXJp
dHlDaGVjayk7CisgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZigKKyAgICAgICAgbV9s
aW5rQnVmZmVyLT5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoKSwgbV93aXRoQXJpdHlD
aGVjayk7CisgICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUpOwogICAg
IAogICAgIGZpbmFsaXplQ29tbW9uKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE2MDg1MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcwNCwxMSArNzA0LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRDYWxsKE5vZGUqIG5vZGUKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwog
CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwotICAgIEpJVENv
bXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0
aDsKIAogICAgIG1faml0LmVtaXRTdG9yZUNvZGVPcmlnaW4obm9kZS0+Y29kZU9yaWdpbik7CiAg
ICAgCi0gICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVjaywgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoMCkpKTsKKyAgICBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0cldp
dGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVj
aywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCkpOwogCiAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1
bmN0aW9uLCBtX3Njb3BlKSksIHJlc3VsdEdQUik7CiAgICAgbV9qaXQuc3RvcmU2NChyZXN1bHRH
UFIsIGNhbGxlZUZyYW1lU2xvdChKU1N0YWNrOjpTY29wZUNoYWluKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNjA4
NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsOCBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNh
bkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBGdW5jdGlvblJlZW50cnlXYXRjaHBvaW50OgogICAg
IGNhc2UgVmFyaWFibGVXYXRjaHBvaW50OgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CisgICAgY2Fz
ZSBDYWxsOgorICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0QnlJZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTYwODUxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
NyBAQAogI2luY2x1ZGUgIkZUTElubGluZUNhY2hlU2l6ZS5oIgogI2luY2x1ZGUgIkZUTEpJVENv
ZGUuaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKKyNpbmNsdWRlICJGVExVbndpbmRJbmZvLmgi
CiAjaW5jbHVkZSAiSklUU3R1YnMuaCIKICNpbmNsdWRlICJMTFZNQVBJLmgiCiAjaW5jbHVkZSAi
TGlua0J1ZmZlci5oIgpAQCAtNDksNyArNTAsNiBAQCB1c2luZyBuYW1lc3BhY2UgREZHOwogc3Rh
dGljIHVpbnQ4X3QqIG1tQWxsb2NhdGVDb2RlU2VjdGlvbigKICAgICB2b2lkKiBvcGFxdWVTdGF0
ZSwgdWludHB0cl90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCwgdW5zaWduZWQsIGNvbnN0IGNo
YXIqIHNlY3Rpb25OYW1lKQogewotICAgIAogICAgIFN0YXRlJiBzdGF0ZSA9ICpzdGF0aWNfY2Fz
dDxTdGF0ZSo+KG9wYXF1ZVN0YXRlKTsKICAgICAKICAgICBSRUxFQVNFX0FTU0VSVChhbGlnbm1l
bnQgPD0gaml0QWxsb2NhdGlvbkdyYW51bGUpOwpAQCAtNTgsNiArNTgsMTEgQEAgc3RhdGljIHVp
bnQ4X3QqIG1tQWxsb2NhdGVDb2RlU2VjdGlvbigKICAgICAgICAgc3RhdGUuZ3JhcGgubV92bS5l
eGVjdXRhYmxlQWxsb2NhdG9yLmFsbG9jYXRlKAogICAgICAgICAgICAgc3RhdGUuZ3JhcGgubV92
bSwgc2l6ZSwgc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2Nl
ZWQpOwogICAgIAorICAgIGlmICghc3RyY21wKHNlY3Rpb25OYW1lLCAiX19jb21wYWN0X3Vud2lu
ZCIpKSB7CisgICAgICAgIHN0YXRlLmNvbXBhY3RVbndpbmQgPSByZXN1bHQtPnN0YXJ0KCk7Cisg
ICAgICAgIHN0YXRlLmNvbXBhY3RVbndpbmRTaXplID0gcmVzdWx0LT5zaXplSW5CeXRlcygpOwor
ICAgIH0KKyAgICAKICAgICBzdGF0ZS5qaXRDb2RlLT5hZGRIYW5kbGUocmVzdWx0KTsKICAgICBz
dGF0ZS5jb2RlU2VjdGlvbk5hbWVzLmFwcGVuZChzZWN0aW9uTmFtZSk7CiAgICAgCkBAIC0yOTks
NiArMzA0LDQ0IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAg
ICAgICAgfQogICAgIH0KICAgICAKKyAgICAvLyBIYW5kbGluZyBKUyBjYWxscyBpcyB3ZWlyZDog
d2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBzb3J0IHRoZW0gYnkgdGhlIFBDIGluIExMVk0KKyAg
ICAvLyBnZW5lcmF0ZWQgY29kZS4gVGhhdCBpbXBsaWVzIGZpcnN0IHBydW5pbmcgdGhlIG9uZXMg
dGhhdCBMTFZNIGRpZG4ndCBnZW5lcmF0ZS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c3RhdGUuanNDYWxscy5zaXplKCk7ICsraSkgeworICAgICAgICBKU0NhbGwmIGNhbGwgPSBzdGF0
ZS5qc0NhbGxzW2ldOworICAgICAgICAKKyAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0
ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAuZmluZChjYWxsLnN0YWNrbWFwSUQoKSk7CisgICAgICAg
IGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkgeworICAgICAgICAgICAgLy8gSXQgd2FzIG9w
dGltaXplZCBvdXQuIFBydW5lIGl0LgorICAgICAgICAgICAgY2FsbCA9IHN0YXRlLmpzQ2FsbHMu
bGFzdCgpOworICAgICAgICAgICAgc3RhdGUuanNDYWxscy5yZW1vdmVMYXN0KCk7CisgICAgICAg
ICAgICBpLS07CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgY2FsbC5tX2luc3RydWN0aW9uT2Zmc2V0ID0gaXRlci0+dmFsdWUuaW5zdHJ1Y3Rpb25P
ZmZzZXQ7CisgICAgfQorICAgIAorICAgIHN0ZDo6c29ydChzdGF0ZS5qc0NhbGxzLmJlZ2luKCks
IHN0YXRlLmpzQ2FsbHMuZW5kKCkpOworICAgIAorICAgIGNvZGVCbG9jay0+c2V0TnVtYmVyT2ZD
YWxsTGlua0luZm9zKHN0YXRlLmpzQ2FsbHMuc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBzdGF0ZS5qc0NhbGxzLnNpemUoKTsgaS0tOykgeworICAgICAgICBKU0NhbGwmIGNhbGwgPSBz
dGF0ZS5qc0NhbGxzW2ldOworCisgICAgICAgIENDYWxsSGVscGVycyBmYXN0UGF0aEpJVCgmdm0s
IGNvZGVCbG9jayk7CisgICAgICAgIGNhbGwuZW1pdChmYXN0UGF0aEpJVCk7CisgICAgICAgIAor
ICAgICAgICBjaGFyKiBzdGFydE9mSUMgPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1
bmN0aW9uKSArIGNhbGwubV9pbnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAgCisgICAgICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgJmZhc3RQYXRoSklULCBzdGFydE9mSUMsIHNpemVPZkNh
bGwoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtCdWZmZXIuaXNWYWxpZCgpKTsKKyAg
ICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBc3NlbWJsZXJUeXBlX1Q6OmZpbGxOb3Bz
KAorICAgICAgICAgICAgc3RhcnRPZklDICsgbGlua0J1ZmZlci5zaXplKCksIHNpemVPZkNhbGwo
KSAtIGxpbmtCdWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIENhbGxMaW5rSW5mbyYg
aW5mbyA9IGNvZGVCbG9jay0+Y2FsbExpbmtJbmZvKGkpOworICAgICAgICBjYWxsLmxpbmsodm0s
IGxpbmtCdWZmZXIsIGluZm8pOworICAgIH0KKyAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGV4aXRJbmRleCA9
IGppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyBleGl0SW5kZXgtLTspIHsKQEAgLTM5OCw3ICs0NDEs
NyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgRXhlY3V0YWJsZU1l
bW9yeUhhbmRsZSogaGFuZGxlID0gc3RhdGUuaml0Q29kZS0+aGFuZGxlcygpW2ldLmdldCgpOwog
ICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAiR2VuZXJhdGVkIExMVk0gY29k
ZSBmb3IgIiwKLSAgICAgICAgICAgICAgICBDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFw
aC5tX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSwKKyAgICAgICAgICAgICAgICBDb2RlQmxv
Y2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSwK
ICAgICAgICAgICAgICAgICAiICMiLCBpLCAiLCAiLCBzdGF0ZS5jb2RlU2VjdGlvbk5hbWVzW2ld
LCAiOlxuIik7CiAgICAgICAgICAgICBkaXNhc3NlbWJsZSgKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIoaGFuZGxlLT5zdGFydCgpKSwgaGFuZGxlLT5zaXplSW5CeXRlcygp
LApAQCAtNDA5LDE3ICs0NTIsMjEgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSkKICAgICAg
ICAgICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxMU2VjdGlvbldvcmQ+JiBzZWN0aW9uID0gc3Rh
dGUuaml0Q29kZS0+ZGF0YVNlY3Rpb25zKClbaV07CiAgICAgICAgICAgICBkYXRhTG9nKAogICAg
ICAgICAgICAgICAgICJHZW5lcmF0ZWQgTExWTSBkYXRhIHNlY3Rpb24gZm9yICIsCi0gICAgICAg
ICAgICAgICAgQ29kZUJsb2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJ
VENvZGU6OkRGR0pJVCksCisgICAgICAgICAgICAgICAgQ29kZUJsb2NrV2l0aEpJVFR5cGUoc3Rh
dGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCksCiAgICAgICAgICAgICAgICAg
IiAjIiwgaSwgIiwgIiwgc3RhdGUuZGF0YVNlY3Rpb25OYW1lc1tpXSwgIjpcbiIpOwogICAgICAg
ICAgICAgZHVtcERhdGFTZWN0aW9uKHNlY3Rpb24sICIgICAgIik7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCisgICAgc3RhdGUuaml0Q29kZS0+dW53aW5kSW5mby5wYXJzZShzdGF0ZS5jb21wYWN0
VW53aW5kLCBzdGF0ZS5jb21wYWN0VW53aW5kU2l6ZSk7CisgICAgaWYgKERGRzo6c2hvdWxkU2hv
d0Rpc2Fzc2VtYmx5KCkpCisgICAgICAgIGRhdGFMb2coIlVud2luZCBpbmZvIGZvciAiLCBDb2Rl
QmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29kZTo6RlRMSklU
KSwgIjpcbiAgICAiLCBzdGF0ZS5qaXRDb2RlLT51bndpbmRJbmZvLCAiXG4iKTsKKyAgICAKICAg
ICBpZiAoc3RhdGUuc3RhY2ttYXBzU2VjdGlvbi5zaXplKCkpIHsKICAgICAgICAgaWYgKHNob3Vs
ZFNob3dEaXNhc3NlbWJseSgpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAg
ICAgICJHZW5lcmF0ZWQgTExWTSBzdGFja21hcHMgc2VjdGlvbiBmb3IgIiwKLSAgICAgICAgICAg
ICAgICBDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29k
ZTo6REZHSklUKSwgIjpcbiIpOworICAgICAgICAgICAgICAgIENvZGVCbG9ja1dpdGhKSVRUeXBl
KHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpLCAiOlxuIik7CiAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgUmF3IGRhdGE6XG4iKTsKICAgICAgICAgICAgIGR1bXBEYXRh
U2VjdGlvbihzdGF0ZS5zdGFja21hcHNTZWN0aW9uLCAiICAgICIpOwogICAgICAgICB9CkBAIC00
NDYsNyArNDkzLDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAgICAg
ICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBoYW5kbGUgPSBzdGF0ZS5qaXRDb2RlLT5oYW5kbGVz
KClbaV0uZ2V0KCk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAg
ICAgIkdlbmVyYXRlZCBMTFZNIGNvZGUgYWZ0ZXIgc3RhY2ttYXAtYmFzZWQgZml4LXVwIGZvciAi
LAotICAgICAgICAgICAgICAgICAgICBDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5t
X2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSwKKyAgICAgICAgICAgICAgICAgICAgQ29kZUJs
b2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCks
CiAgICAgICAgICAgICAgICAgICAgICIgIyIsIGksICIsICIsIHN0YXRlLmNvZGVTZWN0aW9uTmFt
ZXNbaV0sICI6XG4iKTsKICAgICAgICAgICAgICAgICBkaXNhc3NlbWJsZSgKICAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGhhbmRsZS0+c3RhcnQoKSksIGhhbmRsZS0+
c2l6ZUluQnl0ZXMoKSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5l
Q2FjaGVTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TElubGluZUNhY2hlU2l6ZS5jcHAJKHJldmlzaW9uIDE2MDg1MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
NiArNDcsMTEgQEAgc2l6ZV90IHNpemVPZlB1dEJ5SWQoKQogICAgIHJldHVybiAzMjsKIH0KIAor
c2l6ZV90IHNpemVPZkNhbGwoKQoreworICAgIHJldHVybiA0MzsKK30KKwogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgJKHJldmlzaW9uIDE2
MDg1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgewogCiBzaXplX3Qgc2l6ZU9mR2V0QnlJZCgpOwogc2l6ZV90IHNpemVPZlB1dEJ5SWQo
KTsKK3NpemVfdCBzaXplT2ZDYWxsKCk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBv
c2l0b3J5LmgJKHJldmlzaW9uIDE2MDg1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0Myw5IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhmcmFtZUFkZHJlc3Ms
ICJsbHZtLmZyYW1lYWRkcmVzcyIsIGZ1bmN0aW9uVHlwZShwb2ludGVyVHlwZShpbnQ4KSwgaW50
MzIpKSBcCiAgICAgbWFjcm8obXVsV2l0aE92ZXJmbG93MzIsICJsbHZtLnNtdWwud2l0aC5vdmVy
Zmxvdy5pMzIiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDMyLCBib29s
ZWFuKSwgaW50MzIsIGludDMyKSkgXAogICAgIG1hY3JvKG11bFdpdGhPdmVyZmxvdzY0LCAibGx2
bS5zbXVsLndpdGgub3ZlcmZsb3cuaTY0IiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250
ZXh0LCBpbnQ2NCwgYm9vbGVhbiksIGludDY0LCBpbnQ2NCkpIFwKLSAgICBtYWNybyhwYXRjaHBv
aW50SW50NjQsICJsbHZtLmV4cGVyaW1lbnRhbC5wYXRjaHBvaW50Lmk2NCIsIGZ1bmN0aW9uVHlw
ZShpbnQ2NCwgaW50MzIsIGludDMyLCByZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBcCi0gICAgbWFj
cm8ocGF0Y2hwb2ludFZvaWQsICJsbHZtLmV4cGVyaW1lbnRhbC5wYXRjaHBvaW50LnZvaWQiLCBm
dW5jdGlvblR5cGUodm9pZFR5cGUsIGludDMyLCBpbnQzMiwgcmVmOCwgaW50MzIsIFZhcmlhZGlj
KSkgXAotICAgIG1hY3JvKHN0YWNrbWFwLCAibGx2bS5leHBlcmltZW50YWwuc3RhY2ttYXAiLCBm
dW5jdGlvblR5cGUodm9pZFR5cGUsIGludDMyLCBpbnQzMiwgVmFyaWFkaWMpKSBcCisgICAgbWFj
cm8ocGF0Y2hwb2ludEludDY0LCAibGx2bS5leHBlcmltZW50YWwucGF0Y2hwb2ludC5pNjQiLCBm
dW5jdGlvblR5cGUoaW50NjQsIGludDY0LCBpbnQzMiwgcmVmOCwgaW50MzIsIFZhcmlhZGljKSkg
XAorICAgIG1hY3JvKHBhdGNocG9pbnRWb2lkLCAibGx2bS5leHBlcmltZW50YWwucGF0Y2hwb2lu
dC52b2lkIiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQ2NCwgaW50MzIsIHJlZjgsIGludDMy
LCBWYXJpYWRpYykpIFwKKyAgICBtYWNybyhzdGFja21hcCwgImxsdm0uZXhwZXJpbWVudGFsLnN0
YWNrbWFwIiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQ2NCwgaW50MzIsIFZhcmlhZGljKSkg
XAogICAgIG1hY3JvKHN1YldpdGhPdmVyZmxvdzMyLCAibGx2bS5zc3ViLndpdGgub3ZlcmZsb3cu
aTMyIiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQzMiwgYm9vbGVhbiks
IGludDMyLCBpbnQzMikpIFwKICAgICBtYWNybyhzdWJXaXRoT3ZlcmZsb3c2NCwgImxsdm0uc3N1
Yi53aXRoLm92ZXJmbG93Lmk2NCIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwg
aW50NjQsIGJvb2xlYW4pLCBpbnQ2NCwgaW50NjQpKSBcCiAgICAgbWFjcm8odHJhcCwgImxsdm0u
dHJhcCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSkpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkocmV2aXNpb24gMTYwODUxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsOSArNTQs
OSBAQCB2b2lkIEpJVENvZGU6OmFkZERhdGFTZWN0aW9uKFJlZkNvdW50ZWRBCiAgICAgbV9kYXRh
U2VjdGlvbnMuYXBwZW5kKGRhdGFTZWN0aW9uKTsKIH0KIAotdm9pZCBKSVRDb2RlOjppbml0aWFs
aXplRW50cnlwb2ludChDb2RlUmVmIGVudHJ5cG9pbnQpCit2b2lkIEpJVENvZGU6OmluaXRpYWxp
emVBcml0eUNoZWNrRW50cnlwb2ludChDb2RlUmVmIGVudHJ5cG9pbnQpCiB7Ci0gICAgbV9lbnRy
eXBvaW50ID0gZW50cnlwb2ludDsKKyAgICBtX2FyaXR5Q2hlY2tFbnRyeXBvaW50ID0gZW50cnlw
b2ludDsKIH0KIAogdm9pZCBKSVRDb2RlOjppbml0aWFsaXplQWRkcmVzc0ZvckNhbGwoQ29kZVB0
ciBhZGRyZXNzKQpAQCAtNjQsMjEgKzY0LDI1IEBAIHZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUFk
ZHJlc3NGb3JDYWxsKEMKICAgICBtX2FkZHJlc3NGb3JDYWxsID0gYWRkcmVzczsKIH0KIAotSklU
Q29kZTo6Q29kZVB0ciBKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbCgpCitKSVRDb2RlOjpDb2RlUHRy
IEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKFZNJiwgRXhlY3V0YWJsZUJhc2UqLCBBcml0eUNoZWNr
TW9kZSBhcml0eUNoZWNrLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpCiB7Ci0gICAgcmV0dXJu
IG1fYWRkcmVzc0ZvckNhbGw7CisgICAgc3dpdGNoIChhcml0eUNoZWNrKSB7CisgICAgY2FzZSBB
cml0eUNoZWNrTm90UmVxdWlyZWQ6CisgICAgICAgIHJldHVybiBtX2FkZHJlc3NGb3JDYWxsOwor
ICAgIGNhc2UgTXVzdENoZWNrQXJpdHk6CisgICAgICAgIHJldHVybiBtX2FyaXR5Q2hlY2tFbnRy
eXBvaW50LmNvZGUoKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gQ29kZVB0cigpOwogfQogCiB2b2lkKiBKSVRDb2RlOjpleGVjdXRhYmxlQWRk
cmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9lbnRy
eXBvaW50KTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9hZGRyZXNzRm9y
Q2FsbC5leGVjdXRhYmxlQWRkcmVzcygpKSArIG9mZnNldDsKIH0KIAogdm9pZCogSklUQ29kZTo6
ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3QpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9lbnRy
eXBvaW50KTsKLQogICAgIC8vIFdlIGNhbid0IHBhdGNoIEZUTCBjb2RlLCB5ZXQuIEV2ZW4gaWYg
d2UgZGlkLCBpdCdzIG5vdCBjbGVhciB0aGF0IHdlIHdvdWxkIGRvIHNvCiAgICAgLy8gdGhyb3Vn
aCB0aGlzIEFQSS4KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtODcsOCAr
OTEsNiBAQCB2b2lkKiBKSVRDb2RlOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfCiAKIHVuc2ln
bmVkIEpJVENvZGU6Om9mZnNldE9mKHZvaWQqKQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fZW50
cnlwb2ludCk7Ci0KICAgICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgaGF2ZSB2aXNpYmlsaXR5IGlu
dG8gdGhlIEZUTCBjb2RlLgogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
cmV0dXJuIDA7CkBAIC05Niw4ICs5OCw2IEBAIHVuc2lnbmVkIEpJVENvZGU6Om9mZnNldE9mKHZv
aWQqKQogCiBzaXplX3QgSklUQ29kZTo6c2l6ZSgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9l
bnRyeXBvaW50KTsKLQogICAgIC8vIFdlIGRvbid0IGtub3cgdGhlIHNpemUgb2YgRlRMIGNvZGUs
IHlldC4gTWFrZSBhIHdpbGQgZ3Vlc3MuIFRoaXMgaXMgbW9zdGx5IHVzZWQgZm9yCiAgICAgLy8g
R0MgbG9hZCBlc3RpbWF0ZXMuCiAgICAgcmV0dXJuIDEwMDA7CkBAIC0xMDUsOCArMTA1LDYgQEAg
c2l6ZV90IEpJVENvZGU6OnNpemUoKQogCiBib29sIEpJVENvZGU6OmNvbnRhaW5zKHZvaWQqKQog
ewotICAgIFJFTEVBU0VfQVNTRVJUKG1fZW50cnlwb2ludCk7Ci0KICAgICAvLyBXZSBoYXZlIG5v
IGlkZWEgd2hhdCBhZGRyZXNzZXMgdGhlIEZUTCBjb2RlIGNvbnRhaW5zLCB5ZXQuCiAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMTYwODUxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCiAjaW5jbHVkZSAiRlRMT1NS
RXhpdC5oIgogI2luY2x1ZGUgIkZUTFN0YWNrTWFwcy5oIgorI2luY2x1ZGUgIkZUTFVud2luZElu
Zm8uaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiTExWTUFQSS5oIgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkQXJyYXkuaD4KQEAgLTQ2LDE3ICs0NywxNyBAQCBwdWJsaWM6CiAg
ICAgSklUQ29kZSgpOwogICAgIH5KSVRDb2RlKCk7CiAgICAgCi0gICAgQ29kZVB0ciBhZGRyZXNz
Rm9yQ2FsbCgpOwotICAgIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9m
ZnNldCk7Ci0gICAgdm9pZCogZGF0YUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KTsKLSAg
ICB1bnNpZ25lZCBvZmZzZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUpOwotICAgIHNpemVfdCBz
aXplKCk7Ci0gICAgYm9vbCBjb250YWlucyh2b2lkKik7CisgICAgQ29kZVB0ciBhZGRyZXNzRm9y
Q2FsbChWTSYsIEV4ZWN1dGFibGVCYXNlKiwgQXJpdHlDaGVja01vZGUsIFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uTW9kZSkgT1ZFUlJJREU7CisgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNl
dChzaXplX3Qgb2Zmc2V0KSBPVkVSUklERTsKKyAgICB2b2lkKiBkYXRhQWRkcmVzc0F0T2Zmc2V0
KHNpemVfdCBvZmZzZXQpIE9WRVJSSURFOworICAgIHVuc2lnbmVkIG9mZnNldE9mKHZvaWQqIHBv
aW50ZXJJbnRvQ29kZSkgT1ZFUlJJREU7CisgICAgc2l6ZV90IHNpemUoKSBPVkVSUklERTsKKyAg
ICBib29sIGNvbnRhaW5zKHZvaWQqKSBPVkVSUklERTsKICAgICAKICAgICB2b2lkIGluaXRpYWxp
emVFeGl0VGh1bmtzKENvZGVSZWYpOwogICAgIHZvaWQgYWRkSGFuZGxlKFBhc3NSZWZQdHI8RXhl
Y3V0YWJsZU1lbW9yeUhhbmRsZT4pOwogICAgIHZvaWQgYWRkRGF0YVNlY3Rpb24oUmVmQ291bnRl
ZEFycmF5PExTZWN0aW9uV29yZD4pOwotICAgIHZvaWQgaW5pdGlhbGl6ZUVudHJ5cG9pbnQoQ29k
ZVJlZik7CisgICAgdm9pZCBpbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoQ29kZVJlZik7
CiAgICAgdm9pZCBpbml0aWFsaXplQWRkcmVzc0ZvckNhbGwoQ29kZVB0cik7CiAgICAgCiAgICAg
Y29uc3QgVmVjdG9yPFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPj4mIGhhbmRsZXMoKSBj
b25zdCB7IHJldHVybiBtX2hhbmRsZXM7IH0KQEAgLTcwLDEyICs3MSwxMyBAQCBwdWJsaWM6CiAg
ICAgREZHOjpDb21tb25EYXRhIGNvbW1vbjsKICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdCwg
OD4gb3NyRXhpdDsKICAgICBTdGFja01hcHMgc3RhY2ttYXBzOworICAgIFVud2luZEluZm8gdW53
aW5kSW5mbzsKICAgICAKIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZkNvdW50ZWRBcnJheTxMU2Vj
dGlvbldvcmQ+PiBtX2RhdGFTZWN0aW9uczsKICAgICBWZWN0b3I8UmVmUHRyPEV4ZWN1dGFibGVN
ZW1vcnlIYW5kbGU+PiBtX2hhbmRsZXM7CiAgICAgQ29kZVB0ciBtX2FkZHJlc3NGb3JDYWxsOwot
ICAgIENvZGVSZWYgbV9lbnRyeXBvaW50OworICAgIENvZGVSZWYgbV9hcml0eUNoZWNrRW50cnlw
b2ludDsKICAgICBDb2RlUmVmIG1fZXhpdFRodW5rczsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDE2MDg1MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAzLDEyICsxMDMsMTIgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXpl
RnVuY3Rpb24oKQogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVjazsKICAg
ICBpZiAoYXJpdHlDaGVjay5pc1NldCgpKQogICAgICAgICB3aXRoQXJpdHlDaGVjayA9IGVudHJ5
cG9pbnRMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGFyaXR5Q2hlY2spOwotICAgIGppdENvZGUtPmlu
aXRpYWxpemVFbnRyeXBvaW50KAorICAgIGppdENvZGUtPmluaXRpYWxpemVBcml0eUNoZWNrRW50
cnlwb2ludCgKICAgICAgICAgRklOQUxJWkVfREZHX0NPREUoCiAgICAgICAgICAgICAqZW50cnlw
b2ludExpbmtCdWZmZXIsCiAgICAgICAgICAgICAoIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAl
cyB3aXRoIExMVk0gZ2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0
aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jay5nZXQoKSwgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgp
LCBmdW5jdGlvbikpKTsKICAgICAKLSAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKGpp
dENvZGUsIHdpdGhBcml0eUNoZWNrKTsKKyAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2Rl
KGppdENvZGUpOwogICAgIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExKU0NhbGwuaCIKKworI2lmIEVOQUJMRShGVExfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK0pTQ2FsbDo6SlNDYWxsKHVu
c2lnbmVkIHN0YWNrbWFwSUQsIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUsIENvZGVP
cmlnaW4gY29kZU9yaWdpbikKKyAgICA6IG1fc3RhY2ttYXBJRChzdGFja21hcElEKQorICAgICwg
bV9jYWxsVHlwZShjYWxsVHlwZSkKKyAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQorICAg
ICwgbV9pbnN0cnVjdGlvbk9mZnNldCgwKQoreworfQorCit2b2lkIEpTQ2FsbDo6ZW1pdChDQ2Fs
bEhlbHBlcnMmIGppdCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQu
YnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJ
bmZvOjpyZWdUMCwgbV90YXJnZXRUb0NoZWNrLAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoMCkpOworICAgIAorICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFp
bigpKSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDEpOworICAgIGppdC5zdG9yZTY0KAorICAgICAg
ICBHUFJJbmZvOjpyZWdUMSwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAgICAgIHNp
emVvZihSZWdpc3RlcikgKiAoSlNTdGFjazo6U2NvcGVDaGFpbiAtIEpTU3RhY2s6OkNhbGxlckZy
YW1lQW5kUENTaXplKSkpOworICAgIAorICAgIG1fZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsK
KyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7CisgICAgCisgICAgc2xv
d1BhdGgubGluaygmaml0KTsKKyAgICBtX3Nsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAg
CisgICAgZG9uZS5saW5rKCZqaXQpOworfQorCit2b2lkIEpTQ2FsbDo6bGluayhWTSYgdm0sIExp
bmtCdWZmZXImIGxpbmtCdWZmZXIsIENhbGxMaW5rSW5mbyYgY2FsbEluZm8pCit7CisgICAgVGh1
bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbGlua1RodW5rR2VuZXJhdG9yRm9yKAorICAgICAgICBt
X2NhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0ID8gQ29kZUZvckNvbnN0cnVjdCA6
IENvZGVGb3JDYWxsLAorICAgICAgICBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOworICAgIAorICAg
IGxpbmtCdWZmZXIubGluaygKKyAgICAgICAgbV9zbG93Q2FsbCwgRnVuY3Rpb25QdHIodm0uZ2V0
Q1RJU3R1YihnZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgCisg
ICAgY2FsbEluZm8uY2FsbFR5cGUgPSBtX2NhbGxUeXBlOworICAgIGNhbGxJbmZvLmNvZGVPcmln
aW4gPSBtX2NvZGVPcmlnaW47CisgICAgY2FsbEluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9zbG93Q2FsbCk7CisgICAgY2FsbEluZm8uaG90
UGF0aEJlZ2luID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fdGFyZ2V0VG9DaGVjayk7CisgICAg
Y2FsbEluZm8uaG90UGF0aE90aGVyID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9m
YXN0Q2FsbCk7CisgICAgY2FsbEluZm8uY2FsbGVlR1BSID0gR1BSSW5mbzo6cmVnVDA7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBGVExKU0NhbGxfaAorI2RlZmluZSBGVExKU0NhbGxfaAorCisjaWYgRU5B
QkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWxs
TGlua0luZm8uaCIKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEpTQ2FsbCB7
CitwdWJsaWM6CisgICAgSlNDYWxsKHVuc2lnbmVkIHN0YWNrbWFwSUQsIENhbGxMaW5rSW5mbzo6
Q2FsbFR5cGUsIENvZGVPcmlnaW4pOworICAgIAorICAgIHZvaWQgZW1pdChDQ2FsbEhlbHBlcnMm
KTsKKyAgICB2b2lkIGxpbmsoVk0mLCBMaW5rQnVmZmVyJiwgQ2FsbExpbmtJbmZvJik7CisgICAg
CisgICAgdW5zaWduZWQgc3RhY2ttYXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEpTQ2FsbCYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9pbnN0cnVjdGlvbk9mZnNldCA8IG90aGVyLm1faW5zdHJ1
Y3Rpb25PZmZzZXQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3N0YWNr
bWFwSUQ7CisgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBtX2NhbGxUeXBlOworICAgIENvZGVP
cmlnaW4gbV9jb2RlT3JpZ2luOworICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIG1fdGFy
Z2V0VG9DaGVjazsKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgbV9mYXN0Q2FsbDsKKyAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgbV9zbG93Q2FsbDsKKworcHVibGljOgorICAgIHVpbnQzMl90IG1faW5z
dHJ1Y3Rpb25PZmZzZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRp
ZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEpTQ2FsbF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZp
c2lvbiAxNjA4NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgICAgIG1fZnRsU3RhdGUuY2FwdHVyZWRTdGFja21hcElEID0gbV9zdGFja21hcElE
cysrOwogICAgICAgICBtX291dC5jYWxsKAotICAgICAgICAgICAgbV9vdXQuc3RhY2ttYXBJbnRy
aW5zaWMoKSwgbV9vdXQuY29uc3RJbnQzMihtX2Z0bFN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCks
CisgICAgICAgICAgICBtX291dC5zdGFja21hcEludHJpbnNpYygpLCBtX291dC5jb25zdEludDY0
KG1fZnRsU3RhdGUuY2FwdHVyZWRTdGFja21hcElEKSwKICAgICAgICAgICAgIG1fb3V0LmludDMy
WmVybywgY2FwdHVyZWRBbGxvY2EpOwogICAgICAgICAKICAgICAgICAgbV9jYWxsRnJhbWUgPSBt
X291dC5wdHJUb0ludCgKQEAgLTEyOTcsNyArMTI5Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwoCiAgICAgICAgICAgICBtX291dC5wYXRj
aHBvaW50SW50NjRJbnRyaW5zaWMoKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3Rh
Y2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mR2V0QnlJZCgpKSwKKyAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50NjQoc3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mR2V0
QnlJZCgpKSwKICAgICAgICAgICAgIGNvbnN0TnVsbChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJ
bnQzMigxKSwgYmFzZSk7CiAgICAgICAgIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24o
Y2FsbCwgTExWTUFueVJlZ0NhbGxDb252KTsKICAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsKQEAg
LTEzMjIsNyArMTMyMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgY2Fs
bCA9IG1fb3V0LmNhbGwoCiAgICAgICAgICAgICBtX291dC5wYXRjaHBvaW50Vm9pZEludHJpbnNp
YygpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihzdGFja21hcElEKSwgbV9vdXQuY29u
c3RJbnQzMihzaXplT2ZQdXRCeUlkKCkpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChz
dGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXplT2ZQdXRCeUlkKCkpLAogICAgICAgICAg
ICAgY29uc3ROdWxsKG1fb3V0LnJlZjgpLCBtX291dC5jb25zdEludDMyKDIpLCBiYXNlLCB2YWx1
ZSk7CiAgICAgICAgIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFu
eVJlZ0NhbGxDb252KTsKICAgICAgICAgCkBAIC0yNDM3LDM1ICsyNDM3LDQwIEBAIHByaXZhdGU6
CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2FsbE9yQ29uc3RydWN0KCkKICAgICB7Ci0gICAgICAg
IC8vIEZJWE1FOiBUaGlzIGlzIHVuYWNjZXB0YWJseSBzbG93LgotICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIxCisgICAgICAgIGludCBkdW1t
eVRoaXNBcmd1bWVudCA9IG1fbm9kZS0+b3AoKSA9PSBDYWxsID8gMCA6IDE7CisgICAgICAgIGlu
dCBudW1QYXNzZWRBcmdzID0gbV9ub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKKyAgICAgICAgaW50
IG51bUFyZ3MgPSBudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQ7CiAgICAgICAgIAot
ICAgICAgICBKX0pJVE9wZXJhdGlvbl9FIGZ1bmN0aW9uID0KLSAgICAgICAgICAgIG1fbm9kZS0+
b3AoKSA9PSBDYWxsID8gb3BlcmF0aW9uRlRMQ2FsbCA6IG9wZXJhdGlvbkZUTENvbnN0cnVjdDsK
KyAgICAgICAgTFZhbHVlIGNhbGxlZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDApKTsKICAgICAgICAgCi0gICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IG1f
bm9kZS0+b3AoKSA9PSBDYWxsID8gMCA6IDE7CisgICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQg
PSBtX3N0YWNrbWFwSURzKys7CiAgICAgICAgIAotICAgICAgICBpbnQgbnVtUGFzc2VkQXJncyA9
IG1fbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CisgICAgICAgIFZlY3RvcjxMVmFsdWU+IGFyZ3Vt
ZW50czsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDY0KHN0YWNrbWFw
SUQpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDMyKHNpemVPZkNh
bGwoKSkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNvbnN0TnVsbChtX291dC5yZWY4KSk7
CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMigxICsgSlNTdGFjazo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplICsgbnVt
QXJncykpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNhbGxlZSk7IC8vIGNhbGxlZSAtPiAl
cmF4CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoZ2V0VW5kZWYobV9vdXQuaW50NjQpKTsgLy8g
Y29kZSBibG9jaworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGdldFVuZGVmKG1fb3V0LmludDY0
KSk7IC8vIHNjb3BlIGNoYWluCisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoY2FsbGVlKTsgLy8g
Y2FsbGVlIC0+IHN0YWNrCisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQ2
NChudW1BcmdzKSk7IC8vIGFyZ3VtZW50IGNvdW50IGFuZCB6ZXJvcyBmb3IgdGhlIHRhZworICAg
ICAgICBpZiAoZHVtbXlUaGlzQXJndW1lbnQpCisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5k
KGdldFVuZGVmKG1fb3V0LmludDY0KSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
UGFzc2VkQXJnczsgKytpKQorICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChsb3dKU1ZhbHVl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxICsgaSkpKTsKICAgICAgICAgCi0gICAgICAg
IExWYWx1ZSBjYWxsZWVGcmFtZSA9IG1fb3V0LmFkZCgKLSAgICAgICAgICAgIG1fY2FsbEZyYW1l
LAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIobV9ncmFwaC5zdGFja1BvaW50ZXJPZmZz
ZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOworICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7CiAgICAg
ICAgIAotICAgICAgICBtX291dC5zdG9yZTMyKAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQz
MihudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQpLAotICAgICAgICAgICAgcGF5bG9h
ZEZvcihjYWxsZWVGcmFtZSwgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwotICAgICAgICBtX291
dC5zdG9yZTY0KG1fY2FsbEZyYW1lLCBjYWxsZWVGcmFtZSwgbV9oZWFwcy5DYWxsRnJhbWVfY2Fs
bGVyRnJhbWUpOwotICAgICAgICBtX291dC5zdG9yZTY0KAotICAgICAgICAgICAgbG93SlNWYWx1
ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLAotICAgICAgICAgICAgYWRkcmVzc0Zv
cihjYWxsZWVGcmFtZSwgSlNTdGFjazo6Q2FsbGVlKSk7CisgICAgICAgIExWYWx1ZSBjYWxsID0g
bV9vdXQuY2FsbChtX291dC5wYXRjaHBvaW50SW50NjRJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsK
KyAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNV2ViS2l0
SlNDYWxsQ29udik7CiAgICAgICAgIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBh
c3NlZEFyZ3M7ICsraSkgewotICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAg
ICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxICsgaSkpLAotICAg
ICAgICAgICAgICAgIGFkZHJlc3NGb3IoY2FsbGVlRnJhbWUsIHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGkgKyBkdW1teVRoaXNBcmd1bWVudCkub2Zmc2V0KCkpKTsKLSAgICAgICAgfQorICAg
ICAgICBtX2Z0bFN0YXRlLmpzQ2FsbHMuYXBwZW5kKEpTQ2FsbCgKKyAgICAgICAgICAgIHN0YWNr
bWFwSUQsCisgICAgICAgICAgICBtX25vZGUtPm9wKCkgPT0gQ2FsbCA/IENhbGxMaW5rSW5mbzo6
Q2FsbCA6IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0LAorICAgICAgICAgICAgbV9ub2RlLT5jb2Rl
T3JpZ2luKSk7CiAgICAgICAgIAotICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5vcGVy
YXRpb24oZnVuY3Rpb24pLCBjYWxsZWVGcmFtZSkpOworICAgICAgICBzZXRKU1ZhbHVlKGNhbGwp
OwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVKdW1wKCkKQEAgLTQwOTIsNyArNDA5Nyw3
IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBleGl0Lm1fc3RhY2ttYXBJRCA9IG1fc3RhY2tt
YXBJRHMrKzsKICAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBtX291dC5jb25zdEludDMyKE1h
Y3JvQXNzZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkpKTsKLSAgICAgICAgYXJndW1l
bnRzLmluc2VydCgwLCBtX291dC5jb25zdEludDMyKGV4aXQubV9zdGFja21hcElEKSk7CisgICAg
ICAgIGFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQ2NChleGl0Lm1fc3RhY2ttYXBJ
RCkpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuY2FsbChtX291dC5zdGFja21hcEludHJpbnNp
YygpLCBhcmd1bWVudHMpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRW50cnkuY3BwCShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCB2
b2lkKiBwcmVwYXJlT1NSRW50cnkoCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lID0gZGZnQ29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAg
ICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGRmZ0NvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCk7CiAgICAgREZHOjpKSVRDb2RlKiBkZmdDb2RlID0gZGZnQ29kZUJsb2NrLT5qaXRDb2Rl
KCktPmRmZygpOwogICAgIEZvck9TUkVudHJ5SklUQ29kZSogZW50cnlDb2RlID0gZW50cnlDb2Rl
QmxvY2stPmppdENvZGUoKS0+ZnRsRm9yT1NSRW50cnkoKTsKICAgICAKQEAgLTg3LDcgKzg4LDkg
QEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KAogICAgIAogICAgIGV4ZWMtPnNldENvZGVCbG9jayhl
bnRyeUNvZGVCbG9jayk7CiAgICAgCi0gICAgdm9pZCogcmVzdWx0ID0gZW50cnlDb2RlLT5hZGRy
ZXNzRm9yQ2FsbCgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgdm9pZCogcmVzdWx0ID0gZW50
cnlDb2RlLT5hZGRyZXNzRm9yQ2FsbCgKKyAgICAgICAgdm0sIGV4ZWN1dGFibGUsIEFyaXR5Q2hl
Y2tOb3RSZXF1aXJlZCwKKyAgICAgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCku
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAg
ICAgICBkYXRhTG9nKCIgICAgRW50cnkgd2lsbCBzdWNjZWVkLCBnb2luZyB0byBhZGRyZXNzIiwg
UmF3UG9pbnRlcihyZXN1bHQpLCAiXG4iKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDE2MDg1MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOSBAQAogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNp
bmNsdWRlICJGVExPU1JFeGl0LmgiCiAjaW5jbHVkZSAiRlRMU2F2ZVJlc3RvcmUuaCIKKyNpbmNs
dWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIk9wZXJhdGlv
bnMuaCIKKyNpbmNsdWRlICJSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaCIK
ICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKQEAgLTYxLDkgKzYzLDEwIEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgIAog
ICAgIC8vIFdlIG5lZWQgc2NyYXRjaCBzcGFjZSB0byBzYXZlIGFsbCByZWdpc3RlcnMgYW5kIHRv
IGJ1aWxkIHVwIHRoZSBKU1N0YWNrLgogICAgIC8vIFVzZSBhIHNjcmF0Y2ggYnVmZmVyIHRvIHRy
YW5zZmVyIGFsbCB2YWx1ZXMuCi0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZt
LT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogZXhpdC5tX3Zh
bHVlcy5zaXplKCkgKyByZXF1aXJlZFNjcmF0Y2hNZW1vcnlTaXplSW5CeXRlcygpKTsKKyAgICBT
Y3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkgKiBleGl0Lm1fdmFsdWVzLnNpemUoKSArIHJlcXVpcmVkU2Ny
YXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkgKyBqaXRDb2RlLT51bndpbmRJbmZvLm1fcmVnaXN0ZXJz
LnNpemUoKSAqIHNpemVvZih1aW50NjRfdCkpOwogICAgIEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNo
ID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1
ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IDA7CiAgICAgY2hhciogcmVnaXN0ZXJTY3JhdGNoID0gYml0
d2lzZV9jYXN0PGNoYXIqPihzY3JhdGNoICsgZXhpdC5tX3ZhbHVlcy5zaXplKCkpOworICAgIHVp
bnQ2NF90KiB1bndpbmRTY3JhdGNoID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Kj4ocmVnaXN0ZXJT
Y3JhdGNoICsgcmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMoKSk7CiAgICAgCiAgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgc2F2ZUFsbFJlZ2lzdGVycygpIGhhcyBhIHBsYWNlIG9uIHRvcCBv
ZiB0aGUgc3RhY2sgdG8gc3BpbGwgdGhpbmdzLiBUaGF0CiAgICAgLy8gZnVuY3Rpb24gZXhwZWN0
cyB0byBiZSBhYmxlIHRvIHVzZSB0b3Agb2Ygc3RhY2sgZm9yIHNjcmF0Y2ggbWVtb3J5LgpAQCAt
MTM5LDYgKzE0Miw3OCBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICAgICAgaml0LnN0
b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2ggKyBpbmRleCk7CiAgICAgfQogICAgIAorICAg
IC8vIEhlbmNlZm9ydGggd2UgbWFrZSBpdCBsb29rIGxpa2Ugd2UgaGFkIGNhbGxlZCB0aHJvdWdo
IGEgcmVnaXN0ZXIgcHJlc2VydmF0aW9uIHdyYXBwZXIuCisgICAgLy8gVGhpcyBpbXBsaWVzIHRo
YXQgRlAgbXVzdCBiZSBudWRnZWQgZG93biBieSBhIGNlcnRhaW4gYW1vdW50LiBUaGVuIHdlIHJl
c3RvcmUgdGhlCisgICAgLy8gdmFyaW91cyB0aGluZ3MgYWNjb3JkaW5nIHRvIGVpdGhlciBleGl0
Lm1fdmFsdWVzIG9yIGJ5IGNvcHlpbmcgZnJvbSB0aGUgb2xkIGZyYW1lLCBhbmQKKyAgICAvLyBm
aW5hbGx5IHdlIHNhdmUgdGhlIHZhcmlvdXMgY2FsbGVlLXNhdmUgcmVnaXN0ZXJzIGludG8gd2hl
cmUgdGhlIHJlc3RvcmF0aW9uIHRodW5rIHdvdWxkCisgICAgLy8gcmVzdG9yZSB0aGVtIGZyb20u
CisgICAgCisgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ2lzdGVyUHJlc2VydmF0aW9uT2Zmc2V0
KCk7CisgICAgUmVnaXN0ZXJTZXQgdG9TYXZlID0gcmVnaXN0ZXJzVG9QcmVzZXJ2ZSgpOworICAg
IAorICAgIC8vIEJlZm9yZSB3ZSBzdGFydCBtZXNzaW5nIHdpdGggdGhlIGZyYW1lLCB3ZSBuZWVk
IHRvIHNldCBhc2lkZSBhbnkgcmVnaXN0ZXJzIHRoYXQgdGhlCisgICAgLy8gRlRMIGNvZGUgd2Fz
IHByZXNlcnZpbmcuCisgICAgZm9yICh1bnNpZ25lZCBpID0gaml0Q29kZS0+dW53aW5kSW5mby5t
X3JlZ2lzdGVycy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRy
eSA9IGppdENvZGUtPnVud2luZEluZm8ubV9yZWdpc3RlcnNbaV07CisgICAgICAgIGppdC5sb2Fk
NjQoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6
ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpKSwKKyAgICAgICAgICAgIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHVud2luZFNj
cmF0Y2ggKyBpKTsKKyAgICB9CisgICAgCisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OnBh
eWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIEdQUkluZm86OnJlZ1QyKTsKKworICAg
IC8vIEZpcnN0IHNldCB1cCBTUCBzbyB0aGF0IG91ciBkYXRhIGRvZXNuJ3QgZ2V0IGNsb2JiZXJl
ZCBieSBzaWduYWxzLgorICAgIGppdC5hZGRQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoCisgICAgICAgICAgICAtcmVnaXN0ZXJQcmVzZXJ2YXRpb25PZmZzZXQoKSAt
IGV4aXQubV92YWx1ZXMubnVtYmVyT2ZMb2NhbHMoKSAqIHNpemVvZihSZWdpc3RlcikgLQorICAg
ICAgICAgICAgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLAorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgCisgICAgaml0LnN1YlB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihyZWdpc3RlclByZXNlcnZhdGlvbk9mZnNldCgpKSwKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAKKyAgICAvLyBDb3B5
IHRoZSBvbGQgZnJhbWUgZGF0YSBpbnRvIGl0cyBuZXcgbG9jYXRpb24uCisgICAgaml0LmFkZDMy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQ
b2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QxKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAgIGppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmxvYWQ2NChNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgb2Zmc2V0KSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgaml0
LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihSZWdpc3RlcikpLCBH
UFJJbmZvOjpyZWdUMSk7CisgICAgaml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgR1BSSW5mbzo6cmVnVDIpLmxpbmtUbyhsb29wLCAmaml0KTsKKyAgICAKKyAgICAvLyBB
dCB0aGlzIHBvaW50IHJlZ1QxIHBvaW50cyB0byB3aGVyZSB3ZSB3b3VsZCBzYXZlIG91ciByZWdp
c3RlcnMuIFNhdmUgdGhlbSBoZXJlLgorICAgIHB0cmRpZmZfdCBjdXJyZW50T2Zmc2V0ID0gMDsK
KyAgICBmb3IgKEdQUlJlZyBncHIgPSBBc3NlbWJseUhlbHBlcnM6OmZpcnN0UmVnaXN0ZXIoKTsg
Z3ByIDw9IEFzc2VtYmx5SGVscGVyczo6bGFzdFJlZ2lzdGVyKCk7IGdwciA9IHN0YXRpY19jYXN0
PEdQUlJlZz4oZ3ByICsgMSkpIHsKKyAgICAgICAgaWYgKCF0b1NhdmUuZ2V0KGdwcikpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY3VycmVudE9mZnNldCArPSBzaXplb2YoUmVnaXN0
ZXIpOworICAgICAgICB1bnNpZ25lZCB1bndpbmRJbmRleCA9IGppdENvZGUtPnVud2luZEluZm8u
aW5kZXhPZihncHIpOworICAgICAgICBpZiAodW53aW5kSW5kZXggPT0gVUlOVF9NQVgpIHsKKyAg
ICAgICAgICAgIC8vIFRoZSBGVEwgY29tcGlsYXRpb24gZGlkbid0IHByZXNlcnZlIHRoaXMgcmVn
aXN0ZXIuIFRoaXMgbWVhbnMgdGhhdCBpdCBhbHNvCisgICAgICAgICAgICAvLyBkaWRuJ3QgdXNl
IHRoZSByZWdpc3Rlci4gU28gaXRzIHZhbHVlIGF0IHRoZSBiZWdpbm5pbmcgb2YgT1NSIGV4aXQg
c2hvdWxkIGJlCisgICAgICAgICAgICAvLyBwcmVzZXJ2ZWQgYnkgdGhlIHRodW5rLiBMdWNraWx5
LCB3ZSBzYXZlZCBhbGwgcmVnaXN0ZXJzIGludG8gdGhlIHJlZ2lzdGVyCisgICAgICAgICAgICAv
LyBzY3JhdGNoIGJ1ZmZlciwgc28gd2UgY2FuIHJlc3RvcmUgdGhlbSBmcm9tIHRoZXJlLgorICAg
ICAgICAgICAgaml0LmxvYWQ2NChyZWdpc3RlclNjcmF0Y2ggKyBvZmZzZXRPZkdQUihncHIpLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGUgRlRM
IGNvbXBpbGF0aW9uIHByZXNlcnZlZCB0aGUgcmVnaXN0ZXIuIEl0cyBuZXcgdmFsdWUgaXMgdGhl
cmVmb3JlCisgICAgICAgICAgICAvLyBpcnJlbGV2YW50LCBidXQgd2UgY2FuIGdldCB0aGUgdmFs
dWUgdGhhdCB3YXMgcHJlc2VydmVkIGJ5IHVzaW5nIHRoZSB1bndpbmQKKyAgICAgICAgICAgIC8v
IGRhdGEuIFdlJ3ZlIGFscmVhZHkgY29waWVkIGFsbCB1bndpbmQtYWJsZSBwcmVzZXJ2ZWQgcmVn
aXN0ZXJzIGludG8gdGhlIHVud2luZAorICAgICAgICAgICAgLy8gc2NyYXRjaCBidWZmZXIsIHNv
IHdlIGNhbiBnZXQgaXQgZnJvbSB0aGVyZS4KKyAgICAgICAgICAgIGppdC5sb2FkNjQodW53aW5k
U2NyYXRjaCArIHVud2luZEluZGV4LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIH0KKyAgICAg
ICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMSwgY3VycmVudE9mZnNldCkpOworICAgIH0KKyAgICAKKyAgICAvLyBXZSBu
ZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIHJldHVybiBpbnRvIHRoZSByZWdpc3RlciByZXN0b3Jh
dGlvbiB0aHVuay4KKyAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNy
b0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENPZmZz
ZXQoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAs
IEdQUkluZm86OnJlZ1QxKTsKKyAgICBqaXQuc3RvcmVQdHIoCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHZtLT5nZXRDVElTdHViKHJlZ2lzdGVyUmVzdG9yYXRpb25UaHVu
a0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpLAorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENh
bGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSkpOworICAgIAogICAgIC8vIE5vdyBnZXQgc3RhdGUg
b3V0IG9mIHRoZSBzY3JhdGNoIGJ1ZmZlciBhbmQgcGxhY2UgaXQgYmFjayBpbnRvIHRoZSBzdGFj
ay4gVGhpcyBwYXJ0IGRvZXMKICAgICAvLyBhbGwgcmVib3hpbmcuCiAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyBpbmRleC0tOykgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExSZWdpc3RlckF0T2Zmc2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFJlZ2lzdGVyQXRPZmZzZXQuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExSZWdpc3RlckF0T2Zmc2V0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGVExSZWdpc3RlckF0T2Zmc2V0LmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lkIFJlZ2lzdGVyQXRPZmZzZXQ6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoZ3ByKCksICIgYXQgIiwg
b2Zmc2V0KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExSZWdp
c3RlckF0T2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExSZWdpc3RlckF0T2Zmc2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFJlZ2lzdGVyQXRPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgRlRMUmVnaXN0ZXJBdE9mZnNldF9oCisjZGVmaW5lIEZUTFJlZ2lzdGVyQXRPZmZzZXRfaAor
CisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSA8
d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwor
Y2xhc3MgUmVnaXN0ZXJBdE9mZnNldCB7CitwdWJsaWM6CisgICAgUmVnaXN0ZXJBdE9mZnNldCgp
CisgICAgICAgIDogbV9ncHIoSW52YWxpZEdQUlJlZykKKyAgICAgICAgLCBtX29mZnNldCgwKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgUmVnaXN0ZXJBdE9mZnNldChHUFJSZWcgZ3ByLCBwdHJk
aWZmX3Qgb2Zmc2V0KQorICAgICAgICA6IG1fZ3ByKGdwcikKKyAgICAgICAgLCBtX29mZnNldChv
ZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsg
cmV0dXJuIG1fZ3ByID09IEludmFsaWRHUFJSZWc7IH0KKyAgICAKKyAgICBHUFJSZWcgZ3ByKCkg
Y29uc3QgeyByZXR1cm4gbV9ncHI7IH0KKyAgICBwdHJkaWZmX3Qgb2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaXN0
ZXJBdE9mZnNldCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZ3ByKCkgPT0g
b3RoZXIuZ3ByKCkgJiYgb2Zmc2V0KCkgPT0gb3RoZXIub2Zmc2V0KCk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKGdwcigpICE9IG90aGVyLmdwcigpKQorICAgICAgICAgICAgcmV0
dXJuIGdwcigpIDwgb3RoZXIuZ3ByKCk7CisgICAgICAgIHJldHVybiBvZmZzZXQoKSA8IG90aGVy
Lm9mZnNldCgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgR1BSUmVnIGdldEdQUihSZWdpc3Rl
ckF0T2Zmc2V0KiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUtPmdwcigpOyB9CisgICAgCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIEdQUlJlZyBt
X2dwcjsKKyAgICBwdHJkaWZmX3QgbV9vZmZzZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTFJlZ2lz
dGVyQXRPZmZzZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNr
TWFwcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFj
a01hcHMuY3BwCShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFN0YWNrTWFwcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDkgQEAgdm9pZCBT
dGFja01hcHM6OkxvY2F0aW9uOjpyZXN0b3JlSW50bygKIAogYm9vbCBTdGFja01hcHM6OlJlY29y
ZDo6cGFyc2UoRGF0YVZpZXcqIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQpCiB7Ci0gICAgcGF0Y2hw
b2ludElEID0gdmlldy0+cmVhZDx1aW50MzJfdD4ob2Zmc2V0LCB0cnVlKTsKKyAgICBpbnQ2NF90
IGlkID0gdmlldy0+cmVhZDxpbnQ2NF90PihvZmZzZXQsIHRydWUpOworICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxpbnQzMl90PihpZCkgPT0gaWQpOworICAgIHBhdGNocG9pbnRJRCA9IHN0YXRpY19j
YXN0PHVpbnQzMl90PihpZCk7CiAgICAgaWYgKHN0YXRpY19jYXN0PGludDMyX3Q+KHBhdGNocG9p
bnRJRCkgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBAIC05MCw2ICs5MiwxMyBA
QCBib29sIFN0YWNrTWFwczo6UmVjb3JkOjpwYXJzZShEYXRhVmlldyogCiAgICAgd2hpbGUgKGxl
bmd0aC0tKQogICAgICAgICBsb2NhdGlvbnMuYXBwZW5kKHJlYWRPYmplY3Q8TG9jYXRpb24+KHZp
ZXcsIG9mZnNldCkpOwogICAgIAorICAgIHVuc2lnbmVkIG51bUxpdmVPdXRzID0gdmlldy0+cmVh
ZDx1aW50MTZfdD4ob2Zmc2V0LCB0cnVlKTsKKyAgICB3aGlsZSAobnVtTGl2ZU91dHMtLSkgewor
ICAgICAgICB2aWV3LT5yZWFkPHVpbnQxNl90PihvZmZzZXQsIHRydWUpOyAvLyByZWdudW0KKyAg
ICAgICAgdmlldy0+cmVhZDx1aW50OF90PihvZmZzZXQsIHRydWUpOyAvLyByZXNlcnZlZAorICAg
ICAgICB2aWV3LT5yZWFkPHVpbnQ4X3Q+KG9mZnNldCwgdHJ1ZSk7IC8vIHNpemUgaW4gYnl0ZXMK
KyAgICB9CisgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU3RhdGUuY3BwCShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBA
QCBTdGF0ZTo6U3RhdGUoR3JhcGgmIGdyYXBoKQogICAgICwgbW9kdWxlKDApCiAgICAgLCBmdW5j
dGlvbigwKQogICAgICwgZ2VuZXJhdGVkRnVuY3Rpb24oMCkKKyAgICAsIGNvbXBhY3RVbndpbmQo
MCkKKyAgICAsIGNvbXBhY3RVbndpbmRTaXplKDApCiB7CiAgICAgc3dpdGNoIChncmFwaC5tX3Bs
YW4ubW9kZSkgewogICAgIGNhc2UgRlRMTW9kZTogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU3RhdGUuaAkocmV2aXNpb24gMTYwODUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVk
ZSAiRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgog
I2luY2x1ZGUgIkZUTEpJVEZpbmFsaXplci5oIgorI2luY2x1ZGUgIkZUTEpTQ2FsbC5oIgogI2lu
Y2x1ZGUgIkZUTFN0YWNrTWFwcy5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCkBA
IC02MCw4ICs2MSwxMSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgY2FwdHVyZWRTdGFja21hcElE
OwogICAgIFNlZ21lbnRlZFZlY3RvcjxHZXRCeUlkRGVzY3JpcHRvcj4gZ2V0QnlJZHM7CiAgICAg
U2VnbWVudGVkVmVjdG9yPFB1dEJ5SWREZXNjcmlwdG9yPiBwdXRCeUlkczsKKyAgICBWZWN0b3I8
SlNDYWxsPiBqc0NhbGxzOwogICAgIFZlY3RvcjxDU3RyaW5nPiBjb2RlU2VjdGlvbk5hbWVzOwog
ICAgIFZlY3RvcjxDU3RyaW5nPiBkYXRhU2VjdGlvbk5hbWVzOworICAgIHZvaWQqIGNvbXBhY3RV
bndpbmQ7CisgICAgc2l6ZV90IGNvbXBhY3RVbndpbmRTaXplOwogICAgIFJlZkNvdW50ZWRBcnJh
eTxMU2VjdGlvbldvcmQ+IHN0YWNrbWFwc1NlY3Rpb247CiAgICAgCiAgICAgdm9pZCBkdW1wU3Rh
dGUoY29uc3QgY2hhciogd2hlbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFVud2luZEluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMVW53aW5kSW5mby5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFVud2luZEluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGVExVbndpbmRJbmZvLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJ
VCkKKworI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorI2luY2x1ZGUgPG1hY2gtby9jb21wYWN0
X3Vud2luZF9lbmNvZGluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisK
K1Vud2luZEluZm86OlVud2luZEluZm8oKSB7IH0KK1Vud2luZEluZm86On5VbndpbmRJbmZvKCkg
eyB9CisKK25hbWVzcGFjZSB7CisKK3N0cnVjdCBDb21wYWN0VW53aW5kIHsKKyAgICB2b2lkKiBm
dW5jdGlvbjsKKyAgICB1aW50MzJfdCBzaXplOworICAgIGNvbXBhY3RfdW53aW5kX2VuY29kaW5n
X3QgZW5jb2Rpbmc7CisgICAgdm9pZCogcGVyc29uYWxpdHk7CisgICAgdm9pZCogbHNkYTsKK307
CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIFVud2luZEluZm86OnBhcnNlKHZv
aWQqIHNlY3Rpb24sIHNpemVfdCBzaXplKQoreworICAgIG1fcmVnaXN0ZXJzLmNsZWFyKCk7Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlQoc2VjdGlvbik7CisgICAgUkVMRUFTRV9BU1NFUlQoc2l6
ZSA+PSBzaXplb2YoQ29tcGFjdFVud2luZCkpOworICAgIAorICAgIENvbXBhY3RVbndpbmQqIGRh
dGEgPSBiaXR3aXNlX2Nhc3Q8Q29tcGFjdFVud2luZCo+KHNlY3Rpb24pOworICAgIAorICAgIFJF
TEVBU0VfQVNTRVJUKCFkYXRhLT5wZXJzb25hbGl0eSk7IC8vIFdlIGRvbid0IGtub3cgaG93IHRv
IGhhbmRsZSB0aGlzLgorICAgIFJFTEVBU0VfQVNTRVJUKCFkYXRhLT5sc2RhKTsgLy8gV2UgZG9u
J3Qga25vdyBob3cgdG8gaGFuZGxlIHRoaXMuCisgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZSA9PSBz
aXplb2YoQ29tcGFjdFVud2luZCkgfHwgIWRhdGFbMV0uZnVuY3Rpb24pOyAvLyBUaGVyZSB3aWxs
IG9ubHkgYmUgb25lIGZ1bmN0aW9uLgorICAgIAorICAgIGNvbXBhY3RfdW53aW5kX2VuY29kaW5n
X3QgZW5jb2RpbmcgPSBkYXRhLT5lbmNvZGluZzsKKyAgICBSRUxFQVNFX0FTU0VSVCghKGVuY29k
aW5nICYgVU5XSU5EX0lTX05PVF9GVU5DVElPTl9TVEFSVCkpOworICAgIFJFTEVBU0VfQVNTRVJU
KCEoZW5jb2RpbmcgJiBVTldJTkRfSEFTX0xTREEpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghKGVu
Y29kaW5nICYgVU5XSU5EX1BFUlNPTkFMSVRZX01BU0spKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgo
ZW5jb2RpbmcgJiBVTldJTkRfWDg2XzY0X01PREVfTUFTSykgPT0gVU5XSU5EX1g4Nl82NF9NT0RF
X1JCUF9GUkFNRSk7CisgICAgCisgICAgaW50MzJfdCBvZmZzZXQgPSAtKChlbmNvZGluZyAmIFVO
V0lORF9YODZfNjRfUkJQX0ZSQU1FX09GRlNFVCkgPj4gMTYpICogODsKKyAgICB1aW50MzJfdCBu
ZXh0UmVnaXN0ZXJzID0gZW5jb2Rpbmc7CisgICAgZm9yICh1bnNpZ25lZCBpID0gNTsgaS0tOykg
eworICAgICAgICB1aW50MzJfdCBjdXJyZW50UmVnaXN0ZXIgPSBuZXh0UmVnaXN0ZXJzICYgNzsK
KyAgICAgICAgbmV4dFJlZ2lzdGVycyA+Pj0gMzsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAo
Y3VycmVudFJlZ2lzdGVyKSB7CisgICAgICAgIGNhc2UgVU5XSU5EX1g4Nl82NF9SRUdfTk9ORToK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVU5XSU5EX1g4
Nl82NF9SRUdfUkJYOgorICAgICAgICAgICAgbV9yZWdpc3RlcnMuYXBwZW5kKFJlZ2lzdGVyQXRP
ZmZzZXQoWDg2UmVnaXN0ZXJzOjplYngsIG9mZnNldCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBVTldJTkRfWDg2XzY0X1JFR19SMTI6CisgICAgICAg
ICAgICBtX3JlZ2lzdGVycy5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChYODZSZWdpc3RlcnM6OnIx
Miwgb2Zmc2V0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIFVOV0lORF9YODZfNjRfUkVHX1IxMzoKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJzLmFwcGVu
ZChSZWdpc3RlckF0T2Zmc2V0KFg4NlJlZ2lzdGVyczo6cjEzLCBvZmZzZXQpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVU5XSU5EX1g4Nl82NF9SRUdf
UjE0OgorICAgICAgICAgICAgbV9yZWdpc3RlcnMuYXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoWDg2
UmVnaXN0ZXJzOjpyMTQsIG9mZnNldCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBVTldJTkRfWDg2XzY0X1JFR19SMTU6CisgICAgICAgICAgICBtX3Jl
Z2lzdGVycy5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChYODZSZWdpc3RlcnM6OnIxNSwgb2Zmc2V0
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVOV0lO
RF9YODZfNjRfUkVHX1JCUDoKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJzLmFwcGVuZChSZWdpc3Rl
ckF0T2Zmc2V0KFg4NlJlZ2lzdGVyczo6ZWJwLCBvZmZzZXQpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvZmZzZXQg
Kz0gODsKKyAgICB9CisgICAgCisgICAgc3RkOjpzb3J0KG1fcmVnaXN0ZXJzLmJlZ2luKCksIG1f
cmVnaXN0ZXJzLmVuZCgpKTsKK30KKwordm9pZCBVbndpbmRJbmZvOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGxpc3REdW1wKG1fcmVnaXN0ZXJzKSk7Cit9
CisKK1JlZ2lzdGVyQXRPZmZzZXQqIFVud2luZEluZm86OmZpbmQoR1BSUmVnIGdwcikgY29uc3QK
K3sKKyAgICByZXR1cm4gdHJ5QmluYXJ5U2VhcmNoPFJlZ2lzdGVyQXRPZmZzZXQsIEdQUlJlZz4o
bV9yZWdpc3RlcnMsIG1fcmVnaXN0ZXJzLnNpemUoKSwgZ3ByLCBSZWdpc3RlckF0T2Zmc2V0Ojpn
ZXRHUFIpOworfQorCit1bnNpZ25lZCBVbndpbmRJbmZvOjppbmRleE9mKEdQUlJlZyBncHIpIGNv
bnN0Cit7CisgICAgaWYgKFJlZ2lzdGVyQXRPZmZzZXQqIHBvaW50ZXIgPSBmaW5kKGdwcikpCisg
ICAgICAgIHJldHVybiBwb2ludGVyIC0gbV9yZWdpc3RlcnMuYmVnaW4oKTsKKyAgICByZXR1cm4g
VUlOVF9NQVg7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFVud2lu
ZEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFVud2lu
ZEluZm8uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVW53
aW5kSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExVbndpbmRJbmZvX2gK
KyNkZWZpbmUgRlRMVW53aW5kSW5mb19oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1
ZGUgIkZUTFJlZ2lzdGVyQXRPZmZzZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgeworCitzdHJ1Y3QgVW53aW5kSW5mbyB7CisgICAgVW53aW5kSW5mbygpOworICAgIH5Vbndp
bmRJbmZvKCk7CisgICAgCisgICAgdm9pZCBwYXJzZSh2b2lkKiwgc2l6ZV90KTsKKyAgICAKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICBSZWdpc3RlckF0T2Zm
c2V0KiBmaW5kKEdQUlJlZyBncHIpIGNvbnN0OworICAgIHVuc2lnbmVkIGluZGV4T2YoR1BSUmVn
IGdwcikgY29uc3Q7IC8vIFJldHVybiBVSU5UX01BWCBpZiBub3QgZm91bmQuCisgICAgCisgICAg
VmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+IG1fcmVnaXN0ZXJzOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBG
VExVbndpbmRJbmZvX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNp
b24gMTYwODUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MDUsOCArNzA1LDcgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRl
Q29tcGlsZShKSQogICAgIAogICAgIG1fY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6
OkxhdGVTaHJpbmspOwogICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9w
dFJlZihuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIEpJVENvZGU6OkJhc2VsaW5lSklUKSksCi0g
ICAgICAgIHdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENv
ZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUQ29kZTo6QmFzZWxpbmVKSVQpKSk7CiAgICAg
CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFKQogICAgIGRhdGFMb2dGKCJKSVQgZ2VuZXJhdGVkIGNv
ZGUgZm9yICVwIGF0IFslcCwgJXApLlxuIiwgbV9jb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxl
TWVtb3J5KCktPnN0YXJ0KCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpKTsKQEAg
LTcxNSw0MiArNzE0LDYgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShK
SQogICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9CiAKLXZvaWQgSklUOjpsaW5r
Rm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sqIGNhbGxl
ckNvZGVCbG9jaywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpJVDo6Q29kZVB0ciBjb2Rl
LCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgVk0qIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCi17Ci0gICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVC
bG9jayk7Ci0KLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5rZWQoKSk7Ci0gICAgY2Fs
bExpbmtJbmZvLT5jYWxsZWUuc2V0KCp2bSwgY2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4sIGNh
bGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7Ci0gICAgY2FsbExpbmtJ
bmZvLT5sYXN0U2VlbkNhbGxlZS5zZXQoKnZtLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBjYWxsZWUpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+
aG90UGF0aE90aGVyLCBjb2RlKTsKLQotICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCi0gICAgICAg
IGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChleGVjLCBjYWxsTGlua0luZm8pOwot
Ci0gICAgLy8gUGF0Y2ggdGhlIHNsb3cgcGF0Y2ggc28gd2UgZG8gbm90IGNvbnRpbnVlIHRvIHRy
eSB0byBsaW5rLgotICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgIEFTU0VS
VChjYWxsTGlua0luZm8tPmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbAotICAgICAgICAg
ICAgICAgfHwgY2FsbExpbmtJbmZvLT5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGxWYXJh
cmdzKTsKLSAgICAgICAgaWYgKGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUgPT0gQ2FsbExpbmtJbmZv
OjpDYWxsKSB7Ci0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8t
PmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtH
ZW5lcmF0b3IpLmNvZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlv
biwgdm0tPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1
Y3QpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uLCB2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpLmNv
ZGUoKSk7Ci19Ci0KLXZvaWQgSklUOjpsaW5rU2xvd0NhbGwoQ29kZUJsb2NrKiBjYWxsZXJDb2Rl
QmxvY2ssIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQotewotICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwotCi0gICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGNhbGxlckNvZGVCbG9jay0+dm0o
KS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwotfQotCiB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCiB7CiAgICAgaWYgKG1f
ZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkgJiYgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1l
Um9sbGJhY2suZW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24g
MTYwODUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjQxLDkgKzI0MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJu
IGppdC5wcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwodm0sIGZ1bmMpOwogICAgICAgICB9CiAK
LSAgICAgICAgc3RhdGljIHZvaWQgbGlua0ZvcihFeGVjU3RhdGUqLCBKU0Z1bmN0aW9uKiBjYWxs
ZWUsIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9j
aywgQ29kZVB0ciwgQ2FsbExpbmtJbmZvKiwgVk0qLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsK
LSAgICAgICAgc3RhdGljIHZvaWQgbGlua1Nsb3dDYWxsKENvZGVCbG9jayogY2FsbGVyQ29kZUJs
b2NrLCBDYWxsTGlua0luZm8qKTsKLSAgICAgICAgCiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBm
cmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7CiAgICAgICAgIHN0YXRpYyBpbnQgc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
OSw3ICsyOTksMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRAog
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKLSAgICBt
X2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxs
UmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/
IG1fdm0tPmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkgOiBt
X3ZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgVGh1
bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbGlua0NhbGxUaHVua0dlbmVyYXRvckZvcigKKyAgICAg
ICAgb3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JD
YWxsLAorICAgICAgICBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKKyAgICAKKyAg
ICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5j
YWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIoZ2VuZXJh
dG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICBl
bWl0UHV0Q2FsbFJlc3VsdChpbnN0cnVjdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDE2MDg1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw3ICsyMjcsMTEgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRAogCiAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMigxNiksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKLSAgICBtX2NhbGxT
dHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJu
TG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fdm0t
PmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkgOiBtX3ZtLT5n
ZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgVGh1bmtHZW5l
cmF0b3IgZ2VuZXJhdG9yID0gbGlua1RodW5rR2VuZXJhdG9yRm9yKAorICAgICAgICBvcGNvZGVJ
RCA9PSBvcF9jb25zdHJ1Y3QgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwsCisgICAg
ICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOworICAgIAorICAgIG1fY2FsbFN0
cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5M
b2NhdGlvbiA9IGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihnZW5lcmF0b3IpLmNvZGUo
KSk7CiAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2Nv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCShyZXZpc2lvbiAxNjA4NTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIk9wZXJh
dGlvbnMuaCIKKyNpbmNsdWRlICJSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3Iu
aCIKICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03
Myw1MCArNzQsMzggQEAgRlRMOjpGb3JPU1JFbnRyeUpJVENvZGUqIEpJVENvZGU6OmZ0bEZvcgog
CiBQYXNzUmVmUHRyPEpJVENvZGU+IEpJVENvZGU6Omhvc3RGdW5jdGlvbihKSVRDb2RlOjpDb2Rl
UmVmIGNvZGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKGNvZGUs
IEhvc3RDYWxsVGh1bmspKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5hdGl2ZUpJVENvZGUo
Y29kZSwgSG9zdENhbGxUaHVuaykpOwogfQogCi1EaXJlY3RKSVRDb2RlOjpEaXJlY3RKSVRDb2Rl
KEpJVFR5cGUgaml0VHlwZSkKK0pJVENvZGVXaXRoQ29kZVJlZjo6SklUQ29kZVdpdGhDb2RlUmVm
KEpJVFR5cGUgaml0VHlwZSkKICAgICA6IEpJVENvZGUoaml0VHlwZSkKIHsKIH0KIAotRGlyZWN0
SklUQ29kZTo6RGlyZWN0SklUQ29kZShjb25zdCBKSVRDb2RlOjpDb2RlUmVmIHJlZiwgSklUVHlw
ZSBqaXRUeXBlKQorSklUQ29kZVdpdGhDb2RlUmVmOjpKSVRDb2RlV2l0aENvZGVSZWYoQ29kZVJl
ZiByZWYsIEpJVFR5cGUgaml0VHlwZSkKICAgICA6IEpJVENvZGUoaml0VHlwZSkKICAgICAsIG1f
cmVmKHJlZikKIHsKIH0KIAotRGlyZWN0SklUQ29kZTo6fkRpcmVjdEpJVENvZGUoKQorSklUQ29k
ZVdpdGhDb2RlUmVmOjp+SklUQ29kZVdpdGhDb2RlUmVmKCkKIHsKIH0KIAotdm9pZCBEaXJlY3RK
SVRDb2RlOjppbml0aWFsaXplQ29kZVJlZihjb25zdCBKSVRDb2RlOjpDb2RlUmVmIHJlZikKLXsK
LSAgICBSRUxFQVNFX0FTU0VSVCghbV9yZWYpOwotICAgIG1fcmVmID0gcmVmOwotfQotCi1KSVRD
b2RlOjpDb2RlUHRyIERpcmVjdEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKCkKLXsKLSAgICBSRUxF
QVNFX0FTU0VSVChtX3JlZik7Ci0gICAgcmV0dXJuIG1fcmVmLmNvZGUoKTsKLX0KLQotdm9pZCog
RGlyZWN0SklUQ29kZTo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChzaXplX3Qgb2Zmc2V0KQor
dm9pZCogSklUQ29kZVdpdGhDb2RlUmVmOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVf
dCBvZmZzZXQpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOwogICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkgKyBv
ZmZzZXQ7CiB9CiAKLXZvaWQqIERpcmVjdEpJVENvZGU6OmRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6
ZV90IG9mZnNldCkKK3ZvaWQqIEpJVENvZGVXaXRoQ29kZVJlZjo6ZGF0YUFkZHJlc3NBdE9mZnNl
dChzaXplX3Qgb2Zmc2V0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKICAgICBBU1NF
UlQob2Zmc2V0IDw9IHNpemUoKSk7IC8vIHVzZSA8PSBpbnN0ZWFkIG9mIDwgYmVjYXVzZSBpdCBp
cyB2YWxpZCB0byBhc2sgZm9yIGFuIGFkZHJlc3MgYXQgdGhlIGV4Y2x1c2l2ZSBlbmQgb2YgdGhl
IGNvZGUuCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fcmVmLmNvZGUoKS5k
YXRhTG9jYXRpb24oKSkgKyBvZmZzZXQ7CiB9CiAKLXVuc2lnbmVkIERpcmVjdEpJVENvZGU6Om9m
ZnNldE9mKHZvaWQqIHBvaW50ZXJJbnRvQ29kZSkKK3Vuc2lnbmVkIEpJVENvZGVXaXRoQ29kZVJl
Zjo6b2Zmc2V0T2Yodm9pZCogcG9pbnRlckludG9Db2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KG1fcmVmKTsKICAgICBpbnRwdHJfdCByZXN1bHQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90
Pihwb2ludGVySW50b0NvZGUpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9yZWYuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwpAQCAtMTI0LDE4ICsxMTMsMTA3IEBAIHVuc2lnbmVk
IERpcmVjdEpJVENvZGU6Om9mZnNldE9mKHZvaWQqIHAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHJlc3VsdCk7CiB9CiAKLXNpemVfdCBEaXJlY3RKSVRDb2RlOjpzaXplKCkKK3Np
emVfdCBKSVRDb2RlV2l0aENvZGVSZWY6OnNpemUoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1f
cmVmKTsKICAgICByZXR1cm4gbV9yZWYuc2l6ZSgpOwogfQogCi1ib29sIERpcmVjdEpJVENvZGU6
OmNvbnRhaW5zKHZvaWQqIGFkZHJlc3MpCitib29sIEpJVENvZGVXaXRoQ29kZVJlZjo6Y29udGFp
bnModm9pZCogYWRkcmVzcykKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX3JlZik7CiAgICAgcmV0
dXJuIG1fcmVmLmV4ZWN1dGFibGVNZW1vcnkoKS0+Y29udGFpbnMoYWRkcmVzcyk7CiB9CiAKK0Rp
cmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUoSklUVHlwZSBqaXRUeXBlKQorICAgIDogSklUQ29k
ZVdpdGhDb2RlUmVmKGppdFR5cGUpCit7Cit9CisKK0RpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENv
ZGUoCisgICAgSklUQ29kZTo6Q29kZVJlZiByZWYsIEpJVENvZGU6OkNvZGVQdHIgd2l0aEFyaXR5
Q2hlY2ssIEpJVFR5cGUgaml0VHlwZSkKKyAgICA6IEpJVENvZGVXaXRoQ29kZVJlZihyZWYsIGpp
dFR5cGUpCisgICAgLCBtX3dpdGhBcml0eUNoZWNrKHdpdGhBcml0eUNoZWNrKQoreworfQorCitE
aXJlY3RKSVRDb2RlOjp+RGlyZWN0SklUQ29kZSgpCit7Cit9CisKK3ZvaWQgRGlyZWN0SklUQ29k
ZTo6aW5pdGlhbGl6ZUNvZGVSZWYoSklUQ29kZTo6Q29kZVJlZiByZWYsIEpJVENvZGU6OkNvZGVQ
dHIgd2l0aEFyaXR5Q2hlY2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmVmKTsKKyAgICBt
X3JlZiA9IHJlZjsKKyAgICBtX3dpdGhBcml0eUNoZWNrID0gd2l0aEFyaXR5Q2hlY2s7Cit9CisK
K0RpcmVjdEpJVENvZGU6OlJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlcnMqIERpcmVjdEpJVENv
ZGU6OmVuc3VyZVdyYXBwZXJzKCkKK3sKKyAgICBpZiAoIW1fd3JhcHBlcnMpCisgICAgICAgIG1f
d3JhcHBlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlcnM+
KCk7CisgICAgcmV0dXJuIG1fd3JhcHBlcnMuZ2V0KCk7Cit9CisKK0pJVENvZGU6OkNvZGVQdHIg
RGlyZWN0SklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoCisgICAgVk0mIHZtLCBFeGVjdXRhYmxlQmFz
ZSogZXhlY3V0YWJsZSwgQXJpdHlDaGVja01vZGUgYXJpdHksCisgICAgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sKKyAgICBzd2l0Y2ggKGFyaXR5KSB7CisgICAgY2FzZSBB
cml0eUNoZWNrTm90UmVxdWlyZWQ6CisgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAg
ICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1fcmVmKTsKKyAgICAgICAgICAgIHJldHVybiBtX3JlZi5jb2RlKCk7Cisg
ICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOiB7CisgICAgICAgICAgICBSZWdpc3Rl
clByZXNlcnZhdGlvbldyYXBwZXJzKiB3cmFwcGVycyA9IGVuc3VyZVdyYXBwZXJzKCk7CisgICAg
ICAgICAgICBpZiAoIXdyYXBwZXJzLT53aXRob3V0QXJpdHlDaGVjaykKKyAgICAgICAgICAgICAg
ICB3cmFwcGVycy0+d2l0aG91dEFyaXR5Q2hlY2sgPSBnZW5lcmF0ZVJlZ2lzdGVyUHJlc2VydmF0
aW9uV3JhcHBlcih2bSwgZXhlY3V0YWJsZSwgbV9yZWYuY29kZSgpKTsKKyAgICAgICAgICAgIHJl
dHVybiB3cmFwcGVycy0+d2l0aG91dEFyaXR5Q2hlY2suY29kZSgpOworICAgICAgICB9IH0KKyAg
ICBjYXNlIE11c3RDaGVja0FyaXR5OgorICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAg
ICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChtX3dpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgICAgIHJldHVybiBtX3dp
dGhBcml0eUNoZWNrOworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczogeworICAg
ICAgICAgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVycyogd3JhcHBlcnMgPSBlbnN1cmVX
cmFwcGVycygpOworICAgICAgICAgICAgaWYgKCF3cmFwcGVycy0+d2l0aEFyaXR5Q2hlY2spCisg
ICAgICAgICAgICAgICAgd3JhcHBlcnMtPndpdGhBcml0eUNoZWNrID0gZ2VuZXJhdGVSZWdpc3Rl
clByZXNlcnZhdGlvbldyYXBwZXIodm0sIGV4ZWN1dGFibGUsIG1fd2l0aEFyaXR5Q2hlY2spOwor
ICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXJzLT53aXRoQXJpdHlDaGVjay5jb2RlKCk7CisgICAg
ICAgIH0gfQorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBDb2RlUHRyKCk7Cit9CisKK05hdGl2ZUpJVENvZGU6Ok5hdGl2ZUpJVENvZGUoSklUVHlw
ZSBqaXRUeXBlKQorICAgIDogSklUQ29kZVdpdGhDb2RlUmVmKGppdFR5cGUpCit7Cit9CisKK05h
dGl2ZUpJVENvZGU6Ok5hdGl2ZUpJVENvZGUoQ29kZVJlZiByZWYsIEpJVFR5cGUgaml0VHlwZSkK
KyAgICA6IEpJVENvZGVXaXRoQ29kZVJlZihyZWYsIGppdFR5cGUpCit7Cit9CisKK05hdGl2ZUpJ
VENvZGU6On5OYXRpdmVKSVRDb2RlKCkKK3sKK30KKwordm9pZCBOYXRpdmVKSVRDb2RlOjppbml0
aWFsaXplQ29kZVJlZihDb2RlUmVmIHJlZikKK3sKKyAgICBBU1NFUlQoIW1fcmVmKTsKKyAgICBt
X3JlZiA9IHJlZjsKK30KKworSklUQ29kZTo6Q29kZVB0ciBOYXRpdmVKSVRDb2RlOjphZGRyZXNz
Rm9yQ2FsbCgKKyAgICBWTSYsIEV4ZWN1dGFibGVCYXNlKiwgQXJpdHlDaGVja01vZGUsIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTW9kZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghIW1fcmVmKTsKKyAg
ICByZXR1cm4gbV9yZWYuY29kZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNw
YWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24g
MTYwODUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDE0ICsyNiwxNCBAQAogI2lmbmRlZiBKSVRDb2RlX2gKICNkZWZpbmUgSklU
Q29kZV9oCiAKLSNpZiBFTkFCTEUoSklUKSB8fCBFTkFCTEUoTExJTlQpCisjaW5jbHVkZSAiQXJp
dHlDaGVja01vZGUuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJEaXNhc3Nl
bWJsZXIuaCIKICNpbmNsdWRlICJKSVRTdHVicy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIK
ICNpbmNsdWRlICJMZWdhY3lQcm9maWxlci5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oIgotI2VuZGlmCisjaW5jbHVkZSAiUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNjQsNyArMTY0LDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gaml0Q29kZS0+aml0VHlwZSgpOwogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIENvZGVQ
dHIgYWRkcmVzc0ZvckNhbGwoKSA9IDA7CisgICAgdmlydHVhbCBDb2RlUHRyIGFkZHJlc3NGb3JD
YWxsKFZNJiwgRXhlY3V0YWJsZUJhc2UqLCBBcml0eUNoZWNrTW9kZSwgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Nb2RlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkKiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zm
c2V0KHNpemVfdCBvZmZzZXQpID0gMDsKICAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzcygpIHsg
cmV0dXJuIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoMCk7IH0KICAgICB2aXJ0dWFsIHZvaWQq
IGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkgPSAwOwpAQCAtMTg5LDI1ICsxODks
NTggQEAgcHJpdmF0ZToKICAgICBKSVRUeXBlIG1faml0VHlwZTsKIH07CiAKLWNsYXNzIERpcmVj
dEpJVENvZGUgOiBwdWJsaWMgSklUQ29kZSB7CitjbGFzcyBKSVRDb2RlV2l0aENvZGVSZWYgOiBw
dWJsaWMgSklUQ29kZSB7Citwcm90ZWN0ZWQ6CisgICAgSklUQ29kZVdpdGhDb2RlUmVmKEpJVFR5
cGUpOworICAgIEpJVENvZGVXaXRoQ29kZVJlZihDb2RlUmVmLCBKSVRUeXBlKTsKKwogcHVibGlj
OgotICAgIERpcmVjdEpJVENvZGUoSklUVHlwZSk7Ci0gICAgRGlyZWN0SklUQ29kZShjb25zdCBD
b2RlUmVmLCBKSVRUeXBlKTsKLSAgICB2aXJ0dWFsIH5EaXJlY3RKSVRDb2RlKCk7Ci0gICAgCi0g
ICAgdm9pZCBpbml0aWFsaXplQ29kZVJlZihDb2RlUmVmIHJlZik7CisgICAgdmlydHVhbCB+SklU
Q29kZVdpdGhDb2RlUmVmKCk7CiAKLSAgICB2aXJ0dWFsIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwo
KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQqIGV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQo
c2l6ZV90IG9mZnNldCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkKiBkYXRhQWRkcmVzc0F0
T2Zmc2V0KHNpemVfdCBvZmZzZXQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdW5zaWduZWQgb2Zm
c2V0T2Yodm9pZCogcG9pbnRlckludG9Db2RlKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHNpemVf
dCBzaXplKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGNvbnRhaW5zKHZvaWQqKSBPVkVS
UklERTsKIAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICBDb2RlUmVmIG1fcmVmOwogfTsKIAor
Y2xhc3MgRGlyZWN0SklUQ29kZSA6IHB1YmxpYyBKSVRDb2RlV2l0aENvZGVSZWYgeworcHVibGlj
OgorICAgIERpcmVjdEpJVENvZGUoSklUVHlwZSk7CisgICAgRGlyZWN0SklUQ29kZShDb2RlUmVm
LCBDb2RlUHRyIHdpdGhBcml0eUNoZWNrLCBKSVRUeXBlKTsKKyAgICB2aXJ0dWFsIH5EaXJlY3RK
SVRDb2RlKCk7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplQ29kZVJlZihDb2RlUmVmIHJlZiwg
Q29kZVB0ciB3aXRoQXJpdHlDaGVjayk7CisKKyAgICB2aXJ0dWFsIENvZGVQdHIgYWRkcmVzc0Zv
ckNhbGwoVk0mLCBFeGVjdXRhYmxlQmFzZSosIEFyaXR5Q2hlY2tNb2RlLCBSZWdpc3RlclByZXNl
cnZhdGlvbk1vZGUpIE9WRVJSSURFOworCitwcml2YXRlOgorICAgIHN0cnVjdCBSZWdpc3RlclBy
ZXNlcnZhdGlvbldyYXBwZXJzIHsKKyAgICAgICAgQ29kZVJlZiB3aXRob3V0QXJpdHlDaGVjazsK
KyAgICAgICAgQ29kZVJlZiB3aXRoQXJpdHlDaGVjazsKKyAgICB9OworCisgICAgUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25XcmFwcGVycyogZW5zdXJlV3JhcHBlcnMoKTsKKyAgICAKKyAgICBDb2RlUHRy
IG1fd2l0aEFyaXR5Q2hlY2s7CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyUHJl
c2VydmF0aW9uV3JhcHBlcnM+IG1fd3JhcHBlcnM7Cit9OworCitjbGFzcyBOYXRpdmVKSVRDb2Rl
IDogcHVibGljIEpJVENvZGVXaXRoQ29kZVJlZiB7CitwdWJsaWM6CisgICAgTmF0aXZlSklUQ29k
ZShKSVRUeXBlKTsKKyAgICBOYXRpdmVKSVRDb2RlKENvZGVSZWYsIEpJVFR5cGUpOworICAgIHZp
cnR1YWwgfk5hdGl2ZUpJVENvZGUoKTsKKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemVDb2RlUmVm
KENvZGVSZWYgcmVmKTsKKworICAgIHZpcnR1YWwgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbChWTSYs
IEV4ZWN1dGFibGVCYXNlKiwgQXJpdHlDaGVja01vZGUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9k
ZSkgT1ZFUlJJREU7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDE2MDg1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4NCw3ICs2ODQsOCBAQCBzdGF0aWMgdm9pZCogaGFu
ZGxlSG9zdENhbGwoRXhlY1N0YXRlKiBlCiAgICAgcmV0dXJuIHZtLT5nZXRDVElTdHViKHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CiB9CiAKLWlubGluZSBjaGFyKiBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoraW5saW5lIGNoYXIqIGxpbmtGb3IoCisgICAg
RXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0g
ZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKQEAg
LTcwMiw5ICs3MDMsOSBAQCBpbmxpbmUgY2hhciogbGlua0ZvcihFeGVjU3RhdGUqIGV4ZWNDYWxs
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7CiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSAwOwogICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhlYy0+Y29kZUJs
b2NrKCktPmdldENhbGxMaW5rSW5mbyhleGVjQ2FsbGVlLT5yZXR1cm5QQygpKTsKLSAgICBpZiAo
ZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFi
bGUtPmdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKCk7Ci0gICAgZWxz
ZSB7CisgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsKKyAgICAgICAgY29k
ZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3IoKnZtLCBraW5kLCBNdXN0Q2hlY2tBcml0
eSwgcmVnaXN0ZXJzKTsKKyAgICB9IGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpOwogICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUt
PnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKTsK
ICAgICAgICAgaWYgKGVycm9yKSB7CkBAIC03MTIsMjkgKzcxMyw0MyBAQCBpbmxpbmUgY2hhciog
bGlua0ZvcihFeGVjU3RhdGUqIGV4ZWNDYWxsCiAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgICAgIH0KICAg
ICAgICAgY29kZUJsb2NrID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCk7
CisgICAgICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5OwogICAgICAgICBpZiAoZXhlY0NhbGxlZS0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby5jYWxsVHlwZSA9PSBDYWxsTGlu
a0luZm86OkNhbGxWYXJhcmdzKQotICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0
YWJsZS0+Z2VuZXJhdGVkSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQpOworICAgICAgICAg
ICAgYXJpdHkgPSBNdXN0Q2hlY2tBcml0eTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29k
ZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRk
cmVzc0ZvckNhbGwoKTsKKyAgICAgICAgICAgIGFyaXR5ID0gQXJpdHlDaGVja05vdFJlcXVpcmVk
OworICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKCp2
bSwga2luZCwgYXJpdHksIHJlZ2lzdGVycyk7CiAgICAgfQogICAgIGlmICghY2FsbExpbmtJbmZv
LnNlZW5PbmNlKCkpCiAgICAgICAgIGNhbGxMaW5rSW5mby5zZXRTZWVuKCk7CiAgICAgZWxzZQot
ICAgICAgICBsaW5rRm9yKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxs
ZWUsIGNvZGVQdHIsIGtpbmQpOworICAgICAgICBsaW5rRm9yKGV4ZWNDYWxsZWUsIGNhbGxMaW5r
SW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIsIGtpbmQsIHJlZ2lzdGVycyk7CiAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGwoRXhlY1N0YXRl
KiBleGVjQ2FsbGVlKQogewotICAgIHJldHVybiBsaW5rRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JD
YWxsKTsKKyAgICByZXR1cm4gbGlua0ZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTGlua0NvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCiB7Ci0gICAgcmV0dXJu
IGxpbmtGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJuIGxpbmtG
b3IoZXhlY0NhbGxlZSwgQ29kZUZvckNvbnN0cnVjdCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RS
ZXF1aXJlZCk7Cit9CisKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGxUaGF0
UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7CisgICAgcmV0dXJuIGxpbmtG
b3IoZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CiB9CiAK
LWlubGluZSBjaGFyKiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlY0NhbGxl
ZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0aW9u
Q2VsbCkKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdFRoYXRQcmVz
ZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKK3sKKyAgICByZXR1cm4gbGlua0Zvcihl
eGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0LCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOworfQor
CitpbmxpbmUgY2hhciogdmlydHVhbEZvcldpdGhGdW5jdGlvbigKKyAgICBFeGVjU3RhdGUqIGV4
ZWNDYWxsZWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRp
b25Nb2RlIHJlZ2lzdGVycywKKyAgICBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKIHsK
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwogICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwpAQCAtNzU2LDE2ICs3NzEsMjAgQEAgaW5saW5lIGNoYXIqIHZp
cnR1YWxGb3JXaXRoRnVuY3Rpb24oRXhlYwogICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0
aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICB9CiAgICAg
fQotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihleGVjdXRhYmxlLT5nZW5lcmF0
ZWRKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cisg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRG
b3IoCisgICAgICAgICp2bSwga2luZCwgTXVzdENoZWNrQXJpdHksIHJlZ2lzdGVycykuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CiB9CiAKLWlubGluZSBjaGFyKiB2aXJ0dWFsRm9yKEV4ZWNTdGF0ZSog
ZXhlY0NhbGxlZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoraW5saW5lIGNoYXIqIHZp
cnR1YWxGb3IoCisgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgSlND
ZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQ7Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JX
aXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwga2luZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVk
KTsKKyAgICByZXR1cm4gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVlLCBraW5kLCBy
ZWdpc3RlcnMsIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZCk7CiB9CiAKLXN0YXRpYyBib29s
IGF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBKU0Nl
bGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3N0
YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoCisgICAgRXhlY1N0YXRlKiBl
eGVjQ2FsbGVlLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzLCBKU0NlbGwqIGNh
bGxlZUFzRnVuY3Rpb25DZWxsLAorICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQogewog
ICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTc3OSw3ICs3OTgsMTAgQEAgc3RhdGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2Fs
bAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgQVNTRVJUKGNhbGxlZS0+ZXhlY3V0
YWJsZSgpLT5oYXNKSVRDb2RlRm9yQ2FsbCgpKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Y29kZVB0ciA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgp
LT5hZGRyZXNzRm9yQ2FsbCgpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0K
KyAgICAgICAgY2FsbGVlLT5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkt
PmFkZHJlc3NGb3JDYWxsKAorICAgICAgICAgICAgKmV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCkt
PmNvZGVCbG9jaygpLT52bSgpLCBjYWxsZWUtPmV4ZWN1dGFibGUoKSwKKyAgICAgICAgICAgIEFy
aXR5Q2hlY2tOb3RSZXF1aXJlZCwgcmVnaXN0ZXJzKTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jazsKICAgICBpZiAoY2FsbGVlLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkp
CkBAIC03OTIsNyArODE0LDcgQEAgc3RhdGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJl
Q2FsbAogICAgIAogICAgIGxpbmtDbG9zdXJlQ2FsbCgKICAgICAgICAgZXhlY0NhbGxlZSwgY2Fs
bExpbmtJbmZvLCBjb2RlQmxvY2ssCi0gICAgICAgIGNhbGxlZS0+c3RydWN0dXJlKCksIGNhbGxl
ZS0+ZXhlY3V0YWJsZSgpLCBjb2RlUHRyKTsKKyAgICAgICAgY2FsbGVlLT5zdHJ1Y3R1cmUoKSwg
Y2FsbGVlLT5leGVjdXRhYmxlKCksIGNvZGVQdHIsIHJlZ2lzdGVycyk7CiAgICAgCiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC04MDAsMjUgKzgyMiw0NiBAQCBzdGF0aWMgYm9vbCBhdHRlbXB0VG9P
cHRpbWl6ZUNsb3N1cmVDYWxsCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9z
dXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCiB7CiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbDsKLSAgICBjaGFyKiByZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4
ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CisgICAgY2hhciog
cmVzdWx0ID0gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwog
ICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUo
KS0+Y29kZUJsb2NrKCktPmdldENhbGxMaW5rSW5mbyhleGVjQ2FsbGVlLT5yZXR1cm5QQygpKTsK
IAotICAgIGlmICghYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChleGVjQ2FsbGVlLCBjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCwgY2FsbExpbmtJbmZvKSkKLSAgICAgICAgbGlua1Nsb3dGb3IoZXhl
Y0NhbGxlZSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCk7CisgICAgaWYgKCFhdHRlbXB0VG9P
cHRpbWl6ZUNsb3N1cmVDYWxsKGV4ZWNDYWxsZWUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVx
dWlyZWQsIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBjYWxsTGlua0luZm8pKQorICAgICAgICBsaW5r
U2xvd0ZvcihleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsLCBSZWdpc3RlclBy
ZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBj
aGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhlY0Nh
bGxlZSkKIHsgICAgCi0gICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxlZSwgQ29kZUZvckNh
bGwpOworICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBSZWdp
c3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKIH0KIAogY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25WaXJ0dWFsQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSkKIHsKLSAgICBy
ZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICByZXR1
cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0LCBSZWdpc3RlclByZXNl
cnZhdGlvbk5vdFJlcXVpcmVkKTsKIH0KIAorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25M
aW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUpCit7
CisgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbDsKKyAgICBjaGFyKiByZXN1bHQgPSB2
aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBNdXN0UHJlc2Vy
dmVSZWdpc3RlcnMsIGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5nZXRD
YWxsTGlua0luZm8oZXhlY0NhbGxlZS0+cmV0dXJuUEMoKSk7CisKKyAgICBpZiAoIWF0dGVtcHRU
b09wdGltaXplQ2xvc3VyZUNhbGwoZXhlY0NhbGxlZSwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzLCBj
YWxsZWVBc0Z1bmN0aW9uQ2VsbCwgY2FsbExpbmtJbmZvKSkKKyAgICAgICAgbGlua1Nsb3dGb3Io
ZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCwgTXVzdFByZXNlcnZlUmVnaXN0
ZXJzKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblZpcnR1YWxDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2Fs
bGVlKQoreyAgICAKKyAgICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ2Fs
bCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKK30KKworY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25WaXJ0dWFsQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2Fs
bGVlKQoreworICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1
Y3QsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7Cit9CiAKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNvbXBhcmVMZXNzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjE1
LDExICsyMTUsMTcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5Vgog
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJO
QUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUp
IFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2Fs
bEV2YWwoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwotY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSopIFdURl9J
TlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGwoRXhlY1N0
YXRlKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFs
Q29uc3RydWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTGlua0NvbnN0cnVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRl
KikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3Vy
ZUNhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0
YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFs
Q29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3Mo
RXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRp
b25Db21wYXJlTGVzcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUp
IFdURl9JTlRFUk5BTDsKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVMZXNz
RXEoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJO
QUw7CiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlR3JlYXRlcihFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKQEAgLTI4
MSw2ICsyODcsNjggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dFRvU2NvcGUoRQog
CiB9IC8vIGV4dGVybiAiQyIKIAoraW5saW5lIFBfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uTGlu
a0ZvcigKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTW9kZSByZWdpc3RlcnMpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBDb2Rl
Rm9yQ2FsbDoKKyAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdp
c3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
bkxpbmtDYWxsOworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25MaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgc3dp
dGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJl
cXVpcmVkOgorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3Q7CisgICAg
ICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvbkxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnczsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gMDsKK30KKworaW5saW5lIFBfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uVmlydHVhbEZvcigK
KyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9k
ZSByZWdpc3RlcnMpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBDb2RlRm9yQ2Fs
bDoKKyAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdpc3RlclBy
ZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblZpcnR1
YWxDYWxsOworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25WaXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgc3dp
dGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJl
cXVpcmVkOgorICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3Q7Cisg
ICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnczsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKworaW5saW5lIFBfSklUT3BlcmF0aW9uX0Ugb3BlcmF0aW9uTGlua0Ns
b3N1cmVDYWxsRm9yKFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCit7CisgICAg
c3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVx
dWlyZWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGw7CisgICAgY2Fz
ZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5rQ2xv
c3VyZUNhbGxUaGF0UHJlc2VydmVzUmVnczsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVy
R2VuZXJhdG9yLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQXNzZW1ibHlIZWxw
ZXJzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitSZWdpc3RlclNldCByZWdpc3RlcnNUb1ByZXNlcnZl
KCkKK3sKKyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CisgICAgCisgICAgLy8gTm8gbmVlZCB0byBwcmVzZXJ2ZSBGUCBzaW5j
ZSB0aGF0IGFsd2F5cyBnZXRzIHByZXNlcnZlZCBhbnl3YXkuCisgICAgY2FsbGVlU2F2ZXMuY2xl
YXIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIAorICAgIHJldHVybiBjYWxsZWVT
YXZlczsKK30KKworcHRyZGlmZl90IHJlZ2lzdGVyUHJlc2VydmF0aW9uT2Zmc2V0KCkKK3sKKyAg
ICB1bnNpZ25lZCBudW1iZXJPZkNhbGxlZVNhdmVzID0gcmVnaXN0ZXJzVG9QcmVzZXJ2ZSgpLm51
bWJlck9mU2V0UmVnaXN0ZXJzKCk7CisgICAgCisgICAgLy8gTmVlZCB0byBwcmVzZXJ2ZSB0aGUg
b2xkIHJldHVybiBQQy4KKyAgICB1bnNpZ25lZCBudW1iZXJPZlZhbHVlc1RvU2F2ZSA9IG51bWJl
ck9mQ2FsbGVlU2F2ZXMgKyAxOworICAgIAorICAgIC8vIEFsaWdubWVudC4gUHJlc2VydmUgdGhl
IHNhbWUgYWxpZ25tZW50IGludmFyaWFudHMgdGhhdCB0aGUgY2FsbGVyIGltcG9zZWQuCisgICAg
dW5zaWduZWQgbnVtYmVyT2ZOZXdTdGFja1Nsb3RzID0KKyAgICAgICAgV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIG51bWJlck9mVmFsdWVzVG9TYXZl
KTsKKyAgICAKKyAgICByZXR1cm4gc2l6ZW9mKFJlZ2lzdGVyKSAqIG51bWJlck9mTmV3U3RhY2tT
bG90czsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyYXRlUmVnaXN0ZXJQcmVzZXJ2
YXRpb25XcmFwcGVyKFZNJiB2bSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciB0YXJnZXQpCit7CisjaWYgRU5BQkxFKEZUTF9KSVQpCisgICAgLy8gV2Ug
c2hvdWxkbid0IGV2ZXIgYmUgZ2VuZXJhdGluZyB3cmFwcGVycyBmb3IgbmF0aXZlIGZ1bmN0aW9u
cy4KKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBzY3JpcHRFeGVjdXRhYmxlID0ganNDYXN0PFNjcmlw
dEV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKyAgICAKKyAgICBSZWdpc3RlclNldCB0b1NhdmUg
PSByZWdpc3RlcnNUb1ByZXNlcnZlKCk7CisgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ2lzdGVy
UHJlc2VydmF0aW9uT2Zmc2V0KCk7CisgICAgCisgICAgQXNzZW1ibHlIZWxwZXJzIGppdCgmdm0s
IDApOworICAgIAorICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5m
bzo6cmVnVDEpOworICAgIGppdC5sb2FkMzIoCisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6QWRk
cmVzcygKKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIs
CisgICAgICAgICAgICAoSlNTdGFjazo6QXJndW1lbnRDb3VudCAtIEpTU3RhY2s6OkNhbGxlckZy
YW1lQW5kUENTaXplKSAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSwKKyAgICAg
ICAgR1BSSW5mbzo6cmVnVDIpOworICAgIAorICAgIC8vIFBsYWNlIHRoZSBzdGFjayBwb2ludGVy
IHdoZXJlIHdlIHdhbnQgaXQgdG8gYmUuCisgICAgaml0LnN1YlB0cihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihvZmZzZXQpLCBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICAKKyAgICAvLyBDb21wdXRlIHRoZSBudW1iZXIgb2YgdGhpbmdzIHdlIHdpbGwg
YmUgY29weWluZy4KKyAgICBqaXQuYWRkMzIoCisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTMyKAorICAgICAgICAgICAgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIEpT
U3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDIpOwor
CisgICAgQVNTRVJUKCF0b1NhdmUuZ2V0KEdQUkluZm86OnJlZ1Q0KSk7CisgICAgaml0Lm1vdmUo
QXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDQpOwor
ICAgIAorICAgIEFzc2VtYmx5SGVscGVyczo6TGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAg
IGppdC5zdWIzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmVn
VDIpOworICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJl
Z1Q0LCBvZmZzZXQpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6
cmVnVDAsIEdQUkluZm86OnJlZ1Q0KTsKKyAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTMyKHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpyZWdUNCk7CisgICAgaml0
LmJyYW5jaFRlc3QzMihBc3NlbWJseUhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJlZ1QyKS5s
aW5rVG8obG9vcCwgJmppdCk7CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IHJlZ1Q0ICsgb2Zmc2V0
IHBvaW50cyB0byB3aGVyZSB3ZSBzYXZlIHRoaW5ncy4KKyAgICBwdHJkaWZmX3QgY3VycmVudE9m
ZnNldCA9IDA7CisgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QxLCBBc3NlbWJseUhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDQsIGN1cnJlbnRPZmZzZXQpKTsKKyAgICAKKyAgICBm
b3IgKEdQUlJlZyBncHIgPSBBc3NlbWJseUhlbHBlcnM6OmZpcnN0UmVnaXN0ZXIoKTsgZ3ByIDw9
IEFzc2VtYmx5SGVscGVyczo6bGFzdFJlZ2lzdGVyKCk7IGdwciA9IHN0YXRpY19jYXN0PEdQUlJl
Zz4oZ3ByICsgMSkpIHsKKyAgICAgICAgaWYgKCF0b1NhdmUuZ2V0KGdwcikpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgY3VycmVudE9mZnNldCArPSBzaXplb2YoUmVnaXN0ZXIpOwor
ICAgICAgICBqaXQuc3RvcmU2NChncHIsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpyZWdUNCwgY3VycmVudE9mZnNldCkpOworICAgIH0KKyAgICAKKyAgICAvLyBBc3N1bWUgdGhh
dCB0aGVyZSBhcmVuJ3QgYW55IHNhdmVkIEZQIHJlZ2lzdGVycy4KKyAgICAKKyAgICAvLyBSZXN0
b3JlIHRoZSB0YWcgcmVnaXN0ZXJzLgorICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
OworICAgIGppdC5hZGQ2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihUYWdNYXNrIC0g
VGFnVHlwZU51bWJlciksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6
dGFnTWFza1JlZ2lzdGVyKTsKKworICAgIEFzc2VtYmx5SGVscGVyczo6Q2FsbCBjYWxsID0gaml0
Lm5lYXJDYWxsKCk7CisgICAgCisgICAgZ2VuZXJhdGVSZWdpc3RlclJlc3RvcmF0aW9uKGppdCk7
CisgICAgCisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCAmaml0LCBHTE9CQUxfVEhVTktf
SUQpOworICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCh0YXJnZXQp
KTsKKyAgICAKKyAgICByZXR1cm4gRklOQUxJWkVfREZHX0NPREUobGlua0J1ZmZlciwgKCJSZWdp
c3RlciBwcmVzZXJ2YXRpb24gd3JhcHBlciBmb3IgJXMvJXMsICVwIiwgdG9DU3RyaW5nKHNjcmlw
dEV4ZWN1dGFibGUtPmhhc2hGb3IoQ29kZUZvckNhbGwpKS5kYXRhKCksIHRvQ1N0cmluZyhzY3Jp
cHRFeGVjdXRhYmxlLT5oYXNoRm9yKENvZGVGb3JDb25zdHJ1Y3QpKS5kYXRhKCksIHRhcmdldC5l
eGVjdXRhYmxlQWRkcmVzcygpKSk7CisjZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICAvLyBX
ZSBkb24ndCBzdXBwb3J0IG5vbi1GVEwgYnVpbGRzIGZvciB0d28gcmVhc29uczoKKyAgICAvLyAt
IEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IGN1cnJlbnRseSBvbmx5IHRoZSBGVEwgYm90dG9tcyBv
dXQgaW4gdGhpcyBjb2RlLgorICAgIC8vIC0gVGhlIGNvZGUgYWJvdmUgdXNlcyA2NC1iaXQgaW5z
dHJ1Y3Rpb25zLiBJdCBkb2Vzbid0IG5lY2Vzc2FyaWx5IGhhdmUgdG87IGl0IHdvdWxkIGJlCisg
ICAgLy8gICBlYXN5IHRvIGNoYW5nZSBpdCBzbyB0aGF0IGl0IGRvZXNuJ3QuIEJ1dCBvYnZpb3Vz
bHkgbWFraW5nIHRoYXQgY2hhbmdlIHdvdWxkIGJlIGEKKyAgICAvLyAgIHByZXJlcXVpc2l0ZSB0
byByZW1vdmluZyB0aGlzICNpZi4KKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKK30KKwordm9pZCBnZW5lcmF0ZVJlZ2lzdGVyUmVzdG9y
YXRpb24oQXNzZW1ibHlIZWxwZXJzJiBqaXQpCit7CisgICAgUmVnaXN0ZXJTZXQgdG9TYXZlID0g
cmVnaXN0ZXJzVG9QcmVzZXJ2ZSgpOworICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWdpc3RlclBy
ZXNlcnZhdGlvbk9mZnNldCgpOworICAgIAorICAgIC8vIFdlIG5lZWQgdG8gcGxhY2UgdGhlIHN0
YWNrIHBvaW50ZXIgYmFjayB0byB3aGVyZSB0aGUgY2FsbGVyIHRob3VnaHQgdGhleSBsZWZ0IGl0
LgorICAgIC8vIEJ1dCBhbHNvLCBpbiBvcmRlciB0byByZWNvdmVyIHRoZSByZWdpc3RlcnMsIHdl
IG5lZWQgdG8gZmlndXJlIG91dCBob3cgYmlnIHRoZQorICAgIC8vIGFyZ3VtZW50cyBhcmVhIGlz
LgorICAgIAorICAgIGppdC5sb2FkMzIoCisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6QWRkcmVz
cygKKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsCisg
ICAgICAgICAgICAoSlNTdGFjazo6QXJndW1lbnRDb3VudCAtIEpTU3RhY2s6OkNhbGxlckZyYW1l
QW5kUENTaXplKSAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSwKKyAgICAgICAg
R1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5sc2hpZnQzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW0zMigzKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIAorICAgIGppdC5hZGRQdHIoQXNzZW1i
bHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIob2Zmc2V0KSwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMik7CisgICAgCisgICAgLy8gV2Ugc2F2ZWQgdGhp
bmdzIGF0OgorICAgIC8vCisgICAgLy8gICAgIGFkalNQICsgKEpTU3RhY2s6OkNhbGxGcmFtZUhl
YWRlclNpemUgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSArIE51bUFyZ3MpICogOAor
ICAgIC8vCisgICAgLy8gV2hlcmU6CisgICAgLy8KKyAgICAvLyAgICAgYWRqU1AgPSBvcmlnU1Ag
LSBvZmZzZXQKKyAgICAvLworICAgIC8vIHJlZ1QyIG5vdyBwb2ludHMgYXQ6CisgICAgLy8KKyAg
ICAvLyAgICAgb3JpZ1NQICsgTnVtQXJncyAqIDgKKyAgICAvLyAgID0gYWRqU1AgKyBvZmZzZXQg
KyBOdW1BcmdzICogOAorICAgIC8vIAorICAgIC8vIFNvIGlmIHdlIHN1YnRyYWN0IG9mZnNldCBh
bmQgdGhlbiBhZGQgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSBhbmQgc3VidHJhY3QKKyAg
ICAvLyBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgd2UnbGwgZ2V0IHRoZSB0aGluZyB3
ZSB3YW50LgorICAgIHB0cmRpZmZfdCBjdXJyZW50T2Zmc2V0ID0gLW9mZnNldCArIHNpemVvZihS
ZWdpc3RlcikgKiAoCisgICAgICAgIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBKU1N0
YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSk7CisgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBjdXJyZW50T2Zmc2V0KSwgR1BSSW5mbzo6cmVn
VDEpOworICAgIAorICAgIGZvciAoR1BSUmVnIGdwciA9IEFzc2VtYmx5SGVscGVyczo6Zmlyc3RS
ZWdpc3RlcigpOyBncHIgPD0gQXNzZW1ibHlIZWxwZXJzOjpsYXN0UmVnaXN0ZXIoKTsgZ3ByID0g
c3RhdGljX2Nhc3Q8R1BSUmVnPihncHIgKyAxKSkgeworICAgICAgICBpZiAoIXRvU2F2ZS5nZXQo
Z3ByKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IHNp
emVvZihSZWdpc3Rlcik7CisgICAgICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QyLCBjdXJyZW50T2Zmc2V0KSwgZ3ByKTsKKyAgICB9CisgICAgCisg
ICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDEpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
cmVnaXN0ZXJSZXN0b3JhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAgICBBc3NlbWJs
eUhlbHBlcnMgaml0KHZtLCAwKTsKKyAgICBnZW5lcmF0ZVJlZ2lzdGVyUmVzdG9yYXRpb24oaml0
KTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQp
OworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiUmVnaXN0ZXIgcmVzdG9y
YXRpb24gdGh1bmsiKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclByZXNl
cnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclByZXNlcnZhdGlvbldy
YXBwZXJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yX2gKKyNkZWZpbmUgUmVnaXN0ZXJQcmVzZXJ2YXRp
b25XcmFwcGVyR2VuZXJhdG9yX2gKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJBc3Nl
bWJseUhlbHBlcnMuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNs
dWRlICJWTS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworUmVnaXN0ZXJTZXQgcmVnaXN0ZXJzVG9Q
cmVzZXJ2ZSgpOworCitwdHJkaWZmX3QgcmVnaXN0ZXJQcmVzZXJ2YXRpb25PZmZzZXQoKTsKKwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyYXRlUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVy
KFZNJiwgRXhlY3V0YWJsZUJhc2UqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFyZ2V0KTsKKwor
dm9pZCBnZW5lcmF0ZVJlZ2lzdGVyUmVzdG9yYXRpb24oQXNzZW1ibHlIZWxwZXJzJik7CisKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiByZWdpc3RlclJlc3RvcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0q
KTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5k
aWYgLy8gUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcw
LDE3ICsxMjcwLDE5IEBAIHZvaWQgcmVwYXRjaEluKAogICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNv
ZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkluKTsKIH0K
IAotc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwg
Vk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQotewotICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRD
VElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdl
dENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOworc3RhdGlj
IHZvaWQgbGlua1Nsb3dGb3IoCisgICAgUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgVk0q
IHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCit7CisgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoCisgICAgICAgIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sCisgICAgICAgIHZtLT5nZXRDVElTdHViKHZpcnR1YWxUaHVua0dlbmVyYXRvckZvcihraW5k
LCByZWdpc3RlcnMpKS5jb2RlKCkpOwogfQogCi12b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVj
LCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ss
IEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKK3ZvaWQgbGlua0ZvcigKKyAgICBFeGVjU3RhdGUqIGV4
ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9j
aywKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRy
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsCisgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25N
b2RlIHJlZ2lzdGVycykKIHsKICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKTsKICAgICAK
QEAgLTEyOTYsMzEgKzEyOTgsMzggQEAgdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ2Fs
bExpbmtJbgogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOwogICAgIGNhbGxM
aW5rSW5mby5jYWxsZWUuc2V0KGV4ZWMtPmNhbGxlckZyYW1lKCktPnZtKCksIGNhbGxMaW5rSW5m
by5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxl
ZSk7CiAgICAgY2FsbExpbmtJbmZvLmxhc3RTZWVuQ2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFt
ZSgpLT52bSgpLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwor
ICAgIGlmIChPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKSkKKyAgICAgICAgZGF0YUxvZygiTGlu
a2luZyBjYWxsIGluICIsICpjYWxsZXJDb2RlQmxvY2ssICIgYXQgIiwgY2FsbExpbmtJbmZvLmNv
ZGVPcmlnaW4sICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwgZW50cnlw
b2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxs
TGlua0luZm8uaG90UGF0aE90aGVyLCBjb2RlUHRyKTsKICAgICAKICAgICBpZiAoY2FsbGVlQ29k
ZUJsb2NrKQogICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoZXhlYy0+
Y2FsbGVyRnJhbWUoKSwgJmNhbGxMaW5rSW5mbyk7CiAgICAgCiAgICAgaWYgKGtpbmQgPT0gQ29k
ZUZvckNhbGwpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5l
cmF0b3IpLmNvZGUoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbFRodW5r
R2VuZXJhdG9yRm9yKHJlZ2lzdGVycykpLmNvZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCiAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgbGlua1Ns
b3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNvbnN0cnVjdCk7
CisgICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZv
ckNvbnN0cnVjdCwgcmVnaXN0ZXJzKTsKIH0KIAotdm9pZCBsaW5rU2xvd0ZvcihFeGVjU3RhdGUq
IGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpCit2b2lkIGxpbmtTbG93Rm9yKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJ
bmZvJiBjYWxsTGlua0luZm8sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwKKyAgICBSZWdp
c3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewogICAgIENvZGVCbG9jayogY2FsbGVy
Q29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7CiAgICAgVk0qIHZt
ID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwogICAgIAotICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hC
dWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIGtpbmQpOworICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hC
dWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIGtpbmQsIHJlZ2lzdGVycyk7CiB9CiAKLXZvaWQgbGlu
a0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8s
IENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXhlY3V0
YWJsZUJhc2UqIGV4ZWN1dGFibGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQordm9p
ZCBsaW5rQ2xvc3VyZUNhbGwoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssCisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlLCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY29kZVB0ciwKKyAgICBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewog
ICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIpOwogICAgIApAQCAtMTM4MCwxOCArMTM4OSwx
OCBAQCB2b2lkIGxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhCiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKICNlbmRpZgotICAgIHN0dWJKaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAg
c3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUMik7CiAg
ICAgCiAgICAgLy8gRklYTUU6IENTdGFjayAtIFRoaW5rIHRoZSByZXN0b3JlUmV0dXJuQWRkcmVz
c0JlZm9yZVJldHVybigpIGluc3RydWN0aW9uIHNob3VsZCBiZSBhIHBva2UKICAgICBzdHViSml0
LmJyZWFrcG9pbnQoKTsKLSAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0
dXJuKEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJl
c3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDIpOwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVt
cCBzbG93ID0gc3R1YkppdC5qdW1wKCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdm0sICZzdHViSml0LCBjYWxsZXJDb2RlQmxvY2spOwogICAgIAogICAgIHBhdGNoQnVmZmVy
LmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAg
ICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0
aW9uTGFiZWwodm0tPmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcikuY29kZSgp
KSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+Z2V0
Q1RJU3R1Yih2aXJ0dWFsVGh1bmtHZW5lcmF0b3JGb3IoQ29kZUZvckNhbGwsIHJlZ2lzdGVycykp
LmNvZGUoKSkpOwogICAgIAogICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHVi
Um91dGluZSA9IGFkb3B0UmVmKG5ldyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAogICAgICAgICBG
SU5BTElaRV9ERkdfQ09ERSgKQEAgLTE0MDYsNyArMTQxNSw3IEBAIHZvaWQgbGlua0Nsb3N1cmVD
YWxsKEV4ZWNTdGF0ZSogZXhlYywgQ2EKICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVt
cCgKICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVn
aXN0ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbiksCiAgICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgbGlua1Nsb3dGb3IocmVwYXRj
aEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwpOworICAgIGxpbmtTbG93Rm9y
KHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsLCByZWdpc3RlcnMp
OwogICAgIAogICAgIGNhbGxMaW5rSW5mby5zdHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHJldmlzaW9uIDE2MDg1
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw5ICs0MSw5IEBAIHZvaWQgYnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZWNTdGF0ZSos
IEoKIHZvaWQgcmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2lu
ZCk7CiB2b2lkIGJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0
S2luZCk7CiB2b2lkIHJlcGF0Y2hJbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBjb25zdCBJZGVudGlm
aWVyJiwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1Yklu
Zm8mKTsKLXZvaWQgbGlua0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sq
LCBKU0Z1bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCk7Ci12b2lkIGxpbmtTbG93Rm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwotdm9pZCBsaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRl
KiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlKiwgRXhlY3V0YWJsZUJhc2Uq
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIpOwordm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxM
aW5rSW5mbyYsIENvZGVCbG9jayosIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUp
Owordm9pZCBsaW5rU2xvd0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpOwordm9pZCBsaW5rQ2xvc3Vy
ZUNhbGwoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlKiwg
RXhlY3V0YWJsZUJhc2UqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIsIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTW9kZSk7CiB2b2lkIHJlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1
YkluZm8mKTsKIHZvaWQgcmVzZXRQdXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwogdm9pZCByZXNldEluKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cAkocmV2aXNpb24gMTYwODUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyB2b2lk
IHNsb3dQYXRoRm9yKAogfQogCiBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtGb3JU
aHVua0dlbmVyYXRvcigKLSAgICBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
KyAgICBWTSogdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsKICAgICAvLyBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgb24g
dGhlIHN0YWNrIG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhlbmNlCiAgICAgLy8g
c2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGwgZnJhbWUgd2hpbGUgd2UgbWFrZSBh
IEMrKyBmdW5jdGlvbiBjYWxsCkBAIC0xMDksMzggKzEwOSw1OSBAQCBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGxpbmtGb3JUaHVuCiAgICAgCiAgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7
CiAgICAgCi0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwga2luZCA9PSBDb2RlRm9yQ2FsbCA/IG9w
ZXJhdGlvbkxpbmtDYWxsIDogb3BlcmF0aW9uTGlua0NvbnN0cnVjdCk7CisgICAgc2xvd1BhdGhG
b3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0ZvcihraW5kLCByZWdpc3RlcnMpKTsKICAgICAKICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERSgKICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgi
TGluayAlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxsID8gImNhbGwiIDog
ImNvbnN0cnVjdCIpKTsKKyAgICAgICAgKCJMaW5rICVzJXMgc2xvdyBwYXRoIHRodW5rIiwga2lu
ZCA9PSBDb2RlRm9yQ2FsbCA/ICJjYWxsIiA6ICJjb25zdHJ1Y3QiLCByZWdpc3RlcnMgPT0gTXVz
dFByZXNlcnZlUmVnaXN0ZXJzID8gIiB0aGF0IHByZXNlcnZlcyByZWdpc3RlcnMiIDogIiIpKTsK
IH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZt
KQogewotICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsKTsK
KyAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ2FsbCwgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBs
aW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBsaW5rRm9y
VGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QpOworICAgIHJldHVybiBsaW5rRm9y
VGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QsIFJlZ2lzdGVyUHJlc2VydmF0aW9u
Tm90UmVxdWlyZWQpOwogfQogCi0vLyBGb3IgY2xvc3VyZSBvcHRpbWl6YXRpb25zLCB3ZSBvbmx5
IGluY2x1ZGUgY2FsbHMsIHNpbmNlIGlmIHlvdSdyZSB1c2luZyBjbG9zdXJlcyBmb3IKLS8vIG9i
amVjdCBjb25zdHJ1Y3Rpb24gdGhlbiB5b3UncmUgZ29pbmcgdG8gbG9zZSBiaWcgdGltZSBhbnl3
YXkuCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3Io
Vk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGhhdFByZXNlcnZlc1JlZ3NU
aHVua0dlbmVyYXRvcihWTSogdm0pCit7CisgICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRv
cih2bSwgQ29kZUZvckNhbGwsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7Cit9CisKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRv
cihWTSogdm0pCit7CisgICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZv
ckNvbnN0cnVjdCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKK30KKworc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxGb3JUaHVua0dlbmVyYXRvcigKKyAgICBWTSog
dm0sIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgQ0NhbGxIZWxw
ZXJzIGppdCh2bSk7CiAgICAgCi0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlu
a0Nsb3N1cmVDYWxsKTsKKyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2xv
c3VyZUNhbGxGb3IocmVnaXN0ZXJzKSk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
cGF0Y2hCdWZmZXIsICgiTGluayBjbG9zdXJlIGNhbGwgc2xvdyBwYXRoIHRodW5rIikpOworICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxpbmsgY2xvc3VyZSBjYWxsICVz
IHNsb3cgcGF0aCB0aHVuayIsIHJlZ2lzdGVycyA9PSBNdXN0UHJlc2VydmVSZWdpc3RlcnMgPyAi
IHRoYXQgcHJlc2VydmVzIHJlZ2lzdGVycyIgOiAiIikpOworfQorCisvLyBGb3IgY2xvc3VyZSBv
cHRpbWl6YXRpb25zLCB3ZSBvbmx5IGluY2x1ZGUgY2FsbHMsIHNpbmNlIGlmIHlvdSdyZSB1c2lu
ZyBjbG9zdXJlcyBmb3IKKy8vIG9iamVjdCBjb25zdHJ1Y3Rpb24gdGhlbiB5b3UncmUgZ29pbmcg
dG8gbG9zZSBiaWcgdGltZSBhbnl3YXkuCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1
cmVDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIHJldHVybiBsaW5rQ2xvc3VyZUNh
bGxGb3JUaHVua0dlbmVyYXRvcih2bSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7
Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVz
UmVnc1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAgICByZXR1cm4gbGlua0Nsb3N1cmVDYWxs
Rm9yVGh1bmtHZW5lcmF0b3Iodm0sIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CiB9CiAKIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKAotICAgIFZN
KiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgIFZNKiB2bSwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQog
ewogICAgIC8vIFRoZSBjYWxsZWUgaXMgaW4gcmVnVDAgKGZvciBKU1ZBTFVFMzJfNjQsIHRoZSB0
YWcgaXMgaW4gcmVnVDEpLgogICAgIC8vIFRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUgc3Rh
Y2ssIG9yIGluIHRoZSBsaW5rIHJlZ2lzdGVyLiBXZSB3aWxsIGhlbmNlCkBAIC0xNTUsMzMgKzE3
NiwzNCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUCiAgICAgLy8g
dGhlIERGRyBrbm93cyB0aGF0IHRoZSB2YWx1ZSBpcyBkZWZpbml0ZWx5IGEgY2VsbCwgb3IgZGVm
aW5pdGVseSBhIGZ1bmN0aW9uLgogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoVGFnTWFzayksIEdQUkluZm86OnJlZ1QyKTsK
KyAgICAKICAgICBzbG93Q2FzZS5hcHBlbmQoCiAgICAgICAgIGppdC5icmFuY2hUZXN0NjQoCi0g
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm9uWmVybywg
R1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QyKSk7CiAjZWxzZQogICAgIHNsb3dDYXNlLmFw
cGVuZCgKICAgICAgICAgaml0LmJyYW5jaDMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpO
b3RFcXVhbCwgR1BSSW5mbzo6cmVnVDEsCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwogI2VuZGlmCi0gICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgR1BS
SW5mbzo6cmVnVDIpOwogICAgIHNsb3dDYXNlLmFwcGVuZCgKICAgICAgICAgaml0LmJyYW5jaFB0
cigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMiwgU3RydWN0dXJlOjpjbGFzc0lu
Zm9PZmZzZXQoKSksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
cmVnVDIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAogICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTRnVuY3Rpb246OmluZm8oKSkpKTsKICAgICAKICAgICAv
LyBOb3cgd2Uga25vdyB3ZSBoYXZlIGEgSlNGdW5jdGlvbi4KICAgICAKICAgICBqaXQubG9hZFB0
cigKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksCi0gICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjIp
OwotICAgIHNsb3dDYXNlLmFwcGVuZCgKLSAgICAgICAgaml0LmJyYW5jaDMyKAotICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpMZXNzVGhhbiwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcygKLSAgICAgICAgICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIyLCBFeGVjdXRhYmxlQmFz
ZTo6b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzRm9yKGtpbmQpKSwKLSAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIEdQUkluZm86OnJlZ1QyKTsKKyAgICBq
aXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAg
R1BSSW5mbzo6cmVnVDIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlD
aGVja0ZvcihraW5kLCByZWdpc3RlcnMpKSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDIpOworICAg
IHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQ
UkluZm86OnJlZ1QyKSk7CiAgICAgCiAgICAgLy8gTm93IHdlIGtub3cgdGhhdCB3ZSBoYXZlIGEg
Q29kZUJsb2NrLCBhbmQgd2UncmUgY29tbWl0dGVkIHRvIG1ha2luZyBhIGZhc3QKICAgICAvLyBj
YWxsLgpAQCAtMTk3LDM0ICsyMTksNDAgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2
aXJ0dWFsRm9yVAogICAgICAgICBKU1N0YWNrOjpTY29wZUNoYWluKTsKICNlbmRpZgogICAgIAot
ICAgIGppdC5sb2FkUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
bm9uQXJnR1BSMiwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNr
Rm9yKGtpbmQpKSwKLSAgICAgICAgR1BSSW5mbzo6cmVnVDApOwotICAgIAogICAgIC8vIE1ha2Ug
YSB0YWlsIGNhbGwuIFRoaXMgd2lsbCByZXR1cm4gYmFjayB0byBKSVQgY29kZS4KLSAgICBlbWl0
UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgaml0Lmp1bXAoR1BS
SW5mbzo6cmVnVDApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJl
Z1QyKTsKKyAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMik7CiAKICAgICBzbG93Q2FzZS5saW5r
KCZqaXQpOwogICAgIAogICAgIC8vIEhlcmUgd2UgZG9uJ3Qga25vdyBhbnl0aGluZywgc28gcmV2
ZXJ0IHRvIHRoZSBmdWxsIHNsb3cgcGF0aC4KICAgICAKLSAgICBzbG93UGF0aEZvcihqaXQsIHZt
LCBraW5kID09IENvZGVGb3JDYWxsID8gb3BlcmF0aW9uVmlydHVhbENhbGwgOiBvcGVyYXRpb25W
aXJ0dWFsQ29uc3RydWN0KTsKKyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25WaXJ0
dWFsRm9yKGtpbmQsIHJlZ2lzdGVycykpOwogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KAogICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJWaXJ0dWFsICVzIHNsb3cgcGF0aCB0
aHVuayIsIGtpbmQgPT0gQ29kZUZvckNhbGwgPyAiY2FsbCIgOiAiY29uc3RydWN0IikpOworICAg
ICAgICAoIlZpcnR1YWwgJXMlcyBzbG93IHBhdGggdGh1bmsiLCBraW5kID09IENvZGVGb3JDYWxs
ID8gImNhbGwiIDogImNvbnN0cnVjdCIsIHJlZ2lzdGVycyA9PSBNdXN0UHJlc2VydmVSZWdpc3Rl
cnMgPyAiIHRoYXQgcHJlc2VydmVzIHJlZ2lzdGVycyIgOiAiIikpOwogfQogCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgdmlydHVhbENhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0
dXJuIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNhbGwpOworICAgIHJldHVy
biB2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNl
cnZhdGlvbk5vdFJlcXVpcmVkKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxD
b25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JU
aHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJuIHZpcnR1YWxG
b3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCwgUmVnaXN0ZXJQcmVzZXJ2YXRp
b25Ob3RSZXF1aXJlZCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbFRo
YXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIHJldHVybiB2aXJ0
dWFsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDYWxsLCBNdXN0UHJlc2VydmVSZWdpc3Rl
cnMpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVjdFRoYXRQcmVz
ZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIHJldHVybiB2aXJ0dWFsRm9y
VGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVy
cyk7CiB9CiAKIGVudW0gVGh1bmtFbnRyeVR5cGUgeyBFbnRlclZpYUNhbGwsIEVudGVyVmlhSnVt
cCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5o
CShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVmIFRodW5r
R2VuZXJhdG9yc19oCiAjZGVmaW5lIFRodW5rR2VuZXJhdG9yc19oCiAKKyNpbmNsdWRlICJDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2Rl
LmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3IuaCIKIAogI2lmIEVOQUJMRShKSVQpCkBAIC0z
NSwxMSArMzcsNzggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbQog
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSopOwogTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcihWTSopOworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRv
cihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVz
UmVnc1RodW5rR2VuZXJhdG9yKFZNKik7CisKK2lubGluZSBUaHVua0dlbmVyYXRvciBsaW5rVGh1
bmtHZW5lcmF0b3JGb3IoCisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBSZWdpc3Rl
clByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAg
IGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CisgICAgICAg
IGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgIHJldHVy
biBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yOworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lz
dGVyczoKKyAgICAgICAgICAgIHJldHVybiBsaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtH
ZW5lcmF0b3I7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2RlRm9yQ29u
c3RydWN0OgorICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAgICBjYXNlIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICByZXR1cm4gbGlua0NvbnN0
cnVjdFRodW5rR2VuZXJhdG9yOworICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoK
KyAgICAgICAgICAgIHJldHVybiBsaW5rQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dl
bmVyYXRvcjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KIAogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihW
TSopOworCitpbmxpbmUgVGh1bmtHZW5lcmF0b3IgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0
b3JGb3IoUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sKKyAgICBzd2l0Y2gg
KHJlZ2lzdGVycykgeworICAgIGNhc2UgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoK
KyAgICAgICAgcmV0dXJuIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yOworICAgIGNhc2Ug
TXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICByZXR1cm4gbGlua0Nsb3N1cmVDYWxsVGhh
dFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2
aXJ0dWFsQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB2aXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dl
bmVyYXRvcihWTSopOworCitpbmxpbmUgVGh1bmtHZW5lcmF0b3IgdmlydHVhbFRodW5rR2VuZXJh
dG9yRm9yKAorICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIENv
ZGVGb3JDYWxsOgorICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAgICBjYXNlIFJl
Z2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6CisgICAgICAgICAgICByZXR1cm4gdmlydHVh
bENhbGxUaHVua0dlbmVyYXRvcjsKKyAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6
CisgICAgICAgICAgICByZXR1cm4gdmlydHVhbENhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2Vu
ZXJhdG9yOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29kZUZvckNvbnN0
cnVjdDoKKyAgICAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKKyAgICAgICAgY2FzZSBSZWdpc3Rl
clByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxDb25z
dHJ1Y3RUaHVua0dlbmVyYXRvcjsKKyAgICAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6
CisgICAgICAgICAgICByZXR1cm4gdmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzVGh1
bmtHZW5lcmF0b3I7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CiAKIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKFZNKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcAkocmV2aXNpb24gMTYwODUxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDE0ICs0NywxMiBAQCBzdGF0aWMgdm9pZCBzZXRGdW5jdGlvbkVudHJ5
cG9pbnQoVk0mIHZtCiAgICAgaWYgKHZtLmNhblVzZUpJVCgpKSB7CiAgICAgICAgIGlmIChraW5k
ID09IENvZGVGb3JDYWxsKSB7CiAgICAgICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0g
ICAgICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1Yihm
dW5jdGlvbkZvckNhbGxFbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJU
aHVuaykpLAotICAgICAgICAgICAgICAgIHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsQXJp
dHlDaGVja1RodW5rR2VuZXJhdG9yKS5jb2RlKCkpOworICAgICAgICAgICAgICAgIGFkb3B0UmVm
KG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsRW50cnlUaHVu
a0dlbmVyYXRvciksIHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5r
R2VuZXJhdG9yKS5jb2RlKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNv
bnN0cnVjdCk7CiAgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgICAgIGFk
b3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1
Y3RFbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAotICAg
ICAgICAgICAgdm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVu
a0dlbmVyYXRvcikuY29kZSgpKTsKKyAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRD
b2RlKHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9y
KSwgdm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVy
YXRvcikuY29kZSgpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkBAIC02MiwxNCArNjAsMTIgQEAgc3Rh
dGljIHZvaWQgc2V0RnVuY3Rpb25FbnRyeXBvaW50KFZNJiB2bQogICAgIFVOVVNFRF9QQVJBTSh2
bSk7CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKICAgICAgICAgY29kZUJsb2NrLT5z
ZXRKSVRDb2RlKAotICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9B
c3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVuY3Rpb25fZm9yX2Nh
bGxfcHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSksCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9mdW5jdGlvbl9m
b3JfY2FsbF9hcml0eV9jaGVjaykpOworICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJ
VENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVu
Y3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxM
SW50Q29kZVB0cihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjayksIEpJVENvZGU6
OkludGVycHJldGVyVGh1bmspKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJU
KGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CiAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAot
ICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6
OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3Vl
KSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2Fy
aXR5X2NoZWNrKSk7CisgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25z
dHJ1Y3RfcHJvbG9ndWUpLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0
cihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrKSwgSklUQ29kZTo6SW50
ZXJwcmV0ZXJUaHVuaykpKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0RXZhbEVudHJ5cG9pbnQoVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKQEAgLTc3LDE2ICs3MywxNCBAQCBzdGF0aWMgdm9p
ZCBzZXRFdmFsRW50cnlwb2ludChWTSYgdm0sIENvCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAo
dm0uY2FuVXNlSklUKCkpIHsKICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAg
ICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1YihldmFsRW50cnlU
aHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKKyAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJl
Y3RKSVRDb2RlKHZtLmdldENUSVN0dWIoZXZhbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIoKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAgICAgVU5VU0VEX1BBUkFN
KHZtKTsKICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgIGFkb3B0UmVmKG5ldyBE
aXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxs
aW50X2V2YWxfcHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSksCi0gICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKKyAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJ
VENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZXZh
bF9wcm9sb2d1ZSksIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLCBKSVRDb2RlOjpJbnRlcnByZXRl
clRodW5rKSkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRQcm9ncmFtRW50cnlwb2ludChWTSYgdm0s
IENvZGVCbG9jayogY29kZUJsb2NrKQpAQCAtOTQsMTYgKzg4LDE0IEBAIHN0YXRpYyB2b2lkIHNl
dFByb2dyYW1FbnRyeXBvaW50KFZNJiB2bSwKICNpZiBFTkFCTEUoSklUKQogICAgIGlmICh2bS5j
YW5Vc2VKSVQoKSkgewogICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgICAg
ICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKHByb2dyYW1FbnRyeVRo
dW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOworICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVj
dEpJVENvZGUodm0uZ2V0Q1RJU3R1Yihwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvciksIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cigpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICAgICBVTlVTRURfUEFS
QU0odm0pOwogICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgYWRvcHRSZWYobmV3
IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYo
bGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOworICAgICAgICBhZG9wdFJlZihuZXcgRGly
ZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGlu
dF9wcm9ncmFtX3Byb2xvZ3VlKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksIEpJVENvZGU6Oklu
dGVycHJldGVyVGh1bmspKSk7CiB9CiAKIHZvaWQgc2V0RW50cnlwb2ludChWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNjA4NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsNyAr
MzQ2LDkgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihFeGVjUwogICAgIGlm
IChraW5kID09IFByb2xvZ3VlKQogICAgICAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+
aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzcygpLCAwKTsKICAgICBBU1NFUlQoa2luZCA9PSBB
cml0eUNoZWNrKTsKLSAgICBMTElOVF9SRVRVUk5fVFdPKGNvZGVCbG9jay0+aml0Q29kZVdpdGhB
cml0eUNoZWNrKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgMCk7CisgICAgTExJTlRfUkVUVVJOX1RX
Tyhjb2RlQmxvY2stPmppdENvZGUoKS0+YWRkcmVzc0ZvckNhbGwoCisgICAgICAgICpjb2RlQmxv
Y2stPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIE11c3RDaGVja0FyaXR5LAor
ICAgICAgICBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKS5leGVjdXRhYmxlQWRkcmVz
cygpLCAwKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyKQpAQCAtMTA0Niw3
ICsxMDQ4LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gMDsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29k
ZVB0ciA9IGV4ZWN1dGFibGUtPmhvc3RDb2RlRW50cnlGb3Ioa2luZCk7CisgICAgICAgIGNvZGVQ
dHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKHZtLCBraW5kLCBNdXN0Q2hlY2tBcml0eSwg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiAgICAgZWxzZSB7CiAgICAgICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1
bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBjYWxsZWUt
PnNjb3BlKCksIGtpbmQpOwpAQCAtMTA1NCwxMiArMTA1NiwxNiBAQCBpbmxpbmUgU2xvd1BhdGhS
ZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjCiAgICAgICAgICAgICBMTElOVF9DQUxMX1RIUk9XKGV4
ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCksIGVycm9yKTsKICAgICAgICAgY29kZUJsb2NrID0gZnVu
Y3Rpb25FeGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCk7CiAgICAgICAgIEFTU0VSVChjb2Rl
QmxvY2spOworICAgICAgICBBcml0eUNoZWNrTW9kZSBhcml0eTsKICAgICAgICAgaWYgKGV4ZWND
YWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+
KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKLSAgICAgICAgICAgIGNvZGVQdHIgPSBmdW5j
dGlvbkV4ZWN1dGFibGUtPmpzQ29kZVdpdGhBcml0eUNoZWNrRW50cnlGb3Ioa2luZCk7CisgICAg
ICAgICAgICBhcml0eSA9IE11c3RDaGVja0FyaXR5OwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5qc0NvZGVFbnRyeUZvcihraW5kKTsKKyAg
ICAgICAgICAgIGFyaXR5ID0gQXJpdHlDaGVja05vdFJlcXVpcmVkOworICAgICAgICBjb2RlUHRy
ID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKHZtLCBraW5kLCBhcml0eSwgUmVn
aXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiAgICAgfQogICAgIAorICAgIEFTU0VSVCgh
IWNvZGVQdHIpOworICAgIAogICAgIGlmICghTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XICYmIGNh
bGxMaW5rSW5mbykgewogICAgICAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZXIgPSBleGVjQ2FsbGVl
LT5jYWxsZXJGcmFtZSgpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FyaXR5Q2hlY2tNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJpdHlDaGVja01vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyaXR5Q2hlY2tNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEFyaXR5Q2hlY2tNb2RlX2gKKyNkZWZpbmUgQXJpdHlDaGVja01vZGVfaAorCitu
YW1lc3BhY2UgSlNDIHsKKworZW51bSBBcml0eUNoZWNrTW9kZSB7CisgICAgQXJpdHlDaGVja05v
dFJlcXVpcmVkLAorICAgIE11c3RDaGVja0FyaXR5Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEFyaXR5Q2hlY2tNb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDE2MDg1MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTgsMTIgKzExOCwxNCBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKENv
ZGVCCiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgY2FzZSBDb2RlRm9yQ2FsbDoKICAgICAgICAg
bV9qaXRDb2RlRm9yQ2FsbCA9IGdlbmVyaWNDb2RlQmxvY2stPmppdENvZGUoKTsKLSAgICAgICAg
bV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gZ2VuZXJpY0NvZGVCbG9jay0+aml0Q29k
ZVdpdGhBcml0eUNoZWNrKCk7CisgICAgICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVj
ayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworICAgICAgICBtX2ppdENvZGVGb3JDYWxsV2l0
aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3MgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKICAg
ICAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCA9IGdlbmVyaWNDb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgogICAg
ICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBnZW5lcmljQ29kZUJsb2NrLT5qaXRDb2RlKCk7
Ci0gICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gZ2VuZXJpY0Nv
ZGVCbG9jay0+aml0Q29kZVdpdGhBcml0eUNoZWNrKCk7CisgICAgICAgIG1faml0Q29kZUZvckNv
bnN0cnVjdFdpdGhBcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7CisgICAgICAg
IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrQW5kUHJlc2VydmVSZWdzID0gTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKCk7CiAgICAgICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVj
dCA9IGdlbmVyaWNDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpAQCAtMTMzLDcgKzEzNSw2IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENv
ZGUoQ29kZUIKICAgICAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8
UHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKTsKICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogY29k
ZUJsb2NrID0gc3RhdGljX2Nhc3Q8UHJvZ3JhbUNvZGVCbG9jayo+KGdlbmVyaWNDb2RlQmxvY2sp
OwogICAgICAgICAKLSAgICAgICAgQVNTRVJUKCFjb2RlQmxvY2stPmppdENvZGVXaXRoQXJpdHlD
aGVjaygpKTsKICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOwogICAgICAgICAK
ICAgICAgICAgb2xkQ29kZUJsb2NrID0gZXhlY3V0YWJsZS0+bV9wcm9ncmFtQ29kZUJsb2NrOwpA
QCAtMTQ1LDcgKzE0Niw2IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoQ29k
ZUIKICAgICAgICAgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RXZhbEV4ZWN1
dGFibGUqPih0aGlzKTsKICAgICAgICAgRXZhbENvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGlj
X2Nhc3Q8RXZhbENvZGVCbG9jayo+KGdlbmVyaWNDb2RlQmxvY2spOwogICAgICAgICAKLSAgICAg
ICAgQVNTRVJUKCFjb2RlQmxvY2stPmppdENvZGVXaXRoQXJpdHlDaGVjaygpKTsKICAgICAgICAg
QVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOwogICAgICAgICAKICAgICAgICAgb2xkQ29kZUJs
b2NrID0gZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gMTYwODUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw2ICsyNiw3IEBACiAjaWZuZGVmIEV4ZWN1dGFibGVfaAogI2RlZmluZSBFeGVjdXRhYmxlX2gK
IAorI2luY2x1ZGUgIkFyaXR5Q2hlY2tNb2RlLmgiCiAjaW5jbHVkZSAiQ2FsbERhdGEuaCIKICNp
bmNsdWRlICJDb2RlQmxvY2tIYXNoLmgiCiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZC5oIgpAQCAtMzYsNiArMzcsNyBAQAogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVk
ZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVn
aXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdUb29sLmgiCiAjaW5j
bHVkZSAiU291cmNlQ29kZS5oIgogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCkBAIC0x
NDQsMzcgKzE0Niw5NCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JD
b25zdHJ1Y3QpOwogICAgICAgICByZXR1cm4gZ2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgp
OwogICAgIH0KLQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZW5lcmF0ZWRKSVRDb2RlRm9y
Q2FsbFdpdGhBcml0eUNoZWNrKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2ppdENvZGVGb3JD
YWxsKTsKLSAgICAgICAgQVNTRVJUKG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7Ci0g
ICAgICAgIHJldHVybiBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2s7Ci0gICAgfQotCi0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3RXaXRo
QXJpdHlDaGVjaygpCi0gICAgewotICAgICAgICBBU1NFUlQobV9qaXRDb2RlRm9yQ29uc3RydWN0
KTsKLSAgICAgICAgQVNTRVJUKG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKTsK
LSAgICAgICAgcmV0dXJuIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrOwotICAg
IH0KLSAgICAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGdlbmVyYXRlZEpJVENvZGVX
aXRoQXJpdHlDaGVja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi0gICAgewotICAg
ICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgIHJldHVybiBnZW5lcmF0
ZWRKSVRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKCk7Ci0gICAgICAgIEFTU0VSVChraW5kID09
IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgICAgICByZXR1cm4gZ2VuZXJhdGVkSklUQ29kZUZvckNv
bnN0cnVjdFdpdGhBcml0eUNoZWNrKCk7Ci0gICAgfQotICAgICAgICAKLSAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCkKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZW50cnlwb2ludEZv
cigKKyAgICAgICAgVk0mIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEFyaXR5Q2hl
Y2tNb2RlIGFyaXR5LCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogICAgIHsK
LSAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEV4ZWN1dGFibGVCYXNlLCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hl
Y2spOwotICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICAgICAg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRhYmxlQmFzZSwgbV9qaXRDb2RlRm9yQ29uc3Ry
dWN0V2l0aEFyaXR5Q2hlY2spOworICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgY2FjaGVk
IHJlc3VsdC4gV2Ugb25seSBoYXZlIGl0IGZvciBhcml0eSBjaGVjayBiZWNhdXNlIHdlIHVzZSB0
aGUKKyAgICAgICAgLy8gbm8tYXJpdHkgZW50cnlwb2ludCBpbiBub24tdmlydHVhbCBjYWxscywg
d2hpY2ggd2lsbCAiY2FjaGUiIHRoaXMgdmFsdWUgZGlyZWN0bHkgaW4KKyAgICAgICAgLy8gbWFj
aGluZSBjb2RlLgorICAgICAgICBpZiAoYXJpdHkgPT0gTXVzdENoZWNrQXJpdHkpIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICAgICAgY2FzZSBDb2RlRm9yQ2FsbDoKKyAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAgICAgICAgICAgIGNhc2Ug
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgICAgICAgICAgaWYg
KE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPSBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5
Q2hlY2spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lz
dGVyczoKKyAgICAgICAgICAgICAgICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1
bHQgPSBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3MpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgICAgICAgICAgc3dpdGNoIChyZWdp
c3RlcnMpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVx
dWlyZWQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVz
dWx0ID0gbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2spCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPSBtX2ppdENvZGVGb3JDb25z
dHJ1Y3RXaXRoQXJpdHlDaGVja0FuZFByZXNlcnZlUmVncykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcmVzdWx0ID0KKyAgICAgICAgICAgIGdl
bmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKHZtLCB0aGlzLCBhcml0eSwg
cmVnaXN0ZXJzKTsKKyAgICAgICAgaWYgKGFyaXR5ID09IE11c3RDaGVja0FyaXR5KSB7CisgICAg
ICAgICAgICAvLyBDYWNoZSB0aGUgcmVzdWx0OyB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIEpJ
VCdzIHZpcnR1YWwgY2FsbCBvcHRpbWl6YXRpb25zLgorICAgICAgICAgICAgc3dpdGNoIChraW5k
KSB7CisgICAgICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAgICAgICAgIHN3aXRj
aCAocmVnaXN0ZXJzKSB7CisgICAgICAgICAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlv
bk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgICAgICAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFy
aXR5Q2hlY2sgPSByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAgICAgICAgICBt
X2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3MgPSByZXN1bHQ7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAgICAgICAgICAgIGNhc2UgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZDoKKyAgICAgICAgICAgICAgICAgICAgbV9qaXRDb2Rl
Rm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgorICAg
ICAgICAgICAgICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVja0FuZFBy
ZXNlcnZlUmVncyA9IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcigKKyAgICAgICAgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgIGNhc2UgQ29kZUZvckNhbGw6Cisg
ICAgICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgeworICAgICAgICAgICAgY2FzZSBSZWdpc3Rl
clByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAgICAgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7
CisgICAgICAgICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGFibGVCYXNlLCBtX2ppdENvZGVGb3JDYWxs
V2l0aEFyaXR5Q2hlY2tBbmRQcmVzZXJ2ZVJlZ3MpOworICAgICAgICAgICAgfQorICAgICAgICBj
YXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgewor
ICAgICAgICAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgorICAgICAg
ICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhlY3V0YWJsZUJhc2UsIG1faml0Q29k
ZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgICAgIGNhc2UgTXVzdFByZXNl
cnZlUmVnaXN0ZXJzOgorICAgICAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRXhl
Y3V0YWJsZUJhc2UsIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrQW5kUHJlc2Vy
dmVSZWdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgICAgIAorICAg
IAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzRm9yKENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKICAgICB7CiAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JD
YWxsKQpAQCAtMjExLDIxICsyNzAsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBOb0ludHJp
bnNpYzsKICAgICB9CiAgICAgICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBob3N0Q29k
ZUVudHJ5Rm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBnZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOwotICAgIH0K
LQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBqc0NvZGVFbnRyeUZvcihDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCi0gICAgewotICAgICAgICByZXR1cm4gZ2VuZXJhdGVkSklUQ29kZUZv
cihraW5kKS0+YWRkcmVzc0ZvckNhbGwoKTsKLSAgICB9Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIganNDb2RlV2l0aEFyaXR5Q2hlY2tFbnRyeUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpCi0gICAgewotICAgICAgICByZXR1cm4gZ2VuZXJhdGVkSklUQ29kZVdpdGhBcml0eUNo
ZWNrRm9yKGtpbmQpOwotICAgIH0KLQogcHJvdGVjdGVkOgogICAgIEV4ZWN1dGFibGVCYXNlKiBt
X3ByZXY7CiAgICAgRXhlY3V0YWJsZUJhc2UqIG1fbmV4dDsKQEAgLTIzNCw2ICsyNzgsOCBAQCBw
cm90ZWN0ZWQ6CiAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0Q29kZUZvckNvbnN0cnVjdDsKICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrOwog
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlD
aGVjazsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0
eUNoZWNrQW5kUHJlc2VydmVSZWdzOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENv
ZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVja0FuZFByZXNlcnZlUmVnczsKIH07CiAKIGNsYXNz
IE5hdGl2ZUV4ZWN1dGFibGUgOiBwdWJsaWMgRXhlY3V0YWJsZUJhc2UgewpAQCAtMjg4LDggKzMz
NCw2IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUGFzc1Jl
ZlB0cjxKSVRDb2RlPiBjYWxsVGh1bmssIFBhc3NSZWZQdHI8SklUQ29kZT4gY29uc3RydWN0VGh1
bmssIEludHJpbnNpYyBpbnRyaW5zaWMpCiAgICAgewogICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7Ci0gICAgICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IGNhbGxU
aHVuayA/IGNhbGxUaHVuay0+YWRkcmVzc0ZvckNhbGwoKSA6IE1hY3JvQXNzZW1ibGVyQ29kZVB0
cigpOwotICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IGNvbnN0
cnVjdFRodW5rID8gY29uc3RydWN0VGh1bmstPmFkZHJlc3NGb3JDYWxsKCkgOiBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIoKTsKICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IGNhbGxUaHVuazsKICAg
ICAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gY29uc3RydWN0VGh1bms7CiAgICAgICAgIG1f
aW50cmluc2ljID0gaW50cmluc2ljOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdpc3RlclByZXNlcnZhdGlvbk1v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUmVnaXN0ZXJQcmVzZXJ2YXRpb25N
b2RlX2gKKyNkZWZpbmUgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlX2gKKworbmFtZXNwYWNlIEpT
QyB7CisKK2VudW0gUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHsKKyAgICBSZWdpc3RlclByZXNl
cnZhdGlvbk5vdFJlcXVpcmVkLAorICAgIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGVfaAor
Cg==
</data>
<flag name="review"
          id="243348"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>