<?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>157428</bug_id>
          
          <creation_ts>2016-05-06 13:17:04 -0700</creation_ts>
          <short_desc>Add JSC options bytecodeRangeToJITCompile and jitWhitelist.</short_desc>
          <delta_ts>2016-05-07 09:20:07 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>benjamin</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>1190739</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-05-06 13:17:04 -0700</bug_when>
    <thetext>... because this is useful for baseline JIT debugging too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1190825</commentid>
    <comment_count>1</comment_count>
      <attachid>278290</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-05-06 17:03:31 -0700</bug_when>
    <thetext>Created attachment 278290
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1190834</commentid>
    <comment_count>2</comment_count>
      <attachid>278290</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-05-06 17:11:09 -0700</bug_when>
    <thetext>Comment on attachment 278290
proposed patch

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

r-
Please make the suggested changes.

&gt; Source/JavaScriptCore/ChangeLog:35
&gt; +        * jit/JITFunctionWhitelist.cpp: Copied from Source/JavaScriptCore/dfg/DFGFunctionWhitelist.cpp.
&gt; +        (JSC::JITFunctionWhitelist::ensureGlobalBaselineWhitelist):
&gt; +        (JSC::JITFunctionWhitelist::ensureGlobalDFGWhitelist):
&gt; +        (JSC::JITFunctionWhitelist::JITFunctionWhitelist):
&gt; +        (JSC::JITFunctionWhitelist::parseFunctionNamesInFile):
&gt; +        (JSC::JITFunctionWhitelist::contains):
&gt; +        (JSC::DFG::FunctionWhitelist::ensureGlobalWhitelist): Deleted.
&gt; +        (JSC::DFG::FunctionWhitelist::FunctionWhitelist): Deleted.
&gt; +        (JSC::DFG::FunctionWhitelist::parseFunctionNamesInFile): Deleted.
&gt; +        (JSC::DFG::FunctionWhitelist::contains): Deleted.
&gt; +        * jit/JITFunctionWhitelist.h: Copied from Source/JavaScriptCore/dfg/DFGFunctionWhitelist.h.

Make this a generic FunctionWhiteList class.

&gt; Source/JavaScriptCore/runtime/Options.h:148
&gt; +    v(optionRange, bytecodeRangeToBaselineCompile, 0, Normal, &quot;bytecode size range to allow Baseline JIT compilation on, e.g. 1:100&quot;) \

Let&apos;s call this &quot;bytecodeRangeToJITCompile&quot;.

&gt; Source/JavaScriptCore/runtime/Options.h:151
&gt; +    v(optionString, baselineWhitelist, nullptr, Normal, &quot;file with list of function signatures to allow Baseline JIT compilation on&quot;) \

Let&apos;s call this &quot;jitWhitelist&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1190863</commentid>
    <comment_count>3</comment_count>
      <attachid>278308</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-05-06 18:54:45 -0700</bug_when>
    <thetext>Created attachment 278308
proposed patch with Michael&apos;s feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1190933</commentid>
    <comment_count>4</comment_count>
      <attachid>278308</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-05-07 07:40:41 -0700</bug_when>
    <thetext>Comment on attachment 278308
proposed patch with Michael&apos;s feedback.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1190934</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-05-07 09:20:07 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r200543: &lt;http://trac.webkit.org/r200543&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278290</attachid>
            <date>2016-05-06 17:03:31 -0700</date>
            <delta_ts>2016-05-06 18:54:45 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>bug-157428.patch</filename>
            <type>text/plain</type>
            <size>33284</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAwNTMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBA
