<?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>190640</bug_id>
          
          <creation_ts>2018-10-16 14:38:57 -0700</creation_ts>
          <short_desc>Remove InjectedBundleBackForwardList</short_desc>
          <delta_ts>2018-10-16 15:33:36 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>cdumez</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1469893</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-10-16 14:38:57 -0700</bug_when>
    <thetext>Remove InjectedBundleBackForwardList</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1469897</commentid>
    <comment_count>1</comment_count>
      <attachid>352506</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-10-16 14:41:01 -0700</bug_when>
    <thetext>Created attachment 352506
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1469911</commentid>
    <comment_count>2</comment_count>
      <attachid>352506</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-10-16 15:23:44 -0700</bug_when>
    <thetext>Comment on attachment 352506
Patch

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

r=me with suggestion, assuming the bots are happy.

&gt; Source/WebKit/WebProcess/WebPage/WebPage.cpp:1673
&gt; +void WebPage::clearHistory()

This merely sends an async IPC to the UIProcess, asking it to clear its back forward list. The UIProcess will then send async IPC to the WebProcess for each history item removal.

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:415
&gt; +    WKBundleClearHistoryForTesting(m_page);

This merely asks the UIProcess to clear the history. Can we clear the history directly from the UIProcess in TestController::resetStateToConsistentValues() using WKBackForwardListClear()? It would end up through the same code path but would do less IPC.

&gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:613
&gt;  void TestRunner::clearBackForwardList()

Note that we may be able to drop this in a follow-up, now that you clear history between tests. I think all the tests merely call this before starting, although we should double check.
It&apos;d be great if we could get rid of it because this would mean we could drop WKBundleClearHistoryForTesting() too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1469914</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-10-16 15:31:34 -0700</bug_when>
    <thetext>I agree that there are several messages being sent that shouldn&apos;t be, but that will be cleaned up soon.
http://trac.webkit.org/r237205</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1469916</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-10-16 15:33:36 -0700</bug_when>
    <thetext>&lt;rdar://problem/45320784&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>352506</attachid>
            <date>2018-10-16 14:41:01 -0700</date>
            <delta_ts>2018-10-16 15:23:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190640-20181016144100.patch</filename>
            <type>text/plain</type>
            <size>40529</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzcxOTUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDE4LTEwLTE2ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIEluamVj
dGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTA2NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGVzZSBvYmplY3RzIGFyZSBvbmx5IHVzZWQgaW4gdGVzdGluZyBu
b3csIHNvIEkgbWFkZSBhIHJlcGxhY2VtZW50IHRvIGJlIHVzZWQgZm9yIHRlc3RpbmcsCisgICAg
ICAgIFdLQnVuZGxlUGFnZUR1bXBIaXN0b3J5Rm9yVGVzdGluZyBhbmQgV0tCdW5kbGVDbGVhckhp
c3RvcnlGb3JUZXN0aW5nLgorICAgICAgICBUaGUgZXhpc3RlbmNlIG9mIHRoZXNlIG9iamVjdHMg
aXMgcHJvYmxlbWF0aWMgd2l0aCBwcm9jZXNzIHN3YXBwaW5nIGFuZCB0aGUgdHJ1ZSBiYWNrL2Zv
cndhcmQgbGlzdCBiZWluZyBpbiB0aGUgVUlQcm9jZXNzLgorCisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUJh
Y2tGb3J3YXJkTGlzdC5jcHA6CisgICAgICAgIChXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEdldFR5
cGVJRCk6CisgICAgICAgIChXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdENvcHlJdGVtQXRJbmRleCk6
CisgICAgICAgIChXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEdldEJhY2tMaXN0Q291bnQpOgorICAg
ICAgICAoV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RHZXRGb3J3YXJkTGlzdENvdW50KToKKyAgICAg
ICAgKFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0Q2xlYXIpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVCYWNrRm9yd2FyZExpc3QuaDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQmFja0ZvcndhcmRMaXN0
SXRlbS5jcHA6CisgICAgICAgIChXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1HZXRUeXBlSUQp
OgorICAgICAgICAoV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtSXNTYW1lKToKKyAgICAgICAg
KFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbUNvcHlVUkwpOgorICAgICAgICAoV0tCdW5kbGVC
YWNrRm9yd2FyZExpc3RJdGVtQ29weVRhcmdldCk6CisgICAgICAgIChXS0J1bmRsZUJhY2tGb3J3
YXJkTGlzdEl0ZW1Jc1RhcmdldEl0ZW0pOgorICAgICAgICAoV0tCdW5kbGVCYWNrRm9yd2FyZExp
c3RJdGVtQ29weUNoaWxkcmVuKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9jL1dLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5oOgorICAgICAgICAqIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKFdLQnVu
ZGxlUGFnZUR1bXBIaXN0b3J5Rm9yVGVzdGluZyk6CisgICAgICAgIChXS0J1bmRsZUNsZWFySGlz
dG9yeUZvclRlc3RpbmcpOgorICAgICAgICAoV0tCdW5kbGVQYWdlR2V0QmFja0ZvcndhcmRMaXN0
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFn
ZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVC
YWNrRm9yd2FyZExpc3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3QuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlQmFja0ZvcndhcmRM
aXN0SXRlbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0uaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUxvYWRlckNsaWVu
dC5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRl
ckNsaWVudC5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp+V2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OmR1
bXBIaXN0b3J5SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmR1bXBIaXN0b3J5Rm9y
VGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNsZWFySGlzdG9yeSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpZFJlY2VpdmVTeW5jTWVzc2FnZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OmJhY2tGb3J3YXJkTGlzdCk6IERlbGV0ZWQuCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKwogMjAxOC0xMC0xNiAgSnVzdGluIE1pY2hhdWQg
IDxqdXN0aW5fbWljaGF1ZEBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IGZlYXR1cmUg
ZmxhZyBhbmQgYmluZGluZ3MgZm9yIENTUyBQYWludGluZyBBUEkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAko
cmV2aXNpb24gMjM3MTQ4KQorKysgU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtNDEzLDggKzQxMyw2IEBAIFdlYlByb2Nlc3MvR2VvbG9jYXRpb24vR2VvbG9jYXRp
b25QZXJtaXMKIFdlYlByb2Nlc3MvR2VvbG9jYXRpb24vV2ViR2VvbG9jYXRpb25NYW5hZ2VyLmNw
cAogCiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAotV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHAKLVdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVt
LmNwcAogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZUNsaWVudC5jcHAK
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVET01XaW5kb3dFeHRlbnNp
b24uY3BwCiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlSGl0VGVzdFJl
c3VsdC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlQmFja0ZvcndhcmRM
aXN0LmNwcAkocmV2aXNpb24gMjM3MTU3KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0LmNwcAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3QuaCIKLQotI2luY2x1ZGUgIklu
amVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5oIgotI2luY2x1ZGUgIldlYkJhY2tGb3J3
YXJkTGlzdFByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUv
QmFja0ZvcndhcmRDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVJlZlB0cjxJbmpl
Y3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0+IEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRM
aXN0OjppdGVtQXRJbmRleChpbnQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BhZ2UpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFBhZ2UqIHBhZ2UgPSBtX3BhZ2UtPmNvcmVQYWdl
KCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4g
SW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtOjpjcmVhdGUocGFnZS0+YmFja0Zvcndh
cmQoKS5pdGVtQXRJbmRleChpbmRleCkpOwotfQotCi1pbnQgSW5qZWN0ZWRCdW5kbGVCYWNrRm9y
d2FyZExpc3Q6OmJhY2tMaXN0Q291bnQoKSBjb25zdAotewotICAgIGlmICghbV9wYWdlKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBQYWdlKiBwYWdlID0gbV9wYWdlLT5jb3JlUGFnZSgpOwotICAg
IGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHBhZ2UtPmJhY2tGb3J3
YXJkKCkuYmFja0NvdW50KCk7Ci19Ci0KLWludCBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlz
dDo6Zm9yd2FyZExpc3RDb3VudCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BhZ2UpCi0gICAgICAg
IHJldHVybiAwOwotICAgIFBhZ2UqIHBhZ2UgPSBtX3BhZ2UtPmNvcmVQYWdlKCk7Ci0gICAgaWYg
KCFwYWdlKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gcGFnZS0+YmFja0ZvcndhcmQo
KS5mb3J3YXJkQ291bnQoKTsKLX0KLQotdm9pZCBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlz
dDo6Y2xlYXIoKQotewotICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgUGFn
ZSogcGFnZSA9IG1fcGFnZS0+Y29yZVBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJl
dHVybjsKLSAgICBzdGF0aWNfY2FzdDxXZWJCYWNrRm9yd2FyZExpc3RQcm94eSY+KHBhZ2UtPmJh
Y2tGb3J3YXJkKCkuY2xpZW50KCkpLmNsZWFyKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0LmNwcApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0
ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZUJhY2tGb3J3
YXJkTGlzdC5oCShyZXZpc2lvbiAyMzcxNDgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3QuaAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEluamVjdGVkQnVuZGxl
QmFja0ZvcndhcmRMaXN0X2gKLSNkZWZpbmUgSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3Rf
aAotCi0jaW5jbHVkZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgSW5qZWN0ZWRCdW5k
bGVCYWNrRm9yd2FyZExpc3RJdGVtOwotCi1jbGFzcyBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJk
TGlzdCA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkJ1bmRsZUJh
Y2tGb3J3YXJkTGlzdD4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8SW5qZWN0ZWRCdW5kbGVC
YWNrRm9yd2FyZExpc3Q+IGNyZWF0ZShXZWJQYWdlKiBwYWdlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3QocGFnZSkpOwot
ICAgIH0KLQotICAgIHZvaWQgZGV0YWNoKCkgeyBtX3BhZ2UgPSBudWxscHRyOyB9Ci0KLSAgICB2
b2lkIGNsZWFyKCk7Ci0KLSAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3RJ
dGVtPiBpdGVtQXRJbmRleChpbnQpIGNvbnN0OwotICAgIGludCBiYWNrTGlzdENvdW50KCkgY29u
c3Q7Ci0gICAgaW50IGZvcndhcmRMaXN0Q291bnQoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBJ
bmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdChXZWJQYWdlKiBwYWdlKSA6IG1fcGFnZShwYWdl
KSB7IH0KLQotICAgIFdlYlBhZ2UqIG1fcGFnZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi0jZW5kaWYgLy8gSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3RfaAoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0
eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3RJ
dGVtLmNwcAkocmV2aXNpb24gMjM3MTQ4KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAJKG5vbmV4
aXN0ZW50KQpAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5oIgotCi0jaW5j
bHVkZSAiQVBJQXJyYXkuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotUmVmPEFQSTo6QXJyYXk+IEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0
SXRlbTo6Y2hpbGRyZW4oKSBjb25zdAotewotICAgIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+
PiBjaGlsZHJlbjsKLSAgICBjaGlsZHJlbi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1faXRlbS0+
Y2hpbGRyZW4oKS5zaXplKCkpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IG1faXRl
bS0+Y2hpbGRyZW4oKSkKLSAgICAgICAgY2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKEluamVjdGVk
QnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbTo6Y3JlYXRlKGNvbnN0X2Nhc3Q8SGlzdG9yeUl0ZW0q
PihjaGlsZC5wdHIoKSkpKTsKLQotICAgIHJldHVybiBBUEk6OkFycmF5OjpjcmVhdGUoV1RGTW92
ZShjaGlsZHJlbikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKClByb3BlcnR5IGNoYW5n
ZXMgb246IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1z
dHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdEl0
ZW0uaAkocmV2aXNpb24gMjM3MTQ4KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5oCShub25leGlzdGVu
dCkKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSW5qZWN0ZWRCdW5kbGVC
YWNrRm9yd2FyZExpc3RJdGVtX2gKLSNkZWZpbmUgSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExp
c3RJdGVtX2gKLQotI2luY2x1ZGUgIkFQSU9iamVjdC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvSGlz
dG9yeUl0ZW0uaD4KLQotbmFtZXNwYWNlIEFQSSB7Ci1jbGFzcyBBcnJheTsKLX0KLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VQcm94eTsKLQotY2xhc3MgSW5qZWN0ZWRCdW5k
bGVCYWNrRm9yd2FyZExpc3RJdGVtIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVj
dDo6VHlwZTo6QnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbT4gewotcHVibGljOgotICAgIHN0YXRp
YyBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtPiBjcmVhdGUoUmVmUHRy
PFdlYkNvcmU6Okhpc3RvcnlJdGVtPiYmIGl0ZW0pCi0gICAgewotICAgICAgICBpZiAoIWl0ZW0p
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0oV1RGTW92ZShpdGVtKSkpOwotICAg
IH0KLQotICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtKCkgY29uc3QgeyByZXR1cm4gbV9p
dGVtLmdldCgpOyB9Ci0KLSAgICBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMKCkgY29uc3QgeyBy
ZXR1cm4gbV9pdGVtLT5vcmlnaW5hbFVSTFN0cmluZygpOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB1
cmwoKSBjb25zdCB7IHJldHVybiBtX2l0ZW0tPnVybFN0cmluZygpOyB9Ci0gICAgY29uc3QgU3Ry
aW5nJiB0aXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXRlbS0+dGl0bGUoKTsgfQotCi0gICAgY29u
c3QgU3RyaW5nJiB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2l0ZW0tPnRhcmdldCgpOyB9Ci0g
ICAgYm9vbCBpc1RhcmdldEl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2l0ZW0tPmlzVGFyZ2V0SXRl
bSgpOyB9Ci0gICAgYm9vbCBpc0luUGFnZUNhY2hlKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLT5p
c0luUGFnZUNhY2hlKCk7IH0KLSAgICBib29sIGhhc0NhY2hlZFBhZ2VFeHBpcmVkKCkgY29uc3Qg
eyByZXR1cm4gbV9pdGVtLT5oYXNDYWNoZWRQYWdlRXhwaXJlZCgpOyB9Ci0KLSAgICBSZWY8QVBJ
OjpBcnJheT4gY2hpbGRyZW4oKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBJbmpl
Y3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0oUmVmUHRyPFdlYkNvcmU6Okhpc3RvcnlJdGVt
PiYmIGl0ZW0pCi0gICAgICAgIDogbV9pdGVtKFdURk1vdmUoaXRlbSkpCi0gICAgeyB9Ci0KLSAg
ICBSZWZQdHI8V2ViQ29yZTo6SGlzdG9yeUl0ZW0+IG1faXRlbTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi0jZW5kaWYgLy8gSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVt
X2gKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0uaApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRl
bGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBh
Z2VMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiAyMzcxNDgpCisrKyBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlTG9hZGVyQ2xpZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkFQSUVycm9yLmgi
CiAjaW5jbHVkZSAiQVBJVVJMLmgiCiAjaW5jbHVkZSAiQVBJVVJMUmVxdWVzdC5oIgotI2luY2x1
ZGUgIkluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5oIgogI2luY2x1ZGUgIkluamVj
dGVkQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVT
Y3JpcHRXb3JsZC5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgpJbmRleDogU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQmFja0ZvcndhcmRMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2MvV0tCdW5kbGVCYWNrRm9yd2FyZExpc3QuY3BwCShyZXZpc2lvbiAyMzcxNDgpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVC
YWNrRm9yd2FyZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwzMyArMjYsMjggQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdC5oIgog
Ci0jaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3QuaCIKLSNpbmNsdWRlICJJ
bmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJXS0J1bmRsZUFQ
SUNhc3QuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQogV0tUeXBlSUQgV0tCdW5kbGVC
YWNrRm9yd2FyZExpc3RHZXRUeXBlSUQoKQogewotICAgIHJldHVybiB0b0FQSShJbmplY3RlZEJ1
bmRsZUJhY2tGb3J3YXJkTGlzdDo6QVBJVHlwZSk7CisgICAgcmV0dXJuIHRvQVBJKEFQSTo6T2Jq
ZWN0OjpUeXBlOjpOdWxsKTsKIH0KIAogV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtUmVmIFdL
QnVuZGxlQmFja0ZvcndhcmRMaXN0Q29weUl0ZW1BdEluZGV4KFdLQnVuZGxlQmFja0ZvcndhcmRM
aXN0UmVmIGxpc3RSZWYsIGludCBpbmRleCkKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGxp
c3RSZWYpLT5pdGVtQXRJbmRleChpbmRleCkubGVha1JlZigpKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAogdW5zaWduZWQgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RHZXRCYWNrTGlzdENvdW50
KFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0UmVmIGxpc3RSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1w
bChsaXN0UmVmKS0+YmFja0xpc3RDb3VudCgpOworICAgIHJldHVybiAwOwogfQogCiB1bnNpZ25l
ZCBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEdldEZvcndhcmRMaXN0Q291bnQoV0tCdW5kbGVCYWNr
Rm9yd2FyZExpc3RSZWYgbGlzdFJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKGxpc3RSZWYpLT5m
b3J3YXJkTGlzdENvdW50KCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgV0tCdW5kbGVCYWNr
Rm9yd2FyZExpc3RDbGVhcihXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdFJlZiBsaXN0UmVmKQogewot
ICAgIHJldHVybiB0b0ltcGwobGlzdFJlZiktPmNsZWFyKCk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVCYWNrRm9yd2FyZExp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2MvV0tCdW5kbGVCYWNrRm9yd2FyZExpc3QuaAkocmV2aXNpb24gMjM3MTQ4KQorKysg
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQmFj
a0ZvcndhcmRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE5ICsyNywyMCBAQAogI2RlZmlu
ZSBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdF9oCiAKICNpbmNsdWRlIDxXZWJLaXQvV0tCYXNlLmg+
CisjaW5jbHVkZSA8V2ViS2l0L1dLRGVwcmVjYXRlZC5oPgogCiAjaWZkZWYgX19jcGx1c3BsdXMK
IGV4dGVybiAiQyIgewogI2VuZGlmCiAKLVdLX0VYUE9SVCBXS1R5cGVJRCBXS0J1bmRsZUJhY2tG
b3J3YXJkTGlzdEdldFR5cGVJRCgpOworV0tfRVhQT1JUIFdLVHlwZUlEIFdLQnVuZGxlQmFja0Zv
cndhcmRMaXN0R2V0VHlwZUlEKCkgV0tfQ19BUElfREVQUkVDQVRFRDsKIAotV0tfRVhQT1JUIFdL
QnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdENvcHlJ
dGVtQXRJbmRleChXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdFJlZiBsaXN0LCBpbnQgaW5kZXgpOwor
V0tfRVhQT1JUIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBXS0J1bmRsZUJhY2tGb3J3
YXJkTGlzdENvcHlJdGVtQXRJbmRleChXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdFJlZiBsaXN0LCBp
bnQgaW5kZXgpIFdLX0NfQVBJX0RFUFJFQ0FURUQ7CiAKLVdLX0VYUE9SVCB1bnNpZ25lZCBXS0J1
bmRsZUJhY2tGb3J3YXJkTGlzdEdldEJhY2tMaXN0Q291bnQoV0tCdW5kbGVCYWNrRm9yd2FyZExp
c3RSZWYgbGlzdCk7Ci1XS19FWFBPUlQgdW5zaWduZWQgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RH
ZXRGb3J3YXJkTGlzdENvdW50KFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0UmVmIGxpc3QpOworV0tf
RVhQT1JUIHVuc2lnbmVkIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0R2V0QmFja0xpc3RDb3VudChX
S0J1bmRsZUJhY2tGb3J3YXJkTGlzdFJlZiBsaXN0KSBXS19DX0FQSV9ERVBSRUNBVEVEOworV0tf
RVhQT1JUIHVuc2lnbmVkIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0R2V0Rm9yd2FyZExpc3RDb3Vu
dChXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdFJlZiBsaXN0KSBXS19DX0FQSV9ERVBSRUNBVEVEOwog
Ci1XS19FWFBPUlQgdm9pZCBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdENsZWFyKFdLQnVuZGxlQmFj
a0ZvcndhcmRMaXN0UmVmIGxpc3QpOworV0tfRVhQT1JUIHZvaWQgV0tCdW5kbGVCYWNrRm9yd2Fy
ZExpc3RDbGVhcihXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdFJlZiBsaXN0KSBXS19DX0FQSV9ERVBS
RUNBVEVEOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvYy9XS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwCShyZXZpc2lvbiAyMzcxNDgp
CisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5k
bGVCYWNrRm9yd2FyZExpc3RJdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTkgKzI3LDE4
IEBACiAjaW5jbHVkZSAiV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtLmgiCiAKICNpbmNsdWRl
ICJBUElBcnJheS5oIgotI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRl
bS5oIgogI2luY2x1ZGUgIldLQnVuZGxlQVBJQ2FzdC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OwogCiBXS1R5cGVJRCBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1HZXRUeXBlSUQoKQog
ewotICAgIHJldHVybiB0b0FQSShJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW06OkFQ
SVR5cGUpOworICAgIHJldHVybiB0b0FQSShBUEk6Ok9iamVjdDo6VHlwZTo6TnVsbCk7CiB9CiAK
IGJvb2wgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtSXNTYW1lKFdLQnVuZGxlQmFja0Zvcndh
cmRMaXN0SXRlbVJlZiBpdGVtUmVmMSwgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0
ZW1SZWYyKQogewotICAgIHJldHVybiB0b0ltcGwoaXRlbVJlZjEpLT5pdGVtKCkgPT0gdG9JbXBs
KGl0ZW1SZWYyKS0+aXRlbSgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogV0tVUkxSZWYgV0tC
dW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtQ29weU9yaWdpbmFsVVJMKFdLQnVuZGxlQmFja0Zvcndh
cmRMaXN0SXRlbVJlZiBpdGVtUmVmKQpAQCAtNDksNyArNDgsNyBAQCBXS1VSTFJlZiBXS0J1bmRs
ZUJhY2tGb3J3YXJkTGlzdEl0ZW1Db3B5CiAKIFdLVVJMUmVmIFdLQnVuZGxlQmFja0ZvcndhcmRM
aXN0SXRlbUNvcHlVUkwoV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0ZW1SZWYpCiB7
Ci0gICAgcmV0dXJuIHRvQ29waWVkVVJMQVBJKHRvSW1wbChpdGVtUmVmKS0+dXJsKCkpOworICAg
IHJldHVybiBudWxscHRyOwogfQogCiBXS1N0cmluZ1JlZiBXS0J1bmRsZUJhY2tGb3J3YXJkTGlz
dEl0ZW1Db3B5VGl0bGUoV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0ZW1SZWYpCkBA
IC01OSwxMiArNTgsMTIgQEAgV0tTdHJpbmdSZWYgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVt
QwogCiBXS1N0cmluZ1JlZiBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1Db3B5VGFyZ2V0KFdL
QnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBpdGVtUmVmKQogewotICAgIHJldHVybiB0b0Nv
cGllZEFQSSh0b0ltcGwoaXRlbVJlZiktPnRhcmdldCgpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAogYm9vbCBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1Jc1RhcmdldEl0ZW0oV0tCdW5k
bGVCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0ZW1SZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChp
dGVtUmVmKS0+aXNUYXJnZXRJdGVtKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIFdL
QnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbUlzSW5QYWdlQ2FjaGUoV0tCdW5kbGVCYWNrRm9yd2Fy
ZExpc3RJdGVtUmVmIGl0ZW1SZWYpCkBAIC03OSw2ICs3OCw2IEBAIGJvb2wgV0tCdW5kbGVCYWNr
Rm9yd2FyZExpc3RJdGVtSGFzQ2FjaGUKIAogV0tBcnJheVJlZiBXS0J1bmRsZUJhY2tGb3J3YXJk
TGlzdEl0ZW1Db3B5Q2hpbGRyZW4oV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0ZW1S
ZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKCZ0b0ltcGwoaXRlbVJlZiktPmNoaWxkcmVuKCkubGVh
a1JlZigpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRl
bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvYy9XS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0uaAkocmV2aXNpb24gMjM3MTQ4KQor
KysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxl
QmFja0ZvcndhcmRMaXN0SXRlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywyMSArMzMsMjEgQEAK
IGV4dGVybiAiQyIgewogI2VuZGlmCiAKLVdLX0VYUE9SVCBXS1R5cGVJRCBXS0J1bmRsZUJhY2tG
b3J3YXJkTGlzdEl0ZW1HZXRUeXBlSUQoKTsKK1dLX0VYUE9SVCBXS1R5cGVJRCBXS0J1bmRsZUJh
Y2tGb3J3YXJkTGlzdEl0ZW1HZXRUeXBlSUQoKSBXS19DX0FQSV9ERVBSRUNBVEVEOwogCi1XS19F
WFBPUlQgYm9vbCBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1Jc1NhbWUoV0tCdW5kbGVCYWNr
Rm9yd2FyZExpc3RJdGVtUmVmIGl0ZW0xLCBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1SZWYg
aXRlbTIpOworV0tfRVhQT1JUIGJvb2wgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtSXNTYW1l
KFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBpdGVtMSwgV0tCdW5kbGVCYWNrRm9yd2Fy
ZExpc3RJdGVtUmVmIGl0ZW0yKSBXS19DX0FQSV9ERVBSRUNBVEVEOwogCiBXS19FWFBPUlQgV0tV
UkxSZWYgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtQ29weU9yaWdpbmFsVVJMKFdLQnVuZGxl
QmFja0ZvcndhcmRMaXN0SXRlbVJlZiBpdGVtKSBXS19DX0FQSV9ERVBSRUNBVEVEOwotV0tfRVhQ
T1JUIFdLVVJMUmVmIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbUNvcHlVUkwoV0tCdW5kbGVC
YWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0ZW0pOworV0tfRVhQT1JUIFdLVVJMUmVmIFdLQnVuZGxl
QmFja0ZvcndhcmRMaXN0SXRlbUNvcHlVUkwoV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtUmVm
IGl0ZW0pIFdLX0NfQVBJX0RFUFJFQ0FURUQ7CiBXS19FWFBPUlQgV0tTdHJpbmdSZWYgV0tCdW5k
bGVCYWNrRm9yd2FyZExpc3RJdGVtQ29weVRpdGxlKFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRl
bVJlZiBpdGVtKSBXS19DX0FQSV9ERVBSRUNBVEVEOwogCi1XS19FWFBPUlQgV0tTdHJpbmdSZWYg
V0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtQ29weVRhcmdldChXS0J1bmRsZUJhY2tGb3J3YXJk
TGlzdEl0ZW1SZWYgaXRlbSk7Ci1XS19FWFBPUlQgYm9vbCBXS0J1bmRsZUJhY2tGb3J3YXJkTGlz
dEl0ZW1Jc1RhcmdldEl0ZW0oV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0ZW0pOwor
V0tfRVhQT1JUIFdLU3RyaW5nUmVmIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbUNvcHlUYXJn
ZXQoV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0ZW0pIFdLX0NfQVBJX0RFUFJFQ0FU
RUQ7CitXS19FWFBPUlQgYm9vbCBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1Jc1RhcmdldEl0
ZW0oV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0ZW0pIFdLX0NfQVBJX0RFUFJFQ0FU
RUQ7CiAKIFdLX0VYUE9SVCBib29sIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbUlzSW5QYWdl
Q2FjaGUoV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0ZW0pIFdLX0NfQVBJX0RFUFJF
Q0FURUQ7CiBXS19FWFBPUlQgYm9vbCBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1IYXNDYWNo
ZWRQYWdlRXhwaXJlZChXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgaXRlbSkgV0tfQ19B
UElfREVQUkVDQVRFRDsKIAotV0tfRVhQT1JUIFdLQXJyYXlSZWYgV0tCdW5kbGVCYWNrRm9yd2Fy
ZExpc3RJdGVtQ29weUNoaWxkcmVuKFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBpdGVt
KTsKK1dLX0VYUE9SVCBXS0FycmF5UmVmIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbUNvcHlD
aGlsZHJlbihXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgaXRlbSkgV0tfQ19BUElfREVQ
UkVDQVRFRDsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5k
bGVQYWdlLmNwcAkocmV2aXNpb24gMjM3MTQ4KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJBUElTdHJpbmcuaCIKICNpbmNsdWRlICJBUElVUkwu
aCIKICNpbmNsdWRlICJBUElVUkxSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVC
YWNrRm9yd2FyZExpc3QuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuaCIK
ICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJ
bmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50LmgiCkBAIC0zNjYsOSArMzY1LDE5IEBAIHZvaWQg
V0tCdW5kbGVQYWdlU2V0U2NhbGVBdE9yaWdpbihXS0J1bmQKICAgICB0b0ltcGwocGFnZVJlZikt
PnNjYWxlUGFnZShzY2FsZSwgdG9JbnRQb2ludChvcmlnaW4pKTsKIH0KIAorV0tTdHJpbmdSZWYg
V0tCdW5kbGVQYWdlRHVtcEhpc3RvcnlGb3JUZXN0aW5nKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBX
S1N0cmluZ1JlZiBkaXJlY3RvcnkpCit7CisgICAgcmV0dXJuIHRvQ29waWVkQVBJKHRvSW1wbChw
YWdlKS0+ZHVtcEhpc3RvcnlGb3JUZXN0aW5nKHRvV1RGU3RyaW5nKGRpcmVjdG9yeSkpKTsKK30K
Kwordm9pZCBXS0J1bmRsZUNsZWFySGlzdG9yeUZvclRlc3RpbmcoV0tCdW5kbGVQYWdlUmVmIHBh
Z2UpCit7CisgICAgdG9JbXBsKHBhZ2UpLT5jbGVhckhpc3RvcnkoKTsKK30KKwogV0tCdW5kbGVC
YWNrRm9yd2FyZExpc3RSZWYgV0tCdW5kbGVQYWdlR2V0QmFja0ZvcndhcmRMaXN0KFdLQnVuZGxl
UGFnZVJlZiBwYWdlUmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwocGFnZVJlZiktPmJh
Y2tGb3J3YXJkTGlzdCgpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogdm9pZCBXS0J1bmRs
ZVBhZ2VJbnN0YWxsUGFnZU92ZXJsYXkoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxl
UGFnZU92ZXJsYXlSZWYgcGFnZU92ZXJsYXlSZWYpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFn
ZS5oCShyZXZpc2lvbiAyMzcxNDgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2
LDcgQEAKICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGVQYWdlUG9saWN5Q2xpZW50Lmg+CiAjaW5j
bHVkZSA8V2ViS2l0L1dLQnVuZGxlUGFnZVJlc291cmNlTG9hZENsaWVudC5oPgogI2luY2x1ZGUg
PFdlYktpdC9XS0J1bmRsZVBhZ2VVSUNsaWVudC5oPgorI2luY2x1ZGUgPFdlYktpdC9XS0RlcHJl
Y2F0ZWQuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tGaW5kT3B0aW9ucy5oPgogI2luY2x1ZGUgPFdl
YktpdC9XS0ltYWdlLmg+CiAKQEAgLTY5LDcgKzcwLDkgQEAgV0tfRVhQT1JUIFdLQnVuZGxlUGFn
ZUdyb3VwUmVmIFdLQnVuZGxlUAogV0tfRVhQT1JUIFdLQnVuZGxlRnJhbWVSZWYgV0tCdW5kbGVQ
YWdlR2V0TWFpbkZyYW1lKFdLQnVuZGxlUGFnZVJlZiBwYWdlKTsKIFdLX0VYUE9SVCBXS0ZyYW1l
SGFuZGxlUmVmIFdLQnVuZGxlRnJhbWVDcmVhdGVGcmFtZUhhbmRsZShXS0J1bmRsZUZyYW1lUmVm
KTsKIAotV0tfRVhQT1JUIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0UmVmIFdLQnVuZGxlUGFnZUdl
dEJhY2tGb3J3YXJkTGlzdChXS0J1bmRsZVBhZ2VSZWYgcGFnZSk7CitXS19FWFBPUlQgV0tCdW5k
bGVCYWNrRm9yd2FyZExpc3RSZWYgV0tCdW5kbGVQYWdlR2V0QmFja0ZvcndhcmRMaXN0KFdLQnVu
ZGxlUGFnZVJlZiBwYWdlKSBXS19DX0FQSV9ERVBSRUNBVEVEOworV0tfRVhQT1JUIFdLU3RyaW5n
UmVmIFdLQnVuZGxlUGFnZUR1bXBIaXN0b3J5Rm9yVGVzdGluZyhXS0J1bmRsZVBhZ2VSZWYgcGFn
ZSwgV0tTdHJpbmdSZWYgZGlyZWN0b3J5KTsKK1dLX0VYUE9SVCB2b2lkIFdLQnVuZGxlQ2xlYXJI
aXN0b3J5Rm9yVGVzdGluZyhXS0J1bmRsZVBhZ2VSZWYgcGFnZSk7CiAKIFdLX0VYUE9SVCB2b2lk
IFdLQnVuZGxlUGFnZUluc3RhbGxQYWdlT3ZlcmxheShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tC
dW5kbGVQYWdlT3ZlcmxheVJlZiBwYWdlT3ZlcmxheSk7CiBXS19FWFBPUlQgdm9pZCBXS0J1bmRs
ZVBhZ2VVbmluc3RhbGxQYWdlT3ZlcmxheShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVQ
YWdlT3ZlcmxheVJlZiBwYWdlT3ZlcmxheSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNs
aWVudC5jcHAJKHJldmlzaW9uIDIzNzE0OCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJGaW5kQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZy
YW1lSW5mb0RhdGEuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgotI2luY2x1ZGUgIklu
amVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVu
ZGxlRE9NV2luZG93RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVOYXZpZ2F0
aW9uQWN0aW9uLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpJbmRleDogU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDIzNzE1NykKKysrIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAiR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXIuaCIKICNpbmNsdWRlICJJbmplY3RVc2VyU2NyaXB0SW1tZWRpYXRlbHkuaCIKICNp
bmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgotI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlQmFja0Zv
cndhcmRMaXN0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZC5oIgogI2lu
Y2x1ZGUgIkxpYldlYlJUQ1Byb3ZpZGVyLmgiCiAjaW5jbHVkZSAiTG9hZFBhcmFtZXRlcnMuaCIK
QEAgLTcwMSw5ICs3MDAsNiBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVVzZXJBY3Rpdml0eSgpCiAK
IFdlYlBhZ2U6On5XZWJQYWdlKCkKIHsKLSAgICBpZiAobV9iYWNrRm9yd2FyZExpc3QpCi0gICAg
ICAgIG1fYmFja0ZvcndhcmRMaXN0LT5kZXRhY2goKTsKLQogICAgIEFTU0VSVCghbV9wYWdlKTsK
IAogICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKQEAgLTE2
MTQsNiArMTYxMCw3NCBAQCB2b2lkIFdlYlBhZ2U6OnNldFBhZ2Vab29tRmFjdG9yKGRvdWJsZSB6
CiAgICAgZnJhbWUtPnNldFBhZ2Vab29tRmFjdG9yKHN0YXRpY19jYXN0PGZsb2F0Pih6b29tRmFj
dG9yKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGR1bXBIaXN0b3J5SXRlbShIaXN0b3J5SXRlbSYgaXRl
bSwgc2l6ZV90IGluZGVudCwgYm9vbCBpc0N1cnJlbnRJdGVtLCBTdHJpbmdCdWlsZGVyJiBzdHJp
bmdCdWlsZGVyLCBjb25zdCBTdHJpbmcmIGRpcmVjdG9yeU5hbWUpCit7CisgICAgaWYgKGlzQ3Vy
cmVudEl0ZW0pCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiY3Vyci0+ICAi
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRlbnQ7ICsr
aSkKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCcgJyk7CisgICAgfQorCisgICAg
YXV0byB1cmwgPSBpdGVtLnVybCgpOworICAgIGlmICh1cmwucHJvdG9jb2xJcygiZmlsZSIpKSB7
CisgICAgICAgIHNpemVfdCBzdGFydCA9IHVybC5zdHJpbmcoKS5maW5kKGRpcmVjdG9yeU5hbWUp
OworICAgICAgICBpZiAoc3RhcnQgPT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgICAgIHN0YXJ0
ID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RhcnQgKz0gZGlyZWN0b3J5TmFtZS5s
ZW5ndGgoKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIoZmlsZSB0ZXN0
KToiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodXJsLnN0cmluZygpLnN1YnN0cmlu
ZyhzdGFydCkpOworICAgIH0gZWxzZQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh1cmwp
OworICAgIAorICAgIGF1dG8mIHRhcmdldCA9IGl0ZW0udGFyZ2V0KCk7CisgICAgaWYgKHRhcmdl
dC5sZW5ndGgoKSkgeworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAoaW4g
ZnJhbWUgXCIiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodGFyZ2V0KTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIikiKTsKKyAgICB9CisgICAgCisgICAg
aWYgKGl0ZW0uaXNUYXJnZXRJdGVtKCkpCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiICAqKm5hdiB0YXJnZXQqKiIpOworICAgIAorICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCdcbicpOworICAgIAorICAgIFZlY3RvcjxSZWY8SGlzdG9yeUl0ZW0+PiBjaGlsZHJlbjsKKyAg
ICBjaGlsZHJlbi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGl0ZW0uY2hpbGRyZW4oKS5zaXplKCkp
OworICAgIGZvciAoYXV0byYgY2hpbGQgOiBpdGVtLmNoaWxkcmVuKCkpCisgICAgICAgIGNoaWxk
cmVuLnVuY2hlY2tlZEFwcGVuZChjaGlsZC5jb3B5UmVmKCkpOworICAgIHN0ZDo6c3RhYmxlX3Nv
cnQoY2hpbGRyZW4uYmVnaW4oKSwgY2hpbGRyZW4uZW5kKCksIFtdIChhdXRvJiBhLCBhdXRvJiBi
KSB7CisgICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKGEtPnRhcmdldCgpLCBiLT50YXJn
ZXQoKSkgPCAwOworICAgIH0pOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikKKyAg
ICAgICAgZHVtcEhpc3RvcnlJdGVtKGNoaWxkLCBpbmRlbnQgKyA0LCBmYWxzZSwgc3RyaW5nQnVp
bGRlciwgZGlyZWN0b3J5TmFtZSk7Cit9CisKK1N0cmluZyBXZWJQYWdlOjpkdW1wSGlzdG9yeUZv
clRlc3RpbmcoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnkpCit7CisgICAgaWYgKCFtX3BhZ2UpCisg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvJiBsaXN0ID0gbV9wYWdlLT5iYWNrRm9yd2Fy
ZCgpOworICAgIAorICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBpbnQgYmVnaW4gPSAt
bGlzdC5iYWNrQ291bnQoKTsKKyAgICBpZiAobGlzdC5pdGVtQXRJbmRleChiZWdpbiktPnVybCgp
ID09IGJsYW5rVVJMKCkpCisgICAgICAgICsrYmVnaW47CisgICAgZm9yIChpbnQgaSA9IGJlZ2lu
OyBpIDw9IGxpc3QuZm9yd2FyZENvdW50KCk7ICsraSkKKyAgICAgICAgZHVtcEhpc3RvcnlJdGVt
KCpsaXN0Lml0ZW1BdEluZGV4KGkpLCA4LCAhaSwgYnVpbGRlciwgZGlyZWN0b3J5KTsKKyAgICBy
ZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCit2b2lkIFdlYlBhZ2U6OmNsZWFySGlzdG9y
eSgpCit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRpY19j
YXN0PFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5Jj4obV9wYWdlLT5iYWNrRm9yd2FyZCgpLmNsaWVu
dCgpKS5jbGVhcigpOworfQorCiB2b2lkIFdlYlBhZ2U6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3Rv
cnMoZG91YmxlIHBhZ2Vab29tRmFjdG9yLCBkb3VibGUgdGV4dFpvb21GYWN0b3IpCiB7CiAgICAg
UGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZSgmbV9wYWdlLT5tYWlu
RnJhbWUoKSk7CkBAIC00MDc2LDEzICs0MTQwLDYgQEAgdm9pZCBXZWJQYWdlOjpkaWRSZWNlaXZl
U3luY01lc3NhZ2UoSVBDOgogeyAgIAogICAgIGRpZFJlY2VpdmVTeW5jV2ViUGFnZU1lc3NhZ2Uo
Y29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKIH0KLSAgICAKLUluamVjdGVkQnVu
ZGxlQmFja0ZvcndhcmRMaXN0KiBXZWJQYWdlOjpiYWNrRm9yd2FyZExpc3QoKQotewotICAgIGlm
ICghbV9iYWNrRm9yd2FyZExpc3QpCi0gICAgICAgIG1fYmFja0ZvcndhcmRMaXN0ID0gSW5qZWN0
ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZSh0aGlzKTsKLSAgICByZXR1cm4gbV9iYWNr
Rm9yd2FyZExpc3QuZ2V0KCk7Ci19CiAKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQogU2Ny
b2xsaW5nQ29vcmRpbmF0b3IqIFdlYlBhZ2U6OnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlz
aW9uIDIzNzE0OCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw2IEBAIGNsYXNzIERvd25sb2FkSUQ7CiBj
bGFzcyBGaW5kQ29udHJvbGxlcjsKIGNsYXNzIEdhbWVwYWREYXRhOwogY2xhc3MgR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI7Ci1jbGFzcyBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3
YXJkTGlzdDsKIGNsYXNzIE1lZGlhRGV2aWNlU2FuZGJveEV4dGVuc2lvbnM7CiBjbGFzcyBOb3Rp
ZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI7CiBjbGFzcyBQREZQbHVnaW47CkBAIC0y
NzAsOCArMjY5LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2l6ZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJik7CiAgICAgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmlld1NpemU7IH0KICAgICBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIFdlYkNvcmU6OkludFJlY3QoV2ViQ29yZTo6SW50UG9pbnQoKSwgc2l6ZSgpKTsgfQot
ICAgIAotICAgIEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3Qo
KTsKKwogICAgIERyYXdpbmdBcmVhKiBkcmF3aW5nQXJlYSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJh
d2luZ0FyZWEuZ2V0KCk7IH0KIAogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCkBAIC00NDks
NiArNDQ3LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0UGFnZVpvb21GYWN0b3IoZG91YmxlKTsK
ICAgICB2b2lkIHNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMoZG91YmxlIHBhZ2Vab29tRmFjdG9y
LCBkb3VibGUgdGV4dFpvb21GYWN0b3IpOwogICAgIHZvaWQgd2luZG93U2NyZWVuRGlkQ2hhbmdl
KHVpbnQzMl90KTsKKyAgICBTdHJpbmcgZHVtcEhpc3RvcnlGb3JUZXN0aW5nKGNvbnN0IFN0cmlu
ZyYgZGlyZWN0b3J5KTsKKyAgICB2b2lkIGNsZWFySGlzdG9yeSgpOwogCiAgICAgdm9pZCBhY2Nl
c3NpYmlsaXR5U2V0dGluZ3NEaWRDaGFuZ2UoKTsKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9F
VkVOVFMpCkBAIC0xNDM5LDcgKzE0MzksNiBAQCBwcml2YXRlOgogCiAgICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OlBhZ2U+IG1fcGFnZTsKICAgICBSZWZQdHI8V2ViRnJhbWU+IG1fbWFpbkZy
YW1lOwotICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdD4gbV9iYWNrRm9y
d2FyZExpc3Q7CiAKICAgICBSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+IG1fcGFnZUdyb3VwOwog
CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMzcyMDMpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwyMyBAQAorMjAxOC0xMC0xNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlz
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwNjQw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmR1bXBCYWNrRm9yd2FyZExpc3RzRm9yQWxsUGFnZXMpOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQ
YWdlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpwcmVwYXJlKToKKyAg
ICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wSGlzdG9yeSk6CisgICAgICAgIChX
VFI6Omhhc1ByZWZpeCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OmNvbXBhcmVCeVRhcmdldE5h
bWUpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpkdW1wQmFja0ZvcndhcmRMaXN0SXRlbSk6IERl
bGV0ZWQuCisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcEJhY2tGb3J3YXJk
TGlzdCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZVBhZ2UuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpjbGVh
ckJhY2tGb3J3YXJkTGlzdCk6CisKIDIwMTgtMTAtMTYgIERvbWluaWsgSW5mdWVociAgPGRpbmZ1
ZWhyQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYWRkZWQgbXlzZWxmIHRvIGNv
bnRyaWJ1dG9ycy5qc29uLgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJldmlzaW9uIDIzNzE0OCkK
KysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODEsNyArNTgxLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZTo6ZHVtcEJhY2tGb3J3YXJkTGlzdAogewogICAgIHNpemVfdCBzaXplID0gbV9wYWdlcy5zaXpl
KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIG1fcGFn
ZXNbaV0tPmR1bXBCYWNrRm9yd2FyZExpc3Qoc3RyaW5nQnVpbGRlcik7CisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1fcGFnZXNbaV0tPmR1bXBIaXN0b3J5KCkpOwogfQogCiB2b2lkIElu
amVjdGVkQnVuZGxlOjpkdW1wVG9TdGRFcnIoY29uc3QgU3RyaW5nJiBvdXRwdXQpCkluZGV4OiBU
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZVBhZ2UuY3BwCShyZXZpc2lvbiAyMzcxNDgpCisrKyBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU4LDExICs1OCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFj
ZSBXVFIgewogCi1zdGF0aWMgYm9vbCBoYXNQcmVmaXgoY29uc3QgV1RGOjpTdHJpbmcmIHNlYXJj
aFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHByZWZpeCkKLXsKLSAgICByZXR1cm4gc2VhcmNo
U3RyaW5nLmxlbmd0aCgpID49IHByZWZpeC5sZW5ndGgoKSAmJiBzZWFyY2hTdHJpbmcuc3Vic3Ry
aW5nKDAsIHByZWZpeC5sZW5ndGgoKSkgPT0gcHJlZml4OwotfQotCiBzdGF0aWMgSlNWYWx1ZVJl
ZiBwcm9wZXJ0eVZhbHVlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3Qs
IGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSkKIHsKICAgICBpZiAoIW9iamVjdCkKQEAgLTQxNiw4
ICs0MTEsOCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6cHJlcGFyZSgpCiAKICAgICBXS1Bv
aW50IG9yaWdpbiA9IHsgMCwgMCB9OwogICAgIFdLQnVuZGxlUGFnZVNldFNjYWxlQXRPcmlnaW4o
bV9wYWdlLCAxLCBvcmlnaW4pOwotCi0gICAgbV9wcmV2aW91c1Rlc3RCYWNrRm9yd2FyZExpc3RJ
dGVtID0gYWRvcHRXSyhXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdENvcHlJdGVtQXRJbmRleChXS0J1
bmRsZVBhZ2VHZXRCYWNrRm9yd2FyZExpc3QobV9wYWdlKSwgMCkpOworICAgIAorICAgIFdLQnVu
ZGxlQ2xlYXJIaXN0b3J5Rm9yVGVzdGluZyhtX3BhZ2UpOwogCiAgICAgV0tCdW5kbGVGcmFtZUNs
ZWFyT3BlbmVyKFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2UpKTsKICAgICAKQEAgLTE5
NDQsOTMgKzE5MzksMTMgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmNsb3NlRnVsbFNjcmVl
bgogfQogI2VuZGlmCiAKLXN0YXRpYyBib29sIGNvbXBhcmVCeVRhcmdldE5hbWUoV0tCdW5kbGVC
YWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0ZW0xLCBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1S
ZWYgaXRlbTIpCi17Ci0gICAgcmV0dXJuIHRvU1REKGFkb3B0V0soV0tCdW5kbGVCYWNrRm9yd2Fy
ZExpc3RJdGVtQ29weVRhcmdldChpdGVtMSkpKSA8IHRvU1REKGFkb3B0V0soV0tCdW5kbGVCYWNr
Rm9yd2FyZExpc3RJdGVtQ29weVRhcmdldChpdGVtMikpKTsKLX0KLQotc3RhdGljIHZvaWQgZHVt
cEJhY2tGb3J3YXJkTGlzdEl0ZW0oV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGl0ZW0s
IHVuc2lnbmVkIGluZGVudCwgYm9vbCBpc0N1cnJlbnRJdGVtLCBTdHJpbmdCdWlsZGVyJiBzdHJp
bmdCdWlsZGVyKQotewotICAgIHVuc2lnbmVkIGNvbHVtbiA9IDA7Ci0gICAgaWYgKGlzQ3VycmVu
dEl0ZW0pIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJjdXJyLT4iKTsK
LSAgICAgICAgY29sdW1uID0gNjsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gY29sdW1u
OyBpIDwgaW5kZW50OyBpKyspCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCcgJyk7Ci0K
LSAgICBXVEY6OlN0cmluZyB1cmwgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmlu
ZyhhZG9wdFdLKFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbUNvcHlVUkwoaXRlbSkpLmdldCgp
KSkpOwotICAgIGlmIChoYXNQcmVmaXgodXJsLCAiZmlsZToiKSkgewotICAgICAgICBXVEY6OlN0
cmluZyBkaXJlY3RvcnlOYW1lID0gIi9MYXlvdXRUZXN0cy8iOwotICAgICAgICBzaXplX3Qgc3Rh
cnQgPSB1cmwuZmluZChkaXJlY3RvcnlOYW1lKTsKLSAgICAgICAgaWYgKHN0YXJ0ID09IFdURjo6
bm90Rm91bmQpCi0gICAgICAgICAgICBzdGFydCA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHN0YXJ0ICs9IGRpcmVjdG9yeU5hbWUubGVuZ3RoKCk7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiKGZpbGUgdGVzdCk6Iik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKHVybC5zdWJzdHJpbmcoc3RhcnQpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQodXJsKTsKLQotICAgIFdURjo6U3RyaW5nIHRhcmdldCA9IHRvV1RGU3Ry
aW5nKGFkb3B0V0soV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtQ29weVRhcmdldChpdGVtKSkp
OwotICAgIGlmICh0YXJnZXQubGVuZ3RoKCkpIHsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIgKGluIGZyYW1lIFwiIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHRhcmdldCk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXCIpIik7Ci0g
ICAgfQotCi0gICAgLy8gRklYTUU6IE5lZWQgV0tCYWNrRm9yd2FyZExpc3RJdGVtSXNUYXJnZXRJ
dGVtLgotICAgIGlmIChXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1Jc1RhcmdldEl0ZW0oaXRl
bSkpCi0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICAqKm5hdiB0YXJnZXQq
KiIpOwotCi0gICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0KLSAgICBpZiAoV0tSZXRh
aW5QdHI8V0tBcnJheVJlZj4ga2lkcyA9IGFkb3B0V0soV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJ
dGVtQ29weUNoaWxkcmVuKGl0ZW0pKSkgewotICAgICAgICAvLyBTb3J0IHRvIGVsaW1pbmF0ZSBh
cmJpdHJhcnkgcmVzdWx0IG9yZGVyaW5nIHdoaWNoIGRlZmVhdHMgcmVwcm9kdWNpYmxlIHRlc3Rp
bmcuCi0gICAgICAgIHNpemVfdCBzaXplID0gV0tBcnJheUdldFNpemUoa2lkcy5nZXQoKSk7Ci0g
ICAgICAgIFZlY3RvcjxXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1SZWY+IHNvcnRlZEtpZHMo
c2l6ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAg
ICAgICAgc29ydGVkS2lkc1tpXSA9IHN0YXRpY19jYXN0PFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0
SXRlbVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KGtpZHMuZ2V0KCksIGkpKTsKLSAgICAgICAg
c3RhYmxlX3NvcnQoc29ydGVkS2lkcy5iZWdpbigpLCBzb3J0ZWRLaWRzLmVuZCgpLCBjb21wYXJl
QnlUYXJnZXROYW1lKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
Ci0gICAgICAgICAgICBkdW1wQmFja0ZvcndhcmRMaXN0SXRlbShzb3J0ZWRLaWRzW2ldLCBpbmRl
bnQgKyA0LCBmYWxzZSwgc3RyaW5nQnVpbGRlcik7Ci0gICAgfQotfQotCi12b2lkIEluamVjdGVk
QnVuZGxlUGFnZTo6ZHVtcEJhY2tGb3J3YXJkTGlzdChTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWls
ZGVyKQorU3RyaW5nIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcEhpc3RvcnkoKQogewotICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXG49PT09PT09PT09PT09PSBCYWNrIEZvcndhcmQg
TGlzdCA9PT09PT09PT09PT09PVxuIik7Ci0KLSAgICBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdFJl
ZiBsaXN0ID0gV0tCdW5kbGVQYWdlR2V0QmFja0ZvcndhcmRMaXN0KG1fcGFnZSk7Ci0KLSAgICAv
LyBQcmludCBvdXQgYWxsIGl0ZW1zIGluIHRoZSBsaXN0IGFmdGVyIG1fcHJldmlvdXNUZXN0QmFj
a0ZvcndhcmRMaXN0SXRlbS4KLSAgICAvLyBHYXRoZXIgaXRlbXMgZnJvbSB0aGUgZW5kIG9mIHRo
ZSBsaXN0LCB0aGVuIHByaW50IHRoZW0gb3V0IGZyb20gb2xkZXN0IHRvIG5ld2VzdC4KLSAgICBW
ZWN0b3I8V0tSZXRhaW5QdHI8V0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtUmVmPiA+IGl0ZW1z
VG9QcmludDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEdl
dEZvcndhcmRMaXN0Q291bnQobGlzdCk7IGk7IC0taSkgewotICAgICAgICBXS1JldGFpblB0cjxX
S0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1SZWY+IGl0ZW0gPSBhZG9wdFdLKFdLQnVuZGxlQmFj
a0ZvcndhcmRMaXN0Q29weUl0ZW1BdEluZGV4KGxpc3QsIGkpKTsKLSAgICAgICAgLy8gU29tZXRo
aW5nIGlzIHdyb25nIGlmIHRoZSBpdGVtIGZyb20gdGhlIGxhc3QgdGVzdCBpcyBpbiB0aGUgZm9y
d2FyZCBwYXJ0IG9mIHRoZSBsaXN0LgotICAgICAgICBBU1NFUlQoIW1fcHJldmlvdXNUZXN0QmFj
a0ZvcndhcmRMaXN0SXRlbSB8fCAhV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtSXNTYW1lKGl0
ZW0uZ2V0KCksIG1fcHJldmlvdXNUZXN0QmFja0ZvcndhcmRMaXN0SXRlbS5nZXQoKSkpOwotICAg
ICAgICBpdGVtc1RvUHJpbnQuYXBwZW5kKGl0ZW0pOwotICAgIH0KLQotICAgIEFTU0VSVCghbV9w
cmV2aW91c1Rlc3RCYWNrRm9yd2FyZExpc3RJdGVtIHx8ICFXS0J1bmRsZUJhY2tGb3J3YXJkTGlz
dEl0ZW1Jc1NhbWUoYWRvcHRXSyhXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdENvcHlJdGVtQXRJbmRl
eChsaXN0LCAwKSkuZ2V0KCksIG1fcHJldmlvdXNUZXN0QmFja0ZvcndhcmRMaXN0SXRlbS5nZXQo
KSkpOwotCi0gICAgaXRlbXNUb1ByaW50LmFwcGVuZChhZG9wdFdLKFdLQnVuZGxlQmFja0Zvcndh
cmRMaXN0Q29weUl0ZW1BdEluZGV4KGxpc3QsIDApKSk7Ci0KLSAgICBpbnQgY3VycmVudEl0ZW1J
bmRleCA9IGl0ZW1zVG9QcmludC5zaXplKCkgLSAxOwotCi0gICAgaW50IGJhY2tMaXN0Q291bnQg
PSBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEdldEJhY2tMaXN0Q291bnQobGlzdCk7Ci0gICAgZm9y
IChpbnQgaSA9IC0xOyBpID49IC1iYWNrTGlzdENvdW50OyAtLWkpIHsKLSAgICAgICAgV0tSZXRh
aW5QdHI8V0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtUmVmPiBpdGVtID0gYWRvcHRXSyhXS0J1
bmRsZUJhY2tGb3J3YXJkTGlzdENvcHlJdGVtQXRJbmRleChsaXN0LCBpKSk7Ci0gICAgICAgIGlm
IChtX3ByZXZpb3VzVGVzdEJhY2tGb3J3YXJkTGlzdEl0ZW0gJiYgV0tCdW5kbGVCYWNrRm9yd2Fy
ZExpc3RJdGVtSXNTYW1lKGl0ZW0uZ2V0KCksIG1fcHJldmlvdXNUZXN0QmFja0ZvcndhcmRMaXN0
SXRlbS5nZXQoKSkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaXRlbXNUb1ByaW50LmFw
cGVuZChpdGVtKTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gaXRlbXNUb1ByaW50LnNpemUo
KSAtIDE7IGkgPj0gMDsgaS0tKQotICAgICAgICBkdW1wQmFja0ZvcndhcmRMaXN0SXRlbShpdGVt
c1RvUHJpbnRbaV0uZ2V0KCksIDgsIGkgPT0gY3VycmVudEl0ZW1JbmRleCwgc3RyaW5nQnVpbGRl
cik7Ci0KLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKyAgICByZXR1cm4gbWFrZVN0cmlu
ZygKKyAgICAgICAgIlxuPT09PT09PT09PT09PT0gQmFjayBGb3J3YXJkIExpc3QgPT09PT09PT09
PT09PT1cbiIsCisgICAgICAgIHRvV1RGU3RyaW5nKGFkb3B0V0soV0tCdW5kbGVQYWdlRHVtcEhp
c3RvcnlGb3JUZXN0aW5nKG1fcGFnZSwgdG9XSygiL0xheW91dFRlc3RzLyIpLmdldCgpKSkuZ2V0
KCkpLAorICAgICAgICAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT1cbiIKKyAgICApOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlUGFnZS5oCShyZXZpc2lvbiAyMzcxNDgpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHByZXBhcmUoKTsKICAgICB2b2lkIHJlc2V0
QWZ0ZXJUZXN0KCk7CiAKLSAgICB2b2lkIGR1bXBCYWNrRm9yd2FyZExpc3QoV1RGOjpTdHJpbmdC
dWlsZGVyJik7CisgICAgU3RyaW5nIGR1bXBIaXN0b3J5KCk7CiAKICAgICBzdGF0aWMgdWludDY0
X3QgcmVzcG9uc2VIZWFkZXJDb3VudChXS1VSTFJlc3BvbnNlUmVmKTsKIApAQCAtMTc5LDcgKzE3
OSw2IEBAIHByaXZhdGU6CiAKICAgICBXS0J1bmRsZVBhZ2VSZWYgbV9wYWdlOwogICAgIFdLUmV0
YWluUHRyPFdLQnVuZGxlU2NyaXB0V29ybGRSZWY+IG1fd29ybGQ7Ci0gICAgV0tSZXRhaW5QdHI8
V0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtUmVmPiBtX3ByZXZpb3VzVGVzdEJhY2tGb3J3YXJk
TGlzdEl0ZW07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAkocmV2aXNp
b24gMjM3MTQ4KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0
UnVubmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEyLDcgKzYxMiw3IEBAIHVuc2lnbmVkIFRl
c3RSdW5uZXI6OndpbmRvd0NvdW50KCkKIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckJhY2tGb3J3
YXJkTGlzdCgpCiB7Ci0gICAgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RDbGVhcihXS0J1bmRsZVBh
Z2VHZXRCYWNrRm9yd2FyZExpc3QoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpKSk7CisgICAgV0tCdW5kbGVDbGVhckhpc3RvcnlGb3JUZXN0aW5nKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CiB9CiAKIC8vIE9iamVjdCBDcmVhdGlv
bgo=
</data>
<flag name="review"
          id="369789"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>