<?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>182086</bug_id>
          
          <creation_ts>2018-01-24 23:48:09 -0800</creation_ts>
          <short_desc>DirectArguments should protect itself using dynamic poisoning and precise index masking</short_desc>
          <delta_ts>2018-01-25 17:37:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jlewis3</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1392937</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-24 23:48:09 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1392939</commentid>
    <comment_count>1</comment_count>
      <attachid>332233</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-24 23:54:32 -0800</bug_when>
    <thetext>Created attachment 332233
maybe the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393300</commentid>
    <comment_count>2</comment_count>
      <attachid>332319</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-25 14:44:32 -0800</bug_when>
    <thetext>Created attachment 332319
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393322</commentid>
    <comment_count>3</comment_count>
      <attachid>332319</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-01-25 15:25:10 -0800</bug_when>
    <thetext>Comment on attachment 332319
the patch

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

r=me w/ some naming nits and other tidbits

&gt; Source/JavaScriptCore/runtime/DirectArguments.h:122
&gt; +        return *preciseIndexMaskPtr(offset.offset(), std::max(m_length, m_minCapacity), dynamicPoison(type(), DirectArgumentsType, ptr));

could this max() be spectre trained in a way that hurts us?

&gt; Source/WTF/wtf/MathExtras.h:492
&gt; +inline unsigned preciseIndexMaskShiftForSize(unsigned size)
&gt; +{
&gt; +    return size * 8 - 1;
&gt; +}
&gt; +
&gt; +template&lt;typename T&gt;
&gt; +unsigned preciseIndexMaskShift()
&gt; +{
&gt; +    return preciseIndexMaskShiftForSize(sizeof(T));
&gt; +}

constexpr for both of these?

&gt; Source/WTF/wtf/MathExtras.h:497
&gt; +    asm(&quot;&quot; : &quot;+r&quot;(pointer));

asm volatile?

&gt; Source/WTF/wtf/MathExtras.h:516
&gt; +        (static_cast&lt;uintptr_t&gt;(opaque(actual) ^ expected) &lt;&lt; 40));

Is it worth giving this 40 a name since it&apos;s hard coded inside JSC in a few places too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393325</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-25 15:35:02 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #3)
&gt; Comment on attachment 332319 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=332319&amp;action=review
&gt; 
&gt; r=me w/ some naming nits and other tidbits
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/DirectArguments.h:122
&gt; &gt; +        return *preciseIndexMaskPtr(offset.offset(), std::max(m_length, m_minCapacity), dynamicPoison(type(), DirectArgumentsType, ptr));
&gt; 
&gt; could this max() be spectre trained in a way that hurts us?

No.  At worst, you&apos;ll get a smaller limit.

&gt; 
&gt; &gt; Source/WTF/wtf/MathExtras.h:492
&gt; &gt; +inline unsigned preciseIndexMaskShiftForSize(unsigned size)
&gt; &gt; +{
&gt; &gt; +    return size * 8 - 1;
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +template&lt;typename T&gt;
&gt; &gt; +unsigned preciseIndexMaskShift()
&gt; &gt; +{
&gt; &gt; +    return preciseIndexMaskShiftForSize(sizeof(T));
&gt; &gt; +}
&gt; 
&gt; constexpr for both of these?

I&apos;ll try that.

&gt; 
&gt; &gt; Source/WTF/wtf/MathExtras.h:497
&gt; &gt; +    asm(&quot;&quot; : &quot;+r&quot;(pointer));
&gt; 
&gt; asm volatile?

I don&apos;t need it to be volatile.

&gt; 
&gt; &gt; Source/WTF/wtf/MathExtras.h:516
&gt; &gt; +        (static_cast&lt;uintptr_t&gt;(opaque(actual) ^ expected) &lt;&lt; 40));
&gt; 
&gt; Is it worth giving this 40 a name since it&apos;s hard coded inside JSC in a few
&gt; places too?

I&apos;ll do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393330</commentid>
    <comment_count>5</comment_count>
      <attachid>332327</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-25 15:46:15 -0800</bug_when>
    <thetext>Created attachment 332327
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393335</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-25 16:08:23 -0800</bug_when>
    <thetext>&lt;rdar://problem/36887421&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393336</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-25 16:08:32 -0800</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/227643/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393349</commentid>
    <comment_count>8</comment_count>
      <attachid>332327</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-01-25 16:30:44 -0800</bug_when>
    <thetext>Comment on attachment 332327
patch for landing

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

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.cpp:1049
&gt; +    UNUSED_PARAM(actualValue);

This is a typo, and as a result, you&apos;re breaking the 32-bit builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393354</commentid>
    <comment_count>9</comment_count>
      <attachid>332327</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-01-25 16:42:39 -0800</bug_when>
    <thetext>Comment on attachment 332327
patch for landing

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

&gt;&gt; Source/JavaScriptCore/jit/AssemblyHelpers.cpp:1049
&gt;&gt; +    UNUSED_PARAM(actualValue);
&gt; 
&gt; This is a typo, and as a result, you&apos;re breaking the 32-bit builds.

Fixed 32-bit build in r227644: &lt;https://trac.webkit.org/r227644&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393377</commentid>
    <comment_count>10</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2018-01-25 17:31:56 -0800</bug_when>
    <thetext>This also broke the windows build.

Looks like its a syntax error and another error:

MathExtras.h(497): error C2059: syntax error: &apos;:&apos; 