CisyMDE2LTA1LTA2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgSlNDIG9wdGlvbnMgYnl0ZWNvZGVSYW5nZVRvQmFzZWxpbmVDb21waWxlIGFuZCBiYXNlbGlu
ZVdoaXRlbGlzdC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NzQyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIDEuIEFkZGVkIE9wdGlvbnM6OmJ5dGVjb2RlUmFuZ2VUb0Jhc2VsaW5lQ29tcGlsZSBhbmQg
T3B0aW9uczo6YmFzZWxpbmVXaGl0ZWxpc3QKKyAgICAgICAgICAgb3B0aW9ucy4KKworICAgICAg
ICAyLiBNb3ZlZCBERkdGdW5jdGlvbldoaXRlbGlzdCogdG8gSklURnVuY3Rpb25XaGl0ZWxpc3Qq
IGFuZCBtYWRlIGl0IGdlbmVyaWMgc28gdGhhdAorICAgICAgICAgICBpdCBjYW4gYmUgdXNlZCBm
b3IgbW9yZSB0aGFuIG9uZSB3aGl0ZWxpc3QgaW5zdGFuY2UuICBJbiB0aGlzIGNhc2UsIHdlIG5v
dyBoYXZlCisgICAgICAgICAgIHR3bzogdGhlIGRmZ1doaXRlbGlzdCBhbmQgdGhlIGJhc2VsaW5l
V2hpdGVsaXN0LgorCisgICAgICAgIDMuIEFkZGVkICJjYW4gY29tcGlsZSIgY2hlY2tzIGluIExM
SW50OjpzaG91bGRKSVQoKSB0byBjaGVjaworICAgICAgICAgICBPcHRpb25zOjpieXRlY29kZVJh
bmdlVG9CYXNlbGluZUNvbXBpbGUgYW5kIE9wdGlvbnM6OmJhc2VsaW5lV2hpdGVsaXN0LgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpjb21waWxlSW1wbCk6CisKKyAgICAgICAgKiBkZmcvREZHRnVuY3Rpb25X
aGl0ZWxpc3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdGdW5jdGlvbldoaXRlbGlz
dC5oOiBSZW1vdmVkLgorICAgICAgICAqIGppdC9KSVRGdW5jdGlvbldoaXRlbGlzdC5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRnVuY3Rpb25XaGl0ZWxpc3Qu
Y3BwLgorICAgICAgICAoSlNDOjpKSVRGdW5jdGlvbldoaXRlbGlzdDo6ZW5zdXJlR2xvYmFsQmFz
ZWxpbmVXaGl0ZWxpc3QpOgorICAgICAgICAoSlNDOjpKSVRGdW5jdGlvbldoaXRlbGlzdDo6ZW5z
dXJlR2xvYmFsREZHV2hpdGVsaXN0KToKKyAgICAgICAgKEpTQzo6SklURnVuY3Rpb25XaGl0ZWxp
c3Q6OkpJVEZ1bmN0aW9uV2hpdGVsaXN0KToKKyAgICAgICAgKEpTQzo6SklURnVuY3Rpb25XaGl0
ZWxpc3Q6OnBhcnNlRnVuY3Rpb25OYW1lc0luRmlsZSk6CisgICAgICAgIChKU0M6OkpJVEZ1bmN0
aW9uV2hpdGVsaXN0Ojpjb250YWlucyk6CisgICAgICAgIChKU0M6OkRGRzo6RnVuY3Rpb25XaGl0
ZWxpc3Q6OmVuc3VyZUdsb2JhbFdoaXRlbGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6RnVuY3Rpb25XaGl0ZWxpc3Q6OkZ1bmN0aW9uV2hpdGVsaXN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpGdW5jdGlvbldoaXRlbGlzdDo6cGFyc2VGdW5jdGlvbk5hbWVzSW5GaWxl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpGdW5jdGlvbldoaXRlbGlzdDo6Y29udGFp
bnMpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRGdW5jdGlvbldoaXRlbGlzdC5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Z1bmN0aW9uV2hpdGVsaXN0Lmgu
CisKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxM
SW50OjpzaG91bGRKSVQpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorCiAyMDE2LTA1
LTA2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogQ29uc29sZTogVmFyaWFibGVzIGRlZmluZWQgd2l0aCBsZXQvY29uc3QgYXJl
bid0IGFjY2Vzc2libGUgb3V0c2lkZSBvZiBjb25zb2xlJ3Mgc2NvcGUKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwMDUzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDcgKzI4OSw2
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0ZsdXNoZWRBdC5jcHAK
ICAgICBkZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKICAgICBk
ZmcvREZHRnJvemVuVmFsdWUuY3BwCi0gICAgZGZnL0RGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcAog
ICAgIGRmZy9ERkdHcmFwaC5jcHAKICAgICBkZmcvREZHR3JhcGhTYWZlcG9pbnQuY3BwCiAgICAg
ZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKQEAgLTU0MSw2ICs1NDAsNyBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfU09VUkNFUwogICAgIGppdC9KSVREaXNhc3NlbWJsZXIuY3BwCiAgICAgaml0L0pJVERp
dkdlbmVyYXRvci5jcHAKICAgICBqaXQvSklURXhjZXB0aW9ucy5jcHAKKyAgICBqaXQvSklURnVu
Y3Rpb25XaGl0ZWxpc3QuY3BwCiAgICAgaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAog
ICAgIGppdC9KSVRMZWZ0U2hpZnRHZW5lcmF0b3IuY3BwCiAgICAgaml0L0pJVE11bEdlbmVyYXRv
ci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDA1MzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTEzMSw4ICsxMTMxLDYgQEAKIAkJMkE4MzYz
ODYxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBODM2Mzg0MThEN0QwRUUwMDAw
RUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkE4MzYzODkxOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1
bGxHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkE4MzYzODcxOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5
Q2FsbGJhY2suY3BwICovOyB9OwogCQkyQTgzNjM4QTE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdD
QWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkE4MzYzODgxOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJh
Y2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQky
QTg4MDY3ODE5MTA3RDU1MDBDQjBCQkIgLyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE4ODA2NzYxOTEwN0Q1
NTAwQ0IwQkJCIC8qIERGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcCAqLzsgfTsKLQkJMkE4ODA2Nzkx
OTEwN0Q1NTAwQ0IwQkJCIC8qIERGR0Z1bmN0aW9uV2hpdGVsaXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTg4MDY3NzE5MTA3RDU1MDBDQjBCQkIg
LyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuaCAqLzsgfTsKIAkJMkFBQUEzMTIxOEJENDlEMTAwMzk0
Q0M4IC8qIFN0cnVjdHVyZUlEQmxvYi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkFBQUEzMTAxOEJENDlEMTAwMzk0Q0M4IC8qIFN0cnVjdHVyZUlEQmxv
Yi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJB
QUJDREU3MThFRjI5NDIwMDAwMjA5NiAvKiBHQ0xvZ2dpbmcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBQUJDREU2MThFRjI5NDIwMDAwMjA5NiAvKiBH
Q0xvZ2dpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkyQUFDRTYzQzE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBQUNFNjNBMThD
QTVBMDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovOyB9OwpAQCAtMjA5NCw2
ICsyMDkyLDggQEAKIAkJRkU5OUIyNEExQzI0QzNENzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTk5
QjI0NzFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmNwcCAqLzsgfTsKIAkJRkVB
MDg2MjAxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFFMTgyQjdBMDQwMEY2RDg1MSAvKiBC
cmVha3BvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRkVBMDg2MjExODJCN0EwNDAwRjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVBMDg2MUYxODJC
N0EwNDAwRjZEODUxIC8qIERlYnVnZ2VyUHJpbWl0aXZlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFQTBDM0ZFMUNERDVGRTgwMDQ4MTk5MSAv
KiBKSVRGdW5jdGlvbldoaXRlbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkVBMEMzRkQxQ0RENUZCQjAwNDgxOTkxIC8qIEpJVEZ1bmN0aW9uV2hp
dGVsaXN0LmggKi87IH07CisJCUZFQTBDM0ZGMUNERDVGRUIwMDQ4MTk5MSAvKiBKSVRGdW5jdGlv
bldoaXRlbGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRUEwQzNGQzFDREQ1RkJCMDA0ODE5OTEgLyogSklURnVuY3Rpb25XaGl0ZWxpc3QuY3Bw
ICovOyB9OwogCQlGRUExRTQzOTFDMjEzQTJCMDAyNzdBMTYgLyogVmFsdWVQcm9maWxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTFFNDM4MUMy
MTNBMjYwMDI3N0ExNiAvKiBWYWx1ZVByb2ZpbGUuY3BwICovOyB9OwogCQlGRUIxMzc1NzFCQjEx
RUY5MDBDRDUxMDAgLyogTWFjcm9Bc3NlbWJsZXJBUk02NC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUIxMzc1NjFCQjExRUVFMDBDRDUxMDAgLyog
TWFjcm9Bc3NlbWJsZXJBUk02NC5jcHAgKi87IH07CiAJCUZFQjUxRjZDMUE5N0I2ODgwMDFGOTIx
QyAvKiBSZWdyZXNzMTQxODA5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkVCNTFGNkIxQTk3QjY4ODAwMUY5MjFDIC8qIFJlZ3Jlc3MxNDE4MDkubW0g
Ki87IH07CkBAIC0zMjY1LDggKzMyNjUsNiBAQAogCQkyQTgzNjM4NDE4RDdEMEVFMDAwMEVCQ0Mg
LyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJBODM2Mzg3MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bGxHQ0FjdGl2aXR5Q2Fs
bGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTgzNjM4ODE4RDdEMEZF
MDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTJBODgwNjc2MTkxMDdENTUwMENCMEJCQiAvKiBERkdGdW5jdGlvbldoaXRl
bGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGdW5jdGlv
bldoaXRlbGlzdC5jcHA7IHBhdGggPSBkZmcvREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQTg4MDY3NzE5MTA3RDU1MDBDQjBCQkIgLyogREZH
RnVuY3Rpb25XaGl0ZWxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
RnVuY3Rpb25XaGl0ZWxpc3QuaDsgcGF0aCA9IGRmZy9ERkdGdW5jdGlvbldoaXRlbGlzdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQUFBQTMxMDE4QkQ0OUQxMDAzOTRDQzggLyog
U3RydWN0dXJlSURCbG9iLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVj
dHVyZUlEQmxvYi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQUFCQ0RFNjE4RUYy
OTQyMDAwMDIwOTYgLyogR0NMb2dnaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEdDTG9nZ2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQUFDRTYzQTE4
Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdDQWN0aXZpdHlDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC00MzQ3LDYgKzQzNDUsOCBAQAogCQlGRTk5QjI0ODFDMjRCNkQz
MDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpJVE5lZ0dlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RUEwODYxRTE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBCcmVha3BvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZFQTA4NjFGMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVidWdnZXJQcmltaXRpdmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFQTBDM0ZDMUNERDVGQkIwMDQ4MTk5MSAvKiBKSVRG
dW5jdGlvbldoaXRlbGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKSVRGdW5jdGlvbldoaXRlbGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZFQTBDM0ZEMUNERDVGQkIwMDQ4MTk5MSAvKiBKSVRGdW5jdGlvbldoaXRlbGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRGdW5jdGlvbldoaXRlbGlzdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUExRTQzODFDMjEzQTI2MDAyNzdBMTYgLyogVmFs
dWVQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhbHVl
UHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFQjEzNzU2MUJCMTFF
RUUwMENENTEwMCAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyQVJNNjQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRUI1MUY2QTFBOTdCNjg4MDAxRjkyMUMgLyogUmVncmVzczE0MTgw
OS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZWdyZXNzMTQxODA5Lmg7IHBh
dGggPSBBUEkvdGVzdHMvUmVncmVzczE0MTgwOS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNTAzOSw2ICs1MDM5LDggQEAKIAkJCQlGRTE4N0EwQjFDMDIyOTIzMDAzOEJCQ0EgLyog
SklURGl2R2VuZXJhdG9yLmggKi8sCiAJCQkJMEY0NjgwN0YxNEJBNTcyNzAwQkZFMjcyIC8qIEpJ
VEV4Y2VwdGlvbnMuY3BwICovLAogCQkJCTBGNDY4MDgwMTRCQTU3MjcwMEJGRTI3MiAvKiBKSVRF
eGNlcHRpb25zLmggKi8sCisJCQkJRkVBMEMzRkMxQ0RENUZCQjAwNDgxOTkxIC8qIEpJVEZ1bmN0
aW9uV2hpdGVsaXN0LmNwcCAqLywKKwkJCQlGRUEwQzNGRDFDREQ1RkJCMDA0ODE5OTEgLyogSklU
RnVuY3Rpb25XaGl0ZWxpc3QuaCAqLywKIAkJCQkwRkIxNEUxQzE4MTI0QUNFMDA5QjZCNEQgLyog
SklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwICovLAogCQkJCTBGQjE0RTFEMTgxMjRBQ0UwMDlC
NkI0RCAvKiBKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oICovLAogCQkJCTg2Q0M4NUEwMEVFNzlB
NDcwMDI4ODY4MiAvKiBKSVRJbmxpbmVzLmggKi8sCkBAIC02MjE0LDggKzYyMTYsNiBAQAogCQkJ
CTBGMkREODEwMUFCM0Q4QkUwMEJCQjhFOCAvKiBERkdGb3JBbGxLaWxscy5oICovLAogCQkJCTBG
NjlDQzg2MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5jcHAgKi8sCiAJCQkJMEY2
OUNDODcxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggKi8sCi0JCQkJMkE4ODA2
NzYxOTEwN0Q1NTAwQ0IwQkJCIC8qIERGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcCAqLywKLQkJCQky
QTg4MDY3NzE5MTA3RDU1MDBDQjBCQkIgLyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuaCAqLywKIAkJ
CQk4NkVDOURCNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCAqLywKIAkJ
CQk4NkVDOURCNzEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguY3BwICovLAogCQkJCTg2RUM5
REI4MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5oICovLApAQCAtNzI2Nyw3ICs3MjY3LDYg
QEAKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAvKiBERkdGb3JBbGxLaWxs
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zy
b3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKLQkJCQkyQTg4MDY3OTE5MTA3RDU1MDBDQjBCQkIg
LyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM2MTMy
OERGODIwMDJCMkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZFQzlEQzgxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJGQ0NGQTE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZlcG9pbnQuaCBpbiBIZWFk
ZXJzICovLApAQCAtNzU5Nyw2ICs3NTk2LDcgQEAKIAkJCQlBNTU3MTRCRTFDRDgwNDlGMDAwNEQy
QzYgLyogQ29uc29sZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFENzkyRkQxQjQzODY0
QjAwNDUxNkY1IC8qIEludGxOdW1iZXJGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExRDc5
MkZGMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZFQTBDM0ZFMUNERDVGRTgwMDQ4MTk5MSAvKiBKSVRGdW5jdGlvbldo
aXRlbGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTEyNTg0NkUxQjQ1QTM2MDAwQ0M3RjZDIC8q
IEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NzI1Q0FBMUM1MDNERUQwMEFEOTQzQSAvKiBCM1B1cmVDU0UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUExRDc5MzAxMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKQEAgLTg4MTgsNiArODgxOCw3IEBACiAJCQkJMEYyRkM3NzIxNkUxMkY3
MTAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzM4RTEy
MUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY4RjJCOTkxNzJGMDRGRjAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlGRUEwQzNGRjFDREQ1RkVCMDA0ODE5OTEgLyogSklURnVu
Y3Rpb25XaGl0ZWxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJDMEY3Q0QxN0JCRkM1QjAw
NDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkU4NTM0QjE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUMyOTgxRkQ4MTdCQUVFNEIwMEEzQkM5OCAvKiBERkdEZXNpcmVkV2Vh
a1JlZmVyZW5jZXMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04ODM0LDcgKzg4MzUsNiBAQAogCQkJ
CTBGOUQzMzk2MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdEODlDRjcxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNjlDQzg4MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5W
YWx1ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyQTg4MDY3ODE5MTA3RDU1MDBDQjBCQkIgLyog
REZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzcxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDQ0Y5
MThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNhZmVwb2ludC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkIxNzY2MDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAko
cmV2aXNpb24gMjAwNTMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTIgQEAKICNpbmNsdWRlICJKU1N0cmlu
Zy5oIgogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiREZHRnVuY3Rpb25XaGl0
ZWxpc3QuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHUGxhbi5oIgog
I2luY2x1ZGUgIkRGR1RodW5rcy5oIgogI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVk
ZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkpJVEZ1bmN0aW9uV2hpdGVsaXN0LmgiCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlICJUeXBlUHJv
ZmlsZXJMb2cuaCIKQEAgLTYxLDcgKzYxLDcgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNv
bXBpbGVJbXBsKAogICAgIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBj
YWxsYmFjaykKIHsKICAgICBpZiAoIU9wdGlvbnM6OmJ5dGVjb2RlUmFuZ2VUb0RGR0NvbXBpbGUo
KS5pc0luUmFuZ2UoY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkpCi0gICAgICAgIHx8ICFG
dW5jdGlvbldoaXRlbGlzdDo6ZW5zdXJlR2xvYmFsV2hpdGVsaXN0KCkuY29udGFpbnMoY29kZUJs
b2NrKSkKKyAgICAgICAgfHwgIUpJVEZ1bmN0aW9uV2hpdGVsaXN0OjplbnN1cmVHbG9iYWxERkdX
aGl0ZWxpc3QoKS5jb250YWlucyhjb2RlQmxvY2spKQogICAgICAgICByZXR1cm4gQ29tcGlsYXRp
b25GYWlsZWQ7CiAgICAgCiAgICAgbnVtQ29tcGlsYXRpb25zKys7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcAkocmV2aXNp
b24gMjAwNTMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGdW5jdGlvbldoaXRl
bGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiREZHRnVuY3Rpb25XaGl0ZWxpc3QuaCIKLQot
I2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAi
T3B0aW9ucy5oIgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLUZ1bmN0aW9uV2hp
dGVsaXN0JiBGdW5jdGlvbldoaXRlbGlzdDo6ZW5zdXJlR2xvYmFsV2hpdGVsaXN0KCkKLXsKLSAg
ICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEZ1bmN0aW9uV2hpdGVsaXN0PiBmdW5jdGlvbldo
aXRlbGlzdDsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZVdoaXRlbGlzdEZs
YWc7Ci0gICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZVdoaXRlbGlzdEZsYWcsIFtdIHsKLSAg
ICAgICAgY29uc3QgY2hhciogZnVuY3Rpb25XaGl0ZWxpc3RGaWxlID0gT3B0aW9uczo6ZGZnV2hp
dGVsaXN0KCk7Ci0gICAgICAgIGZ1bmN0aW9uV2hpdGVsaXN0LmNvbnN0cnVjdChmdW5jdGlvbldo
aXRlbGlzdEZpbGUpOwotICAgIH0pOwotICAgIHJldHVybiBmdW5jdGlvbldoaXRlbGlzdDsKLX0K
LQotRnVuY3Rpb25XaGl0ZWxpc3Q6OkZ1bmN0aW9uV2hpdGVsaXN0KGNvbnN0IGNoYXIqIGZpbGVu
YW1lKQotewotICAgIHBhcnNlRnVuY3Rpb25OYW1lc0luRmlsZShmaWxlbmFtZSk7Ci19Ci0KLXZv
aWQgRnVuY3Rpb25XaGl0ZWxpc3Q6OnBhcnNlRnVuY3Rpb25OYW1lc0luRmlsZShjb25zdCBjaGFy
KiBmaWxlbmFtZSkKLXsKLSAgICBpZiAoIWZpbGVuYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBGSUxFKiBmID0gZm9wZW4oZmlsZW5hbWUsICJyIik7Ci0gICAgaWYgKCFmKSB7Ci0gICAgICAg
IGRhdGFMb2dGKCJGYWlsZWQgdG8gb3BlbiBmaWxlICVzLiBEaWQgeW91IGFkZCB0aGUgZmlsZS1y
ZWFkLWRhdGEgZW50aXRsZW1lbnQgdG8gV2ViUHJvY2Vzcy5zYj9cbiIsIGZpbGVuYW1lKTsgCi0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjaGFyKiBsaW5lOwotICAgIGNoYXIgYnVmZmVy
W0JVRlNJWl07Ci0gICAgd2hpbGUgKChsaW5lID0gZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVy
KSwgZikpKSB7Ci0gICAgICAgIGlmIChzdHJzdHIobGluZSwgIi8vIikgPT0gbGluZSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIEdldCByaWQgb2YgbmV3bGluZXMgYXQgdGhl
IGVuZHMgb2YgdGhlIHN0cmluZ3MuCi0gICAgICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4obGlu
ZSk7Ci0gICAgICAgIGlmIChsaW5lW2xlbmd0aCAtIDFdID09ICdcbicpIHsKLSAgICAgICAgICAg
IGxpbmVbbGVuZ3RoIC0gMV0gPSAnXDAnOwotICAgICAgICAgICAgbGVuZ3RoLS07Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBTa2lwIGVtcHR5IGxpbmVzLgotICAgICAgICBpZiAoIWxlbmd0aCkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgbV9lbnRyaWVzLmFkZChT
dHJpbmcobGluZSwgbGVuZ3RoKSk7Ci0gICAgfQotCi0gICAgaW50IHJlc3VsdCA9IGZjbG9zZShm
KTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICBkYXRhTG9nRigiRmFpbGVkIHRvIGNsb3NlIGZp
bGUgJXM6ICVzXG4iLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKLX0KLQotYm9vbCBGdW5j
dGlvbldoaXRlbGlzdDo6Y29udGFpbnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spIGNvbnN0IAotewot
ICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICBpZiAoIU9wdGlvbnM6OmRm
Z1doaXRlbGlzdCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChtX2VudHJpZXMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTdHJpbmcgbmFtZSA9IFN0
cmluZzo6ZnJvbVVURjgoY29kZUJsb2NrLT5pbmZlcnJlZE5hbWUoKSk7Ci0gICAgaWYgKG1fZW50
cmllcy5jb250YWlucyhuYW1lKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBTdHJpbmcg
aGFzaCA9IFN0cmluZzo6ZnJvbVVURjgoY29kZUJsb2NrLT5oYXNoQXNTdHJpbmdJZlBvc3NpYmxl
KCkpOwotICAgIGlmIChtX2VudHJpZXMuY29udGFpbnMoaGFzaCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgcmV0dXJuIG1fZW50cmllcy5jb250YWlucyhuYW1lICsgJyMnICsgaGFzaCk7
Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Z1bmN0aW9uV2hpdGVs
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGdW5jdGlv
bldoaXRlbGlzdC5oCShyZXZpc2lvbiAyMDA1MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Z1bmN0aW9uV2hpdGVsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgREZHRnVuY3Rpb25XaGl0ZWxpc3RfaAotI2RlZmluZSBE
RkdGdW5jdGlvbldoaXRlbGlzdF9oCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBKU0MgeyAKLQotY2xhc3MgQ29kZUJsb2NrOwotCi1uYW1lc3BhY2UgREZHIHsKLQotY2xh
c3MgRnVuY3Rpb25XaGl0ZWxpc3QgewotcHVibGljOgotICAgIHN0YXRpYyBGdW5jdGlvbldoaXRl
bGlzdCYgZW5zdXJlR2xvYmFsV2hpdGVsaXN0KCk7Ci0gICAgZXhwbGljaXQgRnVuY3Rpb25XaGl0
ZWxpc3QoY29uc3QgY2hhciopOwotCi0gICAgYm9vbCBjb250YWlucyhDb2RlQmxvY2sqKSBjb25z
dDsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHBhcnNlRnVuY3Rpb25OYW1lc0luRmlsZShjb25zdCBj
aGFyKik7Ci0KLSAgICBIYXNoU2V0PFN0cmluZz4gbV9lbnRyaWVzOwotfTsKLQotfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLSNlbmRpZiAv
LyBERkdGdW5jdGlvbldoaXRlbGlzdF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEZ1bmN0aW9uV2hpdGVsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEZ1bmN0aW9uV2hpdGVsaXN0LmNwcAkocmV2aXNpb24gMjAwNTMwKQkoZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcDoyMDA1
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEZ1bmN0aW9uV2hpdGVsaXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdGdW5jdGlvbldoaXRlbGlzdC5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJPcHRpb25z
LmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworRnVuY3Rpb25XaGl0ZWxpc3Qm
IEZ1bmN0aW9uV2hpdGVsaXN0OjplbnN1cmVHbG9iYWxXaGl0ZWxpc3QoKQoreworICAgIHN0YXRp
YyBMYXp5TmV2ZXJEZXN0cm95ZWQ8RnVuY3Rpb25XaGl0ZWxpc3Q+IGZ1bmN0aW9uV2hpdGVsaXN0
OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplV2hpdGVsaXN0RmxhZzsKKyAg
ICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplV2hpdGVsaXN0RmxhZywgW10geworICAgICAgICBj
b25zdCBjaGFyKiBmdW5jdGlvbldoaXRlbGlzdEZpbGUgPSBPcHRpb25zOjpkZmdXaGl0ZWxpc3Qo
KTsKKyAgICAgICAgZnVuY3Rpb25XaGl0ZWxpc3QuY29uc3RydWN0KGZ1bmN0aW9uV2hpdGVsaXN0
RmlsZSk7CisgICAgfSk7CisgICAgcmV0dXJuIGZ1bmN0aW9uV2hpdGVsaXN0OworfQorCitGdW5j
dGlvbldoaXRlbGlzdDo6RnVuY3Rpb25XaGl0ZWxpc3QoY29uc3QgY2hhciogZmlsZW5hbWUpCit7
CisgICAgcGFyc2VGdW5jdGlvbk5hbWVzSW5GaWxlKGZpbGVuYW1lKTsKK30KKwordm9pZCBGdW5j
dGlvbldoaXRlbGlzdDo6cGFyc2VGdW5jdGlvbk5hbWVzSW5GaWxlKGNvbnN0IGNoYXIqIGZpbGVu
YW1lKQoreworICAgIGlmICghZmlsZW5hbWUpCisgICAgICAgIHJldHVybjsKKworICAgIEZJTEUq
IGYgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKyAgICBpZiAoIWYpIHsKKyAgICAgICAgZGF0YUxv
Z0YoIkZhaWxlZCB0byBvcGVuIGZpbGUgJXMuIERpZCB5b3UgYWRkIHRoZSBmaWxlLXJlYWQtZGF0
YSBlbnRpdGxlbWVudCB0byBXZWJQcm9jZXNzLnNiP1xuIiwgZmlsZW5hbWUpOyAKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGNoYXIqIGxpbmU7CisgICAgY2hhciBidWZmZXJbQlVGU0la
XTsKKyAgICB3aGlsZSAoKGxpbmUgPSBmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBmKSkp
IHsKKyAgICAgICAgaWYgKHN0cnN0cihsaW5lLCAiLy8iKSA9PSBsaW5lKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgLy8gR2V0IHJpZCBvZiBuZXdsaW5lcyBhdCB0aGUgZW5kcyBv
ZiB0aGUgc3RyaW5ncy4KKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihsaW5lKTsKKyAg
ICAgICAgaWYgKGxpbmVbbGVuZ3RoIC0gMV0gPT0gJ1xuJykgeworICAgICAgICAgICAgbGluZVts
ZW5ndGggLSAxXSA9ICdcMCc7CisgICAgICAgICAgICBsZW5ndGgtLTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFNraXAgZW1wdHkgbGluZXMuCisgICAgICAgIGlmICghbGVuZ3RoKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBtX2VudHJpZXMuYWRkKFN0cmluZyhs
aW5lLCBsZW5ndGgpKTsKKyAgICB9CisKKyAgICBpbnQgcmVzdWx0ID0gZmNsb3NlKGYpOworICAg
IGlmIChyZXN1bHQpCisgICAgICAgIGRhdGFMb2dGKCJGYWlsZWQgdG8gY2xvc2UgZmlsZSAlczog
JXNcbiIsIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOworfQorCitib29sIEZ1bmN0aW9uV2hp
dGVsaXN0Ojpjb250YWlucyhDb2RlQmxvY2sqIGNvZGVCbG9jaykgY29uc3QgCit7CisgICAgQVNT
RVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOworICAgIGlmICghT3B0aW9uczo6ZGZnV2hpdGVs
aXN0KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKG1fZW50cmllcy5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0cmluZyBuYW1lID0gU3RyaW5nOjpm
cm9tVVRGOChjb2RlQmxvY2stPmluZmVycmVkTmFtZSgpKTsKKyAgICBpZiAobV9lbnRyaWVzLmNv
bnRhaW5zKG5hbWUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFN0cmluZyBoYXNoID0g
U3RyaW5nOjpmcm9tVVRGOChjb2RlQmxvY2stPmhhc2hBc1N0cmluZ0lmUG9zc2libGUoKSk7Cisg
ICAgaWYgKG1fZW50cmllcy5jb250YWlucyhoYXNoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICByZXR1cm4gbV9lbnRyaWVzLmNvbnRhaW5zKG5hbWUgKyAnIycgKyBoYXNoKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURnVuY3Rpb25XaGl0ZWxpc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURnVuY3Rpb25XaGl0
ZWxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEZ1bmN0aW9uV2hpdGVsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsOSArMjQsOSBAQAogICov
CiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJERkdGdW5jdGlvbldoaXRlbGlzdC5o
IgorI2luY2x1ZGUgIkpJVEZ1bmN0aW9uV2hpdGVsaXN0LmgiCiAKLSNpZiBFTkFCTEUoREZHX0pJ
VCkKKyNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
T3B0aW9ucy5oIgpAQCAtMzUsMjUgKzM1LDM4IEBACiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCi1uYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CituYW1lc3BhY2UgSlNDIHsKIAotRnVuY3Rpb25XaGl0ZWxp
c3QmIEZ1bmN0aW9uV2hpdGVsaXN0OjplbnN1cmVHbG9iYWxXaGl0ZWxpc3QoKQorSklURnVuY3Rp
b25XaGl0ZWxpc3QmIEpJVEZ1bmN0aW9uV2hpdGVsaXN0OjplbnN1cmVHbG9iYWxCYXNlbGluZVdo
aXRlbGlzdCgpCiB7Ci0gICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxGdW5jdGlvbldoaXRl
bGlzdD4gZnVuY3Rpb25XaGl0ZWxpc3Q7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxK
SVRGdW5jdGlvbldoaXRlbGlzdD4gYmFzZWxpbmVXaGl0ZWxpc3Q7CisgICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIGluaXRpYWxpemVXaGl0ZWxpc3RGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKGlu
aXRpYWxpemVXaGl0ZWxpc3RGbGFnLCBbXSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGZ1bmN0aW9u
V2hpdGVsaXN0RmlsZSA9IE9wdGlvbnM6OmJhc2VsaW5lV2hpdGVsaXN0KCk7CisgICAgICAgIGJh
c2VsaW5lV2hpdGVsaXN0LmNvbnN0cnVjdChmdW5jdGlvbldoaXRlbGlzdEZpbGUpOworICAgIH0p
OworICAgIHJldHVybiBiYXNlbGluZVdoaXRlbGlzdDsKK30KKworI2lmIEVOQUJMRShERkdfSklU
KQorSklURnVuY3Rpb25XaGl0ZWxpc3QmIEpJVEZ1bmN0aW9uV2hpdGVsaXN0OjplbnN1cmVHbG9i
YWxERkdXaGl0ZWxpc3QoKQoreworICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SklURnVu
Y3Rpb25XaGl0ZWxpc3Q+IGRmZ1doaXRlbGlzdDsKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcg
aW5pdGlhbGl6ZVdoaXRlbGlzdEZsYWc7CiAgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZVdo
aXRlbGlzdEZsYWcsIFtdIHsKICAgICAgICAgY29uc3QgY2hhciogZnVuY3Rpb25XaGl0ZWxpc3RG
aWxlID0gT3B0aW9uczo6ZGZnV2hpdGVsaXN0KCk7Ci0gICAgICAgIGZ1bmN0aW9uV2hpdGVsaXN0
LmNvbnN0cnVjdChmdW5jdGlvbldoaXRlbGlzdEZpbGUpOworICAgICAgICBkZmdXaGl0ZWxpc3Qu
Y29uc3RydWN0KGZ1bmN0aW9uV2hpdGVsaXN0RmlsZSk7CiAgICAgfSk7Ci0gICAgcmV0dXJuIGZ1
bmN0aW9uV2hpdGVsaXN0OworICAgIHJldHVybiBkZmdXaGl0ZWxpc3Q7CiB9CisjZW5kaWYKIAot
RnVuY3Rpb25XaGl0ZWxpc3Q6OkZ1bmN0aW9uV2hpdGVsaXN0KGNvbnN0IGNoYXIqIGZpbGVuYW1l
KQorSklURnVuY3Rpb25XaGl0ZWxpc3Q6OkpJVEZ1bmN0aW9uV2hpdGVsaXN0KGNvbnN0IGNoYXIq
IGZpbGVuYW1lKQogewogICAgIHBhcnNlRnVuY3Rpb25OYW1lc0luRmlsZShmaWxlbmFtZSk7CiB9
CiAKLXZvaWQgRnVuY3Rpb25XaGl0ZWxpc3Q6OnBhcnNlRnVuY3Rpb25OYW1lc0luRmlsZShjb25z
dCBjaGFyKiBmaWxlbmFtZSkKK3ZvaWQgSklURnVuY3Rpb25XaGl0ZWxpc3Q6OnBhcnNlRnVuY3Rp
b25OYW1lc0luRmlsZShjb25zdCBjaGFyKiBmaWxlbmFtZSkKIHsKICAgICBpZiAoIWZpbGVuYW1l
KQogICAgICAgICByZXR1cm47CkBAIC02NCw2ICs3Nyw4IEBAIHZvaWQgRnVuY3Rpb25XaGl0ZWxp
c3Q6OnBhcnNlRnVuY3Rpb25OYW0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIG1faGFz
QWN0aXZlV2hpdGVsaXN0ID0gdHJ1ZTsKKwogICAgIGNoYXIqIGxpbmU7CiAgICAgY2hhciBidWZm
ZXJbQlVGU0laXTsKICAgICB3aGlsZSAoKGxpbmUgPSBmZ2V0cyhidWZmZXIsIHNpemVvZihidWZm
ZXIpLCBmKSkpIHsKQEAgLTg5LDEwICsxMDQsMTAgQEAgdm9pZCBGdW5jdGlvbldoaXRlbGlzdDo6
cGFyc2VGdW5jdGlvbk5hbQogICAgICAgICBkYXRhTG9nRigiRmFpbGVkIHRvIGNsb3NlIGZpbGUg
JXM6ICVzXG4iLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKIH0KIAotYm9vbCBGdW5jdGlv
bldoaXRlbGlzdDo6Y29udGFpbnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spIGNvbnN0IAorYm9vbCBK
SVRGdW5jdGlvbldoaXRlbGlzdDo6Y29udGFpbnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spIGNvbnN0
IAogewogICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICBpZiAoIU9wdGlv
bnM6OmRmZ1doaXRlbGlzdCgpKQorICAgIGlmICghbV9oYXNBY3RpdmVXaGl0ZWxpc3QpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKG1fZW50cmllcy5pc0VtcHR5KCkpCkBAIC0xMDks
NyArMTI0LDcgQEAgYm9vbCBGdW5jdGlvbldoaXRlbGlzdDo6Y29udGFpbnMoQ29kZUJsbwogICAg
IHJldHVybiBtX2VudHJpZXMuY29udGFpbnMobmFtZSArICcjJyArIGhhc2gpOwogfQogCi19IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCit9IC8vIG5hbWVzcGFjZSBKU0MKIAotI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklURnVuY3Rpb25XaGl0ZWxpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEZ1bmN0aW9uV2hpdGVsaXN0LmgJKHJldmlzaW9uIDIw
MDUzMCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGdW5jdGlvbldoaXRlbGlz
dC5oOjIwMDUzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURnVuY3Rpb25XaGl0
ZWxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBERkdGdW5jdGlvbldoaXRlbGlzdF9oCisjZGVmaW5lIERGR0Z1bmN0aW9uV2hpdGVsaXN0
X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IAorCitjbGFz
cyBDb2RlQmxvY2s7CisKK25hbWVzcGFjZSBERkcgeworCitjbGFzcyBGdW5jdGlvbldoaXRlbGlz
dCB7CitwdWJsaWM6CisgICAgc3RhdGljIEZ1bmN0aW9uV2hpdGVsaXN0JiBlbnN1cmVHbG9iYWxX
aGl0ZWxpc3QoKTsKKyAgICBleHBsaWNpdCBGdW5jdGlvbldoaXRlbGlzdChjb25zdCBjaGFyKik7
CisKKyAgICBib29sIGNvbnRhaW5zKENvZGVCbG9jayopIGNvbnN0OworCitwcml2YXRlOgorICAg
IHZvaWQgcGFyc2VGdW5jdGlvbk5hbWVzSW5GaWxlKGNvbnN0IGNoYXIqKTsKKworICAgIEhhc2hT
ZXQ8U3RyaW5nPiBtX2VudHJpZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Z1bmN0aW9uV2hpdGVs
aXN0X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURnVuY3Rpb25XaGl0ZWxp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEZ1bmN0aW9u
V2hpdGVsaXN0LmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklURnVuY3Rpb25XaGl0ZWxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMTAgKzIzLDEwIEBACiAg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBERkdGdW5j
dGlvbldoaXRlbGlzdF9oCi0jZGVmaW5lIERGR0Z1bmN0aW9uV2hpdGVsaXN0X2gKKyNpZm5kZWYg
SklURnVuY3Rpb25XaGl0ZWxpc3RfaAorI2RlZmluZSBKSVRGdW5jdGlvbldoaXRlbGlzdF9oCiAK
LSNpZiBFTkFCTEUoREZHX0pJVCkKKyNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTM1LDEyICszNSwx
NCBAQCBuYW1lc3BhY2UgSlNDIHsgCiAKIGNsYXNzIENvZGVCbG9jazsKIAotbmFtZXNwYWNlIERG
RyB7Ci0KLWNsYXNzIEZ1bmN0aW9uV2hpdGVsaXN0IHsKK2NsYXNzIEpJVEZ1bmN0aW9uV2hpdGVs
aXN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgRnVuY3Rpb25XaGl0ZWxpc3QmIGVuc3VyZUdsb2Jh
bFdoaXRlbGlzdCgpOwotICAgIGV4cGxpY2l0IEZ1bmN0aW9uV2hpdGVsaXN0KGNvbnN0IGNoYXIq
KTsKKyAgICBzdGF0aWMgSklURnVuY3Rpb25XaGl0ZWxpc3QmIGVuc3VyZUdsb2JhbEJhc2VsaW5l
V2hpdGVsaXN0KCk7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgc3RhdGljIEpJVEZ1bmN0aW9u
V2hpdGVsaXN0JiBlbnN1cmVHbG9iYWxERkdXaGl0ZWxpc3QoKTsKKyNlbmRpZgorCisgICAgZXhw
bGljaXQgSklURnVuY3Rpb25XaGl0ZWxpc3QoY29uc3QgY2hhciopOwogCiAgICAgYm9vbCBjb250
YWlucyhDb2RlQmxvY2sqKSBjb25zdDsKIApAQCAtNDgsMTAgKzUwLDExIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBwYXJzZUZ1bmN0aW9uTmFtZXNJbkZpbGUoY29uc3QgY2hhciopOwogCiAgICAgSGFz
aFNldDxTdHJpbmc+IG1fZW50cmllczsKKyAgICBib29sIG1faGFzQWN0aXZlV2hpdGVsaXN0IHsg
ZmFsc2UgfTsKIH07CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKK30gLy8gbmFtZXNwYWNl
IEpTQwogCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
IAotI2VuZGlmIC8vIERGR0Z1bmN0aW9uV2hpdGVsaXN0X2gKKyNlbmRpZiAvLyBKSVRGdW5jdGlv
bldoaXRlbGlzdF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDIwMDUzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcg
QEAKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUg
IkpJVEV4Y2VwdGlvbnMuaCIKKyNpbmNsdWRlICJKSVRGdW5jdGlvbldoaXRlbGlzdC5oIgogI2lu
Y2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKQEAgLTI4Nyw4ICsyODgsMTIgQEAgTExJTlRfU0xPV19Q
QVRIX0RFQ0woc3BlY2lhbF90cmFjZSkKIGVudW0gRW50cnlLaW5kIHsgUHJvbG9ndWUsIEFyaXR5
Q2hlY2sgfTsKIAogI2lmIEVOQUJMRShKSVQpCi1pbmxpbmUgYm9vbCBzaG91bGRKSVQoRXhlY1N0
YXRlKiBleGVjLCBDb2RlQmxvY2sqKQoraW5saW5lIGJvb2wgc2hvdWxkSklUKEV4ZWNTdGF0ZSog
ZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CisgICAgaWYgKCFPcHRpb25zOjpieXRlY29k
ZVJhbmdlVG9CYXNlbGluZUNvbXBpbGUoKS5pc0luUmFuZ2UoY29kZUJsb2NrLT5pbnN0cnVjdGlv
bkNvdW50KCkpCisgICAgICAgIHx8ICFKSVRGdW5jdGlvbldoaXRlbGlzdDo6ZW5zdXJlR2xvYmFs
QmFzZWxpbmVXaGl0ZWxpc3QoKS5jb250YWlucyhjb2RlQmxvY2spKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKICAgICAvLyBZb3UgY2FuIG1vZGlmeSB0aGlzIHRvIHR1cm4gb2ZmIEpJVHRpbmcg
d2l0aG91dCByZWJ1aWxkaW5nIHRoZSB3b3JsZC4KICAgICByZXR1cm4gZXhlYy0+dm0oKS5jYW5V
c2VKSVQoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJ
KHJldmlzaW9uIDIwMDUzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDggKzE0NSwxMCBAQCB0eXBlZGVmIGNvbnN0IGNo
YXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2wsIGR1bXBERkdEaXNhc3NlbWJseSwgZmFsc2Us
IE5vcm1hbCwgImR1bXBzIGRpc2Fzc2VtYmx5IG9mIERGRyBmdW5jdGlvbiB1cG9uIGNvbXBpbGF0
aW9uIikgXAogICAgIHYoYm9vbCwgZHVtcEZUTERpc2Fzc2VtYmx5LCBmYWxzZSwgTm9ybWFsLCAi
ZHVtcHMgZGlzYXNzZW1ibHkgb2YgRlRMIGZ1bmN0aW9uIHVwb24gY29tcGlsYXRpb24iKSBcCiAg
ICAgdihib29sLCBkdW1wQWxsREZHTm9kZXMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAg
ICB2KG9wdGlvblJhbmdlLCBieXRlY29kZVJhbmdlVG9CYXNlbGluZUNvbXBpbGUsIDAsIE5vcm1h
bCwgImJ5dGVjb2RlIHNpemUgcmFuZ2UgdG8gYWxsb3cgQmFzZWxpbmUgSklUIGNvbXBpbGF0aW9u
IG9uLCBlLmcuIDE6MTAwIikgXAogICAgIHYob3B0aW9uUmFuZ2UsIGJ5dGVjb2RlUmFuZ2VUb0RG
R0NvbXBpbGUsIDAsIE5vcm1hbCwgImJ5dGVjb2RlIHNpemUgcmFuZ2UgdG8gYWxsb3cgREZHIGNv
bXBpbGF0aW9uIG9uLCBlLmcuIDE6MTAwIikgXAogICAgIHYob3B0aW9uUmFuZ2UsIGJ5dGVjb2Rl
UmFuZ2VUb0ZUTENvbXBpbGUsIDAsIE5vcm1hbCwgImJ5dGVjb2RlIHNpemUgcmFuZ2UgdG8gYWxs
b3cgRlRMIGNvbXBpbGF0aW9uIG9uLCBlLmcuIDE6MTAwIikgXAorICAgIHYob3B0aW9uU3RyaW5n
LCBiYXNlbGluZVdoaXRlbGlzdCwgbnVsbHB0ciwgTm9ybWFsLCAiZmlsZSB3aXRoIGxpc3Qgb2Yg
ZnVuY3Rpb24gc2lnbmF0dXJlcyB0byBhbGxvdyBCYXNlbGluZSBKSVQgY29tcGlsYXRpb24gb24i
KSBcCiAgICAgdihvcHRpb25TdHJpbmcsIGRmZ1doaXRlbGlzdCwgbnVsbHB0ciwgTm9ybWFsLCAi
ZmlsZSB3aXRoIGxpc3Qgb2YgZnVuY3Rpb24gc2lnbmF0dXJlcyB0byBhbGxvdyBERkcgY29tcGls
YXRpb24gb24iKSBcCiAgICAgdihib29sLCBkdW1wU291cmNlQXRERkdUaW1lLCBmYWxzZSwgTm9y
bWFsLCAiZHVtcHMgc291cmNlIGNvZGUgb2YgSlMgZnVuY3Rpb24gYmVpbmcgREZHIGNvbXBpbGVk
IikgXAogICAgIHYoYm9vbCwgZHVtcEJ5dGVjb2RlQXRERkdUaW1lLCBmYWxzZSwgTm9ybWFsLCAi
ZHVtcHMgYnl0ZWNvZGUgb2YgSlMgZnVuY3Rpb24gYmVpbmcgREZHIGNvbXBpbGVkIikgXAo=
</data>
<flag name="review"
          id="302409"
          type_id="1"
          status="-"
          setter="msaboff"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278308</attachid>
            <date>2016-05-06 18:54:45 -0700</date>
            <delta_ts>2016-05-07 07:40:41 -0700</delta_ts>
            <desc>proposed patch with Michael&apos;s feedback.</desc>
            <filename>bug-157428.patch</filename>
            <type>text/plain</type>
            <size>33189</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAwNTM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBA
