<?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>236017</bug_id>
          
          <creation_ts>2022-02-02 08:09:12 -0800</creation_ts>
          <short_desc>Move SharedWorkerThread &amp; SharedWorkerProxy to workers/shared/context/</short_desc>
          <delta_ts>2022-02-02 11:58:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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>
          
          <blocked>235958</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>annulen</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mkwst</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1836434</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-02 08:09:12 -0800</bug_when>
    <thetext>Move SharedWorkerThread &amp; SharedWorkerProxy to workers/shared/context/, for consistency with service workers. Also rename SharedWorkerProxy to SharedWorkerThreadProxy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836439</commentid>
    <comment_count>1</comment_count>
      <attachid>450646</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-02 08:35:18 -0800</bug_when>
    <thetext>Created attachment 450646
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836457</commentid>
    <comment_count>2</comment_count>
      <attachid>450646</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2022-02-02 08:58:44 -0800</bug_when>
    <thetext>Comment on attachment 450646
Patch

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

&gt; Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.cpp:112
&gt; +    m_scriptExecutionContext-&gt;postTask([this] (ScriptExecutionContext&amp;) {

s/ScriptExecutionContext/auto/.
Are we sure this is valid?
Maybe add a comment stating why.

&gt; Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.h:40
&gt; +class SharedWorkerThreadProxy : public ThreadSafeRefCounted&lt;SharedWorkerThreadProxy&gt;, public WorkerGlobalScopeProxy, public WorkerObjectProxy, public WorkerLoaderProxy, public WorkerDebuggerProxy {

final?

&gt; Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.h:65
&gt; +    void setResourceCachingDisabledByWebInspector(bool) final;

Can they be made private?

&gt; Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.h:68
&gt; +    SharedWorkerThreadProxy(SharedWorker&amp;);

explicit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836461</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-02 09:00:57 -0800</bug_when>
    <thetext>(In reply to youenn fablet from comment #2)
&gt; Comment on attachment 450646 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=450646&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.cpp:112
&gt; &gt; +    m_scriptExecutionContext-&gt;postTask([this] (ScriptExecutionContext&amp;) {
&gt; 
&gt; s/ScriptExecutionContext/auto/.
&gt; Are we sure this is valid?
&gt; Maybe add a comment stating why.
&gt; 
&gt; &gt; Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.h:40
&gt; &gt; +class SharedWorkerThreadProxy : public ThreadSafeRefCounted&lt;SharedWorkerThreadProxy&gt;, public WorkerGlobalScopeProxy, public WorkerObjectProxy, public WorkerLoaderProxy, public WorkerDebuggerProxy {
&gt; 
&gt; final?
&gt; 
&gt; &gt; Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.h:65
&gt; &gt; +    void setResourceCachingDisabledByWebInspector(bool) final;
&gt; 
&gt; Can they be made private?
&gt; 
&gt; &gt; Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.h:68
&gt; &gt; +    SharedWorkerThreadProxy(SharedWorker&amp;);
&gt; 
&gt; explicit.

These classes change *significantly* in the next patch at Bug 235958 but OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836474</commentid>
    <comment_count>4</comment_count>
      <attachid>450657</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-02 09:13:35 -0800</bug_when>
    <thetext>Created attachment 450657
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836569</commentid>
    <comment_count>5</comment_count>
      <attachid>450657</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-02 11:57:00 -0800</bug_when>
    <thetext>Comment on attachment 450657
Patch

Clearing flags on attachment: 450657

Committed r288975 (246704@trunk): &lt;https://commits.webkit.org/246704@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836570</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-02 11:57:04 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836572</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-02 11:58:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/88393944&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450646</attachid>
            <date>2022-02-02 08:35:18 -0800</date>
            <delta_ts>2022-02-02 09:13:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236017-20220202083517.patch</filename>
            <type>text/plain</type>
            <size>52041</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4OTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzVkYTA4MDZjZGJiOTEw
ZTMzYmVmNWEzNDE1ODExMjMwNzkwZTcwMC4uZTdjM2E0ZmJkNDk5MWRlMDRkZDVlZTBjYjQzN2Yz
NjRjMGEyYjE0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDIyLTAyLTAyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBTaGFyZWRXb3JrZXJU
aHJlYWQgJiBTaGFyZWRXb3JrZXJQcm94eSB0byB3b3JrZXJzL3NoYXJlZC9jb250ZXh0LworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2MDE3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBTaGFyZWRX
b3JrZXJUaHJlYWQgJiBTaGFyZWRXb3JrZXJQcm94eSB0byB3b3JrZXJzL3NoYXJlZC9jb250ZXh0
LywgZm9yIGNvbnNpc3RlbmN5IHdpdGggc2VydmljZSB3b3JrZXJzLgorICAgICAgICBBbHNvIHJl
bmFtZSBTaGFyZWRXb3JrZXJQcm94eSB0byBTaGFyZWRXb3JrZXJUaHJlYWRQcm94eS4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAg
ICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHdvcmtlcnMvc2hhcmVkL1NoYXJlZFdvcmtlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRXb3JrZXI6OlNoYXJlZFdvcmtlcik6CisgICAgICAgICogd29ya2Vy
cy9zaGFyZWQvU2hhcmVkV29ya2VyLmg6CisgICAgICAgICogd29ya2Vycy9zaGFyZWQvU2hhcmVk
V29ya2VyTWFuYWdlci5jcHA6CisgICAgICAgICogd29ya2Vycy9zaGFyZWQvY29udGV4dC9TaGFy
ZWRXb3JrZXJUaHJlYWQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvd29ya2Vycy9z
aGFyZWQvU2hhcmVkV29ya2VyVGhyZWFkLmNwcC4KKyAgICAgICAgKiB3b3JrZXJzL3NoYXJlZC9j
b250ZXh0L1NoYXJlZFdvcmtlclRocmVhZC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
d29ya2Vycy9zaGFyZWQvU2hhcmVkV29ya2VyVGhyZWFkLmguCisgICAgICAgICogd29ya2Vycy9z
aGFyZWQvY29udGV4dC9TaGFyZWRXb3JrZXJUaHJlYWRQcm94eS5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS93b3JrZXJzL3NoYXJlZC9TaGFyZWRXb3JrZXJQcm94eS5jcHAuCisgICAg
ICAgICogd29ya2Vycy9zaGFyZWQvY29udGV4dC9TaGFyZWRXb3JrZXJUaHJlYWRQcm94eS5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zaGFyZWQvU2hhcmVkV29ya2VyUHJv
eHkuaC4KKwogMjAyMi0wMi0wMiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAK
ICAgICAgICAgTGliV2ViUlRDQ29kZWNzIHNob3VsZCBub3QgbmVlZCB0byBjcmVhdGUgSU9TdXJm
YWNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA3OTJhMDBmOWVhMWEyMjgxMjY1Y2NmOWE0NWVh
ZWM3NjBhODk4MjVhLi40NTdjNGFhOWIxYTE4Y2NmYTlhYjI4N2U0ZTBiMzcwZWUzYWQ1MDljIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTc5LDYgKzE3OSw3IEBAIHNldChXZWJDb3JlX1BSSVZB
VEVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS93b3JrZXJzL3NlcnZp
Y2UvY29udGV4dCIKICAgICAiJHtXRUJDT1JFX0RJUn0vd29ya2Vycy9zZXJ2aWNlL3NlcnZlciIK
ICAgICAiJHtXRUJDT1JFX0RJUn0vd29ya2Vycy9zaGFyZWQiCisgICAgIiR7V0VCQ09SRV9ESVJ9
L3dvcmtlcnMvc2hhcmVkL2NvbnRleHQiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3dvcmtsZXRzIgog
ICAgICIke1dFQkNPUkVfRElSfS94bWwiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3htbC9wYXJzZXIi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZQppbmRleCA4OWI4MmExM2Y3ZTRkNjE0YTQ1YzFhN2ZmY2NhNzA5NTU4
YmViMzA4Li5lMTQzN2E2YmMxM2MwOTI0ZDAxN2NkMDJlYWE3ZWE1NDJmZmFkNDUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hl
YWRlcnMuY21ha2UKQEAgLTIwMDAsNiArMjAwMCw5IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVyVG9Db250
ZXh0Q29ubmVjdGlvbi5oCiAgICAgd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlcldvcmtl
ci5oCiAKKyAgICB3b3JrZXJzL3NoYXJlZC9jb250ZXh0L1NoYXJlZFdvcmtlclRocmVhZC5oCisg
ICAgd29ya2Vycy9zaGFyZWQvY29udGV4dC9TaGFyZWRXb3JrZXJUaHJlYWRQcm94eS5oCisKICAg
ICB4bWwvQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmgKICAgICB4bWwvWFBhdGhFeHByZXNzaW9uLmgK
ICAgICB4bWwvWFBhdGhOU1Jlc29sdmVyLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggZjY2Y2NmOGYwNmE1
NzkxOWQ4YTRlYTBkYzBkMDg5MDAxNjU0NTU2Ny4uYTBlOWE4ZWI3ZTAwOTcwOTM4YjYwZTMwYjY1
NWMyNDQ3ZmI4MmM1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTI3ODcsOSArMjc4Nyw5IEBAIHdvcmtl
cnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXJXb3JrZXIuY3BwCiB3b3JrZXJzL3NoYXJlZC9TaGFy
ZWRXb3JrZXIuY3BwCiB3b3JrZXJzL3NoYXJlZC9TaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAK
IHdvcmtlcnMvc2hhcmVkL1NoYXJlZFdvcmtlck1hbmFnZXIuY3BwCi13b3JrZXJzL3NoYXJlZC9T
aGFyZWRXb3JrZXJQcm94eS5jcHAKIHdvcmtlcnMvc2hhcmVkL1NoYXJlZFdvcmtlclNjcmlwdExv
YWRlci5jcHAKLXdvcmtlcnMvc2hhcmVkL1NoYXJlZFdvcmtlclRocmVhZC5jcHAKK3dvcmtlcnMv
c2hhcmVkL2NvbnRleHQvU2hhcmVkV29ya2VyVGhyZWFkLmNwcAord29ya2Vycy9zaGFyZWQvY29u
dGV4dC9TaGFyZWRXb3JrZXJUaHJlYWRQcm94eS5jcHAKIHdvcmtsZXRzL1BhaW50V29ya2xldEds
b2JhbFNjb3BlLmNwcAogd29ya2xldHMvV29ya2xldC5jcHAKIHdvcmtsZXRzL1dvcmtsZXRHbG9i
YWxTY29wZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBiZmFjODZlN2RjMWJlZjg0Njc1MDE5NGQ1ZTRmYTQyOGRkNjM1NzZj
Li5lZjM0NDljNzYzZGE0MDUzNjdjODJjZjU1NDFjZmYwMTJjYTdmMTBmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzQyLDkg
KzEzNDIsOSBAQAogCQk0NjcyQUE5ODI2QjA5NDMzMDBFNkVDMzggLyogQ3Jvc3NPcmlnaW5FbWJl
ZGRlclBvbGljeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDY3MkFBOTYyNkIwOTQyMTAwRTZFQzM4IC8qIENyb3NzT3JpZ2luRW1iZWRkZXJQb2xpY3ku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0Njcy
QUE5OTI2QjA5NDNGMDBFNkVDMzggLyogQ3Jvc3NPcmlnaW5PcGVuZXJQb2xpY3kuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2NzJBQTk3MjZCMDk0MjEw
MEU2RUMzOCAvKiBDcm9zc09yaWdpbk9wZW5lclBvbGljeS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ2NzMwMjAyMUM0RUZFNzgwMEJDQjM1NyAv
KiBJZ25vcmVPcGVuc0R1cmluZ1VubG9hZENvdW50SW5jcmVtZW50ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2NzMwMjAxMUM0RUZFNjYwMEJDQjM1
NyAvKiBJZ25vcmVPcGVuc0R1cmluZ1VubG9hZENvdW50SW5jcmVtZW50ZXIuaCAqLzsgfTsKLQkJ
NDY3QTY4RDcyNzVFQTk5MTAwOUIzMUM1IC8qIFNoYXJlZFdvcmtlclRocmVhZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDY3QTY4RDQyNzVFQTk4QjAw
OUIzMUM1IC8qIFNoYXJlZFdvcmtlclRocmVhZC5oICovOyB9OworCQk0NjdBNjhENzI3NUVBOTkx
MDA5QjMxQzUgLyogU2hhcmVkV29ya2VyVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NjdBNjhENDI3NUVBOThCMDA5QjMxQzUgLyogU2hhcmVk
V29ya2VyVGhyZWFkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNDY3QTY4RDgyNzVFQTk5NTAwOUIzMUM1IC8qIFNoYXJlZFdvcmtlclNjcmlwdExv
YWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDY3
QTY4RDUyNzVFQTk4QzAwOUIzMUM1IC8qIFNoYXJlZFdvcmtlclNjcmlwdExvYWRlci5oICovOyB9
OwotCQk0NjdBNjhEOTI3NUVBOTk4MDA5QjMxQzUgLyogU2hhcmVkV29ya2VyUHJveHkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2N0E2OEQ2Mjc1RUE5
OEMwMDlCMzFDNSAvKiBTaGFyZWRXb3JrZXJQcm94eS5oICovOyB9OworCQk0NjdBNjhEOTI3NUVB
OTk4MDA5QjMxQzUgLyogU2hhcmVkV29ya2VyVGhyZWFkUHJveHkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2N0E2OEQ2Mjc1RUE5OEMwMDlCMzFDNSAv
KiBTaGFyZWRXb3JrZXJUaHJlYWRQcm94eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTQ2N0E2OERBMjc1RUE5OUMwMDlCMzFDNSAvKiBTaGFyZWRX
b3JrZXJNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0NjdBNjhEMjI3NUVBOThBMDA5QjMxQzUgLyogU2hhcmVkV29ya2VyTWFuYWdlci5oICov
OyB9OwogCQk0NjgyRDIwMDFGNzk3ODMwMDBDODYzREIgLyogU3RvcmVkQ3JlZGVudGlhbHNQb2xp
Y3kuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2ODJE
MUZGMUY3OTc4MjMwMEM4NjNEQiAvKiBTdG9yZWRDcmVkZW50aWFsc1BvbGljeS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ2ODM0NEUwMUVEREZB
QUEwMEI3Nzk1QiAvKiBET01SZWN0TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDY4MzQ0REUxRURERkE1RjAwQjc3OTVCIC8qIERPTVJlY3RMaXN0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTky
MzQsMTQgKzkyMzQsMTQgQEAKIAkJNDY3MzAyMDExQzRFRkU2NjAwQkNCMzU3IC8qIElnbm9yZU9w
ZW5zRHVyaW5nVW5sb2FkQ291bnRJbmNyZW1lbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJZ25vcmVPcGVuc0R1cmluZ1VubG9hZENvdW50SW5jcmVtZW50ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDY3ODAyQjAyNzQ3MTE3QjAwREE5RkI2IC8qIFdl
YkxvY2tNYW5hZ2VyU25hcHNob3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViTG9ja01hbmFnZXJTbmFwc2hvdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
Njc4MDJCMjI3NDcxMTg1MDBEQTlGQjYgLyogV2ViTG9ja0lkZW50aWZpZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViTG9ja0lkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNDY3QTY4Q0YyNzVFQTk4OTAwOUIzMUM1IC8qIFNoYXJlZFdvcmtl
clByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXJlZFdvcmtlclByb3h5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDY3QTY4Q0YyNzVFQTk4OTAwOUIzMUM1IC8qIFNo
YXJlZFdvcmtlclRocmVhZFByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXJlZFdvcmtl
clRocmVhZFByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDY3QTY4RDAy
NzVFQTk4OTAwOUIzMUM1IC8qIFNoYXJlZFdvcmtlclRocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTaGFyZWRXb3JrZXJUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0NjdBNjhEMTI3NUVBOThBMDA5QjMxQzUgLyogU2hhcmVkV29ya2VyU2NyaXB0TG9hZGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXJlZFdvcmtlclNjcmlwdExvYWRlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2N0E2OEQyMjc1RUE5OEEwMDlCMzFDNSAvKiBTaGFy
ZWRXb3JrZXJNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJlZFdvcmtlck1hbmFnZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDY3QTY4RDMyNzVFQTk4QjAwOUIzMUM1IC8q
IFNoYXJlZFdvcmtlck1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhcmVkV29ya2Vy
TWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2N0E2OEQ0Mjc1RUE5
OEIwMDlCMzFDNSAvKiBTaGFyZWRXb3JrZXJUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhcmVk
V29ya2VyVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2N0E2OEQ1Mjc1
RUE5OEMwMDlCMzFDNSAvKiBTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2hhcmVkV29ya2VyU2NyaXB0TG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQ2N0E2OEQ2Mjc1RUE5OEMwMDlCMzFDNSAvKiBTaGFyZWRXb3JrZXJQcm94eS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTaGFyZWRXb3JrZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0NjdBNjhENjI3NUVBOThDMDA5QjMxQzUgLyogU2hhcmVkV29ya2VyVGhyZWFkUHJveHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2hhcmVkV29ya2VyVGhyZWFkUHJveHkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDY4MkQxRkYxRjc5NzgyMzAwQzg2M0RCIC8qIFN0b3JlZENyZWRl
bnRpYWxzUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JlZENy
ZWRlbnRpYWxzUG9saWN5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2ODM0NERD
MUVEREZBNUYwMEI3Nzk1QiAvKiBET01SZWN0TGlzdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRE9NUmVjdExpc3QuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NjgzNDRERDFFRERGQTVGMDBCNzc5NUIg
LyogRE9NUmVjdExpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NUmVjdExpc3QuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE1NTIsOSArMjE1NTIsMjEgQEAKIAkJCXBh
dGggPSAid2ViLWxvY2tzIjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTQ2
NDdDRTYxMjdBQUUxREEwMDlDQkQ0OCAvKiBjb250ZXh0ICovID0geworCQkJaXNhID0gUEJYR3Jv
dXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk0NjdBNjhEMDI3NUVBOTg5MDA5QjMxQzUgLyogU2hh
cmVkV29ya2VyVGhyZWFkLmNwcCAqLywKKwkJCQk0NjdBNjhENDI3NUVBOThCMDA5QjMxQzUgLyog
U2hhcmVkV29ya2VyVGhyZWFkLmggKi8sCisJCQkJNDY3QTY4Q0YyNzVFQTk4OTAwOUIzMUM1IC8q
IFNoYXJlZFdvcmtlclRocmVhZFByb3h5LmNwcCAqLywKKwkJCQk0NjdBNjhENjI3NUVBOThDMDA5
QjMxQzUgLyogU2hhcmVkV29ya2VyVGhyZWFkUHJveHkuaCAqLywKKwkJCSk7CisJCQlwYXRoID0g
Y29udGV4dDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTQ2Njk0Q0RFMjc1
OTQ0NkQwMEUzMTUwRSAvKiBzaGFyZWQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCTQ2NDdDRTYxMjdBQUUxREEwMDlDQkQ0OCAvKiBjb250ZXh0ICovLAog
CQkJCTQ2Njk0Q0UzMjc1OTQ0OEQwMEUzMTUwRSAvKiBTaGFyZWRXb3JrZXIuY3BwICovLAogCQkJ
CTQ2Njk0Q0UyMjc1OTQ0OEQwMEUzMTUwRSAvKiBTaGFyZWRXb3JrZXIuaCAqLywKIAkJCQk0NjY5
NENFNTI3NTk0NDhFMDBFMzE1MEUgLyogU2hhcmVkV29ya2VyLmlkbCAqLywKQEAgLTIxNTYzLDEy
ICsyMTU3NSw4IEBACiAJCQkJNDY2OTRDRTAyNzU5NDQ4QzAwRTMxNTBFIC8qIFNoYXJlZFdvcmtl
ckdsb2JhbFNjb3BlLmlkbCAqLywKIAkJCQk0NjdBNjhEMzI3NUVBOThCMDA5QjMxQzUgLyogU2hh
cmVkV29ya2VyTWFuYWdlci5jcHAgKi8sCiAJCQkJNDY3QTY4RDIyNzVFQTk4QTAwOUIzMUM1IC8q
IFNoYXJlZFdvcmtlck1hbmFnZXIuaCAqLywKLQkJCQk0NjdBNjhDRjI3NUVBOTg5MDA5QjMxQzUg
LyogU2hhcmVkV29ya2VyUHJveHkuY3BwICovLAotCQkJCTQ2N0E2OEQ2Mjc1RUE5OEMwMDlCMzFD
NSAvKiBTaGFyZWRXb3JrZXJQcm94eS5oICovLAogCQkJCTQ2N0E2OEQxMjc1RUE5OEEwMDlCMzFD
NSAvKiBTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXIuY3BwICovLAogCQkJCTQ2N0E2OEQ1Mjc1RUE5
OEMwMDlCMzFDNSAvKiBTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXIuaCAqLywKLQkJCQk0NjdBNjhE
MDI3NUVBOTg5MDA5QjMxQzUgLyogU2hhcmVkV29ya2VyVGhyZWFkLmNwcCAqLywKLQkJCQk0NjdB
NjhENDI3NUVBOThCMDA5QjMxQzUgLyogU2hhcmVkV29ya2VyVGhyZWFkLmggKi8sCiAJCQkpOwog
CQkJcGF0aCA9IHNoYXJlZDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zNzE3OSw5
ICszNzE4Nyw5IEBACiAJCQkJOTMzMDlFQTMwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MURDMDRGRTI3QTgzQzkzMDA4Q0Y5NjggLyogU2hhcmVk
VmlkZW9GcmFtZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2N0E2OERBMjc1RUE5OUMwMDlC
MzFDNSAvKiBTaGFyZWRXb3JrZXJNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0NjdBNjhE
OTI3NUVBOTk4MDA5QjMxQzUgLyogU2hhcmVkV29ya2VyUHJveHkuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQ2N0E2OEQ4Mjc1RUE5OTUwMDlCMzFDNSAvKiBTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ2N0E2OEQ3Mjc1RUE5OTEwMDlCMzFDNSAvKiBTaGFyZWRX
b3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ2N0E2OEQ5Mjc1RUE5OTgwMDlCMzFD
NSAvKiBTaGFyZWRXb3JrZXJUaHJlYWRQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUM0REIw
MjYyNzMzOUZFMDAwN0IwQUQxIC8qIFNob3VsZExvY2FsaXplQXhpc05hbWVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlERjE5RTJBQzI0NzcyQkMxMDA3QkRBQ0IgLyogU2hvdWxkUmVsYXhUaGlyZFBh
cnR5Q29va2llQmxvY2tpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzNjJFOEMxMjBDRUY5Q0Iw
MDI0NTg4NiAvKiBTaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQuaCBpbiBIZWFkZXJzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zaGFyZWQvU2hhcmVkV29ya2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2hhcmVkL1NoYXJlZFdvcmtlci5jcHAKaW5kZXgg
NmE1OWIyZWZlOWExNDBjNTkwZWNjMmM4YjIwY2Q5ODk4MTg0YzVjZi4uZmU5NGZkZDhhNTE1MGM4
NjEwOWQ0YjkyMmE4OTgzNmI0NWVhNDU1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9zaGFyZWQvU2hhcmVkV29ya2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L3NoYXJlZC9TaGFyZWRXb3JrZXIuY3BwCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiTWVz
c2FnZVBvcnQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNoYXJl
ZFdvcmtlck1hbmFnZXIuaCIKLSNpbmNsdWRlICJTaGFyZWRXb3JrZXJQcm94eS5oIgorI2luY2x1
ZGUgIlNoYXJlZFdvcmtlclRocmVhZFByb3h5LmgiCiAjaW5jbHVkZSAiV29ya2VyT3B0aW9ucy5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lkZW50aWZpZXJzRmFjdG9yeS5oPgogI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC04MCw3ICs4MCw3IEBAIFNoYXJlZFdvcmtl
cjo6U2hhcmVkV29ya2VyKERvY3VtZW50JiBkb2N1bWVudCwgUmVmPE1lc3NhZ2VQb3J0PiYmIHBv
cnQsIEpTQzo6UnVuCiAgICAgLCBtX2lkZW50aWZpZXJGb3JJbnNwZWN0b3IoIlNoYXJlZFdvcmtl
cjoiICsgSW5zcGVjdG9yOjpJZGVudGlmaWVyc0ZhY3Rvcnk6OmNyZWF0ZUlkZW50aWZpZXIoKSkK
ICAgICAsIG1fcnVudGltZUZsYWdzKHJ1bnRpbWVGbGFncykKICAgICAsIG1fY3JlYXRpb25UaW1l
KE1vbm90b25pY1RpbWU6Om5vdygpKQotICAgICwgbV9wcm94eShTaGFyZWRXb3JrZXJQcm94eTo6
Y3JlYXRlKCp0aGlzKSkKKyAgICAsIG1fcHJveHkoU2hhcmVkV29ya2VyVGhyZWFkUHJveHk6OmNy
ZWF0ZSgqdGhpcykpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2hhcmVkL1NoYXJlZFdvcmtlci5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zaGFyZWQvU2hh
cmVkV29ya2VyLmgKaW5kZXggNTMyNmVlNTQyYzg4ZTNiOGY1ODI4MDYyODM1MTk5ZjAzNTU1YTEy
NC4uZTU1YjFjZjU1MTNkMTA1ZjczZjFjZDYyOTMxNWUwNjU3ZTAxOWJjZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9zaGFyZWQvU2hhcmVkV29ya2VyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9zaGFyZWQvU2hhcmVkV29ya2VyLmgKQEAgLTMzLDcgKzMzLDcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTWVzc2FnZVBvcnQ7Ci1jbGFzcyBTaGFyZWRX
b3JrZXJQcm94eTsKK2NsYXNzIFNoYXJlZFdvcmtlclRocmVhZFByb3h5OwogCiBzdHJ1Y3QgV29y
a2VyT3B0aW9uczsKIApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5n
JiBpZGVudGlmaWVyRm9ySW5zcGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyRm9y
SW5zcGVjdG9yOyB9CiAgICAgTW9ub3RvbmljVGltZSBjcmVhdGlvblRpbWUoKSBjb25zdCB7IHJl
dHVybiBtX2NyZWF0aW9uVGltZTsgfQogCi0gICAgU2hhcmVkV29ya2VyUHJveHkmIHByb3h5KCkg
eyByZXR1cm4gbV9wcm94eTsgfQorICAgIFNoYXJlZFdvcmtlclRocmVhZFByb3h5JiBwcm94eSgp
IHsgcmV0dXJuIG1fcHJveHk7IH0KIAogICAgIHZvaWQgc2V0SXNMb2FkaW5nKGJvb2wgaXNMb2Fk
aW5nKSB7IG1faXNMb2FkaW5nID0gaXNMb2FkaW5nOyB9CiAKQEAgLTc0LDcgKzc0LDcgQEAgcHJp
dmF0ZToKICAgICBTdHJpbmcgbV9pZGVudGlmaWVyRm9ySW5zcGVjdG9yOwogICAgIEpTQzo6UnVu
dGltZUZsYWdzIG1fcnVudGltZUZsYWdzOwogICAgIE1vbm90b25pY1RpbWUgbV9jcmVhdGlvblRp
bWU7Ci0gICAgU2hhcmVkV29ya2VyUHJveHkmIG1fcHJveHk7IC8vIFRoZSBwcm94eSBvdXRsaXZl
cyB0aGUgd29ya2VyIHRvIHBlcmZvcm0gdGhyZWFkIHNodXRkb3duLgorICAgIFNoYXJlZFdvcmtl
clRocmVhZFByb3h5JiBtX3Byb3h5OyAvLyBUaGUgcHJveHkgb3V0bGl2ZXMgdGhlIHdvcmtlciB0
byBwZXJmb3JtIHRocmVhZCBzaHV0ZG93bi4KICAgICBib29sIG1faXNMb2FkaW5nIHsgZmFsc2Ug
fTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2hhcmVkL1NoYXJl
ZFdvcmtlck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zaGFyZWQvU2hhcmVk
V29ya2VyTWFuYWdlci5jcHAKaW5kZXggMDEyNmJjNGZlZDg3ZDU1YjkzYjUwM2UwMzA0NzU0NDA5
MDYyMTdlYS4uN2Q1ZTY5Y2Q3Nzk1M2E3MmY2YThmYjY3OWJjY2EyNTZkMDIwNGZlMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zaGFyZWQvU2hhcmVkV29ya2VyTWFuYWdlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zaGFyZWQvU2hhcmVkV29ya2VyTWFuYWdl
ci5jcHAKQEAgLTMzLDkgKzMzLDkgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIK
ICNpbmNsdWRlICJTaGFyZWRXb3JrZXIuaCIKICNpbmNsdWRlICJTaGFyZWRXb3JrZXJHbG9iYWxT
Y29wZS5oIgotI2luY2x1ZGUgIlNoYXJlZFdvcmtlclByb3h5LmgiCiAjaW5jbHVkZSAiU2hhcmVk
V29ya2VyU2NyaXB0TG9hZGVyLmgiCiAjaW5jbHVkZSAiU2hhcmVkV29ya2VyVGhyZWFkLmgiCisj
aW5jbHVkZSAiU2hhcmVkV29ya2VyVGhyZWFkUHJveHkuaCIKICNpbmNsdWRlICJXb3JrZXJSdW5M
b29wLmgiCiAjaW5jbHVkZSAiV29ya2VyU2NyaXB0TG9hZGVyLmgiCiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NoYXJl
ZC9TaGFyZWRXb3JrZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NoYXJlZC9T
aGFyZWRXb3JrZXJQcm94eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZTA3
NTNmODkxZDFlZGViODAwY2ZjNGI3ODQ5NGNlOTMzOTY2MGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zaGFyZWQv
U2hhcmVkV29ya2VyUHJveHkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2hhcmVkV29ya2VyUHJv
eHkuaCIKLQotI2luY2x1ZGUgIkNhY2hlU3RvcmFnZVByb3ZpZGVyLmgiCi0jaW5jbHVkZSAiRXJy
b3JFdmVudC5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJMaWJXZWJSVENQ
cm92aWRlci5oIgotI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgotI2luY2x1ZGUgIk1lc3NhZ2VQ
b3J0LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJUQ0RhdGFDaGFubmVsUmVtb3Rl
SGFuZGxlckNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJTaGFyZWRXb3JrZXIuaCIKLSNpbmNsdWRl
ICJTaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5oIgotI2luY2x1ZGUgIlNoYXJlZFdvcmtlclRocmVh
ZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNoYXJlZFdvcmtlclByb3h5OjpTaGFyZWRX
b3JrZXJQcm94eShTaGFyZWRXb3JrZXImIHNoYXJlZFdvcmtlcikKLSAgICA6IG1fc2hhcmVkV29y
a2VyKHNoYXJlZFdvcmtlcikKLSAgICAsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChzaGFyZWRX
b3JrZXIuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICwgbV9pZGVudGlmaWVyRm9ySW5z
cGVjdG9yKHNoYXJlZFdvcmtlci5pZGVudGlmaWVyRm9ySW5zcGVjdG9yKCkpCi17Ci19Ci0KLXZv
aWQgU2hhcmVkV29ya2VyUHJveHk6OnN0YXJ0V29ya2VyR2xvYmFsU2NvcGUoY29uc3QgVVJMJiBz
Y3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGJv
b2wgaXNPbmxpbmUsIGNvbnN0IFNjcmlwdEJ1ZmZlciYgc2NyaXB0QnVmZmVyLCBjb25zdCBDb250
ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMmIGNvbnRlbnRTZWN1cml0eVBvbGljeVJl
c3BvbnNlSGVhZGVycywgYm9vbCBzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQ
b2xpY3ksIGNvbnN0IENyb3NzT3JpZ2luRW1iZWRkZXJQb2xpY3kmIGNyb3NzT3JpZ2luRW1iZWRk
ZXJQb2xpY3ksIE1vbm90b25pY1RpbWUgdGltZU9yaWdpbiwgUmVmZXJyZXJQb2xpY3kgcmVmZXJy
ZXJQb2xpY3ksIFdvcmtlclR5cGUgd29ya2VyVHlwZSwgRmV0Y2hSZXF1ZXN0Q3JlZGVudGlhbHMg
Y3JlZGVudGlhbHMsIEpTQzo6UnVudGltZUZsYWdzIHJ1bnRpbWVGbGFncykKLXsKLSAgICBpZiAo
bV9hc2tlZFRvVGVybWluYXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHBhcmFtZXRl
cnMgPSBXb3JrZXJQYXJhbWV0ZXJzIHsKLSAgICAgICAgc2NyaXB0VVJMLAotICAgICAgICBuYW1l
LAotICAgICAgICBtX2lkZW50aWZpZXJGb3JJbnNwZWN0b3IsCi0gICAgICAgIHVzZXJBZ2VudCwK
LSAgICAgICAgaXNPbmxpbmUsCi0gICAgICAgIGNvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNl
SGVhZGVycywKLSAgICAgICAgc2hvdWxkQnlwYXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9s
aWN5LAotICAgICAgICBjcm9zc09yaWdpbkVtYmVkZGVyUG9saWN5LAotICAgICAgICB0aW1lT3Jp
Z2luLAotICAgICAgICByZWZlcnJlclBvbGljeSwKLSAgICAgICAgd29ya2VyVHlwZSwKLSAgICAg
ICAgY3JlZGVudGlhbHMsCi0gICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2V0dGlu
Z3NWYWx1ZXMoKQotICAgIH07Ci0KLSAgICBpZiAoIW1fd29ya2VyVGhyZWFkKSB7Ci0gICAgICAg
IG1fd29ya2VyVGhyZWFkID0gU2hhcmVkV29ya2VyVGhyZWFkOjpjcmVhdGUocGFyYW1ldGVycywg
c2NyaXB0QnVmZmVyLCAqdGhpcywgKnRoaXMsICp0aGlzLCBXb3JrZXJUaHJlYWRTdGFydE1vZGU6
Ok5vcm1hbCwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT50b3BPcmlnaW4oKSwgbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5pZGJDb25uZWN0aW9uUHJveHkoKSwgbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5zb2NrZXRQcm92aWRlcigpLCBydW50aW1lRmxhZ3MpOwotICAgICAgICBtX3dvcmtl
clRocmVhZC0+c3RhcnQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgU2hhcmVkV29ya2VyUHJveHk6OnRl
cm1pbmF0ZVdvcmtlckdsb2JhbFNjb3BlKCkKLXsKLSAgICBpZiAobV9hc2tlZFRvVGVybWluYXRl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Fza2VkVG9UZXJtaW5hdGUgPSB0cnVlOwotICAg
IGlmIChtX3dvcmtlclRocmVhZCkKLSAgICAgICAgbV93b3JrZXJUaHJlYWQtPnN0b3AobnVsbHB0
cik7Ci19Ci0KLXZvaWQgU2hhcmVkV29ya2VyUHJveHk6OnBvc3RNZXNzYWdlVG9Xb3JrZXJHbG9i
YWxTY29wZShNZXNzYWdlV2l0aE1lc3NhZ2VQb3J0cyYmIG1lc3NhZ2UpCi17Ci0gICAgLy8gRklY
TUU6IFNoYXJlZFdvcmtlciBkb2Vzbid0IGhhdmUgcG9zdE1lc3NhZ2UsIHNvIHRoaXMgbWlnaHQg
bm90IGJlIG5lY2Vzc2FyeS4KLSAgICBwb3N0VGFza1RvV29ya2VyR2xvYmFsU2NvcGUoW21lc3Nh
Z2UgPSBXVEZNb3ZlKG1lc3NhZ2UpXShhdXRvJiBzY3JpcHRDb250ZXh0KSBtdXRhYmxlIHsKLSAg
ICAgICAgYXV0byYgY29udGV4dCA9IGRvd25jYXN0PFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlPihz
Y3JpcHRDb250ZXh0KTsKLSAgICAgICAgYXV0byBwb3J0cyA9IE1lc3NhZ2VQb3J0OjplbnRhbmds
ZVBvcnRzKHNjcmlwdENvbnRleHQsIFdURk1vdmUobWVzc2FnZS50cmFuc2ZlcnJlZFBvcnRzKSk7
Ci0gICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFdmVudChNZXNzYWdlRXZlbnQ6OmNyZWF0ZShXVEZN
b3ZlKHBvcnRzKSwgbWVzc2FnZS5tZXNzYWdlLnJlbGVhc2VOb25OdWxsKCkpKTsKLSAgICB9KTsK
LX0KLQotdm9pZCBTaGFyZWRXb3JrZXJQcm94eTo6cG9zdFRhc2tUb1dvcmtlckdsb2JhbFNjb3Bl
KEZ1bmN0aW9uPHZvaWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpPiYmIHRhc2spCi17Ci0gICAg
aWYgKG1fYXNrZWRUb1Rlcm1pbmF0ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fd29ya2VyVGhy
ZWFkLT5ydW5Mb29wKCkucG9zdFRhc2soV1RGTW92ZSh0YXNrKSk7Ci19Ci0KLWJvb2wgU2hhcmVk
V29ya2VyUHJveHk6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
aGFzUGVuZGluZ0FjdGl2aXR5ICYmICFtX2Fza2VkVG9UZXJtaW5hdGU7Ci19Ci0KLXZvaWQgU2hh
cmVkV29ya2VyUHJveHk6Ondvcmtlck9iamVjdERlc3Ryb3llZCgpCi17Ci0gICAgbV9zaGFyZWRX
b3JrZXIgPSBudWxscHRyOwotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2so
W3RoaXNdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgewotICAgICAgICBtX21heUJlRGVzdHJv
eWVkID0gdHJ1ZTsKLSAgICAgICAgaWYgKG1fd29ya2VyVGhyZWFkKQotICAgICAgICAgICAgdGVy
bWluYXRlV29ya2VyR2xvYmFsU2NvcGUoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgd29y
a2VyR2xvYmFsU2NvcGVEZXN0cm95ZWRJbnRlcm5hbCgpOwotICAgIH0pOwotfQotCi12b2lkIFNo
YXJlZFdvcmtlclByb3h5Ojpub3RpZnlOZXR3b3JrU3RhdGVDaGFuZ2UoYm9vbCBpc09ubGluZSkK
LXsKLSAgICBpZiAobV9hc2tlZFRvVGVybWluYXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoIW1fd29ya2VyVGhyZWFkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3dvcmtlclRocmVh
ZC0+cnVuTG9vcCgpLnBvc3RUYXNrKFtpc09ubGluZV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQpIHsKLSAgICAgICAgYXV0byYgZ2xvYmFsU2NvcGUgPSBkb3duY2FzdDxXb3JrZXJH
bG9iYWxTY29wZT4oY29udGV4dCk7Ci0gICAgICAgIGdsb2JhbFNjb3BlLnNldElzT25saW5lKGlz
T25saW5lKTsKLSAgICAgICAgZ2xvYmFsU2NvcGUuZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRl
KGlzT25saW5lID8gZXZlbnROYW1lcygpLm9ubGluZUV2ZW50IDogZXZlbnROYW1lcygpLm9mZmxp
bmVFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgU2hhcmVkV29ya2VyUHJveHk6OnN1c3BlbmRGb3JCYWNrRm9y
d2FyZENhY2hlKCkKLXsKLQotfQotCi12b2lkIFNoYXJlZFdvcmtlclByb3h5OjpyZXN1bWVGb3JC
YWNrRm9yd2FyZENhY2hlKCkKLXsKLQotfQotCi12b2lkIFNoYXJlZFdvcmtlclByb3h5Ojpwb3N0
RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBs
aW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKLXsK
LSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKFt0aGlzLCBlcnJvck1lc3Nh
Z2UgPSBlcnJvck1lc3NhZ2UuaXNvbGF0ZWRDb3B5KCksIHNvdXJjZVVSTCA9IHNvdXJjZVVSTC5p
c29sYXRlZENvcHkoKSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyXSAoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYpIHsKLSAgICAgICAgaWYgKCFtX3NoYXJlZFdvcmtlcikKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAvLyBXZSBkb24ndCBib3RoZXIgY2hlY2tpbmcgdGhlIGFza2VkVG9U
ZXJtaW5hdGUoKSBmbGFnIGhlcmUsIGJlY2F1c2UgZXhjZXB0aW9ucyBzaG91bGQgKmFsd2F5cyog
YmUgcmVwb3J0ZWQgZXZlbiBpZiB0aGUgdGhyZWFkIGlzIHRlcm1pbmF0ZWQuCi0gICAgICAgIC8v
IFRoaXMgaXMgaW50ZW50aW9uYWxseSBkaWZmZXJlbnQgdGhhbiB0aGUgYmVoYXZpb3IgaW4gTWVz
c2FnZVdvcmtlclRhc2ssIGJlY2F1c2UgdGVybWluYXRlZCB3b3JrZXJzIG5vIGxvbmdlciBkZWxp
dmVyIG1lc3NhZ2VzIChzZWN0aW9uIDQuNiBvZiB0aGUgV2ViV29ya2VyIHNwZWMpLCBidXQgdGhl
eSBkbyByZXBvcnQgZXhjZXB0aW9ucy4KLSAgICAgICAgQWN0aXZlRE9NT2JqZWN0OjpxdWV1ZVRh
c2tUb0Rpc3BhdGNoRXZlbnQoKm1fc2hhcmVkV29ya2VyLCBUYXNrU291cmNlOjpET01NYW5pcHVs
YXRpb24sIEVycm9yRXZlbnQ6OmNyZWF0ZShlcnJvck1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51
bWJlciwgY29sdW1uTnVtYmVyLCB7IH0pKTsKLSAgICB9KTsKLX0KLQotdm9pZCBTaGFyZWRXb3Jr
ZXJQcm94eTo6d29ya2VyR2xvYmFsU2NvcGVEZXN0cm95ZWQoKQotewotICAgIG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+cG9zdFRhc2soW3RoaXNdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0Jikg
ewotICAgICAgICB3b3JrZXJHbG9iYWxTY29wZURlc3Ryb3llZEludGVybmFsKCk7Ci0gICAgfSk7
Ci19Ci0KLXZvaWQgU2hhcmVkV29ya2VyUHJveHk6OnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3Qo
TWVzc2FnZVdpdGhNZXNzYWdlUG9ydHMmJikKLXsKLQotfQotCi12b2lkIFNoYXJlZFdvcmtlclBy
b3h5Ojpjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoYm9vbCkKLXsKLX0KLQotdm9pZCBT
aGFyZWRXb3JrZXJQcm94eTo6cmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wgaGFzUGVuZGluZ0Fj
dGl2aXR5KQotewotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soW3RoaXMs
IGhhc1BlbmRpbmdBY3Rpdml0eV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7Ci0gICAgICAg
IG1faGFzUGVuZGluZ0FjdGl2aXR5ID0gaGFzUGVuZGluZ0FjdGl2aXR5OwotICAgIH0pOwotfQot
Ci1SZWZQdHI8Q2FjaGVTdG9yYWdlQ29ubmVjdGlvbj4gU2hhcmVkV29ya2VyUHJveHk6OmNyZWF0
ZUNhY2hlU3RvcmFnZUNvbm5lY3Rpb24oKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0gICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKm1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCk7Ci0gICAgcmV0dXJuIGRvY3VtZW50LnBhZ2UoKS0+Y2FjaGVTdG9yYWdlUHJv
dmlkZXIoKS5jcmVhdGVDYWNoZVN0b3JhZ2VDb25uZWN0aW9uKCk7Ci19Ci0KLVJlZlB0cjxSVENE
YXRhQ2hhbm5lbFJlbW90ZUhhbmRsZXJDb25uZWN0aW9uPiBTaGFyZWRXb3JrZXJQcm94eTo6Y3Jl
YXRlUlRDRGF0YUNoYW5uZWxSZW1vdGVIYW5kbGVyQ29ubmVjdGlvbigpCi17Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLSAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50
PigqbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLSAgICBpZiAoIWRvY3VtZW50LnBhZ2UoKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGRvY3VtZW50LnBhZ2UoKS0+bGli
V2ViUlRDUHJvdmlkZXIoKS5jcmVhdGVSVENEYXRhQ2hhbm5lbFJlbW90ZUhhbmRsZXJDb25uZWN0
aW9uKCk7Ci19Ci0KLXZvaWQgU2hhcmVkV29ya2VyUHJveHk6OnBvc3RUYXNrVG9Mb2FkZXIoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayYmIHRhc2spCi17Ci0gICAgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5wb3N0VGFzayhXVEZNb3ZlKHRhc2spKTsKLX0KLQotYm9vbCBTaGFyZWRXb3Jr
ZXJQcm94eTo6cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrJiYgdGFzaywgY29uc3QgU3RyaW5nJiBtb2RlKQotewot
ICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IG1fd29ya2VyVGhyZWFkLT5ydW5Mb29wKCkucG9zdFRhc2tGb3JNb2RlKFdURk1vdmUodGFzayks
IG1vZGUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNoYXJlZFdvcmtlclByb3h5Ojpw
b3N0TWVzc2FnZVRvRGVidWdnZXIoY29uc3QgU3RyaW5nJikKLXsKLQotfQotCi12b2lkIFNoYXJl
ZFdvcmtlclByb3h5OjpzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZEJ5V2ViSW5zcGVjdG9yKGJv
b2wpCi17Ci0KLX0KLQotdm9pZCBTaGFyZWRXb3JrZXJQcm94eTo6d29ya2VyR2xvYmFsU2NvcGVE
ZXN0cm95ZWRJbnRlcm5hbCgpCi17Ci0gICAgLy8gVGhpcyBpcyBhbHdheXMgdGhlIGxhc3QgdGFz
ayB0byBiZSBwZXJmb3JtZWQsIHNvIHRoZSBwcm94eSBpcyBub3QgbmVlZGVkIGZvciBjb21tdW5p
Y2F0aW9uCi0gICAgLy8gaW4gZWl0aGVyIHNpZGUgYW55IG1vcmUuIEhvd2V2ZXIsIHRoZSBXb3Jr
ZXIgb2JqZWN0IG1heSBzdGlsbCBleGlzdCwgYW5kIGl0IGFzc3VtZXMgdGhhdCB0aGUgcHJveHkg
ZXhpc3RzLCB0b28uCi0gICAgbV9hc2tlZFRvVGVybWluYXRlID0gdHJ1ZTsKLSAgICBtX3dvcmtl
clRocmVhZCA9IG51bGxwdHI7Ci0KLSAgICAvLyBUaGlzIGJhbGFuY2VzIHRoZSBvcmlnaW5hbCBy
ZWYgaW4gY29uc3RydWN0aW9uLgotICAgIGlmIChtX21heUJlRGVzdHJveWVkKQotICAgICAgICBk
ZXJlZigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL3NoYXJlZC9TaGFyZWRXb3JrZXJQcm94eS5oIGIvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9zaGFyZWQvU2hhcmVkV29ya2VyUHJveHkuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZGI3Yjg1MDlkZjVhOGY1MzAwYzU1ZDE3ODFjYmZiYWZmYzI3Y2ZjNi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL3NoYXJlZC9TaGFyZWRXb3JrZXJQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEs
ODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiV29ya2Vy
RGVidWdnZXJQcm94eS5oIgotI2luY2x1ZGUgIldvcmtlckdsb2JhbFNjb3BlUHJveHkuaCIKLSNp
bmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgotI2luY2x1ZGUgIldvcmtlck9iamVjdFByb3h5
LmgiCi0jaW5jbHVkZSAiV29ya2VyT3B0aW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU2hhcmVkV29ya2VyOwotY2xhc3MgU2hh
cmVkV29ya2VyVGhyZWFkOwotCi1jbGFzcyBTaGFyZWRXb3JrZXJQcm94eSA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxTaGFyZWRXb3JrZXJQcm94eT4sIHB1YmxpYyBXb3JrZXJHbG9iYWxT
Y29wZVByb3h5LCBwdWJsaWMgV29ya2VyT2JqZWN0UHJveHksIHB1YmxpYyBXb3JrZXJMb2FkZXJQ
cm94eSwgcHVibGljIFdvcmtlckRlYnVnZ2VyUHJveHkgewotcHVibGljOgotICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3M+IHN0YXRpYyBTaGFyZWRXb3JrZXJQcm94eSYgY3JlYXRlKEFyZ3Mm
Ji4uLiBhcmdzKSB7IHJldHVybiAqbmV3IFNoYXJlZFdvcmtlclByb3h5KHN0ZDo6Zm9yd2FyZDxB
cmdzPihhcmdzKS4uLik7IH0KLQotICAgIFNoYXJlZFdvcmtlclRocmVhZCogdGhyZWFkKCkgeyBy
ZXR1cm4gbV93b3JrZXJUaHJlYWQuZ2V0KCk7IH0KLQotICAgIHZvaWQgc3RhcnRXb3JrZXJHbG9i
YWxTY29wZShjb25zdCBVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHVzZXJBZ2VudCwgYm9vbCBpc09ubGluZSwgY29uc3QgU2NyaXB0QnVmZmVyJiBzb3Vy
Y2VDb2RlLCBjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMmLCBib29s
IHNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSwgY29uc3QgQ3Jvc3NP
cmlnaW5FbWJlZGRlclBvbGljeSYsIE1vbm90b25pY1RpbWUgdGltZU9yaWdpbiwgUmVmZXJyZXJQ
b2xpY3ksIFdvcmtlclR5cGUsIEZldGNoUmVxdWVzdENyZWRlbnRpYWxzLCBKU0M6OlJ1bnRpbWVG
bGFncykgZmluYWw7Ci0gICAgdm9pZCB0ZXJtaW5hdGVXb3JrZXJHbG9iYWxTY29wZSgpIGZpbmFs
OwotICAgIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlckdsb2JhbFNjb3BlKE1lc3NhZ2VXaXRoTWVz
c2FnZVBvcnRzJiYpIGZpbmFsOwotICAgIHZvaWQgcG9zdFRhc2tUb1dvcmtlckdsb2JhbFNjb3Bl
KEZ1bmN0aW9uPHZvaWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpPiYmKSBmaW5hbDsKLSAgICBi
b29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgd29ya2VyT2Jq
ZWN0RGVzdHJveWVkKCkgZmluYWw7Ci0gICAgdm9pZCBub3RpZnlOZXR3b3JrU3RhdGVDaGFuZ2Uo
Ym9vbCBpc09ubGluZSkgZmluYWw7Ci0gICAgdm9pZCBzdXNwZW5kRm9yQmFja0ZvcndhcmRDYWNo
ZSgpIGZpbmFsOwotICAgIHZvaWQgcmVzdW1lRm9yQmFja0ZvcndhcmRDYWNoZSgpIGZpbmFsOwot
ICAgIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBz
b3VyY2VVUkwpIGZpbmFsOwotICAgIHZvaWQgd29ya2VyR2xvYmFsU2NvcGVEZXN0cm95ZWQoKSBm
aW5hbDsKLSAgICB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QoTWVzc2FnZVdpdGhNZXNz
YWdlUG9ydHMmJikgZmluYWw7Ci0gICAgdm9pZCBjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmpl
Y3QoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpIGZpbmFsOwotICAgIHZvaWQgcmVwb3J0UGVuZGlu
Z0FjdGl2aXR5KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KSBmaW5hbDsKLSAgICBSZWZQdHI8Q2Fj
aGVTdG9yYWdlQ29ubmVjdGlvbj4gY3JlYXRlQ2FjaGVTdG9yYWdlQ29ubmVjdGlvbigpIGZpbmFs
OwotICAgIFJlZlB0cjxSVENEYXRhQ2hhbm5lbFJlbW90ZUhhbmRsZXJDb25uZWN0aW9uPiBjcmVh
dGVSVENEYXRhQ2hhbm5lbFJlbW90ZUhhbmRsZXJDb25uZWN0aW9uKCkgZmluYWw7Ci0gICAgdm9p
ZCBwb3N0VGFza1RvTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2smJikgZmluYWw7
Ci0gICAgYm9vbCBwb3N0VGFza0Zvck1vZGVUb1dvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2smJiwgY29uc3QgU3RyaW5nJiBtb2RlKSBmaW5hbDsK
LSAgICB2b2lkIHBvc3RNZXNzYWdlVG9EZWJ1Z2dlcihjb25zdCBTdHJpbmcmKSBmaW5hbDsKLSAg
ICB2b2lkIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkQnlXZWJJbnNwZWN0b3IoYm9vbCkgZmlu
YWw7Ci0KLXByaXZhdGU6Ci0gICAgU2hhcmVkV29ya2VyUHJveHkoU2hhcmVkV29ya2VyJik7Ci0K
LSAgICB2b2lkIHdvcmtlckdsb2JhbFNjb3BlRGVzdHJveWVkSW50ZXJuYWwoKTsKLQotICAgIFdl
YWtQdHI8U2hhcmVkV29ya2VyPiBtX3NoYXJlZFdvcmtlcjsKLSAgICBSZWZQdHI8U2hhcmVkV29y
a2VyVGhyZWFkPiBtX3dvcmtlclRocmVhZDsKLSAgICBjb25zdCBSZWZQdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwotICAgIGNvbnN0IFN0cmluZyBt
X2lkZW50aWZpZXJGb3JJbnNwZWN0b3I7Ci0gICAgYm9vbCBtX2Fza2VkVG9UZXJtaW5hdGUgeyBm
YWxzZSB9OwotICAgIGJvb2wgbV9oYXNQZW5kaW5nQWN0aXZpdHkgeyBmYWxzZSB9OwotICAgIGJv
b2wgbV9tYXlCZURlc3Ryb3llZCB7IGZhbHNlIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NoYXJlZC9TaGFyZWRXb3Jr
ZXJUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zaGFyZWQvU2hhcmVkV29ya2Vy
VGhyZWFkLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVkNTU4OGZiZDc5YmEw
ZGQ4Y2E3NTNlNjhhMDM1MTRhMmMzMGZhNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NoYXJlZC9TaGFyZWRXb3Jr
ZXJUaHJlYWQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaGFyZWRXb3JrZXJUaHJlYWQuaCIKLQot
I2luY2x1ZGUgIlNoYXJlZFdvcmtlckdsb2JhbFNjb3BlLmgiCi0jaW5jbHVkZSAiV29ya2VyT2Jq
ZWN0UHJveHkuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TaGFyZWRXb3JrZXJUaHJlYWQ6
OlNoYXJlZFdvcmtlclRocmVhZChjb25zdCBXb3JrZXJQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBj
b25zdCBTY3JpcHRCdWZmZXImIHNvdXJjZUNvZGUsIFdvcmtlckxvYWRlclByb3h5JiBsb2FkZXJQ
cm94eSwgV29ya2VyRGVidWdnZXJQcm94eSYgZGVidWdnZXJQcm94eSwgV29ya2VyT2JqZWN0UHJv
eHkmIG9iamVjdFByb3h5LCBXb3JrZXJUaHJlYWRTdGFydE1vZGUgc3RhcnRNb2RlLCBjb25zdCBT
ZWN1cml0eU9yaWdpbiYgdG9wT3JpZ2luLCBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Qcm94eSog
Y29ubmVjdGlvblByb3h5LCBTb2NrZXRQcm92aWRlciogc29ja2V0UHJvdmlkZXIsIEpTQzo6UnVu
dGltZUZsYWdzIHJ1bnRpbWVGbGFncykKLSAgICA6IFdvcmtlclRocmVhZChwYXJhbWV0ZXJzLCBz
b3VyY2VDb2RlLCBsb2FkZXJQcm94eSwgZGVidWdnZXJQcm94eSwgb2JqZWN0UHJveHksIHN0YXJ0
TW9kZSwgdG9wT3JpZ2luLCBjb25uZWN0aW9uUHJveHksIHNvY2tldFByb3ZpZGVyLCBydW50aW1l
RmxhZ3MpCi0gICAgLCBtX25hbWUocGFyYW1ldGVycy5uYW1lLmlzb2xhdGVkQ29weSgpKQotewot
fQotCi1SZWY8V29ya2VyR2xvYmFsU2NvcGU+IFNoYXJlZFdvcmtlclRocmVhZDo6Y3JlYXRlV29y
a2VyR2xvYmFsU2NvcGUoY29uc3QgV29ya2VyUGFyYW1ldGVycyYgcGFyYW1ldGVycywgUmVmPFNl
Y3VyaXR5T3JpZ2luPiYmIG9yaWdpbiwgUmVmPFNlY3VyaXR5T3JpZ2luPiYmIHRvcE9yaWdpbikK
LXsKLSAgICByZXR1cm4gU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6OmNyZWF0ZShzdGQ6OmV4Y2hh
bmdlKG1fbmFtZSwgeyB9KSwgcGFyYW1ldGVycywgV1RGTW92ZShvcmlnaW4pLCAqdGhpcywgV1RG
TW92ZSh0b3BPcmlnaW4pLCBpZGJDb25uZWN0aW9uUHJveHkoKSwgc29ja2V0UHJvdmlkZXIoKSk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvc2hhcmVkL1NoYXJlZFdvcmtlclRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9zaGFyZWQvU2hhcmVkV29ya2VyVGhyZWFkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDJmMDU2ZjlkNTliYmRmODNjMzVkMmM3YWMwMzY4ZmY3MWJjZTljZDQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9zaGFyZWQvU2hhcmVkV29ya2VyVGhyZWFkLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJXb3JrZXJUaHJl
YWQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBXb3JrZXJPYmplY3RQcm94eTsK
LQotY2xhc3MgU2hhcmVkV29ya2VyVGhyZWFkIDogcHVibGljIFdvcmtlclRocmVhZCB7Ci1wdWJs
aWM6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4gc3RhdGljIFJlZjxTaGFyZWRXb3Jr
ZXJUaHJlYWQ+IGNyZWF0ZShBcmdzJiYuLi4gYXJncykgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
aGFyZWRXb3JrZXJUaHJlYWQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSk7IH0KLXByaXZh
dGU6Ci0gICAgU2hhcmVkV29ya2VyVGhyZWFkKGNvbnN0IFdvcmtlclBhcmFtZXRlcnMmLCBjb25z
dCBTY3JpcHRCdWZmZXImIHNvdXJjZUNvZGUsIFdvcmtlckxvYWRlclByb3h5JiwgV29ya2VyRGVi
dWdnZXJQcm94eSYsIFdvcmtlck9iamVjdFByb3h5JiwgV29ya2VyVGhyZWFkU3RhcnRNb2RlLCBj
b25zdCBTZWN1cml0eU9yaWdpbiYgdG9wT3JpZ2luLCBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Q
cm94eSosIFNvY2tldFByb3ZpZGVyKiwgSlNDOjpSdW50aW1lRmxhZ3MpOwotCi0gICAgUmVmPFdv
cmtlckdsb2JhbFNjb3BlPiBjcmVhdGVXb3JrZXJHbG9iYWxTY29wZShjb25zdCBXb3JrZXJQYXJh
bWV0ZXJzJiwgUmVmPFNlY3VyaXR5T3JpZ2luPiYmLCBSZWY8U2VjdXJpdHlPcmlnaW4+JiYgdG9w
T3JpZ2luKSBmaW5hbDsKLSAgICBBU0NJSUxpdGVyYWwgdGhyZWFkTmFtZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuICJXZWJDb3JlOiBTaGFyZWRXb3JrZXIiX3M7IH0KLQotICAgIFN0cmluZyBtX25h
bWU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL3NoYXJlZC9jb250ZXh0L1NoYXJlZFdvcmtlclRocmVhZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL3NoYXJlZC9jb250ZXh0L1NoYXJlZFdvcmtlclRocmVhZC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOWVkNTU4OGZiZDc5YmEwZGQ4Y2E3NTNlNjhhMDM1MTRhMmMzMGZhNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2hhcmVkL2NvbnRleHQvU2hh
cmVkV29ya2VyVGhyZWFkLmNwcApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXJlZFdvcmtlclRocmVhZC5oIgorCisjaW5jbHVk
ZSAiU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuaCIKKyNpbmNsdWRlICJXb3JrZXJPYmplY3RQcm94
eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NoYXJlZFdvcmtlclRocmVhZDo6U2hhcmVk
V29ya2VyVGhyZWFkKGNvbnN0IFdvcmtlclBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IFNj
cmlwdEJ1ZmZlciYgc291cmNlQ29kZSwgV29ya2VyTG9hZGVyUHJveHkmIGxvYWRlclByb3h5LCBX
b3JrZXJEZWJ1Z2dlclByb3h5JiBkZWJ1Z2dlclByb3h5LCBXb3JrZXJPYmplY3RQcm94eSYgb2Jq
ZWN0UHJveHksIFdvcmtlclRocmVhZFN0YXJ0TW9kZSBzdGFydE1vZGUsIGNvbnN0IFNlY3VyaXR5
T3JpZ2luJiB0b3BPcmlnaW4sIElEQkNsaWVudDo6SURCQ29ubmVjdGlvblByb3h5KiBjb25uZWN0
aW9uUHJveHksIFNvY2tldFByb3ZpZGVyKiBzb2NrZXRQcm92aWRlciwgSlNDOjpSdW50aW1lRmxh
Z3MgcnVudGltZUZsYWdzKQorICAgIDogV29ya2VyVGhyZWFkKHBhcmFtZXRlcnMsIHNvdXJjZUNv
ZGUsIGxvYWRlclByb3h5LCBkZWJ1Z2dlclByb3h5LCBvYmplY3RQcm94eSwgc3RhcnRNb2RlLCB0
b3BPcmlnaW4sIGNvbm5lY3Rpb25Qcm94eSwgc29ja2V0UHJvdmlkZXIsIHJ1bnRpbWVGbGFncykK
KyAgICAsIG1fbmFtZShwYXJhbWV0ZXJzLm5hbWUuaXNvbGF0ZWRDb3B5KCkpCit7Cit9CisKK1Jl
ZjxXb3JrZXJHbG9iYWxTY29wZT4gU2hhcmVkV29ya2VyVGhyZWFkOjpjcmVhdGVXb3JrZXJHbG9i
YWxTY29wZShjb25zdCBXb3JrZXJQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBSZWY8U2VjdXJpdHlP
cmlnaW4+JiYgb3JpZ2luLCBSZWY8U2VjdXJpdHlPcmlnaW4+JiYgdG9wT3JpZ2luKQoreworICAg
IHJldHVybiBTaGFyZWRXb3JrZXJHbG9iYWxTY29wZTo6Y3JlYXRlKHN0ZDo6ZXhjaGFuZ2UobV9u
YW1lLCB7IH0pLCBwYXJhbWV0ZXJzLCBXVEZNb3ZlKG9yaWdpbiksICp0aGlzLCBXVEZNb3ZlKHRv
cE9yaWdpbiksIGlkYkNvbm5lY3Rpb25Qcm94eSgpLCBzb2NrZXRQcm92aWRlcigpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9zaGFyZWQvY29udGV4dC9TaGFyZWRXb3JrZXJUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvc2hhcmVkL2NvbnRleHQvU2hhcmVkV29ya2VyVGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmYw
NTZmOWQ1OWJiZGY4M2MzNWQyYzdhYzAzNjhmZjcxYmNlOWNkNAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2hhcmVkL2NvbnRleHQvU2hhcmVkV29ya2VyVGhyZWFk
LmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiV29ya2VyVGhyZWFkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV29ya2Vy
T2JqZWN0UHJveHk7CisKK2NsYXNzIFNoYXJlZFdvcmtlclRocmVhZCA6IHB1YmxpYyBXb3JrZXJU
aHJlYWQgeworcHVibGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+IHN0YXRpYyBS
ZWY8U2hhcmVkV29ya2VyVGhyZWFkPiBjcmVhdGUoQXJncyYmLi4uIGFyZ3MpIHsgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU2hhcmVkV29ya2VyVGhyZWFkKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4u
LikpOyB9Citwcml2YXRlOgorICAgIFNoYXJlZFdvcmtlclRocmVhZChjb25zdCBXb3JrZXJQYXJh
bWV0ZXJzJiwgY29uc3QgU2NyaXB0QnVmZmVyJiBzb3VyY2VDb2RlLCBXb3JrZXJMb2FkZXJQcm94
eSYsIFdvcmtlckRlYnVnZ2VyUHJveHkmLCBXb3JrZXJPYmplY3RQcm94eSYsIFdvcmtlclRocmVh
ZFN0YXJ0TW9kZSwgY29uc3QgU2VjdXJpdHlPcmlnaW4mIHRvcE9yaWdpbiwgSURCQ2xpZW50OjpJ
REJDb25uZWN0aW9uUHJveHkqLCBTb2NrZXRQcm92aWRlciosIEpTQzo6UnVudGltZUZsYWdzKTsK
KworICAgIFJlZjxXb3JrZXJHbG9iYWxTY29wZT4gY3JlYXRlV29ya2VyR2xvYmFsU2NvcGUoY29u
c3QgV29ya2VyUGFyYW1ldGVycyYsIFJlZjxTZWN1cml0eU9yaWdpbj4mJiwgUmVmPFNlY3VyaXR5
T3JpZ2luPiYmIHRvcE9yaWdpbikgZmluYWw7CisgICAgQVNDSUlMaXRlcmFsIHRocmVhZE5hbWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiAiV2ViQ29yZTogU2hhcmVkV29ya2VyIl9zOyB9CisKKyAg
ICBTdHJpbmcgbV9uYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zaGFyZWQvY29udGV4dC9TaGFyZWRXb3JrZXJUaHJl
YWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NoYXJlZC9jb250ZXh0L1NoYXJl
ZFdvcmtlclRocmVhZFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MjBhMGFlZWVkODA3OTM1ZjljYTE4
NTdlZDdhOWFlMWE2NmY3ZDI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9zaGFyZWQvY29udGV4dC9TaGFyZWRXb3JrZXJUaHJlYWRQcm94eS5jcHAKQEAgLTAsMCAr
MSwyMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2hh
cmVkV29ya2VyVGhyZWFkUHJveHkuaCIKKworI2luY2x1ZGUgIkNhY2hlU3RvcmFnZVByb3ZpZGVy
LmgiCisjaW5jbHVkZSAiRXJyb3JFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNp
bmNsdWRlICJMaWJXZWJSVENQcm92aWRlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgor
I2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJU
Q0RhdGFDaGFubmVsUmVtb3RlSGFuZGxlckNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJTaGFyZWRX
b3JrZXIuaCIKKyNpbmNsdWRlICJTaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5oIgorI2luY2x1ZGUg
IlNoYXJlZFdvcmtlclRocmVhZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NoYXJlZFdv
cmtlclRocmVhZFByb3h5OjpTaGFyZWRXb3JrZXJUaHJlYWRQcm94eShTaGFyZWRXb3JrZXImIHNo
YXJlZFdvcmtlcikKKyAgICA6IG1fc2hhcmVkV29ya2VyKHNoYXJlZFdvcmtlcikKKyAgICAsIG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dChzaGFyZWRXb3JrZXIuc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKQorICAgICwgbV9pZGVudGlmaWVyRm9ySW5zcGVjdG9yKHNoYXJlZFdvcmtlci5pZGVudGlm
aWVyRm9ySW5zcGVjdG9yKCkpCit7Cit9CisKK3ZvaWQgU2hhcmVkV29ya2VyVGhyZWFkUHJveHk6
OnN0YXJ0V29ya2VyR2xvYmFsU2NvcGUoY29uc3QgVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGJvb2wgaXNPbmxpbmUsIGNvbnN0IFNj
cmlwdEJ1ZmZlciYgc2NyaXB0QnVmZmVyLCBjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNw
b25zZUhlYWRlcnMmIGNvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycywgYm9vbCBz
aG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3ksIGNvbnN0IENyb3NzT3Jp
Z2luRW1iZWRkZXJQb2xpY3kmIGNyb3NzT3JpZ2luRW1iZWRkZXJQb2xpY3ksIE1vbm90b25pY1Rp
bWUgdGltZU9yaWdpbiwgUmVmZXJyZXJQb2xpY3kgcmVmZXJyZXJQb2xpY3ksIFdvcmtlclR5cGUg
d29ya2VyVHlwZSwgRmV0Y2hSZXF1ZXN0Q3JlZGVudGlhbHMgY3JlZGVudGlhbHMsIEpTQzo6UnVu
dGltZUZsYWdzIHJ1bnRpbWVGbGFncykKK3sKKyAgICBpZiAobV9hc2tlZFRvVGVybWluYXRlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBXb3JrZXJQYXJhbWV0ZXJz
IHsKKyAgICAgICAgc2NyaXB0VVJMLAorICAgICAgICBuYW1lLAorICAgICAgICBtX2lkZW50aWZp
ZXJGb3JJbnNwZWN0b3IsCisgICAgICAgIHVzZXJBZ2VudCwKKyAgICAgICAgaXNPbmxpbmUsCisg
ICAgICAgIGNvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycywKKyAgICAgICAgc2hv
dWxkQnlwYXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5LAorICAgICAgICBjcm9zc09y
aWdpbkVtYmVkZGVyUG9saWN5LAorICAgICAgICB0aW1lT3JpZ2luLAorICAgICAgICByZWZlcnJl
clBvbGljeSwKKyAgICAgICAgd29ya2VyVHlwZSwKKyAgICAgICAgY3JlZGVudGlhbHMsCisgICAg
ICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2V0dGluZ3NWYWx1ZXMoKQorICAgIH07CisK
KyAgICBpZiAoIW1fd29ya2VyVGhyZWFkKSB7CisgICAgICAgIG1fd29ya2VyVGhyZWFkID0gU2hh
cmVkV29ya2VyVGhyZWFkOjpjcmVhdGUocGFyYW1ldGVycywgc2NyaXB0QnVmZmVyLCAqdGhpcywg
KnRoaXMsICp0aGlzLCBXb3JrZXJUaHJlYWRTdGFydE1vZGU6Ok5vcm1hbCwgbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT50b3BPcmlnaW4oKSwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pZGJD
b25uZWN0aW9uUHJveHkoKSwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zb2NrZXRQcm92aWRl
cigpLCBydW50aW1lRmxhZ3MpOworICAgICAgICBtX3dvcmtlclRocmVhZC0+c3RhcnQoKTsKKyAg
ICB9Cit9CisKK3ZvaWQgU2hhcmVkV29ya2VyVGhyZWFkUHJveHk6OnRlcm1pbmF0ZVdvcmtlckds
b2JhbFNjb3BlKCkKK3sKKyAgICBpZiAobV9hc2tlZFRvVGVybWluYXRlKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2Fza2VkVG9UZXJtaW5hdGUgPSB0cnVlOworICAgIGlmIChtX3dvcmtlclRo
cmVhZCkKKyAgICAgICAgbV93b3JrZXJUaHJlYWQtPnN0b3AobnVsbHB0cik7Cit9CisKK3ZvaWQg
U2hhcmVkV29ya2VyVGhyZWFkUHJveHk6OnBvc3RNZXNzYWdlVG9Xb3JrZXJHbG9iYWxTY29wZShN
ZXNzYWdlV2l0aE1lc3NhZ2VQb3J0cyYmIG1lc3NhZ2UpCit7CisgICAgLy8gRklYTUU6IFNoYXJl
ZFdvcmtlciBkb2Vzbid0IGhhdmUgcG9zdE1lc3NhZ2UsIHNvIHRoaXMgbWlnaHQgbm90IGJlIG5l
Y2Vzc2FyeS4KKyAgICBwb3N0VGFza1RvV29ya2VyR2xvYmFsU2NvcGUoW21lc3NhZ2UgPSBXVEZN
b3ZlKG1lc3NhZ2UpXShhdXRvJiBzY3JpcHRDb250ZXh0KSBtdXRhYmxlIHsKKyAgICAgICAgYXV0
byYgY29udGV4dCA9IGRvd25jYXN0PFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlPihzY3JpcHRDb250
ZXh0KTsKKyAgICAgICAgYXV0byBwb3J0cyA9IE1lc3NhZ2VQb3J0OjplbnRhbmdsZVBvcnRzKHNj
cmlwdENvbnRleHQsIFdURk1vdmUobWVzc2FnZS50cmFuc2ZlcnJlZFBvcnRzKSk7CisgICAgICAg
IGNvbnRleHQuZGlzcGF0Y2hFdmVudChNZXNzYWdlRXZlbnQ6OmNyZWF0ZShXVEZNb3ZlKHBvcnRz
KSwgbWVzc2FnZS5tZXNzYWdlLnJlbGVhc2VOb25OdWxsKCkpKTsKKyAgICB9KTsKK30KKwordm9p
ZCBTaGFyZWRXb3JrZXJUaHJlYWRQcm94eTo6cG9zdFRhc2tUb1dvcmtlckdsb2JhbFNjb3BlKEZ1
bmN0aW9uPHZvaWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpPiYmIHRhc2spCit7CisgICAgaWYg
KG1fYXNrZWRUb1Rlcm1pbmF0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fd29ya2VyVGhyZWFk
LT5ydW5Mb29wKCkucG9zdFRhc2soV1RGTW92ZSh0YXNrKSk7Cit9CisKK2Jvb2wgU2hhcmVkV29y
a2VyVGhyZWFkUHJveHk6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1faGFzUGVuZGluZ0FjdGl2aXR5ICYmICFtX2Fza2VkVG9UZXJtaW5hdGU7Cit9CisKK3ZvaWQg
U2hhcmVkV29ya2VyVGhyZWFkUHJveHk6Ondvcmtlck9iamVjdERlc3Ryb3llZCgpCit7CisgICAg
bV9zaGFyZWRXb3JrZXIgPSBudWxscHRyOworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
cG9zdFRhc2soW3RoaXNdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgeworICAgICAgICBtX21h
eUJlRGVzdHJveWVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1fd29ya2VyVGhyZWFkKQorICAgICAg
ICAgICAgdGVybWluYXRlV29ya2VyR2xvYmFsU2NvcGUoKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgd29ya2VyR2xvYmFsU2NvcGVEZXN0cm95ZWRJbnRlcm5hbCgpOworICAgIH0pOworfQor
Cit2b2lkIFNoYXJlZFdvcmtlclRocmVhZFByb3h5Ojpub3RpZnlOZXR3b3JrU3RhdGVDaGFuZ2Uo
Ym9vbCBpc09ubGluZSkKK3sKKyAgICBpZiAobV9hc2tlZFRvVGVybWluYXRlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIW1fd29ya2VyVGhyZWFkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrKFtpc09ubGluZV0gKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgYXV0byYgZ2xvYmFsU2NvcGUgPSBk
b3duY2FzdDxXb3JrZXJHbG9iYWxTY29wZT4oY29udGV4dCk7CisgICAgICAgIGdsb2JhbFNjb3Bl
LnNldElzT25saW5lKGlzT25saW5lKTsKKyAgICAgICAgZ2xvYmFsU2NvcGUuZGlzcGF0Y2hFdmVu
dChFdmVudDo6Y3JlYXRlKGlzT25saW5lID8gZXZlbnROYW1lcygpLm9ubGluZUV2ZW50IDogZXZl
bnROYW1lcygpLm9mZmxpbmVFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0Nh
bmNlbGFibGU6Ok5vKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgU2hhcmVkV29ya2VyVGhyZWFkUHJv
eHk6OnN1c3BlbmRGb3JCYWNrRm9yd2FyZENhY2hlKCkKK3sKKworfQorCit2b2lkIFNoYXJlZFdv
cmtlclRocmVhZFByb3h5OjpyZXN1bWVGb3JCYWNrRm9yd2FyZENhY2hlKCkKK3sKKworfQorCit2
b2lkIFNoYXJlZFdvcmtlclRocmVhZFByb3h5Ojpwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3Qo
Y29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVt
YmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPnBvc3RUYXNrKFt0aGlzLCBlcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2UuaXNvbGF0
ZWRDb3B5KCksIHNvdXJjZVVSTCA9IHNvdXJjZVVSTC5pc29sYXRlZENvcHkoKSwgbGluZU51bWJl
ciwgY29sdW1uTnVtYmVyXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKKyAgICAgICAgaWYg
KCFtX3NoYXJlZFdvcmtlcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBXZSBk
b24ndCBib3RoZXIgY2hlY2tpbmcgdGhlIGFza2VkVG9UZXJtaW5hdGUoKSBmbGFnIGhlcmUsIGJl
Y2F1c2UgZXhjZXB0aW9ucyBzaG91bGQgKmFsd2F5cyogYmUgcmVwb3J0ZWQgZXZlbiBpZiB0aGUg
dGhyZWFkIGlzIHRlcm1pbmF0ZWQuCisgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBk
aWZmZXJlbnQgdGhhbiB0aGUgYmVoYXZpb3IgaW4gTWVzc2FnZVdvcmtlclRhc2ssIGJlY2F1c2Ug
dGVybWluYXRlZCB3b3JrZXJzIG5vIGxvbmdlciBkZWxpdmVyIG1lc3NhZ2VzIChzZWN0aW9uIDQu
NiBvZiB0aGUgV2ViV29ya2VyIHNwZWMpLCBidXQgdGhleSBkbyByZXBvcnQgZXhjZXB0aW9ucy4K
KyAgICAgICAgQWN0aXZlRE9NT2JqZWN0OjpxdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnQoKm1fc2hh
cmVkV29ya2VyLCBUYXNrU291cmNlOjpET01NYW5pcHVsYXRpb24sIEVycm9yRXZlbnQ6OmNyZWF0
ZShlcnJvck1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCB7IH0p
KTsKKyAgICB9KTsKK30KKwordm9pZCBTaGFyZWRXb3JrZXJUaHJlYWRQcm94eTo6d29ya2VyR2xv
YmFsU2NvcGVEZXN0cm95ZWQoKQoreworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9z
dFRhc2soW3RoaXNdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgeworICAgICAgICB3b3JrZXJH
bG9iYWxTY29wZURlc3Ryb3llZEludGVybmFsKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgU2hhcmVk
V29ya2VyVGhyZWFkUHJveHk6OnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QoTWVzc2FnZVdpdGhN
ZXNzYWdlUG9ydHMmJikKK3sKKworfQorCit2b2lkIFNoYXJlZFdvcmtlclRocmVhZFByb3h5Ojpj
b25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoYm9vbCkKK3sKK30KKwordm9pZCBTaGFyZWRX
b3JrZXJUaHJlYWRQcm94eTo6cmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wgaGFzUGVuZGluZ0Fj
dGl2aXR5KQoreworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soW3RoaXMs
IGhhc1BlbmRpbmdBY3Rpdml0eV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CisgICAgICAg
IG1faGFzUGVuZGluZ0FjdGl2aXR5ID0gaGFzUGVuZGluZ0FjdGl2aXR5OworICAgIH0pOworfQor
CitSZWZQdHI8Q2FjaGVTdG9yYWdlQ29ubmVjdGlvbj4gU2hhcmVkV29ya2VyVGhyZWFkUHJveHk6
OmNyZWF0ZUNhY2hlU3RvcmFnZUNvbm5lY3Rpb24oKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKm1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCk7CisgICAgcmV0dXJuIGRvY3VtZW50LnBhZ2UoKS0+Y2FjaGVTdG9y
YWdlUHJvdmlkZXIoKS5jcmVhdGVDYWNoZVN0b3JhZ2VDb25uZWN0aW9uKCk7Cit9CisKK1JlZlB0
cjxSVENEYXRhQ2hhbm5lbFJlbW90ZUhhbmRsZXJDb25uZWN0aW9uPiBTaGFyZWRXb3JrZXJUaHJl
YWRQcm94eTo6Y3JlYXRlUlRDRGF0YUNoYW5uZWxSZW1vdGVIYW5kbGVyQ29ubmVjdGlvbigpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25j
YXN0PERvY3VtZW50PigqbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKKyAgICBpZiAoIWRvY3Vt
ZW50LnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGRvY3VtZW50
LnBhZ2UoKS0+bGliV2ViUlRDUHJvdmlkZXIoKS5jcmVhdGVSVENEYXRhQ2hhbm5lbFJlbW90ZUhh
bmRsZXJDb25uZWN0aW9uKCk7Cit9CisKK3ZvaWQgU2hhcmVkV29ya2VyVGhyZWFkUHJveHk6OnBv
c3RUYXNrVG9Mb2FkZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayYmIHRhc2spCit7Cisg
ICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhXVEZNb3ZlKHRhc2spKTsKK30K
KworYm9vbCBTaGFyZWRXb3JrZXJUaHJlYWRQcm94eTo6cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJP
cldvcmtsZXRHbG9iYWxTY29wZShTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrJiYgdGFzaywg
Y29uc3QgU3RyaW5nJiBtb2RlKQoreworICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fd29ya2VyVGhyZWFkLT5ydW5Mb29wKCkucG9zdFRh
c2tGb3JNb2RlKFdURk1vdmUodGFzayksIG1vZGUpOworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIFNoYXJlZFdvcmtlclRocmVhZFByb3h5Ojpwb3N0TWVzc2FnZVRvRGVidWdnZXIoY29uc3Qg
U3RyaW5nJikKK3sKKworfQorCit2b2lkIFNoYXJlZFdvcmtlclRocmVhZFByb3h5OjpzZXRSZXNv
dXJjZUNhY2hpbmdEaXNhYmxlZEJ5V2ViSW5zcGVjdG9yKGJvb2wpCit7CisKK30KKwordm9pZCBT
aGFyZWRXb3JrZXJUaHJlYWRQcm94eTo6d29ya2VyR2xvYmFsU2NvcGVEZXN0cm95ZWRJbnRlcm5h
bCgpCit7CisgICAgLy8gVGhpcyBpcyBhbHdheXMgdGhlIGxhc3QgdGFzayB0byBiZSBwZXJmb3Jt
ZWQsIHNvIHRoZSBwcm94eSBpcyBub3QgbmVlZGVkIGZvciBjb21tdW5pY2F0aW9uCisgICAgLy8g
aW4gZWl0aGVyIHNpZGUgYW55IG1vcmUuIEhvd2V2ZXIsIHRoZSBXb3JrZXIgb2JqZWN0IG1heSBz
dGlsbCBleGlzdCwgYW5kIGl0IGFzc3VtZXMgdGhhdCB0aGUgcHJveHkgZXhpc3RzLCB0b28uCisg
ICAgbV9hc2tlZFRvVGVybWluYXRlID0gdHJ1ZTsKKyAgICBtX3dvcmtlclRocmVhZCA9IG51bGxw
dHI7CisKKyAgICAvLyBUaGlzIGJhbGFuY2VzIHRoZSBvcmlnaW5hbCByZWYgaW4gY29uc3RydWN0
aW9uLgorICAgIGlmIChtX21heUJlRGVzdHJveWVkKQorICAgICAgICBkZXJlZigpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L3NoYXJlZC9jb250ZXh0L1NoYXJlZFdvcmtlclRocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL3NoYXJlZC9jb250ZXh0L1NoYXJlZFdvcmtlclRocmVhZFByb3h5LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTExNDQwMGFhZGI0NmY5NGQ1MDgxMTI3Zjc5OGNhZTNlZDBhYmQ4NQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2hhcmVkL2NvbnRleHQvU2hhcmVkV29y
a2VyVGhyZWFkUHJveHkuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJXb3JrZXJEZWJ1Z2dlclByb3h5LmgiCisjaW5jbHVkZSAiV29ya2Vy
R2xvYmFsU2NvcGVQcm94eS5oIgorI2luY2x1ZGUgIldvcmtlckxvYWRlclByb3h5LmgiCisjaW5j
bHVkZSAiV29ya2VyT2JqZWN0UHJveHkuaCIKKyNpbmNsdWRlICJXb3JrZXJPcHRpb25zLmgiCisj
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBT
aGFyZWRXb3JrZXI7CitjbGFzcyBTaGFyZWRXb3JrZXJUaHJlYWQ7CisKK2NsYXNzIFNoYXJlZFdv
cmtlclRocmVhZFByb3h5IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNoYXJlZFdvcmtl
clRocmVhZFByb3h5PiwgcHVibGljIFdvcmtlckdsb2JhbFNjb3BlUHJveHksIHB1YmxpYyBXb3Jr
ZXJPYmplY3RQcm94eSwgcHVibGljIFdvcmtlckxvYWRlclByb3h5LCBwdWJsaWMgV29ya2VyRGVi
dWdnZXJQcm94eSB7CitwdWJsaWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4gc3Rh
dGljIFNoYXJlZFdvcmtlclRocmVhZFByb3h5JiBjcmVhdGUoQXJncyYmLi4uIGFyZ3MpIHsgcmV0
dXJuICpuZXcgU2hhcmVkV29ya2VyVGhyZWFkUHJveHkoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3Mp
Li4uKTsgfQorCisgICAgU2hhcmVkV29ya2VyVGhyZWFkKiB0aHJlYWQoKSB7IHJldHVybiBtX3dv
cmtlclRocmVhZC5nZXQoKTsgfQorCisgICAgdm9pZCBzdGFydFdvcmtlckdsb2JhbFNjb3BlKGNv
bnN0IFVSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdXNl
ckFnZW50LCBib29sIGlzT25saW5lLCBjb25zdCBTY3JpcHRCdWZmZXImIHNvdXJjZUNvZGUsIGNv
bnN0IENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycyYsIGJvb2wgc2hvdWxkQnlw
YXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5LCBjb25zdCBDcm9zc09yaWdpbkVtYmVk
ZGVyUG9saWN5JiwgTW9ub3RvbmljVGltZSB0aW1lT3JpZ2luLCBSZWZlcnJlclBvbGljeSwgV29y
a2VyVHlwZSwgRmV0Y2hSZXF1ZXN0Q3JlZGVudGlhbHMsIEpTQzo6UnVudGltZUZsYWdzKSBmaW5h
bDsKKyAgICB2b2lkIHRlcm1pbmF0ZVdvcmtlckdsb2JhbFNjb3BlKCkgZmluYWw7CisgICAgdm9p
ZCBwb3N0TWVzc2FnZVRvV29ya2VyR2xvYmFsU2NvcGUoTWVzc2FnZVdpdGhNZXNzYWdlUG9ydHMm
JikgZmluYWw7CisgICAgdm9pZCBwb3N0VGFza1RvV29ya2VyR2xvYmFsU2NvcGUoRnVuY3Rpb248
dm9pZChTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik+JiYpIGZpbmFsOworICAgIGJvb2wgaGFzUGVu
ZGluZ0FjdGl2aXR5KCkgY29uc3QgZmluYWw7CisgICAgdm9pZCB3b3JrZXJPYmplY3REZXN0cm95
ZWQoKSBmaW5hbDsKKyAgICB2b2lkIG5vdGlmeU5ldHdvcmtTdGF0ZUNoYW5nZShib29sIGlzT25s
aW5lKSBmaW5hbDsKKyAgICB2b2lkIHN1c3BlbmRGb3JCYWNrRm9yd2FyZENhY2hlKCkgZmluYWw7
CisgICAgdm9pZCByZXN1bWVGb3JCYWNrRm9yd2FyZENhY2hlKCkgZmluYWw7CisgICAgdm9pZCBw
b3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGlu
dCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkg
ZmluYWw7CisgICAgdm9pZCB3b3JrZXJHbG9iYWxTY29wZURlc3Ryb3llZCgpIGZpbmFsOworICAg
IHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChNZXNzYWdlV2l0aE1lc3NhZ2VQb3J0cyYm
KSBmaW5hbDsKKyAgICB2b2lkIGNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChib29sIGhh
c1BlbmRpbmdBY3Rpdml0eSkgZmluYWw7CisgICAgdm9pZCByZXBvcnRQZW5kaW5nQWN0aXZpdHko
Ym9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpIGZpbmFsOworICAgIFJlZlB0cjxDYWNoZVN0b3JhZ2VD
b25uZWN0aW9uPiBjcmVhdGVDYWNoZVN0b3JhZ2VDb25uZWN0aW9uKCkgZmluYWw7CisgICAgUmVm
UHRyPFJUQ0RhdGFDaGFubmVsUmVtb3RlSGFuZGxlckNvbm5lY3Rpb24+IGNyZWF0ZVJUQ0RhdGFD
aGFubmVsUmVtb3RlSGFuZGxlckNvbm5lY3Rpb24oKSBmaW5hbDsKKyAgICB2b2lkIHBvc3RUYXNr
VG9Mb2FkZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayYmKSBmaW5hbDsKKyAgICBib29s
IHBvc3RUYXNrRm9yTW9kZVRvV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzayYmLCBjb25zdCBTdHJpbmcmIG1vZGUpIGZpbmFsOworICAgIHZvaWQg
cG9zdE1lc3NhZ2VUb0RlYnVnZ2VyKGNvbnN0IFN0cmluZyYpIGZpbmFsOworICAgIHZvaWQgc2V0
UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRCeVdlYkluc3BlY3Rvcihib29sKSBmaW5hbDsKKworcHJp
dmF0ZToKKyAgICBTaGFyZWRXb3JrZXJUaHJlYWRQcm94eShTaGFyZWRXb3JrZXImKTsKKworICAg
IHZvaWQgd29ya2VyR2xvYmFsU2NvcGVEZXN0cm95ZWRJbnRlcm5hbCgpOworCisgICAgV2Vha1B0
cjxTaGFyZWRXb3JrZXI+IG1fc2hhcmVkV29ya2VyOworICAgIFJlZlB0cjxTaGFyZWRXb3JrZXJU
aHJlYWQ+IG1fd29ya2VyVGhyZWFkOworICAgIGNvbnN0IFJlZlB0cjxTY3JpcHRFeGVjdXRpb25D
b250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgY29uc3QgU3RyaW5nIG1faWRl
bnRpZmllckZvckluc3BlY3RvcjsKKyAgICBib29sIG1fYXNrZWRUb1Rlcm1pbmF0ZSB7IGZhbHNl
IH07CisgICAgYm9vbCBtX2hhc1BlbmRpbmdBY3Rpdml0eSB7IGZhbHNlIH07CisgICAgYm9vbCBt
X21heUJlRGVzdHJveWVkIHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450657</attachid>
            <date>2022-02-02 09:13:35 -0800</date>
            <delta_ts>2022-02-02 11:57:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236017-20220202091334.patch</filename>
            <type>text/plain</type>
            <size>52092</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4OTUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTQzM2RmZjM5NTM1ZmU2
MzNkYWYzODZhYjYzODU3NjRlYjJjOGQ0OC4uYWM3ZjZmNTQ3ZTlkNGIxZThiOTEyMzI3MjdlNDk1
Y2M4MjgwZGI3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDIyLTAyLTAyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBTaGFyZWRXb3JrZXJU
aHJlYWQgJiBTaGFyZWRXb3JrZXJQcm94eSB0byB3b3JrZXJzL3NoYXJlZC9jb250ZXh0LworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2MDE3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgWW91ZW5uIEZhYmxldC4KKworICAgICAgICBNb3ZlIFNoYXJlZFdv
cmtlclRocmVhZCAmIFNoYXJlZFdvcmtlclByb3h5IHRvIHdvcmtlcnMvc2hhcmVkL2NvbnRleHQv
LCBmb3IgY29uc2lzdGVuY3kgd2l0aCBzZXJ2aWNlIHdvcmtlcnMuCisgICAgICAgIEFsc28gcmVu
YW1lIFNoYXJlZFdvcmtlclByb3h5IHRvIFNoYXJlZFdvcmtlclRocmVhZFByb3h5LgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogd29ya2Vycy9zaGFyZWQvU2hhcmVkV29ya2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZFdvcmtlcjo6U2hhcmVkV29ya2VyKToKKyAgICAgICAgKiB3b3JrZXJz
L3NoYXJlZC9TaGFyZWRXb3JrZXIuaDoKKyAgICAgICAgKiB3b3JrZXJzL3NoYXJlZC9TaGFyZWRX
b3JrZXJNYW5hZ2VyLmNwcDoKKyAgICAgICAgKiB3b3JrZXJzL3NoYXJlZC9jb250ZXh0L1NoYXJl
ZFdvcmtlclRocmVhZC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3No
YXJlZC9TaGFyZWRXb3JrZXJUaHJlYWQuY3BwLgorICAgICAgICAqIHdvcmtlcnMvc2hhcmVkL2Nv
bnRleHQvU2hhcmVkV29ya2VyVGhyZWFkLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93
b3JrZXJzL3NoYXJlZC9TaGFyZWRXb3JrZXJUaHJlYWQuaC4KKyAgICAgICAgKiB3b3JrZXJzL3No
YXJlZC9jb250ZXh0L1NoYXJlZFdvcmtlclRocmVhZFByb3h5LmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvc2hhcmVkL1NoYXJlZFdvcmtlclByb3h5LmNwcC4KKyAgICAg
ICAgKiB3b3JrZXJzL3NoYXJlZC9jb250ZXh0L1NoYXJlZFdvcmtlclRocmVhZFByb3h5Lmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NoYXJlZC9TaGFyZWRXb3JrZXJQcm94
eS5oLgorCiAyMDIyLTAyLTAyICBUeWxlciBXaWxjb2NrICA8dHlsZXJfd0BhcHBsZS5jb20+CiAK
ICAgICAgICAgQVg6IERpc3BsYXkgc3RhcnRPYmplY3QgYW5kIGFuY2hvck9iamVjdCBvYmplY3RJ
RCB3aGVuIGxvZ2dpbmcgQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhIGZyb20gQVhMb2dnZXIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNzkyYTAwZjllYTFhMjI4MTI2NWNjZjlhNDVlYWVjNzYw
YTg5ODI1YS4uNDU3YzRhYTliMWExOGNjZmE5YWIyODdlNGUwYjM3MGVlM2FkNTA5YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKQEAgLTE3OSw2ICsxNzksNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0lO
Q0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vd29ya2Vycy9zZXJ2aWNlL2Nv
bnRleHQiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIiCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L3dvcmtlcnMvc2hhcmVkIgorICAgICIke1dFQkNPUkVfRElSfS93b3Jr
ZXJzL3NoYXJlZC9jb250ZXh0IgogICAgICIke1dFQkNPUkVfRElSfS93b3JrbGV0cyIKICAgICAi
JHtXRUJDT1JFX0RJUn0veG1sIgogICAgICIke1dFQkNPUkVfRElSfS94bWwvcGFyc2VyIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hl
YWRlcnMuY21ha2UKaW5kZXggODliODJhMTNmN2U0ZDYxNGE0NWMxYTdmZmNjYTcwOTU1OGJlYjMw
OC4uZTE0MzdhNmJjMTNjMDkyNGQwMTdjZDAyZWFhN2VhNTQyZmZhZDQ1MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJz
LmNtYWtlCkBAIC0yMDAwLDYgKzIwMDAsOSBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09S
S19IRUFERVJTCiAgICAgd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlclRvQ29udGV4dENv
bm5lY3Rpb24uaAogICAgIHdvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXJXb3JrZXIuaAog
CisgICAgd29ya2Vycy9zaGFyZWQvY29udGV4dC9TaGFyZWRXb3JrZXJUaHJlYWQuaAorICAgIHdv
cmtlcnMvc2hhcmVkL2NvbnRleHQvU2hhcmVkV29ya2VyVGhyZWFkUHJveHkuaAorCiAgICAgeG1s
L0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oCiAgICAgeG1sL1hQYXRoRXhwcmVzc2lvbi5oCiAgICAg
eG1sL1hQYXRoTlNSZXNvbHZlci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGY2NmNjZjhmMDZhNTc5MTlk
OGE0ZWEwZGMwZDA4OTAwMTY1NDU1NjcuLmEwZTlhOGViN2UwMDk3MDkzOGI2MGUzMGI2NTVjMjQ0
N2ZiODJjNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yNzg3LDkgKzI3ODcsOSBAQCB3b3JrZXJzL3Nl
cnZpY2Uvc2VydmVyL1NXU2VydmVyV29ya2VyLmNwcAogd29ya2Vycy9zaGFyZWQvU2hhcmVkV29y
a2VyLmNwcAogd29ya2Vycy9zaGFyZWQvU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuY3BwCiB3b3Jr
ZXJzL3NoYXJlZC9TaGFyZWRXb3JrZXJNYW5hZ2VyLmNwcAotd29ya2Vycy9zaGFyZWQvU2hhcmVk
V29ya2VyUHJveHkuY3BwCiB3b3JrZXJzL3NoYXJlZC9TaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXIu
Y3BwCi13b3JrZXJzL3NoYXJlZC9TaGFyZWRXb3JrZXJUaHJlYWQuY3BwCit3b3JrZXJzL3NoYXJl
ZC9jb250ZXh0L1NoYXJlZFdvcmtlclRocmVhZC5jcHAKK3dvcmtlcnMvc2hhcmVkL2NvbnRleHQv
U2hhcmVkV29ya2VyVGhyZWFkUHJveHkuY3BwCiB3b3JrbGV0cy9QYWludFdvcmtsZXRHbG9iYWxT
Y29wZS5jcHAKIHdvcmtsZXRzL1dvcmtsZXQuY3BwCiB3b3JrbGV0cy9Xb3JrbGV0R2xvYmFsU2Nv
cGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggYmZhYzg2ZTdkYzFiZWY4NDY3NTAxOTRkNWU0ZmE0MjhkZDYzNTc2Yy4uZWYz
NDQ5Yzc2M2RhNDA1MzY3YzgyY2Y1NTQxY2ZmMDEyY2E3ZjEwZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTM0Miw5ICsxMzQy
LDkgQEAKIAkJNDY3MkFBOTgyNkIwOTQzMzAwRTZFQzM4IC8qIENyb3NzT3JpZ2luRW1iZWRkZXJQ
b2xpY3kuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2
NzJBQTk2MjZCMDk0MjEwMEU2RUMzOCAvKiBDcm9zc09yaWdpbkVtYmVkZGVyUG9saWN5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDY3MkFBOTky
NkIwOTQzRjAwRTZFQzM4IC8qIENyb3NzT3JpZ2luT3BlbmVyUG9saWN5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NjcyQUE5NzI2QjA5NDIxMDBFNkVD
MzggLyogQ3Jvc3NPcmlnaW5PcGVuZXJQb2xpY3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NjczMDIwMjFDNEVGRTc4MDBCQ0IzNTcgLyogSWdu
b3JlT3BlbnNEdXJpbmdVbmxvYWRDb3VudEluY3JlbWVudGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NjczMDIwMTFDNEVGRTY2MDBCQ0IzNTcgLyog
SWdub3JlT3BlbnNEdXJpbmdVbmxvYWRDb3VudEluY3JlbWVudGVyLmggKi87IH07Ci0JCTQ2N0E2
OEQ3Mjc1RUE5OTEwMDlCMzFDNSAvKiBTaGFyZWRXb3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2N0E2OEQ0Mjc1RUE5OEIwMDlCMzFD
NSAvKiBTaGFyZWRXb3JrZXJUaHJlYWQuaCAqLzsgfTsKKwkJNDY3QTY4RDcyNzVFQTk5MTAwOUIz
MUM1IC8qIFNoYXJlZFdvcmtlclRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDY3QTY4RDQyNzVFQTk4QjAwOUIzMUM1IC8qIFNoYXJlZFdvcmtl
clRocmVhZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTQ2N0E2OEQ4Mjc1RUE5OTUwMDlCMzFDNSAvKiBTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2N0E2OEQ1
Mjc1RUE5OEMwMDlCMzFDNSAvKiBTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXIuaCAqLzsgfTsKLQkJ
NDY3QTY4RDkyNzVFQTk5ODAwOUIzMUM1IC8qIFNoYXJlZFdvcmtlclByb3h5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NjdBNjhENjI3NUVBOThDMDA5
QjMxQzUgLyogU2hhcmVkV29ya2VyUHJveHkuaCAqLzsgfTsKKwkJNDY3QTY4RDkyNzVFQTk5ODAw
OUIzMUM1IC8qIFNoYXJlZFdvcmtlclRocmVhZFByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NjdBNjhENjI3NUVBOThDMDA5QjMxQzUgLyogU2hh
cmVkV29ya2VyVGhyZWFkUHJveHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk0NjdBNjhEQTI3NUVBOTlDMDA5QjMxQzUgLyogU2hhcmVkV29ya2Vy
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDY3QTY4RDIyNzVFQTk4QTAwOUIzMUM1IC8qIFNoYXJlZFdvcmtlck1hbmFnZXIuaCAqLzsgfTsK
IAkJNDY4MkQyMDAxRjc5NzgzMDAwQzg2M0RCIC8qIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NjgyRDFGRjFG
Nzk3ODIzMDBDODYzREIgLyogU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NjgzNDRFMDFFRERGQUFBMDBC
Nzc5NUIgLyogRE9NUmVjdExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ2ODM0NERFMUVEREZBNUYwMEI3Nzk1QiAvKiBET01SZWN0TGlzdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05MjM0LDE0
ICs5MjM0LDE0IEBACiAJCTQ2NzMwMjAxMUM0RUZFNjYwMEJDQjM1NyAvKiBJZ25vcmVPcGVuc0R1
cmluZ1VubG9hZENvdW50SW5jcmVtZW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSWdub3JlT3BlbnNEdXJpbmdVbmxvYWRDb3VudEluY3JlbWVudGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2NzgwMkIwMjc0NzExN0IwMERBOUZCNiAvKiBXZWJMb2Nr
TWFuYWdlclNuYXBzaG90LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkxv
Y2tNYW5hZ2VyU25hcHNob3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDY3ODAy
QjIyNzQ3MTE4NTAwREE5RkI2IC8qIFdlYkxvY2tJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkxvY2tJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTQ2N0E2OENGMjc1RUE5ODkwMDlCMzFDNSAvKiBTaGFyZWRXb3JrZXJQcm94
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFyZWRXb3JrZXJQcm94eS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ2N0E2OENGMjc1RUE5ODkwMDlCMzFDNSAvKiBTaGFyZWRX
b3JrZXJUaHJlYWRQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFyZWRXb3JrZXJUaHJl
YWRQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2N0E2OEQwMjc1RUE5
ODkwMDlCMzFDNSAvKiBTaGFyZWRXb3JrZXJUaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2hhcmVkV29ya2VyVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDY3
QTY4RDEyNzVFQTk4QTAwOUIzMUM1IC8qIFNoYXJlZFdvcmtlclNjcmlwdExvYWRlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0NjdBNjhEMjI3NUVBOThBMDA5QjMxQzUgLyogU2hhcmVkV29y
a2VyTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFyZWRXb3JrZXJNYW5hZ2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2N0E2OEQzMjc1RUE5OEIwMDlCMzFDNSAvKiBTaGFy
ZWRXb3JrZXJNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXJlZFdvcmtlck1hbmFn
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NjdBNjhENDI3NUVBOThCMDA5
QjMxQzUgLyogU2hhcmVkV29ya2VyVGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJlZFdvcmtl
clRocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NjdBNjhENTI3NUVBOThD
MDA5QjMxQzUgLyogU2hhcmVkV29ya2VyU2NyaXB0TG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNo
YXJlZFdvcmtlclNjcmlwdExvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0
NjdBNjhENjI3NUVBOThDMDA5QjMxQzUgLyogU2hhcmVkV29ya2VyUHJveHkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2hhcmVkV29ya2VyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NDY3QTY4RDYyNzVFQTk4QzAwOUIzMUM1IC8qIFNoYXJlZFdvcmtlclRocmVhZFByb3h5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNoYXJlZFdvcmtlclRocmVhZFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQ2ODJEMUZGMUY3OTc4MjMwMEM4NjNEQiAvKiBTdG9yZWRDcmVkZW50aWFs
c1BvbGljeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yZWRDcmVkZW50
aWFsc1BvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NjgzNDREQzFFRERG
QTVGMDBCNzc5NUIgLyogRE9NUmVjdExpc3QuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IERPTVJlY3RMaXN0LmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDY4MzQ0REQxRURERkE1RjAwQjc3OTVCIC8qIERP
TVJlY3RMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTVJlY3RMaXN0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNTUyLDkgKzIxNTUyLDIxIEBACiAJCQlwYXRoID0g
IndlYi1sb2NrcyI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk0NjQ3Q0U2
MTI3QUFFMURBMDA5Q0JENDggLyogY29udGV4dCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOwor
CQkJY2hpbGRyZW4gPSAoCisJCQkJNDY3QTY4RDAyNzVFQTk4OTAwOUIzMUM1IC8qIFNoYXJlZFdv
cmtlclRocmVhZC5jcHAgKi8sCisJCQkJNDY3QTY4RDQyNzVFQTk4QjAwOUIzMUM1IC8qIFNoYXJl
ZFdvcmtlclRocmVhZC5oICovLAorCQkJCTQ2N0E2OENGMjc1RUE5ODkwMDlCMzFDNSAvKiBTaGFy
ZWRXb3JrZXJUaHJlYWRQcm94eS5jcHAgKi8sCisJCQkJNDY3QTY4RDYyNzVFQTk4QzAwOUIzMUM1
IC8qIFNoYXJlZFdvcmtlclRocmVhZFByb3h5LmggKi8sCisJCQkpOworCQkJcGF0aCA9IGNvbnRl
eHQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk0NjY5NENERTI3NTk0NDZE
MDBFMzE1MEUgLyogc2hhcmVkICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQk0NjQ3Q0U2MTI3QUFFMURBMDA5Q0JENDggLyogY29udGV4dCAqLywKIAkJCQk0
NjY5NENFMzI3NTk0NDhEMDBFMzE1MEUgLyogU2hhcmVkV29ya2VyLmNwcCAqLywKIAkJCQk0NjY5
NENFMjI3NTk0NDhEMDBFMzE1MEUgLyogU2hhcmVkV29ya2VyLmggKi8sCiAJCQkJNDY2OTRDRTUy
NzU5NDQ4RTAwRTMxNTBFIC8qIFNoYXJlZFdvcmtlci5pZGwgKi8sCkBAIC0yMTU2MywxMiArMjE1
NzUsOCBAQAogCQkJCTQ2Njk0Q0UwMjc1OTQ0OEMwMEUzMTUwRSAvKiBTaGFyZWRXb3JrZXJHbG9i
YWxTY29wZS5pZGwgKi8sCiAJCQkJNDY3QTY4RDMyNzVFQTk4QjAwOUIzMUM1IC8qIFNoYXJlZFdv
cmtlck1hbmFnZXIuY3BwICovLAogCQkJCTQ2N0E2OEQyMjc1RUE5OEEwMDlCMzFDNSAvKiBTaGFy
ZWRXb3JrZXJNYW5hZ2VyLmggKi8sCi0JCQkJNDY3QTY4Q0YyNzVFQTk4OTAwOUIzMUM1IC8qIFNo
YXJlZFdvcmtlclByb3h5LmNwcCAqLywKLQkJCQk0NjdBNjhENjI3NUVBOThDMDA5QjMxQzUgLyog
U2hhcmVkV29ya2VyUHJveHkuaCAqLywKIAkJCQk0NjdBNjhEMTI3NUVBOThBMDA5QjMxQzUgLyog
U2hhcmVkV29ya2VyU2NyaXB0TG9hZGVyLmNwcCAqLywKIAkJCQk0NjdBNjhENTI3NUVBOThDMDA5
QjMxQzUgLyogU2hhcmVkV29ya2VyU2NyaXB0TG9hZGVyLmggKi8sCi0JCQkJNDY3QTY4RDAyNzVF
QTk4OTAwOUIzMUM1IC8qIFNoYXJlZFdvcmtlclRocmVhZC5jcHAgKi8sCi0JCQkJNDY3QTY4RDQy
NzVFQTk4QjAwOUIzMUM1IC8qIFNoYXJlZFdvcmtlclRocmVhZC5oICovLAogCQkJKTsKIAkJCXBh
dGggPSBzaGFyZWQ7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzcxNzksOSArMzcx
ODcsOSBAQAogCQkJCTkzMzA5RUEzMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDFEQzA0RkUyN0E4M0M5MzAwOENGOTY4IC8qIFNoYXJlZFZpZGVv
RnJhbWVJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NjdBNjhEQTI3NUVBOTlDMDA5QjMxQzUg
LyogU2hhcmVkV29ya2VyTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDY3QTY4RDkyNzVF
QTk5ODAwOUIzMUM1IC8qIFNoYXJlZFdvcmtlclByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0
NjdBNjhEODI3NUVBOTk1MDA5QjMxQzUgLyogU2hhcmVkV29ya2VyU2NyaXB0TG9hZGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0NjdBNjhENzI3NUVBOTkxMDA5QjMxQzUgLyogU2hhcmVkV29ya2Vy
VGhyZWFkLmggaW4gSGVhZGVycyAqLywKKwkJCQk0NjdBNjhEOTI3NUVBOTk4MDA5QjMxQzUgLyog
U2hhcmVkV29ya2VyVGhyZWFkUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDNERCMDI2Mjcz
MzlGRTAwMDdCMEFEMSAvKiBTaG91bGRMb2NhbGl6ZUF4aXNOYW1lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJREYxOUUyQUMyNDc3MkJDMTAwN0JEQUNCIC8qIFNob3VsZFJlbGF4VGhpcmRQYXJ0eUNv
b2tpZUJsb2NraW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzYyRThDMTIwQ0VGOUNCMDAyNDU4
ODYgLyogU2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkLmggaW4gSGVhZGVycyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2hhcmVkL1NoYXJlZFdvcmtlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL3NoYXJlZC9TaGFyZWRXb3JrZXIuY3BwCmluZGV4IDZhNTli
MmVmZTlhMTQwYzU5MGVjYzJjOGIyMGNkOTg5ODE4NGM1Y2YuLmZlOTRmZGQ4YTUxNTBjODYxMDlk
NGI5MjJhODk4MzZiNDVlYTQ1NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2hhcmVkL1NoYXJlZFdvcmtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zaGFy
ZWQvU2hhcmVkV29ya2VyLmNwcApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VQ
b3J0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTaGFyZWRXb3Jr
ZXJNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiU2hhcmVkV29ya2VyUHJveHkuaCIKKyNpbmNsdWRlICJT
aGFyZWRXb3JrZXJUaHJlYWRQcm94eS5oIgogI2luY2x1ZGUgIldvcmtlck9wdGlvbnMuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JZGVudGlmaWVyc0ZhY3RvcnkuaD4KICNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jSW5saW5lcy5oPgpAQCAtODAsNyArODAsNyBAQCBTaGFyZWRXb3JrZXI6OlNo
YXJlZFdvcmtlcihEb2N1bWVudCYgZG9jdW1lbnQsIFJlZjxNZXNzYWdlUG9ydD4mJiBwb3J0LCBK
U0M6OlJ1bgogICAgICwgbV9pZGVudGlmaWVyRm9ySW5zcGVjdG9yKCJTaGFyZWRXb3JrZXI6IiAr
IEluc3BlY3Rvcjo6SWRlbnRpZmllcnNGYWN0b3J5OjpjcmVhdGVJZGVudGlmaWVyKCkpCiAgICAg
LCBtX3J1bnRpbWVGbGFncyhydW50aW1lRmxhZ3MpCiAgICAgLCBtX2NyZWF0aW9uVGltZShNb25v
dG9uaWNUaW1lOjpub3coKSkKLSAgICAsIG1fcHJveHkoU2hhcmVkV29ya2VyUHJveHk6OmNyZWF0
ZSgqdGhpcykpCisgICAgLCBtX3Byb3h5KFNoYXJlZFdvcmtlclRocmVhZFByb3h5OjpjcmVhdGUo
KnRoaXMpKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NoYXJl
ZC9TaGFyZWRXb3JrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2hhcmVkL1NoYXJlZFdv
cmtlci5oCmluZGV4IDUzMjZlZTU0MmM4OGUzYjhmNTgyODA2MjgzNTE5OWYwMzU1NWExMjQuLmU1
NWIxY2Y1NTEzZDEwNWY3M2YxY2Q2MjkzMTVlMDY1N2UwMTliY2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvc2hhcmVkL1NoYXJlZFdvcmtlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvc2hhcmVkL1NoYXJlZFdvcmtlci5oCkBAIC0zMyw3ICszMyw3IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE1lc3NhZ2VQb3J0OwotY2xhc3MgU2hhcmVkV29ya2Vy
UHJveHk7CitjbGFzcyBTaGFyZWRXb3JrZXJUaHJlYWRQcm94eTsKIAogc3RydWN0IFdvcmtlck9w
dGlvbnM7CiAKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllckZvckluc3BlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllckZvckluc3Bl
Y3RvcjsgfQogICAgIE1vbm90b25pY1RpbWUgY3JlYXRpb25UaW1lKCkgY29uc3QgeyByZXR1cm4g
bV9jcmVhdGlvblRpbWU7IH0KIAotICAgIFNoYXJlZFdvcmtlclByb3h5JiBwcm94eSgpIHsgcmV0
dXJuIG1fcHJveHk7IH0KKyAgICBTaGFyZWRXb3JrZXJUaHJlYWRQcm94eSYgcHJveHkoKSB7IHJl
dHVybiBtX3Byb3h5OyB9CiAKICAgICB2b2lkIHNldElzTG9hZGluZyhib29sIGlzTG9hZGluZykg
eyBtX2lzTG9hZGluZyA9IGlzTG9hZGluZzsgfQogCkBAIC03NCw3ICs3NCw3IEBAIHByaXZhdGU6
CiAgICAgU3RyaW5nIG1faWRlbnRpZmllckZvckluc3BlY3RvcjsKICAgICBKU0M6OlJ1bnRpbWVG
bGFncyBtX3J1bnRpbWVGbGFnczsKICAgICBNb25vdG9uaWNUaW1lIG1fY3JlYXRpb25UaW1lOwot
ICAgIFNoYXJlZFdvcmtlclByb3h5JiBtX3Byb3h5OyAvLyBUaGUgcHJveHkgb3V0bGl2ZXMgdGhl
IHdvcmtlciB0byBwZXJmb3JtIHRocmVhZCBzaHV0ZG93bi4KKyAgICBTaGFyZWRXb3JrZXJUaHJl
YWRQcm94eSYgbV9wcm94eTsgLy8gVGhlIHByb3h5IG91dGxpdmVzIHRoZSB3b3JrZXIgdG8gcGVy
Zm9ybSB0aHJlYWQgc2h1dGRvd24uCiAgICAgYm9vbCBtX2lzTG9hZGluZyB7IGZhbHNlIH07CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NoYXJlZC9TaGFyZWRXb3Jr
ZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2hhcmVkL1NoYXJlZFdvcmtl
ck1hbmFnZXIuY3BwCmluZGV4IDAxMjZiYzRmZWQ4N2Q1NWI5M2I1MDNlMDMwNDc1NDQwOTA2MjE3
ZWEuLjdkNWU2OWNkNzc5NTNhNzJmNmE4ZmI2NzliY2NhMjU2ZDAyMDRmZTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2hhcmVkL1NoYXJlZFdvcmtlck1hbmFnZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2hhcmVkL1NoYXJlZFdvcmtlck1hbmFnZXIuY3Bw
CkBAIC0zMyw5ICszMyw5IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCiAjaW5j
bHVkZSAiU2hhcmVkV29ya2VyLmgiCiAjaW5jbHVkZSAiU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUu
aCIKLSNpbmNsdWRlICJTaGFyZWRXb3JrZXJQcm94eS5oIgogI2luY2x1ZGUgIlNoYXJlZFdvcmtl
clNjcmlwdExvYWRlci5oIgogI2luY2x1ZGUgIlNoYXJlZFdvcmtlclRocmVhZC5oIgorI2luY2x1
ZGUgIlNoYXJlZFdvcmtlclRocmVhZFByb3h5LmgiCiAjaW5jbHVkZSAiV29ya2VyUnVuTG9vcC5o
IgogI2luY2x1ZGUgIldvcmtlclNjcmlwdExvYWRlci5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zaGFyZWQvU2hh
cmVkV29ya2VyUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zaGFyZWQvU2hhcmVk
V29ya2VyUHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmUwNzUzZjg5
MWQxZWRlYjgwMGNmYzRiNzg0OTRjZTkzMzk2NjBiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2hhcmVkL1NoYXJl
ZFdvcmtlclByb3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzMyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNoYXJlZFdvcmtlclByb3h5Lmgi
Ci0KLSNpbmNsdWRlICJDYWNoZVN0b3JhZ2VQcm92aWRlci5oIgotI2luY2x1ZGUgIkVycm9yRXZl
bnQuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiTGliV2ViUlRDUHJvdmlk
ZXIuaCIKLSNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKLSNpbmNsdWRlICJNZXNzYWdlUG9ydC5o
IgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbFJlbW90ZUhhbmRs
ZXJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiU2hhcmVkV29ya2VyLmgiCi0jaW5jbHVkZSAiU2hh
cmVkV29ya2VyR2xvYmFsU2NvcGUuaCIKLSNpbmNsdWRlICJTaGFyZWRXb3JrZXJUaHJlYWQuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TaGFyZWRXb3JrZXJQcm94eTo6U2hhcmVkV29ya2Vy
UHJveHkoU2hhcmVkV29ya2VyJiBzaGFyZWRXb3JrZXIpCi0gICAgOiBtX3NoYXJlZFdvcmtlcihz
aGFyZWRXb3JrZXIpCi0gICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoc2hhcmVkV29ya2Vy
LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAsIG1faWRlbnRpZmllckZvckluc3BlY3Rv
cihzaGFyZWRXb3JrZXIuaWRlbnRpZmllckZvckluc3BlY3RvcigpKQotewotfQotCi12b2lkIFNo
YXJlZFdvcmtlclByb3h5OjpzdGFydFdvcmtlckdsb2JhbFNjb3BlKGNvbnN0IFVSTCYgc2NyaXB0
VVJMLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBib29sIGlz
T25saW5lLCBjb25zdCBTY3JpcHRCdWZmZXImIHNjcmlwdEJ1ZmZlciwgY29uc3QgQ29udGVudFNl
Y3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzJiBjb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25z
ZUhlYWRlcnMsIGJvb2wgc2hvdWxkQnlwYXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5
LCBjb25zdCBDcm9zc09yaWdpbkVtYmVkZGVyUG9saWN5JiBjcm9zc09yaWdpbkVtYmVkZGVyUG9s
aWN5LCBNb25vdG9uaWNUaW1lIHRpbWVPcmlnaW4sIFJlZmVycmVyUG9saWN5IHJlZmVycmVyUG9s
aWN5LCBXb3JrZXJUeXBlIHdvcmtlclR5cGUsIEZldGNoUmVxdWVzdENyZWRlbnRpYWxzIGNyZWRl
bnRpYWxzLCBKU0M6OlJ1bnRpbWVGbGFncyBydW50aW1lRmxhZ3MpCi17Ci0gICAgaWYgKG1fYXNr
ZWRUb1Rlcm1pbmF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBwYXJhbWV0ZXJzID0g
V29ya2VyUGFyYW1ldGVycyB7Ci0gICAgICAgIHNjcmlwdFVSTCwKLSAgICAgICAgbmFtZSwKLSAg
ICAgICAgbV9pZGVudGlmaWVyRm9ySW5zcGVjdG9yLAotICAgICAgICB1c2VyQWdlbnQsCi0gICAg
ICAgIGlzT25saW5lLAotICAgICAgICBjb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRl
cnMsCi0gICAgICAgIHNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSwK
LSAgICAgICAgY3Jvc3NPcmlnaW5FbWJlZGRlclBvbGljeSwKLSAgICAgICAgdGltZU9yaWdpbiwK
LSAgICAgICAgcmVmZXJyZXJQb2xpY3ksCi0gICAgICAgIHdvcmtlclR5cGUsCi0gICAgICAgIGNy
ZWRlbnRpYWxzLAotICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNldHRpbmdzVmFs
dWVzKCkKLSAgICB9OwotCi0gICAgaWYgKCFtX3dvcmtlclRocmVhZCkgewotICAgICAgICBtX3dv
cmtlclRocmVhZCA9IFNoYXJlZFdvcmtlclRocmVhZDo6Y3JlYXRlKHBhcmFtZXRlcnMsIHNjcmlw
dEJ1ZmZlciwgKnRoaXMsICp0aGlzLCAqdGhpcywgV29ya2VyVGhyZWFkU3RhcnRNb2RlOjpOb3Jt
YWwsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+dG9wT3JpZ2luKCksIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+aWRiQ29ubmVjdGlvblByb3h5KCksIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+c29ja2V0UHJvdmlkZXIoKSwgcnVudGltZUZsYWdzKTsKLSAgICAgICAgbV93b3JrZXJUaHJl
YWQtPnN0YXJ0KCk7Ci0gICAgfQotfQotCi12b2lkIFNoYXJlZFdvcmtlclByb3h5Ojp0ZXJtaW5h
dGVXb3JrZXJHbG9iYWxTY29wZSgpCi17Ci0gICAgaWYgKG1fYXNrZWRUb1Rlcm1pbmF0ZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9hc2tlZFRvVGVybWluYXRlID0gdHJ1ZTsKLSAgICBpZiAo
bV93b3JrZXJUaHJlYWQpCi0gICAgICAgIG1fd29ya2VyVGhyZWFkLT5zdG9wKG51bGxwdHIpOwot
fQotCi12b2lkIFNoYXJlZFdvcmtlclByb3h5Ojpwb3N0TWVzc2FnZVRvV29ya2VyR2xvYmFsU2Nv
cGUoTWVzc2FnZVdpdGhNZXNzYWdlUG9ydHMmJiBtZXNzYWdlKQotewotICAgIC8vIEZJWE1FOiBT
aGFyZWRXb3JrZXIgZG9lc24ndCBoYXZlIHBvc3RNZXNzYWdlLCBzbyB0aGlzIG1pZ2h0IG5vdCBi
ZSBuZWNlc3NhcnkuCi0gICAgcG9zdFRhc2tUb1dvcmtlckdsb2JhbFNjb3BlKFttZXNzYWdlID0g
V1RGTW92ZShtZXNzYWdlKV0oYXV0byYgc2NyaXB0Q29udGV4dCkgbXV0YWJsZSB7Ci0gICAgICAg
IGF1dG8mIGNvbnRleHQgPSBkb3duY2FzdDxTaGFyZWRXb3JrZXJHbG9iYWxTY29wZT4oc2NyaXB0
Q29udGV4dCk7Ci0gICAgICAgIGF1dG8gcG9ydHMgPSBNZXNzYWdlUG9ydDo6ZW50YW5nbGVQb3J0
cyhzY3JpcHRDb250ZXh0LCBXVEZNb3ZlKG1lc3NhZ2UudHJhbnNmZXJyZWRQb3J0cykpOwotICAg
ICAgICBjb250ZXh0LmRpc3BhdGNoRXZlbnQoTWVzc2FnZUV2ZW50OjpjcmVhdGUoV1RGTW92ZShw
b3J0cyksIG1lc3NhZ2UubWVzc2FnZS5yZWxlYXNlTm9uTnVsbCgpKSk7Ci0gICAgfSk7Ci19Ci0K
LXZvaWQgU2hhcmVkV29ya2VyUHJveHk6OnBvc3RUYXNrVG9Xb3JrZXJHbG9iYWxTY29wZShGdW5j
dGlvbjx2b2lkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKT4mJiB0YXNrKQotewotICAgIGlmICht
X2Fza2VkVG9UZXJtaW5hdGUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3dvcmtlclRocmVhZC0+
cnVuTG9vcCgpLnBvc3RUYXNrKFdURk1vdmUodGFzaykpOwotfQotCi1ib29sIFNoYXJlZFdvcmtl
clByb3h5OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAotewotICAgIHJldHVybiBtX2hhc1Bl
bmRpbmdBY3Rpdml0eSAmJiAhbV9hc2tlZFRvVGVybWluYXRlOwotfQotCi12b2lkIFNoYXJlZFdv
cmtlclByb3h5Ojp3b3JrZXJPYmplY3REZXN0cm95ZWQoKQotewotICAgIG1fc2hhcmVkV29ya2Vy
ID0gbnVsbHB0cjsKLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKFt0aGlz
XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKLSAgICAgICAgbV9tYXlCZURlc3Ryb3llZCA9
IHRydWU7Ci0gICAgICAgIGlmIChtX3dvcmtlclRocmVhZCkKLSAgICAgICAgICAgIHRlcm1pbmF0
ZVdvcmtlckdsb2JhbFNjb3BlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdvcmtlckds
b2JhbFNjb3BlRGVzdHJveWVkSW50ZXJuYWwoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBTaGFyZWRX
b3JrZXJQcm94eTo6bm90aWZ5TmV0d29ya1N0YXRlQ2hhbmdlKGJvb2wgaXNPbmxpbmUpCi17Ci0g
ICAgaWYgKG1fYXNrZWRUb1Rlcm1pbmF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFt
X3dvcmtlclRocmVhZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93b3JrZXJUaHJlYWQtPnJ1
bkxvb3AoKS5wb3N0VGFzayhbaXNPbmxpbmVdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0KSB7Ci0gICAgICAgIGF1dG8mIGdsb2JhbFNjb3BlID0gZG93bmNhc3Q8V29ya2VyR2xvYmFs
U2NvcGU+KGNvbnRleHQpOwotICAgICAgICBnbG9iYWxTY29wZS5zZXRJc09ubGluZShpc09ubGlu
ZSk7Ci0gICAgICAgIGdsb2JhbFNjb3BlLmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShpc09u
bGluZSA/IGV2ZW50TmFtZXMoKS5vbmxpbmVFdmVudCA6IGV2ZW50TmFtZXMoKS5vZmZsaW5lRXZl
bnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykpOwotICAg
IH0pOwotfQotCi12b2lkIFNoYXJlZFdvcmtlclByb3h5OjpzdXNwZW5kRm9yQmFja0ZvcndhcmRD
YWNoZSgpCi17Ci0KLX0KLQotdm9pZCBTaGFyZWRXb3JrZXJQcm94eTo6cmVzdW1lRm9yQmFja0Zv
cndhcmRDYWNoZSgpCi17Ci0KLX0KLQotdm9pZCBTaGFyZWRXb3JrZXJQcm94eTo6cG9zdEV4Y2Vw
dGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51
bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCi17Ci0gICAg
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhbdGhpcywgZXJyb3JNZXNzYWdlID0g
ZXJyb3JNZXNzYWdlLmlzb2xhdGVkQ29weSgpLCBzb3VyY2VVUkwgPSBzb3VyY2VVUkwuaXNvbGF0
ZWRDb3B5KCksIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcl0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmKSB7Ci0gICAgICAgIGlmICghbV9zaGFyZWRXb3JrZXIpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgLy8gV2UgZG9uJ3QgYm90aGVyIGNoZWNraW5nIHRoZSBhc2tlZFRvVGVybWlu
YXRlKCkgZmxhZyBoZXJlLCBiZWNhdXNlIGV4Y2VwdGlvbnMgc2hvdWxkICphbHdheXMqIGJlIHJl
cG9ydGVkIGV2ZW4gaWYgdGhlIHRocmVhZCBpcyB0ZXJtaW5hdGVkLgotICAgICAgICAvLyBUaGlz
IGlzIGludGVudGlvbmFsbHkgZGlmZmVyZW50IHRoYW4gdGhlIGJlaGF2aW9yIGluIE1lc3NhZ2VX
b3JrZXJUYXNrLCBiZWNhdXNlIHRlcm1pbmF0ZWQgd29ya2VycyBubyBsb25nZXIgZGVsaXZlciBt
ZXNzYWdlcyAoc2VjdGlvbiA0LjYgb2YgdGhlIFdlYldvcmtlciBzcGVjKSwgYnV0IHRoZXkgZG8g
cmVwb3J0IGV4Y2VwdGlvbnMuCi0gICAgICAgIEFjdGl2ZURPTU9iamVjdDo6cXVldWVUYXNrVG9E
aXNwYXRjaEV2ZW50KCptX3NoYXJlZFdvcmtlciwgVGFza1NvdXJjZTo6RE9NTWFuaXB1bGF0aW9u
LCBFcnJvckV2ZW50OjpjcmVhdGUoZXJyb3JNZXNzYWdlLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIs
IGNvbHVtbk51bWJlciwgeyB9KSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgU2hhcmVkV29ya2VyUHJv
eHk6Ondvcmtlckdsb2JhbFNjb3BlRGVzdHJveWVkKCkKLXsKLSAgICBtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPnBvc3RUYXNrKFt0aGlzXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKLSAg
ICAgICAgd29ya2VyR2xvYmFsU2NvcGVEZXN0cm95ZWRJbnRlcm5hbCgpOwotICAgIH0pOwotfQot
Ci12b2lkIFNoYXJlZFdvcmtlclByb3h5Ojpwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KE1lc3Nh
Z2VXaXRoTWVzc2FnZVBvcnRzJiYpCi17Ci0KLX0KLQotdm9pZCBTaGFyZWRXb3JrZXJQcm94eTo6
Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGJvb2wpCi17Ci19Ci0KLXZvaWQgU2hhcmVk
V29ya2VyUHJveHk6OnJlcG9ydFBlbmRpbmdBY3Rpdml0eShib29sIGhhc1BlbmRpbmdBY3Rpdml0
eSkKLXsKLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKFt0aGlzLCBoYXNQ
ZW5kaW5nQWN0aXZpdHldIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgewotICAgICAgICBtX2hh
c1BlbmRpbmdBY3Rpdml0eSA9IGhhc1BlbmRpbmdBY3Rpdml0eTsKLSAgICB9KTsKLX0KLQotUmVm
UHRyPENhY2hlU3RvcmFnZUNvbm5lY3Rpb24+IFNoYXJlZFdvcmtlclByb3h5OjpjcmVhdGVDYWNo
ZVN0b3JhZ2VDb25uZWN0aW9uKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCptX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpOwotICAgIHJldHVybiBkb2N1bWVudC5wYWdlKCktPmNhY2hlU3RvcmFnZVByb3ZpZGVy
KCkuY3JlYXRlQ2FjaGVTdG9yYWdlQ29ubmVjdGlvbigpOwotfQotCi1SZWZQdHI8UlRDRGF0YUNo
YW5uZWxSZW1vdGVIYW5kbGVyQ29ubmVjdGlvbj4gU2hhcmVkV29ya2VyUHJveHk6OmNyZWF0ZVJU
Q0RhdGFDaGFubmVsUmVtb3RlSGFuZGxlckNvbm5lY3Rpb24oKQotewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKm1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgaWYgKCFkb2N1bWVudC5wYWdlKCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBkb2N1bWVudC5wYWdlKCktPmxpYldlYlJU
Q1Byb3ZpZGVyKCkuY3JlYXRlUlRDRGF0YUNoYW5uZWxSZW1vdGVIYW5kbGVyQ29ubmVjdGlvbigp
OwotfQotCi12b2lkIFNoYXJlZFdvcmtlclByb3h5Ojpwb3N0VGFza1RvTG9hZGVyKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2smJiB0YXNrKQotewotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+cG9zdFRhc2soV1RGTW92ZSh0YXNrKSk7Ci19Ci0KLWJvb2wgU2hhcmVkV29ya2VyUHJv
eHk6OnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzayYmIHRhc2ssIGNvbnN0IFN0cmluZyYgbW9kZSkKLXsKLSAgICBp
ZiAobV9hc2tlZFRvVGVybWluYXRlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3dv
cmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrRm9yTW9kZShXVEZNb3ZlKHRhc2spLCBtb2Rl
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTaGFyZWRXb3JrZXJQcm94eTo6cG9zdE1l
c3NhZ2VUb0RlYnVnZ2VyKGNvbnN0IFN0cmluZyYpCi17Ci0KLX0KLQotdm9pZCBTaGFyZWRXb3Jr
ZXJQcm94eTo6c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRCeVdlYkluc3BlY3Rvcihib29sKQot
ewotCi19Ci0KLXZvaWQgU2hhcmVkV29ya2VyUHJveHk6Ondvcmtlckdsb2JhbFNjb3BlRGVzdHJv
eWVkSW50ZXJuYWwoKQotewotICAgIC8vIFRoaXMgaXMgYWx3YXlzIHRoZSBsYXN0IHRhc2sgdG8g
YmUgcGVyZm9ybWVkLCBzbyB0aGUgcHJveHkgaXMgbm90IG5lZWRlZCBmb3IgY29tbXVuaWNhdGlv
bgotICAgIC8vIGluIGVpdGhlciBzaWRlIGFueSBtb3JlLiBIb3dldmVyLCB0aGUgV29ya2VyIG9i
amVjdCBtYXkgc3RpbGwgZXhpc3QsIGFuZCBpdCBhc3N1bWVzIHRoYXQgdGhlIHByb3h5IGV4aXN0
cywgdG9vLgotICAgIG1fYXNrZWRUb1Rlcm1pbmF0ZSA9IHRydWU7Ci0gICAgbV93b3JrZXJUaHJl
YWQgPSBudWxscHRyOwotCi0gICAgLy8gVGhpcyBiYWxhbmNlcyB0aGUgb3JpZ2luYWwgcmVmIGlu
IGNvbnN0cnVjdGlvbi4KLSAgICBpZiAobV9tYXlCZURlc3Ryb3llZCkKLSAgICAgICAgZGVyZWYo
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9zaGFyZWQvU2hhcmVkV29ya2VyUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvc2hhcmVkL1NoYXJlZFdvcmtlclByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGRiN2I4NTA5ZGY1YThmNTMwMGM1NWQxNzgxY2JmYmFmZmMyN2NmYzYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9zaGFyZWQvU2hhcmVkV29ya2VyUHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDgxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIldvcmtlckRlYnVn
Z2VyUHJveHkuaCIKLSNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29wZVByb3h5LmgiCi0jaW5jbHVk
ZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKLSNpbmNsdWRlICJXb3JrZXJPYmplY3RQcm94eS5oIgot
I2luY2x1ZGUgIldvcmtlck9wdGlvbnMuaCIKLSNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNoYXJlZFdvcmtlcjsKLWNsYXNzIFNoYXJlZFdv
cmtlclRocmVhZDsKLQotY2xhc3MgU2hhcmVkV29ya2VyUHJveHkgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8U2hhcmVkV29ya2VyUHJveHk+LCBwdWJsaWMgV29ya2VyR2xvYmFsU2NvcGVQ
cm94eSwgcHVibGljIFdvcmtlck9iamVjdFByb3h5LCBwdWJsaWMgV29ya2VyTG9hZGVyUHJveHks
IHB1YmxpYyBXb3JrZXJEZWJ1Z2dlclByb3h5IHsKLXB1YmxpYzoKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmdzPiBzdGF0aWMgU2hhcmVkV29ya2VyUHJveHkmIGNyZWF0ZShBcmdzJiYuLi4g
YXJncykgeyByZXR1cm4gKm5ldyBTaGFyZWRXb3JrZXJQcm94eShzdGQ6OmZvcndhcmQ8QXJncz4o
YXJncykuLi4pOyB9Ci0KLSAgICBTaGFyZWRXb3JrZXJUaHJlYWQqIHRocmVhZCgpIHsgcmV0dXJu
IG1fd29ya2VyVGhyZWFkLmdldCgpOyB9Ci0KLSAgICB2b2lkIHN0YXJ0V29ya2VyR2xvYmFsU2Nv
cGUoY29uc3QgVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiB1c2VyQWdlbnQsIGJvb2wgaXNPbmxpbmUsIGNvbnN0IFNjcmlwdEJ1ZmZlciYgc291cmNlQ29k
ZSwgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzJiwgYm9vbCBzaG91
bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3ksIGNvbnN0IENyb3NzT3JpZ2lu
RW1iZWRkZXJQb2xpY3kmLCBNb25vdG9uaWNUaW1lIHRpbWVPcmlnaW4sIFJlZmVycmVyUG9saWN5
LCBXb3JrZXJUeXBlLCBGZXRjaFJlcXVlc3RDcmVkZW50aWFscywgSlNDOjpSdW50aW1lRmxhZ3Mp
IGZpbmFsOwotICAgIHZvaWQgdGVybWluYXRlV29ya2VyR2xvYmFsU2NvcGUoKSBmaW5hbDsKLSAg
ICB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJHbG9iYWxTY29wZShNZXNzYWdlV2l0aE1lc3NhZ2VQ
b3J0cyYmKSBmaW5hbDsKLSAgICB2b2lkIHBvc3RUYXNrVG9Xb3JrZXJHbG9iYWxTY29wZShGdW5j
dGlvbjx2b2lkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKT4mJikgZmluYWw7Ci0gICAgYm9vbCBo
YXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIHdvcmtlck9iamVjdERl
c3Ryb3llZCgpIGZpbmFsOwotICAgIHZvaWQgbm90aWZ5TmV0d29ya1N0YXRlQ2hhbmdlKGJvb2wg
aXNPbmxpbmUpIGZpbmFsOwotICAgIHZvaWQgc3VzcGVuZEZvckJhY2tGb3J3YXJkQ2FjaGUoKSBm
aW5hbDsKLSAgICB2b2lkIHJlc3VtZUZvckJhY2tGb3J3YXJkQ2FjaGUoKSBmaW5hbDsKLSAgICB2
b2lkIHBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNl
VVJMKSBmaW5hbDsKLSAgICB2b2lkIHdvcmtlckdsb2JhbFNjb3BlRGVzdHJveWVkKCkgZmluYWw7
Ci0gICAgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KE1lc3NhZ2VXaXRoTWVzc2FnZVBv
cnRzJiYpIGZpbmFsOwotICAgIHZvaWQgY29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGJv
b2wgaGFzUGVuZGluZ0FjdGl2aXR5KSBmaW5hbDsKLSAgICB2b2lkIHJlcG9ydFBlbmRpbmdBY3Rp
dml0eShib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkgZmluYWw7Ci0gICAgUmVmUHRyPENhY2hlU3Rv
cmFnZUNvbm5lY3Rpb24+IGNyZWF0ZUNhY2hlU3RvcmFnZUNvbm5lY3Rpb24oKSBmaW5hbDsKLSAg
ICBSZWZQdHI8UlRDRGF0YUNoYW5uZWxSZW1vdGVIYW5kbGVyQ29ubmVjdGlvbj4gY3JlYXRlUlRD
RGF0YUNoYW5uZWxSZW1vdGVIYW5kbGVyQ29ubmVjdGlvbigpIGZpbmFsOwotICAgIHZvaWQgcG9z
dFRhc2tUb0xvYWRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrJiYpIGZpbmFsOwotICAg
IGJvb2wgcG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrJiYsIGNvbnN0IFN0cmluZyYgbW9kZSkgZmluYWw7Ci0gICAg
dm9pZCBwb3N0TWVzc2FnZVRvRGVidWdnZXIoY29uc3QgU3RyaW5nJikgZmluYWw7Ci0gICAgdm9p
ZCBzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZEJ5V2ViSW5zcGVjdG9yKGJvb2wpIGZpbmFsOwot
Ci1wcml2YXRlOgotICAgIFNoYXJlZFdvcmtlclByb3h5KFNoYXJlZFdvcmtlciYpOwotCi0gICAg
dm9pZCB3b3JrZXJHbG9iYWxTY29wZURlc3Ryb3llZEludGVybmFsKCk7Ci0KLSAgICBXZWFrUHRy
PFNoYXJlZFdvcmtlcj4gbV9zaGFyZWRXb3JrZXI7Ci0gICAgUmVmUHRyPFNoYXJlZFdvcmtlclRo
cmVhZD4gbV93b3JrZXJUaHJlYWQ7Ci0gICAgY29uc3QgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLSAgICBjb25zdCBTdHJpbmcgbV9pZGVu
dGlmaWVyRm9ySW5zcGVjdG9yOwotICAgIGJvb2wgbV9hc2tlZFRvVGVybWluYXRlIHsgZmFsc2Ug
fTsKLSAgICBib29sIG1faGFzUGVuZGluZ0FjdGl2aXR5IHsgZmFsc2UgfTsKLSAgICBib29sIG1f
bWF5QmVEZXN0cm95ZWQgeyBmYWxzZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zaGFyZWQvU2hhcmVkV29ya2VyVGhy
ZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2hhcmVkL1NoYXJlZFdvcmtlclRocmVh
ZC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZDU1ODhmYmQ3OWJhMGRkOGNh
NzUzZTY4YTAzNTE0YTJjMzBmYTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zaGFyZWQvU2hhcmVkV29ya2VyVGhy
ZWFkLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2hhcmVkV29ya2VyVGhyZWFkLmgiCi0KLSNpbmNs
dWRlICJTaGFyZWRXb3JrZXJHbG9iYWxTY29wZS5oIgotI2luY2x1ZGUgIldvcmtlck9iamVjdFBy
b3h5LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU2hhcmVkV29ya2VyVGhyZWFkOjpTaGFy
ZWRXb3JrZXJUaHJlYWQoY29uc3QgV29ya2VyUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3Qg
U2NyaXB0QnVmZmVyJiBzb3VyY2VDb2RlLCBXb3JrZXJMb2FkZXJQcm94eSYgbG9hZGVyUHJveHks
IFdvcmtlckRlYnVnZ2VyUHJveHkmIGRlYnVnZ2VyUHJveHksIFdvcmtlck9iamVjdFByb3h5JiBv
YmplY3RQcm94eSwgV29ya2VyVGhyZWFkU3RhcnRNb2RlIHN0YXJ0TW9kZSwgY29uc3QgU2VjdXJp
dHlPcmlnaW4mIHRvcE9yaWdpbiwgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uUHJveHkqIGNvbm5l
Y3Rpb25Qcm94eSwgU29ja2V0UHJvdmlkZXIqIHNvY2tldFByb3ZpZGVyLCBKU0M6OlJ1bnRpbWVG
bGFncyBydW50aW1lRmxhZ3MpCi0gICAgOiBXb3JrZXJUaHJlYWQocGFyYW1ldGVycywgc291cmNl
Q29kZSwgbG9hZGVyUHJveHksIGRlYnVnZ2VyUHJveHksIG9iamVjdFByb3h5LCBzdGFydE1vZGUs
IHRvcE9yaWdpbiwgY29ubmVjdGlvblByb3h5LCBzb2NrZXRQcm92aWRlciwgcnVudGltZUZsYWdz
KQotICAgICwgbV9uYW1lKHBhcmFtZXRlcnMubmFtZS5pc29sYXRlZENvcHkoKSkKLXsKLX0KLQot
UmVmPFdvcmtlckdsb2JhbFNjb3BlPiBTaGFyZWRXb3JrZXJUaHJlYWQ6OmNyZWF0ZVdvcmtlckds
b2JhbFNjb3BlKGNvbnN0IFdvcmtlclBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIFJlZjxTZWN1cml0
eU9yaWdpbj4mJiBvcmlnaW4sIFJlZjxTZWN1cml0eU9yaWdpbj4mJiB0b3BPcmlnaW4pCi17Ci0g
ICAgcmV0dXJuIFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlOjpjcmVhdGUoc3RkOjpleGNoYW5nZSht
X25hbWUsIHsgfSksIHBhcmFtZXRlcnMsIFdURk1vdmUob3JpZ2luKSwgKnRoaXMsIFdURk1vdmUo
dG9wT3JpZ2luKSwgaWRiQ29ubmVjdGlvblByb3h5KCksIHNvY2tldFByb3ZpZGVyKCkpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL3NoYXJlZC9TaGFyZWRXb3JrZXJUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2hhcmVkL1NoYXJlZFdvcmtlclRocmVhZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAyZjA1NmY5ZDU5YmJkZjgzYzM1ZDJjN2FjMDM2OGZmNzFiY2U5Y2Q0Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2hhcmVkL1NoYXJlZFdvcmtlclRocmVhZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgV29ya2VyT2JqZWN0UHJveHk7Ci0KLWNs
YXNzIFNoYXJlZFdvcmtlclRocmVhZCA6IHB1YmxpYyBXb3JrZXJUaHJlYWQgewotcHVibGljOgot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+IHN0YXRpYyBSZWY8U2hhcmVkV29ya2VyVGhy
ZWFkPiBjcmVhdGUoQXJncyYmLi4uIGFyZ3MpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVk
V29ya2VyVGhyZWFkKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpOyB9Ci1wcml2YXRlOgot
ICAgIFNoYXJlZFdvcmtlclRocmVhZChjb25zdCBXb3JrZXJQYXJhbWV0ZXJzJiwgY29uc3QgU2Ny
aXB0QnVmZmVyJiBzb3VyY2VDb2RlLCBXb3JrZXJMb2FkZXJQcm94eSYsIFdvcmtlckRlYnVnZ2Vy
UHJveHkmLCBXb3JrZXJPYmplY3RQcm94eSYsIFdvcmtlclRocmVhZFN0YXJ0TW9kZSwgY29uc3Qg
U2VjdXJpdHlPcmlnaW4mIHRvcE9yaWdpbiwgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uUHJveHkq
LCBTb2NrZXRQcm92aWRlciosIEpTQzo6UnVudGltZUZsYWdzKTsKLQotICAgIFJlZjxXb3JrZXJH
bG9iYWxTY29wZT4gY3JlYXRlV29ya2VyR2xvYmFsU2NvcGUoY29uc3QgV29ya2VyUGFyYW1ldGVy
cyYsIFJlZjxTZWN1cml0eU9yaWdpbj4mJiwgUmVmPFNlY3VyaXR5T3JpZ2luPiYmIHRvcE9yaWdp
bikgZmluYWw7Ci0gICAgQVNDSUlMaXRlcmFsIHRocmVhZE5hbWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAiV2ViQ29yZTogU2hhcmVkV29ya2VyIl9zOyB9Ci0KLSAgICBTdHJpbmcgbV9uYW1lOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9zaGFyZWQvY29udGV4dC9TaGFyZWRXb3JrZXJUaHJlYWQuY3BwIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9zaGFyZWQvY29udGV4dC9TaGFyZWRXb3JrZXJUaHJlYWQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjllZDU1ODhmYmQ3OWJhMGRkOGNhNzUzZTY4YTAzNTE0YTJjMzBmYTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NoYXJlZC9jb250ZXh0L1NoYXJlZFdv
cmtlclRocmVhZC5jcHAKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTaGFyZWRXb3JrZXJUaHJlYWQuaCIKKworI2luY2x1ZGUgIlNo
YXJlZFdvcmtlckdsb2JhbFNjb3BlLmgiCisjaW5jbHVkZSAiV29ya2VyT2JqZWN0UHJveHkuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTaGFyZWRXb3JrZXJUaHJlYWQ6OlNoYXJlZFdvcmtl
clRocmVhZChjb25zdCBXb3JrZXJQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBTY3JpcHRC
dWZmZXImIHNvdXJjZUNvZGUsIFdvcmtlckxvYWRlclByb3h5JiBsb2FkZXJQcm94eSwgV29ya2Vy
RGVidWdnZXJQcm94eSYgZGVidWdnZXJQcm94eSwgV29ya2VyT2JqZWN0UHJveHkmIG9iamVjdFBy
b3h5LCBXb3JrZXJUaHJlYWRTdGFydE1vZGUgc3RhcnRNb2RlLCBjb25zdCBTZWN1cml0eU9yaWdp
biYgdG9wT3JpZ2luLCBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Qcm94eSogY29ubmVjdGlvblBy
b3h5LCBTb2NrZXRQcm92aWRlciogc29ja2V0UHJvdmlkZXIsIEpTQzo6UnVudGltZUZsYWdzIHJ1
bnRpbWVGbGFncykKKyAgICA6IFdvcmtlclRocmVhZChwYXJhbWV0ZXJzLCBzb3VyY2VDb2RlLCBs
b2FkZXJQcm94eSwgZGVidWdnZXJQcm94eSwgb2JqZWN0UHJveHksIHN0YXJ0TW9kZSwgdG9wT3Jp
Z2luLCBjb25uZWN0aW9uUHJveHksIHNvY2tldFByb3ZpZGVyLCBydW50aW1lRmxhZ3MpCisgICAg
LCBtX25hbWUocGFyYW1ldGVycy5uYW1lLmlzb2xhdGVkQ29weSgpKQoreworfQorCitSZWY8V29y
a2VyR2xvYmFsU2NvcGU+IFNoYXJlZFdvcmtlclRocmVhZDo6Y3JlYXRlV29ya2VyR2xvYmFsU2Nv
cGUoY29uc3QgV29ya2VyUGFyYW1ldGVycyYgcGFyYW1ldGVycywgUmVmPFNlY3VyaXR5T3JpZ2lu
PiYmIG9yaWdpbiwgUmVmPFNlY3VyaXR5T3JpZ2luPiYmIHRvcE9yaWdpbikKK3sKKyAgICByZXR1
cm4gU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6OmNyZWF0ZShzdGQ6OmV4Y2hhbmdlKG1fbmFtZSwg
eyB9KSwgcGFyYW1ldGVycywgV1RGTW92ZShvcmlnaW4pLCAqdGhpcywgV1RGTW92ZSh0b3BPcmln
aW4pLCBpZGJDb25uZWN0aW9uUHJveHkoKSwgc29ja2V0UHJvdmlkZXIoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2hh
cmVkL2NvbnRleHQvU2hhcmVkV29ya2VyVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L3NoYXJlZC9jb250ZXh0L1NoYXJlZFdvcmtlclRocmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmMDU2Zjlk
NTliYmRmODNjMzVkMmM3YWMwMzY4ZmY3MWJjZTljZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL3NoYXJlZC9jb250ZXh0L1NoYXJlZFdvcmtlclRocmVhZC5oCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldv
cmtlclRocmVhZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdvcmtlck9iamVj
dFByb3h5OworCitjbGFzcyBTaGFyZWRXb3JrZXJUaHJlYWQgOiBwdWJsaWMgV29ya2VyVGhyZWFk
IHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPiBzdGF0aWMgUmVmPFNo
YXJlZFdvcmtlclRocmVhZD4gY3JlYXRlKEFyZ3MmJi4uLiBhcmdzKSB7IHJldHVybiBhZG9wdFJl
ZigqbmV3IFNoYXJlZFdvcmtlclRocmVhZChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKTsg
fQorcHJpdmF0ZToKKyAgICBTaGFyZWRXb3JrZXJUaHJlYWQoY29uc3QgV29ya2VyUGFyYW1ldGVy
cyYsIGNvbnN0IFNjcmlwdEJ1ZmZlciYgc291cmNlQ29kZSwgV29ya2VyTG9hZGVyUHJveHkmLCBX
b3JrZXJEZWJ1Z2dlclByb3h5JiwgV29ya2VyT2JqZWN0UHJveHkmLCBXb3JrZXJUaHJlYWRTdGFy
dE1vZGUsIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiB0b3BPcmlnaW4sIElEQkNsaWVudDo6SURCQ29u
bmVjdGlvblByb3h5KiwgU29ja2V0UHJvdmlkZXIqLCBKU0M6OlJ1bnRpbWVGbGFncyk7CisKKyAg
ICBSZWY8V29ya2VyR2xvYmFsU2NvcGU+IGNyZWF0ZVdvcmtlckdsb2JhbFNjb3BlKGNvbnN0IFdv
cmtlclBhcmFtZXRlcnMmLCBSZWY8U2VjdXJpdHlPcmlnaW4+JiYsIFJlZjxTZWN1cml0eU9yaWdp
bj4mJiB0b3BPcmlnaW4pIGZpbmFsOworICAgIEFTQ0lJTGl0ZXJhbCB0aHJlYWROYW1lKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gIldlYkNvcmU6IFNoYXJlZFdvcmtlciJfczsgfQorCisgICAgU3Ry
aW5nIG1fbmFtZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvc2hhcmVkL2NvbnRleHQvU2hhcmVkV29ya2VyVGhyZWFkUHJv
eHkuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zaGFyZWQvY29udGV4dC9TaGFyZWRXb3Jr
ZXJUaHJlYWRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTMwYWQ4YjA1ZDZiNjA2N2U5OThiNDQ5MjVj
NjY2M2IxZmM5Yzc0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2hhcmVkL2NvbnRleHQvU2hhcmVkV29ya2VyVGhyZWFkUHJveHkuY3BwCkBAIC0wLDAgKzEsMjMz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXJlZFdv
cmtlclRocmVhZFByb3h5LmgiCisKKyNpbmNsdWRlICJDYWNoZVN0b3JhZ2VQcm92aWRlci5oIgor
I2luY2x1ZGUgIkVycm9yRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVk
ZSAiTGliV2ViUlRDUHJvdmlkZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKKyNpbmNs
dWRlICJNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSVENEYXRh
Q2hhbm5lbFJlbW90ZUhhbmRsZXJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiU2hhcmVkV29ya2Vy
LmgiCisjaW5jbHVkZSAiU2hhcmVkV29ya2VyR2xvYmFsU2NvcGUuaCIKKyNpbmNsdWRlICJTaGFy
ZWRXb3JrZXJUaHJlYWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTaGFyZWRXb3JrZXJU
aHJlYWRQcm94eTo6U2hhcmVkV29ya2VyVGhyZWFkUHJveHkoU2hhcmVkV29ya2VyJiBzaGFyZWRX
b3JrZXIpCisgICAgOiBtX3NoYXJlZFdvcmtlcihzaGFyZWRXb3JrZXIpCisgICAgLCBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQoc2hhcmVkV29ya2VyLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkK
KyAgICAsIG1faWRlbnRpZmllckZvckluc3BlY3RvcihzaGFyZWRXb3JrZXIuaWRlbnRpZmllckZv
ckluc3BlY3RvcigpKQoreworfQorCit2b2lkIFNoYXJlZFdvcmtlclRocmVhZFByb3h5OjpzdGFy
dFdvcmtlckdsb2JhbFNjb3BlKGNvbnN0IFVSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBib29sIGlzT25saW5lLCBjb25zdCBTY3JpcHRC
dWZmZXImIHNjcmlwdEJ1ZmZlciwgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VI
ZWFkZXJzJiBjb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMsIGJvb2wgc2hvdWxk
QnlwYXNzTWFpbldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5LCBjb25zdCBDcm9zc09yaWdpbkVt
YmVkZGVyUG9saWN5JiBjcm9zc09yaWdpbkVtYmVkZGVyUG9saWN5LCBNb25vdG9uaWNUaW1lIHRp
bWVPcmlnaW4sIFJlZmVycmVyUG9saWN5IHJlZmVycmVyUG9saWN5LCBXb3JrZXJUeXBlIHdvcmtl
clR5cGUsIEZldGNoUmVxdWVzdENyZWRlbnRpYWxzIGNyZWRlbnRpYWxzLCBKU0M6OlJ1bnRpbWVG
bGFncyBydW50aW1lRmxhZ3MpCit7CisgICAgaWYgKG1fYXNrZWRUb1Rlcm1pbmF0ZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYXV0byBwYXJhbWV0ZXJzID0gV29ya2VyUGFyYW1ldGVycyB7Cisg
ICAgICAgIHNjcmlwdFVSTCwKKyAgICAgICAgbmFtZSwKKyAgICAgICAgbV9pZGVudGlmaWVyRm9y
SW5zcGVjdG9yLAorICAgICAgICB1c2VyQWdlbnQsCisgICAgICAgIGlzT25saW5lLAorICAgICAg
ICBjb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMsCisgICAgICAgIHNob3VsZEJ5
cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeSwKKyAgICAgICAgY3Jvc3NPcmlnaW5F
bWJlZGRlclBvbGljeSwKKyAgICAgICAgdGltZU9yaWdpbiwKKyAgICAgICAgcmVmZXJyZXJQb2xp
Y3ksCisgICAgICAgIHdvcmtlclR5cGUsCisgICAgICAgIGNyZWRlbnRpYWxzLAorICAgICAgICBt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNldHRpbmdzVmFsdWVzKCkKKyAgICB9OworCisgICAg
aWYgKCFtX3dvcmtlclRocmVhZCkgeworICAgICAgICBtX3dvcmtlclRocmVhZCA9IFNoYXJlZFdv
cmtlclRocmVhZDo6Y3JlYXRlKHBhcmFtZXRlcnMsIHNjcmlwdEJ1ZmZlciwgKnRoaXMsICp0aGlz
LCAqdGhpcywgV29ya2VyVGhyZWFkU3RhcnRNb2RlOjpOb3JtYWwsIG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+dG9wT3JpZ2luKCksIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aWRiQ29ubmVj
dGlvblByb3h5KCksIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c29ja2V0UHJvdmlkZXIoKSwg
cnVudGltZUZsYWdzKTsKKyAgICAgICAgbV93b3JrZXJUaHJlYWQtPnN0YXJ0KCk7CisgICAgfQor
fQorCit2b2lkIFNoYXJlZFdvcmtlclRocmVhZFByb3h5Ojp0ZXJtaW5hdGVXb3JrZXJHbG9iYWxT
Y29wZSgpCit7CisgICAgaWYgKG1fYXNrZWRUb1Rlcm1pbmF0ZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9hc2tlZFRvVGVybWluYXRlID0gdHJ1ZTsKKyAgICBpZiAobV93b3JrZXJUaHJlYWQp
CisgICAgICAgIG1fd29ya2VyVGhyZWFkLT5zdG9wKG51bGxwdHIpOworfQorCit2b2lkIFNoYXJl
ZFdvcmtlclRocmVhZFByb3h5Ojpwb3N0TWVzc2FnZVRvV29ya2VyR2xvYmFsU2NvcGUoTWVzc2Fn
ZVdpdGhNZXNzYWdlUG9ydHMmJiBtZXNzYWdlKQoreworICAgIC8vIEZJWE1FOiBTaGFyZWRXb3Jr
ZXIgZG9lc24ndCBoYXZlIHBvc3RNZXNzYWdlLCBzbyB0aGlzIG1pZ2h0IG5vdCBiZSBuZWNlc3Nh
cnkuCisgICAgcG9zdFRhc2tUb1dvcmtlckdsb2JhbFNjb3BlKFttZXNzYWdlID0gV1RGTW92ZSht
ZXNzYWdlKV0oYXV0byYgc2NyaXB0Q29udGV4dCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8mIGNv
bnRleHQgPSBkb3duY2FzdDxTaGFyZWRXb3JrZXJHbG9iYWxTY29wZT4oc2NyaXB0Q29udGV4dCk7
CisgICAgICAgIGF1dG8gcG9ydHMgPSBNZXNzYWdlUG9ydDo6ZW50YW5nbGVQb3J0cyhzY3JpcHRD
b250ZXh0LCBXVEZNb3ZlKG1lc3NhZ2UudHJhbnNmZXJyZWRQb3J0cykpOworICAgICAgICBjb250
ZXh0LmRpc3BhdGNoRXZlbnQoTWVzc2FnZUV2ZW50OjpjcmVhdGUoV1RGTW92ZShwb3J0cyksIG1l
c3NhZ2UubWVzc2FnZS5yZWxlYXNlTm9uTnVsbCgpKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgU2hh
cmVkV29ya2VyVGhyZWFkUHJveHk6OnBvc3RUYXNrVG9Xb3JrZXJHbG9iYWxTY29wZShGdW5jdGlv
bjx2b2lkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKT4mJiB0YXNrKQoreworICAgIGlmIChtX2Fz
a2VkVG9UZXJtaW5hdGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3dvcmtlclRocmVhZC0+cnVu
TG9vcCgpLnBvc3RUYXNrKFdURk1vdmUodGFzaykpOworfQorCitib29sIFNoYXJlZFdvcmtlclRo
cmVhZFByb3h5OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX2hh
c1BlbmRpbmdBY3Rpdml0eSAmJiAhbV9hc2tlZFRvVGVybWluYXRlOworfQorCit2b2lkIFNoYXJl
ZFdvcmtlclRocmVhZFByb3h5Ojp3b3JrZXJPYmplY3REZXN0cm95ZWQoKQoreworICAgIG1fc2hh
cmVkV29ya2VyID0gbnVsbHB0cjsKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RU
YXNrKFt0aGlzXSAoYXV0byYpIHsKKyAgICAgICAgbV9tYXlCZURlc3Ryb3llZCA9IHRydWU7Cisg
ICAgICAgIGlmIChtX3dvcmtlclRocmVhZCkKKyAgICAgICAgICAgIHRlcm1pbmF0ZVdvcmtlckds
b2JhbFNjb3BlKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdvcmtlckdsb2JhbFNjb3Bl
RGVzdHJveWVkSW50ZXJuYWwoKTsKKyAgICB9KTsKK30KKwordm9pZCBTaGFyZWRXb3JrZXJUaHJl
YWRQcm94eTo6bm90aWZ5TmV0d29ya1N0YXRlQ2hhbmdlKGJvb2wgaXNPbmxpbmUpCit7CisgICAg
aWYgKG1fYXNrZWRUb1Rlcm1pbmF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3dv
cmtlclRocmVhZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV93b3JrZXJUaHJlYWQtPnJ1bkxv
b3AoKS5wb3N0VGFzayhbaXNPbmxpbmVdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
KSB7CisgICAgICAgIGF1dG8mIGdsb2JhbFNjb3BlID0gZG93bmNhc3Q8V29ya2VyR2xvYmFsU2Nv
cGU+KGNvbnRleHQpOworICAgICAgICBnbG9iYWxTY29wZS5zZXRJc09ubGluZShpc09ubGluZSk7
CisgICAgICAgIGdsb2JhbFNjb3BlLmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShpc09ubGlu
ZSA/IGV2ZW50TmFtZXMoKS5vbmxpbmVFdmVudCA6IGV2ZW50TmFtZXMoKS5vZmZsaW5lRXZlbnQs
IEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObykpOworICAgIH0p
OworfQorCit2b2lkIFNoYXJlZFdvcmtlclRocmVhZFByb3h5OjpzdXNwZW5kRm9yQmFja0Zvcndh
cmRDYWNoZSgpCit7CisKK30KKwordm9pZCBTaGFyZWRXb3JrZXJUaHJlYWRQcm94eTo6cmVzdW1l
Rm9yQmFja0ZvcndhcmRDYWNoZSgpCit7CisKK30KKwordm9pZCBTaGFyZWRXb3JrZXJUaHJlYWRQ
cm94eTo6cG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNz
YWdlLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwpCit7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhbdGhpcywg
ZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlLmlzb2xhdGVkQ29weSgpLCBzb3VyY2VVUkwgPSBz
b3VyY2VVUkwuaXNvbGF0ZWRDb3B5KCksIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcl0gKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmKSB7CisgICAgICAgIGlmICghbV9zaGFyZWRXb3JrZXIpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gV2UgZG9uJ3QgYm90aGVyIGNoZWNraW5nIHRo
ZSBhc2tlZFRvVGVybWluYXRlKCkgZmxhZyBoZXJlLCBiZWNhdXNlIGV4Y2VwdGlvbnMgc2hvdWxk
ICphbHdheXMqIGJlIHJlcG9ydGVkIGV2ZW4gaWYgdGhlIHRocmVhZCBpcyB0ZXJtaW5hdGVkLgor
ICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgZGlmZmVyZW50IHRoYW4gdGhlIGJlaGF2
aW9yIGluIE1lc3NhZ2VXb3JrZXJUYXNrLCBiZWNhdXNlIHRlcm1pbmF0ZWQgd29ya2VycyBubyBs
b25nZXIgZGVsaXZlciBtZXNzYWdlcyAoc2VjdGlvbiA0LjYgb2YgdGhlIFdlYldvcmtlciBzcGVj
KSwgYnV0IHRoZXkgZG8gcmVwb3J0IGV4Y2VwdGlvbnMuCisgICAgICAgIEFjdGl2ZURPTU9iamVj
dDo6cXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50KCptX3NoYXJlZFdvcmtlciwgVGFza1NvdXJjZTo6
RE9NTWFuaXB1bGF0aW9uLCBFcnJvckV2ZW50OjpjcmVhdGUoZXJyb3JNZXNzYWdlLCBzb3VyY2VV
UkwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgeyB9KSk7CisgICAgfSk7Cit9CisKK3ZvaWQg
U2hhcmVkV29ya2VyVGhyZWFkUHJveHk6Ondvcmtlckdsb2JhbFNjb3BlRGVzdHJveWVkKCkKK3sK
KyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKFt0aGlzXSAoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYpIHsKKyAgICAgICAgd29ya2VyR2xvYmFsU2NvcGVEZXN0cm95ZWRJbnRl
cm5hbCgpOworICAgIH0pOworfQorCit2b2lkIFNoYXJlZFdvcmtlclRocmVhZFByb3h5Ojpwb3N0
TWVzc2FnZVRvV29ya2VyT2JqZWN0KE1lc3NhZ2VXaXRoTWVzc2FnZVBvcnRzJiYpCit7CisKK30K
Kwordm9pZCBTaGFyZWRXb3JrZXJUaHJlYWRQcm94eTo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2Vy
T2JqZWN0KGJvb2wpCit7Cit9CisKK3ZvaWQgU2hhcmVkV29ya2VyVGhyZWFkUHJveHk6OnJlcG9y
dFBlbmRpbmdBY3Rpdml0eShib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkKK3sKKyAgICBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKFt0aGlzLCBoYXNQZW5kaW5nQWN0aXZpdHldIChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JikgeworICAgICAgICBtX2hhc1BlbmRpbmdBY3Rpdml0eSA9
IGhhc1BlbmRpbmdBY3Rpdml0eTsKKyAgICB9KTsKK30KKworUmVmUHRyPENhY2hlU3RvcmFnZUNv
bm5lY3Rpb24+IFNoYXJlZFdvcmtlclRocmVhZFByb3h5OjpjcmVhdGVDYWNoZVN0b3JhZ2VDb25u
ZWN0aW9uKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCptX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAg
IHJldHVybiBkb2N1bWVudC5wYWdlKCktPmNhY2hlU3RvcmFnZVByb3ZpZGVyKCkuY3JlYXRlQ2Fj
aGVTdG9yYWdlQ29ubmVjdGlvbigpOworfQorCitSZWZQdHI8UlRDRGF0YUNoYW5uZWxSZW1vdGVI
YW5kbGVyQ29ubmVjdGlvbj4gU2hhcmVkV29ya2VyVGhyZWFkUHJveHk6OmNyZWF0ZVJUQ0RhdGFD
aGFubmVsUmVtb3RlSGFuZGxlckNvbm5lY3Rpb24oKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKm1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCk7CisgICAgaWYgKCFkb2N1bWVudC5wYWdlKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiBkb2N1bWVudC5wYWdlKCktPmxpYldlYlJUQ1Byb3Zp
ZGVyKCkuY3JlYXRlUlRDRGF0YUNoYW5uZWxSZW1vdGVIYW5kbGVyQ29ubmVjdGlvbigpOworfQor
Cit2b2lkIFNoYXJlZFdvcmtlclRocmVhZFByb3h5Ojpwb3N0VGFza1RvTG9hZGVyKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2smJiB0YXNrKQoreworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+cG9zdFRhc2soV1RGTW92ZSh0YXNrKSk7Cit9CisKK2Jvb2wgU2hhcmVkV29ya2VyVGhy
ZWFkUHJveHk6OnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayYmIHRhc2ssIGNvbnN0IFN0cmluZyYgbW9kZSkKK3sK
KyAgICBpZiAobV9hc2tlZFRvVGVybWluYXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrRm9yTW9kZShXVEZNb3ZlKHRhc2sp
LCBtb2RlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTaGFyZWRXb3JrZXJUaHJlYWRQ
cm94eTo6cG9zdE1lc3NhZ2VUb0RlYnVnZ2VyKGNvbnN0IFN0cmluZyYpCit7CisKK30KKwordm9p
ZCBTaGFyZWRXb3JrZXJUaHJlYWRQcm94eTo6c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRCeVdl
Ykluc3BlY3Rvcihib29sKQoreworCit9CisKK3ZvaWQgU2hhcmVkV29ya2VyVGhyZWFkUHJveHk6
Ondvcmtlckdsb2JhbFNjb3BlRGVzdHJveWVkSW50ZXJuYWwoKQoreworICAgIC8vIFRoaXMgaXMg
YWx3YXlzIHRoZSBsYXN0IHRhc2sgdG8gYmUgcGVyZm9ybWVkLCBzbyB0aGUgcHJveHkgaXMgbm90
IG5lZWRlZCBmb3IgY29tbXVuaWNhdGlvbgorICAgIC8vIGluIGVpdGhlciBzaWRlIGFueSBtb3Jl
LiBIb3dldmVyLCB0aGUgV29ya2VyIG9iamVjdCBtYXkgc3RpbGwgZXhpc3QsIGFuZCBpdCBhc3N1
bWVzIHRoYXQgdGhlIHByb3h5IGV4aXN0cywgdG9vLgorICAgIG1fYXNrZWRUb1Rlcm1pbmF0ZSA9
IHRydWU7CisgICAgbV93b3JrZXJUaHJlYWQgPSBudWxscHRyOworCisgICAgLy8gVGhpcyBiYWxh
bmNlcyB0aGUgb3JpZ2luYWwgcmVmIGluIGNvbnN0cnVjdGlvbi4KKyAgICBpZiAobV9tYXlCZURl
c3Ryb3llZCkKKyAgICAgICAgZGVyZWYoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zaGFyZWQvY29udGV4dC9TaGFyZWRX
b3JrZXJUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zaGFyZWQvY29udGV4
dC9TaGFyZWRXb3JrZXJUaHJlYWRQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNlNmM1OWUxZDljMTUxODA0
YjQwMTUxMDBjNGU2Mzk3NDRjMDNkMjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL3NoYXJlZC9jb250ZXh0L1NoYXJlZFdvcmtlclRocmVhZFByb3h5LmgKQEAgLTAs
MCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV29ya2Vy
RGVidWdnZXJQcm94eS5oIgorI2luY2x1ZGUgIldvcmtlckdsb2JhbFNjb3BlUHJveHkuaCIKKyNp
bmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgorI2luY2x1ZGUgIldvcmtlck9iamVjdFByb3h5
LmgiCisjaW5jbHVkZSAiV29ya2VyT3B0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2hhcmVkV29ya2VyOworY2xhc3MgU2hh
cmVkV29ya2VyVGhyZWFkOworCitjbGFzcyBTaGFyZWRXb3JrZXJUaHJlYWRQcm94eSBmaW5hbCA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRXb3JrZXJUaHJlYWRQcm94eT4sIHB1
YmxpYyBXb3JrZXJHbG9iYWxTY29wZVByb3h5LCBwdWJsaWMgV29ya2VyT2JqZWN0UHJveHksIHB1
YmxpYyBXb3JrZXJMb2FkZXJQcm94eSwgcHVibGljIFdvcmtlckRlYnVnZ2VyUHJveHkgeworcHVi
bGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+IHN0YXRpYyBTaGFyZWRXb3JrZXJU
aHJlYWRQcm94eSYgY3JlYXRlKEFyZ3MmJi4uLiBhcmdzKSB7IHJldHVybiAqbmV3IFNoYXJlZFdv
cmtlclRocmVhZFByb3h5KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7IH0KKworICAgIFNo
YXJlZFdvcmtlclRocmVhZCogdGhyZWFkKCkgeyByZXR1cm4gbV93b3JrZXJUaHJlYWQuZ2V0KCk7
IH0KKworICAgIHZvaWQgc3RhcnRXb3JrZXJHbG9iYWxTY29wZShjb25zdCBVUkwmIHNjcmlwdFVS
TCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgYm9vbCBpc09u
bGluZSwgY29uc3QgU2NyaXB0QnVmZmVyJiBzb3VyY2VDb2RlLCBjb25zdCBDb250ZW50U2VjdXJp
dHlQb2xpY3lSZXNwb25zZUhlYWRlcnMmLCBib29sIHNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRl
bnRTZWN1cml0eVBvbGljeSwgY29uc3QgQ3Jvc3NPcmlnaW5FbWJlZGRlclBvbGljeSYsIE1vbm90
b25pY1RpbWUgdGltZU9yaWdpbiwgUmVmZXJyZXJQb2xpY3ksIFdvcmtlclR5cGUsIEZldGNoUmVx
dWVzdENyZWRlbnRpYWxzLCBKU0M6OlJ1bnRpbWVGbGFncykgZmluYWw7CisgICAgdm9pZCB3b3Jr
ZXJPYmplY3REZXN0cm95ZWQoKSBmaW5hbDsKKyAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgp
IGNvbnN0IGZpbmFsOworICAgIHZvaWQgdGVybWluYXRlV29ya2VyR2xvYmFsU2NvcGUoKSBmaW5h
bDsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBTaGFyZWRXb3JrZXJUaHJlYWRQcm94eShTaGFy
ZWRXb3JrZXImKTsKKworICAgIHZvaWQgd29ya2VyR2xvYmFsU2NvcGVEZXN0cm95ZWRJbnRlcm5h
bCgpOworCisgICAgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyR2xvYmFsU2NvcGUoTWVzc2FnZVdp
dGhNZXNzYWdlUG9ydHMmJikgZmluYWw7CisgICAgdm9pZCBwb3N0VGFza1RvV29ya2VyR2xvYmFs
U2NvcGUoRnVuY3Rpb248dm9pZChTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik+JiYpIGZpbmFsOwor
ICAgIHZvaWQgbm90aWZ5TmV0d29ya1N0YXRlQ2hhbmdlKGJvb2wgaXNPbmxpbmUpIGZpbmFsOwor
ICAgIHZvaWQgc3VzcGVuZEZvckJhY2tGb3J3YXJkQ2FjaGUoKSBmaW5hbDsKKyAgICB2b2lkIHJl
c3VtZUZvckJhY2tGb3J3YXJkQ2FjaGUoKSBmaW5hbDsKKyAgICB2b2lkIHBvc3RFeGNlcHRpb25U
b1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIs
IGludCBjb2x1bW5OdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKSBmaW5hbDsKKyAgICB2
b2lkIHdvcmtlckdsb2JhbFNjb3BlRGVzdHJveWVkKCkgZmluYWw7CisgICAgdm9pZCBwb3N0TWVz
c2FnZVRvV29ya2VyT2JqZWN0KE1lc3NhZ2VXaXRoTWVzc2FnZVBvcnRzJiYpIGZpbmFsOworICAg
IHZvaWQgY29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGJvb2wgaGFzUGVuZGluZ0FjdGl2
aXR5KSBmaW5hbDsKKyAgICB2b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0eShib29sIGhhc1BlbmRp
bmdBY3Rpdml0eSkgZmluYWw7CisgICAgUmVmUHRyPENhY2hlU3RvcmFnZUNvbm5lY3Rpb24+IGNy
ZWF0ZUNhY2hlU3RvcmFnZUNvbm5lY3Rpb24oKSBmaW5hbDsKKyAgICBSZWZQdHI8UlRDRGF0YUNo
YW5uZWxSZW1vdGVIYW5kbGVyQ29ubmVjdGlvbj4gY3JlYXRlUlRDRGF0YUNoYW5uZWxSZW1vdGVI
YW5kbGVyQ29ubmVjdGlvbigpIGZpbmFsOworICAgIHZvaWQgcG9zdFRhc2tUb0xvYWRlcihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrJiYpIGZpbmFsOworICAgIGJvb2wgcG9zdFRhc2tGb3JN
b2RlVG9Xb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZShTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrJiYsIGNvbnN0IFN0cmluZyYgbW9kZSkgZmluYWw7CisgICAgdm9pZCBwb3N0TWVzc2FnZVRv
RGVidWdnZXIoY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgdm9pZCBzZXRSZXNvdXJjZUNhY2hp
bmdEaXNhYmxlZEJ5V2ViSW5zcGVjdG9yKGJvb2wpIGZpbmFsOworCisgICAgV2Vha1B0cjxTaGFy
ZWRXb3JrZXI+IG1fc2hhcmVkV29ya2VyOworICAgIFJlZlB0cjxTaGFyZWRXb3JrZXJUaHJlYWQ+
IG1fd29ya2VyVGhyZWFkOworICAgIGNvbnN0IFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0
PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgY29uc3QgU3RyaW5nIG1faWRlbnRpZmll
ckZvckluc3BlY3RvcjsKKyAgICBib29sIG1fYXNrZWRUb1Rlcm1pbmF0ZSB7IGZhbHNlIH07Cisg
ICAgYm9vbCBtX2hhc1BlbmRpbmdBY3Rpdml0eSB7IGZhbHNlIH07CisgICAgYm9vbCBtX21heUJl
RGVzdHJveWVkIHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
      

    </bug>

</bugzilla>