https://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/7382</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393378</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-25 17:37:48 -0800</bug_when>
    <thetext>(In reply to Matt Lewis from comment #10)
&gt; This also broke the windows build.
&gt; 
&gt; Looks like its a syntax error and another error:
&gt; 
&gt; MathExtras.h(497): error C2059: syntax error: &apos;:&apos; 
&gt; 
&gt; https://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/
&gt; 7382

Fixed in https://trac.webkit.org/changeset/227648/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332233</attachid>
            <date>2018-01-24 23:54:32 -0800</date>
            <delta_ts>2018-01-25 14:44:32 -0800</delta_ts>
            <desc>maybe the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>18934</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI3NTk1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBA
CisyMDE4LTAxLTI0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RGlyZWN0QXJndW1lbnRzIHNob3VsZCBwcm90ZWN0IGl0c2VsZiB1c2luZyBkeW5hbWljIHBvaXNv
bmluZyBhbmQgcHJlY2lzZSBpbmRleCBtYXNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODIwODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyBkeW5hbWljIHBv
aXNvbmluZyBhbmQgcHJlY2lzZSBpbmRleCBtYXNraW5nIGluIERpcmVjdEFyZ3VtZW50cywgdXNp
bmcgdGhlCisgICAgICAgIGhlbHBlcnMgZnJvbSA8d3RmL01hdGhFeHRyYXMuaD4gYW5kIGhlbHBl
cnMgaW4gQXNzZW1ibHlIZWxwZXJzIGFuZCBGVEw6Okxvd2VyREZHVG9CMy4KKworICAgICAgICAq
IGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
cjo6bHNoaWZ0UHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnJzaGlmdFB0cik6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMpOgorICAg
ICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlR2V0TXlBcmd1bWVudEJ5VmFsKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6cHJlY2lzZUluZGV4TWFzazY0KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6cHJlY2lzZUluZGV4TWFzazMyKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6ZHluYW1pY1BvaXNvbik6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmR5bmFtaWNQb2lzb25PbkxvYWRlZFR5cGUpOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpkeW5hbWljUG9pc29uT25UeXBl
KToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0UHJlY2lzZUluZGV4TWFzazMyKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0RHluYW1pY1BvaXNvbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6ZW1pdER5bmFtaWNQb2lzb25PbkxvYWRlZFR5cGUpOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OmVtaXREeW5hbWljUG9pc29uT25UeXBlKToKKyAgICAgICAgKiBqaXQv
QXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwpOgorICAgICAg
ICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmg6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3Vt
ZW50czo6Z2V0SW5kZXhRdWlja2x5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1l
bnRzOjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OmFy
Z3VtZW50KToKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmg6CisK
IDIwMTgtMDEtMjAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBK
U0MgR0Mgc2hvdWxkIHN1cHBvcnQgVExDcyAodGhyZWFkIGxvY2FsIGNhY2hlcykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJl
dmlzaW9uIDIyNzQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTgyLDExICs1ODIsMjEgQEAgcHVibGljOgog
ICAgICAgICBsc2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBzcmNEZXN0KTsKICAg
ICB9CiAgICAgCisgICAgdm9pZCBsc2hpZnRQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgbHNoaWZ0MzIoaW1tLCBzcmNEZXN0KTsKKyAgICB9
CisgICAgCiAgICAgdm9pZCByc2hpZnRQdHIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3Qp
CiAgICAgewogICAgICAgICByc2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBzcmNE
ZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHJzaGlmdFB0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdp
c3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAgICByc2hpZnQzMihpbW0sIHNyY0Rlc3QpOwor
ICAgIH0KKwogICAgIHZvaWQgdXJzaGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVz
dCkKICAgICB7CiAgICAgICAgIHVyc2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBz
cmNEZXN0KTsKQEAgLTkwNiwxMSArOTE2LDIxIEBAIHB1YmxpYzoKICAgICAgICAgbHNoaWZ0NjQo
dHJ1c3RlZEltbTMyRm9yU2hpZnQoaW1tKSwgc3JjRGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBs
c2hpZnRQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAg
ICAgICAgbHNoaWZ0NjQoaW1tLCBzcmNEZXN0KTsKKyAgICB9CisKICAgICB2b2lkIHJzaGlmdFB0
cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKICAgICB7CiAgICAgICAgIHJzaGlmdDY0
KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOwogICAgIH0KIAorICAgIHZvaWQg
cnNoaWZ0UHRyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7Cisg
ICAgICAgIHJzaGlmdDY0KGltbSwgc3JjRGVzdCk7CisgICAgfQorCiAgICAgdm9pZCB1cnNoaWZ0
UHRyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQogICAgIHsKICAgICAgICAgdXJzaGlm
dDY0KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIy
NzQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NDEzLDYgKzY0MTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkRpCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0VGFnKHRoaXMpOwogI2VuZGlmCisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwpAQCAtNjQyMyw2ICs2NDI0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaQogI2Vsc2UKICAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKTsKICNlbmRpZgorICAgIEdQ
UlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCiAgICAgICAgIHJldHVybjsKQEAgLTY0MzUsMTMgKzY0MzcsMTcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaQogICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTWFwcGVkQXJndW1lbnRzKCkpKSk7CiAKLSAgICBh
dXRvIGlzT3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlUmVnLCBEaXJlY3RB
cmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpKTsKKyAgICBtX2ppdC5sb2FkMzIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2VSZWcsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSks
IHNjcmF0Y2hSZWcpOworICAgIGF1dG8gaXNPdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgc2NyYXRjaFJlZyk7CiAgICAg
aWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkKICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVNvdXJjZSgpLCAwLCBpc091dE9mQm91bmRzKTsKICAg
ICAKKyAgICBtX2ppdC5lbWl0RHluYW1pY1BvaXNvbk9uVHlwZShiYXNlUmVnLCByZXN1bHRSZWcs
IERpcmVjdEFyZ3VtZW50c1R5cGUpOworICAgIG1faml0LmVtaXRQcmVjaXNlSW5kZXhNYXNrMzIo
cHJvcGVydHlSZWcsIHNjcmF0Y2hSZWcsIHJlc3VsdFJlZyk7CisgICAgCiAgICAgbV9qaXQubG9h
ZFZhbHVlKAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAg
YmFzZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBEaXJlY3RB
cmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSksCisgICAgICAgICAgICBiYXNlUmVnLCByZXN1bHRS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VP
ZmZzZXQoKSksCiAgICAgICAgIHJlc3VsdFJlZ3MpOwogCiAgICAgaWYgKCFub2RlLT5hcnJheU1v
ZGUoKS5pc0luQm91bmRzKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIyNzQ2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc3OSw3
ICszNzc5LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBu
b1ZhbHVlKCksIG51bGxwdHIsCiAgICAgICAgICAgICAgICAgbV9vdXQubm90TnVsbChtX291dC5s
b2FkUHRyKGJhc2UsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX21hcHBlZEFyZ3VtZW50cykpKTsK
IAotICAgICAgICAgICAgYXV0byBpc091dE9mQm91bmRzID0gbV9vdXQuYWJvdmVPckVxdWFsKGlu
ZGV4LCBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShiYXNlLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50
c19sZW5ndGgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBsZW5ndGggPSBtX291dC5sb2FkMzJOb25O
ZWdhdGl2ZShiYXNlLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpOworICAgICAgICAg
ICAgYXV0byBpc091dE9mQm91bmRzID0gbV9vdXQuYWJvdmVPckVxdWFsKGluZGV4LCBsZW5ndGgp
OwogICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CiAg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlKE91dE9mQm91bmRzLCBub1ZhbHVlKCksIG51bGxwdHIs
IGlzT3V0T2ZCb3VuZHMpOwogICAgICAgICAgICAgICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzID0g
bV9vdXQuYmFzZUluZGV4KApAQCAtMzc5Niw3ICszNzk3LDkgQEAgcHJpdmF0ZToKIAogICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbkJvdW5kcywgc2xv
d0Nhc2UpOwogICAgICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5k
ZXgoCi0gICAgICAgICAgICAgICAgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZSwgYmFz
ZSwgbV9vdXQuemVyb0V4dFB0cihpbmRleCkpOworICAgICAgICAgICAgICAgIG1faGVhcHMuRGly
ZWN0QXJndW1lbnRzX3N0b3JhZ2UsCisgICAgICAgICAgICAgICAgZHluYW1pY1BvaXNvbk9uVHlw
ZShiYXNlLCBEaXJlY3RBcmd1bWVudHNUeXBlKSwKKyAgICAgICAgICAgICAgICBwcmVjaXNlSW5k
ZXhNYXNrMzIoaW5kZXgsIGxlbmd0aCkpOwogICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFz
dFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5sb2FkNjQoYWRkcmVzcykpOwogICAgICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCkBAIC00MDA2LDE3ICs0MDA5LDkgQEAgcHJp
dmF0ZToKICAgICAgICAgCiAgICAgICAgIGlmIChtX25vZGUtPm51bWJlck9mQXJndW1lbnRzVG9T
a2lwKCkpCiAgICAgICAgICAgICBpbmRleCA9IG1fb3V0LmFkZChpbmRleCwgbV9vdXQuY29uc3RJ
bnQzMihtX25vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpKTsKLSAgICAgICAgaW5kZXgg
PSBtX291dC5hZGQoaW5kZXgsIG1fb3V0LmludDMyT25lKTsKLSAgICAgICAgCi0gICAgICAgIGlu
ZGV4ID0gbV9vdXQuemVyb0V4dChpbmRleCwgSW50NjQpOwogICAgICAgICAKLSAgICAgICAgaW5k
ZXggPSBtX291dC5iaXRBbmQoCi0gICAgICAgICAgICBpbmRleCwKLSAgICAgICAgICAgIG1fb3V0
LmFTaHIoCi0gICAgICAgICAgICAgICAgbV9vdXQuc3ViKAotICAgICAgICAgICAgICAgICAgICBp
bmRleCwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQub3BhcXVlKG1fb3V0Lnplcm9FeHQob3Jp
Z2luYWxMaW1pdCwgSW50NjQpKSksCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMig2
MykpKTsKKyAgICAgICAgaW5kZXggPSBtX291dC5hZGQoaW5kZXgsIG1fb3V0LmludDMyT25lKTsK
KyAgICAgICAgaW5kZXggPSBwcmVjaXNlSW5kZXhNYXNrMzIoaW5kZXgsIG9yaWdpbmFsTGltaXQp
OwogICAgICAgICAKICAgICAgICAgVHlwZWRQb2ludGVyIGJhc2U7CiAgICAgICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUpIHsKQEAgLTE1MDkyLDYgKzE1MDg3LDQzIEBAIHByaXZhdGU6CiAgICAgICAg
IAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICB9
CisgICAgCisgICAgTFZhbHVlIHByZWNpc2VJbmRleE1hc2s2NChMVmFsdWUgaW5kZXgsIExWYWx1
ZSBsaW1pdCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX291dC5iaXRBbmQoCisgICAgICAgICAg
ICBpbmRleCwKKyAgICAgICAgICAgIG1fb3V0LmFTaHIoCisgICAgICAgICAgICAgICAgbV9vdXQu
c3ViKAorICAgICAgICAgICAgICAgICAgICBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgbV9v
dXQub3BhcXVlKGxpbWl0KSksCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMig2Mykp
KTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIHByZWNpc2VJbmRleE1hc2szMihMVmFsdWUgaW5k
ZXgsIExWYWx1ZSBsaW1pdCkKKyAgICB7CisgICAgICAgIHJldHVybiBwcmVjaXNlSW5kZXhNYXNr
NjQobV9vdXQuemVyb0V4dChpbmRleCwgSW50NjQpLCBtX291dC56ZXJvRXh0KGxpbWl0LCBJbnQ2
NCkpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgZHluYW1pY1BvaXNvbihMVmFsdWUgdmFsdWUs
IExWYWx1ZSBwb2lzb24pCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQuYWRkKAorICAgICAg
ICAgICAgdmFsdWUsCisgICAgICAgICAgICBtX291dC5zaGwoCisgICAgICAgICAgICAgICAgbV9v
dXQuemVyb0V4dChwb2lzb24sIHBvaW50ZXJUeXBlKCkpLAorICAgICAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50MzIoNDApKSk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBkeW5hbWljUG9pc29u
T25Mb2FkZWRUeXBlKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIGFjdHVhbFR5cGUsIEpTVHlwZSBleHBl
Y3RlZFR5cGUpCisgICAgeworICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBkbyBhbnl0
aGluZyB0byBwcmV2ZW50IHVud2FudGVkIG9wdGltaXphdGlvbnMgb2YgdGhlIHhvcj8KKyAgICAg
ICAgLy8gT09QUyEgKGZpbGUgYSBidWcgb3IgZml4IGl0KQorICAgICAgICByZXR1cm4gZHluYW1p
Y1BvaXNvbih2YWx1ZSwgbV9vdXQuYml0WG9yKGFjdHVhbFR5cGUsIG1fb3V0LmNvbnN0SW50MzIo
ZXhwZWN0ZWRUeXBlKSkpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgZHluYW1pY1BvaXNvbk9u
VHlwZShMVmFsdWUgdmFsdWUsIEpTVHlwZSBleHBlY3RlZFR5cGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gZHluYW1pY1BvaXNvbk9uTG9hZGVkVHlwZSh2YWx1ZSwgbV9vdXQubG9hZDhaZXJvRXh0
MzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksIGV4cGVjdGVkVHlwZSk7Cisg
ICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KICAgICBMVmFsdWUgdm1DYWxs
KExUeXBlIHR5cGUsIExWYWx1ZSBmdW5jdGlvbiwgQXJncyYmLi4uIGFyZ3MpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAy
Mjc0NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC05MTEsNiArOTExLDQ5IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJz
OjpzYW5pdGl6ZVN0YWNrSW5saW4KICAgICBzdG9yZVB0cihzY3JhdGNoLCB2bS5hZGRyZXNzT2ZM
YXN0U3RhY2tUb3AoKSk7CiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0UHJlY2lzZUlu
ZGV4TWFzazMyKEdQUlJlZyBpbmRleCwgR1BSUmVnIGxlbmd0aCwgR1BSUmVnIHJlc3VsdCkKK3sK
KyAgICB6ZXJvRXh0ZW5kMzJUb1B0cihpbmRleCwgcmVzdWx0KTsKKyAgICBzdWJQdHIobGVuZ3Ro
LCByZXN1bHQpOworICAgIHJzaGlmdFB0cihUcnVzdGVkSW1tMzIocHJlY2lzZUluZGV4TWFza1No
aWZ0KSwgcmVzdWx0KTsKKyAgICBhbmRQdHIoaW5kZXgsIHJlc3VsdCk7Cit9CisKK3ZvaWQgQXNz
ZW1ibHlIZWxwZXJzOjplbWl0RHluYW1pY1BvaXNvbihHUFJSZWcgYmFzZSwgR1BSUmVnIHBvaXNv
blZhbHVlKQoreworI2lmIENQVShYODZfNjQpIHx8IENQVShBUk02NCkKKyAgICBsc2hpZnRQdHIo
VHJ1c3RlZEltbTMyKDQwKSwgcG9pc29uVmFsdWUpOworICAgIGFkZFB0cihwb2lzb25WYWx1ZSwg
YmFzZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShiYXNlKTsKKyAgICBVTlVTRURfUEFSQU0o
cG9pc29uVmFsdWUpOworI2VuZGlmCit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0RHlu
YW1pY1BvaXNvbk9uTG9hZGVkVHlwZShHUFJSZWcgYmFzZSwgR1BSUmVnIGFjdHVhbFR5cGUsIEpT
VHlwZSBleHBlY3RlZFR5cGUpCit7CisjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQorICAg
IHhvcjMyKFRydXN0ZWRJbW0zMihleHBlY3RlZFR5cGUpLCBhY3R1YWxUeXBlKTsKKyAgICBlbWl0
RHluYW1pY1BvaXNvbihiYXNlLCBhY3R1YWxUeXBlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KGJhc2UpOworICAgIFVOVVNFRF9QQVJBTShhY3R1YWxWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGV4cGVjdGVkVHlwZSk7CisjZW5kaWYKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRE
eW5hbWljUG9pc29uT25UeXBlKEdQUlJlZyBiYXNlLCBHUFJSZWcgc2NyYXRjaCwgSlNUeXBlIGV4
cGVjdGVkVHlwZSkKK3sKKyNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCisgICAgbG9hZDgo
QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7Cisg
ICAgZW1pdER5bmFtaWNQb2lzb25PbkxvYWRlZFR5cGUoYmFzZSwgc2NyYXRjaCwgZXhwZWN0ZWRU
eXBlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGJhc2UpOworICAgIFVOVVNFRF9QQVJBTShz
Y3JhdGNoKTsKKyAgICBVTlVTRURfUEFSQU0oZXhwZWN0ZWRUeXBlKTsKKyNlbmRpZgorfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIyNzQ2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xNjYwLDYgKzE2NjAsMTUgQEAgcHVibGljOgogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgdm9pZCB3YW5nc0ludDY0SGFzaChHUFJSZWcgaW5wdXRBbmRSZXN1bHQsIEdQUlJlZyBz
Y3JhdGNoKTsKICNlbmRpZgorICAgIAorICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IGluZGV4IGFu
ZCBsZW5ndGggYXJlIDMyLWJpdCBhbmQgd2Ugd2FudCBhIDY0LWJpdCBpbmRleC4gVGhpcyBhbHNv
IGFzc3VtZXMgdGhhdAorICAgIC8vIHRoZSBsZW5ndGggaXMgYWxyZWFkeSB6ZXJvLWV4dGVuZGVk
LiBBbHNvIHRoaXMgZG9lcyBub3QgY2xvYmJlciBpbmRleCwgd2hpY2ggaXMgdXNlZnVsIGluIHRo
ZQorICAgIC8vIGJhc2VsaW5lIEpJVC4gVGhpcyBwZXJtaXRzIGxlbmd0aCBhbmQgcmVzdWx0IHRv
IGJlIGluIHRoZSBzYW1lIHJlZ2lzdGVyLgorICAgIHZvaWQgZW1pdFByZWNpc2VJbmRleE1hc2sz
MihHUFJSZWcgaW5kZXgsIEdQUlJlZyBsZW5ndGgsIEdQUlJlZyByZXN1bHQpOworICAgIAorICAg
IHZvaWQgZW1pdER5bmFtaWNQb2lzb24oR1BSUmVnIGJhc2UsIEdQUlJlZyBwb2lzb25WYWx1ZSk7
CisgICAgdm9pZCBlbWl0RHluYW1pY1BvaXNvbk9uTG9hZGVkVHlwZShHUFJSZWcgYmFzZSwgR1BS
UmVnIGFjdHVhbFR5cGUsIEpTVHlwZSBleHBlY3RlZFR5cGUpOworICAgIHZvaWQgZW1pdER5bmFt
aWNQb2lzb25PblR5cGUoR1BSUmVnIGJhc2UsIEdQUlJlZyBzY3JhdGNoLCBKU1R5cGUgZXhwZWN0
ZWRUeXBlKTsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICB2b2lkIGxvYWRXYXNtQ29u
dGV4dEluc3RhbmNlKEdQUlJlZyBkc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIyNzQ2MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzkyLDIwICsxMzkyLDI0IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RGlyZWN0QXJn
dW1lbnRzR2UKICAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7CiAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDApOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9
IHJlZ1QzOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaDIgPSByZWdUNDsKICNlbHNlCiAgICAgUmVn
aXN0ZXJJRCBiYXNlID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOwog
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAg
UmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoMiA9IHJl
Z1Q0OwogI2VuZGlmCiAKICAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9U
eXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIo
Tm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihEaXJlY3RBcmd1bWVudHNUeXBlKSk7Cisg
ICAgZW1pdER5bmFtaWNQb2lzb25PbkxvYWRlZFR5cGUoYmFzZSwgc2NyYXRjaCwgRGlyZWN0QXJn
dW1lbnRzVHlwZSk7CiAgICAgCi0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZM
ZW5ndGgoKSkpKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhiYXNlLCBEaXJlY3RBcmd1bWVudHM6Om9m
ZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoMik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gz
MihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBzY3JhdGNoMikpOwogICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoVGVzdFB0cihOb25aZXJvLCBBZGRyZXNzKGJhc2UsIERpcmVjdEFyZ3VtZW50czo6
b2Zmc2V0T2ZNYXBwZWRBcmd1bWVudHMoKSkpKTsKICAgICAKLSAgICB6ZXJvRXh0ZW5kMzJUb1B0
cihwcm9wZXJ0eSwgc2NyYXRjaCk7CisgICAgZW1pdFByZWNpc2VJbmRleE1hc2szMihwcm9wZXJ0
eSwgc2NyYXRjaDIsIHNjcmF0Y2gpOwogICAgIGxvYWRWYWx1ZShCYXNlSW5kZXgoYmFzZSwgc2Ny
YXRjaCwgVGltZXNFaWdodCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkpLCByZXN1
bHQpOwogICAgIAogICAgIHJldHVybiBzbG93Q2FzZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkocmV2aXNpb24gMjI3NDYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC05OCwxMyArOTgsMTMgQEAgcHVibGljOgogICAgIEpTVmFsdWUgZ2V0SW5k
ZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihpc01hcHBlZEFyZ3VtZW50KGkpKTsKLSAgICAgICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odGhpcyktPnN0b3JhZ2UoKVtpXS5nZXQoKTsK
KyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oZHluYW1pY1BvaXNv
bih0eXBlKCksIERpcmVjdEFyZ3VtZW50c1R5cGUsIHRoaXMpKS0+c3RvcmFnZSgpW3ByZWNpc2VJ
bmRleE1hc2soaSwgbV9sZW5ndGgpXS5nZXQoKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRJ
bmRleFF1aWNrbHkoVk0mIHZtLCB1aW50MzJfdCBpLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKICAg
ICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXNNYXBwZWRBcmd1bWVudChp
KSk7Ci0gICAgICAgIHN0b3JhZ2UoKVtpXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICAgICAg
ZHluYW1pY1BvaXNvbih0eXBlKCksIERpcmVjdEFyZ3VtZW50c1R5cGUsIHRoaXMpLT5zdG9yYWdl
KClbcHJlY2lzZUluZGV4TWFzayhpLCBtX2xlbmd0aCldLnNldCh2bSwgdGhpcywgdmFsdWUpOwog
ICAgIH0KICAgICAKICAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4mIGNhbGxlZSgpCkBAIC0x
MTYsNyArMTE2LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG9mZnNldCk7CiAg
ICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG9mZnNldC5vZmZzZXQoKSA8
IHN0ZDo6bWF4KG1fbGVuZ3RoLCBtX21pbkNhcGFjaXR5KSk7Ci0gICAgICAgIHJldHVybiBzdG9y
YWdlKClbb2Zmc2V0Lm9mZnNldCgpXTsKKyAgICAgICAgcmV0dXJuIGR5bmFtaWNQb2lzb24odHlw
ZSgpLCBEaXJlY3RBcmd1bWVudHNUeXBlLCB0aGlzKS0+c3RvcmFnZSgpW3ByZWNpc2VJbmRleE1h
c2sob2Zmc2V0Lm9mZnNldCgpLCBzdGQ6Om1heChtX2xlbmd0aCwgbV9taW5DYXBhY2l0eSkpXTsK
ICAgICB9CiAgICAgCiAgICAgLy8gTWV0aG9kcyBpbnRlbmRlZCBmb3IgdXNlIGJ5IHRoZSBHZW5l
cmljQXJndW1lbnRzIG1peGluLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyMjc0NjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNzQ2MykKKysrIFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTgtMDEtMjQg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBEaXJlY3RBcmd1bWVu
dHMgc2hvdWxkIHByb3RlY3QgaXRzZWxmIHVzaW5nIGR5bmFtaWMgcG9pc29uaW5nIGFuZCBwcmVj
aXNlIGluZGV4IG1hc2tpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE4MjA4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
ICAgICAgICAKKyAgICAgICAgQWRkIGhlbHBlcnMgZm9yOgorICAgICAgICAKKyAgICAgICAgRHlu
YW1pYyBwb2lzb25pbmc6IHRoaXMgbWVhbnMgYXJyYW5naW5nIHRvIGhhdmUgdGhlIHBvaW50ZXIg
eW91IHdpbGwgZGVyZWZlcmVuY2UgYmVjb21lIGFuCisgICAgICAgIGludmFsaWQgcG9pbnRlciBp
ZiB0aGUgdHlwZSBjaGVjayB5b3Ugd2VyZSByZWx5aW5nIG9uIHdvdWxkIGhhdmUgZmFpbGVkLgor
ICAgICAgICAKKyAgICAgICAgUHJlY2lzZSBpbmRleCBtYXNraW5nOiBhIHZhcmlhbnQgb2YgaW5k
ZXggbWFza2luZyB0aGF0IGRvZXMgbm90IGRlcGVuZCBvbiBkaXN0YW5jaW5nLiBJIGZpZ3VyZWQK
KyAgICAgICAgSSdkIGp1c3QgdHJ5IHRoaXMgZmlyc3QgZm9yIERpcmVjdEFyZ3VtZW50cywgc2lu
Y2UgSSBkaWRuJ3QgdGhpbmsgdGhhdCBhcmd1bWVudHNbaV0gd2FzIGV2ZXIKKyAgICAgICAgaG90
IGVub3VnaCB0byB3YXJyYW50IGFueXRoaW5nIGJldHRlci4gVHVybnMgb3V0IHRoYXQgaW4gYWxs
IG9mIHRoZSBiZW5jaG1hcmtzIHRoYXQgY2FyZSBhYm91dAorICAgICAgICBhcmd1bWVudHMgcGVy
Zm9ybWFuY2UsIHdlIG9wdGltaXplIHRoaW5ncyB0byB0aGUgcG9pbnQgdGhhdCB0aGUgaW5kZXgg
bWFza2luZyBpc24ndCBvbiBhIGhvdAorICAgICAgICBwYXRoIGFueW1vcmUuIFR1cm5zIG91dCwg
aXQncyBuZXV0cmFsIQorCisgICAgICAgICogd3RmL01hdGhFeHRyYXMuaDoKKyAgICAgICAgKFdU
Rjo6cHJlY2lzZUluZGV4TWFzayk6CisgICAgICAgIChXVEY6OmR5bmFtaWNQb2lzb24pOgorCiAy
MDE4LTAxLTIzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSlND
IHNob3VsZCB1c2UgYSBzcGVjdWxhdGlvbiBmZW5jZSBvbiBWTSBlbnRyeS9leGl0CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
TWF0aEV4dHJhcy5oCShyZXZpc2lvbiAyMjc0NjMpCisrKyBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0
cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDgwLDYgKzQ4MCwzNCBAQCBpbmxpbmUgdWludDMyX3QgY29tcHV0ZUluZGV4aW5nTWFzayh1aW50
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDx1aW50MzJfdD4o
LTEpKSA+PiBzdGQ6OmNseihzaXplKTsKIH0KIAorY29uc3RleHByIHVuc2lnbmVkIHByZWNpc2VJ
bmRleE1hc2tTaGlmdCA9IHNpemVvZih2b2lkKikgKiA4IC0gMTsgLy8gMzEgb24gMzItYml0LCA2
MyBvbiA2NC1iaXQuCisKK2lubGluZSB1aW50cHRyX3QgcHJlY2lzZUluZGV4TWFzayh1aW50cHRy
X3QgaW5kZXgsIHVpbnRwdHJfdCBsZW5ndGgpCit7CisgICAgcmV0dXJuIGluZGV4ICYgc3RhdGlj
X2Nhc3Q8dWludHB0cl90PigKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGluZGV4IC0g
bGVuZ3RoKSA+PiBzdGF0aWNfY2FzdDxpbnRwdHJfdD4ocHJlY2lzZUluZGV4TWFza1NoaWZ0KSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CitpbmxpbmUgVCogZHluYW1p
Y1BvaXNvbihVIGFjdHVhbCwgVSBleHBlY3RlZCwgVCogcG9pbnRlcikKK3sKKyNpZiBDUFUoWDg2
XzY0KSB8fCBDUFUoQVJNNjQpCisgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gZG8gYW55dGhp
bmcgdG8gcHJldmVudCB1bndhbnRlZCBvcHRpbWl6YXRpb25zIG9mIHRoZSB4b3I/CisgICAgLy8g
T09QUyEgKGZpbGUgYSBidWcgb3IgZml4IGl0KQorICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VCo+
KAorICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHBvaW50ZXIpICsKKyAgICAgICAgKHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4oYWN0dWFsIF4gZXhwZWN0ZWQpIDw8IDQwKSk7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShhY3R1YWwpOworICAgIFVOVVNFRF9QQVJBTShleHBlY3RlZCk7CisgICAg
cmV0dXJuIHBvaW50ZXI7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKK3VzaW5n
IFdURjo6ZHluYW1pY1BvaXNvbjsKK3VzaW5nIFdURjo6cHJlY2lzZUluZGV4TWFzazsKK3VzaW5n
IFdURjo6cHJlY2lzZUluZGV4TWFza1NoaWZ0OworCiAjZW5kaWYgLy8gI2lmbmRlZiBXVEZfTWF0
aEV4dHJhc19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332319</attachid>
            <date>2018-01-25 14:44:32 -0800</date>
            <delta_ts>2018-01-25 15:46:15 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>21158</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI3NTk1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBA
CisyMDE4LTAxLTI0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RGlyZWN0QXJndW1lbnRzIHNob3VsZCBwcm90ZWN0IGl0c2VsZiB1c2luZyBkeW5hbWljIHBvaXNv
bmluZyBhbmQgcHJlY2lzZSBpbmRleCBtYXNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODIwODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyBkeW5hbWljIHBv
aXNvbmluZyBhbmQgcHJlY2lzZSBpbmRleCBtYXNraW5nIGluIERpcmVjdEFyZ3VtZW50cywgdXNp
bmcgdGhlCisgICAgICAgIGhlbHBlcnMgZnJvbSA8d3RmL01hdGhFeHRyYXMuaD4gYW5kIGhlbHBl
cnMgaW4gQXNzZW1ibHlIZWxwZXJzIGFuZCBGVEw6Okxvd2VyREZHVG9CMy4KKworICAgICAgICAq
IGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
cjo6bHNoaWZ0UHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnJzaGlmdFB0cik6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMpOgorICAg
ICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlR2V0TXlBcmd1bWVudEJ5VmFsKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6cHJlY2lzZUluZGV4TWFzazY0KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6cHJlY2lzZUluZGV4TWFzazMyKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6ZHluYW1pY1BvaXNvbik6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmR5bmFtaWNQb2lzb25PbkxvYWRlZFR5cGUpOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpkeW5hbWljUG9pc29uT25UeXBl
KToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0UHJlY2lzZUluZGV4TWFzazMyKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0RHluYW1pY1BvaXNvbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6ZW1pdER5bmFtaWNQb2lzb25PbkxvYWRlZFR5cGUpOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OmVtaXREeW5hbWljUG9pc29uT25UeXBlKToKKyAgICAgICAgKiBqaXQv
QXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwpOgorICAgICAg
ICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmg6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3Vt
ZW50czo6Z2V0SW5kZXhRdWlja2x5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1l
bnRzOjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OmFy
Z3VtZW50KToKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmg6CisK
IDIwMTgtMDEtMjAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBK
U0MgR0Mgc2hvdWxkIHN1cHBvcnQgVExDcyAodGhyZWFkIGxvY2FsIGNhY2hlcykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJl
dmlzaW9uIDIyNzQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTgyLDExICs1ODIsMjEgQEAgcHVibGljOgog
ICAgICAgICBsc2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBzcmNEZXN0KTsKICAg
ICB9CiAgICAgCisgICAgdm9pZCBsc2hpZnRQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgbHNoaWZ0MzIoaW1tLCBzcmNEZXN0KTsKKyAgICB9
CisgICAgCiAgICAgdm9pZCByc2hpZnRQdHIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3Qp
CiAgICAgewogICAgICAgICByc2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBzcmNE
ZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHJzaGlmdFB0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdp
c3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAgICByc2hpZnQzMihpbW0sIHNyY0Rlc3QpOwor
ICAgIH0KKwogICAgIHZvaWQgdXJzaGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVz
dCkKICAgICB7CiAgICAgICAgIHVyc2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBz
cmNEZXN0KTsKQEAgLTkwNiwxMSArOTE2LDIxIEBAIHB1YmxpYzoKICAgICAgICAgbHNoaWZ0NjQo
dHJ1c3RlZEltbTMyRm9yU2hpZnQoaW1tKSwgc3JjRGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBs
c2hpZnRQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAg
ICAgICAgbHNoaWZ0NjQoaW1tLCBzcmNEZXN0KTsKKyAgICB9CisKICAgICB2b2lkIHJzaGlmdFB0
cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKICAgICB7CiAgICAgICAgIHJzaGlmdDY0
KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOwogICAgIH0KIAorICAgIHZvaWQg
cnNoaWZ0UHRyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7Cisg
ICAgICAgIHJzaGlmdDY0KGltbSwgc3JjRGVzdCk7CisgICAgfQorCiAgICAgdm9pZCB1cnNoaWZ0
UHRyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQogICAgIHsKICAgICAgICAgdXJzaGlm
dDY0KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIy
NzQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NDEzLDYgKzY0MTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkRpCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0VGFnKHRoaXMpOwogI2VuZGlmCisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwpAQCAtNjQyMyw2ICs2NDI0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaQogI2Vsc2UKICAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKTsKICNlbmRpZgorICAgIEdQ
UlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCiAgICAgICAgIHJldHVybjsKQEAgLTY0MzUsMTQgKzY0MzcsMjAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaQogICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTWFwcGVkQXJndW1lbnRzKCkpKSk7CiAKLSAgICBh
dXRvIGlzT3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlUmVnLCBEaXJlY3RB
cmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpKTsKKyAgICBtX2ppdC5sb2FkMzIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2VSZWcsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSks
IHNjcmF0Y2hSZWcpOworICAgIGF1dG8gaXNPdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgc2NyYXRjaFJlZyk7CiAgICAg
aWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkKICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVNvdXJjZSgpLCAwLCBpc091dE9mQm91bmRzKTsKICAg
ICAKKyAgICBtX2ppdC5lbWl0RHluYW1pY1BvaXNvbk9uVHlwZShiYXNlUmVnLCByZXN1bHRSZWcs
IERpcmVjdEFyZ3VtZW50c1R5cGUpOworICAgIG1faml0LmVtaXRQcmVwYXJlUHJlY2lzZUluZGV4
TWFzazMyKHByb3BlcnR5UmVnLCBzY3JhdGNoUmVnLCBzY3JhdGNoUmVnKTsKKwogICAgIG1faml0
LmxvYWRWYWx1ZSgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKICAgICAgICAg
ICAgIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgRGly
ZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkpLAogICAgICAgICByZXN1bHRSZWdzKTsKKyAg
ICAKKyAgICBtX2ppdC5hbmRQdHIoc2NyYXRjaFJlZywgcmVzdWx0UmVnKTsKIAogICAgIGlmICgh
bm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CiAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAkocmV2aXNpb24gMjI3NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzc5LDcgKzM3NzksOCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVs
bHB0ciwKICAgICAgICAgICAgICAgICBtX291dC5ub3ROdWxsKG1fb3V0LmxvYWRQdHIoYmFzZSwg
bV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfbWFwcGVkQXJndW1lbnRzKSkpOwogCi0gICAgICAgICAg
ICBhdXRvIGlzT3V0T2ZCb3VuZHMgPSBtX291dC5hYm92ZU9yRXF1YWwoaW5kZXgsIG1fb3V0Lmxv
YWQzMk5vbk5lZ2F0aXZlKGJhc2UsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2xlbmd0aCkpOwor
ICAgICAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKGJhc2Us
IG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2xlbmd0aCk7CisgICAgICAgICAgICBhdXRvIGlzT3V0
T2ZCb3VuZHMgPSBtX291dC5hYm92ZU9yRXF1YWwoaW5kZXgsIGxlbmd0aCk7CiAgICAgICAgICAg
ICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKICAgICAgICAgICAgICAg
ICBzcGVjdWxhdGUoT3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgbnVsbHB0ciwgaXNPdXRPZkJvdW5k
cyk7CiAgICAgICAgICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5k
ZXgoCkBAIC0zNzk2LDggKzM3OTcsMTEgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbkJvdW5kcywgc2xvd0Nhc2UpOwogICAg
ICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCi0gICAgICAg
ICAgICAgICAgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZSwgYmFzZSwgbV9vdXQuemVy
b0V4dFB0cihpbmRleCkpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9
IG1fb3V0LmFuY2hvcihtX291dC5sb2FkNjQoYWRkcmVzcykpOworICAgICAgICAgICAgICAgIG1f
aGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsCisgICAgICAgICAgICAgICAgZHluYW1pY1Bv
aXNvbk9uVHlwZShiYXNlLCBEaXJlY3RBcmd1bWVudHNUeXBlKSwKKyAgICAgICAgICAgICAgICBt
X291dC56ZXJvRXh0KGluZGV4LCBwb2ludGVyVHlwZSgpKSk7CisgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgICAgIHByZWNp
c2VJbmRleE1hc2szMihtX291dC5sb2FkNjQoYWRkcmVzcyksIGluZGV4LCBsZW5ndGgpKTsKICAg
ICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CkBAIC0zOTc0LDcgKzM5NzgsNyBAQCBw
cml2YXRlOgogICAgIHsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUg
PSBtX25vZGUtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwogICAg
ICAgICAKLSAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7
CisgICAgICAgIExWYWx1ZSBvcmlnaW5hbEluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIo
KSk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgb3JpZ2luYWxMaW1pdDsKICAgICAgICAgaWYg
KGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKQEAgLTM5
ODksNyArMzk5Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChtX25vZGUtPm51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKCkpCiAgICAgICAgICAgICBsaW1pdCA9IG1fb3V0LnN1YihsaW1pdCwgbV9v
dXQuY29uc3RJbnQzMihtX25vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpKTsKICAgICAg
ICAgCi0gICAgICAgIExWYWx1ZSBpc091dE9mQm91bmRzID0gbV9vdXQuYWJvdmVPckVxdWFsKGlu
ZGV4LCBsaW1pdCk7CisgICAgICAgIExWYWx1ZSBpc091dE9mQm91bmRzID0gbV9vdXQuYWJvdmVP
ckVxdWFsKG9yaWdpbmFsSW5kZXgsIGxpbWl0KTsKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gbnVsbHB0cjsKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBudWxscHRy
OwogICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0OwpAQCAtNDAwNCwxOSArNDAwOCwx
MSBAQCBwcml2YXRlOgogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHNwZWN1bGF0ZShPdXRP
ZkJvdW5kcywgbm9WYWx1ZSgpLCAwLCBpc091dE9mQm91bmRzKTsKICAgICAgICAgCisgICAgICAg
IExWYWx1ZSBpbmRleCA9IG9yaWdpbmFsSW5kZXg7CiAgICAgICAgIGlmIChtX25vZGUtPm51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKCkpCiAgICAgICAgICAgICBpbmRleCA9IG1fb3V0LmFkZChpbmRl
eCwgbV9vdXQuY29uc3RJbnQzMihtX25vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpKTsK
LSAgICAgICAgaW5kZXggPSBtX291dC5hZGQoaW5kZXgsIG1fb3V0LmludDMyT25lKTsKICAgICAg
ICAgCi0gICAgICAgIGluZGV4ID0gbV9vdXQuemVyb0V4dChpbmRleCwgSW50NjQpOwotICAgICAg
ICAKLSAgICAgICAgaW5kZXggPSBtX291dC5iaXRBbmQoCi0gICAgICAgICAgICBpbmRleCwKLSAg
ICAgICAgICAgIG1fb3V0LmFTaHIoCi0gICAgICAgICAgICAgICAgbV9vdXQuc3ViKAotICAgICAg
ICAgICAgICAgICAgICBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQub3BhcXVlKG1f
b3V0Lnplcm9FeHQob3JpZ2luYWxMaW1pdCwgSW50NjQpKSksCi0gICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMig2MykpKTsKKyAgICAgICAgaW5kZXggPSBtX291dC5hZGQoaW5kZXgsIG1f
b3V0LmludDMyT25lKTsKICAgICAgICAgCiAgICAgICAgIFR5cGVkUG9pbnRlciBiYXNlOwogICAg
ICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CkBAIC00MDI3LDggKzQwMjMsMTAgQEAgcHJpdmF0
ZToKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSByZXN1bHQ7CiAgICAgICAgIGlmIChiYXNlKSB7
Ci0gICAgICAgICAgICBMVmFsdWUgcG9pbnRlciA9IG1fb3V0LmJhc2VJbmRleChiYXNlLnZhbHVl
KCksIGluZGV4LCBTY2FsZUVpZ2h0KTsKKyAgICAgICAgICAgIExWYWx1ZSBwb2ludGVyID0gbV9v
dXQuYmFzZUluZGV4KAorICAgICAgICAgICAgICAgIGJhc2UudmFsdWUoKSwgbV9vdXQuemVyb0V4
dChpbmRleCwgcG9pbnRlclR5cGUoKSksIFNjYWxlRWlnaHQpOwogICAgICAgICAgICAgcmVzdWx0
ID0gbV9vdXQubG9hZDY0KFR5cGVkUG9pbnRlcihtX2hlYXBzLnZhcmlhYmxlcy5hdEFueUluZGV4
KCksIHBvaW50ZXIpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHByZWNpc2VJbmRleE1hc2szMihy
ZXN1bHQsIG9yaWdpbmFsSW5kZXgsIGxpbWl0KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICByZXN1bHQgPSBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KSk7CiAgICAgICAgIApAQCAtMTUwOTIsNiArMTUwOTAsNDggQEAgcHJpdmF0ZToKICAgICAgICAg
CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgIH0K
KyAgICAKKyAgICBMVmFsdWUgcHJlY2lzZUluZGV4TWFzazY0KExWYWx1ZSB2YWx1ZSwgTFZhbHVl
IGluZGV4LCBMVmFsdWUgbGltaXQpCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQuYml0QW5k
KAorICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICBtX291dC5hU2hyKAorICAgICAgICAg
ICAgICAgIG1fb3V0LnN1YigKKyAgICAgICAgICAgICAgICAgICAgaW5kZXgsCisgICAgICAgICAg
ICAgICAgICAgIG1fb3V0Lm9wYXF1ZShsaW1pdCkpLAorICAgICAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50MzIoNjMpKSk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBwcmVjaXNlSW5kZXhNYXNr
MzIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgaW5kZXgsIExWYWx1ZSBsaW1pdCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBwcmVjaXNlSW5kZXhNYXNrNjQodmFsdWUsIG1fb3V0Lnplcm9FeHQoaW5kZXgs
IEludDY0KSwgbV9vdXQuemVyb0V4dChsaW1pdCwgSW50NjQpKTsKKyAgICB9CisgICAgCisgICAg
TFZhbHVlIGR5bmFtaWNQb2lzb24oTFZhbHVlIHZhbHVlLCBMVmFsdWUgcG9pc29uKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fb3V0LmFkZCgKKyAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAg
ICAgbV9vdXQuc2hsKAorICAgICAgICAgICAgICAgIG1fb3V0Lnplcm9FeHQocG9pc29uLCBwb2lu
dGVyVHlwZSgpKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKDQwKSkpOworICAg
IH0KKyAgICAKKyAgICBMVmFsdWUgZHluYW1pY1BvaXNvbk9uTG9hZGVkVHlwZShMVmFsdWUgdmFs
dWUsIExWYWx1ZSBhY3R1YWxUeXBlLCBKU1R5cGUgZXhwZWN0ZWRUeXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGR5bmFtaWNQb2lzb24oCisgICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAg
IG1fb3V0LmJpdFhvcigKKyAgICAgICAgICAgICAgICBtX291dC5vcGFxdWUoYWN0dWFsVHlwZSks
CisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihleHBlY3RlZFR5cGUpKSk7CisgICAg
fQorICAgIAorICAgIExWYWx1ZSBkeW5hbWljUG9pc29uT25UeXBlKExWYWx1ZSB2YWx1ZSwgSlNU
eXBlIGV4cGVjdGVkVHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBkeW5hbWljUG9pc29uT25M
b2FkZWRUeXBlKAorICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICBtX291dC5sb2FkOFpl
cm9FeHQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwKKyAgICAgICAgICAg
IGV4cGVjdGVkVHlwZSk7CisgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4K
ICAgICBMVmFsdWUgdm1DYWxsKExUeXBlIHR5cGUsIExWYWx1ZSBmdW5jdGlvbiwgQXJncyYmLi4u
IGFyZ3MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwCShyZXZpc2lvbiAyMjc0NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MTEsNiArOTExLDUzIEBAIHZv
aWQgQXNzZW1ibHlIZWxwZXJzOjpzYW5pdGl6ZVN0YWNrSW5saW4KICAgICBzdG9yZVB0cihzY3Jh
dGNoLCB2bS5hZGRyZXNzT2ZMYXN0U3RhY2tUb3AoKSk7CiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjplbWl0UHJlcGFyZVByZWNpc2VJbmRleE1hc2szMihHUFJSZWcgaW5kZXgsIEdQUlJlZyBs
ZW5ndGgsIEdQUlJlZyByZXN1bHQpCit7CisgICAgaWYgKGxlbmd0aCA9PSByZXN1bHQpIHsKKyAg
ICAgICAgbmVnUHRyKGxlbmd0aCk7CisgICAgICAgIGFkZFB0cihpbmRleCwgbGVuZ3RoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBtb3ZlKGluZGV4LCByZXN1bHQpOworICAgICAgICBzdWJQdHIo
bGVuZ3RoLCByZXN1bHQpOworICAgIH0KKyAgICByc2hpZnRQdHIoVHJ1c3RlZEltbTMyKHByZWNp
c2VJbmRleE1hc2tTaGlmdDx2b2lkKj4oKSksIHJlc3VsdCk7Cit9CisKK3ZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjplbWl0RHluYW1pY1BvaXNvbihHUFJSZWcgYmFzZSwgR1BSUmVnIHBvaXNvblZhbHVl
KQoreworI2lmIENQVShYODZfNjQpIHx8IENQVShBUk02NCkKKyAgICBsc2hpZnRQdHIoVHJ1c3Rl
ZEltbTMyKDQwKSwgcG9pc29uVmFsdWUpOworICAgIGFkZFB0cihwb2lzb25WYWx1ZSwgYmFzZSk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShiYXNlKTsKKyAgICBVTlVTRURfUEFSQU0ocG9pc29u
VmFsdWUpOworI2VuZGlmCit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0RHluYW1pY1Bv
aXNvbk9uTG9hZGVkVHlwZShHUFJSZWcgYmFzZSwgR1BSUmVnIGFjdHVhbFR5cGUsIEpTVHlwZSBl
eHBlY3RlZFR5cGUpCit7CisjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQorICAgIHhvcjMy
KFRydXN0ZWRJbW0zMihleHBlY3RlZFR5cGUpLCBhY3R1YWxUeXBlKTsKKyAgICBlbWl0RHluYW1p
Y1BvaXNvbihiYXNlLCBhY3R1YWxUeXBlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGJhc2Up
OworICAgIFVOVVNFRF9QQVJBTShhY3R1YWxWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKGV4cGVj
dGVkVHlwZSk7CisjZW5kaWYKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXREeW5hbWlj
UG9pc29uT25UeXBlKEdQUlJlZyBiYXNlLCBHUFJSZWcgc2NyYXRjaCwgSlNUeXBlIGV4cGVjdGVk
VHlwZSkKK3sKKyNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCisgICAgbG9hZDgoQWRkcmVz
cyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgZW1p
dER5bmFtaWNQb2lzb25PbkxvYWRlZFR5cGUoYmFzZSwgc2NyYXRjaCwgZXhwZWN0ZWRUeXBlKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGJhc2UpOworICAgIFVOVVNFRF9QQVJBTShzY3JhdGNo
KTsKKyAgICBVTlVTRURfUEFSQU0oZXhwZWN0ZWRUeXBlKTsKKyNlbmRpZgorfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIyNzQ2MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xNjYwLDYgKzE2NjAsMTUgQEAgcHVibGljOgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
dm9pZCB3YW5nc0ludDY0SGFzaChHUFJSZWcgaW5wdXRBbmRSZXN1bHQsIEdQUlJlZyBzY3JhdGNo
KTsKICNlbmRpZgorICAgIAorICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IGluZGV4IGFuZCBsZW5n
dGggYXJlIDMyLWJpdC4gVGhpcyBhbHNvIGFzc3VtZXMgdGhhdCB0aGV5IGFyZSBhbHJlYWR5Cisg
ICAgLy8gemVyby1leHRlbmRlZC4gQWxzbyB0aGlzIGRvZXMgbm90IGNsb2JiZXIgaW5kZXgsIHdo
aWNoIGlzIHVzZWZ1bCBpbiB0aGUgYmFzZWxpbmUgSklULiBUaGlzCisgICAgLy8gcGVybWl0cyBs
ZW5ndGggYW5kIHJlc3VsdCB0byBiZSBpbiB0aGUgc2FtZSByZWdpc3Rlci4KKyAgICB2b2lkIGVt
aXRQcmVwYXJlUHJlY2lzZUluZGV4TWFzazMyKEdQUlJlZyBpbmRleCwgR1BSUmVnIGxlbmd0aCwg
R1BSUmVnIHJlc3VsdCk7CisgICAgCisgICAgdm9pZCBlbWl0RHluYW1pY1BvaXNvbihHUFJSZWcg
YmFzZSwgR1BSUmVnIHBvaXNvblZhbHVlKTsKKyAgICB2b2lkIGVtaXREeW5hbWljUG9pc29uT25M
b2FkZWRUeXBlKEdQUlJlZyBiYXNlLCBHUFJSZWcgYWN0dWFsVHlwZSwgSlNUeXBlIGV4cGVjdGVk
VHlwZSk7CisgICAgdm9pZCBlbWl0RHluYW1pY1BvaXNvbk9uVHlwZShHUFJSZWcgYmFzZSwgR1BS
UmVnIHNjcmF0Y2gsIEpTVHlwZSBleHBlY3RlZFR5cGUpOwogCiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogICAgIHZvaWQgbG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSUmVnIGRzdCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
cmV2aXNpb24gMjI3NDYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTIsMjEgKzEzOTIsMjYgQEAgSklUOjpK
dW1wTGlzdCBKSVQ6OmVtaXREaXJlY3RBcmd1bWVudHNHZQogICAgIFJlZ2lzdGVySUQgcHJvcGVy
dHkgPSByZWdUMTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNo
MiA9IHJlZ1Q0OwogI2Vsc2UKICAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKICAgICBSZWdp
c3RlcklEIHByb3BlcnR5ID0gcmVnVDI7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyAg
ICBSZWdpc3RlcklEIHNjcmF0Y2gyID0gcmVnVDQ7CiAjZW5kaWYKIAogICAgIGxvYWQ4KEFkZHJl
c3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOwogICAgIGJh
ZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMy
KERpcmVjdEFyZ3VtZW50c1R5cGUpKTsKKyAgICBlbWl0RHluYW1pY1BvaXNvbk9uTG9hZGVkVHlw
ZShiYXNlLCBzY3JhdGNoLCBEaXJlY3RBcmd1bWVudHNUeXBlKTsKICAgICAKLSAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwg
RGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIGxvYWQzMihBZGRyZXNz
KGJhc2UsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSksIHNjcmF0Y2gyKTsKKyAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIHNjcmF0
Y2gyKSk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0UHRyKE5vblplcm8sIEFkZHJl
c3MoYmFzZSwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZk1hcHBlZEFyZ3VtZW50cygpKSkpOwog
ICAgIAotICAgIHplcm9FeHRlbmQzMlRvUHRyKHByb3BlcnR5LCBzY3JhdGNoKTsKLSAgICBsb2Fk
VmFsdWUoQmFzZUluZGV4KGJhc2UsIHNjcmF0Y2gsIFRpbWVzRWlnaHQsIERpcmVjdEFyZ3VtZW50
czo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0KTsKKyAgICBlbWl0UHJlcGFyZVByZWNpc2VJbmRl
eE1hc2szMihwcm9wZXJ0eSwgc2NyYXRjaDIsIHNjcmF0Y2gyKTsKKyAgICBsb2FkVmFsdWUoQmFz
ZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc0VpZ2h0LCBEaXJlY3RBcmd1bWVudHM6OnN0b3Jh
Z2VPZmZzZXQoKSksIHJlc3VsdCk7CisgICAgYW5kUHRyKHNjcmF0Y2gyLCByZXN1bHQucGF5bG9h
ZEdQUigpKTsKICAgICAKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJldmlzaW9uIDIy
NzQ2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtOTgsMTMgKzk4LDE1IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVl
IGdldEluZGV4UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXNNYXBwZWRBcmd1bWVudChpKSk7Ci0gICAgICAg
IHJldHVybiBjb25zdF9jYXN0PERpcmVjdEFyZ3VtZW50cyo+KHRoaXMpLT5zdG9yYWdlKClbaV0u
Z2V0KCk7CisgICAgICAgIGF1dG8qIHB0ciA9ICZjb25zdF9jYXN0PERpcmVjdEFyZ3VtZW50cyo+
KHRoaXMpLT5zdG9yYWdlKClbaV07CisgICAgICAgIHJldHVybiBwcmVjaXNlSW5kZXhNYXNrUHRy
KGksIG1fbGVuZ3RoLCBkeW5hbWljUG9pc29uKHR5cGUoKSwgRGlyZWN0QXJndW1lbnRzVHlwZSwg
cHRyKSktPmdldCgpOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldEluZGV4UXVpY2tseShWTSYg
dm0sIHVpbnQzMl90IGksIEpTVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTihpc01hcHBlZEFyZ3VtZW50KGkpKTsKLSAgICAgICAgc3Rv
cmFnZSgpW2ldLnNldCh2bSwgdGhpcywgdmFsdWUpOworICAgICAgICBhdXRvKiBwdHIgPSAmc3Rv
cmFnZSgpW2ldOworICAgICAgICBwcmVjaXNlSW5kZXhNYXNrUHRyKGksIG1fbGVuZ3RoLCBkeW5h
bWljUG9pc29uKHR5cGUoKSwgRGlyZWN0QXJndW1lbnRzVHlwZSwgcHRyKSktPnNldCh2bSwgdGhp
cywgdmFsdWUpOwogICAgIH0KICAgICAKICAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4mIGNh
bGxlZSgpCkBAIC0xMTYsNyArMTE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJU
KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG9mZnNl
dC5vZmZzZXQoKSA8IHN0ZDo6bWF4KG1fbGVuZ3RoLCBtX21pbkNhcGFjaXR5KSk7Ci0gICAgICAg
IHJldHVybiBzdG9yYWdlKClbb2Zmc2V0Lm9mZnNldCgpXTsKKyAgICAgICAgYXV0byogcHRyID0g
JnN0b3JhZ2UoKVtvZmZzZXQub2Zmc2V0KCldOworICAgICAgICByZXR1cm4gKnByZWNpc2VJbmRl
eE1hc2tQdHIob2Zmc2V0Lm9mZnNldCgpLCBzdGQ6Om1heChtX2xlbmd0aCwgbV9taW5DYXBhY2l0
eSksIGR5bmFtaWNQb2lzb24odHlwZSgpLCBEaXJlY3RBcmd1bWVudHNUeXBlLCBwdHIpKTsKICAg
ICB9CiAgICAgCiAgICAgLy8gTWV0aG9kcyBpbnRlbmRlZCBmb3IgdXNlIGJ5IHRoZSBHZW5lcmlj
QXJndW1lbnRzIG1peGluLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyMjc0NjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNzQ2MykKKysrIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTgtMDEtMjQgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBEaXJlY3RBcmd1bWVudHMg
c2hvdWxkIHByb3RlY3QgaXRzZWxmIHVzaW5nIGR5bmFtaWMgcG9pc29uaW5nIGFuZCBwcmVjaXNl
IGluZGV4IG1hc2tpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4MjA4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgQWRkIGhlbHBlcnMgZm9yOgorICAgICAgICAKKyAgICAgICAgRHluYW1p
YyBwb2lzb25pbmc6IHRoaXMgbWVhbnMgYXJyYW5naW5nIHRvIGhhdmUgdGhlIHBvaW50ZXIgeW91
IHdpbGwgZGVyZWZlcmVuY2UgYmVjb21lIGFuCisgICAgICAgIGludmFsaWQgcG9pbnRlciBpZiB0
aGUgdHlwZSBjaGVjayB5b3Ugd2VyZSByZWx5aW5nIG9uIHdvdWxkIGhhdmUgZmFpbGVkLgorICAg
ICAgICAKKyAgICAgICAgUHJlY2lzZSBpbmRleCBtYXNraW5nOiBhIHZhcmlhbnQgb2YgaW5kZXgg
bWFza2luZyB0aGF0IGRvZXMgbm90IGRlcGVuZCBvbiBkaXN0YW5jaW5nLiBJIGZpZ3VyZWQKKyAg
ICAgICAgSSdkIGp1c3QgdHJ5IHRoaXMgZmlyc3QgZm9yIERpcmVjdEFyZ3VtZW50cywgc2luY2Ug
SSBkaWRuJ3QgdGhpbmsgdGhhdCBhcmd1bWVudHNbaV0gd2FzIGV2ZXIKKyAgICAgICAgaG90IGVu
b3VnaCB0byB3YXJyYW50IGFueXRoaW5nIGJldHRlci4gVHVybnMgb3V0IHRoYXQgaW4gYWxsIG9m
IHRoZSBiZW5jaG1hcmtzIHRoYXQgY2FyZSBhYm91dAorICAgICAgICBhcmd1bWVudHMgcGVyZm9y
bWFuY2UsIHdlIG9wdGltaXplIHRoaW5ncyB0byB0aGUgcG9pbnQgdGhhdCB0aGUgaW5kZXggbWFz
a2luZyBpc24ndCBvbiBhIGhvdAorICAgICAgICBwYXRoIGFueW1vcmUuIFR1cm5zIG91dCwgaXQn
cyBuZXV0cmFsIQorCisgICAgICAgICogd3RmL01hdGhFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6
cHJlY2lzZUluZGV4TWFzayk6CisgICAgICAgIChXVEY6OmR5bmFtaWNQb2lzb24pOgorCiAyMDE4
LTAxLTIzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSlNDIHNo
b3VsZCB1c2UgYSBzcGVjdWxhdGlvbiBmZW5jZSBvbiBWTSBlbnRyeS9leGl0CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWF0
aEV4dHJhcy5oCShyZXZpc2lvbiAyMjc0NjMpCisrKyBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgw
LDYgKzQ4MCw1MyBAQCBpbmxpbmUgdWludDMyX3QgY29tcHV0ZUluZGV4aW5nTWFzayh1aW50CiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDx1aW50MzJfdD4oLTEp
KSA+PiBzdGQ6OmNseihzaXplKTsKIH0KIAoraW5saW5lIHVuc2lnbmVkIHByZWNpc2VJbmRleE1h
c2tTaGlmdEZvclNpemUodW5zaWduZWQgc2l6ZSkKK3sKKyAgICByZXR1cm4gc2l6ZSAqIDggLSAx
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordW5zaWduZWQgcHJlY2lzZUluZGV4TWFza1No
aWZ0KCkKK3sKKyAgICByZXR1cm4gcHJlY2lzZUluZGV4TWFza1NoaWZ0Rm9yU2l6ZShzaXplb2Yo
VCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCBvcGFxdWUoVCBwb2ludGVyKQorewor
ICAgIGFzbSgiIiA6ICIrciIocG9pbnRlcikpOworICAgIHJldHVybiBwb2ludGVyOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIFQqIHByZWNpc2VJbmRleE1hc2tQdHIodWludHB0
cl90IGluZGV4LCB1aW50cHRyX3QgbGVuZ3RoLCBUKiB2YWx1ZSkKK3sKKyAgICB1aW50cHRyX3Qg
cmVzdWx0ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odmFsdWUpICYgc3RhdGljX2Nhc3Q8dWlu
dHB0cl90PigKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGluZGV4IC0gb3BhcXVlKGxl
bmd0aCkpID4+CisgICAgICAgIHN0YXRpY19jYXN0PGludHB0cl90PihwcmVjaXNlSW5kZXhNYXNr
U2hpZnQ8VCo+KCkpKTsKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihyZXN1bHQpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgoraW5saW5lIFQqIGR5bmFtaWNQb2lz
b24oVSBhY3R1YWwsIFUgZXhwZWN0ZWQsIFQqIHBvaW50ZXIpCit7CisjaWYgQ1BVKFg4Nl82NCkg
fHwgQ1BVKEFSTTY0KQorICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VCo+KAorICAgICAgICBiaXR3
aXNlX2Nhc3Q8Y2hhcio+KHBvaW50ZXIpICsKKyAgICAgICAgKHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4ob3BhcXVlKGFjdHVhbCkgXiBleHBlY3RlZCkgPDwgNDApKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGFjdHVhbCk7CisgICAgVU5VU0VEX1BBUkFNKGV4cGVjdGVkKTsKKyAgICByZXR1cm4g
cG9pbnRlcjsKKyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAordXNpbmcgV1RGOjpk
eW5hbWljUG9pc29uOwordXNpbmcgV1RGOjpvcGFxdWU7Cit1c2luZyBXVEY6OnByZWNpc2VJbmRl
eE1hc2tQdHI7Cit1c2luZyBXVEY6OnByZWNpc2VJbmRleE1hc2tTaGlmdDsKK3VzaW5nIFdURjo6
cHJlY2lzZUluZGV4TWFza1NoaWZ0Rm9yU2l6ZTsKKwogI2VuZGlmIC8vICNpZm5kZWYgV1RGX01h
dGhFeHRyYXNfaAo=
</data>
<flag name="review"
          id="351294"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332327</attachid>
            <date>2018-01-25 15:46:15 -0800</date>
            <delta_ts>2018-01-25 15:46:15 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>20672</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI3NjM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBA
CisyMDE4LTAxLTI0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RGlyZWN0QXJndW1lbnRzIHNob3VsZCBwcm90ZWN0IGl0c2VsZiB1c2luZyBkeW5hbWljIHBvaXNv
bmluZyBhbmQgcHJlY2lzZSBpbmRleCBtYXNraW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODIwODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyBkeW5hbWljIHBv
aXNvbmluZyBhbmQgcHJlY2lzZSBpbmRleCBtYXNraW5nIGluIERpcmVjdEFyZ3VtZW50cywgdXNp
bmcgdGhlCisgICAgICAgIGhlbHBlcnMgZnJvbSA8d3RmL01hdGhFeHRyYXMuaD4gYW5kIGhlbHBl
cnMgaW4gQXNzZW1ibHlIZWxwZXJzIGFuZCBGVEw6Okxvd2VyREZHVG9CMy4KKyAgICAgICAgCisg
ICAgICAgIFdlIHVzZSBkeW5hbWljIHBvaXNvbmluZyBmb3IgRGlyZWN0QXJndW1lbnRzIHNpbmNl
IHRoaXMgb2JqZWN0IGRpZCBub3QgaGF2ZSBhbnkgYWRkaXRpb25hbAorICAgICAgICBpbmRpcmVj
dGlvbiBpbnNpZGUgaXQgdGhhdCBjb3VsZCBoYXZlIGJlZW4gcG9pc29uZWQuIFNvLCB3ZSB1c2Ug
dGhlIHhvciBvZiB0aGUgZXhwZWN0ZWQgdHlwZQorICAgICAgICBhbmQgdGhlIGFjdHVhbCB0eXBl
IGFzIGFuIGFkZGl0aW9uYWwgaW5wdXQgaW50byB0aGUgcG9pbnRlci4KKyAgICAgICAgCisgICAg
ICAgIFdlIHVzZSBwcmVjaXNlIGluZGV4IG1hc2tpbmcgZm9yIGJvdW5kcyBjaGVja3MsIGJlY2F1
c2UgaXQncyBub3Qgd29ydGggZG9pbmcgaW5kZXggbWFza2luZworICAgICAgICB1bmxlc3Mgd2Ug
a25vdyB0aGF0IHByZWNpc2UgaW5kZXggbWFza2luZyBpcyB0b28gc2xvdy4KKworICAgICAgICAq
IGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
cjo6bHNoaWZ0UHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnJzaGlmdFB0cik6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMpOgorICAg
ICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlR2V0TXlBcmd1bWVudEJ5VmFsKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6cHJlY2lzZUluZGV4TWFzazY0KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6cHJlY2lzZUluZGV4TWFzazMyKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6ZHluYW1pY1BvaXNvbik6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmR5bmFtaWNQb2lzb25PbkxvYWRlZFR5cGUpOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpkeW5hbWljUG9pc29uT25UeXBl
KToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0UHJlY2lzZUluZGV4TWFzazMyKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0RHluYW1pY1BvaXNvbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6ZW1pdER5bmFtaWNQb2lzb25PbkxvYWRlZFR5cGUpOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OmVtaXREeW5hbWljUG9pc29uT25UeXBlKToKKyAgICAgICAgKiBqaXQv
QXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwpOgorICAgICAg
ICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmg6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3Vt
ZW50czo6Z2V0SW5kZXhRdWlja2x5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1l
bnRzOjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OmFy
Z3VtZW50KToKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmg6CisK
IDIwMTgtMDEtMjUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBK
U0MgR0Mgc2hvdWxkIHN1cHBvcnQgVExDcyAodGhyZWFkIGxvY2FsIGNhY2hlcykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJl
dmlzaW9uIDIyNzYzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTgyLDExICs1ODIsMjEgQEAgcHVibGljOgog
ICAgICAgICBsc2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBzcmNEZXN0KTsKICAg
ICB9CiAgICAgCisgICAgdm9pZCBsc2hpZnRQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgbHNoaWZ0MzIoaW1tLCBzcmNEZXN0KTsKKyAgICB9
CisgICAgCiAgICAgdm9pZCByc2hpZnRQdHIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3Qp
CiAgICAgewogICAgICAgICByc2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBzcmNE
ZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHJzaGlmdFB0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdp
c3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAgICByc2hpZnQzMihpbW0sIHNyY0Rlc3QpOwor
ICAgIH0KKwogICAgIHZvaWQgdXJzaGlmdFB0cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVz
dCkKICAgICB7CiAgICAgICAgIHVyc2hpZnQzMih0cnVzdGVkSW1tMzJGb3JTaGlmdChpbW0pLCBz
cmNEZXN0KTsKQEAgLTkwNiwxMSArOTE2LDIxIEBAIHB1YmxpYzoKICAgICAgICAgbHNoaWZ0NjQo
dHJ1c3RlZEltbTMyRm9yU2hpZnQoaW1tKSwgc3JjRGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBs
c2hpZnRQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAg
ICAgICAgbHNoaWZ0NjQoaW1tLCBzcmNEZXN0KTsKKyAgICB9CisKICAgICB2b2lkIHJzaGlmdFB0
cihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKICAgICB7CiAgICAgICAgIHJzaGlmdDY0
KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOwogICAgIH0KIAorICAgIHZvaWQg
cnNoaWZ0UHRyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7Cisg
ICAgICAgIHJzaGlmdDY0KGltbSwgc3JjRGVzdCk7CisgICAgfQorCiAgICAgdm9pZCB1cnNoaWZ0
UHRyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQogICAgIHsKICAgICAgICAgdXJzaGlm
dDY0KHRydXN0ZWRJbW0zMkZvclNoaWZ0KGltbSksIHNyY0Rlc3QpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIy
NzYzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NDEwLDYgKzY0MTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkRpCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0VGFnKHRoaXMpOwogI2VuZGlmCisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwpAQCAtNjQyMCw2ICs2NDIxLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaQogI2Vsc2UKICAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0UmVnKTsKICNlbmRpZgorICAgIEdQ
UlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCiAgICAgICAgIHJldHVybjsKQEAgLTY0MzIsMTQgKzY0MzQsMjAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaQogICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTWFwcGVkQXJndW1lbnRzKCkpKSk7CiAKLSAgICBh
dXRvIGlzT3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlUmVnLCBEaXJlY3RB
cmd1bWVudHM6Om9mZnNldE9mTGVuZ3RoKCkpKTsKKyAgICBtX2ppdC5sb2FkMzIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2VSZWcsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSks
IHNjcmF0Y2hSZWcpOworICAgIGF1dG8gaXNPdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKEND
YWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgc2NyYXRjaFJlZyk7CiAgICAg
aWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkKICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVNvdXJjZSgpLCAwLCBpc091dE9mQm91bmRzKTsKICAg
ICAKKyAgICBtX2ppdC5lbWl0RHluYW1pY1BvaXNvbk9uVHlwZShiYXNlUmVnLCByZXN1bHRSZWcs
IERpcmVjdEFyZ3VtZW50c1R5cGUpOworICAgIG1faml0LmVtaXRQcmVwYXJlUHJlY2lzZUluZGV4
TWFzazMyKHByb3BlcnR5UmVnLCBzY3JhdGNoUmVnLCBzY3JhdGNoUmVnKTsKKwogICAgIG1faml0
LmxvYWRWYWx1ZSgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKICAgICAgICAg
ICAgIGJhc2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgRGly
ZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkpLAogICAgICAgICByZXN1bHRSZWdzKTsKKyAg
ICAKKyAgICBtX2ppdC5hbmRQdHIoc2NyYXRjaFJlZywgcmVzdWx0UmVnKTsKIAogICAgIGlmICgh
bm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CiAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAkocmV2aXNpb24gMjI3NjM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzc5LDcgKzM3NzksOCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVs
bHB0ciwKICAgICAgICAgICAgICAgICBtX291dC5ub3ROdWxsKG1fb3V0LmxvYWRQdHIoYmFzZSwg
bV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfbWFwcGVkQXJndW1lbnRzKSkpOwogCi0gICAgICAgICAg
ICBhdXRvIGlzT3V0T2ZCb3VuZHMgPSBtX291dC5hYm92ZU9yRXF1YWwoaW5kZXgsIG1fb3V0Lmxv
YWQzMk5vbk5lZ2F0aXZlKGJhc2UsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2xlbmd0aCkpOwor
ICAgICAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKGJhc2Us
IG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2xlbmd0aCk7CisgICAgICAgICAgICBhdXRvIGlzT3V0
T2ZCb3VuZHMgPSBtX291dC5hYm92ZU9yRXF1YWwoaW5kZXgsIGxlbmd0aCk7CiAgICAgICAgICAg
ICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKICAgICAgICAgICAgICAg
ICBzcGVjdWxhdGUoT3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgbnVsbHB0ciwgaXNPdXRPZkJvdW5k
cyk7CiAgICAgICAgICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5k
ZXgoCkBAIC0zNzk2LDggKzM3OTcsMTEgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbkJvdW5kcywgc2xvd0Nhc2UpOwogICAg
ICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCi0gICAgICAg
ICAgICAgICAgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZSwgYmFzZSwgbV9vdXQuemVy
b0V4dFB0cihpbmRleCkpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9
IG1fb3V0LmFuY2hvcihtX291dC5sb2FkNjQoYWRkcmVzcykpOworICAgICAgICAgICAgICAgIG1f
aGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsCisgICAgICAgICAgICAgICAgZHluYW1pY1Bv
aXNvbk9uVHlwZShiYXNlLCBEaXJlY3RBcmd1bWVudHNUeXBlKSwKKyAgICAgICAgICAgICAgICBt
X291dC56ZXJvRXh0KGluZGV4LCBwb2ludGVyVHlwZSgpKSk7CisgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgICAgIHByZWNp
c2VJbmRleE1hc2szMihtX291dC5sb2FkNjQoYWRkcmVzcyksIGluZGV4LCBsZW5ndGgpKTsKICAg
ICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CkBAIC0zOTc0LDcgKzM5NzgsNyBAQCBw
cml2YXRlOgogICAgIHsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUg
PSBtX25vZGUtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOwogICAg
ICAgICAKLSAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7
CisgICAgICAgIExWYWx1ZSBvcmlnaW5hbEluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIo
KSk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgb3JpZ2luYWxMaW1pdDsKICAgICAgICAgaWYg
KGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKQEAgLTM5
ODksNyArMzk5Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChtX25vZGUtPm51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKCkpCiAgICAgICAgICAgICBsaW1pdCA9IG1fb3V0LnN1YihsaW1pdCwgbV9v
dXQuY29uc3RJbnQzMihtX25vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpKTsKICAgICAg
ICAgCi0gICAgICAgIExWYWx1ZSBpc091dE9mQm91bmRzID0gbV9vdXQuYWJvdmVPckVxdWFsKGlu
ZGV4LCBsaW1pdCk7CisgICAgICAgIExWYWx1ZSBpc091dE9mQm91bmRzID0gbV9vdXQuYWJvdmVP
ckVxdWFsKG9yaWdpbmFsSW5kZXgsIGxpbWl0KTsKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gbnVsbHB0cjsKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBudWxscHRy
OwogICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0OwpAQCAtNDAwNCwxOSArNDAwOCwx
MSBAQCBwcml2YXRlOgogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHNwZWN1bGF0ZShPdXRP
ZkJvdW5kcywgbm9WYWx1ZSgpLCAwLCBpc091dE9mQm91bmRzKTsKICAgICAgICAgCisgICAgICAg
IExWYWx1ZSBpbmRleCA9IG9yaWdpbmFsSW5kZXg7CiAgICAgICAgIGlmIChtX25vZGUtPm51bWJl
ck9mQXJndW1lbnRzVG9Ta2lwKCkpCiAgICAgICAgICAgICBpbmRleCA9IG1fb3V0LmFkZChpbmRl
eCwgbV9vdXQuY29uc3RJbnQzMihtX25vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpKTsK
LSAgICAgICAgaW5kZXggPSBtX291dC5hZGQoaW5kZXgsIG1fb3V0LmludDMyT25lKTsKICAgICAg
ICAgCi0gICAgICAgIGluZGV4ID0gbV9vdXQuemVyb0V4dChpbmRleCwgSW50NjQpOwotICAgICAg
ICAKLSAgICAgICAgaW5kZXggPSBtX291dC5iaXRBbmQoCi0gICAgICAgICAgICBpbmRleCwKLSAg
ICAgICAgICAgIG1fb3V0LmFTaHIoCi0gICAgICAgICAgICAgICAgbV9vdXQuc3ViKAotICAgICAg
ICAgICAgICAgICAgICBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQub3BhcXVlKG1f
b3V0Lnplcm9FeHQob3JpZ2luYWxMaW1pdCwgSW50NjQpKSksCi0gICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMig2MykpKTsKKyAgICAgICAgaW5kZXggPSBtX291dC5hZGQoaW5kZXgsIG1f
b3V0LmludDMyT25lKTsKICAgICAgICAgCiAgICAgICAgIFR5cGVkUG9pbnRlciBiYXNlOwogICAg
ICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CkBAIC00MDI3LDggKzQwMjMsMTAgQEAgcHJpdmF0
ZToKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSByZXN1bHQ7CiAgICAgICAgIGlmIChiYXNlKSB7
Ci0gICAgICAgICAgICBMVmFsdWUgcG9pbnRlciA9IG1fb3V0LmJhc2VJbmRleChiYXNlLnZhbHVl
KCksIGluZGV4LCBTY2FsZUVpZ2h0KTsKKyAgICAgICAgICAgIExWYWx1ZSBwb2ludGVyID0gbV9v
dXQuYmFzZUluZGV4KAorICAgICAgICAgICAgICAgIGJhc2UudmFsdWUoKSwgbV9vdXQuemVyb0V4
dChpbmRleCwgcG9pbnRlclR5cGUoKSksIFNjYWxlRWlnaHQpOwogICAgICAgICAgICAgcmVzdWx0
ID0gbV9vdXQubG9hZDY0KFR5cGVkUG9pbnRlcihtX2hlYXBzLnZhcmlhYmxlcy5hdEFueUluZGV4
KCksIHBvaW50ZXIpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHByZWNpc2VJbmRleE1hc2szMihy
ZXN1bHQsIG9yaWdpbmFsSW5kZXgsIGxpbWl0KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICByZXN1bHQgPSBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KSk7CiAgICAgICAgIApAQCAtMTUxMTEsNiArMTUxMDksNDggQEAgcHJpdmF0ZToKICAgICAgICAg
CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgIH0K
KyAgICAKKyAgICBMVmFsdWUgcHJlY2lzZUluZGV4TWFzazY0KExWYWx1ZSB2YWx1ZSwgTFZhbHVl
IGluZGV4LCBMVmFsdWUgbGltaXQpCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQuYml0QW5k
KAorICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICBtX291dC5hU2hyKAorICAgICAgICAg
ICAgICAgIG1fb3V0LnN1YigKKyAgICAgICAgICAgICAgICAgICAgaW5kZXgsCisgICAgICAgICAg
ICAgICAgICAgIG1fb3V0Lm9wYXF1ZShsaW1pdCkpLAorICAgICAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50MzIoNjMpKSk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBwcmVjaXNlSW5kZXhNYXNr
MzIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgaW5kZXgsIExWYWx1ZSBsaW1pdCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBwcmVjaXNlSW5kZXhNYXNrNjQodmFsdWUsIG1fb3V0Lnplcm9FeHQoaW5kZXgs
IEludDY0KSwgbV9vdXQuemVyb0V4dChsaW1pdCwgSW50NjQpKTsKKyAgICB9CisgICAgCisgICAg
TFZhbHVlIGR5bmFtaWNQb2lzb24oTFZhbHVlIHZhbHVlLCBMVmFsdWUgcG9pc29uKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fb3V0LmFkZCgKKyAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAg
ICAgbV9vdXQuc2hsKAorICAgICAgICAgICAgICAgIG1fb3V0Lnplcm9FeHQocG9pc29uLCBwb2lu
dGVyVHlwZSgpKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKDQwKSkpOworICAg
IH0KKyAgICAKKyAgICBMVmFsdWUgZHluYW1pY1BvaXNvbk9uTG9hZGVkVHlwZShMVmFsdWUgdmFs
dWUsIExWYWx1ZSBhY3R1YWxUeXBlLCBKU1R5cGUgZXhwZWN0ZWRUeXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGR5bmFtaWNQb2lzb24oCisgICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAg
IG1fb3V0LmJpdFhvcigKKyAgICAgICAgICAgICAgICBtX291dC5vcGFxdWUoYWN0dWFsVHlwZSks
CisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihleHBlY3RlZFR5cGUpKSk7CisgICAg
fQorICAgIAorICAgIExWYWx1ZSBkeW5hbWljUG9pc29uT25UeXBlKExWYWx1ZSB2YWx1ZSwgSlNU
eXBlIGV4cGVjdGVkVHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBkeW5hbWljUG9pc29uT25M
b2FkZWRUeXBlKAorICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICBtX291dC5sb2FkOFpl
cm9FeHQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwKKyAgICAgICAgICAg
IGV4cGVjdGVkVHlwZSk7CisgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4K
ICAgICBMVmFsdWUgdm1DYWxsKExUeXBlIHR5cGUsIExWYWx1ZSBmdW5jdGlvbiwgQXJncyYmLi4u
IGFyZ3MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwCShyZXZpc2lvbiAyMjc2MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMTYsNiArMTAxNiw1MyBAQCB2
b2lkIEFzc2VtYmx5SGVscGVyczo6c2FuaXRpemVTdGFja0lubGluCiAgICAgc3RvcmVQdHIoc2Ny
YXRjaCwgdm0uYWRkcmVzc09mTGFzdFN0YWNrVG9wKCkpOwogfQogCit2b2lkIEFzc2VtYmx5SGVs
cGVyczo6ZW1pdFByZXBhcmVQcmVjaXNlSW5kZXhNYXNrMzIoR1BSUmVnIGluZGV4LCBHUFJSZWcg
bGVuZ3RoLCBHUFJSZWcgcmVzdWx0KQoreworICAgIGlmIChsZW5ndGggPT0gcmVzdWx0KSB7Cisg
ICAgICAgIG5lZ1B0cihsZW5ndGgpOworICAgICAgICBhZGRQdHIoaW5kZXgsIGxlbmd0aCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbW92ZShpbmRleCwgcmVzdWx0KTsKKyAgICAgICAgc3ViUHRy
KGxlbmd0aCwgcmVzdWx0KTsKKyAgICB9CisgICAgcnNoaWZ0UHRyKFRydXN0ZWRJbW0zMihwcmVj
aXNlSW5kZXhNYXNrU2hpZnQ8dm9pZCo+KCkpLCByZXN1bHQpOworfQorCit2b2lkIEFzc2VtYmx5
SGVscGVyczo6ZW1pdER5bmFtaWNQb2lzb24oR1BSUmVnIGJhc2UsIEdQUlJlZyBwb2lzb25WYWx1
ZSkKK3sKKyNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCisgICAgbHNoaWZ0UHRyKFRydXN0
ZWRJbW0zMig0MCksIHBvaXNvblZhbHVlKTsKKyAgICBhZGRQdHIocG9pc29uVmFsdWUsIGJhc2Up
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYmFzZSk7CisgICAgVU5VU0VEX1BBUkFNKHBvaXNv
blZhbHVlKTsKKyNlbmRpZgorfQorCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdER5bmFtaWNQ
b2lzb25PbkxvYWRlZFR5cGUoR1BSUmVnIGJhc2UsIEdQUlJlZyBhY3R1YWxUeXBlLCBKU1R5cGUg
ZXhwZWN0ZWRUeXBlKQoreworI2lmIENQVShYODZfNjQpIHx8IENQVShBUk02NCkKKyAgICB4b3Iz
MihUcnVzdGVkSW1tMzIoZXhwZWN0ZWRUeXBlKSwgYWN0dWFsVHlwZSk7CisgICAgZW1pdER5bmFt
aWNQb2lzb24oYmFzZSwgYWN0dWFsVHlwZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShiYXNl
KTsKKyAgICBVTlVTRURfUEFSQU0oYWN0dWFsVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTShleHBl
Y3RlZFR5cGUpOworI2VuZGlmCit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0RHluYW1p
Y1BvaXNvbk9uVHlwZShHUFJSZWcgYmFzZSwgR1BSUmVnIHNjcmF0Y2gsIEpTVHlwZSBleHBlY3Rl
ZFR5cGUpCit7CisjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQorICAgIGxvYWQ4KEFkZHJl
c3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGVt
aXREeW5hbWljUG9pc29uT25Mb2FkZWRUeXBlKGJhc2UsIHNjcmF0Y2gsIGV4cGVjdGVkVHlwZSk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShiYXNlKTsKKyAgICBVTlVTRURfUEFSQU0oc2NyYXRj
aCk7CisgICAgVU5VU0VEX1BBUkFNKGV4cGVjdGVkVHlwZSk7CisjZW5kaWYKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyMjc2MzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTg1LDYgKzE1ODUsMTUgQEAgcHVibGljOgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
dm9pZCB3YW5nc0ludDY0SGFzaChHUFJSZWcgaW5wdXRBbmRSZXN1bHQsIEdQUlJlZyBzY3JhdGNo
KTsKICNlbmRpZgorICAgIAorICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IGluZGV4IGFuZCBsZW5n
dGggYXJlIDMyLWJpdC4gVGhpcyBhbHNvIGFzc3VtZXMgdGhhdCB0aGV5IGFyZSBhbHJlYWR5Cisg
ICAgLy8gemVyby1leHRlbmRlZC4gQWxzbyB0aGlzIGRvZXMgbm90IGNsb2JiZXIgaW5kZXgsIHdo
aWNoIGlzIHVzZWZ1bCBpbiB0aGUgYmFzZWxpbmUgSklULiBUaGlzCisgICAgLy8gcGVybWl0cyBs
ZW5ndGggYW5kIHJlc3VsdCB0byBiZSBpbiB0aGUgc2FtZSByZWdpc3Rlci4KKyAgICB2b2lkIGVt
aXRQcmVwYXJlUHJlY2lzZUluZGV4TWFzazMyKEdQUlJlZyBpbmRleCwgR1BSUmVnIGxlbmd0aCwg
R1BSUmVnIHJlc3VsdCk7CisgICAgCisgICAgdm9pZCBlbWl0RHluYW1pY1BvaXNvbihHUFJSZWcg
YmFzZSwgR1BSUmVnIHBvaXNvblZhbHVlKTsKKyAgICB2b2lkIGVtaXREeW5hbWljUG9pc29uT25M
b2FkZWRUeXBlKEdQUlJlZyBiYXNlLCBHUFJSZWcgYWN0dWFsVHlwZSwgSlNUeXBlIGV4cGVjdGVk
VHlwZSk7CisgICAgdm9pZCBlbWl0RHluYW1pY1BvaXNvbk9uVHlwZShHUFJSZWcgYmFzZSwgR1BS
UmVnIHNjcmF0Y2gsIEpTVHlwZSBleHBlY3RlZFR5cGUpOwogCiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogICAgIHZvaWQgbG9hZFdhc21Db250ZXh0SW5zdGFuY2UoR1BSUmVnIGRzdCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
cmV2aXNpb24gMjI3NjM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTIsMjEgKzEzOTIsMjYgQEAgSklUOjpK
dW1wTGlzdCBKSVQ6OmVtaXREaXJlY3RBcmd1bWVudHNHZQogICAgIFJlZ2lzdGVySUQgcHJvcGVy
dHkgPSByZWdUMTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNo
MiA9IHJlZ1Q0OwogI2Vsc2UKICAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKICAgICBSZWdp
c3RlcklEIHByb3BlcnR5ID0gcmVnVDI7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyAg
ICBSZWdpc3RlcklEIHNjcmF0Y2gyID0gcmVnVDQ7CiAjZW5kaWYKIAogICAgIGxvYWQ4KEFkZHJl
c3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOwogICAgIGJh
ZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMy
KERpcmVjdEFyZ3VtZW50c1R5cGUpKTsKKyAgICBlbWl0RHluYW1pY1BvaXNvbk9uTG9hZGVkVHlw
ZShiYXNlLCBzY3JhdGNoLCBEaXJlY3RBcmd1bWVudHNUeXBlKTsKICAgICAKLSAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwg
RGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIGxvYWQzMihBZGRyZXNz
KGJhc2UsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSksIHNjcmF0Y2gyKTsKKyAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIHNjcmF0
Y2gyKSk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0UHRyKE5vblplcm8sIEFkZHJl
c3MoYmFzZSwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZk1hcHBlZEFyZ3VtZW50cygpKSkpOwog
ICAgIAotICAgIHplcm9FeHRlbmQzMlRvUHRyKHByb3BlcnR5LCBzY3JhdGNoKTsKLSAgICBsb2Fk
VmFsdWUoQmFzZUluZGV4KGJhc2UsIHNjcmF0Y2gsIFRpbWVzRWlnaHQsIERpcmVjdEFyZ3VtZW50
czo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0KTsKKyAgICBlbWl0UHJlcGFyZVByZWNpc2VJbmRl
eE1hc2szMihwcm9wZXJ0eSwgc2NyYXRjaDIsIHNjcmF0Y2gyKTsKKyAgICBsb2FkVmFsdWUoQmFz
ZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc0VpZ2h0LCBEaXJlY3RBcmd1bWVudHM6OnN0b3Jh
Z2VPZmZzZXQoKSksIHJlc3VsdCk7CisgICAgYW5kUHRyKHNjcmF0Y2gyLCByZXN1bHQucGF5bG9h
ZEdQUigpKTsKICAgICAKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJldmlzaW9uIDIy
NzYzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtOTgsMTMgKzk4LDE1IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVl
IGdldEluZGV4UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXNNYXBwZWRBcmd1bWVudChpKSk7Ci0gICAgICAg
IHJldHVybiBjb25zdF9jYXN0PERpcmVjdEFyZ3VtZW50cyo+KHRoaXMpLT5zdG9yYWdlKClbaV0u
Z2V0KCk7CisgICAgICAgIGF1dG8qIHB0ciA9ICZjb25zdF9jYXN0PERpcmVjdEFyZ3VtZW50cyo+
KHRoaXMpLT5zdG9yYWdlKClbaV07CisgICAgICAgIHJldHVybiBwcmVjaXNlSW5kZXhNYXNrUHRy
KGksIG1fbGVuZ3RoLCBkeW5hbWljUG9pc29uKHR5cGUoKSwgRGlyZWN0QXJndW1lbnRzVHlwZSwg
cHRyKSktPmdldCgpOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldEluZGV4UXVpY2tseShWTSYg
dm0sIHVpbnQzMl90IGksIEpTVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTihpc01hcHBlZEFyZ3VtZW50KGkpKTsKLSAgICAgICAgc3Rv
cmFnZSgpW2ldLnNldCh2bSwgdGhpcywgdmFsdWUpOworICAgICAgICBhdXRvKiBwdHIgPSAmc3Rv
cmFnZSgpW2ldOworICAgICAgICBwcmVjaXNlSW5kZXhNYXNrUHRyKGksIG1fbGVuZ3RoLCBkeW5h
bWljUG9pc29uKHR5cGUoKSwgRGlyZWN0QXJndW1lbnRzVHlwZSwgcHRyKSktPnNldCh2bSwgdGhp
cywgdmFsdWUpOwogICAgIH0KICAgICAKICAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4mIGNh
bGxlZSgpCkBAIC0xMTYsNyArMTE4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJU
KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG9mZnNl
dC5vZmZzZXQoKSA8IHN0ZDo6bWF4KG1fbGVuZ3RoLCBtX21pbkNhcGFjaXR5KSk7Ci0gICAgICAg
IHJldHVybiBzdG9yYWdlKClbb2Zmc2V0Lm9mZnNldCgpXTsKKyAgICAgICAgYXV0byogcHRyID0g
JnN0b3JhZ2UoKVtvZmZzZXQub2Zmc2V0KCldOworICAgICAgICByZXR1cm4gKnByZWNpc2VJbmRl
eE1hc2tQdHIob2Zmc2V0Lm9mZnNldCgpLCBzdGQ6Om1heChtX2xlbmd0aCwgbV9taW5DYXBhY2l0
eSksIGR5bmFtaWNQb2lzb24odHlwZSgpLCBEaXJlY3RBcmd1bWVudHNUeXBlLCBwdHIpKTsKICAg
ICB9CiAgICAgCiAgICAgLy8gTWV0aG9kcyBpbnRlbmRlZCBmb3IgdXNlIGJ5IHRoZSBHZW5lcmlj
QXJndW1lbnRzIG1peGluLgpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNzYzNCkKKysrIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTgtMDEtMjQgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBEaXJlY3RBcmd1bWVudHMg
c2hvdWxkIHByb3RlY3QgaXRzZWxmIHVzaW5nIGR5bmFtaWMgcG9pc29uaW5nIGFuZCBwcmVjaXNl
IGluZGV4IG1hc2tpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4MjA4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgQWRkIGhlbHBlcnMgZm9yOgorICAgICAgICAKKyAgICAgICAgRHluYW1p
YyBwb2lzb25pbmc6IHRoaXMgbWVhbnMgYXJyYW5naW5nIHRvIGhhdmUgdGhlIHBvaW50ZXIgeW91
IHdpbGwgZGVyZWZlcmVuY2UgYmVjb21lIGFuCisgICAgICAgIGludmFsaWQgcG9pbnRlciBpZiB0
aGUgdHlwZSBjaGVjayB5b3Ugd2VyZSByZWx5aW5nIG9uIHdvdWxkIGhhdmUgZmFpbGVkLgorICAg
ICAgICAKKyAgICAgICAgUHJlY2lzZSBpbmRleCBtYXNraW5nOiBhIHZhcmlhbnQgb2YgaW5kZXgg
bWFza2luZyB0aGF0IGRvZXMgbm90IGRlcGVuZCBvbiBkaXN0YW5jaW5nLiBJIGZpZ3VyZWQKKyAg
ICAgICAgSSdkIGp1c3QgdHJ5IHRoaXMgZmlyc3QgZm9yIERpcmVjdEFyZ3VtZW50cywgc2luY2Ug
SSBkaWRuJ3QgdGhpbmsgdGhhdCBhcmd1bWVudHNbaV0gd2FzIGV2ZXIKKyAgICAgICAgaG90IGVu
b3VnaCB0byB3YXJyYW50IGFueXRoaW5nIGJldHRlci4gVHVybnMgb3V0IHRoYXQgaW4gYWxsIG9m
IHRoZSBiZW5jaG1hcmtzIHRoYXQgY2FyZSBhYm91dAorICAgICAgICBhcmd1bWVudHMgcGVyZm9y
bWFuY2UsIHdlIG9wdGltaXplIHRoaW5ncyB0byB0aGUgcG9pbnQgdGhhdCB0aGUgaW5kZXggbWFz
a2luZyBpc24ndCBvbiBhIGhvdAorICAgICAgICBwYXRoIGFueW1vcmUuIFR1cm5zIG91dCwgaXQn
cyBuZXV0cmFsIQorCisgICAgICAgICogd3RmL01hdGhFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6
cHJlY2lzZUluZGV4TWFzayk6CisgICAgICAgIChXVEY6OmR5bmFtaWNQb2lzb24pOgorCiAyMDE4
LTAxLTI1ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUg
SW1hZ2VEZWNvZGVyQVZGT2JqQyBmcm9tIHVzaW5nIEFWU2FtcGxlQnVmZmVyR2VuZXJhdG9yIHRv
IEFWQXNzZXRSZWFkZXJPdXRwdXQgZm9yIHBhcnNpbmcKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01h
dGhFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgJKHJl
dmlzaW9uIDIyNzYzNCkKKysrIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTAsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00ODAsNiArNDgwLDU2IEBA
IGlubGluZSB1aW50MzJfdCBjb21wdXRlSW5kZXhpbmdNYXNrKHVpbnQKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90PigtMSkpID4+IHN0ZDo6Y2x6
KHNpemUpOwogfQogCitjb25zdGV4cHIgdW5zaWduZWQgcHJlY2lzZUluZGV4TWFza1NoaWZ0Rm9y
U2l6ZSh1bnNpZ25lZCBzaXplKQoreworICAgIHJldHVybiBzaXplICogOCAtIDE7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+Citjb25zdGV4cHIgdW5zaWduZWQgcHJlY2lzZUluZGV4TWFza1No
aWZ0KCkKK3sKKyAgICByZXR1cm4gcHJlY2lzZUluZGV4TWFza1NoaWZ0Rm9yU2l6ZShzaXplb2Yo
VCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCBvcGFxdWUoVCBwb2ludGVyKQorewor
ICAgIGFzbSgiIiA6ICIrciIocG9pbnRlcikpOworICAgIHJldHVybiBwb2ludGVyOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIFQqIHByZWNpc2VJbmRleE1hc2tQdHIodWludHB0
cl90IGluZGV4LCB1aW50cHRyX3QgbGVuZ3RoLCBUKiB2YWx1ZSkKK3sKKyAgICB1aW50cHRyX3Qg
cmVzdWx0ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odmFsdWUpICYgc3RhdGljX2Nhc3Q8dWlu
dHB0cl90PigKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGluZGV4IC0gb3BhcXVlKGxl
bmd0aCkpID4+CisgICAgICAgIHN0YXRpY19jYXN0PGludHB0cl90PihwcmVjaXNlSW5kZXhNYXNr
U2hpZnQ8VCo+KCkpKTsKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihyZXN1bHQpOworfQor
Citjb25zdGV4cHIgdW5zaWduZWQgYnl0ZVBvaXNvblNoaWZ0ID0gNDA7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+CitpbmxpbmUgVCogZHluYW1pY1BvaXNvbihVIGFjdHVhbCwg
VSBleHBlY3RlZCwgVCogcG9pbnRlcikKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihVKSA9
PSAxLCAiUG9pc29uaW5nIG9ubHkgd29ya3MgZm9yIGJ5dGVzIGF0IHRoZSBtb21lbnQiKTsKKyNp
ZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUKj4o
CisgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4ocG9pbnRlcikgKworICAgICAgICAoc3RhdGlj
X2Nhc3Q8dWludHB0cl90PihvcGFxdWUoYWN0dWFsKSBeIGV4cGVjdGVkKSA8PCBieXRlUG9pc29u
U2hpZnQpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGFjdHVhbCk7CisgICAgVU5VU0VEX1BB
UkFNKGV4cGVjdGVkKTsKKyAgICByZXR1cm4gcG9pbnRlcjsKKyNlbmRpZgorfQorCiB9IC8vIG5h
bWVzcGFjZSBXVEYKIAordXNpbmcgV1RGOjpkeW5hbWljUG9pc29uOwordXNpbmcgV1RGOjpvcGFx
dWU7Cit1c2luZyBXVEY6OnByZWNpc2VJbmRleE1hc2tQdHI7Cit1c2luZyBXVEY6OnByZWNpc2VJ
bmRleE1hc2tTaGlmdDsKK3VzaW5nIFdURjo6cHJlY2lzZUluZGV4TWFza1NoaWZ0Rm9yU2l6ZTsK
KwogI2VuZGlmIC8vICNpZm5kZWYgV1RGX01hdGhFeHRyYXNfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>