<?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>226200</bug_id>
          
          <creation_ts>2021-05-24 17:29:53 -0700</creation_ts>
          <short_desc>Add the ability to dump statistics about cumulative counts and code sizes of Baseline JIT opcodes and DFG nodes</short_desc>
          <delta_ts>2021-05-28 11:37:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1763352</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-24 17:29:53 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764068</commentid>
    <comment_count>1</comment_count>
      <attachid>429799</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-26 14:53:44 -0700</bug_when>
    <thetext>Created attachment 429799
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764071</commentid>
    <comment_count>2</comment_count>
      <attachid>429800</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-26 15:04:03 -0700</bug_when>
    <thetext>Created attachment 429800
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764078</commentid>
    <comment_count>3</comment_count>
      <attachid>429799</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-26 15:12:21 -0700</bug_when>
    <thetext>Comment on attachment 429799
patch

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

r=me with some comments (and once it applies cleanly on ToT)

&gt; Source/JavaScriptCore/jit/JITSizeStatistics.cpp:64
&gt; +    WTF::bubbleSort(entries.begin(), entries.end(), [] (auto lhs, auto rhs) {

Why bubbleSort here instead of std::sort? I see no reason to expect the entries to be nearly sorted.

&gt; Source/JavaScriptCore/runtime/Options.cpp:573
&gt; +        Options::useJITSizeStatistics() = true;

I am a bit surprised by this Options::useJITSizeStatistics(), was there a reason to make it an option (which can get incoherent) instead of just checking for &quot;Options::dumpBaselineJITSizeStatistics() || Options::dumpDFGJITSizeStatistics()&quot; in VM::VM() ? This seems to be the only place where it is used.

&gt; Source/JavaScriptCore/tools/JSDollarVM.cpp:3781
&gt; +    addFunction(vm, &quot;jitSizeStatistics&quot;, functionJITSizeStatistics, 1);

Maybe also adding a resetJitSizeStatistics might be worth doing, so that we could bracket each sub-benchmark in large benchmarks like JS2 by resetJitSizeStatistics / dumpJITSizeStatistics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764105</commentid>
    <comment_count>4</comment_count>
      <attachid>429800</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-26 16:12:33 -0700</bug_when>
    <thetext>Comment on attachment 429800
patch

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

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:414
&gt; +        if (Options::dumpDFGJITSizeStatistics()) {

UNLIKELY().

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:427
&gt; +        if (sizeMarker)

Ditto: UNLIKELY.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:440
&gt; +        if (sizeMarker)

Ditto: UNLIKELY.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:2112
&gt; +        if (Options::dumpDFGJITSizeStatistics()) {

Ditto: UNLIKELY.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:2119
&gt; +        if (sizeMarker)

Ditto: UNLIKELY.

&gt; Source/JavaScriptCore/jit/JIT.cpp:264
&gt; +        if (m_bytecodeIndex &gt;= startBytecodeIndex &amp;&amp; Options::dumpBaselineJITSizeStatistics()) {

Ditto: UNLIKELY.

&gt; Source/JavaScriptCore/jit/JIT.cpp:491
&gt; +        if (sizeMarker)

Ditto: UNLIKELY.

&gt; Source/JavaScriptCore/jit/JIT.cpp:547
&gt; +        if (Options::dumpBaselineJITSizeStatistics()) {

Ditto: UNLIKELY.

&gt; Source/JavaScriptCore/jit/JIT.cpp:664
&gt; +        if (sizeMarker)

Ditto: UNLIKELY.

&gt; Source/JavaScriptCore/jit/JIT.cpp:737
&gt; +    if (Options::dumpBaselineJITSizeStatistics()) {

Ditto: UNLIKELY.

&gt; Source/JavaScriptCore/jit/JIT.cpp:794
&gt; +    if (sizeMarker)
&gt; +        m_vm-&gt;jitSizeStatistics-&gt;markEnd(WTFMove(*sizeMarker), *this);

Ditto: UNLIKELY.

Note: you&apos;re missing the arityCheck blob of the header below (which I will be removing shortly though).  So, I don&apos;t care all that much about it.

&gt; Source/JavaScriptCore/tools/JSDollarVM.cpp:3782
&gt; +    addFunction(vm, &quot;jitSizeStatistics&quot;, functionJITSizeStatistics, 1);
&gt; +    addFunction(vm, &quot;dumpJITSizeStatistics&quot;, functionDumpJITSizeStatistics, 1);

I think these take 0 arguments, not 1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764112</commentid>
    <comment_count>5</comment_count>
      <attachid>429800</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-26 16:33:32 -0700</bug_when>
    <thetext>Comment on attachment 429800
patch

r=me with the comments from before, the suggestions from Mark, and fixing the EWS compilation error.

And using std::sort with &quot;&gt;&quot; in the lambda instead of &quot;&gt;=&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764514</commentid>
    <comment_count>6</comment_count>
      <attachid>429933</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-27 14:58:03 -0700</bug_when>
    <thetext>Created attachment 429933
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764548</commentid>
    <comment_count>7</comment_count>
      <attachid>429941</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-27 15:37:16 -0700</bug_when>
    <thetext>Created attachment 429941
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764844</commentid>
    <comment_count>8</comment_count>
      <attachid>430031</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-28 11:32:30 -0700</bug_when>
    <thetext>Created attachment 430031
[fast-cq] patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764846</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-28 11:36:51 -0700</bug_when>
    <thetext>Committed r278213 (238255@main): &lt;https://commits.webkit.org/238255@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 430031.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764848</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-28 11:37:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/78626317&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429799</attachid>
            <date>2021-05-26 14:53:44 -0700</date>
            <delta_ts>2021-05-26 15:12:38 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>25457</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4MTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDIxLTA1LTI2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCB0aGUgYWJpbGl0eSB0byBkdW1wIHN0YXRpc3RpY3MgYWJvdXQgY3VtdWxhdGl2ZSBjb3Vu
dHMgYW5kIGNvZGUgc2l6ZXMgb2YgQmFzZWxpbmUgSklUIG9wY29kZXMgYW5kIERGRyBub2Rlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MjAwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGRmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpE
Rkc6OlNsb3dQYXRoR2VuZXJhdG9yOjpjdXJyZW50Tm9kZSBjb25zdCk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6cnVuU2xvd1BhdGhHZW5lcmF0b3JzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jayk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbmcpOgorICAgICAgICAqIGppdC9KSVRTaXplU3RhdGlzdGlj
cy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKSVRTaXplU3RhdGlzdGljczo6bWFya1N0YXJ0
KToKKyAgICAgICAgKEpTQzo6SklUU2l6ZVN0YXRpc3RpY3M6Om1hcmtFbmQpOgorICAgICAgICAo
SlNDOjpKSVRTaXplU3RhdGlzdGljczo6ZHVtcCBjb25zdCk6CisgICAgICAgICogaml0L0pJVFNp
emVTdGF0aXN0aWNzLmg6IEFkZGVkLgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChydW5K
U0MpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlv
bnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjpl
bnN1cmVPcHRpb25zQXJlQ29oZXJlbnQpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3Qu
aDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAg
ICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5jcHA6Cisg
ICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgIChKU0M6OkpT
RG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKToKKwogMjAyMS0wNS0yNiAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBVbmNoZWNrZWRMb2NrIGV2ZW4gbGVzcyBp
biBKYXZhU2NyaXB0Q29yZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNp
b24gMjc4MDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC02NjIsNiArNjYyLDcgQEAgaml0L0pJVE9wZXJhdGlvbnMuY3BwCiBqaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKIGppdC9K
SVRSaWdodFNoaWZ0R2VuZXJhdG9yLmNwcAoraml0L0pJVFNpemVTdGF0aXN0aWNzLmNwcAogaml0
L0pJVFN0dWJSb3V0aW5lLmNwcAogaml0L0pJVFN1YkdlbmVyYXRvci5jcHAKIGppdC9KSVRUaHVu
a3MuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMjc4MDY3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcg
QEAKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUg
IkpJVE9wZXJhdGlvbkxpc3QuaCIKKyNpbmNsdWRlICJKSVRTaXplU3RhdGlzdGljcy5oIgogI2lu
Y2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAi
SlNCaWdJbnQuaCIKQEAgLTM1MTMsNiArMzUxNCw5IEBAIGludCBydW5KU0MoY29uc3QgQ29tbWFu
ZExpbmUmIG9wdGlvbnMsIGIKICNlbmRpZgogICAgIH0KIAorICAgIGlmICh2bS5qaXRTaXplU3Rh
dGlzdGljcykKKyAgICAgICAgZGF0YUxvZ0xuKCp2bS5qaXRTaXplU3RhdGlzdGljcyk7CisKICAg
ICB2bS5jb2RlQ2FjaGUoKS0+d3JpdGUodm0pOwogCiAgICAgaWYgKG9wdGlvbnMubV9kZXN0cm95
Vk0gfHwgaXNXb3JrZXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyNzgwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODg4LDYgKzg4OCw3IEBA
CiAJCTQ3M0RBNEE0NzY0QzQ1RkU4NzFCMDQ4NSAvKiBEZWZpbmVQcm9wZXJ0eUF0dHJpYnV0ZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE2OTk0OEVE
RTY4RDQwNTRCMDFFRjc5NyAvKiBEZWZpbmVQcm9wZXJ0eUF0dHJpYnV0ZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0QkFBMDdDRUI4MUY0OUEy
OTZFMDIyMDMgLyogV2FzbVNpZ25hdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMwQTVGNDAzRjExQzRGNTk5Q0Q1OTZENSAvKiBXYXNt
U2lnbmF0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTUyMEQ5OUYxMjM4OENDODEwMDA1MDlBMyAvKiBHZXRCeVZhbEhpc3Rvcnku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyMEQ5OUYw
MjM4OENDNzgwMDA1MDlBMyAvKiBHZXRCeVZhbEhpc3RvcnkuaCAqLzsgfTsKKwkJNTIxMEQ3MkIy
NjVEQjkwQTAwM0ZEQTZGIC8qIEpJVFNpemVTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjEwRDcyOTI2NURCOTAxMDAzRkRBNkYgLyog
SklUU2l6ZVN0YXRpc3RpY3MuaCAqLzsgfTsKIAkJNTIxMTMxRjcxRjgyQkYxNDAwN0NDRUVFIC8q
IFBvbHlQcm90b0FjY2Vzc0NoYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MjExMzFGNjFGODJCRjExMDA3Q0NFRUUgLyogUG9seVByb3RvQWNjZXNz
Q2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1MjEzMjI0NjFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyMTMyMjQ0MUVD
QkNFODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oICovOyB9OwogCQk1MjI5
MjdENTIzNUZEMEI5MDA1Q0IxNjkgLyogR0NNZW1vcnlPcGVyYXRpb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjcyOTg3QjIzNUZDOEJBMDA1Qzk4
MkMgLyogR0NNZW1vcnlPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM2MjIsNiArMzYyMyw4IEBACiAJCTUxRjBFQjYxMDVDODZD
NkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gRm91
bmRhdGlvbi5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Gb3Vu
ZGF0aW9uLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJNTFGMEVD
MDcwNUM4NkM5QTAwRTZERjFCIC8qIGxpYm9iamMuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsgbmFt
ZSA9IGxpYm9iamMuZHlsaWI7IHBhdGggPSAvdXNyL2xpYi9saWJvYmpjLmR5bGliOyBzb3VyY2VU
cmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQk1MjBEOTlGMDIzODhDQzc4MDAwNTA5QTMgLyogR2V0
QnlWYWxIaXN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdldEJ5VmFsSGlzdG9yeS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MjEwRDcyOTI2NURCOTAxMDAzRkRBNkYgLyogSklUU2l6
ZVN0YXRpc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU2l6ZVN0YXRpc3RpY3MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTIxMEQ3MkEyNjVEQjkwMTAwM0ZEQTZGIC8qIEpJVFNp
emVTdGF0aXN0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFNpemVTdGF0aXN0aWNzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTIxMTMxRjUxRjgyQkYxMTAwN0NDRUVF
IC8qIFBvbHlQcm90b0FjY2Vzc0NoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvbHlQcm90
b0FjY2Vzc0NoYWluLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTIxMTMxRjYx
RjgyQkYxMTAwN0NDRUVFIC8qIFBvbHlQcm90b0FjY2Vzc0NoYWluLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBvbHlQcm90b0FjY2Vzc0NoYWluLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUy
MTMyMjQzMUVDQkNFODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseUZ1bmN0aW9uQmFz
ZS5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC02Mjc1LDYgKzYyNzgsOCBAQAogCQkJCUE3QzFFOEM4MTEyRTcw
MUMwMEEzN0Y5OCAvKiBKSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCAqLywKIAkJCQlGRTNBMDZC
ODFDMTEwM0Q5MDAzOTBGREQgLyogSklUUmlnaHRTaGlmdEdlbmVyYXRvci5jcHAgKi8sCiAJCQkJ
RkUzQTA2QjkxQzExMDNEOTAwMzkwRkREIC8qIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCAqLywK
KwkJCQk1MjEwRDcyQTI2NURCOTAxMDAzRkRBNkYgLyogSklUU2l6ZVN0YXRpc3RpY3MuY3BwICov
LAorCQkJCTUyMTBENzI5MjY1REI5MDEwMDNGREE2RiAvKiBKSVRTaXplU3RhdGlzdGljcy5oICov
LAogCQkJCTBGNzY2RDI2MTVBOENDMUIwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAgKi8s
CiAJCQkJMEY3NjZEMUMxNUE1MDI4RDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggKi8sCiAJ
CQkJRkU0MjM4OEYxQkUxOEMxMjAwNTE0NzM3IC8qIEpJVFN1YkdlbmVyYXRvci5jcHAgKi8sCkBA
IC05NjIxLDYgKzk2MjYsNyBAQAogCQkJCTBGQjE0RTIzMTgxMzA5NTUwMDlCNkI0RCAvKiBERkdJ
bmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNjE3
QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTUyMTBENzJCMjY1REI5MEEwMDNGREE2RiAvKiBKSVRTaXplU3RhdGlz
dGljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMDBCN0MxOEFCMUIxNDAwQTZENzJFIC8qIERG
R0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg5OEYz
MjFCMjc2ODlGMDA4M0EzM0MgLyogREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQzk3RjNFMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlk
YXRpb25Qb2ludEluamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmgJKHJldmlzaW9u
IDI3ODA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5lcmF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAg
ICAgY29uc3QgTm9kZU9yaWdpbiYgb3JpZ2luKCkgY29uc3QgIHsgcmV0dXJuIG1fb3JpZ2luOyB9
CisgICAgTm9kZSogY3VycmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnROb2RlOyB9
CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVjdWxh
dGl2ZUpJVCopID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyNzgwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiAr
NDgsNyBAQAogI2luY2x1ZGUgIkpJVERpdkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVExlZnRT
aGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKKyNp
bmNsdWRlICJKSVRTaXplU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIkpTQXJyYXlJdGVyYXRvci5o
IgogI2luY2x1ZGUgIkpTQXN5bmNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQXN5bmNHZW5lcmF0
b3JGdW5jdGlvbi5oIgpAQCAtNDA4LDE3ICs0MDksMzYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
YWRkU2xvd1BhdGhHZW5lcmF0bwogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpydW5TbG93UGF0aEdl
bmVyYXRvcnMoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXIpCiB7CisgICAgYXV0byBtYXJrU2xvd1BhdGhJZk5lZWRlZCA9IFsmXSAoTm9kZSogbm9kZSkg
eworICAgICAgICBPcHRpb25hbDxKSVRTaXplU3RhdGlzdGljczo6TWFya2VyPiBzaXplTWFya2Vy
OworICAgICAgICBpZiAoT3B0aW9uczo6ZHVtcERGR0pJVFNpemVTdGF0aXN0aWNzKCkpIHsKKyAg
ICAgICAgICAgIFN0cmluZyBpZCA9IG1ha2VTdHJpbmcoIkRGR19zbG93XyIsIG1fZ3JhcGgub3BO
YW1lKG5vZGUtPm9wKCkpKTsKKyAgICAgICAgICAgIHNpemVNYXJrZXIgPSB2bSgpLmppdFNpemVT
dGF0aXN0aWNzLT5tYXJrU3RhcnQoaWQsIG1faml0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gc2l6ZU1hcmtlcjsKKyAgICB9OworCiAgICAgZm9yIChhdXRvJiBzbG93UGF0aEdlbmVyYXRv
ciA6IG1fc2xvd1BhdGhHZW5lcmF0b3JzKSB7CiAgICAgICAgIHBjVG9Db2RlT3JpZ2luTWFwQnVp
bGRlci5hcHBlbmRJdGVtKG1faml0LmxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpLCBzbG93UGF0
aEdlbmVyYXRvci0+b3JpZ2luKCkuc2VtYW50aWMpOworICAgICAgICBhdXRvIHNpemVNYXJrZXIg
PSBtYXJrU2xvd1BhdGhJZk5lZWRlZChzbG93UGF0aEdlbmVyYXRvci0+Y3VycmVudE5vZGUoKSk7
CisKICAgICAgICAgc2xvd1BhdGhHZW5lcmF0b3ItPmdlbmVyYXRlKHRoaXMpOworCisgICAgICAg
IGlmIChzaXplTWFya2VyKQorICAgICAgICAgICAgdm0oKS5qaXRTaXplU3RhdGlzdGljcy0+bWFy
a0VuZChXVEZNb3ZlKCpzaXplTWFya2VyKSwgbV9qaXQpOwogICAgIH0KICAgICBmb3IgKGF1dG8m
IHNsb3dQYXRoTGFtYmRhIDogbV9zbG93UGF0aExhbWJkYXMpIHsKICAgICAgICAgTm9kZSogY3Vy
cmVudE5vZGUgPSBzbG93UGF0aExhbWJkYS5jdXJyZW50Tm9kZTsKICAgICAgICAgbV9jdXJyZW50
Tm9kZSA9IGN1cnJlbnROb2RlOwogICAgICAgICBtX291dE9mTGluZVN0cmVhbUluZGV4ID0gc2xv
d1BhdGhMYW1iZGEuc3RyZWFtSW5kZXg7CiAgICAgICAgIHBjVG9Db2RlT3JpZ2luTWFwQnVpbGRl
ci5hcHBlbmRJdGVtKG1faml0LmxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpLCBjdXJyZW50Tm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgYXV0byBzaXplTWFya2VyID0gbWFya1Nsb3dQ
YXRoSWZOZWVkZWQoY3VycmVudE5vZGUpOworCiAgICAgICAgIHNsb3dQYXRoTGFtYmRhLmdlbmVy
YXRvcigpOworCiAgICAgICAgIG1fb3V0T2ZMaW5lU3RyZWFtSW5kZXggPSBXVEY6Om51bGxvcHQ7
CisgICAgICAgIGlmIChzaXplTWFya2VyKQorICAgICAgICAgICAgdm0oKS5qaXRTaXplU3RhdGlz
dGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXplTWFya2VyKSwgbV9qaXQpOwogICAgIH0KIH0KIApA
QCAtMjA4OCw4ICsyMTA4LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50
QmxvY2sKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmdm0o
KS5kaWRFbnRlclZNKTsKICAgICAgICAgfQogCisgICAgICAgIE9wdGlvbmFsPEpJVFNpemVTdGF0
aXN0aWNzOjpNYXJrZXI+IHNpemVNYXJrZXI7CisgICAgICAgIGlmIChPcHRpb25zOjpkdW1wREZH
SklUU2l6ZVN0YXRpc3RpY3MoKSkgeworICAgICAgICAgICAgU3RyaW5nIGlkID0gbWFrZVN0cmlu
ZygiREZHX2Zhc3RfIiwgbV9ncmFwaC5vcE5hbWUobV9jdXJyZW50Tm9kZS0+b3AoKSkpOworICAg
ICAgICAgICAgc2l6ZU1hcmtlciA9IHZtKCkuaml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtTdGFydChp
ZCwgbV9qaXQpOworICAgICAgICB9CisKICAgICAgICAgY29tcGlsZShtX2N1cnJlbnROb2RlKTsK
IAorICAgICAgICBpZiAoc2l6ZU1hcmtlcikKKyAgICAgICAgICAgIHZtKCkuaml0U2l6ZVN0YXRp
c3RpY3MtPm1hcmtFbmQoV1RGTW92ZSgqc2l6ZU1hcmtlciksIG1faml0KTsKKwogICAgICAgICBp
ZiAoYmVsb25nc0luTWluaWZpZWRHcmFwaChtX2N1cnJlbnROb2RlLT5vcCgpKSkKICAgICAgICAg
ICAgIG1fbWluaWZpZWRHcmFwaC0+YXBwZW5kKE1pbmlmaWVkTm9kZTo6ZnJvbU5vZGUobV9jdXJy
ZW50Tm9kZSkpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJl
dmlzaW9uIDI3ODA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5o
IgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCisj
aW5jbHVkZSAiSklUU2l6ZVN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAj
aW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrLmgiCkBAIC0yNTksNiArMjYwLDEyIEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKIAorICAgICAgICBPcHRpb25hbDxKSVRTaXplU3Rh
dGlzdGljczo6TWFya2VyPiBzaXplTWFya2VyOworICAgICAgICBpZiAobV9ieXRlY29kZUluZGV4
ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCAmJiBPcHRpb25zOjpkdW1wQmFzZWxpbmVKSVRTaXplU3Rh
dGlzdGljcygpKSB7CisgICAgICAgICAgICBTdHJpbmcgaWQgPSBtYWtlU3RyaW5nKCJCYXNlbGlu
ZV9mYXN0XyIsIG9wY29kZU5hbWVzW29wY29kZUlEXSk7CisgICAgICAgICAgICBzaXplTWFya2Vy
ID0gbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtTdGFydChpZCwgKnRoaXMpOworICAgICAg
ICB9CisKICAgICAgICAgaWYgKFVOTElLRUxZKG1fY29tcGlsYXRpb24pKSB7CiAgICAgICAgICAg
ICBhZGQ2NCgKICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoMSksCkBAIC00ODEsNiArNDg4
LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChzaXpl
TWFya2VyKQorICAgICAgICAgICAgbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtFbmQoV1RG
TW92ZSgqc2l6ZU1hcmtlciksICp0aGlzKTsKKwogICAgICAgICBpZiAoSklUSW50ZXJuYWw6OnZl
cmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBieXRlY29kZU9mZnNldCwgIjogIiwg
bV9zbG93Q2FzZXMuc2l6ZSgpLCAiXG4iKTsKICAgICB9CkBAIC01MzEsOCArNTQxLDE1IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIGlmIChtX2Rpc2Fzc2Vt
YmxlcikKICAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCeXRlY29kZVNsb3dQYXRo
KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgbGFiZWwoKSk7CiAKKyAgICAgICAgT3Bjb2RlSUQg
b3Bjb2RlSUQgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CisKKyAgICAgICAgT3B0
aW9uYWw8SklUU2l6ZVN0YXRpc3RpY3M6Ok1hcmtlcj4gc2l6ZU1hcmtlcjsKKyAgICAgICAgaWYg
KE9wdGlvbnM6OmR1bXBCYXNlbGluZUpJVFNpemVTdGF0aXN0aWNzKCkpIHsKKyAgICAgICAgICAg
IFN0cmluZyBpZCA9IG1ha2VTdHJpbmcoIkJhc2VsaW5lX3Nsb3dfIiwgb3Bjb2RlTmFtZXNbb3Bj
b2RlSURdKTsKKyAgICAgICAgICAgIHNpemVNYXJrZXIgPSBtX3ZtLT5qaXRTaXplU3RhdGlzdGlj
cy0+bWFya1N0YXJ0KGlkLCAqdGhpcyk7CisgICAgICAgIH0KKwogICAgICAgICBpZiAoVU5MSUtF
TFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4ZWN1dGlvbigpKSkgewotICAgICAgICAgICAg
T3Bjb2RlSUQgb3Bjb2RlSUQgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCk7CiAgICAg
ICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAg
ICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGN0eCkgewpAQCAtNjQzLDYg
KzY2MCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIAog
ICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIDApOwogICAgICAgICArK2J5dGVjb2Rl
Q291bnRIYXZpbmdTbG93Q2FzZTsKKworICAgICAgICBpZiAoc2l6ZU1hcmtlcikKKyAgICAgICAg
ICAgIG1fdm0tPmppdFNpemVTdGF0aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIp
LCAqdGhpcyk7CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGVDb3VudEhhdmlu
Z1Nsb3dDYXNlID09IG1fYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlKTsKQEAgLTcxNyw2ICs3
MzcsMTIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIAog
ICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9y
aWdpbihCeXRlY29kZUluZGV4KDApKSk7CiAKKyAgICBPcHRpb25hbDxKSVRTaXplU3RhdGlzdGlj
czo6TWFya2VyPiBzaXplTWFya2VyOworICAgIGlmIChPcHRpb25zOjpkdW1wQmFzZWxpbmVKSVRT
aXplU3RhdGlzdGljcygpKSB7CisgICAgICAgIFN0cmluZyBpZCA9IG1ha2VTdHJpbmcoIkJhc2Vs
aW5lX3Byb2xvZ3VlIik7CisgICAgICAgIHNpemVNYXJrZXIgPSBtX3ZtLT5qaXRTaXplU3RhdGlz
dGljcy0+bWFya1N0YXJ0KGlkLCAqdGhpcyk7CisgICAgfQorCiAgICAgTGFiZWwgZW50cnlMYWJl
bCh0aGlzKTsKICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVy
LT5zZXRTdGFydE9mQ29kZShlbnRyeUxhYmVsKTsKQEAgLTc2OCw2ICs3OTQsOSBAQCB2b2lkIEpJ
VDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgCiAgICAgUkVMRUFTRV9BU1NF
UlQoIUpJVENvZGU6OmlzSklUKG1fY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKIAorICAgIGlmIChz
aXplTWFya2VyKQorICAgICAgICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZN
b3ZlKCpzaXplTWFya2VyKSwgKnRoaXMpOworCiAgICAgcHJpdmF0ZUNvbXBpbGVNYWluUGFzcygp
OwogICAgIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKICAgICBwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTaXplU3RhdGlzdGlj
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTaXplU3Rh
dGlzdGljcy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTaXplU3RhdGlzdGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJKSVRTaXplU3RhdGlzdGljcy5oIgorCisjaWYgRU5BQkxFKEpJVCkK
KworI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgPHd0Zi9CdWJibGVTb3J0Lmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitKSVRTaXplU3RhdGlzdGljczo6TWFya2VyIEpJVFNpemVT
dGF0aXN0aWNzOjptYXJrU3RhcnQoU3RyaW5nIGlkZW50aWZpZXIsIENDYWxsSGVscGVycyYgaml0
KQoreworICAgIE1hcmtlciBtYXJrZXI7CisgICAgbWFya2VyLmlkZW50aWZpZXIgPSBpZGVudGlm
aWVyOworICAgIG1hcmtlci5zdGFydCA9IGppdC5sYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKTsK
KyAgICByZXR1cm4gbWFya2VyOworfQorCit2b2lkIEpJVFNpemVTdGF0aXN0aWNzOjptYXJrRW5k
KE1hcmtlciBtYXJrZXIsIENDYWxsSGVscGVycyYgaml0KQoreworICAgIENDYWxsSGVscGVyczo6
TGFiZWwgZW5kID0gaml0LmxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpOworICAgIGppdC5hZGRM
aW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgc2l6ZV90IHNp
emUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KGVuZCkudW50YWdnZWRFeGVjdXRh
YmxlQWRkcmVzczxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4obWFy
a2VyLnN0YXJ0KS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgICAgICBs
aW5rQnVmZmVyLmFkZE1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrKFs9XSB7CisgICAgICAgICAg
ICBhdXRvJiBlbnRyeSA9IG1fZGF0YS5hZGQobWFya2VyLmlkZW50aWZpZXIsIEVudHJ5IHsgfSku
aXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAgKytlbnRyeS5jb3VudDsKKyAgICAgICAgICAg
IGVudHJ5LnRvdGFsQnl0ZXMgKz0gc2l6ZTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3Zv
aWQgSklUU2l6ZVN0YXRpc3RpY3M6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgRW50cnk+PiBlbnRyaWVzOworCisgICAgZm9yIChh
dXRvIHBhaXIgOiBtX2RhdGEpCisgICAgICAgIGVudHJpZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KHBhaXIua2V5LCBwYWlyLnZhbHVlKSk7CisKKyAgICBXVEY6OmJ1YmJsZVNvcnQoZW50cmllcy5i
ZWdpbigpLCBlbnRyaWVzLmVuZCgpLCBbXSAoYXV0byBsaHMsIGF1dG8gcmhzKSB7CisgICAgICAg
IHJldHVybiBsaHMuc2Vjb25kLnRvdGFsQnl0ZXMgPj0gcmhzLnNlY29uZC50b3RhbEJ5dGVzOwor
ICAgIH0pOworCisgICAgb3V0LnByaW50bG4oIkpJVCBzaXplIHN0YXRpc3RpY3M6Iik7CisgICAg
b3V0LnByaW50bG4oIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0iKTsKKworICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKSB7CisgICAgICAgIHNpemVf
dCB0b3RhbEJ5dGVzID0gZW50cnkuc2Vjb25kLnRvdGFsQnl0ZXM7CisgICAgICAgIHNpemVfdCBj
b3VudCA9IGVudHJ5LnNlY29uZC5jb3VudDsKKyAgICAgICAgZG91YmxlIGF2ZyA9IHN0YXRpY19j
YXN0PGRvdWJsZT4odG90YWxCeXRlcykgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvdW50KTsKKyAg
ICAgICAgb3V0LnByaW50bG4oZW50cnkuZmlyc3QsICIgdG90YWxCeXRlczogIiwgdG90YWxCeXRl
cywgIiBjb3VudDogIiwgY291bnQsICIgYXZnOiAiLCBhdmcpOworICAgIH0KK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTaXplU3RhdGlzdGljcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU2l6ZVN0YXRpc3RpY3MuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNpemVTdGF0aXN0aWNzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MiBAQAorCisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK2NsYXNzIEpJVFNpemVTdGF0aXN0aWNz
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgTWFy
a2VyIHsKKyAgICAgICAgU3RyaW5nIGlkZW50aWZpZXI7CisgICAgICAgIENDYWxsSGVscGVyczo6
TGFiZWwgc3RhcnQ7CisgICAgfTsKKworICAgIE1hcmtlciBtYXJrU3RhcnQoU3RyaW5nIGlkZW50
aWZpZXIsIENDYWxsSGVscGVycyYpOworICAgIHZvaWQgbWFya0VuZChNYXJrZXIsIENDYWxsSGVs
cGVycyYpOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IEVudHJ5IHsKKyAgICAgICAgc2l6ZV90IGNv
dW50IHsgMCB9OworICAgICAgICBzaXplX3QgdG90YWxCeXRlcyB7IDAgfTsKKyAgICB9OworCisg
ICAgSGFzaE1hcDxTdHJpbmcsIEVudHJ5PiBtX2RhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAkocmV2aXNpb24gMjc4MDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2OCw2ICs1NjgsOSBAQCB2b2lkIE9wdGlv
bnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoCiAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZVZlcmlmeUdDKCkpCiAgICAgICAgIE9wdGlvbnM6OnZlcmlmeUdDKCkgPSB0cnVlOworCisgICAg
aWYgKE9wdGlvbnM6OmR1bXBCYXNlbGluZUpJVFNpemVTdGF0aXN0aWNzKCkgfHwgT3B0aW9uczo6
ZHVtcERGR0pJVFNpemVTdGF0aXN0aWNzKCkpCisgICAgICAgIE9wdGlvbnM6OnVzZUpJVFNpemVT
dGF0aXN0aWNzKCkgPSB0cnVlOwogfQogCiBpbmxpbmUgdm9pZCogT3B0aW9uczo6YWRkcmVzc09m
T3B0aW9uKE9wdGlvbnM6OklEIGlkKQpAQCAtMTAzMiw2ICsxMDM1LDEwIEBAIHZvaWQgT3B0aW9u
czo6ZW5zdXJlT3B0aW9uc0FyZUNvaGVyZW50KCkKICAgICAgICAgY29oZXJlbnQgPSBmYWxzZTsK
ICAgICAgICAgZGF0YUxvZygiSU5DT0hFUkVOVCBPUFRJT05TOiBhdCBsZWFzdCBvbmUgb2YgdXNl
V2FzbUxMSW50IG9yIHVzZUJCUUpJVCBtdXN0IGJlIHRydWVcbiIpOwogICAgIH0KKyAgICBpZiAo
T3B0aW9uczo6dXNlSklUU2l6ZVN0YXRpc3RpY3MoKSAmJiAhKE9wdGlvbnM6OmR1bXBCYXNlbGlu
ZUpJVFNpemVTdGF0aXN0aWNzKCkgfHwgT3B0aW9uczo6ZHVtcERGR0pJVFNpemVTdGF0aXN0aWNz
KCkpKSB7CisgICAgICAgIGNvaGVyZW50ID0gZmFsc2U7CisgICAgICAgIGRhdGFMb2dMbigiSU5D
T0hFUkVOVCBPUFRJT05TOiBkdW1wQmFzZWxpbmVKSVRTaXplU3RhdGlzdGljcyBvciBkdW1wREZH
SklUU2l6ZVN0YXRpc3RpY3MgbXVzdCBiZSB0cnVlIGlmIHVzZUpJVFNpemVTdGF0aXN0aWNzIGlz
IHRydWUiKTsKKyAgICB9CiAgICAgaWYgKCFjb2hlcmVudCkKICAgICAgICAgQ1JBU0goKTsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2
aXNpb24gMjc4MDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTE0LDYgKzUxNCw5IEBAIEpTX0VYUE9SVF9QUklWQVRF
IGJvb2wgY2FuVXNlSklUQ2FnZSgpOwogICAgIHYoRG91YmxlLCBhbGxvd0hvaXN0aW5nTElDTVBy
b2JhYmlsaXR5LCAwLjUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgZXhwb3NlQ3Vz
dG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoQm9vbCwgdXNlSklUQ2FnZSwgY2FuVXNlSklUQ2FnZSgpLCBOb3JtYWwsIG51
bGxwdHIpIFwKKyAgICB2KEJvb2wsIHVzZUpJVFNpemVTdGF0aXN0aWNzLCBmYWxzZSwgTm9ybWFs
LCBudWxscHRyKSBcCisgICAgdihCb29sLCBkdW1wQmFzZWxpbmVKSVRTaXplU3RhdGlzdGljcywg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgZHVtcERGR0pJVFNpemVTdGF0
aXN0aWNzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAgIC8qIEZlYXR1cmUg
RmxhZ3MgKi9cCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
cmV2aXNpb24gMjc4MDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MSw2ICs4MSw3IEBACiAjaW5jbHVkZSAiSXNvSW5saW5lZEhl
YXBDZWxsVHlwZS5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRp
b25MaXN0LmgiCisjaW5jbHVkZSAiSklUU2l6ZVN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJKSVRU
aHVua3MuaCIKICNpbmNsdWRlICJKSVRXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkpTQVBJR2xvYmFs
T2JqZWN0LmgiCkBAIC01NzMsNiArNTc0LDkgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBU
eXBlIGhlYXBUeXBlLAogICAgIGlmIChPcHRpb25zOjpmb3JjZURlYnVnZ2VyQnl0ZWNvZGVHZW5l
cmF0aW9uKCkgfHwgT3B0aW9uczo6YWx3YXlzVXNlU2hhZG93Q2hpY2tlbigpKQogICAgICAgICBl
bnN1cmVTaGFkb3dDaGlja2VuKCk7CiAKKyAgICBpZiAoT3B0aW9uczo6dXNlSklUU2l6ZVN0YXRp
c3RpY3MoKSkKKyAgICAgICAgaml0U2l6ZVN0YXRpc3RpY3MgPSBtYWtlVW5pcXVlPEpJVFNpemVT
dGF0aXN0aWNzPigpOworCiAgICAgVk1JbnNwZWN0b3I6Omluc3RhbmNlKCkuYWRkKHRoaXMpOwog
CiAgICAgaWYgKCFnX2pzY0NvbmZpZy5kaXNhYmxlZEZyZWV6aW5nRm9yVGVzdGluZykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjc4MDY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDYgKzE2
MSw3IEBAIGNsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKIGNsYXNzIEpTV2ViQXNzZW1ibHlN
ZW1vcnk7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlOwogY2xhc3MgSlNXZWJBc3NlbWJseVRh
YmxlOworY2xhc3MgSklUU2l6ZVN0YXRpc3RpY3M7CiBjbGFzcyBKSVRUaHVua3M7CiBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlOwpAQCAtNDM1LDYg
KzQzNiwxMCBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4g
d2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRIZWFwQ2VsbFR5cGU7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlUYWJsZUhlYXBDZWxsVHlwZTsKICNlbmRpZgor
CisjaWYgRU5BQkxFKEpJVCkKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SklUU2l6ZVN0YXRpc3RpY3M+
IGppdFNpemVTdGF0aXN0aWNzOworI2VuZGlmCiAgICAgCiAgICAgQ29tcGxldGVTdWJzcGFjZSBw
cmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlOyAvLyBUeXBlZCBhcnJheXMsIHN0cmluZ3Ms
IGJpdHZlY3RvcnMsIGV0YyBnbyBoZXJlLgogICAgIENvbXBsZXRlU3Vic3BhY2UganNWYWx1ZUdp
Z2FjYWdlQXV4aWxpYXJ5U3BhY2U7IC8vIEJ1dHRlcmZsaWVzLCBhcnJheXMgb2YgSlNWYWx1ZXMs
IGV0YyBnbyBoZXJlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFy
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxh
clZNLmNwcAkocmV2aXNpb24gMjc4MDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVk
ZSAiRnJhbWVUcmFjZXJzLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxvY2suaCIKICNpbmNs
dWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJKSVRTaXplU3RhdGlzdGljcy5oIgogI2lu
Y2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNP
Tk9iamVjdC5oIgpAQCAtMTk5MSw2ICsxOTkyLDggQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1Rf
RlVOQ1RJT04oZnVuY3Rpbwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rp
b25Jc0dpZ2FjYWdlRW5hYmxlZCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihm
dW5jdGlvblRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NU
X0ZVTkNUSU9OKGZ1bmN0aW9uSXNQcml2YXRlU3ltYm9sKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9I
T1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSklUU2l6ZVN0YXRpc3RpY3MpOworc3RhdGljIEpTQ19ERUNM
QVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25EdW1wSklUU2l6ZVN0YXRpc3RpY3MpOwogCiBjb25z
dCBDbGFzc0luZm8gSlNEb2xsYXJWTTo6c19pbmZvID0geyAiRG9sbGFyVk0iLCAmQmFzZTo6c19p
bmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRG9sbGFyVk0pIH07
CiAKQEAgLTM1OTEsNiArMzU5NCwzMyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rp
b25Jc1ByaXZhCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYXNTeW1ib2wo
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKSktPnVpZCgpLmlzUHJpdmF0ZSgpKSk7CiB9CiAKK0pTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkpJVFNpemVTdGF0aXN0aWNzLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKikpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRT
Y29wZSBhc3NlcnRTY29wZTsKKworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKwor
ICAgIGlmICghdm0uaml0U2l6ZVN0YXRpc3RpY3MpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICBXVEY6OlN0cmluZ1ByaW50U3RyZWFtIHN0cmVh
bTsKKyAgICBzdHJlYW0ucHJpbnQoKnZtLmppdFNpemVTdGF0aXN0aWNzKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBzdHJlYW0udG9TdHJpbmcoKSkpOworfQorCitK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25EdW1wSklUU2l6ZVN0YXRpc3RpY3MsIChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xsYXJW
TUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworCisgICAgaWYgKCF2bS5qaXRTaXplU3RhdGlzdGljcykKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgIGRhdGFMb2dMbigqdm0uaml0U2l6
ZVN0YXRpc3RpY3MpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Cit9CisKIGNvbnN0ZXhwciB1bnNpZ25lZCBqc0RvbGxhclZNUHJvcGVydHlBdHRyaWJ1dGVzID0g
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGU7CiAKIHZvaWQgSlNEb2xsYXJWTTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQpAQCAtMzc0OCw2ICszNzc4LDkgQEAgdm9pZCBKU0RvbGxhclZN
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAKICAgICBhZGRGdW5jdGlvbih2bSwgImlzUHJpdmF0
ZVN5bWJvbCIsIGZ1bmN0aW9uSXNQcml2YXRlU3ltYm9sLCAxKTsKIAorICAgIGFkZEZ1bmN0aW9u
KHZtLCAiaml0U2l6ZVN0YXRpc3RpY3MiLCBmdW5jdGlvbkpJVFNpemVTdGF0aXN0aWNzLCAxKTsK
KyAgICBhZGRGdW5jdGlvbih2bSwgImR1bXBKSVRTaXplU3RhdGlzdGljcyIsIGZ1bmN0aW9uRHVt
cEpJVFNpemVTdGF0aXN0aWNzLCAxKTsKKwogICAgIG1fb2JqZWN0RG9pbmdTaWRlRWZmZWN0UHV0
V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlLnNldCh2bSwgdGhpcywgT2JqZWN0RG9p
bmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzOjpjcmVhdGVTdHJ1Y3R1cmUo
dm0sIGdsb2JhbE9iamVjdCwganNOdWxsKCkpKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429800</attachid>
            <date>2021-05-26 15:04:03 -0700</date>
            <delta_ts>2021-05-27 14:58:03 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>25320</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4MTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDIxLTA1LTI2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCB0aGUgYWJpbGl0eSB0byBkdW1wIHN0YXRpc3RpY3MgYWJvdXQgY3VtdWxhdGl2ZSBjb3Vu
dHMgYW5kIGNvZGUgc2l6ZXMgb2YgQmFzZWxpbmUgSklUIG9wY29kZXMgYW5kIERGRyBub2Rlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MjAwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGRmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpE
Rkc6OlNsb3dQYXRoR2VuZXJhdG9yOjpjdXJyZW50Tm9kZSBjb25zdCk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6cnVuU2xvd1BhdGhHZW5lcmF0b3JzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jayk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbmcpOgorICAgICAgICAqIGppdC9KSVRTaXplU3RhdGlzdGlj
cy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKSVRTaXplU3RhdGlzdGljczo6bWFya1N0YXJ0
KToKKyAgICAgICAgKEpTQzo6SklUU2l6ZVN0YXRpc3RpY3M6Om1hcmtFbmQpOgorICAgICAgICAo
SlNDOjpKSVRTaXplU3RhdGlzdGljczo6ZHVtcCBjb25zdCk6CisgICAgICAgICogaml0L0pJVFNp
emVTdGF0aXN0aWNzLmg6IEFkZGVkLgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChydW5K
U0MpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlv
bnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjpl
bnN1cmVPcHRpb25zQXJlQ29oZXJlbnQpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3Qu
aDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAg
ICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5jcHA6Cisg
ICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgIChKU0M6OkpT
RG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKToKKwogMjAyMS0wNS0yNiAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBVbmNoZWNrZWRMb2NrIGV2ZW4gbGVzcyBp
biBKYXZhU2NyaXB0Q29yZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNp
b24gMjc4MTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC02NjIsNiArNjYyLDcgQEAgaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAogaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCiBqaXQvSklUUmlnaHRTaGlmdEdlbmVyYXRvci5j
cHAKIGppdC9KSVRTYWZlcG9pbnQuY3BwCitqaXQvSklUU2l6ZVN0YXRpc3RpY3MuY3BwCiBqaXQv
SklUU3R1YlJvdXRpbmUuY3BwCiBqaXQvSklUU3ViR2VuZXJhdG9yLmNwcAogaml0L0pJVFRodW5r
cy5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyNzgxMjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBA
QAogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAi
SklUT3BlcmF0aW9uTGlzdC5oIgorI2luY2x1ZGUgIkpJVFNpemVTdGF0aXN0aWNzLmgiCiAjaW5j
bHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJK
U0JpZ0ludC5oIgpAQCAtMzUxMyw2ICszNTE0LDkgQEAgaW50IHJ1bkpTQyhjb25zdCBDb21tYW5k
TGluZSYgb3B0aW9ucywgYgogI2VuZGlmCiAgICAgfQogCisgICAgaWYgKHZtLmppdFNpemVTdGF0
aXN0aWNzKQorICAgICAgICBkYXRhTG9nTG4oKnZtLmppdFNpemVTdGF0aXN0aWNzKTsKKwogICAg
IHZtLmNvZGVDYWNoZSgpLT53cml0ZSh2bSk7CiAKICAgICBpZiAob3B0aW9ucy5tX2Rlc3Ryb3lW
TSB8fCBpc1dvcmtlcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDI3ODEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04OTQsNiArODk0LDcgQEAK
IAkJNTI4NDdBREMyMUZGQjg2OTAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI4NDdBREEyMUZGQjg2
MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5oICovOyB9OwogCQk1MkIzMTBGQjE5NzRB
RTYxMDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIzMTBGQTE5NzRBRTYxMDA4MDg1N0Mg
LyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJCMzExMDExOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVM
b2NhdGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MkIzMTEwMDE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MkI1MTAwRDI2
NUVGQ0RCMDA4OTcwRTcgLyogSklUU2l6ZVN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjUxMDBCMjY1RUZDRDQwMDg5NzBFNyAvKiBK
SVRTaXplU3RhdGlzdGljcy5oICovOyB9OwogCQk1MkMwNjExRjFBQTUxRTFDMDBCNEFEQkEgLyog
UnVudGltZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUyQzA2MTFEMUFBNTFFMUIwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyQzU1NTY2MjI0QzJBRUEw
MDk5RjVDQyAvKiBERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM1NTU2NTIyNEMyQUU3MDA5OUY1Q0MgLyog
REZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5oICovOyB9OwogCQk1MkM5NTJCNzE5QTI4OTg1MDA2
OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkM5NTJCNjE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM2MzQs
NiArMzYzNSw4IEBACiAJCTUyQjMxMEZDMTk3NEFFODcwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4
ZWN1dGVkQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnVuY3Rpb25IYXNFeGVjdXRlZENh
Y2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJCMzEwRkUxOTc1QjQyNDAw
ODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVM
b2NhdGlvbkNhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJCMzExMDAx
OTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5
cGVMb2NhdGlvbkNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyQjUxMDBC
MjY1RUZDRDQwMDg5NzBFNyAvKiBKSVRTaXplU3RhdGlzdGljcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
SVRTaXplU3RhdGlzdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkI1MTAw
QzI2NUVGQ0Q0MDA4OTcwRTcgLyogSklUU2l6ZVN0YXRpc3RpY3MuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSklUU2l6ZVN0YXRpc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkI3MTdCNDFBMDU5N0UxMDA3QUY0RjMgLyogQ29udHJvbEZsb3dQcm9maWxlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb250cm9sRmxvd1Byb2ZpbGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDMDYxMUQxQUE1MUUxQjAwQjRBREJB
IC8qIFJ1bnRpbWVUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJ1bnRp
bWVUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQzU1NTY0MjI0QzJBRTcw
MDk5RjVDQyAvKiBERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1ZhbHVlUmVw
UmVkdWN0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjI4Niw2
ICs2Mjg5LDggQEAKIAkJCQlGRTNBMDZCOTFDMTEwM0Q5MDAzOTBGREQgLyogSklUUmlnaHRTaGlm
dEdlbmVyYXRvci5oICovLAogCQkJCTcyMTMxQkYzMjY1ODdFRjIwMDcxMTRDRiAvKiBKSVRTYWZl
cG9pbnQuY3BwICovLAogCQkJCTcyMTMxQkY1MjY1ODdFRjIwMDcxMTRDRiAvKiBKSVRTYWZlcG9p
bnQuaCAqLywKKwkJCQk1MkI1MTAwQzI2NUVGQ0Q0MDA4OTcwRTcgLyogSklUU2l6ZVN0YXRpc3Rp
Y3MuY3BwICovLAorCQkJCTUyQjUxMDBCMjY1RUZDRDQwMDg5NzBFNyAvKiBKSVRTaXplU3RhdGlz
dGljcy5oICovLAogCQkJCTcyMTMxQkY0MjY1ODdFRjIwMDcxMTRDRiAvKiBKSVRTY2FubmFibGUu
aCAqLywKIAkJCQkwRjc2NkQyNjE1QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3Bw
ICovLAogCQkJCTBGNzY2RDFDMTVBNTAyOEQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oICov
LApAQCAtOTYyMSw2ICs5NjI2LDcgQEAKIAkJCQkwRjJCREMyMTE1MUU4MDNCMDBDRDg5MTAgLyog
REZHSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMwMEI3QzE4QUIxQjE0MDBB
NkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGODk4RjMyMUIyNzY4OUYwMDgzQTMzQyAvKiBERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRp
b25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJCNTEwMEQyNjVFRkNEQjAwODk3MEU3IC8q
IEpJVFNpemVTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM5N0YzRTE4MjAyMTE5
MDAyQzlCMjYgLyogREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFQTBBMzQxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RUM5RENDMTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxl
ci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Ns
b3dQYXRoR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTbG93UGF0aEdlbmVyYXRvci5oCShyZXZpc2lvbiAyNzgxMjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYzLDYgKzYzLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIGNvbnN0IE5vZGVPcmlnaW4mIG9y
aWdpbigpIGNvbnN0ICB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIE5vZGUqIGN1cnJlbnROb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50Tm9kZTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqKSA9IDA7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2
aXNpb24gMjc4MTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJKSVRE
aXZHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRMZWZ0U2hpZnRHZW5lcmF0b3IuaCIKICNpbmNs
dWRlICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSklUU2l6ZVN0YXRpc3Rp
Y3MuaCIKICNpbmNsdWRlICJKU0FycmF5SXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU0FzeW5jRnVu
Y3Rpb24uaCIKICNpbmNsdWRlICJKU0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24uaCIKQEAgLTQwOCwx
NyArNDA5LDM2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFkZFNsb3dQYXRoR2VuZXJhdG8KIAog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6cnVuU2xvd1BhdGhHZW5lcmF0b3JzKFBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlciYgcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKQogeworICAgIGF1dG8gbWFya1Ns
b3dQYXRoSWZOZWVkZWQgPSBbJl0gKE5vZGUqIG5vZGUpIHsKKyAgICAgICAgT3B0aW9uYWw8SklU
U2l6ZVN0YXRpc3RpY3M6Ok1hcmtlcj4gc2l6ZU1hcmtlcjsKKyAgICAgICAgaWYgKE9wdGlvbnM6
OmR1bXBERkdKSVRTaXplU3RhdGlzdGljcygpKSB7CisgICAgICAgICAgICBTdHJpbmcgaWQgPSBt
YWtlU3RyaW5nKCJERkdfc2xvd18iLCBtX2dyYXBoLm9wTmFtZShub2RlLT5vcCgpKSk7CisgICAg
ICAgICAgICBzaXplTWFya2VyID0gdm0oKS5qaXRTaXplU3RhdGlzdGljcy0+bWFya1N0YXJ0KGlk
LCBtX2ppdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNpemVNYXJrZXI7CisgICAgfTsK
KwogICAgIGZvciAoYXV0byYgc2xvd1BhdGhHZW5lcmF0b3IgOiBtX3Nsb3dQYXRoR2VuZXJhdG9y
cykgewogICAgICAgICBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShtX2ppdC5s
YWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSwgc2xvd1BhdGhHZW5lcmF0b3ItPm9yaWdpbigpLnNl
bWFudGljKTsKKyAgICAgICAgYXV0byBzaXplTWFya2VyID0gbWFya1Nsb3dQYXRoSWZOZWVkZWQo
c2xvd1BhdGhHZW5lcmF0b3ItPmN1cnJlbnROb2RlKCkpOworCiAgICAgICAgIHNsb3dQYXRoR2Vu
ZXJhdG9yLT5nZW5lcmF0ZSh0aGlzKTsKKworICAgICAgICBpZiAoc2l6ZU1hcmtlcikKKyAgICAg
ICAgICAgIHZtKCkuaml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtFbmQoV1RGTW92ZSgqc2l6ZU1hcmtl
ciksIG1faml0KTsKICAgICB9CiAgICAgZm9yIChhdXRvJiBzbG93UGF0aExhbWJkYSA6IG1fc2xv
d1BhdGhMYW1iZGFzKSB7CiAgICAgICAgIE5vZGUqIGN1cnJlbnROb2RlID0gc2xvd1BhdGhMYW1i
ZGEuY3VycmVudE5vZGU7CiAgICAgICAgIG1fY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZTsKICAg
ICAgICAgbV9vdXRPZkxpbmVTdHJlYW1JbmRleCA9IHNsb3dQYXRoTGFtYmRhLnN0cmVhbUluZGV4
OwogICAgICAgICBwY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShtX2ppdC5sYWJl
bElnbm9yaW5nV2F0Y2hwb2ludHMoKSwgY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Cisg
ICAgICAgIGF1dG8gc2l6ZU1hcmtlciA9IG1hcmtTbG93UGF0aElmTmVlZGVkKGN1cnJlbnROb2Rl
KTsKKwogICAgICAgICBzbG93UGF0aExhbWJkYS5nZW5lcmF0b3IoKTsKKwogICAgICAgICBtX291
dE9mTGluZVN0cmVhbUluZGV4ID0gV1RGOjpudWxsb3B0OworICAgICAgICBpZiAoc2l6ZU1hcmtl
cikKKyAgICAgICAgICAgIHZtKCkuaml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtFbmQoV1RGTW92ZSgq
c2l6ZU1hcmtlciksIG1faml0KTsKICAgICB9CiB9CiAKQEAgLTIwODgsOCArMjEwOCwxNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAgICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgJnZtKCkuZGlkRW50ZXJWTSk7CiAgICAgICAg
IH0KIAorICAgICAgICBPcHRpb25hbDxKSVRTaXplU3RhdGlzdGljczo6TWFya2VyPiBzaXplTWFy
a2VyOworICAgICAgICBpZiAoT3B0aW9uczo6ZHVtcERGR0pJVFNpemVTdGF0aXN0aWNzKCkpIHsK
KyAgICAgICAgICAgIFN0cmluZyBpZCA9IG1ha2VTdHJpbmcoIkRGR19mYXN0XyIsIG1fZ3JhcGgu
b3BOYW1lKG1fY3VycmVudE5vZGUtPm9wKCkpKTsKKyAgICAgICAgICAgIHNpemVNYXJrZXIgPSB2
bSgpLmppdFNpemVTdGF0aXN0aWNzLT5tYXJrU3RhcnQoaWQsIG1faml0KTsKKyAgICAgICAgfQor
CiAgICAgICAgIGNvbXBpbGUobV9jdXJyZW50Tm9kZSk7CiAKKyAgICAgICAgaWYgKHNpemVNYXJr
ZXIpCisgICAgICAgICAgICB2bSgpLmppdFNpemVTdGF0aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUo
KnNpemVNYXJrZXIpLCBtX2ppdCk7CisKICAgICAgICAgaWYgKGJlbG9uZ3NJbk1pbmlmaWVkR3Jh
cGgobV9jdXJyZW50Tm9kZS0+b3AoKSkpCiAgICAgICAgICAgICBtX21pbmlmaWVkR3JhcGgtPmFw
cGVuZChNaW5pZmllZE5vZGU6OmZyb21Ob2RlKG1fY3VycmVudE5vZGUpKTsKICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNzgxMjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1
LDcgQEAKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkpJVFNpemVTdGF0aXN0
aWNzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50
Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgpA
QCAtMjU5LDYgKzI2MCwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAK
ICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlE
KCk7CiAKKyAgICAgICAgT3B0aW9uYWw8SklUU2l6ZVN0YXRpc3RpY3M6Ok1hcmtlcj4gc2l6ZU1h
cmtlcjsKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVJbmRleCA+PSBzdGFydEJ5dGVjb2RlSW5kZXgg
JiYgT3B0aW9uczo6ZHVtcEJhc2VsaW5lSklUU2l6ZVN0YXRpc3RpY3MoKSkgeworICAgICAgICAg
ICAgU3RyaW5nIGlkID0gbWFrZVN0cmluZygiQmFzZWxpbmVfZmFzdF8iLCBvcGNvZGVOYW1lc1tv
cGNvZGVJRF0pOworICAgICAgICAgICAgc2l6ZU1hcmtlciA9IG1fdm0tPmppdFNpemVTdGF0aXN0
aWNzLT5tYXJrU3RhcnQoaWQsICp0aGlzKTsKKyAgICAgICAgfQorCiAgICAgICAgIGlmIChVTkxJ
S0VMWShtX2NvbXBpbGF0aW9uKSkgewogICAgICAgICAgICAgYWRkNjQoCiAgICAgICAgICAgICAg
ICAgVHJ1c3RlZEltbTMyKDEpLApAQCAtNDgxLDYgKzQ4OCw5IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoc2l6ZU1hcmtlcikKKyAgICAgICAgICAgIG1f
dm0tPmppdFNpemVTdGF0aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCAqdGhp
cyk7CisKICAgICAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0
YUxvZygiQXQgIiwgYnl0ZWNvZGVPZmZzZXQsICI6ICIsIG1fc2xvd0Nhc2VzLnNpemUoKSwgIlxu
Iik7CiAgICAgfQpAQCAtNTMxLDggKzU0MSwxNSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogICAgICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCiAgICAgICAgICAgICBtX2Rp
c2Fzc2VtYmxlci0+c2V0Rm9yQnl0ZWNvZGVTbG93UGF0aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCksIGxhYmVsKCkpOwogCisgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gY3VycmVudEluc3Ry
dWN0aW9uLT5vcGNvZGVJRCgpOworCisgICAgICAgIE9wdGlvbmFsPEpJVFNpemVTdGF0aXN0aWNz
OjpNYXJrZXI+IHNpemVNYXJrZXI7CisgICAgICAgIGlmIChPcHRpb25zOjpkdW1wQmFzZWxpbmVK
SVRTaXplU3RhdGlzdGljcygpKSB7CisgICAgICAgICAgICBTdHJpbmcgaWQgPSBtYWtlU3RyaW5n
KCJCYXNlbGluZV9zbG93XyIsIG9wY29kZU5hbWVzW29wY29kZUlEXSk7CisgICAgICAgICAgICBz
aXplTWFya2VyID0gbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtTdGFydChpZCwgKnRoaXMp
OworICAgICAgICB9CisKICAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnRyYWNlQmFzZWxp
bmVKSVRFeGVjdXRpb24oKSkpIHsKLSAgICAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gY3Vy
cmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwogICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwogICAgICAgICAgICAgcHJvYmVEZWJ1ZyhbPV0g
KFByb2JlOjpDb250ZXh0JiBjdHgpIHsKQEAgLTY0Myw2ICs2NjAsOSBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICAKICAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoanVtcCgpLCAwKTsKICAgICAgICAgKytieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2U7CisK
KyAgICAgICAgaWYgKHNpemVNYXJrZXIpCisgICAgICAgICAgICBtX3ZtLT5qaXRTaXplU3RhdGlz
dGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXplTWFya2VyKSwgKnRoaXMpOwogICAgIH0KIAogICAg
IFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9PSBtX2J5dGVjb2Rl
Q291bnRIYXZpbmdTbG93Q2FzZSk7CkBAIC03MTMsNiArNzMzLDEyIEBAIHZvaWQgSklUOjpjb21w
aWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFw
QnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgwKSkp
OwogCisgICAgT3B0aW9uYWw8SklUU2l6ZVN0YXRpc3RpY3M6Ok1hcmtlcj4gc2l6ZU1hcmtlcjsK
KyAgICBpZiAoT3B0aW9uczo6ZHVtcEJhc2VsaW5lSklUU2l6ZVN0YXRpc3RpY3MoKSkgeworICAg
ICAgICBTdHJpbmcgaWQgPSBtYWtlU3RyaW5nKCJCYXNlbGluZV9wcm9sb2d1ZSIpOworICAgICAg
ICBzaXplTWFya2VyID0gbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtTdGFydChpZCwgKnRo
aXMpOworICAgIH0KKwogICAgIExhYmVsIGVudHJ5TGFiZWwodGhpcyk7CiAgICAgaWYgKG1fZGlz
YXNzZW1ibGVyKQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0U3RhcnRPZkNvZGUoZW50cnlM
YWJlbCk7CkBAIC03NjQsNiArNzkwLDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91
dEZpbmFsaXppbgogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2Nv
ZGVCbG9jay0+aml0VHlwZSgpKSk7CiAKKyAgICBpZiAoc2l6ZU1hcmtlcikKKyAgICAgICAgbV92
bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtFbmQoV1RGTW92ZSgqc2l6ZU1hcmtlciksICp0aGlz
KTsKKwogICAgIHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsKICAgICBwcml2YXRlQ29tcGlsZUxp
bmtQYXNzKCk7CiAgICAgcHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU2l6ZVN0YXRpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU2l6ZVN0YXRpc3RpY3MuY3BwCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU2l6ZVN0YXRpc3RpY3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSklUU2l6
ZVN0YXRpc3RpY3MuaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBl
cnMuaCIKKyNpbmNsdWRlIDx3dGYvQnViYmxlU29ydC5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
SklUU2l6ZVN0YXRpc3RpY3M6Ok1hcmtlciBKSVRTaXplU3RhdGlzdGljczo6bWFya1N0YXJ0KFN0
cmluZyBpZGVudGlmaWVyLCBDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBNYXJrZXIgbWFya2Vy
OworICAgIG1hcmtlci5pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKKyAgICBtYXJrZXIuc3RhcnQg
PSBqaXQubGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCk7CisgICAgcmV0dXJuIG1hcmtlcjsKK30K
Kwordm9pZCBKSVRTaXplU3RhdGlzdGljczo6bWFya0VuZChNYXJrZXIgbWFya2VyLCBDQ2FsbEhl
bHBlcnMmIGppdCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGVuZCA9IGppdC5sYWJlbEln
bm9yaW5nV2F0Y2hwb2ludHMoKTsKKyAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CisgICAgICAgIHNpemVfdCBzaXplID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mPE5vUHRyVGFnPihlbmQpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCkgLSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KG1hcmtlci5zdGFydCkudW50YWdnZWRFeGVj
dXRhYmxlQWRkcmVzczxjaGFyKj4oKTsKKyAgICAgICAgbGlua0J1ZmZlci5hZGRNYWluVGhyZWFk
RmluYWxpemF0aW9uVGFzayhbPV0geworICAgICAgICAgICAgYXV0byYgZW50cnkgPSBtX2RhdGEu
YWRkKG1hcmtlci5pZGVudGlmaWVyLCBFbnRyeSB7IH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAg
ICAgICAgICsrZW50cnkuY291bnQ7CisgICAgICAgICAgICBlbnRyeS50b3RhbEJ5dGVzICs9IHNp
emU7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIEpJVFNpemVTdGF0aXN0aWNzOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJp
bmcsIEVudHJ5Pj4gZW50cmllczsKKworICAgIGZvciAoYXV0byBwYWlyIDogbV9kYXRhKQorICAg
ICAgICBlbnRyaWVzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihwYWlyLmtleSwgcGFpci52YWx1ZSkp
OworCisgICAgV1RGOjpidWJibGVTb3J0KGVudHJpZXMuYmVnaW4oKSwgZW50cmllcy5lbmQoKSwg
W10gKGF1dG8gbGhzLCBhdXRvIHJocykgeworICAgICAgICByZXR1cm4gbGhzLnNlY29uZC50b3Rh
bEJ5dGVzID49IHJocy5zZWNvbmQudG90YWxCeXRlczsKKyAgICB9KTsKKworICAgIG91dC5wcmlu
dGxuKCJKSVQgc2l6ZSBzdGF0aXN0aWNzOiIpOworICAgIG91dC5wcmludGxuKCI9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7CisKKyAgICBmb3IgKGF1dG8m
IGVudHJ5IDogZW50cmllcykgeworICAgICAgICBzaXplX3QgdG90YWxCeXRlcyA9IGVudHJ5LnNl
Y29uZC50b3RhbEJ5dGVzOworICAgICAgICBzaXplX3QgY291bnQgPSBlbnRyeS5zZWNvbmQuY291
bnQ7CisgICAgICAgIGRvdWJsZSBhdmcgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHRvdGFsQnl0ZXMp
IC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb3VudCk7CisgICAgICAgIG91dC5wcmludGxuKGVudHJ5
LmZpcnN0LCAiIHRvdGFsQnl0ZXM6ICIsIHRvdGFsQnl0ZXMsICIgY291bnQ6ICIsIGNvdW50LCAi
IGF2ZzogIiwgYXZnKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU2l6ZVN0
YXRpc3RpY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNp
emVTdGF0aXN0aWNzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTaXplU3RhdGlzdGljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKwor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ0NhbGxI
ZWxwZXJzOworCitjbGFzcyBKSVRTaXplU3RhdGlzdGljcyB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RydWN0IE1hcmtlciB7CisgICAgICAgIFN0cmluZyBp
ZGVudGlmaWVyOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHN0YXJ0OworICAgIH07CisK
KyAgICBNYXJrZXIgbWFya1N0YXJ0KFN0cmluZyBpZGVudGlmaWVyLCBDQ2FsbEhlbHBlcnMmKTsK
KyAgICB2b2lkIG1hcmtFbmQoTWFya2VyLCBDQ2FsbEhlbHBlcnMmKTsKKworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAg
IHN0cnVjdCBFbnRyeSB7CisgICAgICAgIHNpemVfdCBjb3VudCB7IDAgfTsKKyAgICAgICAgc2l6
ZV90IHRvdGFsQnl0ZXMgeyAwIH07CisgICAgfTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBFbnRy
eT4gbV9kYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI3ODEyNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NjgsNiArNTY4LDkgQEAgdm9pZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRP
cHRpb25zKAogCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VWZXJpZnlHQygpKQogICAgICAgICBP
cHRpb25zOjp2ZXJpZnlHQygpID0gdHJ1ZTsKKworICAgIGlmIChPcHRpb25zOjpkdW1wQmFzZWxp
bmVKSVRTaXplU3RhdGlzdGljcygpIHx8IE9wdGlvbnM6OmR1bXBERkdKSVRTaXplU3RhdGlzdGlj
cygpKQorICAgICAgICBPcHRpb25zOjp1c2VKSVRTaXplU3RhdGlzdGljcygpID0gdHJ1ZTsKIH0K
IAogaW5saW5lIHZvaWQqIE9wdGlvbnM6OmFkZHJlc3NPZk9wdGlvbihPcHRpb25zOjpJRCBpZCkK
QEAgLTEwMzIsNiArMTAzNSwxMCBAQCB2b2lkIE9wdGlvbnM6OmVuc3VyZU9wdGlvbnNBcmVDb2hl
cmVudCgpCiAgICAgICAgIGNvaGVyZW50ID0gZmFsc2U7CiAgICAgICAgIGRhdGFMb2coIklOQ09I
RVJFTlQgT1BUSU9OUzogYXQgbGVhc3Qgb25lIG9mIHVzZVdhc21MTEludCBvciB1c2VCQlFKSVQg
bXVzdCBiZSB0cnVlXG4iKTsKICAgICB9CisgICAgaWYgKE9wdGlvbnM6OnVzZUpJVFNpemVTdGF0
aXN0aWNzKCkgJiYgIShPcHRpb25zOjpkdW1wQmFzZWxpbmVKSVRTaXplU3RhdGlzdGljcygpIHx8
IE9wdGlvbnM6OmR1bXBERkdKSVRTaXplU3RhdGlzdGljcygpKSkgeworICAgICAgICBjb2hlcmVu
dCA9IGZhbHNlOworICAgICAgICBkYXRhTG9nTG4oIklOQ09IRVJFTlQgT1BUSU9OUzogZHVtcEJh
c2VsaW5lSklUU2l6ZVN0YXRpc3RpY3Mgb3IgZHVtcERGR0pJVFNpemVTdGF0aXN0aWNzIG11c3Qg
YmUgdHJ1ZSBpZiB1c2VKSVRTaXplU3RhdGlzdGljcyBpcyB0cnVlIik7CisgICAgfQogICAgIGlm
ICghY29oZXJlbnQpCiAgICAgICAgIENSQVNIKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI3ODEyNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTUxNSw2ICs1MTUsOSBAQCBKU19FWFBPUlRfUFJJVkFURSBib29sIGNhblVzZUpJVENhZ2UoKTsK
ICAgICB2KERvdWJsZSwgYWxsb3dIb2lzdGluZ0xJQ01Qcm9iYWJpbGl0eSwgMC41LCBOb3JtYWws
IG51bGxwdHIpIFwKICAgICB2KEJvb2wsIGV4cG9zZUN1c3RvbVNldHRlcnNPbkdsb2JhbE9iamVj
dEZvclRlc3RpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHVzZUpJ
VENhZ2UsIGNhblVzZUpJVENhZ2UoKSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCB1
c2VKSVRTaXplU3RhdGlzdGljcywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9v
bCwgZHVtcEJhc2VsaW5lSklUU2l6ZVN0YXRpc3RpY3MsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIp
IFwKKyAgICB2KEJvb2wsIGR1bXBERkdKSVRTaXplU3RhdGlzdGljcywgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIFwKICAgICAvKiBGZWF0dXJlIEZsYWdzICovXAogICAgIFwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDI3ODEyNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAs
NiArODAsNyBAQAogI2luY2x1ZGUgIklzb0lubGluZWRIZWFwQ2VsbFR5cGUuaCIKICNpbmNsdWRl
ICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9uTGlzdC5oIgorI2luY2x1ZGUgIkpJ
VFNpemVTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiSklUVGh1bmtzLmgiCiAjaW5jbHVkZSAiSklU
V29ya2xpc3QuaCIKICNpbmNsdWRlICJKU0FQSUdsb2JhbE9iamVjdC5oIgpAQCAtNTcyLDYgKzU3
Myw5IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSwKICAgICBpZiAo
T3B0aW9uczo6Zm9yY2VEZWJ1Z2dlckJ5dGVjb2RlR2VuZXJhdGlvbigpIHx8IE9wdGlvbnM6OmFs
d2F5c1VzZVNoYWRvd0NoaWNrZW4oKSkKICAgICAgICAgZW5zdXJlU2hhZG93Q2hpY2tlbigpOwog
CisgICAgaWYgKE9wdGlvbnM6OnVzZUpJVFNpemVTdGF0aXN0aWNzKCkpCisgICAgICAgIGppdFNp
emVTdGF0aXN0aWNzID0gbWFrZVVuaXF1ZTxKSVRTaXplU3RhdGlzdGljcz4oKTsKKwogICAgIFZN
SW5zcGVjdG9yOjppbnN0YW5jZSgpLmFkZCh0aGlzKTsKIAogICAgIGlmICghZ19qc2NDb25maWcu
ZGlzYWJsZWRGcmVlemluZ0ZvclRlc3RpbmcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgJKHJldmlzaW9uIDI3ODEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw2ICsxNjEsNyBAQCBjbGFzcyBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TWVtb3J5OwogY2xhc3MgSlNXZWJBc3Nl
bWJseU1vZHVsZTsKIGNsYXNzIEpTV2ViQXNzZW1ibHlUYWJsZTsKK2NsYXNzIEpJVFNpemVTdGF0
aXN0aWNzOwogY2xhc3MgSklUVGh1bmtzOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
Y2xhc3MgTmF0aXZlRXhlY3V0YWJsZTsKQEAgLTQzNSw2ICs0MzYsMTAgQEAgcHVibGljOgogICAg
IHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IHdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
SGVhcENlbGxUeXBlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IHdlYkFz
c2VtYmx5VGFibGVIZWFwQ2VsbFR5cGU7CiAjZW5kaWYKKworI2lmIEVOQUJMRShKSVQpCisgICAg
c3RkOjp1bmlxdWVfcHRyPEpJVFNpemVTdGF0aXN0aWNzPiBqaXRTaXplU3RhdGlzdGljczsKKyNl
bmRpZgogICAgIAogICAgIENvbXBsZXRlU3Vic3BhY2UgcHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlh
cnlTcGFjZTsgLy8gVHlwZWQgYXJyYXlzLCBzdHJpbmdzLCBiaXR2ZWN0b3JzLCBldGMgZ28gaGVy
ZS4KICAgICBDb21wbGV0ZVN1YnNwYWNlIGpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlOyAv
LyBCdXR0ZXJmbGllcywgYXJyYXlzIG9mIEpTVmFsdWVzLCBldGMgZ28gaGVyZS4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHJldmlzaW9uIDI3ODEy
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkZyYW1lVHJhY2Vycy5oIgogI2lu
Y2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisj
aW5jbHVkZSAiSklUU2l6ZVN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTT05PYmplY3QuaCIKQEAgLTE5OTEsNiAr
MTk5Miw4IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW8KIHN0YXRp
YyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNHaWdhY2FnZUVuYWJsZWQpOwog
c3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Ub1VuY2FjaGVhYmxlRGlj
dGlvbmFyeSk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbklzUHJp
dmF0ZVN5bWJvbCk7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkpJ
VFNpemVTdGF0aXN0aWNzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0
aW9uRHVtcEpJVFNpemVTdGF0aXN0aWNzKTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTRG9sbGFyVk06
OnNfaW5mbyA9IHsgIkRvbGxhclZNIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU0RvbGxhclZNKSB9OwogCkBAIC0zNTkxLDYgKzM1OTQsMzMg
QEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNQcml2YQogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGFzU3ltYm9sKGNhbGxGcmFtZS0+YXJndW1lbnQoMCkp
LT51aWQoKS5pc1ByaXZhdGUoKSkpOwogfQogCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVu
Y3Rpb25KSVRTaXplU3RhdGlzdGljcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSopKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisKKyAgICBpZiAoIXZtLmppdFNpemVTdGF0
aXN0aWNzKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
CisgICAgV1RGOjpTdHJpbmdQcmludFN0cmVhbSBzdHJlYW07CisgICAgc3RyZWFtLnByaW50KCp2
bS5qaXRTaXplU3RhdGlzdGljcyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmlu
Zyh2bSwgc3RyZWFtLnRvU3RyaW5nKCkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGZ1bmN0aW9uRHVtcEpJVFNpemVTdGF0aXN0aWNzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKikpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29w
ZTsKKworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIGlmICghdm0uaml0
U2l6ZVN0YXRpc3RpY3MpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisKKyAgICBkYXRhTG9nTG4oKnZtLmppdFNpemVTdGF0aXN0aWNzKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCiBjb25zdGV4cHIgdW5zaWdu
ZWQganNEb2xsYXJWTVByb3BlcnR5QXR0cmlidXRlcyA9IFByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpE
b250RGVsZXRlOwogCiB2b2lkIEpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKQEAg
LTM3NDgsNiArMzc3OCw5IEBAIHZvaWQgSlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
KQogCiAgICAgYWRkRnVuY3Rpb24odm0sICJpc1ByaXZhdGVTeW1ib2wiLCBmdW5jdGlvbklzUHJp
dmF0ZVN5bWJvbCwgMSk7CiAKKyAgICBhZGRGdW5jdGlvbih2bSwgImppdFNpemVTdGF0aXN0aWNz
IiwgZnVuY3Rpb25KSVRTaXplU3RhdGlzdGljcywgMSk7CisgICAgYWRkRnVuY3Rpb24odm0sICJk
dW1wSklUU2l6ZVN0YXRpc3RpY3MiLCBmdW5jdGlvbkR1bXBKSVRTaXplU3RhdGlzdGljcywgMSk7
CisKICAgICBtX29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1
c1N0cnVjdHVyZS5zZXQodm0sIHRoaXMsIE9iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRD
b3JyZWN0U2xvdFN0YXR1czo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGpzTnVs
bCgpKSk7CiB9CiAK
</data>
<flag name="review"
          id="451046"
          type_id="1"
          status="+"
          setter="rmorisset"
    />
    <flag name="commit-queue"
          id="451048"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429933</attachid>
            <date>2021-05-27 14:58:03 -0700</date>
            <delta_ts>2021-05-27 15:37:16 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>24888</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4MTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDIxLTA1LTI2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCB0aGUgYWJpbGl0eSB0byBkdW1wIHN0YXRpc3RpY3MgYWJvdXQgY3VtdWxhdGl2ZSBjb3Vu
dHMgYW5kIGNvZGUgc2l6ZXMgb2YgQmFzZWxpbmUgSklUIG9wY29kZXMgYW5kIERGRyBub2Rlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MjAwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgUm9iaW4gTW9yaXNzZXQuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGRmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpE
Rkc6OlNsb3dQYXRoR2VuZXJhdG9yOjpjdXJyZW50Tm9kZSBjb25zdCk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6cnVuU2xvd1BhdGhHZW5lcmF0b3JzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jayk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbmcpOgorICAgICAgICAqIGppdC9KSVRTaXplU3RhdGlzdGlj
cy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKSVRTaXplU3RhdGlzdGljczo6bWFya1N0YXJ0
KToKKyAgICAgICAgKEpTQzo6SklUU2l6ZVN0YXRpc3RpY3M6Om1hcmtFbmQpOgorICAgICAgICAo
SlNDOjpKSVRTaXplU3RhdGlzdGljczo6ZHVtcCBjb25zdCk6CisgICAgICAgICogaml0L0pJVFNp
emVTdGF0aXN0aWNzLmg6IEFkZGVkLgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChydW5K
U0MpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlv
bnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjpl
bnN1cmVPcHRpb25zQXJlQ29oZXJlbnQpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3Qu
aDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAg
ICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5jcHA6Cisg
ICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgIChKU0M6OkpT
RG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKToKKwogMjAyMS0wNS0yNiAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBVbmNoZWNrZWRMb2NrIGV2ZW4gbGVzcyBp
biBKYXZhU2NyaXB0Q29yZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNp
b24gMjc4MTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC02NjIsNiArNjYyLDcgQEAgaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAogaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCiBqaXQvSklUUmlnaHRTaGlmdEdlbmVyYXRvci5j
cHAKIGppdC9KSVRTYWZlcG9pbnQuY3BwCitqaXQvSklUU2l6ZVN0YXRpc3RpY3MuY3BwCiBqaXQv
SklUU3R1YlJvdXRpbmUuY3BwCiBqaXQvSklUU3ViR2VuZXJhdG9yLmNwcAogaml0L0pJVFRodW5r
cy5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyNzgxMjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBA
QAogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAi
SklUT3BlcmF0aW9uTGlzdC5oIgorI2luY2x1ZGUgIkpJVFNpemVTdGF0aXN0aWNzLmgiCiAjaW5j
bHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJK
U0JpZ0ludC5oIgpAQCAtMzUxMyw2ICszNTE0LDExIEBAIGludCBydW5KU0MoY29uc3QgQ29tbWFu
ZExpbmUmIG9wdGlvbnMsIGIKICNlbmRpZgogICAgIH0KIAorI2lmIEVOQUJMRShKSVQpCisgICAg
aWYgKHZtLmppdFNpemVTdGF0aXN0aWNzKQorICAgICAgICBkYXRhTG9nTG4oKnZtLmppdFNpemVT
dGF0aXN0aWNzKTsKKyNlbmRpZgorCiAgICAgdm0uY29kZUNhY2hlKCktPndyaXRlKHZtKTsKIAog
ICAgIGlmIChvcHRpb25zLm1fZGVzdHJveVZNIHx8IGlzV29ya2VyKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc4MTI2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTg5NCw2ICs4OTQsNyBAQAogCQk1Mjg0N0FEQzIxRkZCODY5MDA2MUE5REIgLyog
V2FzbUFpcklSR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1Mjg0N0FEQTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJhdG9y
LmggKi87IH07CiAJCTUyQjMxMEZCMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1
dGVkQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUyQjMxMEZBMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkIzMTEw
MTE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjMxMTAwMTk3NUI0NjcwMDgwODU3QyAv
KiBUeXBlTG9jYXRpb25DYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTUyQjUxMDBEMjY1RUZDREIwMDg5NzBFNyAvKiBKSVRTaXplU3RhdGlz
dGljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJC
NTEwMEIyNjVFRkNENDAwODk3MEU3IC8qIEpJVFNpemVTdGF0aXN0aWNzLmggKi87IH07CiAJCTUy
QzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDMDYxMUQxQUE1MUUxQjAwQjRBREJBIC8q
IFJ1bnRpbWVUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNTJDNTU1NjYyMjRDMkFFQTAwOTlGNUNDIC8qIERGR1ZhbHVlUmVwUmVkdWN0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUy
QzU1NTY1MjI0QzJBRTcwMDk5RjVDQyAvKiBERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmggKi87
IH07CiAJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI2MTlBMjg5ODUw
MDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMzYzNCw2ICszNjM1LDggQEAKIAkJNTJCMzEwRkMxOTc0QUU4
NzAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MkIzMTBGRTE5NzVCNDI0MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZUxvY2F0aW9uQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MkIzMTEwMDE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9u
Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZUxvY2F0aW9uQ2FjaGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTJCNTEwMEIyNjVFRkNENDAwODk3MEU3IC8qIEpJVFNpemVTdGF0
aXN0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFNpemVTdGF0aXN0aWNzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUyQjUxMDBDMjY1RUZDRDQwMDg5NzBFNyAvKiBKSVRTaXplU3Rh
dGlzdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRTaXplU3RhdGlzdGljcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjcxN0I0MUEwNTk3RTEwMDdBRjRGMyAvKiBD
b250cm9sRmxvd1Byb2ZpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvbnRyb2xGbG93UHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUnVudGltZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTJDNTU1NjQyMjRDMkFFNzAwOTlGNUNDIC8qIERGR1ZhbHVlUmVwUmVkdWN0aW9u
UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5j
cHA7IHBhdGggPSBkZmcvREZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC02Mjg2LDYgKzYyODksOCBAQAogCQkJCUZFM0EwNkI5MUMxMTAz
RDkwMDM5MEZERCAvKiBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmggKi8sCiAJCQkJNzIxMzFCRjMy
NjU4N0VGMjAwNzExNENGIC8qIEpJVFNhZmVwb2ludC5jcHAgKi8sCiAJCQkJNzIxMzFCRjUyNjU4
N0VGMjAwNzExNENGIC8qIEpJVFNhZmVwb2ludC5oICovLAorCQkJCTUyQjUxMDBDMjY1RUZDRDQw
MDg5NzBFNyAvKiBKSVRTaXplU3RhdGlzdGljcy5jcHAgKi8sCisJCQkJNTJCNTEwMEIyNjVFRkNE
NDAwODk3MEU3IC8qIEpJVFNpemVTdGF0aXN0aWNzLmggKi8sCiAJCQkJNzIxMzFCRjQyNjU4N0VG
MjAwNzExNENGIC8qIEpJVFNjYW5uYWJsZS5oICovLAogCQkJCTBGNzY2RDI2MTVBOENDMUIwMDhG
MzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAgKi8sCiAJCQkJMEY3NjZEMUMxNUE1MDI4RDAwOEYz
NjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggKi8sCkBAIC05NjIxLDYgKzk2MjYsNyBAQAogCQkJCTBG
MkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMzAwQjdDMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5p
bmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4OThGMzIxQjI3Njg5RjAwODNBMzNDIC8q
IERGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
MkI1MTAwRDI2NUVGQ0RCMDA4OTcwRTcgLyogSklUU2l6ZVN0YXRpc3RpY3MuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQzk3RjNFMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Qb2lu
dEluamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEzNDE3MEQ0MEJGMDBC
QjcyMkMgLyogREZHSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQ0MxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmgJKHJldmlz
aW9uIDI3ODEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5l
cmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgY29uc3QgTm9kZU9yaWdpbiYgb3JpZ2luKCkgY29uc3QgIHsgcmV0dXJuIG1fb3JpZ2lu
OyB9CisgICAgTm9kZSogY3VycmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnROb2Rl
OyB9CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVj
dWxhdGl2ZUpJVCopID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyNzgxMjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgs
NiArNDgsNyBAQAogI2luY2x1ZGUgIkpJVERpdkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVExl
ZnRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIK
KyNpbmNsdWRlICJKSVRTaXplU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIkpTQXJyYXlJdGVyYXRv
ci5oIgogI2luY2x1ZGUgIkpTQXN5bmNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQXN5bmNHZW5l
cmF0b3JGdW5jdGlvbi5oIgpAQCAtNDA4LDE3ICs0MDksMzYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6YWRkU2xvd1BhdGhHZW5lcmF0bwogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpydW5TbG93UGF0
aEdlbmVyYXRvcnMoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiBwY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIpCiB7CisgICAgYXV0byBtYXJrU2xvd1BhdGhJZk5lZWRlZCA9IFsmXSAoTm9kZSogbm9k
ZSkgeworICAgICAgICBPcHRpb25hbDxKSVRTaXplU3RhdGlzdGljczo6TWFya2VyPiBzaXplTWFy
a2VyOworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERGR0pJVFNpemVTdGF0aXN0
aWNzKCkpKSB7CisgICAgICAgICAgICBTdHJpbmcgaWQgPSBtYWtlU3RyaW5nKCJERkdfc2xvd18i
LCBtX2dyYXBoLm9wTmFtZShub2RlLT5vcCgpKSk7CisgICAgICAgICAgICBzaXplTWFya2VyID0g
dm0oKS5qaXRTaXplU3RhdGlzdGljcy0+bWFya1N0YXJ0KGlkLCBtX2ppdCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHNpemVNYXJrZXI7CisgICAgfTsKKwogICAgIGZvciAoYXV0byYgc2xv
d1BhdGhHZW5lcmF0b3IgOiBtX3Nsb3dQYXRoR2VuZXJhdG9ycykgewogICAgICAgICBwY1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShtX2ppdC5sYWJlbElnbm9yaW5nV2F0Y2hwb2lu
dHMoKSwgc2xvd1BhdGhHZW5lcmF0b3ItPm9yaWdpbigpLnNlbWFudGljKTsKKyAgICAgICAgYXV0
byBzaXplTWFya2VyID0gbWFya1Nsb3dQYXRoSWZOZWVkZWQoc2xvd1BhdGhHZW5lcmF0b3ItPmN1
cnJlbnROb2RlKCkpOworCiAgICAgICAgIHNsb3dQYXRoR2VuZXJhdG9yLT5nZW5lcmF0ZSh0aGlz
KTsKKworICAgICAgICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikpCisgICAgICAgICAgICB2bSgp
LmppdFNpemVTdGF0aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCBtX2ppdCk7
CiAgICAgfQogICAgIGZvciAoYXV0byYgc2xvd1BhdGhMYW1iZGEgOiBtX3Nsb3dQYXRoTGFtYmRh
cykgewogICAgICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IHNsb3dQYXRoTGFtYmRhLmN1cnJlbnRO
b2RlOwogICAgICAgICBtX2N1cnJlbnROb2RlID0gY3VycmVudE5vZGU7CiAgICAgICAgIG1fb3V0
T2ZMaW5lU3RyZWFtSW5kZXggPSBzbG93UGF0aExhbWJkYS5zdHJlYW1JbmRleDsKICAgICAgICAg
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obV9qaXQubGFiZWxJZ25vcmluZ1dh
dGNocG9pbnRzKCksIGN1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBhdXRv
IHNpemVNYXJrZXIgPSBtYXJrU2xvd1BhdGhJZk5lZWRlZChjdXJyZW50Tm9kZSk7CisKICAgICAg
ICAgc2xvd1BhdGhMYW1iZGEuZ2VuZXJhdG9yKCk7CisKICAgICAgICAgbV9vdXRPZkxpbmVTdHJl
YW1JbmRleCA9IFdURjo6bnVsbG9wdDsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIp
KQorICAgICAgICAgICAgdm0oKS5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpz
aXplTWFya2VyKSwgbV9qaXQpOwogICAgIH0KIH0KIApAQCAtMjA4OCw4ICsyMTA4LDE3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sKICAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmdm0oKS5kaWRFbnRlclZNKTsKICAgICAgICAg
fQogCisgICAgICAgIE9wdGlvbmFsPEpJVFNpemVTdGF0aXN0aWNzOjpNYXJrZXI+IHNpemVNYXJr
ZXI7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wREZHSklUU2l6ZVN0YXRpc3Rp
Y3MoKSkpIHsKKyAgICAgICAgICAgIFN0cmluZyBpZCA9IG1ha2VTdHJpbmcoIkRGR19mYXN0XyIs
IG1fZ3JhcGgub3BOYW1lKG1fY3VycmVudE5vZGUtPm9wKCkpKTsKKyAgICAgICAgICAgIHNpemVN
YXJrZXIgPSB2bSgpLmppdFNpemVTdGF0aXN0aWNzLT5tYXJrU3RhcnQoaWQsIG1faml0KTsKKyAg
ICAgICAgfQorCiAgICAgICAgIGNvbXBpbGUobV9jdXJyZW50Tm9kZSk7CiAKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNpemVNYXJrZXIpKQorICAgICAgICAgICAgdm0oKS5qaXRTaXplU3RhdGlzdGlj
cy0+bWFya0VuZChXVEZNb3ZlKCpzaXplTWFya2VyKSwgbV9qaXQpOworCiAgICAgICAgIGlmIChi
ZWxvbmdzSW5NaW5pZmllZEdyYXBoKG1fY3VycmVudE5vZGUtPm9wKCkpKQogICAgICAgICAgICAg
bV9taW5pZmllZEdyYXBoLT5hcHBlbmQoTWluaWZpZWROb2RlOjpmcm9tTm9kZShtX2N1cnJlbnRO
b2RlKSk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNp
b24gMjc4MTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCiAj
aW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKKyNpbmNs
dWRlICJKSVRTaXplU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNs
dWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIk1vZHVsZVBy
b2dyYW1Db2RlQmxvY2suaCIKQEAgLTI1OSw2ICsyNjAsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogCiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gY3VycmVudElu
c3RydWN0aW9uLT5vcGNvZGVJRCgpOwogCisgICAgICAgIE9wdGlvbmFsPEpJVFNpemVTdGF0aXN0
aWNzOjpNYXJrZXI+IHNpemVNYXJrZXI7CisgICAgICAgIGlmIChVTkxJS0VMWShtX2J5dGVjb2Rl
SW5kZXggPj0gc3RhcnRCeXRlY29kZUluZGV4ICYmIE9wdGlvbnM6OmR1bXBCYXNlbGluZUpJVFNp
emVTdGF0aXN0aWNzKCkpKSB7CisgICAgICAgICAgICBTdHJpbmcgaWQgPSBtYWtlU3RyaW5nKCJC
YXNlbGluZV9mYXN0XyIsIG9wY29kZU5hbWVzW29wY29kZUlEXSk7CisgICAgICAgICAgICBzaXpl
TWFya2VyID0gbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtTdGFydChpZCwgKnRoaXMpOwor
ICAgICAgICB9CisKICAgICAgICAgaWYgKFVOTElLRUxZKG1fY29tcGlsYXRpb24pKSB7CiAgICAg
ICAgICAgICBhZGQ2NCgKICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoMSksCkBAIC00ODEs
NiArNDg4LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlm
IChVTkxJS0VMWShzaXplTWFya2VyKSkKKyAgICAgICAgICAgIG1fdm0tPmppdFNpemVTdGF0aXN0
aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCAqdGhpcyk7CisKICAgICAgICAgaWYg
KEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgYnl0ZWNv
ZGVPZmZzZXQsICI6ICIsIG1fc2xvd0Nhc2VzLnNpemUoKSwgIlxuIik7CiAgICAgfQpAQCAtNTMx
LDggKzU0MSwxNSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAg
ICBpZiAobV9kaXNhc3NlbWJsZXIpCiAgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9y
Qnl0ZWNvZGVTbG93UGF0aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkpOwogCisg
ICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgp
OworCisgICAgICAgIE9wdGlvbmFsPEpJVFNpemVTdGF0aXN0aWNzOjpNYXJrZXI+IHNpemVNYXJr
ZXI7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wQmFzZWxpbmVKSVRTaXplU3Rh
dGlzdGljcygpKSkgeworICAgICAgICAgICAgU3RyaW5nIGlkID0gbWFrZVN0cmluZygiQmFzZWxp
bmVfc2xvd18iLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0pOworICAgICAgICAgICAgc2l6ZU1hcmtl
ciA9IG1fdm0tPmppdFNpemVTdGF0aXN0aWNzLT5tYXJrU3RhcnQoaWQsICp0aGlzKTsKKyAgICAg
ICAgfQorCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhl
Y3V0aW9uKCkpKSB7Ci0gICAgICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+b3Bjb2RlSUQoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6
Q29udGV4dCYgY3R4KSB7CkBAIC02NDMsNiArNjYwLDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKCkKICAgICAgICAgCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAo
KSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOworCisgICAgICAg
IGlmIChVTkxJS0VMWShzaXplTWFya2VyKSkKKyAgICAgICAgICAgIG1fdm0tPmppdFNpemVTdGF0
aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCAqdGhpcyk7CiAgICAgfQogCiAg
ICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID09IG1fYnl0ZWNv
ZGVDb3VudEhhdmluZ1Nsb3dDYXNlKTsKQEAgLTcxMyw2ICs3MzMsMTIgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIAogICAgIG1fcGNUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDAp
KSk7CiAKKyAgICBPcHRpb25hbDxKSVRTaXplU3RhdGlzdGljczo6TWFya2VyPiBzaXplTWFya2Vy
OworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wQmFzZWxpbmVKSVRTaXplU3RhdGlzdGlj
cygpKSkgeworICAgICAgICBTdHJpbmcgaWQgPSBtYWtlU3RyaW5nKCJCYXNlbGluZV9wcm9sb2d1
ZSIpOworICAgICAgICBzaXplTWFya2VyID0gbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtT
dGFydChpZCwgKnRoaXMpOworICAgIH0KKwogICAgIExhYmVsIGVudHJ5TGFiZWwodGhpcyk7CiAg
ICAgaWYgKG1fZGlzYXNzZW1ibGVyKQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0U3RhcnRP
ZkNvZGUoZW50cnlMYWJlbCk7CkBAIC03NjQsNiArNzkwLDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2Rl
Ojppc0pJVChtX2NvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkoc2l6
ZU1hcmtlcikpCisgICAgICAgIG1fdm0tPmppdFNpemVTdGF0aXN0aWNzLT5tYXJrRW5kKFdURk1v
dmUoKnNpemVNYXJrZXIpLCAqdGhpcyk7CisKICAgICBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7
CiAgICAgcHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpOwogICAgIHByaXZhdGVDb21waWxlU2xvd0Nh
c2VzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNpemVTdGF0aXN0aWNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNpemVTdGF0
aXN0aWNzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFNpemVTdGF0aXN0aWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkpJVFNpemVTdGF0aXN0aWNzLmgiCisKKyNpZiBFTkFCTEUoSklUKQor
CisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSA8d3RmL0J1YmJsZVNvcnQuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK0pJVFNpemVTdGF0aXN0aWNzOjpNYXJrZXIgSklUU2l6ZVN0
YXRpc3RpY3M6Om1hcmtTdGFydChTdHJpbmcgaWRlbnRpZmllciwgQ0NhbGxIZWxwZXJzJiBqaXQp
Cit7CisgICAgTWFya2VyIG1hcmtlcjsKKyAgICBtYXJrZXIuaWRlbnRpZmllciA9IGlkZW50aWZp
ZXI7CisgICAgbWFya2VyLnN0YXJ0ID0gaml0LmxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpOwor
ICAgIHJldHVybiBtYXJrZXI7Cit9CisKK3ZvaWQgSklUU2l6ZVN0YXRpc3RpY3M6Om1hcmtFbmQo
TWFya2VyIG1hcmtlciwgQ0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAgQ0NhbGxIZWxwZXJzOjpM
YWJlbCBlbmQgPSBqaXQubGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCk7CisgICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICBzaXplX3Qgc2l6
ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4oZW5kKS51bnRhZ2dlZEV4ZWN1dGFi
bGVBZGRyZXNzPGNoYXIqPigpIC0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihtYXJr
ZXIuc3RhcnQpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CisgICAgICAgIGxp
bmtCdWZmZXIuYWRkTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2soWz1dIHsKKyAgICAgICAgICAg
IGF1dG8mIGVudHJ5ID0gbV9kYXRhLmFkZChtYXJrZXIuaWRlbnRpZmllciwgRW50cnkgeyB9KS5p
dGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICArK2VudHJ5LmNvdW50OworICAgICAgICAgICAg
ZW50cnkudG90YWxCeXRlcyArPSBzaXplOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9p
ZCBKSVRTaXplU3RhdGlzdGljczo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBFbnRyeT4+IGVudHJpZXM7CisKKyAgICBmb3IgKGF1
dG8gcGFpciA6IG1fZGF0YSkKKyAgICAgICAgZW50cmllcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIo
cGFpci5rZXksIHBhaXIudmFsdWUpKTsKKworICAgIHN0ZDo6c29ydChlbnRyaWVzLmJlZ2luKCks
IGVudHJpZXMuZW5kKCksIFtdIChjb25zdCBhdXRvJiBsaHMsIGNvbnN0IGF1dG8mIHJocykgewor
ICAgICAgICByZXR1cm4gbGhzLnNlY29uZC50b3RhbEJ5dGVzID4gcmhzLnNlY29uZC50b3RhbEJ5
dGVzOworICAgIH0pOworCisgICAgb3V0LnByaW50bG4oIkpJVCBzaXplIHN0YXRpc3RpY3M6Iik7
CisgICAgb3V0LnByaW50bG4oIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0iKTsKKworICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKSB7CisgICAgICAg
IHNpemVfdCB0b3RhbEJ5dGVzID0gZW50cnkuc2Vjb25kLnRvdGFsQnl0ZXM7CisgICAgICAgIHNp
emVfdCBjb3VudCA9IGVudHJ5LnNlY29uZC5jb3VudDsKKyAgICAgICAgZG91YmxlIGF2ZyA9IHN0
YXRpY19jYXN0PGRvdWJsZT4odG90YWxCeXRlcykgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvdW50
KTsKKyAgICAgICAgb3V0LnByaW50bG4oZW50cnkuZmlyc3QsICIgdG90YWxCeXRlczogIiwgdG90
YWxCeXRlcywgIiBjb3VudDogIiwgY291bnQsICIgYXZnOiAiLCBhdmcpOworICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTaXplU3RhdGlzdGljcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU2l6ZVN0YXRpc3RpY3MuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNpemVTdGF0aXN0aWNzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorCisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEpJVCkKKworI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK2NsYXNzIEpJVFNpemVTdGF0
aXN0aWNzIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdHJ1
Y3QgTWFya2VyIHsKKyAgICAgICAgU3RyaW5nIGlkZW50aWZpZXI7CisgICAgICAgIENDYWxsSGVs
cGVyczo6TGFiZWwgc3RhcnQ7CisgICAgfTsKKworICAgIE1hcmtlciBtYXJrU3RhcnQoU3RyaW5n
IGlkZW50aWZpZXIsIENDYWxsSGVscGVycyYpOworICAgIHZvaWQgbWFya0VuZChNYXJrZXIsIEND
YWxsSGVscGVycyYpOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisKKyAgICB2b2lkIHJlc2V0KCkgeyBtX2RhdGEuY2xlYXIoKTsgfQorCitw
cml2YXRlOgorICAgIHN0cnVjdCBFbnRyeSB7CisgICAgICAgIHNpemVfdCBjb3VudCB7IDAgfTsK
KyAgICAgICAgc2l6ZV90IHRvdGFsQnl0ZXMgeyAwIH07CisgICAgfTsKKworICAgIEhhc2hNYXA8
U3RyaW5nLCBFbnRyeT4gbV9kYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShy
ZXZpc2lvbiAyNzgxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTUsNiArNTE1LDggQEAgSlNfRVhQT1JUX1BSSVZB
VEUgYm9vbCBjYW5Vc2VKSVRDYWdlKCk7CiAgICAgdihEb3VibGUsIGFsbG93SG9pc3RpbmdMSUNN
UHJvYmFiaWxpdHksIDAuNSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCBleHBvc2VD
dXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nLCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihCb29sLCB1c2VKSVRDYWdlLCBjYW5Vc2VKSVRDYWdlKCksIE5vcm1hbCwg
bnVsbHB0cikgXAorICAgIHYoQm9vbCwgZHVtcEJhc2VsaW5lSklUU2l6ZVN0YXRpc3RpY3MsIGZh
bHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIGR1bXBERkdKSVRTaXplU3RhdGlz
dGljcywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAgICAvKiBGZWF0dXJlIEZs
YWdzICovXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJl
dmlzaW9uIDI3ODEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsNyBAQAogI2luY2x1ZGUgIklzb0lubGluZWRIZWFw
Q2VsbFR5cGUuaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9u
TGlzdC5oIgorI2luY2x1ZGUgIkpJVFNpemVTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiSklUVGh1
bmtzLmgiCiAjaW5jbHVkZSAiSklUV29ya2xpc3QuaCIKICNpbmNsdWRlICJKU0FQSUdsb2JhbE9i
amVjdC5oIgpAQCAtNTcyLDYgKzU3MywxMSBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5
cGUgaGVhcFR5cGUsCiAgICAgaWYgKE9wdGlvbnM6OmZvcmNlRGVidWdnZXJCeXRlY29kZUdlbmVy
YXRpb24oKSB8fCBPcHRpb25zOjphbHdheXNVc2VTaGFkb3dDaGlja2VuKCkpCiAgICAgICAgIGVu
c3VyZVNoYWRvd0NoaWNrZW4oKTsKIAorI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKE9wdGlvbnM6
OmR1bXBCYXNlbGluZUpJVFNpemVTdGF0aXN0aWNzKCkgfHwgT3B0aW9uczo6ZHVtcERGR0pJVFNp
emVTdGF0aXN0aWNzKCkpCisgICAgICAgIGppdFNpemVTdGF0aXN0aWNzID0gbWFrZVVuaXF1ZTxK
SVRTaXplU3RhdGlzdGljcz4oKTsKKyNlbmRpZgorCiAgICAgVk1JbnNwZWN0b3I6Omluc3RhbmNl
KCkuYWRkKHRoaXMpOwogCiAgICAgaWYgKCFnX2pzY0NvbmZpZy5kaXNhYmxlZEZyZWV6aW5nRm9y
VGVzdGluZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjc4
MTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5
KQpAQCAtMTYxLDYgKzE2MSw3IEBAIGNsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKIGNsYXNz
IEpTV2ViQXNzZW1ibHlNZW1vcnk7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlOwogY2xhc3Mg
SlNXZWJBc3NlbWJseVRhYmxlOworY2xhc3MgSklUU2l6ZVN0YXRpc3RpY3M7CiBjbGFzcyBKSVRU
aHVua3M7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBOYXRpdmVFeGVjdXRh
YmxlOwpAQCAtNDM1LDYgKzQzNiwxMCBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPElz
b0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRIZWFwQ2VsbFR5cGU7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlUYWJsZUhlYXBDZWxs
VHlwZTsKICNlbmRpZgorCisjaWYgRU5BQkxFKEpJVCkKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SklU
U2l6ZVN0YXRpc3RpY3M+IGppdFNpemVTdGF0aXN0aWNzOworI2VuZGlmCiAgICAgCiAgICAgQ29t
cGxldGVTdWJzcGFjZSBwcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlOyAvLyBUeXBlZCBh
cnJheXMsIHN0cmluZ3MsIGJpdHZlY3RvcnMsIGV0YyBnbyBoZXJlLgogICAgIENvbXBsZXRlU3Vi
c3BhY2UganNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7IC8vIEJ1dHRlcmZsaWVzLCBhcnJh
eXMgb2YgSlNWYWx1ZXMsIGV0YyBnbyBoZXJlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNpb24gMjc4MTI2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICsz
Niw3IEBACiAjaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db2Rl
QmxvY2suaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJKSVRTaXplU3Rh
dGlzdGljcy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNPTk9iamVjdC5oIgpAQCAtMTk5MSw2ICsxOTkyLDkgQEAgc3RhdGljIEpT
Q19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpbwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1Rf
RlVOQ1RJT04oZnVuY3Rpb25Jc0dpZ2FjYWdlRW5hYmxlZCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVf
SE9TVF9GVU5DVElPTihmdW5jdGlvblRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5KTsKIHN0YXRpYyBK
U0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNQcml2YXRlU3ltYm9sKTsKK3N0YXRp
YyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSklUU2l6ZVN0YXRpc3RpY3MpOwor
c3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25EdW1wSklUU2l6ZVN0YXRp
c3RpY3MpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25SZXNldEpJ
VFNpemVTdGF0aXN0aWNzKTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTRG9sbGFyVk06OnNfaW5mbyA9
IHsgIkRvbGxhclZNIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU0RvbGxhclZNKSB9OwogCkBAIC0zNTkxLDYgKzM1OTUsNDYgQEAgSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNQcml2YQogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKGFzU3ltYm9sKGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpLT51aWQoKS5p
c1ByaXZhdGUoKSkpOwogfQogCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25KSVRT
aXplU3RhdGlzdGljcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSop
KQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisKKyAgICBpZiAoIXZtLmppdFNpemVTdGF0aXN0aWNzKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgV1RG
OjpTdHJpbmdQcmludFN0cmVhbSBzdHJlYW07CisgICAgc3RyZWFtLnByaW50KCp2bS5qaXRTaXpl
U3RhdGlzdGljcyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgc3Ry
ZWFtLnRvU3RyaW5nKCkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9u
RHVtcEpJVFNpemVTdGF0aXN0aWNzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKikpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIGlmICghdm0uaml0U2l6ZVN0YXRp
c3RpY3MpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisK
KyAgICBkYXRhTG9nTG4oKnZtLmppdFNpemVTdGF0aXN0aWNzKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
ZnVuY3Rpb25SZXNldEpJVFNpemVTdGF0aXN0aWNzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKikpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29w
ZTsKKworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIGlmICghdm0uaml0
U2l6ZVN0YXRpc3RpY3MpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisKKyAgICB2bS5qaXRTaXplU3RhdGlzdGljcy0+cmVzZXQoKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCiBjb25zdGV4cHIgdW5zaWduZWQg
anNEb2xsYXJWTVByb3BlcnR5QXR0cmlidXRlcyA9IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250
RGVsZXRlOwogCiB2b2lkIEpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKQEAgLTM3
NDgsNiArMzc5MiwxMCBAQCB2b2lkIEpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
IAogICAgIGFkZEZ1bmN0aW9uKHZtLCAiaXNQcml2YXRlU3ltYm9sIiwgZnVuY3Rpb25Jc1ByaXZh
dGVTeW1ib2wsIDEpOwogCisgICAgYWRkRnVuY3Rpb24odm0sICJqaXRTaXplU3RhdGlzdGljcyIs
IGZ1bmN0aW9uSklUU2l6ZVN0YXRpc3RpY3MsIDApOworICAgIGFkZEZ1bmN0aW9uKHZtLCAiZHVt
cEpJVFNpemVTdGF0aXN0aWNzIiwgZnVuY3Rpb25EdW1wSklUU2l6ZVN0YXRpc3RpY3MsIDApOwor
ICAgIGFkZEZ1bmN0aW9uKHZtLCAicmVzZXRKSVRTaXplU3RhdGlzdGljcyIsIGZ1bmN0aW9uUmVz
ZXRKSVRTaXplU3RhdGlzdGljcywgMCk7CisKICAgICBtX29iamVjdERvaW5nU2lkZUVmZmVjdFB1
dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZS5zZXQodm0sIHRoaXMsIE9iamVjdERv
aW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1czo6Y3JlYXRlU3RydWN0dXJl
KHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpKSk7CiB9CiAK
</data>
<flag name="commit-queue"
          id="451239"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429941</attachid>
            <date>2021-05-27 15:37:16 -0700</date>
            <delta_ts>2021-05-28 11:32:30 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>24964</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4MTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDIxLTA1LTI2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCB0aGUgYWJpbGl0eSB0byBkdW1wIHN0YXRpc3RpY3MgYWJvdXQgY3VtdWxhdGl2ZSBjb3Vu
dHMgYW5kIGNvZGUgc2l6ZXMgb2YgQmFzZWxpbmUgSklUIG9wY29kZXMgYW5kIERGRyBub2Rlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MjAwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgUm9iaW4gTW9yaXNzZXQuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGRmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpE
Rkc6OlNsb3dQYXRoR2VuZXJhdG9yOjpjdXJyZW50Tm9kZSBjb25zdCk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6cnVuU2xvd1BhdGhHZW5lcmF0b3JzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jayk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbmcpOgorICAgICAgICAqIGppdC9KSVRTaXplU3RhdGlzdGlj
cy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKSVRTaXplU3RhdGlzdGljczo6bWFya1N0YXJ0
KToKKyAgICAgICAgKEpTQzo6SklUU2l6ZVN0YXRpc3RpY3M6Om1hcmtFbmQpOgorICAgICAgICAo
SlNDOjpKSVRTaXplU3RhdGlzdGljczo6ZHVtcCBjb25zdCk6CisgICAgICAgICogaml0L0pJVFNp
emVTdGF0aXN0aWNzLmg6IEFkZGVkLgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChydW5K
U0MpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlv
bnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjpl
bnN1cmVPcHRpb25zQXJlQ29oZXJlbnQpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3Qu
aDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAg
ICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5jcHA6Cisg
ICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgIChKU0M6OkpT
RG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKToKKwogMjAyMS0wNS0yNiAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBVbmNoZWNrZWRMb2NrIGV2ZW4gbGVzcyBp
biBKYXZhU2NyaXB0Q29yZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNp
b24gMjc4MTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC02NjIsNiArNjYyLDcgQEAgaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAogaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCiBqaXQvSklUUmlnaHRTaGlmdEdlbmVyYXRvci5j
cHAKIGppdC9KSVRTYWZlcG9pbnQuY3BwCitqaXQvSklUU2l6ZVN0YXRpc3RpY3MuY3BwCiBqaXQv
SklUU3R1YlJvdXRpbmUuY3BwCiBqaXQvSklUU3ViR2VuZXJhdG9yLmNwcAogaml0L0pJVFRodW5r
cy5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyNzgxMjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBA
QAogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAi
SklUT3BlcmF0aW9uTGlzdC5oIgorI2luY2x1ZGUgIkpJVFNpemVTdGF0aXN0aWNzLmgiCiAjaW5j
bHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJK
U0JpZ0ludC5oIgpAQCAtMzUxMyw2ICszNTE0LDExIEBAIGludCBydW5KU0MoY29uc3QgQ29tbWFu
ZExpbmUmIG9wdGlvbnMsIGIKICNlbmRpZgogICAgIH0KIAorI2lmIEVOQUJMRShKSVQpCisgICAg
aWYgKHZtLmppdFNpemVTdGF0aXN0aWNzKQorICAgICAgICBkYXRhTG9nTG4oKnZtLmppdFNpemVT
dGF0aXN0aWNzKTsKKyNlbmRpZgorCiAgICAgdm0uY29kZUNhY2hlKCktPndyaXRlKHZtKTsKIAog
ICAgIGlmIChvcHRpb25zLm1fZGVzdHJveVZNIHx8IGlzV29ya2VyKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc4MTI2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTg5NCw2ICs4OTQsNyBAQAogCQk1Mjg0N0FEQzIxRkZCODY5MDA2MUE5REIgLyog
V2FzbUFpcklSR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1Mjg0N0FEQTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJhdG9y
LmggKi87IH07CiAJCTUyQjMxMEZCMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1
dGVkQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUyQjMxMEZBMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkIzMTEw
MTE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjMxMTAwMTk3NUI0NjcwMDgwODU3QyAv
KiBUeXBlTG9jYXRpb25DYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTUyQjUxMDBEMjY1RUZDREIwMDg5NzBFNyAvKiBKSVRTaXplU3RhdGlz
dGljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJC
NTEwMEIyNjVFRkNENDAwODk3MEU3IC8qIEpJVFNpemVTdGF0aXN0aWNzLmggKi87IH07CiAJCTUy
QzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDMDYxMUQxQUE1MUUxQjAwQjRBREJBIC8q
IFJ1bnRpbWVUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNTJDNTU1NjYyMjRDMkFFQTAwOTlGNUNDIC8qIERGR1ZhbHVlUmVwUmVkdWN0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUy
QzU1NTY1MjI0QzJBRTcwMDk5RjVDQyAvKiBERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmggKi87
IH07CiAJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI2MTlBMjg5ODUw
MDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMzYzNCw2ICszNjM1LDggQEAKIAkJNTJCMzEwRkMxOTc0QUU4
NzAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MkIzMTBGRTE5NzVCNDI0MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZUxvY2F0aW9uQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MkIzMTEwMDE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9u
Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZUxvY2F0aW9uQ2FjaGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTJCNTEwMEIyNjVFRkNENDAwODk3MEU3IC8qIEpJVFNpemVTdGF0
aXN0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFNpemVTdGF0aXN0aWNzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUyQjUxMDBDMjY1RUZDRDQwMDg5NzBFNyAvKiBKSVRTaXplU3Rh
dGlzdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRTaXplU3RhdGlzdGljcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjcxN0I0MUEwNTk3RTEwMDdBRjRGMyAvKiBD
b250cm9sRmxvd1Byb2ZpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvbnRyb2xGbG93UHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUnVudGltZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTJDNTU1NjQyMjRDMkFFNzAwOTlGNUNDIC8qIERGR1ZhbHVlUmVwUmVkdWN0aW9u
UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5j
cHA7IHBhdGggPSBkZmcvREZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC02Mjg2LDYgKzYyODksOCBAQAogCQkJCUZFM0EwNkI5MUMxMTAz
RDkwMDM5MEZERCAvKiBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmggKi8sCiAJCQkJNzIxMzFCRjMy
NjU4N0VGMjAwNzExNENGIC8qIEpJVFNhZmVwb2ludC5jcHAgKi8sCiAJCQkJNzIxMzFCRjUyNjU4
N0VGMjAwNzExNENGIC8qIEpJVFNhZmVwb2ludC5oICovLAorCQkJCTUyQjUxMDBDMjY1RUZDRDQw
MDg5NzBFNyAvKiBKSVRTaXplU3RhdGlzdGljcy5jcHAgKi8sCisJCQkJNTJCNTEwMEIyNjVFRkNE
NDAwODk3MEU3IC8qIEpJVFNpemVTdGF0aXN0aWNzLmggKi8sCiAJCQkJNzIxMzFCRjQyNjU4N0VG
MjAwNzExNENGIC8qIEpJVFNjYW5uYWJsZS5oICovLAogCQkJCTBGNzY2RDI2MTVBOENDMUIwMDhG
MzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAgKi8sCiAJCQkJMEY3NjZEMUMxNUE1MDI4RDAwOEYz
NjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggKi8sCkBAIC05NjIxLDYgKzk2MjYsNyBAQAogCQkJCTBG
MkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMzAwQjdDMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5p
bmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4OThGMzIxQjI3Njg5RjAwODNBMzNDIC8q
IERGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
MkI1MTAwRDI2NUVGQ0RCMDA4OTcwRTcgLyogSklUU2l6ZVN0YXRpc3RpY3MuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQzk3RjNFMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Qb2lu
dEluamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEzNDE3MEQ0MEJGMDBC
QjcyMkMgLyogREZHSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQ0MxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmgJKHJldmlz
aW9uIDI3ODEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5l
cmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgY29uc3QgTm9kZU9yaWdpbiYgb3JpZ2luKCkgY29uc3QgIHsgcmV0dXJuIG1fb3JpZ2lu
OyB9CisgICAgTm9kZSogY3VycmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnROb2Rl
OyB9CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVj
dWxhdGl2ZUpJVCopID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyNzgxMjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgs
NiArNDgsNyBAQAogI2luY2x1ZGUgIkpJVERpdkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVExl
ZnRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIK
KyNpbmNsdWRlICJKSVRTaXplU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIkpTQXJyYXlJdGVyYXRv
ci5oIgogI2luY2x1ZGUgIkpTQXN5bmNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQXN5bmNHZW5l
cmF0b3JGdW5jdGlvbi5oIgpAQCAtNDA4LDE3ICs0MDksMzYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6YWRkU2xvd1BhdGhHZW5lcmF0bwogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpydW5TbG93UGF0
aEdlbmVyYXRvcnMoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiBwY1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIpCiB7CisgICAgYXV0byBtYXJrU2xvd1BhdGhJZk5lZWRlZCA9IFsmXSAoTm9kZSogbm9k
ZSkgeworICAgICAgICBPcHRpb25hbDxKSVRTaXplU3RhdGlzdGljczo6TWFya2VyPiBzaXplTWFy
a2VyOworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERGR0pJVFNpemVTdGF0aXN0
aWNzKCkpKSB7CisgICAgICAgICAgICBTdHJpbmcgaWQgPSBtYWtlU3RyaW5nKCJERkdfc2xvd18i
LCBtX2dyYXBoLm9wTmFtZShub2RlLT5vcCgpKSk7CisgICAgICAgICAgICBzaXplTWFya2VyID0g
dm0oKS5qaXRTaXplU3RhdGlzdGljcy0+bWFya1N0YXJ0KGlkLCBtX2ppdCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHNpemVNYXJrZXI7CisgICAgfTsKKwogICAgIGZvciAoYXV0byYgc2xv
d1BhdGhHZW5lcmF0b3IgOiBtX3Nsb3dQYXRoR2VuZXJhdG9ycykgewogICAgICAgICBwY1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShtX2ppdC5sYWJlbElnbm9yaW5nV2F0Y2hwb2lu
dHMoKSwgc2xvd1BhdGhHZW5lcmF0b3ItPm9yaWdpbigpLnNlbWFudGljKTsKKyAgICAgICAgYXV0
byBzaXplTWFya2VyID0gbWFya1Nsb3dQYXRoSWZOZWVkZWQoc2xvd1BhdGhHZW5lcmF0b3ItPmN1
cnJlbnROb2RlKCkpOworCiAgICAgICAgIHNsb3dQYXRoR2VuZXJhdG9yLT5nZW5lcmF0ZSh0aGlz
KTsKKworICAgICAgICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikpCisgICAgICAgICAgICB2bSgp
LmppdFNpemVTdGF0aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCBtX2ppdCk7
CiAgICAgfQogICAgIGZvciAoYXV0byYgc2xvd1BhdGhMYW1iZGEgOiBtX3Nsb3dQYXRoTGFtYmRh
cykgewogICAgICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IHNsb3dQYXRoTGFtYmRhLmN1cnJlbnRO
b2RlOwogICAgICAgICBtX2N1cnJlbnROb2RlID0gY3VycmVudE5vZGU7CiAgICAgICAgIG1fb3V0
T2ZMaW5lU3RyZWFtSW5kZXggPSBzbG93UGF0aExhbWJkYS5zdHJlYW1JbmRleDsKICAgICAgICAg
cGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obV9qaXQubGFiZWxJZ25vcmluZ1dh
dGNocG9pbnRzKCksIGN1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBhdXRv
IHNpemVNYXJrZXIgPSBtYXJrU2xvd1BhdGhJZk5lZWRlZChjdXJyZW50Tm9kZSk7CisKICAgICAg
ICAgc2xvd1BhdGhMYW1iZGEuZ2VuZXJhdG9yKCk7CisKICAgICAgICAgbV9vdXRPZkxpbmVTdHJl
YW1JbmRleCA9IFdURjo6bnVsbG9wdDsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIp
KQorICAgICAgICAgICAgdm0oKS5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpz
aXplTWFya2VyKSwgbV9qaXQpOwogICAgIH0KIH0KIApAQCAtMjA4OCw4ICsyMTA4LDE3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sKICAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmdm0oKS5kaWRFbnRlclZNKTsKICAgICAgICAg
fQogCisgICAgICAgIE9wdGlvbmFsPEpJVFNpemVTdGF0aXN0aWNzOjpNYXJrZXI+IHNpemVNYXJr
ZXI7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wREZHSklUU2l6ZVN0YXRpc3Rp
Y3MoKSkpIHsKKyAgICAgICAgICAgIFN0cmluZyBpZCA9IG1ha2VTdHJpbmcoIkRGR19mYXN0XyIs
IG1fZ3JhcGgub3BOYW1lKG1fY3VycmVudE5vZGUtPm9wKCkpKTsKKyAgICAgICAgICAgIHNpemVN
YXJrZXIgPSB2bSgpLmppdFNpemVTdGF0aXN0aWNzLT5tYXJrU3RhcnQoaWQsIG1faml0KTsKKyAg
ICAgICAgfQorCiAgICAgICAgIGNvbXBpbGUobV9jdXJyZW50Tm9kZSk7CiAKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNpemVNYXJrZXIpKQorICAgICAgICAgICAgdm0oKS5qaXRTaXplU3RhdGlzdGlj
cy0+bWFya0VuZChXVEZNb3ZlKCpzaXplTWFya2VyKSwgbV9qaXQpOworCiAgICAgICAgIGlmIChi
ZWxvbmdzSW5NaW5pZmllZEdyYXBoKG1fY3VycmVudE5vZGUtPm9wKCkpKQogICAgICAgICAgICAg
bV9taW5pZmllZEdyYXBoLT5hcHBlbmQoTWluaWZpZWROb2RlOjpmcm9tTm9kZShtX2N1cnJlbnRO
b2RlKSk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNp
b24gMjc4MTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCiAj
aW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKKyNpbmNs
dWRlICJKSVRTaXplU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNs
dWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIk1vZHVsZVBy
b2dyYW1Db2RlQmxvY2suaCIKQEAgLTI1OSw2ICsyNjAsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogCiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gY3VycmVudElu
c3RydWN0aW9uLT5vcGNvZGVJRCgpOwogCisgICAgICAgIE9wdGlvbmFsPEpJVFNpemVTdGF0aXN0
aWNzOjpNYXJrZXI+IHNpemVNYXJrZXI7CisgICAgICAgIGlmIChVTkxJS0VMWShtX2J5dGVjb2Rl
SW5kZXggPj0gc3RhcnRCeXRlY29kZUluZGV4ICYmIE9wdGlvbnM6OmR1bXBCYXNlbGluZUpJVFNp
emVTdGF0aXN0aWNzKCkpKSB7CisgICAgICAgICAgICBTdHJpbmcgaWQgPSBtYWtlU3RyaW5nKCJC
YXNlbGluZV9mYXN0XyIsIG9wY29kZU5hbWVzW29wY29kZUlEXSk7CisgICAgICAgICAgICBzaXpl
TWFya2VyID0gbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtTdGFydChpZCwgKnRoaXMpOwor
ICAgICAgICB9CisKICAgICAgICAgaWYgKFVOTElLRUxZKG1fY29tcGlsYXRpb24pKSB7CiAgICAg
ICAgICAgICBhZGQ2NCgKICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoMSksCkBAIC00ODEs
NiArNDg4LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCisgICAgICAgIGlm
IChVTkxJS0VMWShzaXplTWFya2VyKSkKKyAgICAgICAgICAgIG1fdm0tPmppdFNpemVTdGF0aXN0
aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCAqdGhpcyk7CisKICAgICAgICAgaWYg
KEpJVEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgYnl0ZWNv
ZGVPZmZzZXQsICI6ICIsIG1fc2xvd0Nhc2VzLnNpemUoKSwgIlxuIik7CiAgICAgfQpAQCAtNTMx
LDggKzU0MSwxNSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAg
ICBpZiAobV9kaXNhc3NlbWJsZXIpCiAgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9y
Qnl0ZWNvZGVTbG93UGF0aChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCksIGxhYmVsKCkpOwogCisg
ICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgp
OworCisgICAgICAgIE9wdGlvbmFsPEpJVFNpemVTdGF0aXN0aWNzOjpNYXJrZXI+IHNpemVNYXJr
ZXI7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wQmFzZWxpbmVKSVRTaXplU3Rh
dGlzdGljcygpKSkgeworICAgICAgICAgICAgU3RyaW5nIGlkID0gbWFrZVN0cmluZygiQmFzZWxp
bmVfc2xvd18iLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0pOworICAgICAgICAgICAgc2l6ZU1hcmtl
ciA9IG1fdm0tPmppdFNpemVTdGF0aXN0aWNzLT5tYXJrU3RhcnQoaWQsICp0aGlzKTsKKyAgICAg
ICAgfQorCiAgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjp0cmFjZUJhc2VsaW5lSklURXhl
Y3V0aW9uKCkpKSB7Ci0gICAgICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+b3Bjb2RlSUQoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICAgICAgICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6
Q29udGV4dCYgY3R4KSB7CkBAIC02NDMsNiArNjYwLDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKCkKICAgICAgICAgCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAo
KSwgMCk7CiAgICAgICAgICsrYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlOworCisgICAgICAg
IGlmIChVTkxJS0VMWShzaXplTWFya2VyKSkKKyAgICAgICAgICAgIG1fdm0tPmppdFNpemVTdGF0
aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCAqdGhpcyk7CiAgICAgfQogCiAg
ICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGVDb3VudEhhdmluZ1Nsb3dDYXNlID09IG1fYnl0ZWNv
ZGVDb3VudEhhdmluZ1Nsb3dDYXNlKTsKQEAgLTcxMyw2ICs3MzMsMTIgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIAogICAgIG1fcGNUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KDAp
KSk7CiAKKyAgICBPcHRpb25hbDxKSVRTaXplU3RhdGlzdGljczo6TWFya2VyPiBzaXplTWFya2Vy
OworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wQmFzZWxpbmVKSVRTaXplU3RhdGlzdGlj
cygpKSkgeworICAgICAgICBTdHJpbmcgaWQgPSBtYWtlU3RyaW5nKCJCYXNlbGluZV9wcm9sb2d1
ZSIpOworICAgICAgICBzaXplTWFya2VyID0gbV92bS0+aml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtT
dGFydChpZCwgKnRoaXMpOworICAgIH0KKwogICAgIExhYmVsIGVudHJ5TGFiZWwodGhpcyk7CiAg
ICAgaWYgKG1fZGlzYXNzZW1ibGVyKQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0U3RhcnRP
ZkNvZGUoZW50cnlMYWJlbCk7CkBAIC03NjQsNiArNzkwLDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2Rl
Ojppc0pJVChtX2NvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAKKyAgICBpZiAoVU5MSUtFTFkoc2l6
ZU1hcmtlcikpCisgICAgICAgIG1fdm0tPmppdFNpemVTdGF0aXN0aWNzLT5tYXJrRW5kKFdURk1v
dmUoKnNpemVNYXJrZXIpLCAqdGhpcyk7CisKICAgICBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7
CiAgICAgcHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpOwogICAgIHByaXZhdGVDb21waWxlU2xvd0Nh
c2VzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNpemVTdGF0aXN0aWNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNpemVTdGF0
aXN0aWNzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFNpemVTdGF0aXN0aWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkpJVFNpemVTdGF0aXN0aWNzLmgiCisKKyNpZiBFTkFCTEUoSklUKQor
CisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSA8d3RmL0J1YmJsZVNvcnQuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK0pJVFNpemVTdGF0aXN0aWNzOjpNYXJrZXIgSklUU2l6ZVN0
YXRpc3RpY3M6Om1hcmtTdGFydChTdHJpbmcgaWRlbnRpZmllciwgQ0NhbGxIZWxwZXJzJiBqaXQp
Cit7CisgICAgTWFya2VyIG1hcmtlcjsKKyAgICBtYXJrZXIuaWRlbnRpZmllciA9IGlkZW50aWZp
ZXI7CisgICAgbWFya2VyLnN0YXJ0ID0gaml0LmxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpOwor
ICAgIHJldHVybiBtYXJrZXI7Cit9CisKK3ZvaWQgSklUU2l6ZVN0YXRpc3RpY3M6Om1hcmtFbmQo
TWFya2VyIG1hcmtlciwgQ0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAgQ0NhbGxIZWxwZXJzOjpM
YWJlbCBlbmQgPSBqaXQubGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCk7CisgICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICBzaXplX3Qgc2l6
ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4oZW5kKS51bnRhZ2dlZEV4ZWN1dGFi
bGVBZGRyZXNzPGNoYXIqPigpIC0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPE5vUHRyVGFnPihtYXJr
ZXIuc3RhcnQpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CisgICAgICAgIGxp
bmtCdWZmZXIuYWRkTWFpblRocmVhZEZpbmFsaXphdGlvblRhc2soWz1dIHsKKyAgICAgICAgICAg
IGF1dG8mIGVudHJ5ID0gbV9kYXRhLmFkZChtYXJrZXIuaWRlbnRpZmllciwgRW50cnkgeyB9KS5p
dGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICArK2VudHJ5LmNvdW50OworICAgICAgICAgICAg
ZW50cnkudG90YWxCeXRlcyArPSBzaXplOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9p
ZCBKSVRTaXplU3RhdGlzdGljczo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBFbnRyeT4+IGVudHJpZXM7CisKKyAgICBmb3IgKGF1
dG8gcGFpciA6IG1fZGF0YSkKKyAgICAgICAgZW50cmllcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIo
cGFpci5rZXksIHBhaXIudmFsdWUpKTsKKworICAgIHN0ZDo6c29ydChlbnRyaWVzLmJlZ2luKCks
IGVudHJpZXMuZW5kKCksIFtdIChjb25zdCBhdXRvJiBsaHMsIGNvbnN0IGF1dG8mIHJocykgewor
ICAgICAgICByZXR1cm4gbGhzLnNlY29uZC50b3RhbEJ5dGVzID4gcmhzLnNlY29uZC50b3RhbEJ5
dGVzOworICAgIH0pOworCisgICAgb3V0LnByaW50bG4oIkpJVCBzaXplIHN0YXRpc3RpY3M6Iik7
CisgICAgb3V0LnByaW50bG4oIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0iKTsKKworICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKSB7CisgICAgICAg
IHNpemVfdCB0b3RhbEJ5dGVzID0gZW50cnkuc2Vjb25kLnRvdGFsQnl0ZXM7CisgICAgICAgIHNp
emVfdCBjb3VudCA9IGVudHJ5LnNlY29uZC5jb3VudDsKKyAgICAgICAgZG91YmxlIGF2ZyA9IHN0
YXRpY19jYXN0PGRvdWJsZT4odG90YWxCeXRlcykgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvdW50
KTsKKyAgICAgICAgb3V0LnByaW50bG4oZW50cnkuZmlyc3QsICIgdG90YWxCeXRlczogIiwgdG90
YWxCeXRlcywgIiBjb3VudDogIiwgY291bnQsICIgYXZnOiAiLCBhdmcpOworICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTaXplU3RhdGlzdGljcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU2l6ZVN0YXRpc3RpY3MuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNpemVTdGF0aXN0aWNzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorCisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEpJVCkKKworI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK2NsYXNzIEpJVFNpemVTdGF0
aXN0aWNzIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdHJ1
Y3QgTWFya2VyIHsKKyAgICAgICAgU3RyaW5nIGlkZW50aWZpZXI7CisgICAgICAgIENDYWxsSGVs
cGVyczo6TGFiZWwgc3RhcnQ7CisgICAgfTsKKworICAgIE1hcmtlciBtYXJrU3RhcnQoU3RyaW5n
IGlkZW50aWZpZXIsIENDYWxsSGVscGVycyYpOworICAgIHZvaWQgbWFya0VuZChNYXJrZXIsIEND
YWxsSGVscGVycyYpOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisKKyAgICB2b2lkIHJlc2V0KCkgeyBtX2RhdGEuY2xlYXIoKTsgfQorCitw
cml2YXRlOgorICAgIHN0cnVjdCBFbnRyeSB7CisgICAgICAgIHNpemVfdCBjb3VudCB7IDAgfTsK
KyAgICAgICAgc2l6ZV90IHRvdGFsQnl0ZXMgeyAwIH07CisgICAgfTsKKworICAgIEhhc2hNYXA8
U3RyaW5nLCBFbnRyeT4gbV9kYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShy
ZXZpc2lvbiAyNzgxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTUsNiArNTE1LDggQEAgSlNfRVhQT1JUX1BSSVZB
VEUgYm9vbCBjYW5Vc2VKSVRDYWdlKCk7CiAgICAgdihEb3VibGUsIGFsbG93SG9pc3RpbmdMSUNN
UHJvYmFiaWxpdHksIDAuNSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCBleHBvc2VD
dXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nLCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihCb29sLCB1c2VKSVRDYWdlLCBjYW5Vc2VKSVRDYWdlKCksIE5vcm1hbCwg
bnVsbHB0cikgXAorICAgIHYoQm9vbCwgZHVtcEJhc2VsaW5lSklUU2l6ZVN0YXRpc3RpY3MsIGZh
bHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIGR1bXBERkdKSVRTaXplU3RhdGlz
dGljcywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAgICAvKiBGZWF0dXJlIEZs
YWdzICovXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJl
dmlzaW9uIDI3ODEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsNyBAQAogI2luY2x1ZGUgIklzb0lubGluZWRIZWFw
Q2VsbFR5cGUuaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9u
TGlzdC5oIgorI2luY2x1ZGUgIkpJVFNpemVTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiSklUVGh1
bmtzLmgiCiAjaW5jbHVkZSAiSklUV29ya2xpc3QuaCIKICNpbmNsdWRlICJKU0FQSUdsb2JhbE9i
amVjdC5oIgpAQCAtNTcyLDYgKzU3MywxMSBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5
cGUgaGVhcFR5cGUsCiAgICAgaWYgKE9wdGlvbnM6OmZvcmNlRGVidWdnZXJCeXRlY29kZUdlbmVy
YXRpb24oKSB8fCBPcHRpb25zOjphbHdheXNVc2VTaGFkb3dDaGlja2VuKCkpCiAgICAgICAgIGVu
c3VyZVNoYWRvd0NoaWNrZW4oKTsKIAorI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKE9wdGlvbnM6
OmR1bXBCYXNlbGluZUpJVFNpemVTdGF0aXN0aWNzKCkgfHwgT3B0aW9uczo6ZHVtcERGR0pJVFNp
emVTdGF0aXN0aWNzKCkpCisgICAgICAgIGppdFNpemVTdGF0aXN0aWNzID0gbWFrZVVuaXF1ZTxK
SVRTaXplU3RhdGlzdGljcz4oKTsKKyNlbmRpZgorCiAgICAgVk1JbnNwZWN0b3I6Omluc3RhbmNl
KCkuYWRkKHRoaXMpOwogCiAgICAgaWYgKCFnX2pzY0NvbmZpZy5kaXNhYmxlZEZyZWV6aW5nRm9y
VGVzdGluZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjc4
MTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5
KQpAQCAtMTYxLDYgKzE2MSw3IEBAIGNsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKIGNsYXNz
IEpTV2ViQXNzZW1ibHlNZW1vcnk7CiBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlOwogY2xhc3Mg
SlNXZWJBc3NlbWJseVRhYmxlOworY2xhc3MgSklUU2l6ZVN0YXRpc3RpY3M7CiBjbGFzcyBKSVRU
aHVua3M7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBOYXRpdmVFeGVjdXRh
YmxlOwpAQCAtNDM1LDYgKzQzNiwxMCBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPElz
b0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRIZWFwQ2VsbFR5cGU7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPElzb0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlUYWJsZUhlYXBDZWxs
VHlwZTsKICNlbmRpZgorCisjaWYgRU5BQkxFKEpJVCkKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SklU
U2l6ZVN0YXRpc3RpY3M+IGppdFNpemVTdGF0aXN0aWNzOworI2VuZGlmCiAgICAgCiAgICAgQ29t
cGxldGVTdWJzcGFjZSBwcmltaXRpdmVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlOyAvLyBUeXBlZCBh
cnJheXMsIHN0cmluZ3MsIGJpdHZlY3RvcnMsIGV0YyBnbyBoZXJlLgogICAgIENvbXBsZXRlU3Vi
c3BhY2UganNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7IC8vIEJ1dHRlcmZsaWVzLCBhcnJh
eXMgb2YgSlNWYWx1ZXMsIGV0YyBnbyBoZXJlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNpb24gMjc4MTI2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICsz
Niw3IEBACiAjaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db2Rl
QmxvY2suaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJKSVRTaXplU3Rh
dGlzdGljcy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNPTk9iamVjdC5oIgpAQCAtMTk5MSw2ICsxOTkyLDExIEBAIHN0YXRpYyBK
U0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW8KIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NU
X0ZVTkNUSU9OKGZ1bmN0aW9uSXNHaWdhY2FnZUVuYWJsZWQpOwogc3RhdGljIEpTQ19ERUNMQVJF
X0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Ub1VuY2FjaGVhYmxlRGljdGlvbmFyeSk7CiBzdGF0aWMg
SlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbklzUHJpdmF0ZVN5bWJvbCk7CisjaWYg
RU5BQkxFKEpJVCkKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSklU
U2l6ZVN0YXRpc3RpY3MpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rp
b25EdW1wSklUU2l6ZVN0YXRpc3RpY3MpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oZnVuY3Rpb25SZXNldEpJVFNpemVTdGF0aXN0aWNzKTsKKyNlbmRpZgogCiBjb25zdCBDbGFz
c0luZm8gSlNEb2xsYXJWTTo6c19pbmZvID0geyAiRG9sbGFyVk0iLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRG9sbGFyVk0pIH07CiAKQEAg
LTM1OTEsNiArMzU5Nyw0OCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Jc1By
aXZhCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYXNTeW1ib2woY2FsbEZy
YW1lLT5hcmd1bWVudCgwKSktPnVpZCgpLmlzUHJpdmF0ZSgpKSk7CiB9CiAKKyNpZiBFTkFCTEUo
SklUKQorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSklUU2l6ZVN0YXRpc3RpY3Ms
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKSkKK3sKKyAgICBEb2xs
YXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworCisgICAgaWYgKCF2bS5qaXRTaXplU3RhdGlzdGljcykKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgIFdURjo6U3RyaW5nUHJpbnRT
dHJlYW0gc3RyZWFtOworICAgIHN0cmVhbS5wcmludCgqdm0uaml0U2l6ZVN0YXRpc3RpY3MpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIHN0cmVhbS50b1N0cmluZygp
KSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkR1bXBKSVRTaXplU3Rh
dGlzdGljcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSopKQorewor
ICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisKKyAgICBpZiAoIXZtLmppdFNpemVTdGF0aXN0aWNzKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgZGF0YUxvZ0xu
KCp2bS5qaXRTaXplU3RhdGlzdGljcyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uUmVzZXRK
SVRTaXplU3RhdGlzdGljcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSopKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisKKyAgICBpZiAoIXZtLmppdFNpemVTdGF0aXN0aWNz
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAg
dm0uaml0U2l6ZVN0YXRpc3RpY3MtPnJlc2V0KCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKK30KKyNlbmRpZgorCiBjb25zdGV4cHIgdW5zaWduZWQganNEb2xs
YXJWTVByb3BlcnR5QXR0cmlidXRlcyA9IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRl
OwogCiB2b2lkIEpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKQEAgLTM3NDgsNiAr
Mzc5NiwxMiBAQCB2b2lkIEpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIAogICAg
IGFkZEZ1bmN0aW9uKHZtLCAiaXNQcml2YXRlU3ltYm9sIiwgZnVuY3Rpb25Jc1ByaXZhdGVTeW1i
b2wsIDEpOwogCisjaWYgRU5BQkxFKEpJVCkKKyAgICBhZGRGdW5jdGlvbih2bSwgImppdFNpemVT
dGF0aXN0aWNzIiwgZnVuY3Rpb25KSVRTaXplU3RhdGlzdGljcywgMCk7CisgICAgYWRkRnVuY3Rp
b24odm0sICJkdW1wSklUU2l6ZVN0YXRpc3RpY3MiLCBmdW5jdGlvbkR1bXBKSVRTaXplU3RhdGlz
dGljcywgMCk7CisgICAgYWRkRnVuY3Rpb24odm0sICJyZXNldEpJVFNpemVTdGF0aXN0aWNzIiwg
ZnVuY3Rpb25SZXNldEpJVFNpemVTdGF0aXN0aWNzLCAwKTsKKyNlbmRpZgorCiAgICAgbV9vYmpl
Y3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXNTdHJ1Y3R1cmUuc2V0
KHZtLCB0aGlzLCBPYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0
dXM6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBqc051bGwoKSkpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430031</attachid>
            <date>2021-05-28 11:32:30 -0700</date>
            <delta_ts>2021-05-28 11:36:52 -0700</delta_ts>
            <desc>[fast-cq] patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>24908</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4MjExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDIxLTA1LTI4ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCB0aGUgYWJpbGl0eSB0byBkdW1wIHN0YXRpc3RpY3MgYWJvdXQgY3VtdWxhdGl2ZSBjb3Vu
dHMgYW5kIGNvZGUgc2l6ZXMgb2YgQmFzZWxpbmUgSklUIG9wY29kZXMgYW5kIERGRyBub2Rlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MjAwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgUm9iaW4gTW9yaXNzZXQuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGRmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpE
Rkc6OlNsb3dQYXRoR2VuZXJhdG9yOjpjdXJyZW50Tm9kZSBjb25zdCk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6cnVuU2xvd1BhdGhHZW5lcmF0b3JzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jayk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVB
bmRMaW5rV2l0aG91dEZpbmFsaXppbmcpOgorICAgICAgICAqIGppdC9KSVRTaXplU3RhdGlzdGlj
cy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKSVRTaXplU3RhdGlzdGljczo6bWFya1N0YXJ0
KToKKyAgICAgICAgKEpTQzo6SklUU2l6ZVN0YXRpc3RpY3M6Om1hcmtFbmQpOgorICAgICAgICAo
SlNDOjpKSVRTaXplU3RhdGlzdGljczo6ZHVtcCBjb25zdCk6CisgICAgICAgICogaml0L0pJVFNp
emVTdGF0aXN0aWNzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKSVRTaXplU3RhdGlzdGljczo6
cmVzZXQpOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChydW5KU0MpOgorICAgICAgICAq
IHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAg
ICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogdG9v
bHMvSlNEb2xsYXJWTS5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
Tik6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKToKKwogMjAyMS0w
NS0yOCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBEb24ndCBz
aW5rIGFyZ3VtZW50cyBwYXN0IHRoZSBjb250ZXh0IG9mIHRoZSBpbmxpbmUgY2FsbCBmcmFtZSB0
aGV5IHdlcmUgY3JlYXRlZCBpbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2
aXNpb24gMjc4MjExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC02NjIsNiArNjYyLDcgQEAgaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAog
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCiBqaXQvSklUUmlnaHRTaGlmdEdlbmVyYXRv
ci5jcHAKIGppdC9KSVRTYWZlcG9pbnQuY3BwCitqaXQvSklUU2l6ZVN0YXRpc3RpY3MuY3BwCiBq
aXQvSklUU3R1YlJvdXRpbmUuY3BwCiBqaXQvSklUU3ViR2VuZXJhdG9yLmNwcAogaml0L0pJVFRo
dW5rcy5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyNzgyMTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEs
NyBAQAogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVk
ZSAiSklUT3BlcmF0aW9uTGlzdC5oIgorI2luY2x1ZGUgIkpJVFNpemVTdGF0aXN0aWNzLmgiCiAj
aW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRl
ICJKU0JpZ0ludC5oIgpAQCAtMzUyOSw2ICszNTMwLDExIEBAIGludCBydW5KU0MoY29uc3QgQ29t
bWFuZExpbmUmIG9wdGlvbnMsIGIKICNlbmRpZgogICAgIH0KIAorI2lmIEVOQUJMRShKSVQpCisg
ICAgaWYgKHZtLmppdFNpemVTdGF0aXN0aWNzKQorICAgICAgICBkYXRhTG9nTG4oKnZtLmppdFNp
emVTdGF0aXN0aWNzKTsKKyNlbmRpZgorCiAgICAgdm0uY29kZUNhY2hlKCktPndyaXRlKHZtKTsK
IAogICAgIGlmIChvcHRpb25zLm1fZGVzdHJveVZNIHx8IGlzV29ya2VyKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc4MjExKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTg5NCw2ICs4OTQsNyBAQAogCQk1Mjg0N0FEQzIxRkZCODY5MDA2MUE5REIg
LyogV2FzbUFpcklSR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Mjg0N0FEQTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJh
dG9yLmggKi87IH07CiAJCTUyQjMxMEZCMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4
ZWN1dGVkQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUyQjMxMEZBMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkIz
MTEwMTE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjMxMTAwMTk3NUI0NjcwMDgwODU3
QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTUyQjUxMDBEMjY1RUZDREIwMDg5NzBFNyAvKiBKSVRTaXplU3Rh
dGlzdGljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJCNTEwMEIyNjVFRkNENDAwODk3MEU3IC8qIEpJVFNpemVTdGF0aXN0aWNzLmggKi87IH07CiAJ
CTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDMDYxMUQxQUE1MUUxQjAwQjRBREJB
IC8qIFJ1bnRpbWVUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTJDNTU1NjYyMjRDMkFFQTAwOTlGNUNDIC8qIERGR1ZhbHVlUmVwUmVkdWN0
aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUyQzU1NTY1MjI0QzJBRTcwMDk5RjVDQyAvKiBERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmgg
Ki87IH07CiAJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI2MTlBMjg5
ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzYzNCw2ICszNjM1LDggQEAKIAkJNTJCMzEwRkMxOTc0
QUU4NzAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MkIzMTBGRTE5NzVCNDI0MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZUxvY2F0aW9uQ2FjaGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTEwMDE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0
aW9uQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZUxvY2F0aW9uQ2FjaGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJCNTEwMEIyNjVFRkNENDAwODk3MEU3IC8qIEpJVFNpemVT
dGF0aXN0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFNpemVTdGF0aXN0aWNzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyQjUxMDBDMjY1RUZDRDQwMDg5NzBFNyAvKiBKSVRTaXpl
U3RhdGlzdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRTaXplU3RhdGlzdGljcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQjcxN0I0MUEwNTk3RTEwMDdBRjRGMyAv
KiBDb250cm9sRmxvd1Byb2ZpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENvbnRyb2xGbG93UHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MkMwNjExRDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUnVudGltZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTJDNTU1NjQyMjRDMkFFNzAwOTlGNUNDIC8qIERGR1ZhbHVlUmVwUmVkdWN0
aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjg2LDYgKzYyODksOCBAQAogCQkJCUZFM0EwNkI5MUMx
MTAzRDkwMDM5MEZERCAvKiBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmggKi8sCiAJCQkJNzIxMzFC
RjMyNjU4N0VGMjAwNzExNENGIC8qIEpJVFNhZmVwb2ludC5jcHAgKi8sCiAJCQkJNzIxMzFCRjUy
NjU4N0VGMjAwNzExNENGIC8qIEpJVFNhZmVwb2ludC5oICovLAorCQkJCTUyQjUxMDBDMjY1RUZD
RDQwMDg5NzBFNyAvKiBKSVRTaXplU3RhdGlzdGljcy5jcHAgKi8sCisJCQkJNTJCNTEwMEIyNjVF
RkNENDAwODk3MEU3IC8qIEpJVFNpemVTdGF0aXN0aWNzLmggKi8sCiAJCQkJNzIxMzFCRjQyNjU4
N0VGMjAwNzExNENGIC8qIEpJVFNjYW5uYWJsZS5oICovLAogCQkJCTBGNzY2RDI2MTVBOENDMUIw
MDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAgKi8sCiAJCQkJMEY3NjZEMUMxNUE1MDI4RDAw
OEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggKi8sCkBAIC05NjIxLDYgKzk2MjYsNyBAQAogCQkJ
CTBGMkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMzAwQjdDMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21i
aW5pbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4OThGMzIxQjI3Njg5RjAwODNBMzND
IC8qIERGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1MkI1MTAwRDI2NUVGQ0RCMDA4OTcwRTcgLyogSklUU2l6ZVN0YXRpc3RpY3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQzk3RjNFMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdJbnZhbGlkYXRpb25Q
b2ludEluamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEzNDE3MEQ0MEJG
MDBCQjcyMkMgLyogREZHSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQ0MxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmgJKHJl
dmlzaW9uIDI3ODIxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhH
ZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgY29uc3QgTm9kZU9yaWdpbiYgb3JpZ2luKCkgY29uc3QgIHsgcmV0dXJuIG1fb3Jp
Z2luOyB9CisgICAgTm9kZSogY3VycmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRO
b2RlOyB9CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChT
cGVjdWxhdGl2ZUpJVCopID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyNzgyMTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIkpJVERpdkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJ
VExlZnRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3Iu
aCIKKyNpbmNsdWRlICJKSVRTaXplU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIkpTQXJyYXlJdGVy
YXRvci5oIgogI2luY2x1ZGUgIkpTQXN5bmNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQXN5bmNH
ZW5lcmF0b3JGdW5jdGlvbi5oIgpAQCAtNDA4LDE3ICs0MDksMzUgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6YWRkU2xvd1BhdGhHZW5lcmF0bwogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpydW5TbG93
UGF0aEdlbmVyYXRvcnMoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiBwY1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXIpCiB7CisgICAgYXV0byBtYXJrU2xvd1BhdGhJZk5lZWRlZCA9IFsmXSAoTm9kZSog
bm9kZSkgeworICAgICAgICBPcHRpb25hbDxKSVRTaXplU3RhdGlzdGljczo6TWFya2VyPiBzaXpl
TWFya2VyOworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERGR0pJVFNpemVTdGF0
aXN0aWNzKCkpKSB7CisgICAgICAgICAgICBTdHJpbmcgaWQgPSBtYWtlU3RyaW5nKCJERkdfc2xv
d18iLCBtX2dyYXBoLm9wTmFtZShub2RlLT5vcCgpKSk7CisgICAgICAgICAgICBzaXplTWFya2Vy
ID0gdm0oKS5qaXRTaXplU3RhdGlzdGljcy0+bWFya1N0YXJ0KGlkLCBtX2ppdCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHNpemVNYXJrZXI7CisgICAgfTsKKwogICAgIGZvciAoYXV0byYg
c2xvd1BhdGhHZW5lcmF0b3IgOiBtX3Nsb3dQYXRoR2VuZXJhdG9ycykgewogICAgICAgICBwY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShtX2ppdC5sYWJlbElnbm9yaW5nV2F0Y2hw
b2ludHMoKSwgc2xvd1BhdGhHZW5lcmF0b3ItPm9yaWdpbigpLnNlbWFudGljKTsKKyAgICAgICAg
YXV0byBzaXplTWFya2VyID0gbWFya1Nsb3dQYXRoSWZOZWVkZWQoc2xvd1BhdGhHZW5lcmF0b3It
PmN1cnJlbnROb2RlKCkpOworCiAgICAgICAgIHNsb3dQYXRoR2VuZXJhdG9yLT5nZW5lcmF0ZSh0
aGlzKTsKKworICAgICAgICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikpCisgICAgICAgICAgICB2
bSgpLmppdFNpemVTdGF0aXN0aWNzLT5tYXJrRW5kKFdURk1vdmUoKnNpemVNYXJrZXIpLCBtX2pp
dCk7CiAgICAgfQogICAgIGZvciAoYXV0byYgc2xvd1BhdGhMYW1iZGEgOiBtX3Nsb3dQYXRoTGFt
YmRhcykgewogICAgICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IHNsb3dQYXRoTGFtYmRhLmN1cnJl
bnROb2RlOwogICAgICAgICBtX2N1cnJlbnROb2RlID0gY3VycmVudE5vZGU7CiAgICAgICAgIG1f
b3V0T2ZMaW5lU3RyZWFtSW5kZXggPSBzbG93UGF0aExhbWJkYS5zdHJlYW1JbmRleDsKICAgICAg
ICAgcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obV9qaXQubGFiZWxJZ25vcmlu
Z1dhdGNocG9pbnRzKCksIGN1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBh
dXRvIHNpemVNYXJrZXIgPSBtYXJrU2xvd1BhdGhJZk5lZWRlZChjdXJyZW50Tm9kZSk7CisKICAg
ICAgICAgc2xvd1BhdGhMYW1iZGEuZ2VuZXJhdG9yKCk7CiAgICAgICAgIG1fb3V0T2ZMaW5lU3Ry
ZWFtSW5kZXggPSBzdGQ6Om51bGxvcHQ7CisgICAgICAgIGlmIChVTkxJS0VMWShzaXplTWFya2Vy
KSkKKyAgICAgICAgICAgIHZtKCkuaml0U2l6ZVN0YXRpc3RpY3MtPm1hcmtFbmQoV1RGTW92ZSgq
c2l6ZU1hcmtlciksIG1faml0KTsKICAgICB9CiB9CiAKQEAgLTIwODgsOCArMjEwNywxNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAgICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgJnZtKCkuZGlkRW50ZXJWTSk7CiAgICAgICAg
IH0KIAorICAgICAgICBPcHRpb25hbDxKSVRTaXplU3RhdGlzdGljczo6TWFya2VyPiBzaXplTWFy
a2VyOworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcERGR0pJVFNpemVTdGF0aXN0
aWNzKCkpKSB7CisgICAgICAgICAgICBTdHJpbmcgaWQgPSBtYWtlU3RyaW5nKCJERkdfZmFzdF8i
LCBtX2dyYXBoLm9wTmFtZShtX2N1cnJlbnROb2RlLT5vcCgpKSk7CisgICAgICAgICAgICBzaXpl
TWFya2VyID0gdm0oKS5qaXRTaXplU3RhdGlzdGljcy0+bWFya1N0YXJ0KGlkLCBtX2ppdCk7Cisg
ICAgICAgIH0KKwogICAgICAgICBjb21waWxlKG1fY3VycmVudE5vZGUpOwogCisgICAgICAgIGlm
IChVTkxJS0VMWShzaXplTWFya2VyKSkKKyAgICAgICAgICAgIHZtKCkuaml0U2l6ZVN0YXRpc3Rp
Y3MtPm1hcmtFbmQoV1RGTW92ZSgqc2l6ZU1hcmtlciksIG1faml0KTsKKwogICAgICAgICBpZiAo
YmVsb25nc0luTWluaWZpZWRHcmFwaChtX2N1cnJlbnROb2RlLT5vcCgpKSkKICAgICAgICAgICAg
IG1fbWluaWZpZWRHcmFwaC0+YXBwZW5kKE1pbmlmaWVkTm9kZTo6ZnJvbU5vZGUobV9jdXJyZW50
Tm9kZSkpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlz
aW9uIDI3ODIxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgog
I2luY2x1ZGUgIkpJVElubGluZXMuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCisjaW5j
bHVkZSAiSklUU2l6ZVN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5j
bHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrLmgiCkBAIC0yNTksNiArMjYwLDEyIEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKIAorICAgICAgICBPcHRpb25hbDxKSVRTaXplU3RhdGlz
dGljczo6TWFya2VyPiBzaXplTWFya2VyOworICAgICAgICBpZiAoVU5MSUtFTFkobV9ieXRlY29k
ZUluZGV4ID49IHN0YXJ0Qnl0ZWNvZGVJbmRleCAmJiBPcHRpb25zOjpkdW1wQmFzZWxpbmVKSVRT
aXplU3RhdGlzdGljcygpKSkgeworICAgICAgICAgICAgU3RyaW5nIGlkID0gbWFrZVN0cmluZygi
QmFzZWxpbmVfZmFzdF8iLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0pOworICAgICAgICAgICAgc2l6
ZU1hcmtlciA9IG1fdm0tPmppdFNpemVTdGF0aXN0aWNzLT5tYXJrU3RhcnQoaWQsICp0aGlzKTsK
KyAgICAgICAgfQorCiAgICAgICAgIGlmIChVTkxJS0VMWShtX2NvbXBpbGF0aW9uKSkgewogICAg
ICAgICAgICAgYWRkNjQoCiAgICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKDEpLApAQCAtNDgx
LDYgKzQ4OCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KIAorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikpCisgICAgICAgICAgICBtX3ZtLT5qaXRTaXplU3RhdGlz
dGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXplTWFya2VyKSwgKnRoaXMpOworCiAgICAgICAgIGlm
IChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVj
b2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KQEAgLTUz
MSw4ICs1NDEsMTUgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAg
ICAgaWYgKG1fZGlzYXNzZW1ibGVyKQogICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZv
ckJ5dGVjb2RlU2xvd1BhdGgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpLCBsYWJlbCgpKTsKIAor
ICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KTsKKworICAgICAgICBPcHRpb25hbDxKSVRTaXplU3RhdGlzdGljczo6TWFya2VyPiBzaXplTWFy
a2VyOworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcEJhc2VsaW5lSklUU2l6ZVN0
YXRpc3RpY3MoKSkpIHsKKyAgICAgICAgICAgIFN0cmluZyBpZCA9IG1ha2VTdHJpbmcoIkJhc2Vs
aW5lX3Nsb3dfIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdKTsKKyAgICAgICAgICAgIHNpemVNYXJr
ZXIgPSBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya1N0YXJ0KGlkLCAqdGhpcyk7CisgICAg
ICAgIH0KKwogICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dHJhY2VCYXNlbGluZUpJVEV4
ZWN1dGlvbigpKSkgewotICAgICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPm9wY29kZUlEKCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKICAgICAgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gbV9jb2RlQmxvY2s7CiAgICAgICAgICAgICBwcm9iZURlYnVnKFs9XSAoUHJvYmU6
OkNvbnRleHQmIGN0eCkgewpAQCAtNjQzLDYgKzY2MCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAgICAgICAgIAogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1w
KCksIDApOwogICAgICAgICArK2J5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZTsKKworICAgICAg
ICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikpCisgICAgICAgICAgICBtX3ZtLT5qaXRTaXplU3Rh
dGlzdGljcy0+bWFya0VuZChXVEZNb3ZlKCpzaXplTWFya2VyKSwgKnRoaXMpOwogICAgIH0KIAog
ICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlQ291bnRIYXZpbmdTbG93Q2FzZSA9PSBtX2J5dGVj
b2RlQ291bnRIYXZpbmdTbG93Q2FzZSk7CkBAIC03MTMsNiArNzMzLDEyIEBAIHZvaWQgSklUOjpj
b21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAKICAgICBtX3BjVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCgw
KSkpOwogCisgICAgT3B0aW9uYWw8SklUU2l6ZVN0YXRpc3RpY3M6Ok1hcmtlcj4gc2l6ZU1hcmtl
cjsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcEJhc2VsaW5lSklUU2l6ZVN0YXRpc3Rp
Y3MoKSkpIHsKKyAgICAgICAgU3RyaW5nIGlkID0gbWFrZVN0cmluZygiQmFzZWxpbmVfcHJvbG9n
dWUiKTsKKyAgICAgICAgc2l6ZU1hcmtlciA9IG1fdm0tPmppdFNpemVTdGF0aXN0aWNzLT5tYXJr
U3RhcnQoaWQsICp0aGlzKTsKKyAgICB9CisKICAgICBMYWJlbCBlbnRyeUxhYmVsKHRoaXMpOwog
ICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldFN0YXJ0
T2ZDb2RlKGVudHJ5TGFiZWwpOwpAQCAtNzY0LDYgKzc5MCw5IEBAIHZvaWQgSklUOjpjb21waWxl
QW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAKICAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29k
ZTo6aXNKSVQobV9jb2RlQmxvY2stPmppdFR5cGUoKSkpOwogCisgICAgaWYgKFVOTElLRUxZKHNp
emVNYXJrZXIpKQorICAgICAgICBtX3ZtLT5qaXRTaXplU3RhdGlzdGljcy0+bWFya0VuZChXVEZN
b3ZlKCpzaXplTWFya2VyKSwgKnRoaXMpOworCiAgICAgcHJpdmF0ZUNvbXBpbGVNYWluUGFzcygp
OwogICAgIHByaXZhdGVDb21waWxlTGlua1Bhc3MoKTsKICAgICBwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTaXplU3RhdGlzdGlj
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTaXplU3Rh
dGlzdGljcy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTaXplU3RhdGlzdGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJKSVRTaXplU3RhdGlzdGljcy5oIgorCisjaWYgRU5BQkxFKEpJVCkK
KworI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgPHd0Zi9CdWJibGVTb3J0Lmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitKSVRTaXplU3RhdGlzdGljczo6TWFya2VyIEpJVFNpemVT
dGF0aXN0aWNzOjptYXJrU3RhcnQoU3RyaW5nIGlkZW50aWZpZXIsIENDYWxsSGVscGVycyYgaml0
KQoreworICAgIE1hcmtlciBtYXJrZXI7CisgICAgbWFya2VyLmlkZW50aWZpZXIgPSBpZGVudGlm
aWVyOworICAgIG1hcmtlci5zdGFydCA9IGppdC5sYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKTsK
KyAgICByZXR1cm4gbWFya2VyOworfQorCit2b2lkIEpJVFNpemVTdGF0aXN0aWNzOjptYXJrRW5k
KE1hcmtlciBtYXJrZXIsIENDYWxsSGVscGVycyYgaml0KQoreworICAgIENDYWxsSGVscGVyczo6
TGFiZWwgZW5kID0gaml0LmxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpOworICAgIGppdC5hZGRM
aW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgc2l6ZV90IHNp
emUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8Tm9QdHJUYWc+KGVuZCkudW50YWdnZWRFeGVjdXRh
YmxlQWRkcmVzczxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZjxOb1B0clRhZz4obWFy
a2VyLnN0YXJ0KS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOworICAgICAgICBs
aW5rQnVmZmVyLmFkZE1haW5UaHJlYWRGaW5hbGl6YXRpb25UYXNrKFs9XSB7CisgICAgICAgICAg
ICBhdXRvJiBlbnRyeSA9IG1fZGF0YS5hZGQobWFya2VyLmlkZW50aWZpZXIsIEVudHJ5IHsgfSku
aXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAgKytlbnRyeS5jb3VudDsKKyAgICAgICAgICAg
IGVudHJ5LnRvdGFsQnl0ZXMgKz0gc2l6ZTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3Zv
aWQgSklUU2l6ZVN0YXRpc3RpY3M6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgRW50cnk+PiBlbnRyaWVzOworCisgICAgZm9yIChh
dXRvIHBhaXIgOiBtX2RhdGEpCisgICAgICAgIGVudHJpZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KHBhaXIua2V5LCBwYWlyLnZhbHVlKSk7CisKKyAgICBzdGQ6OnNvcnQoZW50cmllcy5iZWdpbigp
LCBlbnRyaWVzLmVuZCgpLCBbXSAoY29uc3QgYXV0byYgbGhzLCBjb25zdCBhdXRvJiByaHMpIHsK
KyAgICAgICAgcmV0dXJuIGxocy5zZWNvbmQudG90YWxCeXRlcyA+IHJocy5zZWNvbmQudG90YWxC
eXRlczsKKyAgICB9KTsKKworICAgIG91dC5wcmludGxuKCJKSVQgc2l6ZSBzdGF0aXN0aWNzOiIp
OworICAgIG91dC5wcmludGxuKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Iik7CisKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogZW50cmllcykgeworICAgICAg
ICBzaXplX3QgdG90YWxCeXRlcyA9IGVudHJ5LnNlY29uZC50b3RhbEJ5dGVzOworICAgICAgICBz
aXplX3QgY291bnQgPSBlbnRyeS5zZWNvbmQuY291bnQ7CisgICAgICAgIGRvdWJsZSBhdmcgPSBz
dGF0aWNfY2FzdDxkb3VibGU+KHRvdGFsQnl0ZXMpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb3Vu
dCk7CisgICAgICAgIG91dC5wcmludGxuKGVudHJ5LmZpcnN0LCAiIHRvdGFsQnl0ZXM6ICIsIHRv
dGFsQnl0ZXMsICIgY291bnQ6ICIsIGNvdW50LCAiIGF2ZzogIiwgYXZnKTsKKyAgICB9Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU2l6ZVN0YXRpc3RpY3MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFNpemVTdGF0aXN0aWNzLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTaXplU3RhdGlzdGljcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShKSVQpCisKKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ0NhbGxIZWxwZXJzOworCitjbGFzcyBKSVRTaXplU3Rh
dGlzdGljcyB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3Ry
dWN0IE1hcmtlciB7CisgICAgICAgIFN0cmluZyBpZGVudGlmaWVyOworICAgICAgICBDQ2FsbEhl
bHBlcnM6OkxhYmVsIHN0YXJ0OworICAgIH07CisKKyAgICBNYXJrZXIgbWFya1N0YXJ0KFN0cmlu
ZyBpZGVudGlmaWVyLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICB2b2lkIG1hcmtFbmQoTWFya2VyLCBD
Q2FsbEhlbHBlcnMmKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworCisgICAgdm9pZCByZXNldCgpIHsgbV9kYXRhLmNsZWFyKCk7IH0KKwor
cHJpdmF0ZToKKyAgICBzdHJ1Y3QgRW50cnkgeworICAgICAgICBzaXplX3QgY291bnQgeyAwIH07
CisgICAgICAgIHNpemVfdCB0b3RhbEJ5dGVzIHsgMCB9OworICAgIH07CisKKyAgICBIYXNoTWFw
PFN0cmluZywgRW50cnk+IG1fZGF0YTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAko
cmV2aXNpb24gMjc4MjExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
c0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTE1LDYgKzUxNSw4IEBAIEpTX0VYUE9SVF9QUklW
QVRFIGJvb2wgY2FuVXNlSklUQ2FnZSgpOwogICAgIHYoRG91YmxlLCBhbGxvd0hvaXN0aW5nTElD
TVByb2JhYmlsaXR5LCAwLjUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgZXhwb3Nl
Q3VzdG9tU2V0dGVyc09uR2xvYmFsT2JqZWN0Rm9yVGVzdGluZywgZmFsc2UsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoQm9vbCwgdXNlSklUQ2FnZSwgY2FuVXNlSklUQ2FnZSgpLCBOb3JtYWws
IG51bGxwdHIpIFwKKyAgICB2KEJvb2wsIGR1bXBCYXNlbGluZUpJVFNpemVTdGF0aXN0aWNzLCBm
YWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihCb29sLCBkdW1wREZHSklUU2l6ZVN0YXRp
c3RpY3MsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgLyogRmVhdHVyZSBG
bGFncyAqL1wKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShy
ZXZpc2lvbiAyNzgyMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAKICNpbmNsdWRlICJJc29JbmxpbmVkSGVh
cENlbGxUeXBlLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlv
bkxpc3QuaCIKKyNpbmNsdWRlICJKSVRTaXplU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIkpJVFRo
dW5rcy5oIgogI2luY2x1ZGUgIkpJVFdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiSlNBUElHbG9iYWxP
YmplY3QuaCIKQEAgLTU3Miw2ICs1NzMsMTEgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBU
eXBlIGhlYXBUeXBlLAogICAgIGlmIChPcHRpb25zOjpmb3JjZURlYnVnZ2VyQnl0ZWNvZGVHZW5l
cmF0aW9uKCkgfHwgT3B0aW9uczo6YWx3YXlzVXNlU2hhZG93Q2hpY2tlbigpKQogICAgICAgICBl
bnN1cmVTaGFkb3dDaGlja2VuKCk7CiAKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChPcHRpb25z
OjpkdW1wQmFzZWxpbmVKSVRTaXplU3RhdGlzdGljcygpIHx8IE9wdGlvbnM6OmR1bXBERkdKSVRT
aXplU3RhdGlzdGljcygpKQorICAgICAgICBqaXRTaXplU3RhdGlzdGljcyA9IG1ha2VVbmlxdWU8
SklUU2l6ZVN0YXRpc3RpY3M+KCk7CisjZW5kaWYKKwogICAgIFZNSW5zcGVjdG9yOjppbnN0YW5j
ZSgpLmFkZCh0aGlzKTsKIAogICAgIGlmICghZ19qc2NDb25maWcuZGlzYWJsZWRGcmVlemluZ0Zv
clRlc3RpbmcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDI3
ODIxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE2MSw2ICsxNjEsNyBAQCBjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7CiBjbGFz
cyBKU1dlYkFzc2VtYmx5TWVtb3J5OwogY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZTsKIGNsYXNz
IEpTV2ViQXNzZW1ibHlUYWJsZTsKK2NsYXNzIEpJVFNpemVTdGF0aXN0aWNzOwogY2xhc3MgSklU
VGh1bmtzOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTmF0aXZlRXhlY3V0
YWJsZTsKQEAgLTQzNSw2ICs0MzYsMTAgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
c29IZWFwQ2VsbFR5cGU+IHdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkSGVhcENlbGxUeXBlOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxJc29IZWFwQ2VsbFR5cGU+IHdlYkFzc2VtYmx5VGFibGVIZWFwQ2Vs
bFR5cGU7CiAjZW5kaWYKKworI2lmIEVOQUJMRShKSVQpCisgICAgc3RkOjp1bmlxdWVfcHRyPEpJ
VFNpemVTdGF0aXN0aWNzPiBqaXRTaXplU3RhdGlzdGljczsKKyNlbmRpZgogICAgIAogICAgIENv
bXBsZXRlU3Vic3BhY2UgcHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZTsgLy8gVHlwZWQg
YXJyYXlzLCBzdHJpbmdzLCBiaXR2ZWN0b3JzLCBldGMgZ28gaGVyZS4KICAgICBDb21wbGV0ZVN1
YnNwYWNlIGpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlOyAvLyBCdXR0ZXJmbGllcywgYXJy
YXlzIG9mIEpTVmFsdWVzLCBldGMgZ28gaGVyZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9KU0RvbGxhclZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHJldmlzaW9uIDI3ODIxMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiAr
MzYsNyBAQAogI2luY2x1ZGUgIkZyYW1lVHJhY2Vycy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29k
ZUJsb2NrLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiSklUU2l6ZVN0
YXRpc3RpY3MuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTT05PYmplY3QuaCIKQEAgLTE5OTEsNiArMTk5MiwxMSBAQCBzdGF0aWMg
SlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvCiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTihmdW5jdGlvbklzR2lnYWNhZ2VFbmFibGVkKTsKIHN0YXRpYyBKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uVG9VbmNhY2hlYWJsZURpY3Rpb25hcnkpOwogc3RhdGlj
IEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Jc1ByaXZhdGVTeW1ib2wpOworI2lm
IEVOQUJMRShKSVQpCitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkpJ
VFNpemVTdGF0aXN0aWNzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0
aW9uRHVtcEpJVFNpemVTdGF0aXN0aWNzKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNU
SU9OKGZ1bmN0aW9uUmVzZXRKSVRTaXplU3RhdGlzdGljcyk7CisjZW5kaWYKIAogY29uc3QgQ2xh
c3NJbmZvIEpTRG9sbGFyVk06OnNfaW5mbyA9IHsgIkRvbGxhclZNIiwgJkJhc2U6OnNfaW5mbywg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RvbGxhclZNKSB9OwogCkBA
IC0zNTkxLDYgKzM1OTcsNDggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uSXNQ
cml2YQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGFzU3ltYm9sKGNhbGxG
cmFtZS0+YXJndW1lbnQoMCkpLT51aWQoKS5pc1ByaXZhdGUoKSkpOwogfQogCisjaWYgRU5BQkxF
KEpJVCkKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkpJVFNpemVTdGF0aXN0aWNz
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKikpCit7CisgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKworICAgIGlmICghdm0uaml0U2l6ZVN0YXRpc3RpY3MpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICBXVEY6OlN0cmluZ1ByaW50
U3RyZWFtIHN0cmVhbTsKKyAgICBzdHJlYW0ucHJpbnQoKnZtLmppdFNpemVTdGF0aXN0aWNzKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBzdHJlYW0udG9TdHJpbmco
KSkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25EdW1wSklUU2l6ZVN0
YXRpc3RpY3MsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKSkKK3sK
KyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworCisgICAgaWYgKCF2bS5qaXRTaXplU3RhdGlzdGljcykKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgIGRhdGFMb2dM
bigqdm0uaml0U2l6ZVN0YXRpc3RpY3MpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvblJlc2V0
SklUU2l6ZVN0YXRpc3RpY3MsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqKSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworCisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgaWYgKCF2bS5qaXRTaXplU3RhdGlzdGlj
cykKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAg
IHZtLmppdFNpemVTdGF0aXN0aWNzLT5yZXNldCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Cit9CisjZW5kaWYKKwogY29uc3RleHByIHVuc2lnbmVkIGpzRG9s
bGFyVk1Qcm9wZXJ0eUF0dHJpYnV0ZXMgPSBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0
ZTsKIAogdm9pZCBKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCkBAIC0zNzQ4LDYg
KzM3OTYsMTIgQEAgdm9pZCBKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAKICAg
ICBhZGRGdW5jdGlvbih2bSwgImlzUHJpdmF0ZVN5bWJvbCIsIGZ1bmN0aW9uSXNQcml2YXRlU3lt
Ym9sLCAxKTsKIAorI2lmIEVOQUJMRShKSVQpCisgICAgYWRkRnVuY3Rpb24odm0sICJqaXRTaXpl
U3RhdGlzdGljcyIsIGZ1bmN0aW9uSklUU2l6ZVN0YXRpc3RpY3MsIDApOworICAgIGFkZEZ1bmN0
aW9uKHZtLCAiZHVtcEpJVFNpemVTdGF0aXN0aWNzIiwgZnVuY3Rpb25EdW1wSklUU2l6ZVN0YXRp
c3RpY3MsIDApOworICAgIGFkZEZ1bmN0aW9uKHZtLCAicmVzZXRKSVRTaXplU3RhdGlzdGljcyIs
IGZ1bmN0aW9uUmVzZXRKSVRTaXplU3RhdGlzdGljcywgMCk7CisjZW5kaWYKKwogICAgIG1fb2Jq
ZWN0RG9pbmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlLnNl
dCh2bSwgdGhpcywgT2JqZWN0RG9pbmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3Rh
dHVzOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwganNOdWxsKCkpKTsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>