<?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>159545</bug_id>
          
          <creation_ts>2016-07-07 22:08:40 -0700</creation_ts>
          <short_desc>Refactor JSStack to only be the stack data structure for the C Loop.</short_desc>
          <delta_ts>2016-07-11 13:49:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>159544</dependson>
    
    <dependson>159549</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1208964</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-07-07 22:08:40 -0700</bug_when>
    <thetext>Currently, JSStack acts both as an abstraction for JS stack for both JIT and C Loop engines, as well as the stack data structure for the C Loop.  Per my discussion with Geoff, we&apos;ll refactor it to only be the C Loop stack data structure.  All the other parts of the JSStack can be moved elsewhere, or removed if no longer necessary.  With that, we&apos;ll also rename JSStack to CLoopStack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209720</commentid>
    <comment_count>1</comment_count>
      <attachid>283328</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-07-11 11:45:26 -0700</bug_when>
    <thetext>Created attachment 283328
proposed patch.

Let&apos;s try this on the EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209725</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-11 11:47:40 -0700</bug_when>
    <thetext>Attachment 283328 did not pass style-queue:


ERROR: Source/JavaScriptCore/interpreter/CLoopStack.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 31 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209743</commentid>
    <comment_count>3</comment_count>
      <attachid>283328</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-07-11 12:24:27 -0700</bug_when>
    <thetext>Comment on attachment 283328
proposed patch.

EWS bots are green, and local C Loop test (with test bot test configuration) shows no regression.  Let&apos;s get this reviewed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209744</commentid>
    <comment_count>4</comment_count>
      <attachid>283328</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-07-11 12:29:59 -0700</bug_when>
    <thetext>Comment on attachment 283328
proposed patch.

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

r=me