CisyMDE2LTA1LTA2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgSlNDIG9wdGlvbnMgYnl0ZWNvZGVSYW5nZVRvSklUQ29tcGlsZSBhbmQgaml0V2hpdGVsaXN0
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3NDI4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgMS4gQWRk
ZWQgT3B0aW9uczo6Ynl0ZWNvZGVSYW5nZVRvSklUQ29tcGlsZSBhbmQgT3B0aW9uczo6aml0V2hp
dGVsaXN0IG9wdGlvbnMuCisKKyAgICAgICAgMi4gTW92ZWQgREZHRnVuY3Rpb25XaGl0ZWxpc3Qq
IHRvIEZ1bmN0aW9uV2hpdGVsaXN0KiBhbmQgbWFkZSBpdCBnZW5lcmljIHNvIHRoYXQKKyAgICAg
ICAgICAgaXQgY2FuIGJlIHVzZWQgZm9yIG1vcmUgdGhhbiBvbmUgd2hpdGVsaXN0IGluc3RhbmNl
LiAgSW4gdGhpcyBjYXNlLCB3ZSBub3cgaGF2ZQorICAgICAgICAgICB0d286IHRoZSBkZmdXaGl0
ZWxpc3QgYW5kIHRoZSBqaXRXaGl0ZWxpc3QuCisKKyAgICAgICAgMy4gQWRkZWQgImNhbiBjb21w
aWxlIiBjaGVja3MgaW4gTExJbnQ6OnNob3VsZEpJVCgpIHRvIGNoZWNrCisgICAgICAgICAgIE9w
dGlvbnM6OmJ5dGVjb2RlUmFuZ2VUb0pJVENvbXBpbGUgYW5kIE9wdGlvbnM6OmppdFdoaXRlbGlz
dC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Z2V0TnVtQ29tcGlsYXRpb25zKToKKyAgICAgICAgKEpTQzo6
REZHOjplbnN1cmVHbG9iYWxERkdXaGl0ZWxpc3QpOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBp
bGVJbXBsKToKKyAgICAgICAgKiBkZmcvREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIGRmZy9ERkdGdW5jdGlvbldoaXRlbGlzdC5oOiBSZW1vdmVkLgorCisgICAg
ICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6ZW5z
dXJlR2xvYmFsSklUV2hpdGVsaXN0KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNob3VsZEpJVCk6
CisKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKworICAgICAgICAqIHRvb2xzL0Z1bmN0
aW9uV2hpdGVsaXN0LmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGdW5jdGlvbldoaXRlbGlzdC5jcHAuCisgICAgICAgIChKU0M6OkZ1bmN0aW9uV2hpdGVsaXN0
OjpGdW5jdGlvbldoaXRlbGlzdCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uV2hpdGVsaXN0Ojpj
b250YWlucyk6CisgICAgICAgIChKU0M6OkRGRzo6RnVuY3Rpb25XaGl0ZWxpc3Q6OmVuc3VyZUds
b2JhbFdoaXRlbGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6RnVuY3Rpb25XaGl0
ZWxpc3Q6OkZ1bmN0aW9uV2hpdGVsaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpG
dW5jdGlvbldoaXRlbGlzdDo6cGFyc2VGdW5jdGlvbk5hbWVzSW5GaWxlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpGdW5jdGlvbldoaXRlbGlzdDo6Y29udGFpbnMpOiBEZWxldGVkLgor
ICAgICAgICAqIHRvb2xzL0Z1bmN0aW9uV2hpdGVsaXN0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRnVuY3Rpb25XaGl0ZWxpc3QuaC4KKwogMjAxNi0wNS0wNiAg
U2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBFbmFibGUg
SU9TX1RFWFRfQVVUT1NJWklORyBvbiBNYWMgYW5kIG1ha2UgaXQgdGVzdGFibGUKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwMDUzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDcg
KzI4OSw2IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0ZsdXNoZWRB
dC5jcHAKICAgICBkZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAK
ICAgICBkZmcvREZHRnJvemVuVmFsdWUuY3BwCi0gICAgZGZnL0RGR0Z1bmN0aW9uV2hpdGVsaXN0
LmNwcAogICAgIGRmZy9ERkdHcmFwaC5jcHAKICAgICBkZmcvREZHR3JhcGhTYWZlcG9pbnQuY3Bw
CiAgICAgZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKQEAgLTgyNiw2ICs4MjUsNyBAQCBzZXQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHRvb2xzL0NvZGVQcm9maWxlLmNwcAogICAgIHRvb2xz
L0NvZGVQcm9maWxpbmcuY3BwCiAgICAgdG9vbHMvRnVuY3Rpb25PdmVycmlkZXMuY3BwCisgICAg
dG9vbHMvRnVuY3Rpb25XaGl0ZWxpc3QuY3BwCiAgICAgdG9vbHMvSlNEb2xsYXJWTS5jcHAKICAg
ICB0b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjAwNTMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTExMzEsOCArMTEzMSw2IEBACiAJCTJBODM2Mzg2MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NB
Y3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyQTgzNjM4NDE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFj
ay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJB
ODM2Mzg5MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBODM2Mzg3MThEN0Qw
RkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLzsgfTsKIAkJMkE4MzYz
OEExOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBODM2Mzg4MThEN0QwRkUwMDAw
RUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMkE4ODA2NzgxOTEwN0Q1NTAwQ0IwQkJCIC8qIERG
R0Z1bmN0aW9uV2hpdGVsaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJBODgwNjc2MTkxMDdENTUwMENCMEJCQiAvKiBERkdGdW5jdGlvbldoaXRl
bGlzdC5jcHAgKi87IH07Ci0JCTJBODgwNjc5MTkxMDdENTUwMENCMEJCQiAvKiBERkdGdW5jdGlv
bldoaXRlbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkE4ODA2NzcxOTEwN0Q1NTAwQ0IwQkJCIC8qIERGR0Z1bmN0aW9uV2hpdGVsaXN0LmggKi87
IH07CiAJCTJBQUFBMzEyMThCRDQ5RDEwMDM5NENDOCAvKiBTdHJ1Y3R1cmVJREJsb2IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBQUFBMzEwMThCRDQ5
RDEwMDM5NENDOCAvKiBTdHJ1Y3R1cmVJREJsb2IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyQUFCQ0RFNzE4RUYyOTQyMDAwMDIwOTYgLyogR0NM
b2dnaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
QUFCQ0RFNjE4RUYyOTQyMDAwMDIwOTYgLyogR0NMb2dnaW5nLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkFBQ0U2M0MxOENBNUEwMzAwRUQwMTkx
IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyQUFDRTYzQTE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNh
bGxiYWNrLmNwcCAqLzsgfTsKQEAgLTIwOTQsNiArMjA5Miw4IEBACiAJCUZFOTlCMjRBMUMyNEMz
RDcwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5OUIyNDcxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5l
Z0dlbmVyYXRvci5jcHAgKi87IH07CiAJCUZFQTA4NjIwMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVh
a3BvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RUEwODYxRTE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFQTA4NjIxMTgyQjdBMDQwMEY2RDg1
MSAvKiBEZWJ1Z2dlclByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFGMTgyQjdBMDQwMEY2RDg1MSAvKiBEZWJ1Z2dlclByaW1p
dGl2ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQlGRUEwQzQwMjFDREQ3RDFEMDA0ODE5OTEgLyogRnVuY3Rpb25XaGl0ZWxpc3QuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVBMEM0MDAxQ0REN0Qw
RTAwNDgxOTkxIC8qIEZ1bmN0aW9uV2hpdGVsaXN0LmNwcCAqLzsgfTsKKwkJRkVBMEM0MDMxQ0RE
N0QxRDAwNDgxOTkxIC8qIEZ1bmN0aW9uV2hpdGVsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwQzQwMTFDREQ3RDBFMDA0ODE5OTEgLyogRnVu
Y3Rpb25XaGl0ZWxpc3QuaCAqLzsgfTsKIAkJRkVBMUU0MzkxQzIxM0EyQjAwMjc3QTE2IC8qIFZh
bHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRUExRTQzODFDMjEzQTI2MDAyNzdBMTYgLyogVmFsdWVQcm9maWxlLmNwcCAqLzsgfTsK
IAkJRkVCMTM3NTcxQkIxMUVGOTAwQ0Q1MTAwIC8qIE1hY3JvQXNzZW1ibGVyQVJNNjQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVCMTM3NTYxQkIx
MUVFRTAwQ0Q1MTAwIC8qIE1hY3JvQXNzZW1ibGVyQVJNNjQuY3BwICovOyB9OwogCQlGRUI1MUY2
QzFBOTdCNjg4MDAxRjkyMUMgLyogUmVncmVzczE0MTgwOS5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQjUxRjZCMUE5N0I2ODgwMDFGOTIxQyAvKiBS
ZWdyZXNzMTQxODA5Lm1tICovOyB9OwpAQCAtMzI2NSw4ICszMjY1LDYgQEAKIAkJMkE4MzYzODQx
OEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyQTgzNjM4NzE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0
aXZpdHlDYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
dWxsR0NBY3Rpdml0eUNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MkE4MzYzODgxOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQTg4MDY3NjE5MTA3RDU1MDBDQjBCQkIgLyog
REZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwOyBwYXRoID0gZGZnL0RGR0Z1bmN0aW9uV2hp
dGVsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkE4ODA2NzcxOTEwN0Q1
NTAwQ0IwQkJCIC8qIERGR0Z1bmN0aW9uV2hpdGVsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0Z1bmN0aW9uV2hpdGVsaXN0Lmg7IHBhdGggPSBkZmcvREZHRnVuY3Rp
b25XaGl0ZWxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFBQUEzMTAxOEJE
NDlEMTAwMzk0Q0M4IC8qIFN0cnVjdHVyZUlEQmxvYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdHJ1Y3R1cmVJREJsb2IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkFBQkNERTYxOEVGMjk0MjAwMDAyMDk2IC8qIEdDTG9nZ2luZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHQ0xvZ2dpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMkFBQ0U2M0ExOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ0FjdGl2aXR5Q2FsbGJhY2su
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDM0Nyw2ICs0MzQ1LDggQEAKIAkJ
RkU5OUIyNDgxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKSVROZWdHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnJlYWtwb2ludC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRUEwODYxRjE4MkI3QTA0MDBGNkQ4NTEgLyogRGVidWdnZXJQ
cmltaXRpdmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyUHJp
bWl0aXZlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRUEwQzQwMDFDREQ3RDBF
MDA0ODE5OTEgLyogRnVuY3Rpb25XaGl0ZWxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRnVuY3Rpb25XaGl0ZWxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRUEwQzQwMTFDREQ3RDBFMDA0ODE5OTEgLyogRnVuY3Rpb25XaGl0ZWxpc3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVuY3Rpb25XaGl0ZWxpc3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVBMUU0MzgxQzIxM0EyNjAwMjc3QTE2IC8q
IFZhbHVlUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBW
YWx1ZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUIxMzc1NjFC
QjExRUVFMDBDRDUxMDAgLyogTWFjcm9Bc3NlbWJsZXJBUk02NC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0Fzc2VtYmxlckFSTTY0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVCNTFGNkExQTk3QjY4ODAwMUY5MjFDIC8qIFJlZ3Jlc3Mx
NDE4MDkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVncmVzczE0MTgwOS5o
OyBwYXRoID0gQVBJL3Rlc3RzL1JlZ3Jlc3MxNDE4MDkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTYwNjAsNiArNjA2MCw4IEBACiAJCQkJODYwM0NFRjMxNEM3NTQ2NDAwQUU1OUUz
IC8qIENvZGVQcm9maWxpbmcuaCAqLywKIAkJCQlGRTRCRkYyOTFBRDQ3NkU3MDAwODhGODcgLyog
RnVuY3Rpb25PdmVycmlkZXMuY3BwICovLAogCQkJCUZFNEJGRjJBMUFENDc2RTcwMDA4OEY4NyAv
KiBGdW5jdGlvbk92ZXJyaWRlcy5oICovLAorCQkJCUZFQTBDNDAwMUNERDdEMEUwMDQ4MTk5MSAv
KiBGdW5jdGlvbldoaXRlbGlzdC5jcHAgKi8sCisJCQkJRkVBMEM0MDExQ0REN0QwRTAwNDgxOTkx
IC8qIEZ1bmN0aW9uV2hpdGVsaXN0LmggKi8sCiAJCQkJRkUzODRFRTExQUREQjdBRDAwNTVERTJD
IC8qIEpTRG9sbGFyVk0uY3BwICovLAogCQkJCUZFMzg0RUUyMUFEREI3QUQwMDU1REUyQyAvKiBK
U0RvbGxhclZNLmggKi8sCiAJCQkJRkUzODRFRTMxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFy
Vk1Qcm90b3R5cGUuY3BwICovLApAQCAtNjIxNCw4ICs2MjE2LDYgQEAKIAkJCQkwRjJERDgxMDFB
QjNEOEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCAqLywKIAkJCQkwRjY5Q0M4NjE5M0FD
NjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuY3BwICovLAogCQkJCTBGNjlDQzg3MTkzQUM2
MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oICovLAotCQkJCTJBODgwNjc2MTkxMDdENTUw
MENCMEJCQiAvKiBERkdGdW5jdGlvbldoaXRlbGlzdC5jcHAgKi8sCi0JCQkJMkE4ODA2NzcxOTEw
N0Q1NTAwQ0IwQkJCIC8qIERGR0Z1bmN0aW9uV2hpdGVsaXN0LmggKi8sCiAJCQkJODZFQzlEQjYx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmggKi8sCiAJCQkJODZFQzlEQjcx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmNwcCAqLywKIAkJCQk4NkVDOURCODEzMjhERjgy
MDAyQjJBRDcgLyogREZHR3JhcGguaCAqLywKQEAgLTcwNzgsNiArNzA3OCw3IEBACiAJCQkJOTlE
QTAwQTgxQkQ1OTkzMTAwRjQ1NzVDIC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2NvbWJpbmVkX2ltcGxl
bWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJOTlEQTAwQTkxQkQ1OTkzMTAwRjQ1NzVD
IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX3NlcGFyYXRlX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAog
CQkJCTBGMzM4RTExMUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVjdC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRkVBMEM0MDMxQ0REN0QxRDAwNDgxOTkxIC8qIEZ1bmN0aW9uV2hpdGVs
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBBQTFCRDU5OTMxMDBGNDU3NUMgLyogYnVp
bHRpbnNfZ2VuZXJhdGVfc2VwYXJhdGVfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywK
IAkJCQk5OURBMDBBMzFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfZ2VuZXJhdG9yLnB5IGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkUzQTA2QTYxQzEwQjcyRDAwMzkwRkREIC8qIEpJVEJpdE9yR2Vu
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTcyNjcsNyArNzI2OCw2IEBACiAJCQkJQTdEODlD
RjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJERDgxNTFBQjNEOEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNjlDQzg5MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMkE4ODA2NzkxOTEwN0Q1NTAwQ0IwQkJCIC8qIERGR0Z1bmN0aW9u
V2hpdGVsaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDNjEzMjhERjgyMDAyQjJBRDcg
LyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM4MTMyOERG
ODIwMDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRkNDRkExOEE2
MDA3MDAwMUEyN0Y4IC8qIERGR0dyYXBoU2FmZXBvaW50LmggaW4gSGVhZGVycyAqLywKQEAgLTg4
MzQsNyArODgzNCw2IEBACiAJCQkJMEY5RDMzOTYxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNo
ZWRBdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGNzE3QTBCOENDMDA3NzNBRDggLyog
REZHRmx1c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2OUNDODgxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJBODgwNjc4
MTkxMDdENTUwMENCMEJCQiAvKiBERkdGdW5jdGlvbldoaXRlbGlzdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4NkVDOURDNzEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYyRkNDRjkxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR0dyYXBoU2FmZXBvaW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjE3NjYwMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdI
ZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04ODQ5LDYgKzg4NDgsNyBAQAogCQkJ
CTg2RUM5RENCMTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzhBOTc3ODE3OTczOEI4MDA5REY3NDQgLyogREZHSklURmluYWxpemVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzk3RjNGMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdKdW1w
UmVwbGFjZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkVBMEM0MDIxQ0REN0QxRDAwNDgx
OTkxIC8qIEZ1bmN0aW9uV2hpdGVsaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3M0E1MzVB
MTc5OUNENUQwMDE3MEMxOSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk2MkYyQUEzNzFCMEJFREUzMDA2MTBDN0EgLyogREZHTGF6eU5vZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdEOUEyOTcxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0xJQ01QaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJ
KHJldmlzaW9uIDIwMDUzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTYgKzMwLDE3IEBACiAjaW5jbHVkZSAiSlNTdHJp
bmcuaCIKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkRGR0Z1bmN0aW9uV2hp
dGVsaXN0LmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR1BsYW4uaCIK
ICNpbmNsdWRlICJERkdUaHVua3MuaCIKICNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgorI2luY2x1
ZGUgIkZ1bmN0aW9uV2hpdGVsaXN0LmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCiAjaW5jbHVkZSAiVHlwZVByb2Zp
bGVyTG9nLmgiCiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KIAogI2lmIEVOQUJMRShGVExfSklUKQogI2luY2x1ZGUgIkZUTFRodW5rcy5o
IgpAQCAtNTUsMTMgKzU2LDI0IEBAIHVuc2lnbmVkIGdldE51bUNvbXBpbGF0aW9ucygpCiB9CiAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKK3N0YXRpYyBGdW5jdGlvbldoaXRlbGlzdCYgZW5zdXJlR2xv
YmFsREZHV2hpdGVsaXN0KCkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEZ1bmN0
aW9uV2hpdGVsaXN0PiBkZmdXaGl0ZWxpc3Q7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGlu
aXRpYWxpemVXaGl0ZWxpc3RGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVXaGl0
ZWxpc3RGbGFnLCBbXSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGZ1bmN0aW9uV2hpdGVsaXN0Rmls
ZSA9IE9wdGlvbnM6OmRmZ1doaXRlbGlzdCgpOworICAgICAgICBkZmdXaGl0ZWxpc3QuY29uc3Ry
dWN0KGZ1bmN0aW9uV2hpdGVsaXN0RmlsZSk7CisgICAgfSk7CisgICAgcmV0dXJuIGRmZ1doaXRl
bGlzdDsKK30KKwogc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxv
Y2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLAogICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJ
bmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMsCiAgICAgUGFz
c1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrKQogewogICAgIGlm
ICghT3B0aW9uczo6Ynl0ZWNvZGVSYW5nZVRvREZHQ29tcGlsZSgpLmlzSW5SYW5nZShjb2RlQmxv
Y2stPmluc3RydWN0aW9uQ291bnQoKSkKLSAgICAgICAgfHwgIUZ1bmN0aW9uV2hpdGVsaXN0Ojpl
bnN1cmVHbG9iYWxXaGl0ZWxpc3QoKS5jb250YWlucyhjb2RlQmxvY2spKQorICAgICAgICB8fCAh
ZW5zdXJlR2xvYmFsREZHV2hpdGVsaXN0KCkuY29udGFpbnMoY29kZUJsb2NrKSkKICAgICAgICAg
cmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwogICAgIAogICAgIG51bUNvbXBpbGF0aW9ucysrOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGdW5jdGlvbldoaXRlbGlzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGdW5jdGlvbldoaXRl
bGlzdC5jcHAJKHJldmlzaW9uIDIwMDUzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExNSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR0Z1bmN0aW9u
V2hpdGVsaXN0LmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgotI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUg
PHN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewotCi1GdW5jdGlvbldoaXRlbGlzdCYgRnVuY3Rpb25XaGl0ZWxpc3Q6OmVuc3VyZUdsb2JhbFdo
aXRlbGlzdCgpCi17Ci0gICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxGdW5jdGlvbldoaXRl
bGlzdD4gZnVuY3Rpb25XaGl0ZWxpc3Q7Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRp
YWxpemVXaGl0ZWxpc3RGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVXaGl0ZWxp
c3RGbGFnLCBbXSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGZ1bmN0aW9uV2hpdGVsaXN0RmlsZSA9
IE9wdGlvbnM6OmRmZ1doaXRlbGlzdCgpOwotICAgICAgICBmdW5jdGlvbldoaXRlbGlzdC5jb25z
dHJ1Y3QoZnVuY3Rpb25XaGl0ZWxpc3RGaWxlKTsKLSAgICB9KTsKLSAgICByZXR1cm4gZnVuY3Rp
b25XaGl0ZWxpc3Q7Ci19Ci0KLUZ1bmN0aW9uV2hpdGVsaXN0OjpGdW5jdGlvbldoaXRlbGlzdChj
b25zdCBjaGFyKiBmaWxlbmFtZSkKLXsKLSAgICBwYXJzZUZ1bmN0aW9uTmFtZXNJbkZpbGUoZmls
ZW5hbWUpOwotfQotCi12b2lkIEZ1bmN0aW9uV2hpdGVsaXN0OjpwYXJzZUZ1bmN0aW9uTmFtZXNJ
bkZpbGUoY29uc3QgY2hhciogZmlsZW5hbWUpCi17Ci0gICAgaWYgKCFmaWxlbmFtZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgRklMRSogZiA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOwotICAgIGlm
ICghZikgewotICAgICAgICBkYXRhTG9nRigiRmFpbGVkIHRvIG9wZW4gZmlsZSAlcy4gRGlkIHlv
dSBhZGQgdGhlIGZpbGUtcmVhZC1kYXRhIGVudGl0bGVtZW50IHRvIFdlYlByb2Nlc3Muc2I/XG4i
LCBmaWxlbmFtZSk7IAotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2hhciogbGluZTsK
LSAgICBjaGFyIGJ1ZmZlcltCVUZTSVpdOwotICAgIHdoaWxlICgobGluZSA9IGZnZXRzKGJ1ZmZl
ciwgc2l6ZW9mKGJ1ZmZlciksIGYpKSkgewotICAgICAgICBpZiAoc3Ryc3RyKGxpbmUsICIvLyIp
ID09IGxpbmUpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBHZXQgcmlkIG9m
IG5ld2xpbmVzIGF0IHRoZSBlbmRzIG9mIHRoZSBzdHJpbmdzLgotICAgICAgICBzaXplX3QgbGVu
Z3RoID0gc3RybGVuKGxpbmUpOwotICAgICAgICBpZiAobGluZVtsZW5ndGggLSAxXSA9PSAnXG4n
KSB7Ci0gICAgICAgICAgICBsaW5lW2xlbmd0aCAtIDFdID0gJ1wwJzsKLSAgICAgICAgICAgIGxl
bmd0aC0tOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2tpcCBlbXB0eSBsaW5lcy4KLSAgICAg
ICAgaWYgKCFsZW5ndGgpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAg
IG1fZW50cmllcy5hZGQoU3RyaW5nKGxpbmUsIGxlbmd0aCkpOwotICAgIH0KLQotICAgIGludCBy
ZXN1bHQgPSBmY2xvc2UoZik7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgZGF0YUxvZ0YoIkZh
aWxlZCB0byBjbG9zZSBmaWxlICVzOiAlc1xuIiwgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7
Ci19Ci0KLWJvb2wgRnVuY3Rpb25XaGl0ZWxpc3Q6OmNvbnRhaW5zKENvZGVCbG9jayogY29kZUJs
b2NrKSBjb25zdCAKLXsKLSAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAg
aWYgKCFPcHRpb25zOjpkZmdXaGl0ZWxpc3QoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBpZiAobV9lbnRyaWVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
U3RyaW5nIG5hbWUgPSBTdHJpbmc6OmZyb21VVEY4KGNvZGVCbG9jay0+aW5mZXJyZWROYW1lKCkp
OwotICAgIGlmIChtX2VudHJpZXMuY29udGFpbnMobmFtZSkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgU3RyaW5nIGhhc2ggPSBTdHJpbmc6OmZyb21VVEY4KGNvZGVCbG9jay0+aGFzaEFz
U3RyaW5nSWZQb3NzaWJsZSgpKTsKLSAgICBpZiAobV9lbnRyaWVzLmNvbnRhaW5zKGhhc2gpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBtX2VudHJpZXMuY29udGFpbnMobmFt
ZSArICcjJyArIGhhc2gpOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGdW5jdGlvbldoaXRlbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRnVuY3Rpb25XaGl0ZWxpc3QuaAkocmV2aXNpb24gMjAwNTMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGdW5jdGlvbldoaXRlbGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERGR0Z1bmN0aW9uV2hpdGVs
aXN0X2gKLSNkZWZpbmUgREZHRnVuY3Rpb25XaGl0ZWxpc3RfaAotCi0jaWYgRU5BQkxFKERGR19K
SVQpCi0KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgSlNDIHsgCi0KLWNsYXNzIENvZGVCbG9jazsKLQotbmFtZXNw
YWNlIERGRyB7Ci0KLWNsYXNzIEZ1bmN0aW9uV2hpdGVsaXN0IHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgRnVuY3Rpb25XaGl0ZWxpc3QmIGVuc3VyZUdsb2JhbFdoaXRlbGlzdCgpOwotICAgIGV4cGxp
Y2l0IEZ1bmN0aW9uV2hpdGVsaXN0KGNvbnN0IGNoYXIqKTsKLQotICAgIGJvb2wgY29udGFpbnMo
Q29kZUJsb2NrKikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBwYXJzZUZ1bmN0aW9uTmFt
ZXNJbkZpbGUoY29uc3QgY2hhciopOwotCi0gICAgSGFzaFNldDxTdHJpbmc+IG1fZW50cmllczsK
LX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQotCi0jZW5kaWYgLy8gREZHRnVuY3Rpb25XaGl0ZWxpc3RfaApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyMDA1
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRXJyb3JIYW5kbGluZ1Nj
b3BlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uRnV6ei5o
IgorI2luY2x1ZGUgIkZ1bmN0aW9uV2hpdGVsaXN0LmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVy
LmgiCiAjaW5jbHVkZSAiSG9zdENhbGxSZXR1cm5WYWx1ZS5oIgogI2luY2x1ZGUgIkludGVycHJl
dGVyLmgiCkBAIC01Niw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiU2hhZG93Q2hpY2tlbi5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5o
IgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQ
cmludFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKQEAgLTI4
Nyw4ICsyODksMjMgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc3BlY2lhbF90cmFjZSkKIGVudW0g
RW50cnlLaW5kIHsgUHJvbG9ndWUsIEFyaXR5Q2hlY2sgfTsKIAogI2lmIEVOQUJMRShKSVQpCi1p
bmxpbmUgYm9vbCBzaG91bGRKSVQoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqKQorc3RhdGlj
IEZ1bmN0aW9uV2hpdGVsaXN0JiBlbnN1cmVHbG9iYWxKSVRXaGl0ZWxpc3QoKQogeworICAgIHN0
YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8RnVuY3Rpb25XaGl0ZWxpc3Q+IGJhc2VsaW5lV2hpdGVs
aXN0OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplV2hpdGVsaXN0RmxhZzsK
KyAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplV2hpdGVsaXN0RmxhZywgW10geworICAgICAg
ICBjb25zdCBjaGFyKiBmdW5jdGlvbldoaXRlbGlzdEZpbGUgPSBPcHRpb25zOjpqaXRXaGl0ZWxp
c3QoKTsKKyAgICAgICAgYmFzZWxpbmVXaGl0ZWxpc3QuY29uc3RydWN0KGZ1bmN0aW9uV2hpdGVs
aXN0RmlsZSk7CisgICAgfSk7CisgICAgcmV0dXJuIGJhc2VsaW5lV2hpdGVsaXN0OworfQorCitp
bmxpbmUgYm9vbCBzaG91bGRKSVQoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aykKK3sKKyAgICBpZiAoIU9wdGlvbnM6OmJ5dGVjb2RlUmFuZ2VUb0pJVENvbXBpbGUoKS5pc0lu
UmFuZ2UoY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkpCisgICAgICAgIHx8ICFlbnN1cmVH
bG9iYWxKSVRXaGl0ZWxpc3QoKS5jb250YWlucyhjb2RlQmxvY2spKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKICAgICAvLyBZb3UgY2FuIG1vZGlmeSB0aGlzIHRvIHR1cm4gb2ZmIEpJVHRpbmcg
d2l0aG91dCByZWJ1aWxkaW5nIHRoZSB3b3JsZC4KICAgICByZXR1cm4gZXhlYy0+dm0oKS5jYW5V
c2VKSVQoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJ
KHJldmlzaW9uIDIwMDUzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDggKzE0NSwxMCBAQCB0eXBlZGVmIGNvbnN0IGNo
YXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2wsIGR1bXBERkdEaXNhc3NlbWJseSwgZmFsc2Us
IE5vcm1hbCwgImR1bXBzIGRpc2Fzc2VtYmx5IG9mIERGRyBmdW5jdGlvbiB1cG9uIGNvbXBpbGF0
aW9uIikgXAogICAgIHYoYm9vbCwgZHVtcEZUTERpc2Fzc2VtYmx5LCBmYWxzZSwgTm9ybWFsLCAi
ZHVtcHMgZGlzYXNzZW1ibHkgb2YgRlRMIGZ1bmN0aW9uIHVwb24gY29tcGlsYXRpb24iKSBcCiAg
ICAgdihib29sLCBkdW1wQWxsREZHTm9kZXMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAg
ICB2KG9wdGlvblJhbmdlLCBieXRlY29kZVJhbmdlVG9KSVRDb21waWxlLCAwLCBOb3JtYWwsICJi
eXRlY29kZSBzaXplIHJhbmdlIHRvIGFsbG93IGNvbXBpbGF0aW9uIG9uLCBlLmcuIDE6MTAwIikg
XAogICAgIHYob3B0aW9uUmFuZ2UsIGJ5dGVjb2RlUmFuZ2VUb0RGR0NvbXBpbGUsIDAsIE5vcm1h
bCwgImJ5dGVjb2RlIHNpemUgcmFuZ2UgdG8gYWxsb3cgREZHIGNvbXBpbGF0aW9uIG9uLCBlLmcu
IDE6MTAwIikgXAogICAgIHYob3B0aW9uUmFuZ2UsIGJ5dGVjb2RlUmFuZ2VUb0ZUTENvbXBpbGUs
IDAsIE5vcm1hbCwgImJ5dGVjb2RlIHNpemUgcmFuZ2UgdG8gYWxsb3cgRlRMIGNvbXBpbGF0aW9u
IG9uLCBlLmcuIDE6MTAwIikgXAorICAgIHYob3B0aW9uU3RyaW5nLCBqaXRXaGl0ZWxpc3QsIG51
bGxwdHIsIE5vcm1hbCwgImZpbGUgd2l0aCBsaXN0IG9mIGZ1bmN0aW9uIHNpZ25hdHVyZXMgdG8g
YWxsb3cgY29tcGlsYXRpb24gb24iKSBcCiAgICAgdihvcHRpb25TdHJpbmcsIGRmZ1doaXRlbGlz
dCwgbnVsbHB0ciwgTm9ybWFsLCAiZmlsZSB3aXRoIGxpc3Qgb2YgZnVuY3Rpb24gc2lnbmF0dXJl
cyB0byBhbGxvdyBERkcgY29tcGlsYXRpb24gb24iKSBcCiAgICAgdihib29sLCBkdW1wU291cmNl
QXRERkdUaW1lLCBmYWxzZSwgTm9ybWFsLCAiZHVtcHMgc291cmNlIGNvZGUgb2YgSlMgZnVuY3Rp
b24gYmVpbmcgREZHIGNvbXBpbGVkIikgXAogICAgIHYoYm9vbCwgZHVtcEJ5dGVjb2RlQXRERkdU
aW1lLCBmYWxzZSwgTm9ybWFsLCAiZHVtcHMgYnl0ZWNvZGUgb2YgSlMgZnVuY3Rpb24gYmVpbmcg
REZHIGNvbXBpbGVkIikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0Z1bmN0
aW9uV2hpdGVsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9v
bHMvRnVuY3Rpb25XaGl0ZWxpc3QuY3BwCShyZXZpc2lvbiAyMDA1MzApCShmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwOjIwMDUzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9GdW5jdGlvbldoaXRlbGlzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHRnVuY3Rpb25XaGl0ZWxpc3QuaCIKKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1
ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0Z1bmN0aW9uV2hpdGVsaXN0JiBGdW5jdGlvbldo
aXRlbGlzdDo6ZW5zdXJlR2xvYmFsV2hpdGVsaXN0KCkKK3sKKyAgICBzdGF0aWMgTGF6eU5ldmVy
RGVzdHJveWVkPEZ1bmN0aW9uV2hpdGVsaXN0PiBmdW5jdGlvbldoaXRlbGlzdDsKKyAgICBzdGF0
aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZVdoaXRlbGlzdEZsYWc7CisgICAgc3RkOjpjYWxs
X29uY2UoaW5pdGlhbGl6ZVdoaXRlbGlzdEZsYWcsIFtdIHsKKyAgICAgICAgY29uc3QgY2hhciog
ZnVuY3Rpb25XaGl0ZWxpc3RGaWxlID0gT3B0aW9uczo6ZGZnV2hpdGVsaXN0KCk7CisgICAgICAg
IGZ1bmN0aW9uV2hpdGVsaXN0LmNvbnN0cnVjdChmdW5jdGlvbldoaXRlbGlzdEZpbGUpOworICAg
IH0pOworICAgIHJldHVybiBmdW5jdGlvbldoaXRlbGlzdDsKK30KKworRnVuY3Rpb25XaGl0ZWxp
c3Q6OkZ1bmN0aW9uV2hpdGVsaXN0KGNvbnN0IGNoYXIqIGZpbGVuYW1lKQoreworICAgIHBhcnNl
RnVuY3Rpb25OYW1lc0luRmlsZShmaWxlbmFtZSk7Cit9CisKK3ZvaWQgRnVuY3Rpb25XaGl0ZWxp
c3Q6OnBhcnNlRnVuY3Rpb25OYW1lc0luRmlsZShjb25zdCBjaGFyKiBmaWxlbmFtZSkKK3sKKyAg
ICBpZiAoIWZpbGVuYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBGSUxFKiBmID0gZm9wZW4o
ZmlsZW5hbWUsICJyIik7CisgICAgaWYgKCFmKSB7CisgICAgICAgIGRhdGFMb2dGKCJGYWlsZWQg
dG8gb3BlbiBmaWxlICVzLiBEaWQgeW91IGFkZCB0aGUgZmlsZS1yZWFkLWRhdGEgZW50aXRsZW1l
bnQgdG8gV2ViUHJvY2Vzcy5zYj9cbiIsIGZpbGVuYW1lKTsgCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBjaGFyKiBsaW5lOworICAgIGNoYXIgYnVmZmVyW0JVRlNJWl07CisgICAgd2hp
bGUgKChsaW5lID0gZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgZikpKSB7CisgICAgICAg
IGlmIChzdHJzdHIobGluZSwgIi8vIikgPT0gbGluZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIC8vIEdldCByaWQgb2YgbmV3bGluZXMgYXQgdGhlIGVuZHMgb2YgdGhlIHN0cmlu
Z3MuCisgICAgICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4obGluZSk7CisgICAgICAgIGlmIChs
aW5lW2xlbmd0aCAtIDFdID09ICdcbicpIHsKKyAgICAgICAgICAgIGxpbmVbbGVuZ3RoIC0gMV0g
PSAnXDAnOworICAgICAgICAgICAgbGVuZ3RoLS07CisgICAgICAgIH0KKworICAgICAgICAvLyBT
a2lwIGVtcHR5IGxpbmVzLgorICAgICAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAKKyAgICAgICAgbV9lbnRyaWVzLmFkZChTdHJpbmcobGluZSwgbGVuZ3Ro
KSk7CisgICAgfQorCisgICAgaW50IHJlc3VsdCA9IGZjbG9zZShmKTsKKyAgICBpZiAocmVzdWx0
KQorICAgICAgICBkYXRhTG9nRigiRmFpbGVkIHRvIGNsb3NlIGZpbGUgJXM6ICVzXG4iLCBmaWxl
bmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKK30KKworYm9vbCBGdW5jdGlvbldoaXRlbGlzdDo6Y29u
dGFpbnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spIGNvbnN0IAoreworICAgIEFTU0VSVCghaXNDb21w
aWxhdGlvblRocmVhZCgpKTsKKyAgICBpZiAoIU9wdGlvbnM6OmRmZ1doaXRlbGlzdCgpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChtX2VudHJpZXMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgbmFtZSA9IFN0cmluZzo6ZnJvbVVURjgoY29k
ZUJsb2NrLT5pbmZlcnJlZE5hbWUoKSk7CisgICAgaWYgKG1fZW50cmllcy5jb250YWlucyhuYW1l
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBTdHJpbmcgaGFzaCA9IFN0cmluZzo6ZnJv
bVVURjgoY29kZUJsb2NrLT5oYXNoQXNTdHJpbmdJZlBvc3NpYmxlKCkpOworICAgIGlmIChtX2Vu
dHJpZXMuY29udGFpbnMoaGFzaCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJu
IG1fZW50cmllcy5jb250YWlucyhuYW1lICsgJyMnICsgaGFzaCk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvRnVuY3Rpb25XaGl0ZWxpc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9GdW5jdGlvbldoaXRlbGlzdC5jcHAJKHdv
cmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9GdW5jdGlvbldoaXRl
bGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDM3ICsyNCwyMCBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJERkdGdW5jdGlvbldoaXRlbGlzdC5oIgorI2luY2x1ZGUg
IkZ1bmN0aW9uV2hpdGVsaXN0LmgiCiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKKyNpZiBFTkFCTEUo
SklUKQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2lu
Y2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCi1uYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLUZ1bmN0aW9uV2hpdGVsaXN0JiBGdW5jdGlv
bldoaXRlbGlzdDo6ZW5zdXJlR2xvYmFsV2hpdGVsaXN0KCkKLXsKLSAgICBzdGF0aWMgTGF6eU5l
dmVyRGVzdHJveWVkPEZ1bmN0aW9uV2hpdGVsaXN0PiBmdW5jdGlvbldoaXRlbGlzdDsKLSAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZVdoaXRlbGlzdEZsYWc7Ci0gICAgc3RkOjpj
YWxsX29uY2UoaW5pdGlhbGl6ZVdoaXRlbGlzdEZsYWcsIFtdIHsKLSAgICAgICAgY29uc3QgY2hh
ciogZnVuY3Rpb25XaGl0ZWxpc3RGaWxlID0gT3B0aW9uczo6ZGZnV2hpdGVsaXN0KCk7Ci0gICAg
ICAgIGZ1bmN0aW9uV2hpdGVsaXN0LmNvbnN0cnVjdChmdW5jdGlvbldoaXRlbGlzdEZpbGUpOwot
ICAgIH0pOwotICAgIHJldHVybiBmdW5jdGlvbldoaXRlbGlzdDsKLX0KK25hbWVzcGFjZSBKU0Mg
ewogCiBGdW5jdGlvbldoaXRlbGlzdDo6RnVuY3Rpb25XaGl0ZWxpc3QoY29uc3QgY2hhciogZmls
ZW5hbWUpCiB7Ci0gICAgcGFyc2VGdW5jdGlvbk5hbWVzSW5GaWxlKGZpbGVuYW1lKTsKLX0KLQot
dm9pZCBGdW5jdGlvbldoaXRlbGlzdDo6cGFyc2VGdW5jdGlvbk5hbWVzSW5GaWxlKGNvbnN0IGNo
YXIqIGZpbGVuYW1lKQotewogICAgIGlmICghZmlsZW5hbWUpCiAgICAgICAgIHJldHVybjsKIApA
QCAtNjQsNiArNDcsOCBAQCB2b2lkIEZ1bmN0aW9uV2hpdGVsaXN0OjpwYXJzZUZ1bmN0aW9uTmFt
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBtX2hhc0FjdGl2ZVdoaXRlbGlzdCA9IHRy
dWU7CisKICAgICBjaGFyKiBsaW5lOwogICAgIGNoYXIgYnVmZmVyW0JVRlNJWl07CiAgICAgd2hp
bGUgKChsaW5lID0gZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgZikpKSB7CkBAIC04OSwx
MCArNzQsMTAgQEAgdm9pZCBGdW5jdGlvbldoaXRlbGlzdDo6cGFyc2VGdW5jdGlvbk5hbQogICAg
ICAgICBkYXRhTG9nRigiRmFpbGVkIHRvIGNsb3NlIGZpbGUgJXM6ICVzXG4iLCBmaWxlbmFtZSwg
c3RyZXJyb3IoZXJybm8pKTsKIH0KIAotYm9vbCBGdW5jdGlvbldoaXRlbGlzdDo6Y29udGFpbnMo
Q29kZUJsb2NrKiBjb2RlQmxvY2spIGNvbnN0IAorYm9vbCBGdW5jdGlvbldoaXRlbGlzdDo6Y29u
dGFpbnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc0NvbXBp
bGF0aW9uVGhyZWFkKCkpOwotICAgIGlmICghT3B0aW9uczo6ZGZnV2hpdGVsaXN0KCkpCisgICAg
aWYgKCFtX2hhc0FjdGl2ZVdoaXRlbGlzdCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBp
ZiAobV9lbnRyaWVzLmlzRW1wdHkoKSkKQEAgLTEwOSw3ICs5NCw3IEBAIGJvb2wgRnVuY3Rpb25X
aGl0ZWxpc3Q6OmNvbnRhaW5zKENvZGVCbG8KICAgICByZXR1cm4gbV9lbnRyaWVzLmNvbnRhaW5z
KG5hbWUgKyAnIycgKyBoYXNoKTsKIH0KIAotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworfSAv
LyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKyNlbmRpZiAvLyBF
TkFCTEUoSklUKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvRnVuY3Rpb25X
aGl0ZWxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvRnVu
Y3Rpb25XaGl0ZWxpc3QuaAkocmV2aXNpb24gMjAwNTMwKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Z1bmN0aW9uV2hpdGVsaXN0Lmg6MjAwNTMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0Z1bmN0aW9uV2hpdGVsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgREZHRnVuY3Rpb25XaGl0ZWxpc3RfaAor
I2RlZmluZSBERkdGdW5jdGlvbldoaXRlbGlzdF9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBKU0MgeyAKKworY2xhc3MgQ29kZUJsb2NrOworCituYW1lc3BhY2UgREZH
IHsKKworY2xhc3MgRnVuY3Rpb25XaGl0ZWxpc3QgeworcHVibGljOgorICAgIHN0YXRpYyBGdW5j
dGlvbldoaXRlbGlzdCYgZW5zdXJlR2xvYmFsV2hpdGVsaXN0KCk7CisgICAgZXhwbGljaXQgRnVu
Y3Rpb25XaGl0ZWxpc3QoY29uc3QgY2hhciopOworCisgICAgYm9vbCBjb250YWlucyhDb2RlQmxv
Y2sqKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25OYW1lc0luRmls
ZShjb25zdCBjaGFyKik7CisKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9lbnRyaWVzOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KyNlbmRpZiAvLyBERkdGdW5jdGlvbldoaXRlbGlzdF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvRnVuY3Rpb25XaGl0ZWxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvRnVuY3Rpb25XaGl0ZWxpc3QuaAkod29ya2luZyBjb3B5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0Z1bmN0aW9uV2hpdGVsaXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTIzLDEwICsyMyw4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2lmbmRlZiBERkdGdW5jdGlvbldoaXRlbGlzdF9oCi0jZGVmaW5lIERGR0Z1bmN0
aW9uV2hpdGVsaXN0X2gKLQotI2lmIEVOQUJMRShERkdfSklUKQorI2lmbmRlZiBGdW5jdGlvbldo
aXRlbGlzdF9oCisjZGVmaW5lIEZ1bmN0aW9uV2hpdGVsaXN0X2gKIAogI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC0zNSwyMyArMzMs
MTcgQEAgbmFtZXNwYWNlIEpTQyB7IAogCiBjbGFzcyBDb2RlQmxvY2s7CiAKLW5hbWVzcGFjZSBE
RkcgewotCiBjbGFzcyBGdW5jdGlvbldoaXRlbGlzdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIEZ1
bmN0aW9uV2hpdGVsaXN0JiBlbnN1cmVHbG9iYWxXaGl0ZWxpc3QoKTsKICAgICBleHBsaWNpdCBG
dW5jdGlvbldoaXRlbGlzdChjb25zdCBjaGFyKik7CiAKICAgICBib29sIGNvbnRhaW5zKENvZGVC
bG9jayopIGNvbnN0OwogCiBwcml2YXRlOgotICAgIHZvaWQgcGFyc2VGdW5jdGlvbk5hbWVzSW5G
aWxlKGNvbnN0IGNoYXIqKTsKLQogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2VudHJpZXM7CisgICAg
Ym9vbCBtX2hhc0FjdGl2ZVdoaXRlbGlzdCB7IGZhbHNlIH07CiB9OwogCi19IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKK30gLy8gbmFtZXNwYWNl
IEpTQwogCi0jZW5kaWYgLy8gREZHRnVuY3Rpb25XaGl0ZWxpc3RfaAorI2VuZGlmIC8vIEZ1bmN0
aW9uV2hpdGVsaXN0X2gK
</data>
<flag name="review"
          id="302423"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>