&gt; Source/JavaScriptCore/interpreter/CLoopStackInlines.h:39
&gt; +inline bool CLoopStack::ensureCapacityFor(Register* newTopOfStack)
&gt;  {
&gt; -#if !ENABLE(JIT)
&gt;      return grow(newTopOfStack);

No need for one function whose only job is to call another function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209786</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-07-11 13:46:50 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; r=me

Thanks.


&gt; &gt; Source/JavaScriptCore/interpreter/CLoopStackInlines.h:39
&gt; &gt; +inline bool CLoopStack::ensureCapacityFor(Register* newTopOfStack)
&gt; &gt;  {
&gt; &gt; -#if !ENABLE(JIT)
&gt; &gt;      return grow(newTopOfStack);
&gt; 
&gt; No need for one function whose only job is to call another function.

I consolidated grow() into ensureCapactityFor(), deleted the old grow(), and renamed growSlowCase() to grow().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209789</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-07-11 13:49:39 -0700</bug_when>
    <thetext>Landed in r203081: &lt;http://trac.webkit.org/r203081&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283328</attachid>
            <date>2016-07-11 11:45:26 -0700</date>
            <delta_ts>2016-07-11 12:29:59 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-159545.patch</filename>
            <type>text/plain</type>
            <size>95416</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzMDY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOCBA
QAorMjAxNi0wNy0xMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVmYWN0b3IgSlNTdGFjayB0byBvbmx5IGJlIHRoZSBzdGFjayBkYXRhIHN0cnVjdHVyZSBmb3Ig
dGhlIEMgTG9vcC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1OTU0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIENoYW5nZXMgbWFkZToKKyAgICAgICAgMS4gUmVuYW1lZCBKU1N0YWNrIHRvIENMb29wU3Rh
Y2suCisgICAgICAgIDIuIE1hZGUgYWxsIG9mIENMb29wU3RhY2sgY29kZSB0byBjb25kaXRpb25h
bCBvbiAjaWYgIUVOQUJMRShKSVQpIGkuZS4gdGhleSB3aWxsCisgICAgICAgICAgIG9ubHkgYmUg
aW4gZWZmZWN0IGZvciB0aGUgQyBMb29wIGJ1aWxkLgorICAgICAgICAzLiBDaGFuZ2VkIGNsaWVu
dHMgb2YgSlNTdGFjayB0byB1c2UgbmV3IGVxdWl2YWxlbnQgVk0gQVBJczoKKyAgICAgICAgICAg
IGEuIEpTU3RhY2s6OmVuc3VyZUNhcGFjaXR5Rm9yKCkgPT4gVk06OmVuc3VyZVN0YWNrQ2FwYWNp
dHlGb3IoKQorICAgICAgICAgICAgYi4gSlNTdGFjazo6Y29tbWl0dGVkQnl0ZUNvdW50KCkgPT4g
Vk06OmNvbW1pdHRlZFN0YWNrQnl0ZUNvdW50KCkKKyAgICAgICAgNC4gTWFkZSBWTTo6dXBkYXRl
UmVzZXJ2ZWRab25lU2l6ZSgpIGNhbGwgQ0xvb3BTdGFjazo6c2V0UmVzZXJ2ZWRab25lU2l6ZSgp
CisgICAgICAgICAgIGluc3RlYWQgb2YgY2FsbGluZyBpdCBmcm9tIGFsbCB0aGUgY2xpZW50cyBv
ZiBWTTo6dXBkYXRlUmVzZXJ2ZWRab25lU2l6ZSgpLgorICAgICAgICA1LiBSZW1vdmVkIGFsbCB1
bm5lY2Vzc2FyeSByZWZlcmVuY2VzIHRvIEpTU3RhY2suCisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGFzc2VtYmxlci9NYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oOgor
ICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlQ29udmVudGlvbnMuaDoKKyAgICAgICAgKiBkZmcv
REZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlND
OjpERkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZnRsL0ZUTE9TUkVudHJ5LmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGhlYXAvSGVh
cC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXpl
cnMpOgorICAgICAgICAoSlNDOjpIZWFwOjp3aWxsU3RhcnRJdGVyYXRpbmcpOgorICAgICAgICAo
SlNDOjpIZWFwOjpnYXRoZXJKU1N0YWNrUm9vdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpzdGFj
ayk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvQ0xvb3BTdGFjay5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9KU1N0YWNrLmNwcC4KKyAgICAgICAgKEpTQzo6Y29tbWl0U2l6ZSk6CisgICAgICAg
IChKU0M6OkNMb29wU3RhY2s6OkNMb29wU3RhY2spOgorICAgICAgICAoSlNDOjpDTG9vcFN0YWNr
Ojp+Q0xvb3BTdGFjayk6CisgICAgICAgIChKU0M6OkNMb29wU3RhY2s6Omdyb3dTbG93Q2FzZSk6
CisgICAgICAgIChKU0M6OkNMb29wU3RhY2s6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKToKKyAg
ICAgICAgKEpTQzo6Q0xvb3BTdGFjazo6c2FuaXRpemVTdGFjayk6CisgICAgICAgIChKU0M6OkNM
b29wU3RhY2s6OnJlbGVhc2VFeGNlc3NDYXBhY2l0eSk6CisgICAgICAgIChKU0M6OkNMb29wU3Rh
Y2s6OmFkZFRvQ29tbWl0dGVkQnl0ZUNvdW50KToKKyAgICAgICAgKEpTQzo6Q0xvb3BTdGFjazo6
c2V0UmVzZXJ2ZWRab25lU2l6ZSk6CisgICAgICAgIChKU0M6OkNMb29wU3RhY2s6OmNvbW1pdHRl
ZEJ5dGVDb3VudCk6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OkpTU3RhY2spOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpKU1N0YWNrOjp+SlNTdGFjayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkpTU3RhY2s6Omdyb3dTbG93Q2FzZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU3RhY2s6
OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTdGFj
azo6c2FuaXRpemVTdGFjayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU3RhY2s6OnJlbGVh
c2VFeGNlc3NDYXBhY2l0eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU3RhY2s6OmFkZFRv
Q29tbWl0dGVkQnl0ZUNvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTdGFjazo6c2V0
UmVzZXJ2ZWRab25lU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU3RhY2s6Omxvd0Fk
ZHJlc3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1N0YWNrOjpoaWdoQWRkcmVzcyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkpTU3RhY2s6OmNvbW1pdHRlZEJ5dGVDb3VudCk6IERlbGV0
ZWQuCisgICAgICAgICogaW50ZXJwcmV0ZXIvQ0xvb3BTdGFjay5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5oLgorICAgICAgICAoSlNDOjpD
TG9vcFN0YWNrOjpjb250YWluc0FkZHJlc3MpOgorICAgICAgICAoSlNDOjpDTG9vcFN0YWNrOjps
b3dBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6Q0xvb3BTdGFjazo6aGlnaEFkZHJlc3MpOgorICAg
ICAgICAoSlNDOjpDTG9vcFN0YWNrOjpyZXNlcnZhdGlvblRvcCk6CisgICAgICAgIChKU0M6OkpT
U3RhY2s6OmNvbnRhaW5zQWRkcmVzcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU3RhY2s6
Omxvd0FkZHJlc3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1N0YWNrOjpoaWdoQWRkcmVz
cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU3RhY2s6OnJlc2VydmF0aW9uVG9wKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9DTG9vcFN0YWNrSW5saW5lcy5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFja0lubGluZXMuaC4K
KyAgICAgICAgKEpTQzo6Q0xvb3BTdGFjazo6ZW5zdXJlQ2FwYWNpdHlGb3IpOgorICAgICAgICAo
SlNDOjpDTG9vcFN0YWNrOjp0b3BPZkZyYW1lRm9yKToKKyAgICAgICAgKEpTQzo6Q0xvb3BTdGFj
azo6dG9wT2ZTdGFjayk6CisgICAgICAgIChKU0M6OkNMb29wU3RhY2s6OnNocmluayk6CisgICAg
ICAgIChKU0M6OkNMb29wU3RhY2s6Omdyb3cpOgorICAgICAgICAoSlNDOjpDTG9vcFN0YWNrOjpz
ZXRDTG9vcFN0YWNrTGltaXQpOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjplbnN1cmVDYXBhY2l0
eUZvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU3RhY2s6OnRvcE9mRnJhbWVGb3IpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpKU1N0YWNrOjp0b3BPZlN0YWNrKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6SlNTdGFjazo6c2hyaW5rKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNT
dGFjazo6Z3Jvdyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU3RhY2s6OnNldENMb29wU3Rh
Y2tMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUluZGV4KToKKyAgICAgICAg
KEpTQzo6Q2FsbEZyYW1lOjpjdXJyZW50VlBDKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpz
dGFjayk6IERlbGV0ZWQuCisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAg
ICAgIChKU0M6OkV4ZWNTdGF0ZTo6Y2FsbGVyRnJhbWVBbmRQQyk6CisgICAgICAgIChKU0M6OkV4
ZWNTdGF0ZTo6dW5zYWZlQ2FsbGVyRnJhbWVBbmRQQyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpzaXplT2ZWYXJhcmdzKToKKyAgICAgICAg
KEpTQzo6c2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OnNpemVG
cmFtZUZvclZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIp
OgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmg6CisgICAgICAgIChKU0M6Oklu
dGVycHJldGVyOjpjbG9vcFN0YWNrKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmdldE9w
Y29kZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjppc0NhbGxCeXRlY29kZSk6CisgICAg
ICAgIChKU0M6OkludGVycHJldGVyOjpzdGFjayk6IERlbGV0ZWQuCisgICAgICAgICogaW50ZXJw
cmV0ZXIvSlNTdGFjay5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaW50ZXJwcmV0ZXIvSlNTdGFj
ay5oOiBSZW1vdmVkLgorICAgICAgICAqIGludGVycHJldGVyL0pTU3RhY2tJbmxpbmVzLmg6IFJl
bW92ZWQuCisgICAgICAgICogaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6U3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcCk6CisgICAgICAgICogaml0L0pJVC5oOgor
ICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSlNJbnRlcmZh
Y2VKSVQuaDoKKyAgICAgICAgKiBqaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oOgorICAgICAgICAq
IGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAqIGxsaW50L0xMSW50T2Zmc2V0c0V4
dHJhY3Rvci5jcHA6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAg
ICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTElu
dDo6bGxpbnRfc3RhY2tfY2hlY2tfYXRfdm1fZW50cnkpOgorICAgICAgICAqIGxsaW50L0xMSW50
VGh1bmtzLmNwcDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6Q0xvb3A6OmV4ZWN1dGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHJ1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgIChKU0M6OkNvbW1vblNsb3dQYXRoczo6
YXJpdHlDaGVja0Zvcik6CisgICAgICAgICogcnVudGltZS9FcnJvckhhbmRsaW5nU2NvcGUuY3Bw
OgorICAgICAgICAoSlNDOjpFcnJvckhhbmRsaW5nU2NvcGU6OkVycm9ySGFuZGxpbmdTY29wZSk6
CisgICAgICAgIChKU0M6OkVycm9ySGFuZGxpbmdTY29wZTo6fkVycm9ySGFuZGxpbmdTY29wZSk6
CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
TWVtb3J5U3RhdGlzdGljcy5jcHA6CisgICAgICAgIChKU0M6Omdsb2JhbE1lbW9yeVN0YXRpc3Rp
Y3MpOgorICAgICAgICAqIHJ1bnRpbWUvU3RhY2tBbGlnbm1lbnQuaDoKKyAgICAgICAgKiBydW50
aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKEpTQzo6Vk06OnVw
ZGF0ZVJlc2VydmVkWm9uZVNpemUpOgorICAgICAgICAoSlNDOjpzYW5pdGl6ZVN0YWNrRm9yVk0p
OgorICAgICAgICAoSlNDOjpWTTo6Y29tbWl0dGVkU3RhY2tCeXRlQ291bnQpOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OnJlc2VydmVkWm9uZVNpemUpOgorICAg
ICAgICAoSlNDOjpWTTo6b3NTdGFja0xpbWl0V2l0aFJlc2VydmUpOgorICAgICAgICAoSlNDOjpW
TTo6YWRkcmVzc09mT1NTdGFja0xpbWl0V2l0aFJlc2VydmUpOgorICAgICAgICAqIHJ1bnRpbWUv
Vk1JbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlZNOjplbnN1cmVTdGFja0NhcGFjaXR5Rm9yKToK
KyAgICAgICAgKEpTQzo6Vk06OnNob3VsZFRyaWdnZXJUZXJtaW5hdGlvbik6CisKIDIwMTYtMDct
MTEgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgUkVH
UkVTU0lPTihyMjAyOTkyKTogSlNDIHZhcmFyZ3MgdGVzdHMgYXJlIGJyb2tlbgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjAzMDY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01MDcsOSAr
NTA3LDkgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBpbnNwZWN0b3IvYWdlbnRz
L0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcAogCiAgICAgaW50ZXJwcmV0ZXIvQWJzdHJh
Y3RQQy5jcHAKKyAgICBpbnRlcnByZXRlci9DTG9vcFN0YWNrLmNwcAogICAgIGludGVycHJldGVy
L0NhbGxGcmFtZS5jcHAKICAgICBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKLSAgICBpbnRl
cnByZXRlci9KU1N0YWNrLmNwcAogICAgIGludGVycHJldGVyL1Byb3RvQ2FsbEZyYW1lLmNwcAog
ICAgIGludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCiAgICAgaW50ZXJwcmV0ZXIvU3RhY2tW
aXNpdG9yLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIw
MzA2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05NzMsNyArOTczLDcgQEAKIAkJMTQy
ODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERlYnVnZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2OTJBODU4MDI1NTU5N0QwMUZGNjBGNyAvKiBE
ZWJ1Z2dlci5jcHAgKi87IH07CiAJCTE0MjgwODJEMTA3RUMwNTcwMDEzRTdCMiAvKiBDYWxsRGF0
YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E2
MkRGRTBFMjgyNjIzMDAwNEYzMEQgLyogQ2FsbERhdGEuY3BwICovOyB9OwogCQkxNDI4MDgyRTEw
N0VDMDU3MDAxM0U3QjIgLyogQ29uc3RydWN0RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E2MkRGRjBFMjgyNjMxMDAwNEYzMEQgLyogQ29u
c3RydWN0RGF0YS5jcHAgKi87IH07Ci0JCTE0MjgwODNBMTA3RUMwNzUwMDEzRTdCMiAvKiBKU1N0
YWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
MjlEODVCMEVEMjE4RTkwMEI4OTYxOSAvKiBKU1N0YWNrLmNwcCAqLzsgfTsKKwkJMTQyODA4M0Ex
MDdFQzA3NTAwMTNFN0IyIC8qIENMb29wU3RhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQyOUQ4NUIwRUQyMThFOTAwQjg5NjE5IC8qIENMb29w
U3RhY2suY3BwICovOyB9OwogCQkxNDI4MDg0MTEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2OTJBODdE
MDI1NTU5N0QwMUZGNjBGNyAvKiBSZWdFeHAuY3BwICovOyB9OwogCQkxNDI4MDg0MjEwN0VDMDkz
MDAxM0U3QjIgLyogUmVnRXhwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNEMjAyQkQwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4
cENvbnN0cnVjdG9yLmNwcCAqLzsgfTsKIAkJMTQyODA4NDMxMDdFQzA5MzAwMTNFN0IyIC8qIFJl
Z0V4cE9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNjkyQTg3QjAyNTU1OTdEMDFGRjYwRjcgLyogUmVnRXhwT2JqZWN0LmNwcCAqLzsgfTsK
QEAgLTExNDAsNiArMTE0MCwxMCBAQAogCQkyQUY3MzgyQzE4QkJCRjkyMDA4QTVBMzcgLyogU3Ry
dWN0dXJlSURUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyQUY3MzgyQTE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAg
Ki87IH07CiAJCTJBRjczODJEMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUY3MzgyQjE4
QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTM3MUQ4NDJEMTdDOThCNkUwMEVDRjk5NCAv
KiBsaWJ6LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzcxRDg0MkMxN0M5OEI2RTAwRUNGOTk0IC8qIGxpYnouZHlsaWIgKi87IH07CisJCTQx
Mjk1Mjc3MUQyQ0Y2QkMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3Jh
cHBlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MTI5NTI3MzFEMkNGNkFDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJu
YWxzX3dyYXBwZXJfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTQxMjk1Mjc4MUQyQ0Y2QkMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5l
cmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMjk1Mjc0MUQyQ0Y2QUMwMEU3OEI4OSAv
KiBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1lbnRhdGlvbi5weSAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0MTI5NTI3
OTFEMkNGNkJDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFkZXIucHkg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTI5NTI3NTFE
MkNGNkFDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9oZWFkZXIucHkgKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNDEyOTUyN0Ex
RDJDRjZCQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX3dyYXBwZXJfaW1wbGVtZW50YXRp
b24ucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTI5
NTI3NjFEMkNGNkFDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBlcl9pbXBsZW1l
bnRhdGlvbi5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk0MTM1OUNGMzBGREQ4OUFEMDAyMDYxODAgLyogRGF0ZUNvbnZlcnNpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQyMTIwMjI5MEFENDMxMEMw
MEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICovOyB9OwogCQk0MURFQTEzMjFCOUYzMTYzMDA2
RDY1REQgLyogQnVpbHRpblV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MURFQTEzMTFCOUYzMTU0MDA2RDY1REQgLyogQnVpbHRpblV0aWxzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDMxOURB
MDMxQzFCRTQwQTAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlvbnMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDMxOURBMDEx
QzFCRTNDMTAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlvbnMuY3BwICov
OyB9OwpAQCAtMTQ3NCwxMCArMTQ3OCw2IEBACiAJCTk5REEwMEE4MUJENTk5MzEwMEY0NTc1QyAv
KiBidWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5REEwMDlGMUJENTk5MjcwMEY0
NTc1QyAvKiBidWlsdGluc19nZW5lcmF0ZV9jb21iaW5lZF9pbXBsZW1lbnRhdGlvbi5weSAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5OURBMDBBOTFC
RDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaGVhZGVyLnB5IGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlEQTAwQTAxQkQ1
OTkyNzAwRjQ1NzVDIC8qIGJ1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2hlYWRlci5weSAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5OURBMDBBQTFC
RDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaW1wbGVtZW50YXRp
b24ucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OURB
MDBBMTFCRDU5OTI3MDBGNDU3NUMgLyogYnVpbHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaW1wbGVt
ZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKLQkJNDEyOTUyNzcxRDJDRjZCQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVy
bmFsc193cmFwcGVyX2hlYWRlci5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDEyOTUyNzMxRDJDRjZBQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVy
YXRlX2ludGVybmFsc193cmFwcGVyX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk0MTI5NTI3ODFEMkNGNkJDMDBFNzhCODkgLyogYnVp
bHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMjk1Mjc0MUQyQ0Y2
QUMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNfd3JhcHBlcl9pbXBsZW1l
bnRhdGlvbi5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQk0MTI5NTI3OTFEMkNGNkJDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBl
cl9oZWFkZXIucHkgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxMjk1Mjc1MUQyQ0Y2QUMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV93cmFwcGVy
X2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQk0MTI5NTI3QTFEMkNGNkJDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfd3JhcHBl
cl9pbXBsZW1lbnRhdGlvbi5weSBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDEyOTUyNzYxRDJDRjZBQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRl
X3dyYXBwZXJfaW1wbGVtZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTlEQTAwQUYxQkQ1OTk0RTAwRjQ1NzVDIC8qIGdlbmVyYXRl
LWpzLWJ1aWx0aW5zLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTlEQTAwQUMxQkQ1OTkzRTAwRjQ1NzVDIC8qIGdlbmVyYXRlLWpzLWJ1aWx0aW5zLnB5
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk5REEw
MEIwMUJENTk5NEUwMEY0NTc1QyAvKiBsYXp5d3JpdGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlEQTAwQUQxQkQ1OTkzRTAwRjQ1NzVDIC8qIGxh
enl3cml0ZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJOTlEQTAwQjExQkQ1OTk0RTAwRjQ1NzVDIC8qIFVwZGF0ZUNvbnRlbnRzLnB5IGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlEQTAwQUUxQkQ1OTkz
RTAwRjQ1NzVDIC8qIFVwZGF0ZUNvbnRlbnRzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNzc2LDcgKzE3NzYsNyBAQAogCQlBN0MwQzRBQzE2
ODEwMzAyMDAxNzAxMUQgLyogSlNTY3JpcHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0MwQzRBQjE2N0MwOENEMDAxNzAxMUQgLyog
SlNTY3JpcHRSZWZQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQTdDMEM0QUQxNjgxMDY3RTAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzBDNEFB
MTY3QzA4Q0QwMDE3MDExRCAvKiBKU1NjcmlwdFJlZi5jcHAgKi87IH07CiAJCUE3QzFFOEU0MTEy
RTcyRUYwMEEzN0Y5OCAvKiBKSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzFFOEM4MTEyRTcwMUMwMEEzN0Y5
OCAvKiBKSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCAqLzsgfTsKLQkJQTdDMUVBRjAxNzk4N0FC
NjAwMjk5REIyIC8qIEpTU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBN0MxRUFFQjE3OTg3QUI2MDAyOTlEQjIgLyogSlNTdGFja0lu
bGluZXMuaCAqLzsgfTsKKwkJQTdDMUVBRjAxNzk4N0FCNjAwMjk5REIyIC8qIENMb29wU3RhY2tJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0MxRUFFQjE3OTg3QUI2MDAyOTlEQjIgLyogQ0xvb3BTdGFja0lubGluZXMuaCAqLzsgfTsKIAkJ
QTdDMUVBRjExNzk4N0FCNjAwMjk5REIyIC8qIFN0YWNrVmlzaXRvci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0MxRUFFQzE3OTg3QUI2MDAyOTlE
QjIgLyogU3RhY2tWaXNpdG9yLmNwcCAqLzsgfTsKIAkJQTdDMUVBRjIxNzk4N0FCNjAwMjk5REIy
IC8qIFN0YWNrVmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTdDMUVBRUQxNzk4N0FCNjAwMjk5REIyIC8qIFN0YWNrVmlzaXRvci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3Q0EzQUUzMTdE
QTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDQTNBREQxN0RBNDFBRTAwNjUzOEFGIC8q
IFdlYWtNYXBDb25zdHJ1Y3Rvci5jcHAgKi87IH07CkBAIC0xODk4LDcgKzE4OTgsNyBAQAogCQlC
QzE4QzQ1QTBFMTZGNUNEMDBCMzQ0NjAgLyogUmVnRXhwLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNjkyQTg3RTAyNTU1OTdEMDFGRjYwRjcgLyogUmVn
RXhwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QkMxOEM0NUIwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZ0V4cE9iamVjdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjY5MkE4N0MwMjU1NTk3RDAxRkY2MEY3
IC8qIFJlZ0V4cE9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUJDMThDNDVEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdpc3Rlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ5QjI0RkYwRDhBRjZE
MTAwOUNCOEM3IC8qIFJlZ2lzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJQkMxOEM0NUUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RhY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDc5MjY0MERB
QTAzRkIwMDFBOUYwNSAvKiBKU1N0YWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJQkMxOEM0NUUwRTE2RjVDRDAwQjM0NDYwIC8qIENMb29wU3Rh
Y2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDc5
MjY0MERBQTAzRkIwMDFBOUYwNSAvKiBDTG9vcFN0YWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8q
IFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2NUU4NjZFRDBERDU5QUZBMDBBMkIyQTEgLyogU291cmNlUHJvdmlkZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4QzQ2NDBF
MTZGNUNEMDBCMzQ0NjAgLyogU291cmNlQ29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjVFODY2RUUwREQ1OUFGQTAwQTJCMkExIC8qIFNvdXJjZUNv
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlC
QzE4QzQ2NjBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMThDM0MxMEUxNkVFMzMwMEIz
NDQ2MCAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5oICovOyB9OwpAQCAtMzE1MCw3ICszMTUwLDcgQEAK
IAkJMTQyNzExMzgwQTQ2MEJCQjAwODBFRUVBIC8qIEpTQmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0Jhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTQyOUQ3N0IwRUQyMEQ3MzAwQjg5NjE5IC8qIEludGVycHJldGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEludGVycHJldGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0MjlEN0QzMEVEMjEyODIwMEI4OTYxOSAvKiBJbnRlcnByZXRlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRlcnByZXRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0MjlEODVCMEVEMjE4RTkwMEI4OTYxOSAvKiBKU1N0YWNr
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RhY2suY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDI5RDg1QjBFRDIxOEU5MDBCODk2MTkgLyog
Q0xvb3BTdGFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDTG9v
cFN0YWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQyOUQ4NzcwRUQyMUFD
RDAwQjg5NjE5IC8qIEV4Y2VwdGlvbkhlbHBlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRXhjZXB0aW9uSGVscGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0MjlEOERCMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEZyYW1lLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQyOUQ4REMwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFt
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVFbmRpbmcgPSAwOyBwYXRoID0gQ2Fs
bEZyYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9u
SWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwpAQCAtMzIzMiw3ICszMjMyLDcgQEAK
IAkJMTRDQTk1OEMxNkFCNTBGQTAwOTM4QTA2IC8qIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9iamVjdEFsbG9jYXRpb25Qcm9maWxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RDJGM0Q4MTM5RjRCRTIwMDQ5MTAz
MSAvKiBNYXJrZWRTcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNYXJrZWRTcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RDJGM0Q5
MTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBNYXJrZWRTcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkx
NEQ3OTI2NDBEQUEwM0ZCMDAxQTlGMDUgLyogSlNTdGFjay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1N0YWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0
RDc5MjY0MERBQTAzRkIwMDFBOUYwNSAvKiBDTG9vcFN0YWNrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENMb29wU3RhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTREODQ0QTIxNkFBMkM3MDAwQTY1QUYwIC8qIFByb3RvdHlwZU1hcC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm90b3R5cGVNYXAuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNEQ4NDRBMzE2QUEyQzcwMDBBNjVBRjAgLyogUHJvdG90eXBl
TWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3RvdHlwZU1hcC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyog
dGVzdGFwaS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IHRlc3Rh
cGkuanM7IHBhdGggPSBBUEkvdGVzdHMvdGVzdGFwaS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTQwMDcsNyArNDAwNyw3IEBACiAJCUE3QzBDNEFBMTY3QzA4Q0QwMDE3MDExRCAv
KiBKU1NjcmlwdFJlZi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1NjcmlwdFJlZi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzBDNEFCMTY3
QzA4Q0QwMDE3MDExRCAvKiBKU1NjcmlwdFJlZlByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNTY3JpcHRSZWZQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE3QzFFOEM4MTEyRTcwMUMwMEEzN0Y5OCAvKiBKSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBN0MxRUFFQjE3
OTg3QUI2MDAyOTlEQjIgLyogSlNTdGFja0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNTdGFja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTdDMUVBRUIxNzk4N0FCNjAwMjk5REIyIC8qIENMb29wU3RhY2tJbmxpbmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENMb29wU3RhY2tJbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzFFQUVDMTc5ODdBQjYwMDI5OURCMiAvKiBTdGFja1Zp
c2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsg
cGF0aCA9IFN0YWNrVmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3
QzFFQUVEMTc5ODdBQjYwMDI5OURCMiAvKiBTdGFja1Zpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3QzIyNUNDMTM5OTgxRjEwMEZGMTY2MiAvKiBLZXl3b3JkTG9va3VwR2VuZXJhdG9y
LnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gS2V5d29yZExvb2t1cEdl
bmVyYXRvci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUwMDAsMTUgKzUwMDAs
MTUgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTBGNTVGMEYxMTREMTA2MzYwMEFDNzY0OSAvKiBB
YnN0cmFjdFBDLmNwcCAqLywKIAkJCQkwRjU1RjBGMjE0RDEwNjM2MDBBQzc2NDkgLyogQWJzdHJh
Y3RQQy5oICovLAorCQkJCTE0MjlEODVCMEVEMjE4RTkwMEI4OTYxOSAvKiBDTG9vcFN0YWNrLmNw
cCAqLywKKwkJCQkxNEQ3OTI2NDBEQUEwM0ZCMDAxQTlGMDUgLyogQ0xvb3BTdGFjay5oICovLAor
CQkJCUE3QzFFQUVCMTc5ODdBQjYwMDI5OURCMiAvKiBDTG9vcFN0YWNrSW5saW5lcy5oICovLAog
CQkJCUE3Rjg2OTBFMEY5NTg0QTEwMDU1ODY5NyAvKiBDYWNoZWRDYWxsLmggKi8sCiAJCQkJMTQy
OUQ4REIwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgKi8sCiAJCQkJMTQyOUQ4REMw
RUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5oICovLAogCQkJCUE3Rjg2OUVDMEY5NUMyRUMw
MDU1ODY5NyAvKiBDYWxsRnJhbWVDbG9zdXJlLmggKi8sCiAJCQkJMTQyOUQ3RDMwRUQyMTI4MjAw
Qjg5NjE5IC8qIEludGVycHJldGVyLmNwcCAqLywKIAkJCQkxNDI5RDc3QjBFRDIwRDczMDBCODk2
MTkgLyogSW50ZXJwcmV0ZXIuaCAqLywKLQkJCQkxNDI5RDg1QjBFRDIxOEU5MDBCODk2MTkgLyog
SlNTdGFjay5jcHAgKi8sCi0JCQkJMTRENzkyNjQwREFBMDNGQjAwMUE5RjA1IC8qIEpTU3RhY2su
aCAqLywKLQkJCQlBN0MxRUFFQjE3OTg3QUI2MDAyOTlEQjIgLyogSlNTdGFja0lubGluZXMuaCAq
LywKIAkJCQk2NUZCNTExNjE4NEVFOUJDMDBDMTJCNzAgLyogUHJvdG9DYWxsRnJhbWUuY3BwICov
LAogCQkJCTY1RkI1MTE1MTg0RUU4RjgwMEMxMkI3MCAvKiBQcm90b0NhbGxGcmFtZS5oICovLAog
CQkJCTE0OUIyNEZGMEQ4QUY2RDEwMDlDQjhDNyAvKiBSZWdpc3Rlci5oICovLApAQCAtNzgwNSw4
ICs3ODA1LDggQEAKIAkJCQkwRjkxOUQxMTE1N0YzMzJDMDA0QTRFN0QgLyogSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyOTlEOUUxN0QxMjgzNzAwNUY1
RkY5IC8qIEpTU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzkwREQ3MDE4MkY0OTk3MDA1ODg4
MDcgLyogSlNTZXRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMxOEM0NUUwRTE2RjVD
RDAwQjM0NDYwIC8qIEpTU3RhY2suaCBpbiBIZWFkZXJzICovLAotCQkJCUE3QzFFQUYwMTc5ODdB
QjYwMDI5OURCMiAvKiBKU1N0YWNrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkMxOEM0
NUUwRTE2RjVDRDAwQjM0NDYwIC8qIENMb29wU3RhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCUE3
QzFFQUYwMTc5ODdBQjYwMDI5OURCMiAvKiBDTG9vcFN0YWNrSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0MjcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5nLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkU4NTUzOTExMUI5OTY4MDAxQUY1MUUgLyogSlNTdHJpbmdCdWlsZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MEVDMEVDMzFBQTBEN0RBMDBCNkFBRkEgLyogSlNTdHJpbmdJ
dGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjE4LDcgKzkyMTgsNyBAQAogCQkJCURDMTdF
ODE3MUM5QzkxRDYwMDhBNkFCMyAvKiBTaGFkb3dDaGlja2VuLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3Mjk5RDlEMTdEMTI4MzcwMDVGNUZGOSAvKiBKU1NldC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNzkwREQ2RjE4MkY0OTk3MDA1ODg4MDcgLyogSlNTZXRJdGVyYXRvci5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQkxNDI4MDgzQTEwN0VDMDc1MDAxM0U3QjIgLyogSlNTdGFjay5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkxNDI4MDgzQTEwN0VDMDc1MDAxM0U3QjIgLyogQ0xvb3BTdGFjay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlENTEwN0VDMzc2MDA0MjdBNDggLyogSlNTdHJp
bmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQzBFQzIxQUEwRDdEQTAwQjZBQUZBIC8qIEpT
U3RyaW5nSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDRDMTAxQzNFMkM3NDAw
NkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAyMDMwNjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2LDYgQEAKICNpZm5kZWYgTWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGxfaAogI2RlZmluZSBNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbF9oCiAKLSNpbmNsdWRlICJKU1N0YWNrLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKICNp
bmNsdWRlICJTdGFja0FsaWdubWVudC5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVDb252ZW50aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUNv
bnZlbnRpb25zLmgJKHJldmlzaW9uIDIwMzA2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUNvbnZlbnRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDcg
QEAKICNkZWZpbmUgQnl0ZWNvZGVDb252ZW50aW9uc19oCiAKIC8vIFJlZ2lzdGVyIG51bWJlcnMg
dXNlZCBpbiBieXRlY29kZSBvcGVyYXRpb25zIGhhdmUgZGlmZmVyZW50IG1lYW5pbmcgYWNjb3Jk
aW5nIHRvIHRoZWlyIHJhbmdlczoKLS8vICAgICAgMHg4MDAwMDAwMC0weEZGRkZGRkZGICBOZWdh
dGl2ZSBpbmRpY2VzIGZyb20gdGhlIENhbGxGcmFtZSBwb2ludGVyIGFyZSBlbnRyaWVzIGluIHRo
ZSBjYWxsIGZyYW1lLCBzZWUgSlNTdGFjay5oLgorLy8gICAgICAweDgwMDAwMDAwLTB4RkZGRkZG
RkYgIE5lZ2F0aXZlIGluZGljZXMgZnJvbSB0aGUgQ2FsbEZyYW1lIHBvaW50ZXIgYXJlIGVudHJp
ZXMgaW4gdGhlIGNhbGwgZnJhbWUuCiAvLyAgICAgIDB4MDAwMDAwMDAtMHgzRkZGRkZGRiAgRm9y
d2FyZHMgaW5kaWNlcyBmcm9tIHRoZSBDYWxsRnJhbWUgcG9pbnRlciBhcmUgbG9jYWwgdmFycyBh
bmQgdGVtcG9yYXJpZXMgd2l0aCB0aGUgZnVuY3Rpb24ncyBjYWxsZnJhbWUuCiAvLyAgICAgIDB4
NDAwMDAwMDAtMHg3RkZGRkZGRiAgUG9zaXRpdmUgaW5kaWNlcyBmcm9tIDB4NDAwMDAwMDAgc3Bl
Y2lmeSBlbnRyaWVzIGluIHRoZSBjb25zdGFudCBwb29sIG9uIHRoZSBDb2RlQmxvY2suCiBzdGF0
aWMgY29uc3QgaW50IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ID0gMHg0MDAwMDAwMDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDIwMzA2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlICJERkdQcm9wZXJ0eVR5cGVLZXkuaCIKICNpbmNsdWRl
ICJERkdTY2FubmFibGUuaCIKICNpbmNsdWRlICJGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIgotI2lu
Y2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
LmgiCiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNp
b24gMjAzMDY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDggQEAKICNpbmNsdWRlICJERkdKSVRDb2RlLmgi
CiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIkpJVC5oIgotI2luY2x1ZGUgIkpTU3Rh
Y2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNSW5saW5l
cy5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewpAQCAtMjQ0LDcgKzI0NCw3IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShF
eGVjU3RhdGUqIGV4ZWMsIEMKICAgICAvLyAgICB3b3VsZCBoYXZlIG90aGVyd2lzZSBqdXN0IGtl
cHQgcnVubmluZyBhbGJlaXQgbGVzcyBxdWlja2x5LgogICAgIAogICAgIHVuc2lnbmVkIGZyYW1l
U2l6ZUZvckNoZWNrID0gaml0Q29kZS0+Y29tbW9uLnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4
ZWN1dGlvbkFuZEV4aXQoKTsKLSAgICBpZiAoIXZtLT5pbnRlcnByZXRlci0+c3RhY2soKS5lbnN1
cmVDYXBhY2l0eUZvcigmZXhlYy0+cmVnaXN0ZXJzKClbdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
ZnJhbWVTaXplRm9yQ2hlY2sgLSAxKS5vZmZzZXQoKV0pKSB7CisgICAgaWYgKFVOTElLRUxZKCF2
bS0+ZW5zdXJlU3RhY2tDYXBhY2l0eUZvcigmZXhlYy0+cmVnaXN0ZXJzKClbdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoZnJhbWVTaXplRm9yQ2hlY2sgLSAxKS5vZmZzZXQoKV0pKSkgewogICAgICAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBP
U1IgZmFpbGVkIGJlY2F1c2Ugc3RhY2sgZ3Jvd3RoIGZhaWxlZC5cbiIpOwogICAgICAgICByZXR1
cm4gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCShy
ZXZpc2lvbiAyMDMwNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw5ICszMCw5IEBACiAjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTEZvck9T
UkVudHJ5SklUQ29kZS5oIgotI2luY2x1ZGUgIkpTU3RhY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
T3BlcmFuZHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlZN
SW5saW5lcy5oIgogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKQEAgLTkyLDcgKzkyLDcgQEAgdm9p
ZCogcHJlcGFyZU9TUkVudHJ5KAogICAgICAgICBzY3JhdGNoW2xvY2FsXSA9IEpTVmFsdWU6OmVu
Y29kZSh2YWx1ZXMubG9jYWwobG9jYWwpKTsKICAgICAKICAgICBpbnQgc3RhY2tGcmFtZVNpemUg
PSBlbnRyeUNvZGUtPmNvbW1vbi5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGVjdXRpb25BbmRF
eGl0KCk7Ci0gICAgaWYgKCF2bS5pbnRlcnByZXRlci0+c3RhY2soKS5lbnN1cmVDYXBhY2l0eUZv
cigmZXhlYy0+cmVnaXN0ZXJzKClbdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoc3RhY2tGcmFtZVNp
emUgLSAxKS5vZmZzZXQoKV0pKSB7CisgICAgaWYgKFVOTElLRUxZKCF2bS5lbnN1cmVTdGFja0Nh
cGFjaXR5Rm9yKCZleGVjLT5yZWdpc3RlcnMoKVt2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChzdGFj
a0ZyYW1lU2l6ZSAtIDEpLm9mZnNldCgpXSkpKSB7CiAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHN0
YWNrIGdyb3d0aCBmYWlsZWQuXG4iKTsKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjAzMDY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4NiwxMSArNDg2LDYg
QEAgdm9pZCBIZWFwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZQogICAgIG1fc2xvdFZp
c2l0b3IuZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwogfQogCi1pbmxpbmUgSlNT
dGFjayYgSGVhcDo6c3RhY2soKQotewotICAgIHJldHVybiBtX3ZtLT5pbnRlcnByZXRlci0+c3Rh
Y2soKTsKLX0KLQogdm9pZCBIZWFwOjp3aWxsU3RhcnRJdGVyYXRpbmcoKQogewogICAgIG1fb2Jq
ZWN0U3BhY2Uud2lsbFN0YXJ0SXRlcmF0aW5nKCk7CkBAIC02ODEsNyArNjc2LDcgQEAgdm9pZCBI
ZWFwOjpnYXRoZXJKU1N0YWNrUm9vdHMoQ29uc2VydmF0aQogewogI2lmICFFTkFCTEUoSklUKQog
ICAgIEdDUEhBU0UoR2F0aGVySlNTdGFja1Jvb3RzKTsKLSAgICBzdGFjaygpLmdhdGhlckNvbnNl
cnZhdGl2ZVJvb3RzKHJvb3RzLCBtX2ppdFN0dWJSb3V0aW5lcywgbV9jb2RlQmxvY2tzKTsKKyAg
ICBtX3ZtLT5pbnRlcnByZXRlci0+Y2xvb3BTdGFjaygpLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3Rz
KHJvb3RzLCBtX2ppdFN0dWJSb3V0aW5lcywgbV9jb2RlQmxvY2tzKTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKHJvb3RzKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAkocmV2aXNpb24gMjAzMDY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw2IEBAIGNsYXNzIEhlYXBWZXJpZmllcjsKIGNs
YXNzIEluY3JlbWVudGFsU3dlZXBlcjsKIGNsYXNzIEpJVFN0dWJSb3V0aW5lOwogY2xhc3MgSlND
ZWxsOwotY2xhc3MgSlNTdGFjazsKIGNsYXNzIEpTVmFsdWU7CiBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CiBjbGFzcyBNYXJrZWRBcmd1bWVudEJ1ZmZlcjsKQEAgLTM1NSw4ICszNTQsNiBA
QCBwcml2YXRlOgogCiAgICAgYm9vbCBzaG91bGREb0Z1bGxDb2xsZWN0aW9uKEhlYXBPcGVyYXRp
b24gcmVxdWVzdGVkQ29sbGVjdGlvblR5cGUpIGNvbnN0OwogCi0gICAgSlNTdGFjayYgc3RhY2so
KTsKLSAgICAKICAgICB2b2lkIGluY3JlbWVudERlZmVycmFsRGVwdGgoKTsKICAgICB2b2lkIGRl
Y3JlbWVudERlZmVycmFsRGVwdGgoKTsKICAgICB2b2lkIGRlY3JlbWVudERlZmVycmFsRGVwdGhB
bmRHQ0lmTmVlZGVkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q0xvb3BTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NMb29wU3RhY2suY3BwCShyZXZpc2lvbiAyMDMwNjYpCShmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmNwcDoyMDMwNjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ0xvb3BTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNTdGFja0lu
bGluZXMuaCIKKworI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCisjaW5jbHVkZSAiSW50
ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5o
IgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisjaWYgIUVOQUJM
RShKSVQpCitzdGF0aWMgc2l6ZV90IGNvbW1pdHRlZEJ5dGVzQ291bnQgPSAwOworCitzdGF0aWMg
c2l6ZV90IGNvbW1pdFNpemUoKQoreworICAgIHN0YXRpYyBzaXplX3Qgc2l6ZSA9IHN0ZDo6bWF4
PHNpemVfdD4oMTYgKiAxMDI0LCBwYWdlU2l6ZSgpKTsKKyAgICByZXR1cm4gc2l6ZTsKK30KKwor
c3RhdGljIFN0YXRpY0xvY2sgc3RhY2tTdGF0aXN0aWNzTXV0ZXg7CisjZW5kaWYgLy8gIUVOQUJM
RShKSVQpCisKK0pTU3RhY2s6OkpTU3RhY2soVk0mIHZtKQorICAgIDogbV92bSh2bSkKKyAgICAs
IG1fdG9wQ2FsbEZyYW1lKHZtLnRvcENhbGxGcmFtZSkKKyNpZiAhRU5BQkxFKEpJVCkKKyAgICAs
IG1fZW5kKDApCisgICAgLCBtX3Jlc2VydmVkWm9uZVNpemVJblJlZ2lzdGVycygwKQorI2VuZGlm
Cit7CisjaWYgIUVOQUJMRShKSVQpCisgICAgc2l6ZV90IGNhcGFjaXR5ID0gT3B0aW9uczo6bWF4
UGVyVGhyZWFkU3RhY2tVc2FnZSgpOworICAgIEFTU0VSVChjYXBhY2l0eSAmJiBpc1BhZ2VBbGln
bmVkKGNhcGFjaXR5KSk7CisKKyAgICBtX3Jlc2VydmF0aW9uID0gUGFnZVJlc2VydmF0aW9uOjpy
ZXNlcnZlKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihjb21taXRTaXplKCksIGNhcGFjaXR5KSwg
T1NBbGxvY2F0b3I6OkpTVk1TdGFja1BhZ2VzKTsKKyAgICBzZXRDTG9vcFN0YWNrTGltaXQoaGln
aEFkZHJlc3MoKSk7CisgICAgbV9jb21taXRUb3AgPSBoaWdoQWRkcmVzcygpOworICAgIAorICAg
IG1fbGFzdFN0YWNrVG9wID0gYmFzZU9mU3RhY2soKTsKKyNlbmRpZiAvLyAhRU5BQkxFKEpJVCkK
KworICAgIG1fdG9wQ2FsbEZyYW1lID0gMDsKK30KKworI2lmICFFTkFCTEUoSklUKQorSlNTdGFj
azo6fkpTU3RhY2soKQoreworICAgIHB0cmRpZmZfdCBzaXplVG9EZWNvbW1pdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGhpZ2hBZGRyZXNzKCkpIC0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
bV9jb21taXRUb3ApOworICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4obV9jb21taXRUb3ApLCBzaXplVG9EZWNvbW1pdCk7CisgICAgYWRkVG9Db21taXR0
ZWRCeXRlQ291bnQoLXNpemVUb0RlY29tbWl0KTsKKyAgICBtX3Jlc2VydmF0aW9uLmRlYWxsb2Nh
dGUoKTsKK30KKworYm9vbCBKU1N0YWNrOjpncm93U2xvd0Nhc2UoUmVnaXN0ZXIqIG5ld1RvcE9m
U3RhY2spCit7CisgICAgUmVnaXN0ZXIqIG5ld1RvcE9mU3RhY2tXaXRoUmVzZXJ2ZWRab25lID0g
bmV3VG9wT2ZTdGFjayAtIG1fcmVzZXJ2ZWRab25lU2l6ZUluUmVnaXN0ZXJzOworCisgICAgLy8g
SWYgd2UgaGF2ZSBhbHJlYWR5IGNvbW1pdHRlZCBlbm91Z2ggbWVtb3J5IHRvIHNhdGlzZnkgdGhp
cyByZXF1ZXN0LAorICAgIC8vIGp1c3QgdXBkYXRlIHRoZSBlbmQgcG9pbnRlciBhbmQgcmV0dXJu
LgorICAgIGlmIChuZXdUb3BPZlN0YWNrV2l0aFJlc2VydmVkWm9uZSA+PSBtX2NvbW1pdFRvcCkg
eworICAgICAgICBzZXRDTG9vcFN0YWNrTGltaXQobmV3VG9wT2ZTdGFjayk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIC8vIENvbXB1dGUgdGhlIGNodW5rIHNpemUgb2YgYWRk
aXRpb25hbCBtZW1vcnkgdG8gY29tbWl0LCBhbmQgc2VlIGlmIHdlCisgICAgLy8gaGF2ZSBpdCBp
cyBzdGlsbCB3aXRoaW4gb3VyIGJ1ZGdldC4gSWYgbm90LCB3ZSdsbCBmYWlsIHRvIGdyb3cgYW5k
CisgICAgLy8gcmV0dXJuIGZhbHNlLgorICAgIHB0cmRpZmZfdCBkZWx0YSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KG1fY29tbWl0VG9wKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG5ld1Rv
cE9mU3RhY2tXaXRoUmVzZXJ2ZWRab25lKTsKKyAgICBkZWx0YSA9IFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZihjb21taXRTaXplKCksIGRlbHRhKTsKKyAgICBSZWdpc3RlciogbmV3Q29tbWl0VG9w
ID0gbV9jb21taXRUb3AgLSAoZGVsdGEgLyBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICBpZiAobmV3
Q29tbWl0VG9wIDwgcmVzZXJ2YXRpb25Ub3AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gT3RoZXJ3aXNlLCB0aGUgZ3Jvd3RoIGlzIHN0aWxsIHdpdGhpbiBvdXIgYnVkZ2V0LiBD
b21taXQgaXQgYW5kIHJldHVybiB0cnVlLgorICAgIG1fcmVzZXJ2YXRpb24uY29tbWl0KG5ld0Nv
bW1pdFRvcCwgZGVsdGEpOworICAgIGFkZFRvQ29tbWl0dGVkQnl0ZUNvdW50KGRlbHRhKTsKKyAg
ICBtX2NvbW1pdFRvcCA9IG5ld0NvbW1pdFRvcDsKKyAgICBzZXRDTG9vcFN0YWNrTGltaXQobmV3
VG9wT2ZTdGFjayk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSlNTdGFjazo6Z2F0aGVy
Q29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzLCBK
SVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBDb2RlQmxvY2tTZXQmIGNvZGVCbG9j
a3MpCit7CisgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKHRvcE9mU3RhY2soKSArIDEsIGhpZ2hB
ZGRyZXNzKCksIGppdFN0dWJSb3V0aW5lcywgY29kZUJsb2Nrcyk7Cit9CisKK3ZvaWQgSlNTdGFj
azo6c2FuaXRpemVTdGFjaygpCit7CisjaWYgIUFTQU5fRU5BQkxFRAorICAgIEFTU0VSVCh0b3BP
ZlN0YWNrKCkgPD0gYmFzZU9mU3RhY2soKSk7CisgICAgCisgICAgaWYgKG1fbGFzdFN0YWNrVG9w
IDwgdG9wT2ZTdGFjaygpKSB7CisgICAgICAgIGNoYXIqIGJlZ2luID0gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4obV9sYXN0U3RhY2tUb3AgKyAxKTsKKyAgICAgICAgY2hhciogZW5kID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4odG9wT2ZTdGFjaygpICsgMSk7CisgICAgICAgIG1lbXNldChiZWdp
biwgMCwgZW5kIC0gYmVnaW4pOworICAgIH0KKyAgICAKKyAgICBtX2xhc3RTdGFja1RvcCA9IHRv
cE9mU3RhY2soKTsKKyNlbmRpZgorfQorCit2b2lkIEpTU3RhY2s6OnJlbGVhc2VFeGNlc3NDYXBh
Y2l0eSgpCit7CisgICAgUmVnaXN0ZXIqIGhpZ2hBZGRyZXNzV2l0aFJlc2VydmVkWm9uZSA9IGhp
Z2hBZGRyZXNzKCkgLSBtX3Jlc2VydmVkWm9uZVNpemVJblJlZ2lzdGVyczsKKyAgICBwdHJkaWZm
X3QgZGVsdGEgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihoaWdoQWRkcmVzc1dpdGhSZXNlcnZl
ZFpvbmUpIC0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9jb21taXRUb3ApOworICAgIG1fcmVz
ZXJ2YXRpb24uZGVjb21taXQobV9jb21taXRUb3AsIGRlbHRhKTsKKyAgICBhZGRUb0NvbW1pdHRl
ZEJ5dGVDb3VudCgtZGVsdGEpOworICAgIG1fY29tbWl0VG9wID0gaGlnaEFkZHJlc3NXaXRoUmVz
ZXJ2ZWRab25lOworfQorCit2b2lkIEpTU3RhY2s6OmFkZFRvQ29tbWl0dGVkQnl0ZUNvdW50KGxv
bmcgYnl0ZUNvdW50KQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKHN0YWNrU3RhdGlzdGljc011
dGV4KTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8bG9uZz4oY29tbWl0dGVkQnl0ZXNDb3VudCkg
KyBieXRlQ291bnQgPiAtMSk7CisgICAgY29tbWl0dGVkQnl0ZXNDb3VudCArPSBieXRlQ291bnQ7
Cit9CisKK3ZvaWQgSlNTdGFjazo6c2V0UmVzZXJ2ZWRab25lU2l6ZShzaXplX3QgcmVzZXJ2ZWRa
b25lU2l6ZSkKK3sKKyAgICBtX3Jlc2VydmVkWm9uZVNpemVJblJlZ2lzdGVycyA9IHJlc2VydmVk
Wm9uZVNpemUgLyBzaXplb2YoUmVnaXN0ZXIpOworICAgIGlmIChtX2NvbW1pdFRvcCA+PSAobV9l
bmQgKyAxKSAtIG1fcmVzZXJ2ZWRab25lU2l6ZUluUmVnaXN0ZXJzKQorICAgICAgICBncm93U2xv
d0Nhc2UobV9lbmQgKyAxKTsKK30KKyNlbmRpZiAvLyAhRU5BQkxFKEpJVCkKKworI2lmIEVOQUJM
RShKSVQpCitSZWdpc3RlciogSlNTdGFjazo6bG93QWRkcmVzcygpIGNvbnN0Cit7CisgICAgQVNT
RVJUKHd0ZlRocmVhZERhdGEoKS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253YXJkKCkpOworICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PFJlZ2lzdGVyKj4obV92bS5vc1N0YWNrTGltaXRXaXRoUmVz
ZXJ2ZSgpKTsKK30KKworUmVnaXN0ZXIqIEpTU3RhY2s6OmhpZ2hBZGRyZXNzKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQod3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkuaXNHcm93aW5nRG93bndhcmQoKSk7
CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPih3dGZUaHJlYWREYXRhKCku
c3RhY2soKS5vcmlnaW4oKSk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworc2l6ZV90IEpT
U3RhY2s6OmNvbW1pdHRlZEJ5dGVDb3VudCgpCit7CisjaWYgIUVOQUJMRShKSVQpCisgICAgTG9j
a0hvbGRlciBsb2NrZXIoc3RhY2tTdGF0aXN0aWNzTXV0ZXgpOworICAgIHJldHVybiBjb21taXR0
ZWRCeXRlc0NvdW50OworI2Vsc2UKKyAgICAvLyBXaGVuIHVzaW5nIHRoZSBDIHN0YWNrLCB3ZSBk
b24ndCBrbm93IGhvdyBtYW55IHN0YWNrIHBhZ2VzIGFyZSBhY3R1YWxseQorICAgIC8vIGNvbW1p
dHRlZC4gU28sIHdlIHVzZSB0aGUgY3VycmVudCBzdGFjayB1c2FnZSBhcyBhbiBlc3RpbWF0ZS4K
KyAgICBBU1NFUlQod3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkuaXNHcm93aW5nRG93bndhcmQoKSk7
CisgICAgaW50OF90KiBjdXJyZW50ID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ4X3QqPigmY3VycmVu
dCk7CisgICAgaW50OF90KiBoaWdoID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ4X3QqPih3dGZUaHJl
YWREYXRhKCkuc3RhY2soKS5vcmlnaW4oKSk7CisgICAgcmV0dXJuIGhpZ2ggLSBjdXJyZW50Owor
I2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NMb29wU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DTG9vcFN0YWNrLmNwcAkocmV2aXNpb24gMjAzMDY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NMb29wU3RhY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw4ICsyNywxMSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJKU1N0YWNrSW5saW5lcy5oIgorI2luY2x1ZGUgIkNMb29wU3RhY2suaCIKIAor
I2lmICFFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ0xvb3BTdGFja0lubGluZXMuaCIKICNpbmNs
dWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgpAQCAtMzcsNyArNDAsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotI2lmICFFTkFCTEUoSklUKQogc3RhdGljIHNpemVfdCBjb21taXR0ZWRCeXRlc0NvdW50ID0g
MDsKIAogc3RhdGljIHNpemVfdCBjb21taXRTaXplKCkKQEAgLTQ3LDE3ICs0OSwxMyBAQCBzdGF0
aWMgc2l6ZV90IGNvbW1pdFNpemUoKQogfQogCiBzdGF0aWMgU3RhdGljTG9jayBzdGFja1N0YXRp
c3RpY3NNdXRleDsKLSNlbmRpZiAvLyAhRU5BQkxFKEpJVCkKIAotSlNTdGFjazo6SlNTdGFjayhW
TSYgdm0pCitDTG9vcFN0YWNrOjpDTG9vcFN0YWNrKFZNJiB2bSkKICAgICA6IG1fdm0odm0pCiAg
ICAgLCBtX3RvcENhbGxGcmFtZSh2bS50b3BDYWxsRnJhbWUpCi0jaWYgIUVOQUJMRShKSVQpCiAg
ICAgLCBtX2VuZCgwKQogICAgICwgbV9yZXNlcnZlZFpvbmVTaXplSW5SZWdpc3RlcnMoMCkKLSNl
bmRpZgogewotI2lmICFFTkFCTEUoSklUKQogICAgIHNpemVfdCBjYXBhY2l0eSA9IE9wdGlvbnM6
Om1heFBlclRocmVhZFN0YWNrVXNhZ2UoKTsKICAgICBBU1NFUlQoY2FwYWNpdHkgJiYgaXNQYWdl
QWxpZ25lZChjYXBhY2l0eSkpOwogCkBAIC02NiwxMyArNjQsMTEgQEAgSlNTdGFjazo6SlNTdGFj
ayhWTSYgdm0pCiAgICAgbV9jb21taXRUb3AgPSBoaWdoQWRkcmVzcygpOwogICAgIAogICAgIG1f
bGFzdFN0YWNrVG9wID0gYmFzZU9mU3RhY2soKTsKLSNlbmRpZiAvLyAhRU5BQkxFKEpJVCkKIAog
ICAgIG1fdG9wQ2FsbEZyYW1lID0gMDsKIH0KIAotI2lmICFFTkFCTEUoSklUKQotSlNTdGFjazo6
fkpTU3RhY2soKQorQ0xvb3BTdGFjazo6fkNMb29wU3RhY2soKQogewogICAgIHB0cmRpZmZfdCBz
aXplVG9EZWNvbW1pdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGhpZ2hBZGRyZXNzKCkpIC0g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obV9jb21taXRUb3ApOwogICAgIG1fcmVzZXJ2YXRpb24u
ZGVjb21taXQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9jb21taXRUb3ApLCBzaXplVG9EZWNv
bW1pdCk7CkBAIC04MCw3ICs3Niw3IEBAIEpTU3RhY2s6On5KU1N0YWNrKCkKICAgICBtX3Jlc2Vy
dmF0aW9uLmRlYWxsb2NhdGUoKTsKIH0KIAotYm9vbCBKU1N0YWNrOjpncm93U2xvd0Nhc2UoUmVn
aXN0ZXIqIG5ld1RvcE9mU3RhY2spCitib29sIENMb29wU3RhY2s6Omdyb3dTbG93Q2FzZShSZWdp
c3RlciogbmV3VG9wT2ZTdGFjaykKIHsKICAgICBSZWdpc3RlciogbmV3VG9wT2ZTdGFja1dpdGhS
ZXNlcnZlZFpvbmUgPSBuZXdUb3BPZlN0YWNrIC0gbV9yZXNlcnZlZFpvbmVTaXplSW5SZWdpc3Rl
cnM7CiAKQEAgLTEwOCwxMiArMTA0LDEyIEBAIGJvb2wgSlNTdGFjazo6Z3Jvd1Nsb3dDYXNlKFJl
Z2lzdGVyKiBuZXcKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKU1N0YWNrOjpnYXRoZXJD
b25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMsIEpJ
VFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMsIENvZGVCbG9ja1NldCYgY29kZUJsb2Nr
cykKK3ZvaWQgQ0xvb3BTdGFjazo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZl
Um9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzLCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRp
bmVzLCBDb2RlQmxvY2tTZXQmIGNvZGVCbG9ja3MpCiB7CiAgICAgY29uc2VydmF0aXZlUm9vdHMu
YWRkKHRvcE9mU3RhY2soKSArIDEsIGhpZ2hBZGRyZXNzKCksIGppdFN0dWJSb3V0aW5lcywgY29k
ZUJsb2Nrcyk7CiB9CiAKLXZvaWQgSlNTdGFjazo6c2FuaXRpemVTdGFjaygpCit2b2lkIENMb29w
U3RhY2s6OnNhbml0aXplU3RhY2soKQogewogI2lmICFBU0FOX0VOQUJMRUQKICAgICBBU1NFUlQo
dG9wT2ZTdGFjaygpIDw9IGJhc2VPZlN0YWNrKCkpOwpAQCAtMTI4LDcgKzEyNCw3IEBAIHZvaWQg
SlNTdGFjazo6c2FuaXRpemVTdGFjaygpCiAjZW5kaWYKIH0KIAotdm9pZCBKU1N0YWNrOjpyZWxl
YXNlRXhjZXNzQ2FwYWNpdHkoKQordm9pZCBDTG9vcFN0YWNrOjpyZWxlYXNlRXhjZXNzQ2FwYWNp
dHkoKQogewogICAgIFJlZ2lzdGVyKiBoaWdoQWRkcmVzc1dpdGhSZXNlcnZlZFpvbmUgPSBoaWdo
QWRkcmVzcygpIC0gbV9yZXNlcnZlZFpvbmVTaXplSW5SZWdpc3RlcnM7CiAgICAgcHRyZGlmZl90
IGRlbHRhID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaGlnaEFkZHJlc3NXaXRoUmVzZXJ2ZWRa
b25lKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fY29tbWl0VG9wKTsKQEAgLTEzNyw0OCAr
MTMzLDI2IEBAIHZvaWQgSlNTdGFjazo6cmVsZWFzZUV4Y2Vzc0NhcGFjaXR5KCkKICAgICBtX2Nv
bW1pdFRvcCA9IGhpZ2hBZGRyZXNzV2l0aFJlc2VydmVkWm9uZTsKIH0KIAotdm9pZCBKU1N0YWNr
OjphZGRUb0NvbW1pdHRlZEJ5dGVDb3VudChsb25nIGJ5dGVDb3VudCkKK3ZvaWQgQ0xvb3BTdGFj
azo6YWRkVG9Db21taXR0ZWRCeXRlQ291bnQobG9uZyBieXRlQ291bnQpCiB7CiAgICAgTG9ja0hv
bGRlciBsb2NrZXIoc3RhY2tTdGF0aXN0aWNzTXV0ZXgpOwogICAgIEFTU0VSVChzdGF0aWNfY2Fz
dDxsb25nPihjb21taXR0ZWRCeXRlc0NvdW50KSArIGJ5dGVDb3VudCA+IC0xKTsKICAgICBjb21t
aXR0ZWRCeXRlc0NvdW50ICs9IGJ5dGVDb3VudDsKIH0KIAotdm9pZCBKU1N0YWNrOjpzZXRSZXNl
cnZlZFpvbmVTaXplKHNpemVfdCByZXNlcnZlZFpvbmVTaXplKQordm9pZCBDTG9vcFN0YWNrOjpz
ZXRSZXNlcnZlZFpvbmVTaXplKHNpemVfdCByZXNlcnZlZFpvbmVTaXplKQogewogICAgIG1fcmVz
ZXJ2ZWRab25lU2l6ZUluUmVnaXN0ZXJzID0gcmVzZXJ2ZWRab25lU2l6ZSAvIHNpemVvZihSZWdp
c3Rlcik7CiAgICAgaWYgKG1fY29tbWl0VG9wID49IChtX2VuZCArIDEpIC0gbV9yZXNlcnZlZFpv
bmVTaXplSW5SZWdpc3RlcnMpCiAgICAgICAgIGdyb3dTbG93Q2FzZShtX2VuZCArIDEpOwogfQot
I2VuZGlmIC8vICFFTkFCTEUoSklUKQotCi0jaWYgRU5BQkxFKEpJVCkKLVJlZ2lzdGVyKiBKU1N0
YWNrOjpsb3dBZGRyZXNzKCkgY29uc3QKLXsKLSAgICBBU1NFUlQod3RmVGhyZWFkRGF0YSgpLnN0
YWNrKCkuaXNHcm93aW5nRG93bndhcmQoKSk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
UmVnaXN0ZXIqPihtX3ZtLm9zU3RhY2tMaW1pdFdpdGhSZXNlcnZlKCkpOwotfQotCi1SZWdpc3Rl
ciogSlNTdGFjazo6aGlnaEFkZHJlc3MoKSBjb25zdAotewotICAgIEFTU0VSVCh3dGZUaHJlYWRE
YXRhKCkuc3RhY2soKS5pc0dyb3dpbmdEb3dud2FyZCgpKTsKLSAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxSZWdpc3Rlcio+KHd0ZlRocmVhZERhdGEoKS5zdGFjaygpLm9yaWdpbigpKTsKLX0K
LSNlbmRpZiAvLyBFTkFCTEUoSklUKQogCi1zaXplX3QgSlNTdGFjazo6Y29tbWl0dGVkQnl0ZUNv
dW50KCkKK3NpemVfdCBDTG9vcFN0YWNrOjpjb21taXR0ZWRCeXRlQ291bnQoKQogewotI2lmICFF
TkFCTEUoSklUKQogICAgIExvY2tIb2xkZXIgbG9ja2VyKHN0YWNrU3RhdGlzdGljc011dGV4KTsK
ICAgICByZXR1cm4gY29tbWl0dGVkQnl0ZXNDb3VudDsKLSNlbHNlCi0gICAgLy8gV2hlbiB1c2lu
ZyB0aGUgQyBzdGFjaywgd2UgZG9uJ3Qga25vdyBob3cgbWFueSBzdGFjayBwYWdlcyBhcmUgYWN0
dWFsbHkKLSAgICAvLyBjb21taXR0ZWQuIFNvLCB3ZSB1c2UgdGhlIGN1cnJlbnQgc3RhY2sgdXNh
Z2UgYXMgYW4gZXN0aW1hdGUuCi0gICAgQVNTRVJUKHd0ZlRocmVhZERhdGEoKS5zdGFjaygpLmlz
R3Jvd2luZ0Rvd253YXJkKCkpOwotICAgIGludDhfdCogY3VycmVudCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8aW50OF90Kj4oJmN1cnJlbnQpOwotICAgIGludDhfdCogaGlnaCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8aW50OF90Kj4od3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkub3JpZ2luKCkpOwotICAgIHJldHVy
biBoaWdoIC0gY3VycmVudDsKLSNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vICFFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NMb29wU3RhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ0xvb3BTdGFjay5oCShyZXZpc2lvbiAyMDMwNjYpCShmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmg6MjAzMDY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NMb29wU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCAyMDEzLTIwMTQsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKU1N0YWNrX2gKKyNkZWZpbmUgSlNTdGFj
a19oCisKKyNpbmNsdWRlICJSZWdpc3Rlci5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorI2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2YXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVk1UYWdz
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCisgICAgY2xhc3MgQ29kZUJsb2NrU2V0OworICAgIGNs
YXNzIENvbnNlcnZhdGl2ZVJvb3RzOworICAgIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OworICAg
IGNsYXNzIFZNOworICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKworICAgIGNsYXNz
IEpTU3RhY2sgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShKU1N0YWNrKTsKKyAgICBw
dWJsaWM6CisgICAgICAgIC8vIEFsbG93IDhrIG9mIGV4Y2VzcyByZWdpc3RlcnMgYmVmb3JlIHdl
IHN0YXJ0IHRyeWluZyB0byByZWFwIHRoZSBzdGFjaworICAgICAgICBzdGF0aWMgY29uc3QgcHRy
ZGlmZl90IG1heEV4Y2Vzc0NhcGFjaXR5ID0gOCAqIDEwMjQ7CisKKyAgICAgICAgSlNTdGFjayhW
TSYpOworICAgICAgICAKKyAgICAgICAgYm9vbCBlbnN1cmVDYXBhY2l0eUZvcihSZWdpc3Rlciog
bmV3VG9wT2ZTdGFjayk7CisKKyAgICAgICAgYm9vbCBjb250YWluc0FkZHJlc3MoUmVnaXN0ZXIq
IGFkZHJlc3MpIHsgcmV0dXJuIChsb3dBZGRyZXNzKCkgPD0gYWRkcmVzcyAmJiBhZGRyZXNzIDwg
aGlnaEFkZHJlc3MoKSk7IH0KKyAgICAgICAgc3RhdGljIHNpemVfdCBjb21taXR0ZWRCeXRlQ291
bnQoKTsKKworI2lmICFFTkFCTEUoSklUKQorICAgICAgICB+SlNTdGFjaygpOworCisgICAgICAg
IHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHVi
Um91dGluZVNldCYsIENvZGVCbG9ja1NldCYpOworICAgICAgICB2b2lkIHNhbml0aXplU3RhY2so
KTsKKworICAgICAgICBSZWdpc3RlciogYmFzZU9mU3RhY2soKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gaGlnaEFkZHJlc3MoKSAtIDE7CisgICAgICAgIH0KKworICAgICAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGhpZ2hBZGRyZXNzKCkgLSBsb3dBZGRyZXNz
KCk7IH0KKworICAgICAgICB2b2lkIHNldFJlc2VydmVkWm9uZVNpemUoc2l6ZV90KTsKKworICAg
ICAgICBpbmxpbmUgUmVnaXN0ZXIqIHRvcE9mU3RhY2soKTsKKyNlbmRpZiAvLyBFTkFCTEUoSklU
KQorCisgICAgcHJpdmF0ZToKKworI2lmICFFTkFCTEUoSklUKQorICAgICAgICBSZWdpc3Rlciog
bG93QWRkcmVzcygpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2VuZCAr
IDE7CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlciogaGlnaEFkZHJlc3MoKSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8UmVnaXN0
ZXIqPihzdGF0aWNfY2FzdDxjaGFyKj4obV9yZXNlcnZhdGlvbi5iYXNlKCkpICsgbV9yZXNlcnZh
dGlvbi5zaXplKCkpOworICAgICAgICB9CisjZWxzZQorICAgICAgICBSZWdpc3RlciogbG93QWRk
cmVzcygpIGNvbnN0OworICAgICAgICBSZWdpc3RlciogaGlnaEFkZHJlc3MoKSBjb25zdDsKKyNl
bmRpZiAvLyAhRU5BQkxFKEpJVCkKKworI2lmICFFTkFCTEUoSklUKQorICAgICAgICBpbmxpbmUg
UmVnaXN0ZXIqIHRvcE9mRnJhbWVGb3IoQ2FsbEZyYW1lKik7CisKKyAgICAgICAgUmVnaXN0ZXIq
IHJlc2VydmF0aW9uVG9wKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgY2hhciogcmVz
ZXJ2YXRpb25Ub3AgPSBzdGF0aWNfY2FzdDxjaGFyKj4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJlZ2lzdGVyKj4ocmVzZXJ2
YXRpb25Ub3ApOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBncm93KFJlZ2lzdGVyKiBuZXdU
b3BPZlN0YWNrKTsKKyAgICAgICAgYm9vbCBncm93U2xvd0Nhc2UoUmVnaXN0ZXIqIG5ld1RvcE9m
U3RhY2spOworICAgICAgICB2b2lkIHNocmluayhSZWdpc3RlciogbmV3VG9wT2ZTdGFjayk7Cisg
ICAgICAgIHZvaWQgcmVsZWFzZUV4Y2Vzc0NhcGFjaXR5KCk7CisgICAgICAgIHZvaWQgYWRkVG9D
b21taXR0ZWRCeXRlQ291bnQobG9uZyk7CisKKyAgICAgICAgdm9pZCBzZXRDTG9vcFN0YWNrTGlt
aXQoUmVnaXN0ZXIqIG5ld1RvcE9mU3RhY2spOworI2VuZGlmIC8vICFFTkFCTEUoSklUKQorCisg
ICAgICAgIFZNJiBtX3ZtOworICAgICAgICBDYWxsRnJhbWUqJiBtX3RvcENhbGxGcmFtZTsKKyNp
ZiAhRU5BQkxFKEpJVCkKKyAgICAgICAgUmVnaXN0ZXIqIG1fZW5kOworICAgICAgICBSZWdpc3Rl
ciogbV9jb21taXRUb3A7CisgICAgICAgIFBhZ2VSZXNlcnZhdGlvbiBtX3Jlc2VydmF0aW9uOwor
ICAgICAgICBSZWdpc3RlciogbV9sYXN0U3RhY2tUb3A7CisgICAgICAgIHB0cmRpZmZfdCBtX3Jl
c2VydmVkWm9uZVNpemVJblJlZ2lzdGVyczsKKyNlbmRpZiAvLyAhRU5BQkxFKEpJVCkKKworICAg
ICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworICAgIH07CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNTdGFja19oCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ0xvb3BTdGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DTG9vcFN0YWNrLmgJKHJldmlzaW9uIDIwMzA2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DTG9vcFN0YWNrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDggKzI2LDkgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBK
U1N0YWNrX2gKLSNkZWZpbmUgSlNTdGFja19oCisjcHJhZ21hIG9uY2UKKworI2lmICFFTkFCTEUo
SklUKQogCiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KQEAgLTQyLDIyICs0MywyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBWTTsKICAg
ICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICBjbGFzcyBKU1N0YWNrIHsKLSAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSlNTdGFjayk7CisgICAgY2xhc3MgQ0xvb3BTdGFj
ayB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENMb29wU3RhY2spOwogICAgIHB1Ymxp
YzoKICAgICAgICAgLy8gQWxsb3cgOGsgb2YgZXhjZXNzIHJlZ2lzdGVycyBiZWZvcmUgd2Ugc3Rh
cnQgdHJ5aW5nIHRvIHJlYXAgdGhlIHN0YWNrCiAgICAgICAgIHN0YXRpYyBjb25zdCBwdHJkaWZm
X3QgbWF4RXhjZXNzQ2FwYWNpdHkgPSA4ICogMTAyNDsKIAotICAgICAgICBKU1N0YWNrKFZNJik7
CisgICAgICAgIENMb29wU3RhY2soVk0mKTsKKyAgICAgICAgfkNMb29wU3RhY2soKTsKICAgICAg
ICAgCiAgICAgICAgIGJvb2wgZW5zdXJlQ2FwYWNpdHlGb3IoUmVnaXN0ZXIqIG5ld1RvcE9mU3Rh
Y2spOwogCiAgICAgICAgIGJvb2wgY29udGFpbnNBZGRyZXNzKFJlZ2lzdGVyKiBhZGRyZXNzKSB7
IHJldHVybiAobG93QWRkcmVzcygpIDw9IGFkZHJlc3MgJiYgYWRkcmVzcyA8IGhpZ2hBZGRyZXNz
KCkpOyB9CiAgICAgICAgIHN0YXRpYyBzaXplX3QgY29tbWl0dGVkQnl0ZUNvdW50KCk7CiAKLSNp
ZiAhRU5BQkxFKEpJVCkKLSAgICAgICAgfkpTU3RhY2soKTsKLQogICAgICAgICB2b2lkIGdhdGhl
ckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiwgSklUU3R1YlJvdXRpbmVTZXQm
LCBDb2RlQmxvY2tTZXQmKTsKICAgICAgICAgdm9pZCBzYW5pdGl6ZVN0YWNrKCk7CiAKQEAgLTcx
LDExICs3MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNldFJlc2VydmVkWm9u
ZVNpemUoc2l6ZV90KTsKIAogICAgICAgICBpbmxpbmUgUmVnaXN0ZXIqIHRvcE9mU3RhY2soKTsK
LSNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAgICAgcHJpdmF0ZToKIAotI2lmICFFTkFCTEUoSklU
KQogICAgICAgICBSZWdpc3RlciogbG93QWRkcmVzcygpIGNvbnN0CiAgICAgICAgIHsKICAgICAg
ICAgICAgIHJldHVybiBtX2VuZCArIDE7CkBAIC04NSwxMiArODIsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJl
Z2lzdGVyKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKSArIG1fcmVz
ZXJ2YXRpb24uc2l6ZSgpKTsKICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgUmVnaXN0ZXIqIGxv
d0FkZHJlc3MoKSBjb25zdDsKLSAgICAgICAgUmVnaXN0ZXIqIGhpZ2hBZGRyZXNzKCkgY29uc3Q7
Ci0jZW5kaWYgLy8gIUVOQUJMRShKSVQpCiAKLSNpZiAhRU5BQkxFKEpJVCkKICAgICAgICAgaW5s
aW5lIFJlZ2lzdGVyKiB0b3BPZkZyYW1lRm9yKENhbGxGcmFtZSopOwogCiAgICAgICAgIFJlZ2lz
dGVyKiByZXNlcnZhdGlvblRvcCgpIGNvbnN0CkBAIC0xMDYsMjEgKzk4LDE4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGFkZFRvQ29tbWl0dGVkQnl0ZUNvdW50KGxvbmcpOwogCiAg
ICAgICAgIHZvaWQgc2V0Q0xvb3BTdGFja0xpbWl0KFJlZ2lzdGVyKiBuZXdUb3BPZlN0YWNrKTsK
LSNlbmRpZiAvLyAhRU5BQkxFKEpJVCkKIAogICAgICAgICBWTSYgbV92bTsKICAgICAgICAgQ2Fs
bEZyYW1lKiYgbV90b3BDYWxsRnJhbWU7Ci0jaWYgIUVOQUJMRShKSVQpCiAgICAgICAgIFJlZ2lz
dGVyKiBtX2VuZDsKICAgICAgICAgUmVnaXN0ZXIqIG1fY29tbWl0VG9wOwogICAgICAgICBQYWdl
UmVzZXJ2YXRpb24gbV9yZXNlcnZhdGlvbjsKICAgICAgICAgUmVnaXN0ZXIqIG1fbGFzdFN0YWNr
VG9wOwogICAgICAgICBwdHJkaWZmX3QgbV9yZXNlcnZlZFpvbmVTaXplSW5SZWdpc3RlcnM7Ci0j
ZW5kaWYgLy8gIUVOQUJMRShKSVQpCiAKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAotI2VuZGlmIC8vIEpT
U3RhY2tfaAorI2VuZGlmIC8vICFFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NMb29wU3RhY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NMb29wU3RhY2tJbmxpbmVzLmgJKHJldmlzaW9u
IDIwMzA2NikJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2tJ
bmxpbmVzLmg6MjAzMDY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NM
b29wU3RhY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgSlNTdGFja0lubGluZXNfaAorI2RlZmluZSBKU1N0YWNrSW5saW5lc19oCisKKyNpbmNsdWRl
ICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJKU1N0YWNr
LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBib29sIEpT
U3RhY2s6OmVuc3VyZUNhcGFjaXR5Rm9yKFJlZ2lzdGVyKiBuZXdUb3BPZlN0YWNrKQoreworI2lm
ICFFTkFCTEUoSklUKQorICAgIHJldHVybiBncm93KG5ld1RvcE9mU3RhY2spOworI2Vsc2UKKyAg
ICBBU1NFUlQod3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkuaXNHcm93aW5nRG93bndhcmQoKSk7Cisg
ICAgcmV0dXJuIG5ld1RvcE9mU3RhY2sgPj0gbV92bS5vc1N0YWNrTGltaXRXaXRoUmVzZXJ2ZSgp
OworI2VuZGlmCit9CisKKyNpZiAhRU5BQkxFKEpJVCkKKworaW5saW5lIFJlZ2lzdGVyKiBKU1N0
YWNrOjp0b3BPZkZyYW1lRm9yKENhbGxGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKFVOTElLRUxZ
KCFmcmFtZSkpCisgICAgICAgIHJldHVybiBiYXNlT2ZTdGFjaygpOworICAgIHJldHVybiBmcmFt
ZS0+dG9wT2ZGcmFtZSgpIC0gMTsKK30KKworaW5saW5lIFJlZ2lzdGVyKiBKU1N0YWNrOjp0b3BP
ZlN0YWNrKCkKK3sKKyAgICByZXR1cm4gdG9wT2ZGcmFtZUZvcihtX3RvcENhbGxGcmFtZSk7Cit9
CisKK2lubGluZSB2b2lkIEpTU3RhY2s6OnNocmluayhSZWdpc3RlciogbmV3VG9wT2ZTdGFjaykK
K3sKKyAgICBSZWdpc3RlciogbmV3RW5kID0gbmV3VG9wT2ZTdGFjayAtIDE7CisgICAgaWYgKG5l
d0VuZCA+PSBtX2VuZCkKKyAgICAgICAgcmV0dXJuOworICAgIHNldENMb29wU3RhY2tMaW1pdChu
ZXdUb3BPZlN0YWNrKTsKKyAgICAvLyBOb3RlOiBDbGFuZyBjb21wbGFpbnMgb2YgYW4gdW5yZXNv
bHZlZCBsaW5rYWdlIHRvIG1heEV4Y2Vzc0NhcGFjaXR5IGlmCisgICAgLy8gaW52b2tlIHN0ZDo6
bWF4KCkgd2l0aCBpdCBhcyBhbiBhcmd1bWVudC4gVG8gd29yayBhcm91bmQgdGhpcywgd2UgZmly
c3QKKyAgICAvLyBhc3NpZ24gdGhlIGNvbnN0YW50IHRvIGEgbG9jYWwgdmFyaWFibGUsIGFuZCB1
c2UgdGhlIGxvY2FsIGluc3RlYWQuCisgICAgcHRyZGlmZl90IG1heEV4Y2Vzc0NhcGFjaXR5ID0g
SlNTdGFjazo6bWF4RXhjZXNzQ2FwYWNpdHk7CisgICAgcHRyZGlmZl90IG1heEV4Y2Vzc0luUmVn
aXN0ZXJzID0gc3RkOjptYXgobWF4RXhjZXNzQ2FwYWNpdHksIG1fcmVzZXJ2ZWRab25lU2l6ZUlu
UmVnaXN0ZXJzKTsKKyAgICBpZiAobV9lbmQgPT0gYmFzZU9mU3RhY2soKSAmJiAoaGlnaEFkZHJl
c3MoKSAtIG1fY29tbWl0VG9wKSA+PSBtYXhFeGNlc3NJblJlZ2lzdGVycykKKyAgICAgICAgcmVs
ZWFzZUV4Y2Vzc0NhcGFjaXR5KCk7Cit9CisKK2lubGluZSBib29sIEpTU3RhY2s6Omdyb3coUmVn
aXN0ZXIqIG5ld1RvcE9mU3RhY2spCit7CisgICAgUmVnaXN0ZXIqIG5ld0VuZCA9IG5ld1RvcE9m
U3RhY2sgLSAxOworICAgIGlmIChuZXdFbmQgPj0gbV9lbmQpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBncm93U2xvd0Nhc2UobmV3VG9wT2ZTdGFjayk7Cit9CisKK2lubGluZSB2
b2lkIEpTU3RhY2s6OnNldENMb29wU3RhY2tMaW1pdChSZWdpc3RlciogbmV3VG9wT2ZTdGFjaykK
K3sKKyAgICBSZWdpc3RlciogbmV3RW5kID0gbmV3VG9wT2ZTdGFjayAtIDE7CisgICAgbV9lbmQg
PSBuZXdFbmQ7CisgICAgbV92bS5zZXRDTG9vcFN0YWNrTGltaXQobmV3VG9wT2ZTdGFjayk7Cit9
CisKKyNlbmRpZiAvLyAhRU5BQkxFKEpJVCkKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBKU1N0YWNrSW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ0xvb3BTdGFja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ0xvb3BTdGFja0lubGluZXMuaAkocmV2aXNpb24gMjAzMDY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NMb29wU3RhY2tJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDQxICsyMywzNSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8K
IAotI2lmbmRlZiBKU1N0YWNrSW5saW5lc19oCi0jZGVmaW5lIEpTU3RhY2tJbmxpbmVzX2gKKyNw
cmFnbWEgb25jZQogCisjaWYgIUVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDTG9vcFN0YWNrLmgi
CiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVk
ZSAiSlNTdGFjay5oIgogI2luY2x1ZGUgIlZNLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxp
bmUgYm9vbCBKU1N0YWNrOjplbnN1cmVDYXBhY2l0eUZvcihSZWdpc3RlciogbmV3VG9wT2ZTdGFj
aykKK2lubGluZSBib29sIENMb29wU3RhY2s6OmVuc3VyZUNhcGFjaXR5Rm9yKFJlZ2lzdGVyKiBu
ZXdUb3BPZlN0YWNrKQogewotI2lmICFFTkFCTEUoSklUKQogICAgIHJldHVybiBncm93KG5ld1Rv
cE9mU3RhY2spOwotI2Vsc2UKLSAgICBBU1NFUlQod3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkuaXNH
cm93aW5nRG93bndhcmQoKSk7Ci0gICAgcmV0dXJuIG5ld1RvcE9mU3RhY2sgPj0gbV92bS5vc1N0
YWNrTGltaXRXaXRoUmVzZXJ2ZSgpOwotI2VuZGlmCiB9CiAKLSNpZiAhRU5BQkxFKEpJVCkKLQot
aW5saW5lIFJlZ2lzdGVyKiBKU1N0YWNrOjp0b3BPZkZyYW1lRm9yKENhbGxGcmFtZSogZnJhbWUp
CitpbmxpbmUgUmVnaXN0ZXIqIENMb29wU3RhY2s6OnRvcE9mRnJhbWVGb3IoQ2FsbEZyYW1lKiBm
cmFtZSkKIHsKICAgICBpZiAoVU5MSUtFTFkoIWZyYW1lKSkKICAgICAgICAgcmV0dXJuIGJhc2VP
ZlN0YWNrKCk7CiAgICAgcmV0dXJuIGZyYW1lLT50b3BPZkZyYW1lKCkgLSAxOwogfQogCi1pbmxp
bmUgUmVnaXN0ZXIqIEpTU3RhY2s6OnRvcE9mU3RhY2soKQoraW5saW5lIFJlZ2lzdGVyKiBDTG9v
cFN0YWNrOjp0b3BPZlN0YWNrKCkKIHsKICAgICByZXR1cm4gdG9wT2ZGcmFtZUZvcihtX3RvcENh
bGxGcmFtZSk7CiB9CiAKLWlubGluZSB2b2lkIEpTU3RhY2s6OnNocmluayhSZWdpc3RlciogbmV3
VG9wT2ZTdGFjaykKK2lubGluZSB2b2lkIENMb29wU3RhY2s6OnNocmluayhSZWdpc3RlciogbmV3
VG9wT2ZTdGFjaykKIHsKICAgICBSZWdpc3RlciogbmV3RW5kID0gbmV3VG9wT2ZTdGFjayAtIDE7
CiAgICAgaWYgKG5ld0VuZCA+PSBtX2VuZCkKQEAgLTY2LDEzICs2MCwxMyBAQCBpbmxpbmUgdm9p
ZCBKU1N0YWNrOjpzaHJpbmsoUmVnaXN0ZXIqIG5lCiAgICAgLy8gTm90ZTogQ2xhbmcgY29tcGxh
aW5zIG9mIGFuIHVucmVzb2x2ZWQgbGlua2FnZSB0byBtYXhFeGNlc3NDYXBhY2l0eSBpZgogICAg
IC8vIGludm9rZSBzdGQ6Om1heCgpIHdpdGggaXQgYXMgYW4gYXJndW1lbnQuIFRvIHdvcmsgYXJv
dW5kIHRoaXMsIHdlIGZpcnN0CiAgICAgLy8gYXNzaWduIHRoZSBjb25zdGFudCB0byBhIGxvY2Fs
IHZhcmlhYmxlLCBhbmQgdXNlIHRoZSBsb2NhbCBpbnN0ZWFkLgotICAgIHB0cmRpZmZfdCBtYXhF
eGNlc3NDYXBhY2l0eSA9IEpTU3RhY2s6Om1heEV4Y2Vzc0NhcGFjaXR5OworICAgIHB0cmRpZmZf
dCBtYXhFeGNlc3NDYXBhY2l0eSA9IENMb29wU3RhY2s6Om1heEV4Y2Vzc0NhcGFjaXR5OwogICAg
IHB0cmRpZmZfdCBtYXhFeGNlc3NJblJlZ2lzdGVycyA9IHN0ZDo6bWF4KG1heEV4Y2Vzc0NhcGFj
aXR5LCBtX3Jlc2VydmVkWm9uZVNpemVJblJlZ2lzdGVycyk7CiAgICAgaWYgKG1fZW5kID09IGJh
c2VPZlN0YWNrKCkgJiYgKGhpZ2hBZGRyZXNzKCkgLSBtX2NvbW1pdFRvcCkgPj0gbWF4RXhjZXNz
SW5SZWdpc3RlcnMpCiAgICAgICAgIHJlbGVhc2VFeGNlc3NDYXBhY2l0eSgpOwogfQogCi1pbmxp
bmUgYm9vbCBKU1N0YWNrOjpncm93KFJlZ2lzdGVyKiBuZXdUb3BPZlN0YWNrKQoraW5saW5lIGJv
b2wgQ0xvb3BTdGFjazo6Z3JvdyhSZWdpc3RlciogbmV3VG9wT2ZTdGFjaykKIHsKICAgICBSZWdp
c3RlciogbmV3RW5kID0gbmV3VG9wT2ZTdGFjayAtIDE7CiAgICAgaWYgKG5ld0VuZCA+PSBtX2Vu
ZCkKQEAgLTgwLDE1ICs3NCwxMyBAQCBpbmxpbmUgYm9vbCBKU1N0YWNrOjpncm93KFJlZ2lzdGVy
KiBuZXdUCiAgICAgcmV0dXJuIGdyb3dTbG93Q2FzZShuZXdUb3BPZlN0YWNrKTsKIH0KIAotaW5s
aW5lIHZvaWQgSlNTdGFjazo6c2V0Q0xvb3BTdGFja0xpbWl0KFJlZ2lzdGVyKiBuZXdUb3BPZlN0
YWNrKQoraW5saW5lIHZvaWQgQ0xvb3BTdGFjazo6c2V0Q0xvb3BTdGFja0xpbWl0KFJlZ2lzdGVy
KiBuZXdUb3BPZlN0YWNrKQogewogICAgIFJlZ2lzdGVyKiBuZXdFbmQgPSBuZXdUb3BPZlN0YWNr
IC0gMTsKICAgICBtX2VuZCA9IG5ld0VuZDsKICAgICBtX3ZtLnNldENMb29wU3RhY2tMaW1pdChu
ZXdUb3BPZlN0YWNrKTsKIH0KIAotI2VuZGlmIC8vICFFTkFCTEUoSklUKQotCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAotI2VuZGlmIC8vIEpTU3RhY2tJbmxpbmVzX2gKKyNlbmRpZiAvLyAhRU5BQkxF
KEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxs
RnJhbWUuY3BwCShyZXZpc2lvbiAyMDMwNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzLTIwMTQsIDIwMTYgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xMDMsMTQgKzEwMyw2IEBAIFNVUFBSRVNTX0FTQU4gQ2FsbFNpdGVJbmRleCBDYWxsRnJh
bWU6OnUKICAgICByZXR1cm4gQ2FsbFNpdGVJbmRleCh1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cygp
KTsKIH0KIAotI2lmbmRlZiBOREVCVUcKLUpTU3RhY2sqIENhbGxGcmFtZTo6c3RhY2soKQotewot
ICAgIHJldHVybiAmaW50ZXJwcmV0ZXIoKS0+c3RhY2soKTsKLX0KLQotI2VuZGlmCi0KICNpZiBV
U0UoSlNWQUxVRTMyXzY0KQogSW5zdHJ1Y3Rpb24qIENhbGxGcmFtZTo6Y3VycmVudFZQQygpIGNv
bnN0CiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5oCShyZXZpc2lvbiAyMDMwNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3MCw5ICsyNzAsNiBAQCBuYW1l
c3BhY2UgSlNDICB7CiAKICAgICBwcml2YXRlOgogCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICBK
U1N0YWNrKiBzdGFjaygpOwotI2VuZGlmCiAgICAgICAgIEV4ZWNTdGF0ZSgpOwogICAgICAgICB+
RXhlY1N0YXRlKCk7CiAKQEAgLTMwMSwxMCArMjk4LDYgQEAgbmFtZXNwYWNlIEpTQyAgewogICAg
ICAgICBDYWxsZXJGcmFtZUFuZFBDJiBjYWxsZXJGcmFtZUFuZFBDKCkgeyByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8Q2FsbGVyRnJhbWVBbmRQQyo+KHRoaXMpOyB9CiAgICAgICAgIGNvbnN0IENh
bGxlckZyYW1lQW5kUEMmIGNhbGxlckZyYW1lQW5kUEMoKSBjb25zdCB7IHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBDYWxsZXJGcmFtZUFuZFBDKj4odGhpcyk7IH0KICAgICAgICAgU1VQ
UFJFU1NfQVNBTiBjb25zdCBDYWxsZXJGcmFtZUFuZFBDJiB1bnNhZmVDYWxsZXJGcmFtZUFuZFBD
KCkgY29uc3QgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2FsbGVyRnJhbWVBbmRQ
Qyo+KHRoaXMpOyB9Ci0KLSNpZiAhRU5BQkxFKEpJVCkKLSAgICAgICAgZnJpZW5kIGNsYXNzIEpT
U3RhY2s7Ci0jZW5kaWYKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2
aXNpb24gMjAzMDY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNiBAQAogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUg
IkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKLSNpbmNsdWRlICJKU1N0YWNrSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRlICJM
TEludENMb29wLmgiCkBAIC0yMzUsMjIgKzIzNCwyMiBAQCB1bnNpZ25lZCBzaXplT2ZWYXJhcmdz
KENhbGxGcmFtZSogY2FsbEZyCiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KIAotdW5zaWduZWQgc2l6
ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50cyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNTdGFjayog
c3RhY2ssIHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzKQordW5zaWduZWQgc2l6ZUZyYW1lRm9y
Rm9yd2FyZEFyZ3VtZW50cyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgVk0mIHZtLCB1bnNpZ25lZCBu
dW1Vc2VkU3RhY2tTbG90cykKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKTsKICAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gY2FsbGVlRnJhbWVG
b3JWYXJhcmdzKGNhbGxGcmFtZSwgbnVtVXNlZFN0YWNrU2xvdHMsIGxlbmd0aCArIDEpOwotICAg
IGlmICghc3RhY2stPmVuc3VyZUNhcGFjaXR5Rm9yKGNhbGxlZUZyYW1lLT5yZWdpc3RlcnMoKSkp
CisgICAgaWYgKFVOTElLRUxZKCF2bS5lbnN1cmVTdGFja0NhcGFjaXR5Rm9yKGNhbGxlZUZyYW1l
LT5yZWdpc3RlcnMoKSkpKQogICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJh
bWUpOwogCiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KIAotdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFy
YXJncyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNTdGFjayogc3RhY2ssIEpTVmFsdWUgYXJndW1l
bnRzLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cywgdWludDMyX3QgZmlyc3RWYXJBcmdPZmZz
ZXQpCit1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBW
TSYgdm0sIEpTVmFsdWUgYXJndW1lbnRzLCB1bnNpZ25lZCBudW1Vc2VkU3RhY2tTbG90cywgdWlu
dDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpCiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc2l6ZU9m
VmFyYXJncyhjYWxsRnJhbWUsIGFyZ3VtZW50cywgZmlyc3RWYXJBcmdPZmZzZXQpOwogICAgIAog
ICAgIENhbGxGcmFtZSogY2FsbGVlRnJhbWUgPSBjYWxsZWVGcmFtZUZvclZhcmFyZ3MoY2FsbEZy
YW1lLCBudW1Vc2VkU3RhY2tTbG90cywgbGVuZ3RoICsgMSk7Ci0gICAgaWYgKGxlbmd0aCA+IG1h
eEFyZ3VtZW50cyB8fCAhc3RhY2stPmVuc3VyZUNhcGFjaXR5Rm9yKGNhbGxlZUZyYW1lLT5yZWdp
c3RlcnMoKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkobGVuZ3RoID4gbWF4QXJndW1lbnRzIHx8ICF2
bS5lbnN1cmVTdGFja0NhcGFjaXR5Rm9yKGNhbGxlZUZyYW1lLT5yZWdpc3RlcnMoKSkpKSB7CiAg
ICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KQEAgLTMyMyw3ICszMjIsOSBAQCB2b2lkIHNldHVwRm9yd2FyZEFyZ3VtZW50
c0ZyYW1lQW5kU2V0VGhpCiAKIEludGVycHJldGVyOjpJbnRlcnByZXRlcihWTSYgdm0pCiAgICAg
OiBtX3ZtKHZtKQotICAgICwgbV9zdGFjayh2bSkKKyNpZiAhRU5BQkxFKEpJVCkKKyAgICAsIG1f
Y2xvb3BTdGFjayh2bSkKKyNlbmRpZgogICAgICwgbV9lcnJvckhhbmRsaW5nTW9kZVJlZW50cnko
MCkKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgLCBtX2luaXRpYWxpemVkKGZhbHNlKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJ
KHJldmlzaW9uIDIwMzA2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiSlNTdGFjay5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUgIlNv
dXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKQEAgLTQyLDYgKzQx
LDExIEBACiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKKyNpZiAhRU5BQkxFKEpJVCkKKyNpbmNsdWRlICJDTG9vcFN0YWNrLmgi
CisjZW5kaWYKKworCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIENvZGVCbG9jazsKQEAg
LTE4MCw3ICsxODQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQg
aW5pdGlhbGl6ZSgpOwogCi0gICAgICAgIEpTU3RhY2smIHN0YWNrKCkgeyByZXR1cm4gbV9zdGFj
azsgfQorI2lmICFFTkFCTEUoSklUKQorICAgICAgICBDTG9vcFN0YWNrJiBjbG9vcFN0YWNrKCkg
eyByZXR1cm4gbV9jbG9vcFN0YWNrOyB9CisjZW5kaWYKICAgICAgICAgCiAgICAgICAgIE9wY29k
ZSBnZXRPcGNvZGUoT3Bjb2RlSUQgaWQpCiAgICAgICAgIHsKQEAgLTI0MSw3ICsyNDcsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBpc0NhbGxCeXRlY29kZShPcGNvZGUgb3Bjb2Rl
KSB7IHJldHVybiBvcGNvZGUgPT0gZ2V0T3Bjb2RlKG9wX2NhbGwpIHx8IG9wY29kZSA9PSBnZXRP
cGNvZGUob3BfY29uc3RydWN0KSB8fCBvcGNvZGUgPT0gZ2V0T3Bjb2RlKG9wX2NhbGxfZXZhbCkg
fHwgb3Bjb2RlID09IGdldE9wY29kZShvcF90YWlsX2NhbGwpOyB9CiAKICAgICAgICAgVk0mIG1f
dm07Ci0gICAgICAgIEpTU3RhY2sgbV9zdGFjazsKKyNpZiAhRU5BQkxFKEpJVCkKKyAgICAgICAg
Q0xvb3BTdGFjayBtX2Nsb29wU3RhY2s7CisjZW5kaWYKICAgICAgICAgaW50IG1fZXJyb3JIYW5k
bGluZ01vZGVSZWVudHJ5OwogICAgICAgICAKICNpZiBFTkFCTEUoQ09NUFVURURfR09UT19PUENP
REVTKQpAQCAtMjczLDggKzI4MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgdW5zaWduZWQg
c2l6ZU9mVmFyYXJncyhDYWxsRnJhbWUqIGV4ZWMsIEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJf
dCBmaXJzdFZhckFyZ09mZnNldCk7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heEFyZ3Vt
ZW50cyA9IDB4MTAwMDA7Ci0gICAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yVmFyYXJncyhDYWxsRnJh
bWUqIGV4ZWMsIEpTU3RhY2sqLCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWduZWQgbnVtVXNlZFN0
YWNrU2xvdHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzaXpl
RnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzKENhbGxGcmFtZSogZXhlYywgSlNTdGFjayosIHVuc2ln
bmVkIG51bVVzZWRTdGFja1Nsb3RzKTsKKyAgICB1bnNpZ25lZCBzaXplRnJhbWVGb3JWYXJhcmdz
KENhbGxGcmFtZSogZXhlYywgVk0mLCBKU1ZhbHVlIGFyZ3VtZW50cywgdW5zaWduZWQgbnVtVXNl
ZFN0YWNrU2xvdHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAgICB1bnNpZ25lZCBz
aXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzKENhbGxGcmFtZSogZXhlYywgVk0mLCB1bnNpZ25l
ZCBudW1Vc2VkU3RhY2tTbG90cyk7CiAgICAgdm9pZCBsb2FkVmFyYXJncyhDYWxsRnJhbWUqIGV4
ZWNDYWxsZXIsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIHNvdXJj
ZSwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwogICAgIHZvaWQgc2V0dXBWYXJh
cmdzRnJhbWUoQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZWUsIEpT
VmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgdWludDMyX3QgbGVu
Z3RoKTsKICAgICB2b2lkIHNldHVwVmFyYXJnc0ZyYW1lQW5kU2V0VGhpcyhDYWxsRnJhbWUqIGV4
ZWNDYWxsZXIsIENhbGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFs
dWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgdWludDMyX3QgbGVuZ3Ro
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5j
cHAJKHJldmlzaW9uIDIwMzA2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9KU1N0YWNrLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDE4NCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTU3RhY2tJbmxpbmVzLmgiCi0KLSNpbmNsdWRlICJDb25z
ZXJ2YXRpdmVSb290cy5oIgotI2luY2x1ZGUgIkludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiSlND
SW5saW5lcy5oIgotI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNsdWRlIDx3dGYvTG9jay5oPgot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotI2lmICFFTkFCTEUoSklUKQotc3RhdGljIHNpemVfdCBjb21t
aXR0ZWRCeXRlc0NvdW50ID0gMDsKLQotc3RhdGljIHNpemVfdCBjb21taXRTaXplKCkKLXsKLSAg
ICBzdGF0aWMgc2l6ZV90IHNpemUgPSBzdGQ6Om1heDxzaXplX3Q+KDE2ICogMTAyNCwgcGFnZVNp
emUoKSk7Ci0gICAgcmV0dXJuIHNpemU7Ci19Ci0KLXN0YXRpYyBTdGF0aWNMb2NrIHN0YWNrU3Rh
dGlzdGljc011dGV4OwotI2VuZGlmIC8vICFFTkFCTEUoSklUKQotCi1KU1N0YWNrOjpKU1N0YWNr
KFZNJiB2bSkKLSAgICA6IG1fdm0odm0pCi0gICAgLCBtX3RvcENhbGxGcmFtZSh2bS50b3BDYWxs
RnJhbWUpCi0jaWYgIUVOQUJMRShKSVQpCi0gICAgLCBtX2VuZCgwKQotICAgICwgbV9yZXNlcnZl
ZFpvbmVTaXplSW5SZWdpc3RlcnMoMCkKLSNlbmRpZgotewotI2lmICFFTkFCTEUoSklUKQotICAg
IHNpemVfdCBjYXBhY2l0eSA9IE9wdGlvbnM6Om1heFBlclRocmVhZFN0YWNrVXNhZ2UoKTsKLSAg
ICBBU1NFUlQoY2FwYWNpdHkgJiYgaXNQYWdlQWxpZ25lZChjYXBhY2l0eSkpOwotCi0gICAgbV9y
ZXNlcnZhdGlvbiA9IFBhZ2VSZXNlcnZhdGlvbjo6cmVzZXJ2ZShXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2YoY29tbWl0U2l6ZSgpLCBjYXBhY2l0eSksIE9TQWxsb2NhdG9yOjpKU1ZNU3RhY2tQYWdl
cyk7Ci0gICAgc2V0Q0xvb3BTdGFja0xpbWl0KGhpZ2hBZGRyZXNzKCkpOwotICAgIG1fY29tbWl0
VG9wID0gaGlnaEFkZHJlc3MoKTsKLSAgICAKLSAgICBtX2xhc3RTdGFja1RvcCA9IGJhc2VPZlN0
YWNrKCk7Ci0jZW5kaWYgLy8gIUVOQUJMRShKSVQpCi0KLSAgICBtX3RvcENhbGxGcmFtZSA9IDA7
Ci19Ci0KLSNpZiAhRU5BQkxFKEpJVCkKLUpTU3RhY2s6On5KU1N0YWNrKCkKLXsKLSAgICBwdHJk
aWZmX3Qgc2l6ZVRvRGVjb21taXQgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihoaWdoQWRkcmVz
cygpKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fY29tbWl0VG9wKTsKLSAgICBtX3Jlc2Vy
dmF0aW9uLmRlY29tbWl0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fY29tbWl0VG9wKSwgc2l6
ZVRvRGVjb21taXQpOwotICAgIGFkZFRvQ29tbWl0dGVkQnl0ZUNvdW50KC1zaXplVG9EZWNvbW1p
dCk7Ci0gICAgbV9yZXNlcnZhdGlvbi5kZWFsbG9jYXRlKCk7Ci19Ci0KLWJvb2wgSlNTdGFjazo6
Z3Jvd1Nsb3dDYXNlKFJlZ2lzdGVyKiBuZXdUb3BPZlN0YWNrKQotewotICAgIFJlZ2lzdGVyKiBu
ZXdUb3BPZlN0YWNrV2l0aFJlc2VydmVkWm9uZSA9IG5ld1RvcE9mU3RhY2sgLSBtX3Jlc2VydmVk
Wm9uZVNpemVJblJlZ2lzdGVyczsKLQotICAgIC8vIElmIHdlIGhhdmUgYWxyZWFkeSBjb21taXR0
ZWQgZW5vdWdoIG1lbW9yeSB0byBzYXRpc2Z5IHRoaXMgcmVxdWVzdCwKLSAgICAvLyBqdXN0IHVw
ZGF0ZSB0aGUgZW5kIHBvaW50ZXIgYW5kIHJldHVybi4KLSAgICBpZiAobmV3VG9wT2ZTdGFja1dp
dGhSZXNlcnZlZFpvbmUgPj0gbV9jb21taXRUb3ApIHsKLSAgICAgICAgc2V0Q0xvb3BTdGFja0xp
bWl0KG5ld1RvcE9mU3RhY2spOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAv
LyBDb21wdXRlIHRoZSBjaHVuayBzaXplIG9mIGFkZGl0aW9uYWwgbWVtb3J5IHRvIGNvbW1pdCwg
YW5kIHNlZSBpZiB3ZQotICAgIC8vIGhhdmUgaXQgaXMgc3RpbGwgd2l0aGluIG91ciBidWRnZXQu
IElmIG5vdCwgd2UnbGwgZmFpbCB0byBncm93IGFuZAotICAgIC8vIHJldHVybiBmYWxzZS4KLSAg
ICBwdHJkaWZmX3QgZGVsdGEgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtX2NvbW1pdFRvcCkg
LSByZWludGVycHJldF9jYXN0PGNoYXIqPihuZXdUb3BPZlN0YWNrV2l0aFJlc2VydmVkWm9uZSk7
Ci0gICAgZGVsdGEgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoY29tbWl0U2l6ZSgpLCBkZWx0
YSk7Ci0gICAgUmVnaXN0ZXIqIG5ld0NvbW1pdFRvcCA9IG1fY29tbWl0VG9wIC0gKGRlbHRhIC8g
c2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgaWYgKG5ld0NvbW1pdFRvcCA8IHJlc2VydmF0aW9uVG9w
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE90aGVyd2lzZSwgdGhlIGdyb3d0
aCBpcyBzdGlsbCB3aXRoaW4gb3VyIGJ1ZGdldC4gQ29tbWl0IGl0IGFuZCByZXR1cm4gdHJ1ZS4K
LSAgICBtX3Jlc2VydmF0aW9uLmNvbW1pdChuZXdDb21taXRUb3AsIGRlbHRhKTsKLSAgICBhZGRU
b0NvbW1pdHRlZEJ5dGVDb3VudChkZWx0YSk7Ci0gICAgbV9jb21taXRUb3AgPSBuZXdDb21taXRU
b3A7Ci0gICAgc2V0Q0xvb3BTdGFja0xpbWl0KG5ld1RvcE9mU3RhY2spOwotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIEpTU3RhY2s6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZh
dGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cywgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJS
b3V0aW5lcywgQ29kZUJsb2NrU2V0JiBjb2RlQmxvY2tzKQotewotICAgIGNvbnNlcnZhdGl2ZVJv
b3RzLmFkZCh0b3BPZlN0YWNrKCkgKyAxLCBoaWdoQWRkcmVzcygpLCBqaXRTdHViUm91dGluZXMs
IGNvZGVCbG9ja3MpOwotfQotCi12b2lkIEpTU3RhY2s6OnNhbml0aXplU3RhY2soKQotewotI2lm
ICFBU0FOX0VOQUJMRUQKLSAgICBBU1NFUlQodG9wT2ZTdGFjaygpIDw9IGJhc2VPZlN0YWNrKCkp
OwotICAgIAotICAgIGlmIChtX2xhc3RTdGFja1RvcCA8IHRvcE9mU3RhY2soKSkgewotICAgICAg
ICBjaGFyKiBiZWdpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fbGFzdFN0YWNrVG9wICsg
MSk7Ci0gICAgICAgIGNoYXIqIGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRvcE9mU3Rh
Y2soKSArIDEpOwotICAgICAgICBtZW1zZXQoYmVnaW4sIDAsIGVuZCAtIGJlZ2luKTsKLSAgICB9
Ci0gICAgCi0gICAgbV9sYXN0U3RhY2tUb3AgPSB0b3BPZlN0YWNrKCk7Ci0jZW5kaWYKLX0KLQot
dm9pZCBKU1N0YWNrOjpyZWxlYXNlRXhjZXNzQ2FwYWNpdHkoKQotewotICAgIFJlZ2lzdGVyKiBo
aWdoQWRkcmVzc1dpdGhSZXNlcnZlZFpvbmUgPSBoaWdoQWRkcmVzcygpIC0gbV9yZXNlcnZlZFpv
bmVTaXplSW5SZWdpc3RlcnM7Ci0gICAgcHRyZGlmZl90IGRlbHRhID0gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oaGlnaEFkZHJlc3NXaXRoUmVzZXJ2ZWRab25lKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KG1fY29tbWl0VG9wKTsKLSAgICBtX3Jlc2VydmF0aW9uLmRlY29tbWl0KG1fY29tbWl0
VG9wLCBkZWx0YSk7Ci0gICAgYWRkVG9Db21taXR0ZWRCeXRlQ291bnQoLWRlbHRhKTsKLSAgICBt
X2NvbW1pdFRvcCA9IGhpZ2hBZGRyZXNzV2l0aFJlc2VydmVkWm9uZTsKLX0KLQotdm9pZCBKU1N0
YWNrOjphZGRUb0NvbW1pdHRlZEJ5dGVDb3VudChsb25nIGJ5dGVDb3VudCkKLXsKLSAgICBMb2Nr
SG9sZGVyIGxvY2tlcihzdGFja1N0YXRpc3RpY3NNdXRleCk7Ci0gICAgQVNTRVJUKHN0YXRpY19j
YXN0PGxvbmc+KGNvbW1pdHRlZEJ5dGVzQ291bnQpICsgYnl0ZUNvdW50ID4gLTEpOwotICAgIGNv
bW1pdHRlZEJ5dGVzQ291bnQgKz0gYnl0ZUNvdW50OwotfQotCi12b2lkIEpTU3RhY2s6OnNldFJl
c2VydmVkWm9uZVNpemUoc2l6ZV90IHJlc2VydmVkWm9uZVNpemUpCi17Ci0gICAgbV9yZXNlcnZl
ZFpvbmVTaXplSW5SZWdpc3RlcnMgPSByZXNlcnZlZFpvbmVTaXplIC8gc2l6ZW9mKFJlZ2lzdGVy
KTsKLSAgICBpZiAobV9jb21taXRUb3AgPj0gKG1fZW5kICsgMSkgLSBtX3Jlc2VydmVkWm9uZVNp
emVJblJlZ2lzdGVycykKLSAgICAgICAgZ3Jvd1Nsb3dDYXNlKG1fZW5kICsgMSk7Ci19Ci0jZW5k
aWYgLy8gIUVOQUJMRShKSVQpCi0KLSNpZiBFTkFCTEUoSklUKQotUmVnaXN0ZXIqIEpTU3RhY2s6
Omxvd0FkZHJlc3MoKSBjb25zdAotewotICAgIEFTU0VSVCh3dGZUaHJlYWREYXRhKCkuc3RhY2so
KS5pc0dyb3dpbmdEb3dud2FyZCgpKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSZWdp
c3Rlcio+KG1fdm0ub3NTdGFja0xpbWl0V2l0aFJlc2VydmUoKSk7Ci19Ci0KLVJlZ2lzdGVyKiBK
U1N0YWNrOjpoaWdoQWRkcmVzcygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHd0ZlRocmVhZERhdGEo
KS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253YXJkKCkpOwotICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PFJlZ2lzdGVyKj4od3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkub3JpZ2luKCkpOwotfQotI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCi0KLXNpemVfdCBKU1N0YWNrOjpjb21taXR0ZWRCeXRlQ291bnQo
KQotewotI2lmICFFTkFCTEUoSklUKQotICAgIExvY2tIb2xkZXIgbG9ja2VyKHN0YWNrU3RhdGlz
dGljc011dGV4KTsKLSAgICByZXR1cm4gY29tbWl0dGVkQnl0ZXNDb3VudDsKLSNlbHNlCi0gICAg
Ly8gV2hlbiB1c2luZyB0aGUgQyBzdGFjaywgd2UgZG9uJ3Qga25vdyBob3cgbWFueSBzdGFjayBw
YWdlcyBhcmUgYWN0dWFsbHkKLSAgICAvLyBjb21taXR0ZWQuIFNvLCB3ZSB1c2UgdGhlIGN1cnJl
bnQgc3RhY2sgdXNhZ2UgYXMgYW4gZXN0aW1hdGUuCi0gICAgQVNTRVJUKHd0ZlRocmVhZERhdGEo
KS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253YXJkKCkpOwotICAgIGludDhfdCogY3VycmVudCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8aW50OF90Kj4oJmN1cnJlbnQpOwotICAgIGludDhfdCogaGlnaCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8aW50OF90Kj4od3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkub3JpZ2luKCkp
OwotICAgIHJldHVybiBoaWdoIC0gY3VycmVudDsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9KU1N0YWNrLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEg
KzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suaAkocmV2aXNpb24gMjAz
MDY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suaAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDEyNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MDksIDIwMTMtMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEpTU3RhY2tf
aAotI2RlZmluZSBKU1N0YWNrX2gKLQotI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCi0jaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlvbi5oPgotI2lu
Y2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLSAgICBjbGFzcyBDb2Rl
QmxvY2tTZXQ7Ci0gICAgY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7Ci0gICAgY2xhc3MgSklUU3R1
YlJvdXRpbmVTZXQ7Ci0gICAgY2xhc3MgVk07Ci0gICAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwotCi0gICAgY2xhc3MgSlNTdGFjayB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEpTU3RhY2spOwotICAgIHB1YmxpYzoKLSAgICAgICAgLy8gQWxsb3cgOGsgb2YgZXhjZXNzIHJl
Z2lzdGVycyBiZWZvcmUgd2Ugc3RhcnQgdHJ5aW5nIHRvIHJlYXAgdGhlIHN0YWNrCi0gICAgICAg
IHN0YXRpYyBjb25zdCBwdHJkaWZmX3QgbWF4RXhjZXNzQ2FwYWNpdHkgPSA4ICogMTAyNDsKLQot
ICAgICAgICBKU1N0YWNrKFZNJik7Ci0gICAgICAgIAotICAgICAgICBib29sIGVuc3VyZUNhcGFj
aXR5Rm9yKFJlZ2lzdGVyKiBuZXdUb3BPZlN0YWNrKTsKLQotICAgICAgICBib29sIGNvbnRhaW5z
QWRkcmVzcyhSZWdpc3RlciogYWRkcmVzcykgeyByZXR1cm4gKGxvd0FkZHJlc3MoKSA8PSBhZGRy
ZXNzICYmIGFkZHJlc3MgPCBoaWdoQWRkcmVzcygpKTsgfQotICAgICAgICBzdGF0aWMgc2l6ZV90
IGNvbW1pdHRlZEJ5dGVDb3VudCgpOwotCi0jaWYgIUVOQUJMRShKSVQpCi0gICAgICAgIH5KU1N0
YWNrKCk7Ci0KLSAgICAgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRp
dmVSb290cyYsIEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0Jik7Ci0gICAgICAgIHZv
aWQgc2FuaXRpemVTdGFjaygpOwotCi0gICAgICAgIFJlZ2lzdGVyKiBiYXNlT2ZTdGFjaygpIGNv
bnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoaWdoQWRkcmVzcygpIC0gMTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gaGlnaEFkZHJl
c3MoKSAtIGxvd0FkZHJlc3MoKTsgfQotCi0gICAgICAgIHZvaWQgc2V0UmVzZXJ2ZWRab25lU2l6
ZShzaXplX3QpOwotCi0gICAgICAgIGlubGluZSBSZWdpc3RlciogdG9wT2ZTdGFjaygpOwotI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCi0KLSAgICBwcml2YXRlOgotCi0jaWYgIUVOQUJMRShKSVQpCi0g
ICAgICAgIFJlZ2lzdGVyKiBsb3dBZGRyZXNzKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIG1fZW5kICsgMTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZ2lzdGVyKiBoaWdo
QWRkcmVzcygpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0X3B0cjxSZWdpc3Rlcio+KHN0YXRpY19jYXN0PGNoYXIqPihtX3Jlc2VydmF0aW9uLmJh
c2UoKSkgKyBtX3Jlc2VydmF0aW9uLnNpemUoKSk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAg
IFJlZ2lzdGVyKiBsb3dBZGRyZXNzKCkgY29uc3Q7Ci0gICAgICAgIFJlZ2lzdGVyKiBoaWdoQWRk
cmVzcygpIGNvbnN0OwotI2VuZGlmIC8vICFFTkFCTEUoSklUKQotCi0jaWYgIUVOQUJMRShKSVQp
Ci0gICAgICAgIGlubGluZSBSZWdpc3RlciogdG9wT2ZGcmFtZUZvcihDYWxsRnJhbWUqKTsKLQot
ICAgICAgICBSZWdpc3RlciogcmVzZXJ2YXRpb25Ub3AoKSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICBjaGFyKiByZXNlcnZhdGlvblRvcCA9IHN0YXRpY19jYXN0PGNoYXIqPihtX3Jlc2Vy
dmF0aW9uLmJhc2UoKSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdF9wdHI8
UmVnaXN0ZXIqPihyZXNlcnZhdGlvblRvcCk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGdy
b3coUmVnaXN0ZXIqIG5ld1RvcE9mU3RhY2spOwotICAgICAgICBib29sIGdyb3dTbG93Q2FzZShS
ZWdpc3RlciogbmV3VG9wT2ZTdGFjayk7Ci0gICAgICAgIHZvaWQgc2hyaW5rKFJlZ2lzdGVyKiBu
ZXdUb3BPZlN0YWNrKTsKLSAgICAgICAgdm9pZCByZWxlYXNlRXhjZXNzQ2FwYWNpdHkoKTsKLSAg
ICAgICAgdm9pZCBhZGRUb0NvbW1pdHRlZEJ5dGVDb3VudChsb25nKTsKLQotICAgICAgICB2b2lk
IHNldENMb29wU3RhY2tMaW1pdChSZWdpc3RlciogbmV3VG9wT2ZTdGFjayk7Ci0jZW5kaWYgLy8g
IUVOQUJMRShKSVQpCi0KLSAgICAgICAgVk0mIG1fdm07Ci0gICAgICAgIENhbGxGcmFtZSomIG1f
dG9wQ2FsbEZyYW1lOwotI2lmICFFTkFCTEUoSklUKQotICAgICAgICBSZWdpc3RlciogbV9lbmQ7
Ci0gICAgICAgIFJlZ2lzdGVyKiBtX2NvbW1pdFRvcDsKLSAgICAgICAgUGFnZVJlc2VydmF0aW9u
IG1fcmVzZXJ2YXRpb247Ci0gICAgICAgIFJlZ2lzdGVyKiBtX2xhc3RTdGFja1RvcDsKLSAgICAg
ICAgcHRyZGlmZl90IG1fcmVzZXJ2ZWRab25lU2l6ZUluUmVnaXN0ZXJzOwotI2VuZGlmIC8vICFF
TkFCTEUoSklUKQotCi0gICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBKU1N0YWNrX2gKClBy
b3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0
YWNrLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5h
dGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFja0lubGluZXMuaAkocmV2aXNpb24g
MjAzMDY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2tJbmxp
bmVzLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBKU1N0YWNrSW5s
aW5lc19oCi0jZGVmaW5lIEpTU3RhY2tJbmxpbmVzX2gKLQotI2luY2x1ZGUgIkNhbGxGcmFtZS5o
IgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkpTU3RhY2suaCIKLSNpbmNsdWRl
ICJWTS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIGJvb2wgSlNTdGFjazo6ZW5zdXJl
Q2FwYWNpdHlGb3IoUmVnaXN0ZXIqIG5ld1RvcE9mU3RhY2spCi17Ci0jaWYgIUVOQUJMRShKSVQp
Ci0gICAgcmV0dXJuIGdyb3cobmV3VG9wT2ZTdGFjayk7Ci0jZWxzZQotICAgIEFTU0VSVCh3dGZU
aHJlYWREYXRhKCkuc3RhY2soKS5pc0dyb3dpbmdEb3dud2FyZCgpKTsKLSAgICByZXR1cm4gbmV3
VG9wT2ZTdGFjayA+PSBtX3ZtLm9zU3RhY2tMaW1pdFdpdGhSZXNlcnZlKCk7Ci0jZW5kaWYKLX0K
LQotI2lmICFFTkFCTEUoSklUKQotCi1pbmxpbmUgUmVnaXN0ZXIqIEpTU3RhY2s6OnRvcE9mRnJh
bWVGb3IoQ2FsbEZyYW1lKiBmcmFtZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkoIWZyYW1lKSkKLSAg
ICAgICAgcmV0dXJuIGJhc2VPZlN0YWNrKCk7Ci0gICAgcmV0dXJuIGZyYW1lLT50b3BPZkZyYW1l
KCkgLSAxOwotfQotCi1pbmxpbmUgUmVnaXN0ZXIqIEpTU3RhY2s6OnRvcE9mU3RhY2soKQotewot
ICAgIHJldHVybiB0b3BPZkZyYW1lRm9yKG1fdG9wQ2FsbEZyYW1lKTsKLX0KLQotaW5saW5lIHZv
aWQgSlNTdGFjazo6c2hyaW5rKFJlZ2lzdGVyKiBuZXdUb3BPZlN0YWNrKQotewotICAgIFJlZ2lz
dGVyKiBuZXdFbmQgPSBuZXdUb3BPZlN0YWNrIC0gMTsKLSAgICBpZiAobmV3RW5kID49IG1fZW5k
KQotICAgICAgICByZXR1cm47Ci0gICAgc2V0Q0xvb3BTdGFja0xpbWl0KG5ld1RvcE9mU3RhY2sp
OwotICAgIC8vIE5vdGU6IENsYW5nIGNvbXBsYWlucyBvZiBhbiB1bnJlc29sdmVkIGxpbmthZ2Ug
dG8gbWF4RXhjZXNzQ2FwYWNpdHkgaWYKLSAgICAvLyBpbnZva2Ugc3RkOjptYXgoKSB3aXRoIGl0
IGFzIGFuIGFyZ3VtZW50LiBUbyB3b3JrIGFyb3VuZCB0aGlzLCB3ZSBmaXJzdAotICAgIC8vIGFz
c2lnbiB0aGUgY29uc3RhbnQgdG8gYSBsb2NhbCB2YXJpYWJsZSwgYW5kIHVzZSB0aGUgbG9jYWwg
aW5zdGVhZC4KLSAgICBwdHJkaWZmX3QgbWF4RXhjZXNzQ2FwYWNpdHkgPSBKU1N0YWNrOjptYXhF
eGNlc3NDYXBhY2l0eTsKLSAgICBwdHJkaWZmX3QgbWF4RXhjZXNzSW5SZWdpc3RlcnMgPSBzdGQ6
Om1heChtYXhFeGNlc3NDYXBhY2l0eSwgbV9yZXNlcnZlZFpvbmVTaXplSW5SZWdpc3RlcnMpOwot
ICAgIGlmIChtX2VuZCA9PSBiYXNlT2ZTdGFjaygpICYmIChoaWdoQWRkcmVzcygpIC0gbV9jb21t
aXRUb3ApID49IG1heEV4Y2Vzc0luUmVnaXN0ZXJzKQotICAgICAgICByZWxlYXNlRXhjZXNzQ2Fw
YWNpdHkoKTsKLX0KLQotaW5saW5lIGJvb2wgSlNTdGFjazo6Z3JvdyhSZWdpc3RlciogbmV3VG9w
T2ZTdGFjaykKLXsKLSAgICBSZWdpc3RlciogbmV3RW5kID0gbmV3VG9wT2ZTdGFjayAtIDE7Ci0g
ICAgaWYgKG5ld0VuZCA+PSBtX2VuZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJu
IGdyb3dTbG93Q2FzZShuZXdUb3BPZlN0YWNrKTsKLX0KLQotaW5saW5lIHZvaWQgSlNTdGFjazo6
c2V0Q0xvb3BTdGFja0xpbWl0KFJlZ2lzdGVyKiBuZXdUb3BPZlN0YWNrKQotewotICAgIFJlZ2lz
dGVyKiBuZXdFbmQgPSBuZXdUb3BPZlN0YWNrIC0gMTsKLSAgICBtX2VuZCA9IG5ld0VuZDsKLSAg
ICBtX3ZtLnNldENMb29wU3RhY2tMaW1pdChuZXdUb3BPZlN0YWNrKTsKLX0KLQotI2VuZGlmIC8v
ICFFTkFCTEUoSklUKQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEpTU3RhY2tJ
bmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zp
c2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9TdGFja1Zpc2l0b3IuY3BwCShyZXZpc2lvbiAyMDMwNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI0
LDYgKzQyNCw3IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpGcmFtZTo6ZHVtcChQcmludFN0cmUKIAog
ICAgICAgICAgICAgaW5kZW50LS07CiAgICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50KGluZGVu
dCwgInZtRW50cnlGcmFtZTogIiwgUmF3UG9pbnRlcih2bUVudHJ5RnJhbWUoKSksICJcbiIpOwog
ICAgICAgICBpbmRlbnQtLTsKICAgICB9CiAgICAgb3V0LnByaW50KGluZGVudCwgIn1cbiIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyMDMwNjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIElkZW50aWZpZXI7CiAgICAgY2xhc3MgSW50ZXJw
cmV0ZXI7CiAgICAgY2xhc3MgSlNTY29wZTsKLSAgICBjbGFzcyBKU1N0YWNrOwogICAgIGNsYXNz
IE1hcmtlZEFsbG9jYXRvcjsKICAgICBjbGFzcyBSZWdpc3RlcjsKICAgICBjbGFzcyBTdHJ1Y3R1
cmVDaGFpbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAkocmV2aXNpb24gMjAzMDY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNiBAQAogI2luY2x1ZGUg
IkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1l
bnQuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKLSNpbmNsdWRlICJK
U1N0YWNrSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAiT2Jq
ZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgpAQCAtMTI5
LDkgKzEyOCw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvd091dE9mQm8KIGlu
dDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjayhFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgSlNTdGFjayYgc3RhY2sgPSB2
bS0+aW50ZXJwcmV0ZXItPnN0YWNrKCk7CiAKLSAgICBpbnQzMl90IG1pc3NpbmdBcmdDb3VudCA9
IENvbW1vblNsb3dQYXRoczo6YXJpdHlDaGVja0ZvcihleGVjLCAmc3RhY2ssIENvZGVGb3JDYWxs
KTsKKyAgICBpbnQzMl90IG1pc3NpbmdBcmdDb3VudCA9IENvbW1vblNsb3dQYXRoczo6YXJpdHlD
aGVja0ZvcihleGVjLCAqdm0sIENvZGVGb3JDYWxsKTsKICAgICBpZiAobWlzc2luZ0FyZ0NvdW50
IDwgMCkgewogICAgICAgICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZtLT50b3BWTUVu
dHJ5RnJhbWU7CiAgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJG
cmFtZSh2bUVudHJ5RnJhbWUpOwpAQCAtMTQ1LDkgKzE0Myw4IEBAIGludDMyX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25DYWxsQXJpdHkKIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25D
b25zdHJ1Y3RBcml0eUNoZWNrKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKLSAgICBKU1N0YWNrJiBzdGFjayA9IHZtLT5pbnRlcnByZXRlci0+c3RhY2soKTsK
IAotICAgIGludDMyX3QgbWlzc2luZ0FyZ0NvdW50ID0gQ29tbW9uU2xvd1BhdGhzOjphcml0eUNo
ZWNrRm9yKGV4ZWMsICZzdGFjaywgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgaW50MzJfdCBtaXNz
aW5nQXJnQ291bnQgPSBDb21tb25TbG93UGF0aHM6OmFyaXR5Q2hlY2tGb3IoZXhlYywgKnZtLCBD
b2RlRm9yQ29uc3RydWN0KTsKICAgICBpZiAobWlzc2luZ0FyZ0NvdW50IDwgMCkgewogICAgICAg
ICBWTUVudHJ5RnJhbWUqIHZtRW50cnlGcmFtZSA9IHZtLT50b3BWTUVudHJ5RnJhbWU7CiAgICAg
ICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBleGVjLT5jYWxsZXJGcmFtZSh2bUVudHJ5RnJh
bWUpOwpAQCAtMTkyNCwxNyArMTkyMSwxNSBAQCBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uU2l6ZUZyYW1lCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Ci0gICAgSlNTdGFjayogc3RhY2sgPSAmZXhl
Yy0+aW50ZXJwcmV0ZXIoKS0+c3RhY2soKTsKLSAgICByZXR1cm4gc2l6ZUZyYW1lRm9yRm9yd2Fy
ZEFyZ3VtZW50cyhleGVjLCBzdGFjaywgbnVtVXNlZFN0YWNrU2xvdHMpOworICAgIHJldHVybiBz
aXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzKGV4ZWMsIHZtLCBudW1Vc2VkU3RhY2tTbG90cyk7
CiB9CiAKIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdz
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50cywgaW50MzJf
dCBudW1Vc2VkU3RhY2tTbG90cywgaW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKLSAgICBKU1N0YWNrKiBzdGFjayA9ICZleGVjLT5pbnRlcnByZXRlcigpLT5zdGFj
aygpOwogICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1
bWVudHMpOwotICAgIHJldHVybiBzaXplRnJhbWVGb3JWYXJhcmdzKGV4ZWMsIHN0YWNrLCBhcmd1
bWVudHMsIG51bVVzZWRTdGFja1Nsb3RzLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgcmV0dXJu
IHNpemVGcmFtZUZvclZhcmFyZ3MoZXhlYywgdm0sIGFyZ3VtZW50cywgbnVtVXNlZFN0YWNrU2xv
dHMsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKIH0KIAogQ2FsbEZyYW1lKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbEZy
YW1lKiBuZXdDYWxsRnJhbWUsIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90LCBpbnQzMl90IGxlbmd0
aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgJKHJl
dmlzaW9uIDIwMzA2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VK
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEwLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkpJVENvZGUuaCIK
ICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgotI2lu
Y2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHJldmlzaW9uIDIwMzA2
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAi
SklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCi0jaW5jbHVkZSAiSlNT
dGFjay5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZp
c2lvbiAyMDMwNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLCAyMDEyLCAyMDEzLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMi0yMDE0LCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0Fy
cmF5LmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCi0jaW5jbHVkZSAiSlNTdGFjay5o
IgogI2luY2x1ZGUgIk1hdGhDb21tb24uaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCShy
ZXZpc2lvbiAyMDMwNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZz
ZXRzRXh0cmFjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1
ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVSZWNvcmQuaCIKICNpbmNs
dWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJKU1N0cmlu
Zy5oIgogI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKICNpbmNsdWRlICJKdW1wVGFibGUuaCIKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAko
cmV2aXNpb24gMjAzMDY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgIkpT
Q0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0dlbmVyYXRvckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKLSNpbmNsdWRlICJKU1N0YWNrSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRl
ICJMTEludENvbW1vbi5oIgpAQCAtNDk4LDggKzQ5Nyw4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHN0YWNrX2NoZWNrKQogICAgIC8vIEhlbmNlLCBpZiB3ZSBnZXQgaGVyZSwgdGhlbiB3ZSBrbm93
IGEgc3RhY2sgb3ZlcmZsb3cgaXMgaW1taW5lbnQuIFNvLCBqdXN0CiAgICAgLy8gdGhyb3cgdGhl
IFN0YWNrT3ZlcmZsb3dFcnJvciB1bmNvbmRpdGlvbmFsbHkuCiAjaWYgIUVOQUJMRShKSVQpCi0g
ICAgQVNTRVJUKCF2bS5pbnRlcnByZXRlci0+c3RhY2soKS5jb250YWluc0FkZHJlc3MoZXhlYy0+
dG9wT2ZGcmFtZSgpKSk7Ci0gICAgaWYgKExJS0VMWSh2bS5pbnRlcnByZXRlci0+c3RhY2soKS5l
bnN1cmVDYXBhY2l0eUZvcihleGVjLT50b3BPZkZyYW1lKCkpKSkKKyAgICBBU1NFUlQoIXZtLmlu
dGVycHJldGVyLT5jbG9vcFN0YWNrKCkuY29udGFpbnNBZGRyZXNzKGV4ZWMtPnRvcE9mRnJhbWUo
KSkpOworICAgIGlmIChMSUtFTFkodm0uZW5zdXJlU3RhY2tDYXBhY2l0eUZvcihleGVjLT50b3BP
ZkZyYW1lKCkpKSkKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhwYywgMCk7CiAjZW5kaWYKIApA
QCAtMTM1Miw3ICsxMzUxLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3NpemVf
ZnJhbQogICAgIC8vIC0gU2V0IHVwIGEgY2FsbCBmcmFtZSB3aGlsZSByZXNwZWN0aW5nIHRoZSB2
YXJpYWJsZSBhcmd1bWVudHMuCiAgICAgCiAgICAgdW5zaWduZWQgbnVtVXNlZFN0YWNrU2xvdHMg
PSAtcGNbNV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHNpemVGcmFtZUZvclZh
cmFyZ3MoZXhlYywgJnZtLmludGVycHJldGVyLT5zdGFjaygpLAorICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHNpemVGcmFtZUZvclZhcmFyZ3MoZXhlYywgdm0sCiAgICAgICAgIExMSU5UX09QX0MoNCku
anNWYWx1ZSgpLCBudW1Vc2VkU3RhY2tTbG90cywgcGNbNl0udS5vcGVyYW5kKTsKICAgICBMTElO
VF9DQUxMX0NIRUNLX0VYQ0VQVElPTihleGVjLCBleGVjKTsKICAgICAKQEAgLTEzNzEsNyArMTM3
MCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zaXplX2ZyYW0KIAogICAgIHVu
c2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzID0gLXBjWzVdLnUub3BlcmFuZDsKIAotICAgIHVuc2ln
bmVkIGFyZ3VtZW50cyA9IHNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHMoZXhlYywgJnZtLmlu
dGVycHJldGVyLT5zdGFjaygpLCBudW1Vc2VkU3RhY2tTbG90cyk7CisgICAgdW5zaWduZWQgYXJn
dW1lbnRzID0gc2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50cyhleGVjLCB2bSwgbnVtVXNlZFN0
YWNrU2xvdHMpOwogICAgIExMSU5UX0NBTExfQ0hFQ0tfRVhDRVBUSU9OKGV4ZWMsIGV4ZWMpOwog
CiAgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlID0gY2FsbGVlRnJhbWVGb3JWYXJhcmdzKGV4ZWMs
IG51bVVzZWRTdGFja1Nsb3RzLCBhcmd1bWVudHMgKyAxKTsKQEAgLTE2MjksNyArMTYyOCw3IEBA
IGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3Rocm8KICNpZiAhRU5BQkxFKEpJ
VCkKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3N0YWNrX2NoZWNrX2F0X3Zt
X2VudHJ5KFZNKiB2bSwgUmVnaXN0ZXIqIG5ld1RvcE9mU3RhY2spCiB7Ci0gICAgYm9vbCBzdWNj
ZXNzID0gdm0tPmludGVycHJldGVyLT5zdGFjaygpLmVuc3VyZUNhcGFjaXR5Rm9yKG5ld1RvcE9m
U3RhY2spOworICAgIGJvb2wgc3VjY2VzcyA9IHZtLT5lbnN1cmVTdGFja0NhcGFjaXR5Rm9yKG5l
d1RvcE9mU3RhY2spOwogICAgIHJldHVybiBlbmNvZGVSZXN1bHQocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oc3VjY2VzcyksIDApOwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAJKHJldmlzaW9uIDIwMzA2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzLCAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUg
IkpTU3RhY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTExJbnRDTG9vcC5oIgogI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKICNpbmNsdWRlICJMb3dMZXZlbEludGVycHJldGVyLmgiCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuY3Bw
CShyZXZpc2lvbiAyMDMwNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzMCw3ICszMzAs
NyBAQCBKU1ZhbHVlIENMb29wOjpleGVjdXRlKE9wY29kZUlEIGVudHJ5T3BjCiAgICAgQ0xvb3BE
b3VibGVSZWdpc3RlciBkMCwgZDE7CiAKICAgICBsci5vcGNvZGUgPSBnZXRPcGNvZGUobGxpbnRf
cmV0dXJuX3RvX2hvc3QpOwotICAgIHNwLnZwID0gdm0tPmludGVycHJldGVyLT5zdGFjaygpLnRv
cE9mU3RhY2soKSArIDE7CisgICAgc3AudnAgPSB2bS0+aW50ZXJwcmV0ZXItPmNsb29wU3RhY2so
KS50b3BPZlN0YWNrKCkgKyAxOwogICAgIGNmci5jYWxsRnJhbWUgPSB2bS0+dG9wQ2FsbEZyYW1l
OwogI2lmbmRlZiBOREVCVUcKICAgICB2b2lkKiBzdGFydFNQID0gc3AudnA7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJl
dmlzaW9uIDIwMzA2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgsNyBAQCBzdGF0aWMgQ29t
bW9uU2xvd1BhdGhzOjpBcml0eUNoZWNrRGF0YSogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
Y2FsbF9hcml0eUNoZWNrKQogewogICAgIEJFR0lOKCk7Ci0gICAgaW50IHNsb3RzVG9BZGQgPSBD
b21tb25TbG93UGF0aHM6OmFyaXR5Q2hlY2tGb3IoZXhlYywgJnZtLmludGVycHJldGVyLT5zdGFj
aygpLCBDb2RlRm9yQ2FsbCk7CisgICAgaW50IHNsb3RzVG9BZGQgPSBDb21tb25TbG93UGF0aHM6
OmFyaXR5Q2hlY2tGb3IoZXhlYywgdm0sIENvZGVGb3JDYWxsKTsKICAgICBpZiAoc2xvdHNUb0Fk
ZCA8IDApIHsKICAgICAgICAgZXhlYyA9IGV4ZWMtPmNhbGxlckZyYW1lKCk7CiAgICAgICAgIEVy
cm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKGV4ZWMtPnZtKCkpOwpAQCAtMTkxLDcgKzE5MSw3
IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jYWxsX2FyaXR5Q2hlY2sKIFNMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3RfYXJpdHlDaGVjaykKIHsKICAgICBCRUdJTigpOwotICAg
IGludCBzbG90c1RvQWRkID0gQ29tbW9uU2xvd1BhdGhzOjphcml0eUNoZWNrRm9yKGV4ZWMsICZ2
bS5pbnRlcnByZXRlci0+c3RhY2soKSwgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgaW50IHNsb3Rz
VG9BZGQgPSBDb21tb25TbG93UGF0aHM6OmFyaXR5Q2hlY2tGb3IoZXhlYywgdm0sIENvZGVGb3JD
b25zdHJ1Y3QpOwogICAgIGlmIChzbG90c1RvQWRkIDwgMCkgewogICAgICAgICBleGVjID0gZXhl
Yy0+Y2FsbGVyRnJhbWUoKTsKICAgICAgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUo
ZXhlYy0+dm0oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25T
bG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMjAzMDY2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMsIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI5LDExICsyOSwxMCBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1
ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJz
LmgiCi0jaW5jbHVkZSAiSlNTdGFja0lubGluZXMuaCIKICNpbmNsdWRlICJTbG93UGF0aFJldHVy
blR5cGUuaCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgogI2luY2x1ZGUgIlN5bWJvbC5o
IgotI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiVk1JbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTUyLDcgKzUxLDcgQEAgc3Ry
dWN0IEFyaXR5Q2hlY2tEYXRhIHsKICAgICB2b2lkKiB0aHVua1RvQ2FsbDsKIH07CiAKLUFMV0FZ
U19JTkxJTkUgaW50IGFyaXR5Q2hlY2tGb3IoRXhlY1N0YXRlKiBleGVjLCBKU1N0YWNrKiBzdGFj
aywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorQUxXQVlTX0lOTElORSBpbnQgYXJpdHlD
aGVja0ZvcihFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kKQogewogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhl
Yy0+Y2FsbGVlKCkpOwogICAgIEFTU0VSVCghY2FsbGVlLT5pc0hvc3RGdW5jdGlvbigpKTsKQEAg
LTY1LDcgKzY0LDcgQEAgQUxXQVlTX0lOTElORSBpbnQgYXJpdHlDaGVja0ZvcihFeGVjU3RhdAog
ICAgICAgICBuZXdDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSArIENhbGxGcmFtZTo6aGVhZGVy
U2l6ZUluUmVnaXN0ZXJzKTsKICAgICBpbnQgcGFkZGVkU3RhY2tTcGFjZSA9IGFsaWduZWRGcmFt
ZVNpemVGb3JQYXJhbWV0ZXJzIC0gZnJhbWVTaXplOwogCi0gICAgaWYgKCFzdGFjay0+ZW5zdXJl
Q2FwYWNpdHlGb3IoZXhlYy0+cmVnaXN0ZXJzKCkgLSBwYWRkZWRTdGFja1NwYWNlICUgc3RhY2tB
bGlnbm1lbnRSZWdpc3RlcnMoKSkpCisgICAgaWYgKFVOTElLRUxZKCF2bS5lbnN1cmVTdGFja0Nh
cGFjaXR5Rm9yKGV4ZWMtPnJlZ2lzdGVycygpIC0gcGFkZGVkU3RhY2tTcGFjZSAlIHN0YWNrQWxp
Z25tZW50UmVnaXN0ZXJzKCkpKSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiBwYWRk
ZWRTdGFja1NwYWNlOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJy
b3JIYW5kbGluZ1Njb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FcnJvckhhbmRsaW5nU2NvcGUuY3BwCShyZXZpc2lvbiAyMDMwNjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckhhbmRsaW5nU2NvcGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXJy
b3JIYW5kbGluZ1Njb3BlLmgiCiAKLSNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUg
Ik9wdGlvbnMuaCIKICNpbmNsdWRlICJWTS5oIgogCkBAIC0zOCwxOCArMzcsMTIgQEAgRXJyb3JI
YW5kbGluZ1Njb3BlOjpFcnJvckhhbmRsaW5nU2NvcGUoVgogICAgIFJFTEVBU0VfQVNTRVJUKG1f
dm0uc3RhY2tQb2ludGVyQXRWTUVudHJ5KCkpOwogICAgIHNpemVfdCBuZXdSZXNlcnZlZFpvbmVT
aXplID0gT3B0aW9uczo6ZXJyb3JNb2RlUmVzZXJ2ZWRab25lU2l6ZSgpOwogICAgIG1fc2F2ZWRS
ZXNlcnZlZFpvbmVTaXplID0gbV92bS51cGRhdGVSZXNlcnZlZFpvbmVTaXplKG5ld1Jlc2VydmVk
Wm9uZVNpemUpOwotI2lmICFFTkFCTEUoSklUKQotICAgIG1fdm0uaW50ZXJwcmV0ZXItPnN0YWNr
KCkuc2V0UmVzZXJ2ZWRab25lU2l6ZShuZXdSZXNlcnZlZFpvbmVTaXplKTsKLSNlbmRpZgogfQog
CiBFcnJvckhhbmRsaW5nU2NvcGU6On5FcnJvckhhbmRsaW5nU2NvcGUoKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKG1fdm0uc3RhY2tQb2ludGVyQXRWTUVudHJ5KCkpOwogICAgIG1fdm0udXBkYXRl
UmVzZXJ2ZWRab25lU2l6ZShtX3NhdmVkUmVzZXJ2ZWRab25lU2l6ZSk7Ci0jaWYgIUVOQUJMRShK
SVQpCi0gICAgbV92bS5pbnRlcnByZXRlci0+c3RhY2soKS5zZXRSZXNlcnZlZFpvbmVTaXplKG1f
c2F2ZWRSZXNlcnZlZFpvbmVTaXplKTsKLSNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aAkocmV2aXNpb24gMjAzMDY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNiBAQCBjbGFzcyBKU0lu
dGVybmFsUHJvbWlzZTsKIGNsYXNzIEpTUHJvbWlzZTsKIGNsYXNzIEpTUHJvbWlzZUNvbnN0cnVj
dG9yOwogY2xhc3MgSlNQcm9taXNlUHJvdG90eXBlOwotY2xhc3MgSlNTdGFjazsKIGNsYXNzIEpT
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjsKIGNsYXNzIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5
cGU7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9NZW1vcnlTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NZW1vcnlTdGF0aXN0aWNzLmNwcAkocmV2aXNpb24gMjAz
MDY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWVtb3J5U3RhdGlzdGljcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkV4ZWN1dGFibGVB
bGxvY2F0b3IuaCIKICNpbmNsdWRlICJWTS5oIgotI2luY2x1ZGUgIkpTU3RhY2suaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKQEAgLTM2LDcgKzM1LDcgQEAgR2xvYmFsTWVtb3J5U3RhdGlzdGljcyBn
bG9iYWxNZW1vcnlTdGF0aQogewogICAgIEdsb2JhbE1lbW9yeVN0YXRpc3RpY3Mgc3RhdHM7CiAK
LSAgICBzdGF0cy5zdGFja0J5dGVzID0gSlNTdGFjazo6Y29tbWl0dGVkQnl0ZUNvdW50KCk7Cisg
ICAgc3RhdHMuc3RhY2tCeXRlcyA9IFZNOjpjb21taXR0ZWRTdGFja0J5dGVDb3VudCgpOwogI2lm
IEVOQUJMRShBU1NFTUJMRVIpCiAgICAgc3RhdHMuSklUQnl0ZXMgPSBFeGVjdXRhYmxlQWxsb2Nh
dG9yOjpjb21taXR0ZWRCeXRlQ291bnQoKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RhY2tBbGlnbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0FsaWdubWVudC5oCShyZXZpc2lvbiAyMDMwNjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdGFja0FsaWdubWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNyw3ICsyNyw2IEBACiAjZGVmaW5lIFN0YWNrQWxpZ25tZW50X2gKIAogI2luY2x1
ZGUgIkpTQ0pTVmFsdWUuaCIKLSNpbmNsdWRlICJKU1N0YWNrLmgiCiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyMDMwNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsMTAgQEAKICNpbmNs
dWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdUYWJsZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N5
bWJvbFJlZ2lzdHJ5Lmg+CiAKKyNpZiAhRU5BQkxFKEpJVCkKKyNpbmNsdWRlICJDTG9vcFN0YWNr
LmgiCisjZW5kaWYKKwogI2lmIEVOQUJMRShERkdfSklUKQogI2luY2x1ZGUgIkNvbnNlcnZhdGl2
ZVJvb3RzLmgiCiAjZW5kaWYKQEAgLTE5NCw5ICsxOTgsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlw
ZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgaW50ZXJwcmV0ZXIgPSBuZXcgSW50ZXJwcmV0ZXIo
KnRoaXMpOwogICAgIFN0YWNrQm91bmRzIHN0YWNrID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCk7
CiAgICAgdXBkYXRlUmVzZXJ2ZWRab25lU2l6ZShPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCkp
OwotI2lmICFFTkFCTEUoSklUKQotICAgIGludGVycHJldGVyLT5zdGFjaygpLnNldFJlc2VydmVk
Wm9uZVNpemUoT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpKTsKLSNlbmRpZgogICAgIHNldExh
c3RTdGFja1RvcChzdGFjay5vcmlnaW4oKSk7CiAKICAgICAvLyBOZWVkIHRvIGJlIGNhcmVmdWwg
dG8ga2VlcCBldmVyeXRoaW5nIGNvbnNpc3RlbnQgaGVyZQpAQCAtNjE2LDYgKzYxNyw5IEBAIHNp
emVfdCBWTTo6dXBkYXRlUmVzZXJ2ZWRab25lU2l6ZShzaXplX3QKIHsKICAgICBzaXplX3Qgb2xk
UmVzZXJ2ZWRab25lU2l6ZSA9IG1fcmVzZXJ2ZWRab25lU2l6ZTsKICAgICBtX3Jlc2VydmVkWm9u
ZVNpemUgPSByZXNlcnZlZFpvbmVTaXplOworI2lmICFFTkFCTEUoSklUKQorICAgIGludGVycHJl
dGVyLT5jbG9vcFN0YWNrKCkuc2V0UmVzZXJ2ZWRab25lU2l6ZShyZXNlcnZlZFpvbmVTaXplKTsK
KyNlbmRpZgogCiAgICAgdXBkYXRlU3RhY2tMaW1pdCgpOwogCkBAIC04MzksMTAgKzg0MywyNCBA
QCB2b2lkIHNhbml0aXplU3RhY2tGb3JWTShWTSogdm0pCiB7CiAgICAgbG9nU2FuaXRpemVTdGFj
ayh2bSk7CiAjaWYgIUVOQUJMRShKSVQpCi0gICAgdm0tPmludGVycHJldGVyLT5zdGFjaygpLnNh
bml0aXplU3RhY2soKTsKKyAgICB2bS0+aW50ZXJwcmV0ZXItPmNsb29wU3RhY2soKS5zYW5pdGl6
ZVN0YWNrKCk7CiAjZWxzZQogICAgIHNhbml0aXplU3RhY2tGb3JWTUltcGwodm0pOwogI2VuZGlm
CiB9CiAKK3NpemVfdCBWTTo6Y29tbWl0dGVkU3RhY2tCeXRlQ291bnQoKQoreworI2lmIEVOQUJM
RShKSVQpCisgICAgLy8gV2hlbiB1c2luZyB0aGUgQyBzdGFjaywgd2UgZG9uJ3Qga25vdyBob3cg
bWFueSBzdGFjayBwYWdlcyBhcmUgYWN0dWFsbHkKKyAgICAvLyBjb21taXR0ZWQuIFNvLCB3ZSB1
c2UgdGhlIGN1cnJlbnQgc3RhY2sgdXNhZ2UgYXMgYW4gZXN0aW1hdGUuCisgICAgQVNTRVJUKHd0
ZlRocmVhZERhdGEoKS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253YXJkKCkpOworICAgIGludDhfdCog
Y3VycmVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50OF90Kj4oJmN1cnJlbnQpOworICAgIGludDhf
dCogaGlnaCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50OF90Kj4od3RmVGhyZWFkRGF0YSgpLnN0YWNr
KCkub3JpZ2luKCkpOworICAgIHJldHVybiBoaWdoIC0gY3VycmVudDsKKyNlbHNlCisgICAgcmV0
dXJuIENMb29wU3RhY2s6OmNvbW1pdHRlZEJ5dGVDb3VudCgpOworI2VuZGlmCit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lv
biAyMDMwNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5n
IGNvcHkpCkBAIC05NCw2ICs5NCw3IEBAIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOwogY2xhc3MgTmF0aXZlRXhlY3V0YWJsZTsKIGNsYXNzIFJlZ0V4cENhY2hl
OworY2xhc3MgUmVnaXN0ZXI7CiBjbGFzcyBSZWdpc3RlckF0T2Zmc2V0TGlzdDsKICNpZiBFTkFC
TEUoU0FNUExJTkdfUFJPRklMRVIpCiBjbGFzcyBTYW1wbGluZ1Byb2ZpbGVyOwpAQCAtNDYxLDYg
KzQ2Miw5IEBAIHB1YmxpYzoKICAgICBzaXplX3QgcmVzZXJ2ZWRab25lU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVzZXJ2ZWRab25lU2l6ZTsgfQogICAgIHNpemVfdCB1cGRhdGVSZXNlcnZlZFpv
bmVTaXplKHNpemVfdCByZXNlcnZlZFpvbmVTaXplKTsKIAorICAgIHN0YXRpYyBzaXplX3QgY29t
bWl0dGVkU3RhY2tCeXRlQ291bnQoKTsKKyAgICBpbmxpbmUgYm9vbCBlbnN1cmVTdGFja0NhcGFj
aXR5Rm9yKFJlZ2lzdGVyKiBuZXdUb3BPZlN0YWNrKTsKKwogICAgIHZvaWQqIG9zU3RhY2tMaW1p
dFdpdGhSZXNlcnZlKCkgeyByZXR1cm4gbV9vc1N0YWNrTGltaXRXaXRoUmVzZXJ2ZTsgfQogICAg
IHZvaWQqKiBhZGRyZXNzT2ZPU1N0YWNrTGltaXRXaXRoUmVzZXJ2ZSgpIHsgcmV0dXJuICZtX29z
U3RhY2tMaW1pdFdpdGhSZXNlcnZlOyB9CiAjaWYgIUVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUlubGluZXMuaAkocmV2aXNpb24gMjAzMDY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1JbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDggKzMwLDIzIEBACiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXRjaGRvZy5o
IgogCisjaWYgIUVOQUJMRShKSVQpCisjaW5jbHVkZSAiQ0xvb3BTdGFja0lubGluZXMuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKK2Jvb2wgVk06OmVuc3VyZVN0YWNrQ2FwYWNp
dHlGb3IoUmVnaXN0ZXIqIG5ld1RvcE9mU3RhY2spCit7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBB
U1NFUlQod3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkuaXNHcm93aW5nRG93bndhcmQoKSk7CisgICAg
cmV0dXJuIG5ld1RvcE9mU3RhY2sgPj0gbV9vc1N0YWNrTGltaXRXaXRoUmVzZXJ2ZTsKKyNlbHNl
CisgICAgcmV0dXJuIGludGVycHJldGVyLT5jbG9vcFN0YWNrKCkuZW5zdXJlQ2FwYWNpdHlGb3Io
bmV3VG9wT2ZTdGFjayk7CisjZW5kaWYKKyAgICAKK30KKwogYm9vbCBWTTo6c2hvdWxkVHJpZ2dl
clRlcm1pbmF0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBpZiAoIXdhdGNoZG9nKCkpCg==
</data>
<flag name="review"
          id="307041"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>