<?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>217497</bug_id>
          
          <creation_ts>2020-10-08 16:04:49 -0700</creation_ts>
          <short_desc>Move some audio buffer management related files from folder &quot;mac&quot; to folder &quot;cocoa&quot;</short_desc>
          <delta_ts>2020-10-09 10:11:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Peng Liu">peng.liu6</reporter>
          <assigned_to name="Peng Liu">peng.liu6</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</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>1696058</commentid>
    <comment_count>0</comment_count>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2020-10-08 16:04:49 -0700</bug_when>
    <thetext>Move some audio buffer management related files from folder “mac” to folder “cocoa”</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696061</commentid>
    <comment_count>1</comment_count>
      <attachid>410893</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2020-10-08 16:18:28 -0700</bug_when>
    <thetext>Created attachment 410893
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696111</commentid>
    <comment_count>2</comment_count>
      <attachid>410902</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2020-10-08 19:46:30 -0700</bug_when>
    <thetext>Created attachment 410902
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696118</commentid>
    <comment_count>3</comment_count>
      <attachid>410904</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2020-10-08 20:37:29 -0700</bug_when>
    <thetext>Created attachment 410904
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696119</commentid>
    <comment_count>4</comment_count>
      <attachid>410905</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2020-10-08 20:50:07 -0700</bug_when>
    <thetext>Created attachment 410905
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696194</commentid>
    <comment_count>5</comment_count>
      <attachid>410905</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-10-09 05:53:07 -0700</bug_when>
    <thetext>Comment on attachment 410905
Patch

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

&gt; Source/WebCore/platform/audio/cocoa/CAAudioStreamDescription.hSource/WebCore/platform/audio/mac/CAAudioStreamDescription.h:69
&gt; +    AudioStreamBasicDescription&amp; streamDescription();

Why not keeping them inline.
If not with the declaration, we can keep them as inline in the header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696247</commentid>
    <comment_count>6</comment_count>
      <attachid>410905</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2020-10-09 09:56:21 -0700</bug_when>
    <thetext>Comment on attachment 410905
Patch

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

&gt;&gt; Source/WebCore/platform/audio/cocoa/CAAudioStreamDescription.hSource/WebCore/platform/audio/mac/CAAudioStreamDescription.h:69
&gt;&gt; +    AudioStreamBasicDescription&amp; streamDescription();
&gt; 
&gt; Why not keeping them inline.
&gt; If not with the declaration, we can keep them as inline in the header.

We already have WEBCORE_EXPORT on the class, so the style checker will complain if we keep them as inline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696252</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-09 10:10:17 -0700</bug_when>
    <thetext>Committed r268266: &lt;https://trac.webkit.org/changeset/268266&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 410905.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696253</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-09 10:11:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/70142943&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410893</attachid>
            <date>2020-10-08 16:18:28 -0700</date>
            <delta_ts>2020-10-08 19:46:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217497-20201008161827.patch</filename>
            <type>text/plain</type>
            <size>143234</size>
            <attacher name="Peng Liu">peng.liu6</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzA2MzllNTIwYzdkYmRi
ZWZjZGIyZTU5ODNmMDVmY2M1NzM2NDkxNy4uZTU2ZTc0NzFlNzBjZjlhYWU3MGVjZGIxMDg0N2U3
YmViMzI4NmQyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDIwLTEwLTA4ICBQZW5n
IExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBzb21lIGF1ZGlvIGJ1
ZmZlciBtYW5hZ2VtZW50IHJlbGF0ZWQgZmlsZXMgZnJvbSBmb2xkZXIg4oCcbWFj4oCdIHRvIGZv
bGRlciDigJxjb2NvYeKAnQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE3NDk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb1Nh
bXBsZUJ1ZmZlckxpc3QuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAuCisgICAgICAgICogcGxhdGZvcm0v
YXVkaW8vY29jb2EvQXVkaW9TYW1wbGVCdWZmZXJMaXN0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmguCisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9TYW1wbGVEYXRhU291cmNlLmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVEYXRh
U291cmNlLmguCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9TYW1wbGVEYXRh
U291cmNlLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFj
L0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9jb2Nv
YS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5jcHAuCisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRpb1N0cmVh
bURlc2NyaXB0aW9uLmguCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2EvQ0FSaW5nQnVm
ZmVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9D
QVJpbmdCdWZmZXIuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2NvY29hL0NBUmluZ0J1
ZmZlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NB
UmluZ0J1ZmZlci5oLgorCiAyMDIwLTEwLTA4ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1
amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5DYWlyb10gQVNTRVJUSU9OIEZBSUxFRDogbV9y
ZW5kZXJpbmdVcGRhdGVSZW1haW5pbmdTdGVwcy5sYXN0KCkuaXNFbXB0eSgpIGluIFdlYkNvcmU6
OlBhZ2U6OmZpbmFsaXplUmVuZGVyaW5nVXBkYXRlIHNpbmNlIHIyNjgwNzUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
Q29jb2EudHh0CmluZGV4IGUzYjJlMjllODAyYTQxYjIxOGExN2JiNTQzMmRmMDljYjgyMmIxYzMu
LjFhZmNiODA3ZGRlOTA4ODdkMzE0YTc2NzExYjdkNTMxOWJhODA1ODQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNl
c0NvY29hLnR4dApAQCAtMjAzLDYgKzIwMywxMCBAQCBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xs
aW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZU1hYy5tbQogcGFnZS9zY3JvbGxpbmcvbWFjL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0KIHBsYXRmb3JtL2F1ZGlvL0F1
ZGlvU2Vzc2lvbi5jcHAKIHBsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRGVzdGluYXRpb25Db2Nv
YS5jcHAKK3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAKK3Bs
YXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbQorcGxhdGZvcm0vYXVk
aW8vY29jb2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmNwcAorcGxhdGZvcm0vYXVkaW8vY29j
b2EvQ0FSaW5nQnVmZmVyLmNwcAogcGxhdGZvcm0vYXVkaW8vY29jb2EvTWVkaWFTZXNzaW9uTWFu
YWdlckNvY29hLm1tCiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9XZWJBdWRpb0J1ZmZlckxpc3QuY3Bw
CiBwbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAgQG5vLXVuaWZ5CkBA
IC0yMTQsMTEgKzIxOCw3IEBAIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0J1c01hYy5tbQogcGxh
dGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuY3BwCiBwbGF0Zm9ybS9hdWRpby9t
YWMvQXVkaW9GaWxlUmVhZGVyTWFjLmNwcAogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvSGFyZHdh
cmVMaXN0ZW5lck1hYy5jcHAKLXBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxp
c3QuY3BwCi1wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLm1tCiBwbGF0
Zm9ybS9hdWRpby9tYWMvQXVkaW9TZXNzaW9uTWFjLm1tCi1wbGF0Zm9ybS9hdWRpby9tYWMvQ0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uLmNwcAotcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZl
ci5jcHAKIHBsYXRmb3JtL2F1ZGlvL21hYy9GRlRGcmFtZU1hYy5jcHAKIHBsYXRmb3JtL2NmL0tl
eWVkRGVjb2RlckNGLmNwcAogcGxhdGZvcm0vY2YvS2V5ZWRFbmNvZGVyQ0YuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzBi
NTZlNjA1MmZjZjg3YzRhYjYyNzJjZDQyZThhMDQwZjc1ZDM1YS4uYWUwZGQ3NTY1Y2NlNjE4Zjcz
OGZkNDk1YTEwNGQ3YmMyMDhkYzYyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjI0LDYgKzYyNCwxMCBAQAogCQkxQ0ZBRTMy
MzBBNkQ2QTNGMDAzMjU5M0QgLyogbGlib2JqYy5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDRkFFMzIyMEE2RDZBM0YwMDMyNTkzRCAvKiBs
aWJvYmpjLmR5bGliICovOyB9OwogCQkxRDAwMjZBNDIzNzRENjI0MDBDQTZDREYgLyogSlNQaWN0
dXJlSW5QaWN0dXJlV2luZG93LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxRDAwMjZBMjIzNzRENjIzMDBDQTZDREYgLyogSlNQaWN0dXJlSW5QaWN0dXJl
V2luZG93LmggKi87IH07CiAJCTFEMDAyNkFBMjM3NEY5RUEwMENBNkNERiAvKiBKU0VudGVyUGlj
dHVyZUluUGljdHVyZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxRDAwMjZBODIzNzRGOUQ5MDBDQTZDREYgLyogSlNFbnRlclBpY3R1cmVJblBp
Y3R1cmVFdmVudC5oICovOyB9OworCQkxRDBDRDFDNjI1MkZDQTE0MDBENjBBQzggLyogQ0FSaW5n
QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEQzczNDEyMTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuY3BwICovOyB9OworCQkx
RDBDRDFDNzI1MkZDQURCMDBENjBBQzggLyogQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3M0I4NzU3MUU0
MERDRkQwMDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwICovOyB9OworCQkx
RDBDRDFDODI1MkZDQzA5MDBENjBBQzggLyogQXVkaW9TYW1wbGVEYXRhU291cmNlLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDczQjg3NjQxRTQzODU5
RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbSAqLzsgfTsKKwkJMUQwQ0QxQzky
NTJGQ0MyMTAwRDYwQUM4IC8qIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzNCODc2MjFFNDM4NTlEMDA3MUMw
RUMgLyogQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcCAqLzsgfTsKIAkJMUQyQzgyQjcyMzZBM0Y2
QTAwNTVENkM1IC8qIFBpY3R1cmVJblBpY3R1cmVTdXBwb3J0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRDJDODJCNjIzNkEzRjZBMDA1NUQ2QzUgLyog
UGljdHVyZUluUGljdHVyZVN1cHBvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxRDJGOEUwMzIzNDQ3NEVGMDA5OTNCNjggLyogRG9jdW1lbnRQ
aWN0dXJlSW5QaWN0dXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxREVGMDZERDIzM0QyRTFDMDBFRTIyOEQgLyogRG9jdW1lbnRQaWN0dXJlSW5QaWN0
dXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MUQyRjhFMDQyMzQ0NzUxNjAwOTkzQjY4IC8qIEVudGVyUGljdHVyZUluUGljdHVyZUV2ZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxREVGMDZDQTIz
M0MzRDBCMDBFRTIyOEQgLyogRW50ZXJQaWN0dXJlSW5QaWN0dXJlRXZlbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjczNjIsNiArMjczNjYs
MTQgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTQxMzE1MTg0MjM1Nzc0NUUwMDExNUU2RSAvKiBB
dWRpb0Rlc3RpbmF0aW9uQ29jb2EuY3BwICovLAogCQkJCTQxMzE1MTg2MjM1Nzc0NUUwMDExNUU2
RSAvKiBBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaCAqLywKKwkJCQkwNzNCODc2MjFFNDM4NTlEMDA3
MUMwRUMgLyogQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcCAqLywKKwkJCQkwNzNCODc2MzFFNDM4
NTlEMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmggKi8sCisJCQkJMDczQjg3NjUx
RTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oICovLAorCQkJCTA3M0I4
NzY0MUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZURhdGFTb3VyY2UubW0gKi8sCisJCQkJ
MDczQjg3NTcxRTQwRENGRDAwNzFDMEVDIC8qIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5jcHAg
Ki8sCisJCQkJMDczQjg3NTgxRTQwRENGRDAwNzFDMEVDIC8qIENBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbi5oICovLAorCQkJCUNEQzczNDEyMTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIu
Y3BwICovLAorCQkJCUNEQzczNDEzMTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuaCAq
LywKIAkJCQk0MTdGN0FFRDIxMzlCRjY1MDBGQkE3RUMgLyogTWVkaWFTZXNzaW9uTWFuYWdlckNv
Y29hLmggKi8sCiAJCQkJNDE3RjdBRUEyMTM5QkY2NDAwRkJBN0VDIC8qIE1lZGlhU2Vzc2lvbk1h
bmFnZXJDb2NvYS5tbSAqLywKIAkJCQk0MTdGN0FFQjIxMzlCRjY0MDBGQkE3RUMgLyogV2ViQXVk
aW9CdWZmZXJMaXN0LmNwcCAqLywKQEAgLTMwMjY5LDE1ICszMDI4MSw3IEBACiAJCQkJRkQzMTYw
QjkxMkIwMjcyQTAwQzFBMzU5IC8qIEF1ZGlvRmlsZVJlYWRlck1hYy5oICovLAogCQkJCUNEMkY0
QTI1MThEOEEzNDkwMDYzNzQ2RCAvKiBBdWRpb0hhcmR3YXJlTGlzdGVuZXJNYWMuY3BwICovLAog
CQkJCUNEMkY0QTI2MThEOEEzNDkwMDYzNzQ2RCAvKiBBdWRpb0hhcmR3YXJlTGlzdGVuZXJNYWMu
aCAqLywKLQkJCQkwNzNCODc2MjFFNDM4NTlEMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVCdWZmZXJM
aXN0LmNwcCAqLywKLQkJCQkwNzNCODc2MzFFNDM4NTlEMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVC
dWZmZXJMaXN0LmggKi8sCi0JCQkJMDczQjg3NjUxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2Ft
cGxlRGF0YVNvdXJjZS5oICovLAotCQkJCTA3M0I4NzY0MUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRp
b1NhbXBsZURhdGFTb3VyY2UubW0gKi8sCiAJCQkJQ0Q1NERFNDkxNzQ2OUM2RDAwNUU1QjM2IC8q
IEF1ZGlvU2Vzc2lvbk1hYy5tbSAqLywKLQkJCQkwNzNCODc1NzFFNDBEQ0ZEMDA3MUMwRUMgLyog
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmNwcCAqLywKLQkJCQkwNzNCODc1ODFFNDBEQ0ZEMDA3
MUMwRUMgLyogQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggKi8sCi0JCQkJQ0RDNzM0MTIxOTc3
ODk2QzAwNDZCRkM1IC8qIENBUmluZ0J1ZmZlci5jcHAgKi8sCi0JCQkJQ0RDNzM0MTMxOTc3ODk2
QzAwNDZCRkM1IC8qIENBUmluZ0J1ZmZlci5oICovLAogCQkJCUZEMzE2MEJBMTJCMDI3MkEwMEMx
QTM1OSAvKiBGRlRGcmFtZU1hYy5jcHAgKi8sCiAJCQkpOwogCQkJcGF0aCA9IG1hYzsKQEAgLTM1
MjM0LDYgKzM1MjM4LDggQEAKIAkJCQlDMUY3QjczMTI0NDhGMkFDMDAxMjQ1NTcgLyogQUdYQ29t
cGlsZXJTZXJ2aWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEMEVFRTBFMTQ3NDNGMzkwMDNF
QUZBMiAvKiBBdWRpb0Rlc3RpbmF0aW9uSU9TLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNENTU5
NjkxMTQ3NUI2NzgwMDFEMEJEMCAvKiBBdWRpb0ZpbGVSZWFkZXJJT1MuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMUQwQ0QxQzkyNTJGQ0MyMTAwRDYwQUM4IC8qIEF1ZGlvU2FtcGxlQnVmZmVyTGlz
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxRDBDRDFDODI1MkZDQzA5MDBENjBBQzggLyogQXVk
aW9TYW1wbGVEYXRhU291cmNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RBNzk4MjcxNzBBMjc5
MTAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEOEE3
QkJCMTk3NzM1RkUwMENCRDY0MyAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUNERTNBODU3MTdGNjAyMDQwMEM1QkUyMCAvKiBBdWRpb1RyYWNrUHJp
dmF0ZUFWRk9iakMubW0gaW4gU291cmNlcyAqLywKQEAgLTM1MjQ3LDYgKzM1MjUzLDggQEAKIAkJ
CQlDRDExQjNFMTIyN0NFNkYzMDAyM0FGQzcgLyogQVZTdHJlYW1EYXRhUGFyc2VyTUlNRVR5cGVD
YWNoZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEMzM2RjYxMTdGOUY2NDcwMERERENEMCAvKiBB
VlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcwMzYzRTcx
ODFBMUNEQzAwQzA3NEE1IC8qIEFWVmlkZW9DYXB0dXJlU291cmNlLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJMUQwQ0QxQzcyNTJGQ0FEQjAwRDYwQUM4IC8qIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxRDBDRDFDNjI1MkZDQTE0MDBENjBBQzggLyogQ0FS
aW5nQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNERjRCNzE1MUUwMEI3RTUwMEUyMzVB
MiAvKiBDRE0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q5NEE1REQxRjcxRDVEODAwRjUyNUM1
IC8qIENETUNsZWFyS2V5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQjcwNDVCMUY3NDY1QTEw
MDM5MjNERiAvKiBDRE1GYWlyUGxheVN0cmVhbWluZy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxlQnVm
ZmVyTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb1Nh
bXBsZUJ1ZmZlckxpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3ZmMwMmQ4ZDkwM2U3MDJhZGUyMjQ2NGVj
OWM4MWE2ODZlODQwNTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3BwCkBAIC0wLDAgKzEsMzI0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oIgorCisjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJWZWN0
b3JNYXRoLmgiCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjaW5jbHVkZSA8
QXVkaW9Ub29sYm94L0F1ZGlvQ29udmVydGVyLmg+CisjaW5jbHVkZSA8d3RmL1NldEZvclNjb3Bl
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPEF1ZGlvU2FtcGxlQnVmZmVyTGlzdD4g
QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpjcmVhdGUoY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uJiBmb3JtYXQsIHNpemVfdCBtYXhpbXVtU2FtcGxlQ291bnQpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQXVkaW9TYW1wbGVCdWZmZXJMaXN0KGZvcm1hdCwgbWF4aW11bVNhbXBsZUNv
dW50KSk7Cit9CisKK0F1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0
KGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZm9ybWF0LCBzaXplX3QgbWF4aW11bVNh
bXBsZUNvdW50KQorICAgIDogbV9pbnRlcm5hbEZvcm1hdChtYWtlVW5pcXVlUmVmPENBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbj4oZm9ybWF0KSkKKyAgICAsIG1fc2FtcGxlQ2FwYWNpdHkobWF4aW11
bVNhbXBsZUNvdW50KQorICAgICwgbV9tYXhCdWZmZXJTaXplUGVyQ2hhbm5lbChtYXhpbXVtU2Ft
cGxlQ291bnQgKiBmb3JtYXQuYnl0ZXNQZXJGcmFtZSgpIC8gZm9ybWF0Lm51bWJlck9mQ2hhbm5l
bFN0cmVhbXMoKSkKKyAgICAsIG1fYnVmZmVyTGlzdChtYWtlVW5pcXVlUmVmPFdlYkF1ZGlvQnVm
ZmVyTGlzdD4obV9pbnRlcm5hbEZvcm1hdCwgbV9tYXhCdWZmZXJTaXplUGVyQ2hhbm5lbCkpCit7
CisgICAgQVNTRVJUKGZvcm1hdC5zYW1wbGVSYXRlKCkgPj0gMCk7Cit9CisKK0F1ZGlvU2FtcGxl
QnVmZmVyTGlzdDo6fkF1ZGlvU2FtcGxlQnVmZmVyTGlzdCgpID0gZGVmYXVsdDsKKwordm9pZCBB
dWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OnNldFNhbXBsZUNvdW50KHNpemVfdCBjb3VudCkKK3sKKyAg
ICBBU1NFUlQoY291bnQgPD0gbV9zYW1wbGVDYXBhY2l0eSk7CisgICAgaWYgKGNvdW50IDw9IG1f
c2FtcGxlQ2FwYWNpdHkpCisgICAgICAgIG1fc2FtcGxlQ291bnQgPSBjb3VudDsKK30KKwordm9p
ZCBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmFwcGx5R2FpbihBdWRpb0J1ZmZlckxpc3QmIGJ1ZmZl
ckxpc3QsIGZsb2F0IGdhaW4sIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OlBDTUZvcm1hdCBmb3Jt
YXQpCit7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGJ1ZmZlckxpc3QubU51bWJlckJ1
ZmZlcnM7ICsraSkgeworICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNlIEF1
ZGlvU3RyZWFtRGVzY3JpcHRpb246OkludDE2OiB7CisgICAgICAgICAgICBpbnQxNl90KiBidWZm
ZXIgPSBzdGF0aWNfY2FzdDxpbnQxNl90Kj4oYnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5tRGF0YSk7
CisgICAgICAgICAgICBpbnQgZnJhbWVDb3VudCA9IGJ1ZmZlckxpc3QubUJ1ZmZlcnNbaV0ubURh
dGFCeXRlU2l6ZSAvIHNpemVvZihpbnQxNl90KTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgZnJhbWVDb3VudDsgaSsrKQorICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSAqPSBnYWlu
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBdWRpb1N0cmVh
bURlc2NyaXB0aW9uOjpJbnQzMjogeworICAgICAgICAgICAgaW50MzJfdCogYnVmZmVyID0gc3Rh
dGljX2Nhc3Q8aW50MzJfdCo+KGJ1ZmZlckxpc3QubUJ1ZmZlcnNbaV0ubURhdGEpOworICAgICAg
ICAgICAgaW50IGZyYW1lQ291bnQgPSBidWZmZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNp
emUgLyBzaXplb2YoaW50MzJfdCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZy
YW1lQ291bnQ7IGkrKykKKyAgICAgICAgICAgICAgICBidWZmZXJbaV0gKj0gZ2FpbjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpGbG9hdDMyOiB7CisgICAgICAgICAgICBmbG9hdCog
YnVmZmVyID0gc3RhdGljX2Nhc3Q8ZmxvYXQqPihidWZmZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRh
KTsKKyAgICAgICAgICAgIHZEU1BfdnNtdWwoYnVmZmVyLCAxLCAmZ2FpbiwgYnVmZmVyLCAxLCBi
dWZmZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgLyBzaXplb2YoZmxvYXQpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbjo6RmxvYXQ2NDogeworICAgICAgICAgICAgZG91YmxlKiBidWZmZXIgPSBzdGF0aWNf
Y2FzdDxkb3VibGUqPihidWZmZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhKTsKKyAgICAgICAgICAg
IGRvdWJsZSBnYWluQXNEb3VibGUgPSBnYWluOworICAgICAgICAgICAgdkRTUF92c211bEQoYnVm
ZmVyLCAxLCAmZ2FpbkFzRG91YmxlLCBidWZmZXIsIDEsIGJ1ZmZlckxpc3QubUJ1ZmZlcnNbaV0u
bURhdGFCeXRlU2l6ZSAvIHNpemVvZihkb3VibGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6Tm9uZToKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjphcHBseUdhaW4oZmxv
YXQgZ2FpbikKK3sKKyAgICBhcHBseUdhaW4obV9idWZmZXJMaXN0LmdldCgpLCBnYWluLCBtX2lu
dGVybmFsRm9ybWF0LT5mb3JtYXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIG1peEJ1ZmZlcnMoV2Vi
QXVkaW9CdWZmZXJMaXN0JiBkZXN0aW5hdGlvbkJ1ZmZlciwgY29uc3QgQXVkaW9CdWZmZXJMaXN0
JiBzb3VyY2VCdWZmZXIsIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OlBDTUZvcm1hdCBmb3JtYXQs
IHNpemVfdCBmcmFtZUNvdW50KQoreworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBkZXN0
aW5hdGlvbkJ1ZmZlci5idWZmZXJDb3VudCgpOyBpKyspIHsKKyAgICAgICAgc3dpdGNoIChmb3Jt
YXQpIHsKKyAgICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpJbnQxNjogeworICAg
ICAgICAgICAgQVNTRVJUKGZyYW1lQ291bnQgPD0gZGVzdGluYXRpb25CdWZmZXIuYnVmZmVyKGkp
LT5tRGF0YUJ5dGVTaXplIC8gMik7CisgICAgICAgICAgICBBU1NFUlQoZnJhbWVDb3VudCA8PSBz
b3VyY2VCdWZmZXIubUJ1ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSAvIDIpOworCisgICAgICAgICAg
ICBhdXRvKiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PGludDE2X3QqPihkZXN0aW5hdGlvbkJ1
ZmZlci5idWZmZXIoaSktPm1EYXRhKTsKKyAgICAgICAgICAgIGF1dG8qIHNvdXJjZSA9IHN0YXRp
Y19jYXN0PGludDE2X3QqPihzb3VyY2VCdWZmZXIubUJ1ZmZlcnNbaV0ubURhdGEpOworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZUNvdW50OyBpKyspCisgICAgICAgICAg
ICAgICAgZGVzdGluYXRpb25baV0gKz0gc291cmNlW2ldOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpJbnQzMjogewor
ICAgICAgICAgICAgQVNTRVJUKGZyYW1lQ291bnQgPD0gZGVzdGluYXRpb25CdWZmZXIuYnVmZmVy
KGkpLT5tRGF0YUJ5dGVTaXplIC8gNCk7CisgICAgICAgICAgICBBU1NFUlQoZnJhbWVDb3VudCA8
PSBzb3VyY2VCdWZmZXIubUJ1ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSAvIDQpOworCisgICAgICAg
ICAgICBhdXRvKiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PGludDMyX3QqPihkZXN0aW5hdGlv
bkJ1ZmZlci5idWZmZXIoaSktPm1EYXRhKTsKKyAgICAgICAgICAgIHZEU1BfdmFkZGkoZGVzdGlu
YXRpb24sIDEsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KHNvdXJjZUJ1ZmZlci5tQnVmZmVy
c1tpXS5tRGF0YSksIDEsIGRlc3RpbmF0aW9uLCAxLCBmcmFtZUNvdW50KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6
RmxvYXQzMjogeworICAgICAgICAgICAgQVNTRVJUKGZyYW1lQ291bnQgPD0gZGVzdGluYXRpb25C
dWZmZXIuYnVmZmVyKGkpLT5tRGF0YUJ5dGVTaXplIC8gNCk7CisgICAgICAgICAgICBBU1NFUlQo
ZnJhbWVDb3VudCA8PSBzb3VyY2VCdWZmZXIubUJ1ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSAvIDQp
OworCisgICAgICAgICAgICBhdXRvKiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0Kj4o
ZGVzdGluYXRpb25CdWZmZXIuYnVmZmVyKGkpLT5tRGF0YSk7CisgICAgICAgICAgICB2RFNQX3Zh
ZGQoZGVzdGluYXRpb24sIDEsIHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzb3VyY2VCdWZmZXIu
bUJ1ZmZlcnNbaV0ubURhdGEpLCAxLCBkZXN0aW5hdGlvbiwgMSwgZnJhbWVDb3VudCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb246OkZsb2F0NjQ6IHsKKyAgICAgICAgICAgIEFTU0VSVChmcmFtZUNvdW50IDw9IGRlc3Rp
bmF0aW9uQnVmZmVyLmJ1ZmZlcihpKS0+bURhdGFCeXRlU2l6ZSAvIDgpOworICAgICAgICAgICAg
QVNTRVJUKGZyYW1lQ291bnQgPD0gc291cmNlQnVmZmVyLm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNp
emUgLyA4KTsKKworICAgICAgICAgICAgYXV0byogZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDxk
b3VibGUqPihkZXN0aW5hdGlvbkJ1ZmZlci5idWZmZXIoaSktPm1EYXRhKTsKKyAgICAgICAgICAg
IHZEU1BfdmFkZEQoZGVzdGluYXRpb24sIDEsIHJlaW50ZXJwcmV0X2Nhc3Q8ZG91YmxlKj4oc291
cmNlQnVmZmVyLm1CdWZmZXJzW2ldLm1EYXRhKSwgMSwgZGVzdGluYXRpb24sIDEsIGZyYW1lQ291
bnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBdWRpb1N0
cmVhbURlc2NyaXB0aW9uOjpOb25lOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworT1NTdGF0dXMgQXVk
aW9TYW1wbGVCdWZmZXJMaXN0OjptaXhGcm9tKGNvbnN0IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCYg
c291cmNlLCBzaXplX3QgZnJhbWVDb3VudCkKK3sKKyAgICBBU1NFUlQoc291cmNlLnN0cmVhbURl
c2NyaXB0aW9uKCkgPT0gc3RyZWFtRGVzY3JpcHRpb24oKSk7CisKKyAgICBpZiAoc291cmNlLnN0
cmVhbURlc2NyaXB0aW9uKCkgIT0gc3RyZWFtRGVzY3JpcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IGtBdWRpb19QYXJhbUVycm9yOworCisgICAgaWYgKGZyYW1lQ291bnQgPiBzb3VyY2Uuc2FtcGxl
Q291bnQoKSkKKyAgICAgICAgZnJhbWVDb3VudCA9IHNvdXJjZS5zYW1wbGVDb3VudCgpOworCisg
ICAgaWYgKGZyYW1lQ291bnQgPiBtX3NhbXBsZUNhcGFjaXR5KQorICAgICAgICByZXR1cm4ga0F1
ZGlvX1BhcmFtRXJyb3I7CisKKyAgICBtX3NhbXBsZUNvdW50ID0gZnJhbWVDb3VudDsKKworICAg
IG1peEJ1ZmZlcnMoYnVmZmVyTGlzdCgpLCBzb3VyY2UuYnVmZmVyTGlzdCgpLCBtX2ludGVybmFs
Rm9ybWF0LT5mb3JtYXQoKSwgZnJhbWVDb3VudCk7CisgICAgcmV0dXJuIDA7Cit9CisKK09TU3Rh
dHVzIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y29weUZyb20oY29uc3QgQXVkaW9TYW1wbGVCdWZm
ZXJMaXN0JiBzb3VyY2UsIHNpemVfdCBmcmFtZUNvdW50KQoreworICAgIEFTU0VSVChzb3VyY2Uu
c3RyZWFtRGVzY3JpcHRpb24oKSA9PSBzdHJlYW1EZXNjcmlwdGlvbigpKTsKKworICAgIGlmIChz
b3VyY2Uuc3RyZWFtRGVzY3JpcHRpb24oKSAhPSBzdHJlYW1EZXNjcmlwdGlvbigpKQorICAgICAg
ICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7CisKKyAgICBpZiAoZnJhbWVDb3VudCA+IHNvdXJj
ZS5zYW1wbGVDb3VudCgpKQorICAgICAgICBmcmFtZUNvdW50ID0gc291cmNlLnNhbXBsZUNvdW50
KCk7CisKKyAgICBpZiAoZnJhbWVDb3VudCA+IG1fc2FtcGxlQ2FwYWNpdHkpCisgICAgICAgIHJl
dHVybiBrQXVkaW9fUGFyYW1FcnJvcjsKKworICAgIG1fc2FtcGxlQ291bnQgPSBmcmFtZUNvdW50
OworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1fYnVmZmVyTGlzdC0+YnVmZmVyQ291
bnQoKTsgaSsrKSB7CisgICAgICAgIHVpbnQ4X3QqIHNvdXJjZURhdGEgPSBzdGF0aWNfY2FzdDx1
aW50OF90Kj4oc291cmNlLmJ1ZmZlckxpc3QoKS5idWZmZXIoaSktPm1EYXRhKTsKKyAgICAgICAg
dWludDhfdCogZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9idWZmZXJMaXN0
LT5idWZmZXIoaSktPm1EYXRhKTsKKyAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2VE
YXRhLCBmcmFtZUNvdW50ICogbV9pbnRlcm5hbEZvcm1hdC0+Ynl0ZXNQZXJQYWNrZXQoKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK09TU3RhdHVzIEF1ZGlvU2FtcGxlQnVmZmVyTGlz
dDo6Y29weVRvKEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyLCBzaXplX3QgZnJhbWVDb3VudCkKK3sK
KyAgICBpZiAoZnJhbWVDb3VudCA+IG1fc2FtcGxlQ291bnQpCisgICAgICAgIHJldHVybiBrQXVk
aW9fUGFyYW1FcnJvcjsKKyAgICBpZiAoYnVmZmVyLm1OdW1iZXJCdWZmZXJzID4gbV9idWZmZXJM
aXN0LT5idWZmZXJDb3VudCgpKQorICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7CisK
KyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYnVmZmVyLm1OdW1iZXJCdWZmZXJzOyBpKysp
IHsKKyAgICAgICAgdWludDhfdCogc291cmNlRGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPiht
X2J1ZmZlckxpc3QtPmJ1ZmZlcihpKS0+bURhdGEpOworICAgICAgICB1aW50OF90KiBkZXN0aW5h
dGlvbiA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXIubUJ1ZmZlcnNbaV0ubURhdGEpOwor
ICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZURhdGEsIGZyYW1lQ291bnQgKiBtX2lu
dGVybmFsRm9ybWF0LT5ieXRlc1BlclBhY2tldCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsK
K30KKworT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjptaXhGcm9tKGNvbnN0IEF1ZGlv
QnVmZmVyTGlzdCYgc291cmNlLCBzaXplX3QgZnJhbWVDb3VudCkKK3sKKyAgICBpZiAoZnJhbWVD
b3VudCA+IG1fc2FtcGxlQ291bnQpCisgICAgICAgIHJldHVybiBrQXVkaW9fUGFyYW1FcnJvcjsK
KyAgICBpZiAoc291cmNlLm1OdW1iZXJCdWZmZXJzID4gbV9idWZmZXJMaXN0LT5idWZmZXJDb3Vu
dCgpKQorICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7CisKKyAgICBtaXhCdWZmZXJz
KGJ1ZmZlckxpc3QoKSwgc291cmNlLCBtX2ludGVybmFsRm9ybWF0LT5mb3JtYXQoKSwgZnJhbWVD
b3VudCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpy
ZXNldCgpCit7CisgICAgbV9zYW1wbGVDb3VudCA9IDA7CisgICAgbV90aW1lc3RhbXAgPSAwOwor
ICAgIG1faG9zdFRpbWUgPSAtMTsKKworICAgIG1fYnVmZmVyTGlzdC0+cmVzZXQoKTsKK30KKwor
dm9pZCBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm8oKQoreworICAgIHplcm9BQkwobV9idWZm
ZXJMaXN0LmdldCgpLCBtX2ludGVybmFsRm9ybWF0LT5ieXRlc1BlclBhY2tldCgpICogbV9zYW1w
bGVDYXBhY2l0eSk7Cit9CisKK3ZvaWQgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKEF1
ZGlvQnVmZmVyTGlzdCYgYnVmZmVyLCBzaXplX3QgYnl0ZUNvdW50KQoreworICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBidWZmZXIubU51bWJlckJ1ZmZlcnM7ICsraSkKKyAgICAgICAgbWVt
c2V0KGJ1ZmZlci5tQnVmZmVyc1tpXS5tRGF0YSwgMCwgYnl0ZUNvdW50KTsKK30KKworc3RydWN0
IEF1ZGlvQ29udmVydGVyRnJvbUFCTENvbnRleHQgeworICAgIGNvbnN0IEF1ZGlvQnVmZmVyTGlz
dCYgYnVmZmVyOworICAgIHNpemVfdCBwYWNrZXRzQXZhaWxhYmxlVG9Db252ZXJ0OworICAgIHNp
emVfdCBieXRlc1BlclBhY2tldDsKK307CisKK3N0YXRpYyBjb25zdCBPU1N0YXR1cyBrUmFuT3V0
T2ZJbnB1dERhdGFTdGF0dXMgPSAnIW1vcic7CisKK3N0YXRpYyBPU1N0YXR1cyBhdWRpb0NvbnZl
cnRlckZyb21BQkxDYWxsYmFjayhBdWRpb0NvbnZlcnRlclJlZiwgVUludDMyKiBpb051bWJlckRh
dGFQYWNrZXRzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSwgQXVkaW9TdHJlYW1QYWNrZXREZXNj
cmlwdGlvbioqLCB2b2lkKiBpblJlZkNvbikKK3sKKyAgICBpZiAoIWlvTnVtYmVyRGF0YVBhY2tl
dHMgfHwgIWlvRGF0YSB8fCAhaW5SZWZDb24pIHsKKyAgICAgICAgTE9HX0VSUk9SKCJBdWRpb1Nh
bXBsZUJ1ZmZlckxpc3Q6OmF1ZGlvQ29udmVydGVyQ2FsbGJhY2soKSBpbnZhbGlkIGlucHV0IHRv
IEF1ZGlvQ29udmVydGVySW5wdXQiKTsKKyAgICAgICAgcmV0dXJuIGtBdWRpb0NvbnZlcnRlckVy
cl9VbnNwZWNpZmllZEVycm9yOworICAgIH0KKworICAgIGF1dG8mIGNvbnRleHQgPSAqc3RhdGlj
X2Nhc3Q8QXVkaW9Db252ZXJ0ZXJGcm9tQUJMQ29udGV4dCo+KGluUmVmQ29uKTsKKyAgICBpZiAo
IWNvbnRleHQucGFja2V0c0F2YWlsYWJsZVRvQ29udmVydCkgeworICAgICAgICAqaW9OdW1iZXJE
YXRhUGFja2V0cyA9IDA7CisgICAgICAgIHJldHVybiBrUmFuT3V0T2ZJbnB1dERhdGFTdGF0dXM7
CisgICAgfQorCisgICAgKmlvTnVtYmVyRGF0YVBhY2tldHMgPSBzdGF0aWNfY2FzdDxVSW50MzI+
KGNvbnRleHQucGFja2V0c0F2YWlsYWJsZVRvQ29udmVydCk7CisKKyAgICBmb3IgKHVpbnQzMl90
IGkgPSAwOyBpIDwgaW9EYXRhLT5tTnVtYmVyQnVmZmVyczsgKytpKSB7CisgICAgICAgIGlvRGF0
YS0+bUJ1ZmZlcnNbaV0ubURhdGEgPSBjb250ZXh0LmJ1ZmZlci5tQnVmZmVyc1tpXS5tRGF0YTsK
KyAgICAgICAgaW9EYXRhLT5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplID0gY29udGV4dC5wYWNr
ZXRzQXZhaWxhYmxlVG9Db252ZXJ0ICogY29udGV4dC5ieXRlc1BlclBhY2tldDsKKyAgICB9Cisg
ICAgY29udGV4dC5wYWNrZXRzQXZhaWxhYmxlVG9Db252ZXJ0ID0gMDsKKworICAgIHJldHVybiAw
OworfQorCitPU1N0YXR1cyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNvcHlGcm9tKGNvbnN0IEF1
ZGlvQnVmZmVyTGlzdCYgc291cmNlLCBzaXplX3QgZnJhbWVDb3VudCwgQXVkaW9Db252ZXJ0ZXJS
ZWYgY29udmVydGVyKQoreworICAgIHJlc2V0KCk7CisKKyAgICBBdWRpb1N0cmVhbUJhc2ljRGVz
Y3JpcHRpb24gaW5wdXRGb3JtYXQ7CisgICAgVUludDMyIHByb3BlcnR5RGF0YVNpemUgPSBzaXpl
b2YoaW5wdXRGb3JtYXQpOworICAgIEF1ZGlvQ29udmVydGVyR2V0UHJvcGVydHkoY29udmVydGVy
LCBrQXVkaW9Db252ZXJ0ZXJDdXJyZW50SW5wdXRTdHJlYW1EZXNjcmlwdGlvbiwgJnByb3BlcnR5
RGF0YVNpemUsICZpbnB1dEZvcm1hdCk7CisgICAgQVNTRVJUKGZyYW1lQ291bnQgPD0gc291cmNl
Lm1CdWZmZXJzWzBdLm1EYXRhQnl0ZVNpemUgLyBpbnB1dEZvcm1hdC5tQnl0ZXNQZXJQYWNrZXQp
OworCisgICAgQXVkaW9Db252ZXJ0ZXJGcm9tQUJMQ29udGV4dCBjb250ZXh0IHsgc291cmNlLCBm
cmFtZUNvdW50LCBpbnB1dEZvcm1hdC5tQnl0ZXNQZXJQYWNrZXQgfTsKKworI2lmICFMT0dfRElT
QUJMRUQKKyAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gb3V0cHV0Rm9ybWF0OworICAg
IHByb3BlcnR5RGF0YVNpemUgPSBzaXplb2Yob3V0cHV0Rm9ybWF0KTsKKyAgICBBdWRpb0NvbnZl
cnRlckdldFByb3BlcnR5KGNvbnZlcnRlciwga0F1ZGlvQ29udmVydGVyQ3VycmVudE91dHB1dFN0
cmVhbURlc2NyaXB0aW9uLCAmcHJvcGVydHlEYXRhU2l6ZSwgJm91dHB1dEZvcm1hdCk7CisKKyAg
ICBBU1NFUlQoQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKG91dHB1dEZvcm1hdCkubnVtYmVyT2ZD
aGFubmVsU3RyZWFtcygpID09IG1fYnVmZmVyTGlzdC0+YnVmZmVyQ291bnQoKSk7CisgICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IG1fYnVmZmVyTGlzdC0+YnVmZmVyQ291bnQoKTsgKytpKSB7
CisgICAgICAgIEFTU0VSVChtX2J1ZmZlckxpc3QtPmJ1ZmZlcihpKS0+bURhdGEpOworICAgICAg
ICBBU1NFUlQobV9idWZmZXJMaXN0LT5idWZmZXIoaSktPm1EYXRhQnl0ZVNpemUpOworICAgIH0K
KyNlbmRpZgorCisgICAgVUludDMyIHNhbXBsZXNDb252ZXJ0ZWQgPSBtX3NhbXBsZUNhcGFjaXR5
OworICAgIE9TU3RhdHVzIGVyciA9IEF1ZGlvQ29udmVydGVyRmlsbENvbXBsZXhCdWZmZXIoY29u
dmVydGVyLCBhdWRpb0NvbnZlcnRlckZyb21BQkxDYWxsYmFjaywgJmNvbnRleHQsICZzYW1wbGVz
Q29udmVydGVkLCBtX2J1ZmZlckxpc3QtPmxpc3QoKSwgbnVsbHB0cik7CisgICAgaWYgKCFlcnIg
fHwgZXJyID09IGtSYW5PdXRPZklucHV0RGF0YVN0YXR1cykgeworICAgICAgICBtX3NhbXBsZUNv
dW50ID0gc2FtcGxlc0NvbnZlcnRlZDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
TE9HX0VSUk9SKCJBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNvcHlGcm9tKCVwKSBBdWRpb0NvbnZl
cnRlckZpbGxDb21wbGV4QnVmZmVyIHJldHVybmVkIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChp
bnQpZXJyLCAoY2hhciopJmVycik7CisgICAgbV9zYW1wbGVDb3VudCA9IHN0ZDo6bWluKG1fc2Ft
cGxlQ2FwYWNpdHksIHN0YXRpY19jYXN0PHNpemVfdD4oc2FtcGxlc0NvbnZlcnRlZCkpOworICAg
IHplcm8oKTsKKyAgICByZXR1cm4gZXJyOworfQorCitPU1N0YXR1cyBBdWRpb1NhbXBsZUJ1ZmZl
ckxpc3Q6OmNvcHlGcm9tKEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCYgc291cmNlLCBzaXplX3QgZnJh
bWVDb3VudCwgQXVkaW9Db252ZXJ0ZXJSZWYgY29udmVydGVyKQoreworICAgIHJldHVybiBjb3B5
RnJvbShzb3VyY2UuYnVmZmVyTGlzdCgpLCBmcmFtZUNvdW50LCBjb252ZXJ0ZXIpOworfQorCitP
U1N0YXR1cyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNvcHlGcm9tKENBUmluZ0J1ZmZlciYgcmlu
Z0J1ZmZlciwgc2l6ZV90IHNhbXBsZUNvdW50LCB1aW50NjRfdCBzdGFydEZyYW1lLCBDQVJpbmdC
dWZmZXI6OkZldGNoTW9kZSBtb2RlKQoreworICAgIHJlc2V0KCk7CisgICAgaWYgKHJpbmdCdWZm
ZXIuZmV0Y2goYnVmZmVyTGlzdCgpLmxpc3QoKSwgc2FtcGxlQ291bnQsIHN0YXJ0RnJhbWUsIG1v
ZGUpICE9IENBUmluZ0J1ZmZlcjo6T2spCisgICAgICAgIHJldHVybiBrQXVkaW9fUGFyYW1FcnJv
cjsKKworICAgIG1fc2FtcGxlQ291bnQgPSBzYW1wbGVDb3VudDsKKyAgICByZXR1cm4gMDsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVB
TSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlv
U2FtcGxlQnVmZmVyTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2Ev
QXVkaW9TYW1wbGVCdWZmZXJMaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODE1MmY4NjAwYmQ5NDkxMDBiNjI5
MmI4ZjZhNDg0MzBlMWQ4ZWMzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oCkBAIC0wLDAgKzEsMTAx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiQ0FSaW5nQnVm
ZmVyLmgiCisjaW5jbHVkZSAiV2ViQXVkaW9CdWZmZXJMaXN0LmgiCisjaW5jbHVkZSA8Q29yZUF1
ZGlvL0NvcmVBdWRpb1R5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwordHlwZWRlZiBzdHJ1
Y3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlv
bjsKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUF1ZGlvQ29udmVydGVyKiBBdWRpb0NvbnZlcnRlclJl
ZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Qg
OiBwdWJsaWMgUmVmQ291bnRlZDxBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q+IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPEF1ZGlvU2FtcGxlQnVmZmVyTGlzdD4gY3JlYXRlKGNvbnN0IENBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbiYsIHNpemVfdCk7CisKKyAgICB+QXVkaW9TYW1wbGVCdWZmZXJMaXN0
KCk7CisKKyAgICBzdGF0aWMgaW5saW5lIHNpemVfdCBhdWRpb0J1ZmZlckxpc3RTaXplRm9yU3Ry
ZWFtKGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYpOworCisgICAgc3RhdGljIHZvaWQg
YXBwbHlHYWluKEF1ZGlvQnVmZmVyTGlzdCYsIGZsb2F0LCBBdWRpb1N0cmVhbURlc2NyaXB0aW9u
OjpQQ01Gb3JtYXQpOworICAgIHZvaWQgYXBwbHlHYWluKGZsb2F0KTsKKworICAgIE9TU3RhdHVz
IGNvcHlGcm9tKGNvbnN0IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCYsIHNpemVfdCBjb3VudCA9IFNJ
WkVfTUFYKTsKKyAgICBPU1N0YXR1cyBjb3B5RnJvbShjb25zdCBBdWRpb0J1ZmZlckxpc3QmLCBz
aXplX3QgZnJhbWVDb3VudCwgQXVkaW9Db252ZXJ0ZXJSZWYpOworICAgIE9TU3RhdHVzIGNvcHlG
cm9tKEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCYsIHNpemVfdCBmcmFtZUNvdW50LCBBdWRpb0NvbnZl
cnRlclJlZik7CisgICAgT1NTdGF0dXMgY29weUZyb20oQ0FSaW5nQnVmZmVyJiwgc2l6ZV90IGZy
YW1lQ291bnQsIHVpbnQ2NF90IHN0YXJ0RnJhbWUsIENBUmluZ0J1ZmZlcjo6RmV0Y2hNb2RlKTsK
KworICAgIE9TU3RhdHVzIG1peEZyb20oY29uc3QgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Jiwgc2l6
ZV90IGNvdW50ID0gU0laRV9NQVgpOworCisgICAgT1NTdGF0dXMgbWl4RnJvbShjb25zdCBBdWRp
b0J1ZmZlckxpc3QmLCBzaXplX3QgY291bnQgPSBTSVpFX01BWCk7CisgICAgT1NTdGF0dXMgY29w
eVRvKEF1ZGlvQnVmZmVyTGlzdCYsIHNpemVfdCBjb3VudCA9IFNJWkVfTUFYKTsKKworICAgIGNv
bnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgc3RyZWFtRGVzY3JpcHRpb24oKSBjb25z
dCB7IHJldHVybiBtX2ludGVybmFsRm9ybWF0LT5zdHJlYW1EZXNjcmlwdGlvbigpOyB9CisgICAg
Y29uc3QgV2ViQXVkaW9CdWZmZXJMaXN0JiBidWZmZXJMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9i
dWZmZXJMaXN0OyB9CisgICAgV2ViQXVkaW9CdWZmZXJMaXN0JiBidWZmZXJMaXN0KCkgeyByZXR1
cm4gbV9idWZmZXJMaXN0OyB9CisKKyAgICB1aW50MzJfdCBzYW1wbGVDYXBhY2l0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2FtcGxlQ2FwYWNpdHk7IH0KKyAgICB1aW50MzJfdCBzYW1wbGVDb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlQ291bnQ7IH0KKyAgICB2b2lkIHNldFNhbXBsZUNvdW50
KHNpemVfdCk7CisKKyAgICB1aW50NjRfdCB0aW1lc3RhbXAoKSBjb25zdCB7IHJldHVybiBtX3Rp
bWVzdGFtcDsgfQorICAgIGRvdWJsZSBob3N0VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1faG9zdFRp
bWU7IH0KKyAgICB2b2lkIHNldFRpbWVzKHVpbnQ2NF90IHRpbWUsIGRvdWJsZSBob3N0VGltZSkg
eyBtX3RpbWVzdGFtcCA9IHRpbWU7IG1faG9zdFRpbWUgPSBob3N0VGltZTsgfQorCisgICAgdm9p
ZCByZXNldCgpOworCisgICAgc3RhdGljIHZvaWQgemVyb0FCTChBdWRpb0J1ZmZlckxpc3QmLCBz
aXplX3QpOworICAgIHZvaWQgemVybygpOworCitwcm90ZWN0ZWQ6CisgICAgQXVkaW9TYW1wbGVC
dWZmZXJMaXN0KGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIHNpemVfdCk7CisKKyAg
ICBVbmlxdWVSZWY8Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPiBtX2ludGVybmFsRm9ybWF0Owor
CisgICAgdWludDY0X3QgbV90aW1lc3RhbXAgeyAwIH07CisgICAgZG91YmxlIG1faG9zdFRpbWUg
eyAtMSB9OworICAgIHNpemVfdCBtX3NhbXBsZUNvdW50IHsgMCB9OworICAgIHNpemVfdCBtX3Nh
bXBsZUNhcGFjaXR5IHsgMCB9OworICAgIHNpemVfdCBtX21heEJ1ZmZlclNpemVQZXJDaGFubmVs
IHsgMCB9OworICAgIHNpemVfdCBtX2J1ZmZlckxpc3RCYXNlU2l6ZSB7IDAgfTsKKyAgICBVbmlx
dWVSZWY8V2ViQXVkaW9CdWZmZXJMaXN0PiBtX2J1ZmZlckxpc3Q7Cit9OworCitpbmxpbmUgc2l6
ZV90IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6YXVkaW9CdWZmZXJMaXN0U2l6ZUZvclN0cmVhbShj
b25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIHJldHVy
biBvZmZzZXRvZihBdWRpb0J1ZmZlckxpc3QsIG1CdWZmZXJzKSArIChzaXplb2YoQXVkaW9CdWZm
ZXIpICogc3RkOjptYXg8dWludDMyX3Q+KDEsIGRlc2NyaXB0aW9uLm51bWJlck9mQ2hhbm5lbFN0
cmVhbXMoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vY29jb2EvQXVkaW9TYW1wbGVEYXRhU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZURhdGFTb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOTliOTRh
ZjE2MzcwMWRhZDVmMzNjZTIyNmIzMjAzNTM3YWVjODU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9TYW1wbGVEYXRhU291cmNlLmgK
QEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNs
dWRlICJBdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaCIKKyNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1
ZGlvVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvTG9nZ2VySGVscGVyLmg+CisjaW5jbHVkZSA8d3Rm
L01lZGlhVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
dHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlvbiAqQ01Gb3JtYXRE
ZXNjcmlwdGlvblJlZjsKK3R5cGVkZWYgc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyICpDTVNh
bXBsZUJ1ZmZlclJlZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQUF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb247CitjbGFzcyBDQVJpbmdCdWZmZXI7CisKK2NsYXNzIEF1ZGlvU2FtcGxl
RGF0YVNvdXJjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBdWRpb1NhbXBsZURhdGFT
b3VyY2UsIFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6Ok1haW5SdW5Mb29wPgorI2lmICFSRUxFQVNF
X0xPR19ESVNBQkxFRAorICAgICwgcHJpdmF0ZSBMb2dnZXJIZWxwZXIKKyNlbmRpZgorICAgIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4gY3JlYXRlKHNp
emVfdCwgV1RGOjpMb2dnZXJIZWxwZXImKTsKKworICAgIH5BdWRpb1NhbXBsZURhdGFTb3VyY2Uo
KTsKKworICAgIE9TU3RhdHVzIHNldElucHV0Rm9ybWF0KGNvbnN0IENBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbiYpOworICAgIE9TU3RhdHVzIHNldE91dHB1dEZvcm1hdChjb25zdCBDQUF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24mKTsKKworICAgIHZvaWQgcHVzaFNhbXBsZXMoY29uc3QgTWVkaWFUaW1l
JiwgY29uc3QgUGxhdGZvcm1BdWRpb0RhdGEmLCBzaXplX3QpOworICAgIHZvaWQgcHVzaFNhbXBs
ZXMoY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiwgQ01TYW1wbGVCdWZmZXJSZWYp
OworCisgICAgZW51bSBQdWxsTW9kZSB7IENvcHksIE1peCB9OworICAgIGJvb2wgcHVsbFNhbXBs
ZXMoQXVkaW9TYW1wbGVCdWZmZXJMaXN0Jiwgc2l6ZV90LCB1aW50NjRfdCwgZG91YmxlLCBQdWxs
TW9kZSk7CisgICAgYm9vbCBwdWxsU2FtcGxlcyhBdWRpb0J1ZmZlckxpc3QmLCBzaXplX3QsIHVp
bnQ2NF90LCBkb3VibGUsIFB1bGxNb2RlKTsKKworICAgIGJvb2wgcHVsbEF2YWxhaWJsZVNhbXBs
ZXNBc0NodW5rcyhBdWRpb0J1ZmZlckxpc3QmLCBzaXplX3QgZnJhbWVDb3VudCwgdWludDY0X3Qg
dGltZVN0YW1wLCBGdW5jdGlvbjx2b2lkKCk+JiYpOworCisgICAgdm9pZCBzZXRWb2x1bWUoZmxv
YXQgdm9sdW1lKSB7IG1fdm9sdW1lID0gdm9sdW1lOyB9CisgICAgZmxvYXQgdm9sdW1lKCkgY29u
c3QgeyByZXR1cm4gbV92b2x1bWU7IH0KKworICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCBtdXRlZCkg
eyBtX211dGVkID0gbXV0ZWQ7IH0KKyAgICBib29sIG11dGVkKCkgY29uc3QgeyByZXR1cm4gbV9t
dXRlZDsgfQorCisgICAgY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKiBpbnB1dERlc2Ny
aXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dERlc2NyaXB0aW9uLmdldCgpOyB9CisKKyNp
ZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fbG9nZ2VyOyB9CisgICAgY29uc3Qgdm9pZCogbG9nSWRlbnRpZmll
cigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbG9nSWRlbnRpZmllcjsgfQorICAgIHZvaWQgc2V0
TG9nZ2VyKFJlZjxjb25zdCBMb2dnZXI+JiYsIGNvbnN0IHZvaWQqKTsKKyNlbmRpZgorCisgICAg
c3RhdGljIGNvbnN0ZXhwciBmbG9hdCBFcXVpdmFsZW50VG9NYXhWb2x1bWUgPSAwLjk1OworCitw
cml2YXRlOgorICAgIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZShzaXplX3QsIExvZ2dlckhlbHBlciYp
OworCisgICAgT1NTdGF0dXMgc2V0dXBDb252ZXJ0ZXIoKTsKKyAgICBib29sIHB1bGxTYW1wbGVz
SW50ZXJuYWwoQXVkaW9CdWZmZXJMaXN0Jiwgc2l6ZV90JiwgdWludDY0X3QsIGRvdWJsZSwgUHVs
bE1vZGUpOworCisgICAgdm9pZCBwdXNoU2FtcGxlc0ludGVybmFsKGNvbnN0IEF1ZGlvQnVmZmVy
TGlzdCYsIGNvbnN0IE1lZGlhVGltZSYsIHNpemVfdCBmcmFtZUNvdW50KTsKKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+IG1faW5wdXREZXNjcmlwdGlvbjsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPiBtX291dHB1dERl
c2NyaXB0aW9uOworCisgICAgTWVkaWFUaW1lIGhvc3RUaW1lKCkgY29uc3Q7CisKKyNpZiAhUkVM
RUFTRV9MT0dfRElTQUJMRUQKKyAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiAiQXVkaW9TYW1wbGVEYXRhU291cmNlIjsgfQorICAgIFdURkxvZ0NoYW5u
ZWwmIGxvZ0NoYW5uZWwoKSBjb25zdCBmaW5hbDsKKyNlbmRpZgorCisgICAgdWludDY0X3QgbV9s
YXN0UHVzaGVkU2FtcGxlQ291bnQgeyAwIH07CisgICAgTWVkaWFUaW1lIG1fZXhwZWN0ZWROZXh0
UHVzaGVkU2FtcGxlVGltZSB7IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSB9OworCisgICAgTWVk
aWFUaW1lIG1faW5wdXRTYW1wbGVPZmZzZXQ7CisgICAgaW50NjRfdCBtX291dHB1dFNhbXBsZU9m
ZnNldCB7IDAgfTsKKworICAgIEF1ZGlvQ29udmVydGVyUmVmIG1fY29udmVydGVyOworICAgIFJl
ZlB0cjxBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q+IG1fc2NyYXRjaEJ1ZmZlcjsKKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxDQVJpbmdCdWZmZXI+IG1fcmluZ0J1ZmZlcjsKKyAgICBzaXplX3QgbV9tYXhp
bXVtU2FtcGxlQ291bnQgeyAwIH07CisKKyAgICBmbG9hdCBtX3ZvbHVtZSB7IDEuMCB9OworICAg
IGJvb2wgbV9tdXRlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX3Nob3VsZENvbXB1dGVPdXRwdXRT
YW1wbGVPZmZzZXQgeyB0cnVlIH07CisgICAgdWludDY0X3QgbV9lbmRGcmFtZVdoZW5Ob3RFbm91
Z2hEYXRhIHsgMCB9OworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgUmVmPGNvbnN0
IExvZ2dlcj4gbV9sb2dnZXI7CisgICAgY29uc3Qgdm9pZCogbV9sb2dJZGVudGlmaWVyOworI2Vu
ZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVE
SUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29j
b2EvQXVkaW9TYW1wbGVEYXRhU291cmNlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vY29jb2EvQXVkaW9TYW1wbGVEYXRhU291cmNlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczMmM3MjE2ZDRj
YzBiMTdlMDJiMjY5NDBhYzM2OGFhYjI3MTA3NTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZURhdGFTb3VyY2UubW0KQEAg
LTAsMCArMSwzODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5o
IgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2ltcG9ydCAiQ0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uLmgiCisjaW1wb3J0ICJDQVJpbmdCdWZmZXIuaCIKKyNpbXBvcnQgIkxvZ2dpbmcu
aCIKKyNpbXBvcnQgIk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgiCisjaW1wb3J0IDxBdWRpb1Rv
b2xib3gvQXVkaW9Db252ZXJ0ZXIuaD4KKyNpbXBvcnQgPG1hY2gvbWFjaC5oPgorI2ltcG9ydCA8
bWFjaC9tYWNoX3RpbWUuaD4KKyNpbXBvcnQgPG11dGV4PgorI2ltcG9ydCA8cGFsL2F2Zm91bmRh
dGlvbi9NZWRpYVRpbWVBVkZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPHN5c2xvZy5oPgorI2ltcG9y
dCA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisKKyNpbXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFT
b2Z0TGluay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgUEFMOwor
dXNpbmcgbmFtZXNwYWNlIEpTQzsKKworUmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4gQXVkaW9T
YW1wbGVEYXRhU291cmNlOjpjcmVhdGUoc2l6ZV90IG1heGltdW1TYW1wbGVDb3VudCwgTG9nZ2Vy
SGVscGVyJiBsb2dnZXJIZWxwZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXVkaW9T
YW1wbGVEYXRhU291cmNlKG1heGltdW1TYW1wbGVDb3VudCwgbG9nZ2VySGVscGVyKSk7Cit9CisK
K0F1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlKHNpemVfdCBtYXhp
bXVtU2FtcGxlQ291bnQsIExvZ2dlckhlbHBlciYgbG9nZ2VySGVscGVyKQorICAgIDogbV9pbnB1
dFNhbXBsZU9mZnNldChNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkpCisgICAgLCBtX21heGltdW1T
YW1wbGVDb3VudChtYXhpbXVtU2FtcGxlQ291bnQpCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
CisgICAgLCBtX2xvZ2dlcihsb2dnZXJIZWxwZXIubG9nZ2VyKCkpCisgICAgLCBtX2xvZ0lkZW50
aWZpZXIobG9nZ2VySGVscGVyLmxvZ0lkZW50aWZpZXIoKSkKKyNlbmRpZgoreworI2lmIFJFTEVB
U0VfTE9HX0RJU0FCTEVECisgICAgVU5VU0VEX1BBUkFNKGxvZ2dlckhlbHBlcik7CisjZW5kaWYK
K30KKworQXVkaW9TYW1wbGVEYXRhU291cmNlOjp+QXVkaW9TYW1wbGVEYXRhU291cmNlKCkKK3sK
KyAgICBtX2lucHV0RGVzY3JpcHRpb24gPSBudWxscHRyOworICAgIG1fb3V0cHV0RGVzY3JpcHRp
b24gPSBudWxscHRyOworICAgIG1fcmluZ0J1ZmZlciA9IG51bGxwdHI7CisgICAgaWYgKG1fY29u
dmVydGVyKSB7CisgICAgICAgIEF1ZGlvQ29udmVydGVyRGlzcG9zZShtX2NvbnZlcnRlcik7Cisg
ICAgICAgIG1fY29udmVydGVyID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK09TU3RhdHVzIEF1ZGlv
U2FtcGxlRGF0YVNvdXJjZTo6c2V0dXBDb252ZXJ0ZXIoKQoreworICAgIEFTU0VSVChtX2lucHV0
RGVzY3JpcHRpb24gJiYgbV9vdXRwdXREZXNjcmlwdGlvbik7CisKKyAgICBpZiAobV9jb252ZXJ0
ZXIpIHsKKyAgICAgICAgQXVkaW9Db252ZXJ0ZXJEaXNwb3NlKG1fY29udmVydGVyKTsKKyAgICAg
ICAgbV9jb252ZXJ0ZXIgPSBudWxscHRyOworICAgIH0KKworICAgIGlmICgqbV9pbnB1dERlc2Ny
aXB0aW9uID09ICptX291dHB1dERlc2NyaXB0aW9uKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IE9TU3RhdHVzIGVyciA9IEF1ZGlvQ29udmVydGVyTmV3KCZtX2lucHV0RGVzY3JpcHRpb24tPnN0
cmVhbURlc2NyaXB0aW9uKCksICZtX291dHB1dERlc2NyaXB0aW9uLT5zdHJlYW1EZXNjcmlwdGlv
bigpLCAmbV9jb252ZXJ0ZXIpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmUHRyKCp0aGlzKSwgZXJyXSB7CisgICAgICAgICAgICBFUlJPUl9MT0coIkF1ZGlvQ29udmVy
dGVyTmV3IHJldHVybmVkIGVycm9yICIsIGVycik7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IHJldHVybiBlcnI7CisKK30KKworT1NTdGF0dXMgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpzZXRJ
bnB1dEZvcm1hdChjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGZvcm1hdCkKK3sKKyAg
ICBBU1NFUlQoZm9ybWF0LnNhbXBsZVJhdGUoKSA+PSAwKTsKKworICAgIG1faW5wdXREZXNjcmlw
dGlvbiA9IG1ha2VVbmlxdWU8Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPihmb3JtYXQpOworICAg
IGlmIChtX291dHB1dERlc2NyaXB0aW9uKQorICAgICAgICByZXR1cm4gc2V0dXBDb252ZXJ0ZXIo
KTsKKworICAgIHJldHVybiAwOworfQorCitPU1N0YXR1cyBBdWRpb1NhbXBsZURhdGFTb3VyY2U6
OnNldE91dHB1dEZvcm1hdChjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGZvcm1hdCkK
K3sKKyAgICBBU1NFUlQobV9pbnB1dERlc2NyaXB0aW9uKTsKKyAgICBBU1NFUlQoZm9ybWF0LnNh
bXBsZVJhdGUoKSA+PSAwKTsKKworICAgIG1fb3V0cHV0RGVzY3JpcHRpb24gPSBtYWtlVW5pcXVl
PENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbj4oZm9ybWF0KTsKKyAgICBpZiAoIW1fcmluZ0J1ZmZl
cikKKyAgICAgICAgbV9yaW5nQnVmZmVyID0gbWFrZVVuaXF1ZTxDQVJpbmdCdWZmZXI+KCk7CisK
KyAgICBtX3JpbmdCdWZmZXItPmFsbG9jYXRlKGZvcm1hdCwgc3RhdGljX2Nhc3Q8c2l6ZV90Piht
X21heGltdW1TYW1wbGVDb3VudCkpOworICAgIG1fc2NyYXRjaEJ1ZmZlciA9IEF1ZGlvU2FtcGxl
QnVmZmVyTGlzdDo6Y3JlYXRlKG1fb3V0cHV0RGVzY3JpcHRpb24tPnN0cmVhbURlc2NyaXB0aW9u
KCksIG1fbWF4aW11bVNhbXBsZUNvdW50KTsKKworICAgIHJldHVybiBzZXR1cENvbnZlcnRlcigp
OworfQorCitNZWRpYVRpbWUgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpob3N0VGltZSgpIGNvbnN0
Cit7CisgICAgLy8gQmFzZWQgb24gbGlzdGluZyAjMiBmcm9tIEFwcGxlIFRlY2huaWNhbCBRJkEg
UUExMzk4LCBtb2RpZmllZCB0byBiZSB0aHJlYWQtc2FmZS4KKyAgICBzdGF0aWMgZG91YmxlIGZy
ZXF1ZW5jeTsKKyAgICBzdGF0aWMgbWFjaF90aW1lYmFzZV9pbmZvX2RhdGFfdCB0aW1lYmFzZUlu
Zm87CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVUaW1lck9uY2VGbGFnOwor
ICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVUaW1lck9uY2VGbGFnLCBbXSB7CisgICAgICAg
IGtlcm5fcmV0dXJuX3Qga3IgPSBtYWNoX3RpbWViYXNlX2luZm8oJnRpbWViYXNlSW5mbyk7Cisg
ICAgICAgIGZyZXF1ZW5jeSA9IDFlLTkgKiBzdGF0aWNfY2FzdDxkb3VibGU+KHRpbWViYXNlSW5m
by5udW1lcikgLyBzdGF0aWNfY2FzdDxkb3VibGU+KHRpbWViYXNlSW5mby5kZW5vbSk7CisgICAg
ICAgIEFTU0VSVF9VTlVTRUQoa3IsIGtyID09IEtFUk5fU1VDQ0VTUyk7CisgICAgICAgIEFTU0VS
VCh0aW1lYmFzZUluZm8uZGVub20pOworICAgIH0pOworCisgICAgcmV0dXJuIE1lZGlhVGltZTo6
Y3JlYXRlV2l0aERvdWJsZShtYWNoX2Fic29sdXRlX3RpbWUoKSAqIGZyZXF1ZW5jeSk7Cit9CisK
K3ZvaWQgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpwdXNoU2FtcGxlc0ludGVybmFsKGNvbnN0IEF1
ZGlvQnVmZmVyTGlzdCYgYnVmZmVyTGlzdCwgY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25U
aW1lLCBzaXplX3Qgc2FtcGxlQ291bnQpCit7CisgICAgTWVkaWFUaW1lIHNhbXBsZVRpbWUgPSBw
cmVzZW50YXRpb25UaW1lOworCisgICAgY29uc3QgQXVkaW9CdWZmZXJMaXN0KiBzYW1wbGVCdWZm
ZXJMaXN0OworICAgIGlmIChtX2NvbnZlcnRlcikgeworICAgICAgICBtX3NjcmF0Y2hCdWZmZXIt
PnJlc2V0KCk7CisgICAgICAgIE9TU3RhdHVzIGVyciA9IG1fc2NyYXRjaEJ1ZmZlci0+Y29weUZy
b20oYnVmZmVyTGlzdCwgc2FtcGxlQ291bnQsIG1fY29udmVydGVyKTsKKyAgICAgICAgaWYgKGVy
cikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzYW1wbGVCdWZmZXJMaXN0ID0gbV9z
Y3JhdGNoQnVmZmVyLT5idWZmZXJMaXN0KCkubGlzdCgpOworICAgICAgICBzYW1wbGVDb3VudCA9
IG1fc2NyYXRjaEJ1ZmZlci0+c2FtcGxlQ291bnQoKTsKKyAgICAgICAgc2FtcGxlVGltZSA9IHBy
ZXNlbnRhdGlvblRpbWUudG9UaW1lU2NhbGUobV9vdXRwdXREZXNjcmlwdGlvbi0+c2FtcGxlUmF0
ZSgpLCBNZWRpYVRpbWU6OlJvdW5kaW5nRmxhZ3M6OlRvd2FyZFplcm8pOworICAgIH0gZWxzZQor
ICAgICAgICBzYW1wbGVCdWZmZXJMaXN0ID0gJmJ1ZmZlckxpc3Q7CisKKyAgICBpZiAobV9leHBl
Y3RlZE5leHRQdXNoZWRTYW1wbGVUaW1lLmlzVmFsaWQoKSAmJiBhYnMobV9leHBlY3RlZE5leHRQ
dXNoZWRTYW1wbGVUaW1lIC0gc2FtcGxlVGltZSkudGltZVZhbHVlKCkgPT0gMSkKKyAgICAgICAg
c2FtcGxlVGltZSA9IG1fZXhwZWN0ZWROZXh0UHVzaGVkU2FtcGxlVGltZTsKKyAgICBtX2V4cGVj
dGVkTmV4dFB1c2hlZFNhbXBsZVRpbWUgPSBzYW1wbGVUaW1lICsgTWVkaWFUaW1lKHNhbXBsZUNv
dW50LCBzYW1wbGVUaW1lLnRpbWVTY2FsZSgpKTsKKworICAgIGlmIChtX2lucHV0U2FtcGxlT2Zm
c2V0ID09IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkgeworICAgICAgICBtX2lucHV0U2FtcGxl
T2Zmc2V0ID0gTWVkaWFUaW1lKDEgLSBzYW1wbGVUaW1lLnRpbWVWYWx1ZSgpLCBzYW1wbGVUaW1l
LnRpbWVTY2FsZSgpKTsKKyAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgW2xvZ0lkZW50aWZpZXIgPSBMT0dJREVOVElGSUVSLCBpbnB1dFNhbXBsZU9mZnNl
dCA9IG1faW5wdXRTYW1wbGVPZmZzZXQudGltZVZhbHVlKCksIG1heGltdW1TYW1wbGVDb3VudCA9
IG1fbWF4aW11bVNhbXBsZUNvdW50LCB0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZlB0cigq
dGhpcyldIHsKKyAgICAgICAgICAgIEFMV0FZU19MT0cobG9nSWRlbnRpZmllciwgImlucHV0IHNh
bXBsZSBvZmZzZXQgaXMgIiwgaW5wdXRTYW1wbGVPZmZzZXQsICIsIG1heGltdW1TYW1wbGVDb3Vu
dCBpcyAiLCBtYXhpbXVtU2FtcGxlQ291bnQpOworICAgICAgICB9KTsKKyAgICB9CisgICAgc2Ft
cGxlVGltZSArPSBtX2lucHV0U2FtcGxlT2Zmc2V0OworCisjaWYgIUxPR19ESVNBQkxFRAorICAg
IHVpbnQ2NF90IHN0YXJ0RnJhbWUxID0gMDsKKyAgICB1aW50NjRfdCBlbmRGcmFtZTEgPSAwOwor
ICAgIG1fcmluZ0J1ZmZlci0+Z2V0Q3VycmVudEZyYW1lQm91bmRzKHN0YXJ0RnJhbWUxLCBlbmRG
cmFtZTEpOworI2VuZGlmCisKKyAgICBtX3JpbmdCdWZmZXItPnN0b3JlKHNhbXBsZUJ1ZmZlckxp
c3QsIHNhbXBsZUNvdW50LCBzYW1wbGVUaW1lLnRpbWVWYWx1ZSgpKTsKKyAgICBtX2xhc3RQdXNo
ZWRTYW1wbGVDb3VudCA9IHNhbXBsZUNvdW50OworfQorCit2b2lkIEF1ZGlvU2FtcGxlRGF0YVNv
dXJjZTo6cHVzaFNhbXBsZXMoY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBzYW1w
bGVEZXNjcmlwdGlvbiwgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyKQoreworICAgIEFT
U0VSVF9VTlVTRUQoc2FtcGxlRGVzY3JpcHRpb24sICptX2lucHV0RGVzY3JpcHRpb24gPT0gc2Ft
cGxlRGVzY3JpcHRpb24pOworICAgIEFTU0VSVChtX3JpbmdCdWZmZXIpOworICAgIAorICAgIFdl
YkF1ZGlvQnVmZmVyTGlzdCBsaXN0KCptX2lucHV0RGVzY3JpcHRpb24sIHNhbXBsZUJ1ZmZlcik7
CisgICAgcHVzaFNhbXBsZXNJbnRlcm5hbChsaXN0LCBQQUw6OnRvTWVkaWFUaW1lKFBBTDo6Q01T
YW1wbGVCdWZmZXJHZXRQcmVzZW50YXRpb25UaW1lU3RhbXAoc2FtcGxlQnVmZmVyKSksIFBBTDo6
Q01TYW1wbGVCdWZmZXJHZXROdW1TYW1wbGVzKHNhbXBsZUJ1ZmZlcikpOworfQorCit2b2lkIEF1
ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVzaFNhbXBsZXMoY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVU
aW1lLCBjb25zdCBQbGF0Zm9ybUF1ZGlvRGF0YSYgYXVkaW9EYXRhLCBzaXplX3Qgc2FtcGxlQ291
bnQpCit7CisgICAgQVNTRVJUKGlzPFdlYkF1ZGlvQnVmZmVyTGlzdD4oYXVkaW9EYXRhKSk7Cisg
ICAgcHVzaFNhbXBsZXNJbnRlcm5hbCgqZG93bmNhc3Q8V2ViQXVkaW9CdWZmZXJMaXN0PihhdWRp
b0RhdGEpLmxpc3QoKSwgc2FtcGxlVGltZSwgc2FtcGxlQ291bnQpOworfQorCitzdGF0aWMgaW5s
aW5lIGludDY0X3QgY29tcHV0ZU9mZnNldERlbGF5KGRvdWJsZSBzYW1wbGVSYXRlLCB1aW50NjRf
dCBsYXN0UHVzaGVkU2FtcGxlQ291bnQpCit7CisgICAgY29uc3QgZG91YmxlIHR3ZW50eU1TID0g
LjAyOworICAgIGNvbnN0IGRvdWJsZSB0ZW5NUyA9IC4wMTsKKyAgICBjb25zdCBkb3VibGUgZml2
ZU1TID0gLjAwNTsKKworICAgIGlmIChsYXN0UHVzaGVkU2FtcGxlQ291bnQgPiBzYW1wbGVSYXRl
ICogdHdlbnR5TVMpCisgICAgICAgIHJldHVybiBzYW1wbGVSYXRlICogdHdlbnR5TVM7CisgICAg
aWYgKGxhc3RQdXNoZWRTYW1wbGVDb3VudCA+IHNhbXBsZVJhdGUgKiB0ZW5NUykKKyAgICAgICAg
cmV0dXJuIHNhbXBsZVJhdGUgKiB0ZW5NUzsKKyAgICBpZiAobGFzdFB1c2hlZFNhbXBsZUNvdW50
ID4gc2FtcGxlUmF0ZSAqIGZpdmVNUykKKyAgICAgICAgcmV0dXJuIHNhbXBsZVJhdGUgKiBmaXZl
TVM7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpwdWxs
U2FtcGxlc0ludGVybmFsKEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyLCBzaXplX3QmIHNhbXBsZUNv
dW50LCB1aW50NjRfdCB0aW1lU3RhbXAsIGRvdWJsZSAvKmhvc3RUaW1lKi8sIFB1bGxNb2RlIG1v
ZGUpCit7CisgICAgc2l6ZV90IGJ5dGVDb3VudCA9IHNhbXBsZUNvdW50ICogbV9vdXRwdXREZXNj
cmlwdGlvbi0+Ynl0ZXNQZXJGcmFtZSgpOworCisgICAgQVNTRVJUKGJ1ZmZlci5tTnVtYmVyQnVm
ZmVycyA9PSBtX3JpbmdCdWZmZXItPmNoYW5uZWxDb3VudCgpKTsKKyAgICBpZiAoYnVmZmVyLm1O
dW1iZXJCdWZmZXJzICE9IG1fcmluZ0J1ZmZlci0+Y2hhbm5lbENvdW50KCkpIHsKKyAgICAgICAg
QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGJ1ZmZlciwgYnl0ZUNvdW50KTsKKyAgICAg
ICAgc2FtcGxlQ291bnQgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
aWYgKCFtX3JpbmdCdWZmZXIgfHwgbV9tdXRlZCB8fCBtX2lucHV0U2FtcGxlT2Zmc2V0ID09IE1l
ZGlhVGltZTo6aW52YWxpZFRpbWUoKSkgeworICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6
Onplcm9BQkwoYnVmZmVyLCBieXRlQ291bnQpOworICAgICAgICBzYW1wbGVDb3VudCA9IDA7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB1aW50NjRfdCBzdGFydEZyYW1lID0g
MDsKKyAgICB1aW50NjRfdCBlbmRGcmFtZSA9IDA7CisgICAgbV9yaW5nQnVmZmVyLT5nZXRDdXJy
ZW50RnJhbWVCb3VuZHMoc3RhcnRGcmFtZSwgZW5kRnJhbWUpOworCisgICAgaWYgKG1fc2hvdWxk
Q29tcHV0ZU91dHB1dFNhbXBsZU9mZnNldCkgeworICAgICAgICB1aW50NjRfdCBidWZmZXJlZCA9
IGVuZEZyYW1lIC0gc3RhcnRGcmFtZTsKKyAgICAgICAgaWYgKGJ1ZmZlcmVkIDwgc2FtcGxlQ291
bnQgKiAyIHx8IChtX2VuZEZyYW1lV2hlbk5vdEVub3VnaERhdGEgJiYgbV9lbmRGcmFtZVdoZW5O
b3RFbm91Z2hEYXRhID09IGVuZEZyYW1lKSkgeworICAgICAgICAgICAgQXVkaW9TYW1wbGVCdWZm
ZXJMaXN0Ojp6ZXJvQUJMKGJ1ZmZlciwgYnl0ZUNvdW50KTsKKyAgICAgICAgICAgIHNhbXBsZUNv
dW50ID0gMDsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAg
IG1fc2hvdWxkQ29tcHV0ZU91dHB1dFNhbXBsZU9mZnNldCA9IGZhbHNlOworICAgICAgICBtX2Vu
ZEZyYW1lV2hlbk5vdEVub3VnaERhdGEgPSAwOworCisgICAgICAgIG1fb3V0cHV0U2FtcGxlT2Zm
c2V0ID0gKGVuZEZyYW1lIC0gc2FtcGxlQ291bnQpIC0gdGltZVN0YW1wOworICAgICAgICBtX291
dHB1dFNhbXBsZU9mZnNldCAtPSBjb21wdXRlT2Zmc2V0RGVsYXkobV9vdXRwdXREZXNjcmlwdGlv
bi0+c2FtcGxlUmF0ZSgpLCBtX2xhc3RQdXNoZWRTYW1wbGVDb3VudCk7CisgICAgICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtsb2dJZGVudGlmaWVyID0gTE9H
SURFTlRJRklFUiwgb3V0cHV0U2FtcGxlT2Zmc2V0ID0gbV9vdXRwdXRTYW1wbGVPZmZzZXQsIHRo
aXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmUHRyKCp0aGlzKV0geworICAgICAgICAgICAgQUxX
QVlTX0xPRyhsb2dJZGVudGlmaWVyLCAic2V0dGluZyBuZXcgb2Zmc2V0IHRvICIsIG91dHB1dFNh
bXBsZU9mZnNldCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHRpbWVTdGFtcCArPSBtX291
dHB1dFNhbXBsZU9mZnNldDsKKworICAgIGlmICh0aW1lU3RhbXAgPCBzdGFydEZyYW1lIHx8IHRp
bWVTdGFtcCArIHNhbXBsZUNvdW50ID4gZW5kRnJhbWUpIHsKKyAgICAgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW2xvZ0lkZW50aWZpZXIgPSBMT0dJREVOVElG
SUVSLCB0aW1lU3RhbXAsIHN0YXJ0RnJhbWUsIGVuZEZyYW1lLCBzYW1wbGVDb3VudCwgb3V0cHV0
U2FtcGxlT2Zmc2V0ID0gbV9vdXRwdXRTYW1wbGVPZmZzZXQsIHRoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmUHRyKCp0aGlzKV0geworICAgICAgICAgICAgRVJST1JfTE9HKGxvZ0lkZW50aWZp
ZXIsICJub3QgZW5vdWdoIGRhdGEsIHNhbXBsZSAiLCB0aW1lU3RhbXAsICIgd2l0aCBvZmZzZXQg
Iiwgb3V0cHV0U2FtcGxlT2Zmc2V0LCAiLCB0cnlpbmcgdG8gZ2V0ICIsIHNhbXBsZUNvdW50LCAi
IHNhbXBsZXMsIGJ1dCBub3QgY29tcGxldGVseSBpbiByYW5nZSBbIiwgc3RhcnRGcmFtZSwgIiAu
LiAiLCBlbmRGcmFtZSwgIl0iKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaWYgKHRpbWVTdGFt
cCA8IHN0YXJ0RnJhbWUgfHwgdGltZVN0YW1wID49IGVuZEZyYW1lKSB7CisgICAgICAgICAgICAv
LyBXZSBhcmUgb3V0IG9mIHRoZSB3aW5kb3csIGxldCdzIHJlc3RhcnQgdGhlIG9mZnNldCBjb21w
dXRhdGlvbi4KKyAgICAgICAgICAgIG1fc2hvdWxkQ29tcHV0ZU91dHB1dFNhbXBsZU9mZnNldCA9
IHRydWU7CisKKyAgICAgICAgICAgIGlmICh0aW1lU3RhbXAgPj0gZW5kRnJhbWUpCisgICAgICAg
ICAgICAgICAgbV9lbmRGcmFtZVdoZW5Ob3RFbm91Z2hEYXRhID0gZW5kRnJhbWU7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBhcmUgdG9vIGNsb3NlIGZyb20gZW5kRnJhbWUs
IGxldCdzIGJhY2sgdXAgYSBsaXR0bGUgYml0LgorICAgICAgICAgICAgdWludDY0X3QgZnJhbWVz
QXZhaWxhYmxlID0gZW5kRnJhbWUgLSB0aW1lU3RhbXA7CisgICAgICAgICAgICBtX291dHB1dFNh
bXBsZU9mZnNldCAtPSBzYW1wbGVDb3VudCAtIGZyYW1lc0F2YWlsYWJsZTsKKyAgICAgICAgICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtsb2dJZGVudGlmaWVy
ID0gTE9HSURFTlRJRklFUiwgb3V0cHV0U2FtcGxlT2Zmc2V0ID0gbV9vdXRwdXRTYW1wbGVPZmZz
ZXQsIHRoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmUHRyKCp0aGlzKV0geworICAgICAgICAg
ICAgICAgIEFMV0FZU19MT0cobG9nSWRlbnRpZmllciwgInVwZGF0aW5nIG9mZnNldCB0byAiLCBv
dXRwdXRTYW1wbGVPZmZzZXQpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAg
QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGJ1ZmZlciwgYnl0ZUNvdW50KTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChtb2RlID09IENvcHkpIHsKKyAgICAg
ICAgbV9yaW5nQnVmZmVyLT5mZXRjaCgmYnVmZmVyLCBzYW1wbGVDb3VudCwgdGltZVN0YW1wLCBD
QVJpbmdCdWZmZXI6OkNvcHkpOworICAgICAgICBpZiAobV92b2x1bWUgPCBFcXVpdmFsZW50VG9N
YXhWb2x1bWUpCisgICAgICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmFwcGx5R2Fpbihi
dWZmZXIsIG1fdm9sdW1lLCBtX291dHB1dERlc2NyaXB0aW9uLT5mb3JtYXQoKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChtX3ZvbHVtZSA+PSBFcXVpdmFsZW50VG9N
YXhWb2x1bWUpIHsKKyAgICAgICAgbV9yaW5nQnVmZmVyLT5mZXRjaCgmYnVmZmVyLCBzYW1wbGVD
b3VudCwgdGltZVN0YW1wLCBDQVJpbmdCdWZmZXI6Ok1peCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGlmIChtX3NjcmF0Y2hCdWZmZXItPmNvcHlGcm9tKCptX3JpbmdCdWZm
ZXIuZ2V0KCksIHNhbXBsZUNvdW50LCB0aW1lU3RhbXAsIENBUmluZ0J1ZmZlcjo6Q29weSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fc2NyYXRjaEJ1ZmZlci0+YXBwbHlHYWluKG1f
dm9sdW1lKTsKKyAgICBtX3NjcmF0Y2hCdWZmZXItPm1peEZyb20oYnVmZmVyLCBzYW1wbGVDb3Vu
dCk7CisgICAgaWYgKG1fc2NyYXRjaEJ1ZmZlci0+Y29weVRvKGJ1ZmZlciwgc2FtcGxlQ291bnQp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBB
dWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1bGxBdmFsYWlibGVTYW1wbGVzQXNDaHVua3MoQXVkaW9C
dWZmZXJMaXN0JiBidWZmZXIsIHNpemVfdCBzYW1wbGVDb3VudFBlckNodW5rLCB1aW50NjRfdCB0
aW1lU3RhbXAsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb25zdW1lRmlsbGVkQnVmZmVyKQoreworICAg
IGlmICghbV9yaW5nQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQo
YnVmZmVyLm1OdW1iZXJCdWZmZXJzID09IG1fcmluZ0J1ZmZlci0+Y2hhbm5lbENvdW50KCkpOwor
ICAgIGlmIChidWZmZXIubU51bWJlckJ1ZmZlcnMgIT0gbV9yaW5nQnVmZmVyLT5jaGFubmVsQ291
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdWludDY0X3Qgc3RhcnRGcmFtZSA9
IDA7CisgICAgdWludDY0X3QgZW5kRnJhbWUgPSAwOworICAgIG1fcmluZ0J1ZmZlci0+Z2V0Q3Vy
cmVudEZyYW1lQm91bmRzKHN0YXJ0RnJhbWUsIGVuZEZyYW1lKTsKKyAgICBpZiAobV9zaG91bGRD
b21wdXRlT3V0cHV0U2FtcGxlT2Zmc2V0KSB7CisgICAgICAgIG1fb3V0cHV0U2FtcGxlT2Zmc2V0
ID0gdGltZVN0YW1wICsgKGVuZEZyYW1lIC0gc2FtcGxlQ291bnRQZXJDaHVuayk7CisgICAgICAg
IG1fc2hvdWxkQ29tcHV0ZU91dHB1dFNhbXBsZU9mZnNldCA9IGZhbHNlOworICAgIH0KKworICAg
IHRpbWVTdGFtcCArPSBtX291dHB1dFNhbXBsZU9mZnNldDsKKworICAgIGlmICh0aW1lU3RhbXAg
PCBzdGFydEZyYW1lKQorICAgICAgICB0aW1lU3RhbXAgPSBzdGFydEZyYW1lOworCisgICAgc3Rh
cnRGcmFtZSA9IHRpbWVTdGFtcDsKKworICAgIGlmIChtX211dGVkKSB7CisgICAgICAgIEF1ZGlv
U2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChidWZmZXIsIHNhbXBsZUNvdW50UGVyQ2h1bmsgKiBt
X291dHB1dERlc2NyaXB0aW9uLT5ieXRlc1BlckZyYW1lKCkpOworICAgICAgICB3aGlsZSAoZW5k
RnJhbWUgLSBzdGFydEZyYW1lID49IHNhbXBsZUNvdW50UGVyQ2h1bmspIHsKKyAgICAgICAgICAg
IGNvbnN1bWVGaWxsZWRCdWZmZXIoKTsKKyAgICAgICAgICAgIHN0YXJ0RnJhbWUgKz0gc2FtcGxl
Q291bnRQZXJDaHVuazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICB3aGlsZSAoZW5kRnJhbWUgLSBzdGFydEZyYW1lID49IHNhbXBsZUNvdW50UGVyQ2h1bmsp
IHsKKyAgICAgICAgaWYgKG1fcmluZ0J1ZmZlci0+ZmV0Y2goJmJ1ZmZlciwgc2FtcGxlQ291bnRQ
ZXJDaHVuaywgc3RhcnRGcmFtZSwgQ0FSaW5nQnVmZmVyOjpDb3B5KSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgY29uc3VtZUZpbGxlZEJ1ZmZlcigpOworICAgICAgICBzdGFy
dEZyYW1lICs9IHNhbXBsZUNvdW50UGVyQ2h1bms7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVsbFNhbXBsZXMoQXVkaW9CdWZmZXJM
aXN0JiBidWZmZXIsIHNpemVfdCBzYW1wbGVDb3VudCwgdWludDY0X3QgdGltZVN0YW1wLCBkb3Vi
bGUgaG9zdFRpbWUsIFB1bGxNb2RlIG1vZGUpCit7CisgICAgaWYgKCFtX3JpbmdCdWZmZXIpIHsK
KyAgICAgICAgc2l6ZV90IGJ5dGVDb3VudCA9IHNhbXBsZUNvdW50ICogbV9vdXRwdXREZXNjcmlw
dGlvbi0+Ynl0ZXNQZXJGcmFtZSgpOworICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onpl
cm9BQkwoYnVmZmVyLCBieXRlQ291bnQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHB1bGxTYW1wbGVzSW50ZXJuYWwoYnVmZmVyLCBzYW1wbGVDb3VudCwgdGlt
ZVN0YW1wLCBob3N0VGltZSwgbW9kZSk7Cit9CisKK2Jvb2wgQXVkaW9TYW1wbGVEYXRhU291cmNl
OjpwdWxsU2FtcGxlcyhBdWRpb1NhbXBsZUJ1ZmZlckxpc3QmIGJ1ZmZlciwgc2l6ZV90IHNhbXBs
ZUNvdW50LCB1aW50NjRfdCB0aW1lU3RhbXAsIGRvdWJsZSBob3N0VGltZSwgUHVsbE1vZGUgbW9k
ZSkKK3sKKyAgICBpZiAoIW1fcmluZ0J1ZmZlcikgeworICAgICAgICBidWZmZXIuemVybygpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFwdWxsU2FtcGxlc0ludGVy
bmFsKGJ1ZmZlci5idWZmZXJMaXN0KCksIHNhbXBsZUNvdW50LCB0aW1lU3RhbXAsIGhvc3RUaW1l
LCBtb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYnVmZmVyLnNldFRpbWVzKHRp
bWVTdGFtcCwgaG9zdFRpbWUpOworICAgIGJ1ZmZlci5zZXRTYW1wbGVDb3VudChzYW1wbGVDb3Vu
dCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAor
dm9pZCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnNldExvZ2dlcihSZWY8Y29uc3QgTG9nZ2VyPiYm
IGxvZ2dlciwgY29uc3Qgdm9pZCogbG9nSWRlbnRpZmllcikKK3sKKyAgICBtX2xvZ2dlciA9IFdU
Rk1vdmUobG9nZ2VyKTsKKyAgICBtX2xvZ0lkZW50aWZpZXIgPSBsb2dJZGVudGlmaWVyOworfQor
CitXVEZMb2dDaGFubmVsJiBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OmxvZ0NoYW5uZWwoKSBjb25z
dAoreworICAgIHJldHVybiBMb2dXZWJSVEM7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkM2JjN2Q2YjNlMDAzOGY4ZTczOGNkMDMwYTky
NTY2MTYzMjg2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwCkBAIC0wLDAgKzEsMTU3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbjo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKCkKKyAgICA6IG1fc3RyZWFtRGVz
Y3JpcHRpb24oeyB9KQoreworfQorICAgIAorQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjp+Q0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uKCkgPSBkZWZhdWx0OworCitDQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb246OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVz
Y3JpcHRpb24gJmRlc2MpCisgICAgOiBtX3N0cmVhbURlc2NyaXB0aW9uKGRlc2MpCit7Cit9CisK
K0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKGRvdWJs
ZSBzYW1wbGVSYXRlLCB1aW50MzJfdCBudW1DaGFubmVscywgUENNRm9ybWF0IGZvcm1hdCwgYm9v
bCBpc0ludGVybGVhdmVkKQoreworICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdElEID0g
a0F1ZGlvRm9ybWF0TGluZWFyUENNOworICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubVNhbXBsZVJh
dGUgPSBzYW1wbGVSYXRlOworICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubUZyYW1lc1BlclBhY2tl
dCA9IDE7CisgICAgbV9zdHJlYW1EZXNjcmlwdGlvbi5tQ2hhbm5lbHNQZXJGcmFtZSA9IG51bUNo
YW5uZWxzOworICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVyRnJhbWUgPSAwOworICAg
IG1fc3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVyUGFja2V0ID0gMDsKKyAgICBtX3N0cmVhbURl
c2NyaXB0aW9uLm1Gb3JtYXRGbGFncyA9IGtBdWRpb0Zvcm1hdEZsYWdzTmF0aXZlRW5kaWFuIHwg
a0F1ZGlvRm9ybWF0RmxhZ0lzUGFja2VkOworICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubVJlc2Vy
dmVkID0gMDsKKworICAgIGludCB3b3Jkc2l6ZTsKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAg
IGNhc2UgSW50MTY6CisgICAgICAgIHdvcmRzaXplID0gMjsKKyAgICAgICAgbV9zdHJlYW1EZXNj
cmlwdGlvbi5tRm9ybWF0RmxhZ3MgfD0ga0F1ZGlvRm9ybWF0RmxhZ0lzU2lnbmVkSW50ZWdlcjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgd29yZHNpemUgPSA0Owor
ICAgICAgICBtX3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFncyB8PSBrQXVkaW9Gb3JtYXRG
bGFnSXNTaWduZWRJbnRlZ2VyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb2F0MzI6Cisg
ICAgICAgIHdvcmRzaXplID0gNDsKKyAgICAgICAgbV9zdHJlYW1EZXNjcmlwdGlvbi5tRm9ybWF0
RmxhZ3MgfD0ga0F1ZGlvRm9ybWF0RmxhZ0lzRmxvYXQ7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRmxvYXQ2NDoKKyAgICAgICAgd29yZHNpemUgPSA4OworICAgICAgICBtX3N0cmVhbURlc2Ny
aXB0aW9uLm1Gb3JtYXRGbGFncyB8PSBrQXVkaW9Gb3JtYXRGbGFnSXNGbG9hdDsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBOb25lOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgd29yZHNpemUgPSAwOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtX3N0cmVh
bURlc2NyaXB0aW9uLm1CaXRzUGVyQ2hhbm5lbCA9IHdvcmRzaXplICogODsKKyAgICBpZiAoaXNJ
bnRlcmxlYXZlZCkKKyAgICAgICAgbV9zdHJlYW1EZXNjcmlwdGlvbi5tQnl0ZXNQZXJGcmFtZSA9
IG1fc3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVyUGFja2V0ID0gd29yZHNpemUgKiBudW1DaGFu
bmVsczsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9zdHJlYW1EZXNjcmlwdGlvbi5tRm9ybWF0Rmxh
Z3MgfD0ga0F1ZGlvRm9ybWF0RmxhZ0lzTm9uSW50ZXJsZWF2ZWQ7CisgICAgICAgIG1fc3RyZWFt
RGVzY3JpcHRpb24ubUJ5dGVzUGVyRnJhbWUgPSBtX3N0cmVhbURlc2NyaXB0aW9uLm1CeXRlc1Bl
clBhY2tldCA9IHdvcmRzaXplOworICAgIH0KK30KKworY29uc3QgUGxhdGZvcm1EZXNjcmlwdGlv
biYgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpwbGF0Zm9ybURlc2NyaXB0aW9uKCkgY29uc3QK
K3sKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSB7IFBsYXRmb3JtRGVzY3JpcHRpb246OkNB
QXVkaW9TdHJlYW1CYXNpY1R5cGUsICZtX3N0cmVhbURlc2NyaXB0aW9uIH07CisgICAgcmV0dXJu
IG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKK30KKworQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6UENN
Rm9ybWF0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6Zm9ybWF0KCkgY29uc3QKK3sKKyAgICBp
ZiAobV9mb3JtYXQgIT0gTm9uZSkKKyAgICAgICAgcmV0dXJuIG1fZm9ybWF0OworCisgICAgaWYg
KG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdElEICE9IGtBdWRpb0Zvcm1hdExpbmVhclBDTSkK
KyAgICAgICAgcmV0dXJuIE5vbmU7CisgICAgaWYgKG1fc3RyZWFtRGVzY3JpcHRpb24ubUZyYW1l
c1BlclBhY2tldCAhPSAxKQorICAgICAgICByZXR1cm4gTm9uZTsKKyAgICBpZiAobV9zdHJlYW1E
ZXNjcmlwdGlvbi5tQnl0ZXNQZXJGcmFtZSAhPSBtX3N0cmVhbURlc2NyaXB0aW9uLm1CeXRlc1Bl
clBhY2tldCkKKyAgICAgICAgcmV0dXJuIE5vbmU7CisgICAgaWYgKG1fc3RyZWFtRGVzY3JpcHRp
b24ubUJpdHNQZXJDaGFubmVsIC8gc2l6ZW9mKGRvdWJsZSkgPiBtX3N0cmVhbURlc2NyaXB0aW9u
Lm1CeXRlc1BlckZyYW1lKQorICAgICAgICByZXR1cm4gTm9uZTsKKyAgICBpZiAoIW1fc3RyZWFt
RGVzY3JpcHRpb24ubUNoYW5uZWxzUGVyRnJhbWUpCisgICAgICAgIHJldHVybiBOb25lOworCisg
ICAgdW5zaWduZWQgd29yZHNpemUgPSBtX3N0cmVhbURlc2NyaXB0aW9uLm1CeXRlc1BlckZyYW1l
OworICAgIGlmIChpc0ludGVybGVhdmVkKCkpIHsKKyAgICAgICAgaWYgKHdvcmRzaXplICUgbV9z
dHJlYW1EZXNjcmlwdGlvbi5tQ2hhbm5lbHNQZXJGcmFtZSkKKyAgICAgICAgICAgIHJldHVybiBO
b25lOworCisgICAgICAgIHdvcmRzaXplIC89IG1fc3RyZWFtRGVzY3JpcHRpb24ubUNoYW5uZWxz
UGVyRnJhbWU7CisgICAgfQorCisgICAgaWYgKGlzTmF0aXZlRW5kaWFuKCkgJiYgd29yZHNpemUg
KiBzaXplb2YoZG91YmxlKSA9PSBtX3N0cmVhbURlc2NyaXB0aW9uLm1CaXRzUGVyQ2hhbm5lbCkg
eworICAgICAgICAvLyBQYWNrZWQgYW5kIG5hdGl2ZSBlbmRpYW4sIGdvb2QKKyAgICAgICAgaWYg
KG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzICYga0xpbmVhclBDTUZvcm1hdEZsYWdJ
c0Zsb2F0KSB7CisgICAgICAgICAgICBpZiAobV9zdHJlYW1EZXNjcmlwdGlvbi5tRm9ybWF0Rmxh
Z3MgJiAoa0xpbmVhclBDTUZvcm1hdEZsYWdJc1NpZ25lZEludGVnZXIgfCBrTGluZWFyUENNRm9y
bWF0RmxhZ3NTYW1wbGVGcmFjdGlvbk1hc2spKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25l
OworCisgICAgICAgICAgICBpZiAod29yZHNpemUgPT0gc2l6ZW9mKGZsb2F0KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9mb3JtYXQgPSBGbG9hdDMyOworICAgICAgICAgICAgaWYgKHdvcmRz
aXplID09IHNpemVvZihkb3VibGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBtX2Zvcm1hdCA9
IEZsb2F0NjQ7CisKKyAgICAgICAgICAgIHJldHVybiBOb25lOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzICYga0xpbmVhclBDTUZvcm1h
dEZsYWdJc1NpZ25lZEludGVnZXIpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGZyYWN0aW9uQml0
cyA9IChtX3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFncyAmIGtMaW5lYXJQQ01Gb3JtYXRG
bGFnc1NhbXBsZUZyYWN0aW9uTWFzaykgPj4ga0xpbmVhclBDTUZvcm1hdEZsYWdzU2FtcGxlRnJh
Y3Rpb25TaGlmdDsKKyAgICAgICAgICAgIGlmICghZnJhY3Rpb25CaXRzKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHdvcmRzaXplID09IHNpemVvZihpbnQxNl90KSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fZm9ybWF0ID0gSW50MTY7CisgICAgICAgICAgICAgICAgaWYgKHdvcmRzaXpl
ID09IHNpemVvZihpbnQzMl90KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fZm9ybWF0
ID0gSW50MzI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
Tm9uZTsKK30KKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlw
dGlvbiYgYSwgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBiKQoreworICAgIHJl
dHVybiBhLm1TYW1wbGVSYXRlID09IGIubVNhbXBsZVJhdGUKKyAgICAgICAgJiYgYS5tRm9ybWF0
SUQgPT0gYi5tRm9ybWF0SUQKKyAgICAgICAgJiYgYS5tRm9ybWF0RmxhZ3MgPT0gYi5tRm9ybWF0
RmxhZ3MKKyAgICAgICAgJiYgYS5tQnl0ZXNQZXJQYWNrZXQgPT0gYi5tQnl0ZXNQZXJQYWNrZXQK
KyAgICAgICAgJiYgYS5tRnJhbWVzUGVyUGFja2V0ID09IGIubUZyYW1lc1BlclBhY2tldAorICAg
ICAgICAmJiBhLm1CeXRlc1BlckZyYW1lID09IGIubUJ5dGVzUGVyRnJhbWUKKyAgICAgICAgJiYg
YS5tQ2hhbm5lbHNQZXJGcmFtZSA9PSBiLm1DaGFubmVsc1BlckZyYW1lCisgICAgICAgICYmIGEu
bUJpdHNQZXJDaGFubmVsID09IGIubUJpdHNQZXJDaGFubmVsOworfQorCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhNzM5MjllMTM4NDczMjllMGM5ZjdhNTNiN2Zm
MDdiZGZkMTY0MmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaApAQCAtMCwwICsxLDExMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbi5oIgorI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1dFQkNPUkVfRVhQT1JUIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdWRp
b1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mLCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRp
b24mKTsKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2Ny
aXB0aW9uJiBhLCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIGIpIHsgcmV0dXJu
ICEoYSA9PSBiKTsgfQorCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBDQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24gZmluYWwgOiBwdWJsaWMgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKworICAgIENBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbigpOworICAgIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0cmVhbUJh
c2ljRGVzY3JpcHRpb24mKTsKKyAgICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oZG91YmxlLCB1
aW50MzJfdCwgUENNRm9ybWF0LCBib29sKTsKKyAgICB+Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9u
KCk7CisKKyAgICBjb25zdCBQbGF0Zm9ybURlc2NyaXB0aW9uJiBwbGF0Zm9ybURlc2NyaXB0aW9u
KCkgY29uc3QgZmluYWw7CisKKyAgICBQQ01Gb3JtYXQgZm9ybWF0KCkgY29uc3QgZmluYWw7CisK
KyAgICBkb3VibGUgc2FtcGxlUmF0ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3RyZWFtRGVz
Y3JpcHRpb24ubVNhbXBsZVJhdGU7IH0KKyAgICBib29sIGlzUENNKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9zdHJlYW1EZXNjcmlwdGlvbi5tRm9ybWF0SUQgPT0ga0F1ZGlvRm9ybWF0TGluZWFy
UENNOyB9CisgICAgYm9vbCBpc0ludGVybGVhdmVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gISht
X3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFncyAmIGtBdWRpb0Zvcm1hdEZsYWdJc05vbklu
dGVybGVhdmVkKTsgfQorICAgIGJvb2wgaXNTaWduZWRJbnRlZ2VyKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gaXNQQ00oKSAmJiAobV9zdHJlYW1EZXNjcmlwdGlvbi5tRm9ybWF0RmxhZ3MgJiBrQXVk
aW9Gb3JtYXRGbGFnSXNTaWduZWRJbnRlZ2VyKTsgfQorICAgIGJvb2wgaXNGbG9hdCgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIGlzUENNKCkgJiYgKG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZs
YWdzICYga0F1ZGlvRm9ybWF0RmxhZ0lzRmxvYXQpOyB9CisgICAgYm9vbCBpc05hdGl2ZUVuZGlh
bigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGlzUENNKCkgJiYgKG1fc3RyZWFtRGVzY3JpcHRpb24u
bUZvcm1hdEZsYWdzICYga0F1ZGlvRm9ybWF0RmxhZ0lzQmlnRW5kaWFuKSA9PSBrQXVkaW9Gb3Jt
YXRGbGFnc05hdGl2ZUVuZGlhbjsgfQorCisgICAgdWludDMyX3QgbnVtYmVyT2ZJbnRlcmxlYXZl
ZENoYW5uZWxzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gaXNJbnRlcmxlYXZlZCgpID8gbV9zdHJl
YW1EZXNjcmlwdGlvbi5tQ2hhbm5lbHNQZXJGcmFtZSA6IDE7IH0KKyAgICB1aW50MzJfdCBudW1i
ZXJPZkNoYW5uZWxTdHJlYW1zKCkgY29uc3QgZmluYWwgeyByZXR1cm4gaXNJbnRlcmxlYXZlZCgp
ID8gMSA6IG1fc3RyZWFtRGVzY3JpcHRpb24ubUNoYW5uZWxzUGVyRnJhbWU7IH0KKyAgICB1aW50
MzJfdCBudW1iZXJPZkNoYW5uZWxzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zdHJlYW1EZXNj
cmlwdGlvbi5tQ2hhbm5lbHNQZXJGcmFtZTsgfQorICAgIHVpbnQzMl90IHNhbXBsZVdvcmRTaXpl
KCkgY29uc3QgZmluYWwgeworICAgICAgICByZXR1cm4gKG1fc3RyZWFtRGVzY3JpcHRpb24ubUJ5
dGVzUGVyRnJhbWUgPiAwICYmIG51bWJlck9mSW50ZXJsZWF2ZWRDaGFubmVscygpKSA/IG1fc3Ry
ZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVyRnJhbWUgLyBudW1iZXJPZkludGVybGVhdmVkQ2hhbm5l
bHMoKSA6ICAwOworICAgIH0KKyAgICB1aW50MzJfdCBieXRlc1BlckZyYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJlYW1EZXNjcmlwdGlvbi5tQnl0ZXNQZXJGcmFtZTsgfQorICAgIHVpbnQzMl90
IGJ5dGVzUGVyUGFja2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdHJlYW1EZXNjcmlwdGlvbi5tQnl0
ZXNQZXJQYWNrZXQ7IH0KKyAgICB1aW50MzJfdCBmb3JtYXRGbGFncygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzOyB9CisKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1
cm4gbV9zdHJlYW1EZXNjcmlwdGlvbiA9PSBvdGhlcjsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdCB7IHJldHVybiAh
b3BlcmF0b3IgPT0gKG90aGVyKTsgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdWRpb1N0
cmVhbURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChvdGhlci5w
bGF0Zm9ybURlc2NyaXB0aW9uKCkudHlwZSAhPSBQbGF0Zm9ybURlc2NyaXB0aW9uOjpDQUF1ZGlv
U3RyZWFtQmFzaWNUeXBlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJl
dHVybiBvcGVyYXRvcj09KCpXVEY6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRp
b24qPihvdGhlci5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3JpcHRpb24pKTsKKyAgICB9Cisg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIG90aGVyKSBj
b25zdCB7IHJldHVybiAhb3BlcmF0b3IgPT0gKG90aGVyKTsgfQorCisgICAgY29uc3QgQXVkaW9T
dHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBzdHJlYW1EZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fc3RyZWFtRGVzY3JpcHRpb247IH0KKyAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24m
IHN0cmVhbURlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdHJlYW1EZXNjcmlwdGlvbjsgfQorCisg
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owor
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGUoRGVjb2RlciYsIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYpOworCitwcml2YXRl
OgorICAgIHZvaWQgY2FsY3VsYXRlRm9ybWF0KCk7CisKKyAgICBBdWRpb1N0cmVhbUJhc2ljRGVz
Y3JpcHRpb24gbV9zdHJlYW1EZXNjcmlwdGlvbjsKKyAgICBtdXRhYmxlIFBsYXRmb3JtRGVzY3Jp
cHRpb24gbV9wbGF0Zm9ybURlc2NyaXB0aW9uOworICAgIG11dGFibGUgUENNRm9ybWF0IG1fZm9y
bWF0IHsgTm9uZSB9OworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAg
ICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPigmbV9zdHJlYW1EZXNjcmlwdGlvbiksIHNpemVvZihtX3N0cmVhbURlc2NyaXB0aW9u
KSwgMSk7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+Citib29sIENBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24pCit7CisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZkZXNjcmlwdGlvbi5tX3N0cmVhbURl
c2NyaXB0aW9uKSwgc2l6ZW9mKGRlc2NyaXB0aW9uLm1fc3RyZWFtRGVzY3JpcHRpb24pLCAxKTsK
K30KKworaW5saW5lIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiB0b0NBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbihjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK3sKKyAg
ICBBU1NFUlQoZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLnR5cGUgPT0gUGxhdGZv
cm1EZXNjcmlwdGlvbjo6Q0FBdWRpb1N0cmVhbUJhc2ljVHlwZSk7CisgICAgcmV0dXJuIENBQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbigqV1RGOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2Ny
aXB0aW9uKj4oZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKSk7
Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29h
L0NBUmluZ0J1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9D
QVJpbmdCdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkN2E3YTViYzE0MzM2MmY5N2FmOWNhZDkyMTEw
OGZiMzIxZmY4N2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9jb2NvYS9DQVJpbmdCdWZmZXIuY3BwCkBAIC0wLDAgKzEsMzQ0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNBUmluZ0J1ZmZlci5oIgorCisjaWYg
RU5BQkxFKFdFQl9BVURJTykgJiYgVVNFKE1FRElBVE9PTEJPWCkKKworI2luY2x1ZGUgIkNBQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5o
PgorI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CisKK2NvbnN0IHVpbnQzMl90IGtHZW5lcmFsUmluZ1RpbWVCb3VuZHNRdWV1
ZVNpemUgPSAzMjsKK2NvbnN0IHVpbnQzMl90IGtHZW5lcmFsUmluZ1RpbWVCb3VuZHNRdWV1ZU1h
c2sgPSBrR2VuZXJhbFJpbmdUaW1lQm91bmRzUXVldWVTaXplIC0gMTsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitDQVJpbmdCdWZmZXI6OkNBUmluZ0J1ZmZlcigpCisgICAgOiBtX2J1ZmZlcnMo
bWFrZVVuaXF1ZVJlZjxDQVJpbmdCdWZmZXJTdG9yYWdlVmVjdG9yPigpKQorICAgICwgbV90aW1l
Qm91bmRzUXVldWUoa0dlbmVyYWxSaW5nVGltZUJvdW5kc1F1ZXVlU2l6ZSkKK3sKK30KKworQ0FS
aW5nQnVmZmVyOjp+Q0FSaW5nQnVmZmVyKCkKK3sKKyAgICBkZWFsbG9jYXRlKCk7Cit9CisKK0NB
UmluZ0J1ZmZlcjo6Q0FSaW5nQnVmZmVyKFVuaXF1ZVJlZjxDQVJpbmdCdWZmZXJTdG9yYWdlPiYm
IHN0b3JhZ2UpCisgICAgOiBtX2J1ZmZlcnMoV1RGTW92ZShzdG9yYWdlKSkKKyAgICAsIG1fdGlt
ZUJvdW5kc1F1ZXVlKGtHZW5lcmFsUmluZ1RpbWVCb3VuZHNRdWV1ZVNpemUpCit7Cit9CisKK3Zv
aWQgQ0FSaW5nQnVmZmVyOjphbGxvY2F0ZShjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24m
IGZvcm1hdCwgc2l6ZV90IGZyYW1lQ291bnQpCit7CisgICAgbV9kZXNjcmlwdGlvbiA9IGZvcm1h
dDsKKyAgICBkZWFsbG9jYXRlKCk7CisKKyAgICBmcmFtZUNvdW50ID0gV1RGOjpyb3VuZFVwVG9Q
b3dlck9mVHdvKGZyYW1lQ291bnQpOworCisgICAgbV9jaGFubmVsQ291bnQgPSBmb3JtYXQubnVt
YmVyT2ZDaGFubmVsU3RyZWFtcygpOworICAgIG1fYnl0ZXNQZXJGcmFtZSA9IGZvcm1hdC5ieXRl
c1BlckZyYW1lKCk7CisgICAgbV9mcmFtZUNvdW50ID0gZnJhbWVDb3VudDsKKyAgICBtX2ZyYW1l
Q291bnRNYXNrID0gZnJhbWVDb3VudCAtIDE7CisgICAgbV9jYXBhY2l0eUJ5dGVzID0gbV9ieXRl
c1BlckZyYW1lICogZnJhbWVDb3VudDsKKworICAgIG1fYnVmZmVycy0+YWxsb2NhdGUobV9jYXBh
Y2l0eUJ5dGVzICogbV9jaGFubmVsQ291bnQpOworCisgICAgbV9wb2ludGVycy5yZXNpemUobV9j
aGFubmVsQ291bnQpOworICAgIEJ5dGUqIGNoYW5uZWxEYXRhID0gc3RhdGljX2Nhc3Q8Qnl0ZSo+
KG1fYnVmZmVycy0+ZGF0YSgpKTsKKworICAgIGZvciAoYXV0byYgcG9pbnRlciA6IG1fcG9pbnRl
cnMpIHsKKyAgICAgICAgcG9pbnRlciA9IGNoYW5uZWxEYXRhOworICAgICAgICBjaGFubmVsRGF0
YSArPSBtX2NhcGFjaXR5Qnl0ZXM7CisgICAgfQorCisgICAgZmx1c2goKTsKK30KKwordm9pZCBD
QVJpbmdCdWZmZXI6OmRlYWxsb2NhdGUoKQoreworICAgIG1fYnVmZmVycy0+ZGVhbGxvY2F0ZSgp
OworICAgIG1fcG9pbnRlcnMuY2xlYXIoKTsKKyAgICBtX2NoYW5uZWxDb3VudCA9IDA7CisgICAg
bV9jYXBhY2l0eUJ5dGVzID0gMDsKKyAgICBtX2ZyYW1lQ291bnQgPSAwOworfQorCitzdGF0aWMg
dm9pZCBaZXJvUmFuZ2UoVmVjdG9yPEJ5dGUqPiYgcG9pbnRlcnMsIHNpemVfdCBvZmZzZXQsIHNp
emVfdCBuYnl0ZXMpCit7CisgICAgZm9yIChhdXRvJiBwb2ludGVyIDogcG9pbnRlcnMpCisgICAg
ICAgIG1lbXNldChwb2ludGVyICsgb2Zmc2V0LCAwLCBuYnl0ZXMpOworfQorCitzdGF0aWMgdm9p
ZCBTdG9yZUFCTChWZWN0b3I8Qnl0ZSo+JiBwb2ludGVycywgc2l6ZV90IGRlc3RPZmZzZXQsIGNv
bnN0IEF1ZGlvQnVmZmVyTGlzdCogbGlzdCwgc2l6ZV90IHNyY09mZnNldCwgc2l6ZV90IG5ieXRl
cykKK3sKKyAgICBBU1NFUlQobGlzdC0+bU51bWJlckJ1ZmZlcnMgPT0gcG9pbnRlcnMuc2l6ZSgp
KTsKKyAgICBjb25zdCBBdWRpb0J1ZmZlciogc3JjID0gbGlzdC0+bUJ1ZmZlcnM7CisgICAgZm9y
IChhdXRvJiBwb2ludGVyIDogcG9pbnRlcnMpIHsKKyAgICAgICAgaWYgKHNyY09mZnNldCA+IHNy
Yy0+bURhdGFCeXRlU2l6ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtZW1jcHko
cG9pbnRlciArIGRlc3RPZmZzZXQsIHN0YXRpY19jYXN0PEJ5dGUqPihzcmMtPm1EYXRhKSArIHNy
Y09mZnNldCwgc3RkOjptaW48c2l6ZV90PihuYnl0ZXMsIHNyYy0+bURhdGFCeXRlU2l6ZSAtIHNy
Y09mZnNldCkpOworICAgICAgICArK3NyYzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZldGNo
QUJMKEF1ZGlvQnVmZmVyTGlzdCogbGlzdCwgc2l6ZV90IGRlc3RPZmZzZXQsIFZlY3RvcjxCeXRl
Kj4mIHBvaW50ZXJzLCBzaXplX3Qgc3JjT2Zmc2V0LCBzaXplX3QgbmJ5dGVzLCBBdWRpb1N0cmVh
bURlc2NyaXB0aW9uOjpQQ01Gb3JtYXQgZm9ybWF0LCBDQVJpbmdCdWZmZXI6OkZldGNoTW9kZSBt
b2RlKQoreworICAgIEFTU0VSVChsaXN0LT5tTnVtYmVyQnVmZmVycyA9PSBwb2ludGVycy5zaXpl
KCkpOworICAgIEF1ZGlvQnVmZmVyKiBkZXN0ID0gbGlzdC0+bUJ1ZmZlcnM7CisgICAgZm9yIChh
dXRvJiBwb2ludGVyIDogcG9pbnRlcnMpIHsKKyAgICAgICAgaWYgKGRlc3RPZmZzZXQgPiBkZXN0
LT5tRGF0YUJ5dGVTaXplKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbmJ5dGVz
ID0gc3RkOjptaW48c2l6ZV90PihuYnl0ZXMsIGRlc3QtPm1EYXRhQnl0ZVNpemUgLSBkZXN0T2Zm
c2V0KTsKKyAgICAgICAgaWYgKG1vZGUgPT0gQ0FSaW5nQnVmZmVyOjpDb3B5KQorICAgICAgICAg
ICAgbWVtY3B5KHN0YXRpY19jYXN0PEJ5dGUqPihkZXN0LT5tRGF0YSkgKyBkZXN0T2Zmc2V0LCBw
b2ludGVyICsgc3JjT2Zmc2V0LCBuYnl0ZXMpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRp
b246OkludDE2OiB7CisgICAgICAgICAgICAgICAgaW50MTZfdCogZGVzdGluYXRpb24gPSBzdGF0
aWNfY2FzdDxpbnQxNl90Kj4oZGVzdC0+bURhdGEpOworICAgICAgICAgICAgICAgIGludDE2X3Qq
IHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50MTZfdCo+KHBvaW50ZXIgKyBzcmNPZmZzZXQp
OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmJ5dGVzIC8gc2l6ZW9m
KGludDE2X3QpOyBpKyspCisgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldICs9IHNv
dXJjZVtpXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6SW50MzI6IHsKKyAgICAgICAgICAgICAg
ICBpbnQzMl90KiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PGludDMyX3QqPihkZXN0LT5tRGF0
YSk7CisgICAgICAgICAgICAgICAgdkRTUF92YWRkaShkZXN0aW5hdGlvbiwgMSwgcmVpbnRlcnBy
ZXRfY2FzdDxpbnQzMl90Kj4ocG9pbnRlciArIHNyY09mZnNldCksIDEsIGRlc3RpbmF0aW9uLCAx
LCBuYnl0ZXMgLyBzaXplb2YoaW50MzJfdCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpGbG9h
dDMyOiB7CisgICAgICAgICAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8
ZmxvYXQqPihkZXN0LT5tRGF0YSk7CisgICAgICAgICAgICAgICAgdkRTUF92YWRkKGRlc3RpbmF0
aW9uLCAxLCByZWludGVycHJldF9jYXN0PGZsb2F0Kj4ocG9pbnRlciArIHNyY09mZnNldCksIDEs
IGRlc3RpbmF0aW9uLCAxLCBuYnl0ZXMgLyBzaXplb2YoZmxvYXQpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbjo6RmxvYXQ2NDogeworICAgICAgICAgICAgICAgIGRvdWJsZSogZGVzdGluYXRpb24g
PSBzdGF0aWNfY2FzdDxkb3VibGUqPihkZXN0LT5tRGF0YSk7CisgICAgICAgICAgICAgICAgdkRT
UF92YWRkRChkZXN0aW5hdGlvbiwgMSwgcmVpbnRlcnByZXRfY2FzdDxkb3VibGUqPihwb2ludGVy
ICsgc3JjT2Zmc2V0KSwgMSwgZGVzdGluYXRpb24sIDEsIG5ieXRlcyAvIHNpemVvZihkb3VibGUp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNh
c2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6Tm9uZToKKyAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICArK2Rlc3Q7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBaZXJvQUJM
KEF1ZGlvQnVmZmVyTGlzdCogbGlzdCwgc2l6ZV90IGRlc3RPZmZzZXQsIHNpemVfdCBuYnl0ZXMp
Cit7CisgICAgaW50IG5CdWZmZXJzID0gbGlzdC0+bU51bWJlckJ1ZmZlcnM7CisgICAgQXVkaW9C
dWZmZXIqIGRlc3QgPSBsaXN0LT5tQnVmZmVyczsKKyAgICB3aGlsZSAoLS1uQnVmZmVycyA+PSAw
KSB7CisgICAgICAgIGlmIChkZXN0T2Zmc2V0ID4gZGVzdC0+bURhdGFCeXRlU2l6ZSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBtZW1zZXQoc3RhdGljX2Nhc3Q8Qnl0ZSo+KGRlc3Qt
Pm1EYXRhKSArIGRlc3RPZmZzZXQsIDAsIHN0ZDo6bWluPHNpemVfdD4obmJ5dGVzLCBkZXN0LT5t
RGF0YUJ5dGVTaXplIC0gZGVzdE9mZnNldCkpOworICAgICAgICArK2Rlc3Q7CisgICAgfQorfQor
Cit2b2lkIENBUmluZ0J1ZmZlcjo6Zmx1c2goKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
Y3VycmVudEZyYW1lQm91bmRzTG9jayk7CisgICAgZm9yIChhdXRvJiB0aW1lQm91bmRzIDogbV90
aW1lQm91bmRzUXVldWUpIHsKKyAgICAgICAgdGltZUJvdW5kcy5tX3N0YXJ0RnJhbWUgPSAwOwor
ICAgICAgICB0aW1lQm91bmRzLm1fZW5kRnJhbWUgPSAwOworICAgICAgICB0aW1lQm91bmRzLm1f
dXBkYXRlQ291bnRlciA9IDA7CisgICAgfQorICAgIG1fdGltZUJvdW5kc1F1ZXVlUHRyID0gMDsK
K30KKworQ0FSaW5nQnVmZmVyOjpFcnJvciBDQVJpbmdCdWZmZXI6OnN0b3JlKGNvbnN0IEF1ZGlv
QnVmZmVyTGlzdCogbGlzdCwgc2l6ZV90IGZyYW1lc1RvV3JpdGUsIHVpbnQ2NF90IHN0YXJ0RnJh
bWUpCit7CisgICAgaWYgKCFmcmFtZXNUb1dyaXRlKQorICAgICAgICByZXR1cm4gT2s7CisKKyAg
ICBpZiAoZnJhbWVzVG9Xcml0ZSA+IG1fZnJhbWVDb3VudCkKKyAgICAgICAgcmV0dXJuIFRvb011
Y2g7CisKKyAgICB1aW50NjRfdCBlbmRGcmFtZSA9IHN0YXJ0RnJhbWUgKyBmcmFtZXNUb1dyaXRl
OworCisgICAgaWYgKHN0YXJ0RnJhbWUgPCBjdXJyZW50RW5kRnJhbWUoKSkgeworICAgICAgICAv
LyBUaHJvdyBldmVyeXRoaW5nIG91dCB3aGVuIGdvaW5nIGJhY2t3YXJkcy4KKyAgICAgICAgc2V0
Q3VycmVudEZyYW1lQm91bmRzKHN0YXJ0RnJhbWUsIHN0YXJ0RnJhbWUpOworICAgIH0gZWxzZSBp
ZiAoZW5kRnJhbWUgLSBjdXJyZW50U3RhcnRGcmFtZSgpIDw9IG1fZnJhbWVDb3VudCkgeworICAg
ICAgICAvLyBUaGUgYnVmZmVyIGhhcyBub3QgeWV0IHdyYXBwZWQgYW5kIHdpbGwgbm90IG5lZWQg
dG8uCisgICAgICAgIC8vIE5vLW9wLgorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEFkdmFuY2Ug
dGhlIHN0YXJ0IHRpbWUgcGFzdCB0aGUgcmVnaW9uIHdlIGFyZSBhYm91dCB0byBvdmVyd3JpdGUK
KyAgICAgICAgLy8gc3RhcnRpbmcgb25lIGJ1ZmZlciBvZiB0aW1lIGJlaGluZCB3aGVyZSB3ZSdy
ZSB3cml0aW5nLgorICAgICAgICB1aW50NjRfdCBuZXdTdGFydEZyYW1lID0gZW5kRnJhbWUgLSBt
X2ZyYW1lQ291bnQ7CisgICAgICAgIHVpbnQ2NF90IG5ld0VuZEZyYW1lID0gc3RkOjptYXgobmV3
U3RhcnRGcmFtZSwgY3VycmVudEVuZEZyYW1lKCkpOworICAgICAgICBzZXRDdXJyZW50RnJhbWVC
b3VuZHMobmV3U3RhcnRGcmFtZSwgbmV3RW5kRnJhbWUpOworICAgIH0KKworICAgIC8vIFdyaXRl
IHRoZSBuZXcgZnJhbWVzLgorICAgIHNpemVfdCBvZmZzZXQwOworICAgIHNpemVfdCBvZmZzZXQx
OworICAgIHVpbnQ2NF90IGN1ckVuZCA9IGN1cnJlbnRFbmRGcmFtZSgpOworCisgICAgaWYgKHN0
YXJ0RnJhbWUgPiBjdXJFbmQpIHsKKyAgICAgICAgLy8gV2UgYXJlIHNraXBwaW5nIHNvbWUgc2Ft
cGxlcywgc28gemVybyB0aGUgcmFuZ2Ugd2UgYXJlIHNraXBwaW5nLgorICAgICAgICBvZmZzZXQw
ID0gZnJhbWVPZmZzZXQoY3VyRW5kKTsKKyAgICAgICAgb2Zmc2V0MSA9IGZyYW1lT2Zmc2V0KHN0
YXJ0RnJhbWUpOworICAgICAgICBpZiAob2Zmc2V0MCA8IG9mZnNldDEpCisgICAgICAgICAgICBa
ZXJvUmFuZ2UobV9wb2ludGVycywgb2Zmc2V0MCwgb2Zmc2V0MSAtIG9mZnNldDApOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIFplcm9SYW5nZShtX3BvaW50ZXJzLCBvZmZzZXQwLCBtX2Nh
cGFjaXR5Qnl0ZXMgLSBvZmZzZXQwKTsKKyAgICAgICAgICAgIFplcm9SYW5nZShtX3BvaW50ZXJz
LCAwLCBvZmZzZXQxKTsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXQwID0gb2Zmc2V0MTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgb2Zmc2V0MCA9IGZyYW1lT2Zmc2V0KHN0YXJ0RnJhbWUpOworCisg
ICAgb2Zmc2V0MSA9IGZyYW1lT2Zmc2V0KGVuZEZyYW1lKTsKKyAgICBpZiAob2Zmc2V0MCA8IG9m
ZnNldDEpCisgICAgICAgIFN0b3JlQUJMKG1fcG9pbnRlcnMsIG9mZnNldDAsIGxpc3QsIDAsIG9m
ZnNldDEgLSBvZmZzZXQwKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc2l6ZV90IG5ieXRlcyA9IG1f
Y2FwYWNpdHlCeXRlcyAtIG9mZnNldDA7CisgICAgICAgIFN0b3JlQUJMKG1fcG9pbnRlcnMsIG9m
ZnNldDAsIGxpc3QsIDAsIG5ieXRlcyk7CisgICAgICAgIFN0b3JlQUJMKG1fcG9pbnRlcnMsIDAs
IGxpc3QsIG5ieXRlcywgb2Zmc2V0MSk7CisgICAgfQorCisgICAgLy8gTm93IHVwZGF0ZSB0aGUg
ZW5kIHRpbWUuCisgICAgc2V0Q3VycmVudEZyYW1lQm91bmRzKGN1cnJlbnRTdGFydEZyYW1lKCks
IGVuZEZyYW1lKTsKKworICAgIHJldHVybiBPazsKK30KKwordm9pZCBDQVJpbmdCdWZmZXI6OnNl
dEN1cnJlbnRGcmFtZUJvdW5kcyh1aW50NjRfdCBzdGFydFRpbWUsIHVpbnQ2NF90IGVuZFRpbWUp
Cit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9jdXJyZW50RnJhbWVCb3VuZHNMb2NrKTsKKyAg
ICB1aW50MzJfdCBuZXh0UHRyID0gbV90aW1lQm91bmRzUXVldWVQdHIubG9hZCgpICsgMTsKKyAg
ICB1aW50MzJfdCBpbmRleCA9IG5leHRQdHIgJiBrR2VuZXJhbFJpbmdUaW1lQm91bmRzUXVldWVN
YXNrOworCisgICAgbV90aW1lQm91bmRzUXVldWVbaW5kZXhdLm1fc3RhcnRGcmFtZSA9IHN0YXJ0
VGltZTsKKyAgICBtX3RpbWVCb3VuZHNRdWV1ZVtpbmRleF0ubV9lbmRGcmFtZSA9IGVuZFRpbWU7
CisgICAgbV90aW1lQm91bmRzUXVldWVbaW5kZXhdLm1fdXBkYXRlQ291bnRlciA9IG5leHRQdHI7
CisgICAgbV90aW1lQm91bmRzUXVldWVQdHIrKzsKK30KKwordm9pZCBDQVJpbmdCdWZmZXI6Omdl
dEN1cnJlbnRGcmFtZUJvdW5kcyh1aW50NjRfdCAmc3RhcnRUaW1lLCB1aW50NjRfdCAmZW5kVGlt
ZSkKK3sKKyAgICB1aW50MzJfdCBjdXJQdHIgPSBtX3RpbWVCb3VuZHNRdWV1ZVB0ci5sb2FkKCk7
CisgICAgdWludDMyX3QgaW5kZXggPSBjdXJQdHIgJiBrR2VuZXJhbFJpbmdUaW1lQm91bmRzUXVl
dWVNYXNrOworICAgIENBUmluZ0J1ZmZlcjo6VGltZUJvdW5kcyYgYm91bmRzID0gbV90aW1lQm91
bmRzUXVldWVbaW5kZXhdOworCisgICAgc3RhcnRUaW1lID0gYm91bmRzLm1fc3RhcnRGcmFtZTsK
KyAgICBlbmRUaW1lID0gYm91bmRzLm1fZW5kRnJhbWU7Cit9CisKK3ZvaWQgQ0FSaW5nQnVmZmVy
OjpjbGlwVGltZUJvdW5kcyh1aW50NjRfdCYgc3RhcnRSZWFkLCB1aW50NjRfdCYgZW5kUmVhZCkK
K3sKKyAgICB1aW50NjRfdCBzdGFydFRpbWU7CisgICAgdWludDY0X3QgZW5kVGltZTsKKworICAg
IGdldEN1cnJlbnRGcmFtZUJvdW5kcyhzdGFydFRpbWUsIGVuZFRpbWUpOworCisgICAgaWYgKHN0
YXJ0UmVhZCA+IGVuZFRpbWUgfHwgZW5kUmVhZCA8IHN0YXJ0VGltZSkgeworICAgICAgICBlbmRS
ZWFkID0gc3RhcnRSZWFkOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RhcnRSZWFk
ID0gc3RkOjptYXgoc3RhcnRSZWFkLCBzdGFydFRpbWUpOworICAgIGVuZFJlYWQgPSBzdGQ6Om1p
bihlbmRSZWFkLCBlbmRUaW1lKTsKKyAgICBlbmRSZWFkID0gc3RkOjptYXgoZW5kUmVhZCwgc3Rh
cnRSZWFkKTsKK30KKwordWludDY0X3QgQ0FSaW5nQnVmZmVyOjpjdXJyZW50U3RhcnRGcmFtZSgp
IGNvbnN0Cit7CisgICAgdWludDMyX3QgaW5kZXggPSBtX3RpbWVCb3VuZHNRdWV1ZVB0ci5sb2Fk
KCkgJiBrR2VuZXJhbFJpbmdUaW1lQm91bmRzUXVldWVNYXNrOworICAgIHJldHVybiBtX3RpbWVC
b3VuZHNRdWV1ZVtpbmRleF0ubV9zdGFydEZyYW1lOworfQorCit1aW50NjRfdCBDQVJpbmdCdWZm
ZXI6OmN1cnJlbnRFbmRGcmFtZSgpIGNvbnN0Cit7CisgICAgdWludDMyX3QgaW5kZXggPSBtX3Rp
bWVCb3VuZHNRdWV1ZVB0ci5sb2FkKCkgJiBrR2VuZXJhbFJpbmdUaW1lQm91bmRzUXVldWVNYXNr
OworICAgIHJldHVybiBtX3RpbWVCb3VuZHNRdWV1ZVtpbmRleF0ubV9lbmRGcmFtZTsKK30KKwor
Q0FSaW5nQnVmZmVyOjpFcnJvciBDQVJpbmdCdWZmZXI6OmZldGNoKEF1ZGlvQnVmZmVyTGlzdCog
bGlzdCwgc2l6ZV90IG5GcmFtZXMsIHVpbnQ2NF90IHN0YXJ0UmVhZCwgRmV0Y2hNb2RlIG1vZGUp
Cit7CisgICAgaWYgKCFuRnJhbWVzKQorICAgICAgICByZXR1cm4gT2s7CisgICAgCisgICAgc3Rh
cnRSZWFkID0gc3RkOjptYXg8dWludDY0X3Q+KDAsIHN0YXJ0UmVhZCk7CisgICAgCisgICAgdWlu
dDY0X3QgZW5kUmVhZCA9IHN0YXJ0UmVhZCArIG5GcmFtZXM7CisgICAgCisgICAgdWludDY0X3Qg
c3RhcnRSZWFkMCA9IHN0YXJ0UmVhZDsKKyAgICB1aW50NjRfdCBlbmRSZWFkMCA9IGVuZFJlYWQ7
CisgICAgCisgICAgY2xpcFRpbWVCb3VuZHMoc3RhcnRSZWFkLCBlbmRSZWFkKTsKKworICAgIGlm
IChzdGFydFJlYWQgPT0gZW5kUmVhZCkgeworICAgICAgICBaZXJvQUJMKGxpc3QsIDAsIG5GcmFt
ZXMgKiBtX2J5dGVzUGVyRnJhbWUpOworICAgICAgICByZXR1cm4gT2s7CisgICAgfQorICAgIAor
ICAgIHNpemVfdCBieXRlU2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4oKGVuZFJlYWQgLSBzdGFy
dFJlYWQpICogbV9ieXRlc1BlckZyYW1lKTsKKyAgICAKKyAgICBzaXplX3QgZGVzdFN0YXJ0Qnl0
ZU9mZnNldCA9IHN0YXRpY19jYXN0PHNpemVfdD4oc3RkOjptYXg8dWludDY0X3Q+KDAsIChzdGFy
dFJlYWQgLSBzdGFydFJlYWQwKSAqIG1fYnl0ZXNQZXJGcmFtZSkpOworICAgIAorICAgIGlmIChk
ZXN0U3RhcnRCeXRlT2Zmc2V0ID4gMCkKKyAgICAgICAgWmVyb0FCTChsaXN0LCAwLCBzdGQ6Om1p
bjxzaXplX3Q+KG5GcmFtZXMgKiBtX2J5dGVzUGVyRnJhbWUsIGRlc3RTdGFydEJ5dGVPZmZzZXQp
KTsKKworICAgIHNpemVfdCBkZXN0RW5kU2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4oc3RkOjpt
YXg8dWludDY0X3Q+KDAsIGVuZFJlYWQwIC0gZW5kUmVhZCkpOworICAgIGlmIChkZXN0RW5kU2l6
ZSA+IDApCisgICAgICAgIFplcm9BQkwobGlzdCwgZGVzdFN0YXJ0Qnl0ZU9mZnNldCArIGJ5dGVT
aXplLCBkZXN0RW5kU2l6ZSAqIG1fYnl0ZXNQZXJGcmFtZSk7CisKKyAgICBzaXplX3Qgb2Zmc2V0
MCA9IGZyYW1lT2Zmc2V0KHN0YXJ0UmVhZCk7CisgICAgc2l6ZV90IG9mZnNldDEgPSBmcmFtZU9m
ZnNldChlbmRSZWFkKTsKKyAgICBzaXplX3QgbmJ5dGVzOworICAgIAorICAgIGlmIChvZmZzZXQw
IDwgb2Zmc2V0MSkgeworICAgICAgICBuYnl0ZXMgPSBvZmZzZXQxIC0gb2Zmc2V0MDsKKyAgICAg
ICAgRmV0Y2hBQkwobGlzdCwgZGVzdFN0YXJ0Qnl0ZU9mZnNldCwgbV9wb2ludGVycywgb2Zmc2V0
MCwgbmJ5dGVzLCBtX2Rlc2NyaXB0aW9uLmZvcm1hdCgpLCBtb2RlKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBuYnl0ZXMgPSBtX2NhcGFjaXR5Qnl0ZXMgLSBvZmZzZXQwOworICAgICAgICBGZXRj
aEFCTChsaXN0LCBkZXN0U3RhcnRCeXRlT2Zmc2V0LCBtX3BvaW50ZXJzLCBvZmZzZXQwLCBuYnl0
ZXMsIG1fZGVzY3JpcHRpb24uZm9ybWF0KCksIG1vZGUpOworICAgICAgICBpZiAob2Zmc2V0MSkK
KyAgICAgICAgICAgIEZldGNoQUJMKGxpc3QsIGRlc3RTdGFydEJ5dGVPZmZzZXQgKyBuYnl0ZXMs
IG1fcG9pbnRlcnMsIDAsIG9mZnNldDEsIG1fZGVzY3JpcHRpb24uZm9ybWF0KCksIG1vZGUpOwor
ICAgICAgICBuYnl0ZXMgKz0gb2Zmc2V0MTsKKyAgICB9CisgICAgCisgICAgaW50IGNoYW5uZWxD
b3VudCA9IGxpc3QtPm1OdW1iZXJCdWZmZXJzOworICAgIEF1ZGlvQnVmZmVyKiBkZXN0ID0gbGlz
dC0+bUJ1ZmZlcnM7CisgICAgd2hpbGUgKC0tY2hhbm5lbENvdW50ID49IDApIHsKKyAgICAgICAg
ZGVzdC0+bURhdGFCeXRlU2l6ZSA9IG5ieXRlczsKKyAgICAgICAgZGVzdCsrOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gT2s7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8p
ICYmIFVTRShNRURJQVRPT0xCT1gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9jb2NvYS9DQVJpbmdCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2NvY29hL0NBUmluZ0J1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0YWNlZmM4ZGFhZDcxMzI4YTRk
ZGZhYmJkMDRhZjllY2Q4ZWI5NWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9jb2NvYS9DQVJpbmdCdWZmZXIuaApAQCAtMCwwICsxLDEyNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgVVNFKE1F
RElBVE9PTEJPWCkKKworI2luY2x1ZGUgIkF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKKyNpbmNs
dWRlICJDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9BcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1Vu
aXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordHlwZWRlZiBzdHJ1Y3QgQXVk
aW9CdWZmZXJMaXN0IEF1ZGlvQnVmZmVyTGlzdDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDQVJpbmdCdWZmZXJTdG9yYWdlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DQVJpbmdCdWZmZXJTdG9yYWdlKCkgPSBkZWZhdWx0Owor
ICAgIHZpcnR1YWwgdm9pZCBhbGxvY2F0ZShzaXplX3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGVhbGxvY2F0ZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQqIGRhdGEoKSA9IDA7Cit9OworCitj
bGFzcyBDQVJpbmdCdWZmZXJTdG9yYWdlVmVjdG9yIGZpbmFsIDogcHVibGljIENBUmluZ0J1ZmZl
clN0b3JhZ2UgeworcHVibGljOgorICAgIH5DQVJpbmdCdWZmZXJTdG9yYWdlVmVjdG9yKCkgPSBk
ZWZhdWx0OworCitwcml2YXRlOgorICAgIHZvaWQgYWxsb2NhdGUoc2l6ZV90IGJ5dGVDb3VudCkg
ZmluYWwgeyBtX2J1ZmZlci5ncm93KGJ5dGVDb3VudCk7IH0KKyAgICB2b2lkIGRlYWxsb2NhdGUo
KSBmaW5hbCB7IG1fYnVmZmVyLmNsZWFyKCk7IH0KKyAgICB2b2lkKiBkYXRhKCkgZmluYWwgeyBy
ZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fYnVmZmVyOwor
fTsKKworY2xhc3MgQ0FSaW5nQnVmZmVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBDQVJpbmdCdWZmZXIoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBDQVJpbmdCdWZmZXIoVW5pcXVlUmVmPENBUmluZ0J1ZmZlclN0b3JhZ2U+JiYpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIH5DQVJpbmdCdWZmZXIoKTsKKworICAgIGVudW0gRXJyb3Igewor
ICAgICAgICBPaywKKyAgICAgICAgVG9vTXVjaCwgLy8gZmV0Y2ggc3RhcnQgdGltZSBpcyBlYXJs
aWVyIHRoYW4gYnVmZmVyIHN0YXJ0IHRpbWUgYW5kIGZldGNoIGVuZCB0aW1lIGlzIGxhdGVyIHRo
YW4gYnVmZmVyIGVuZCB0aW1lCisgICAgfTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWxs
b2NhdGUoY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiwgc2l6ZV90KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGRlYWxsb2NhdGUoKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIEVycm9y
IHN0b3JlKGNvbnN0IEF1ZGlvQnVmZmVyTGlzdCosIHNpemVfdCBmcmFtZUNvdW50LCB1aW50NjRf
dCBzdGFydEZyYW1lKTsKKworICAgIGVudW0gRmV0Y2hNb2RlIHsgQ29weSwgTWl4IH07CisgICAg
V0VCQ09SRV9FWFBPUlQgRXJyb3IgZmV0Y2goQXVkaW9CdWZmZXJMaXN0Kiwgc2l6ZV90IGZyYW1l
Q291bnQsIHVpbnQ2NF90IHN0YXJ0RnJhbWUsIEZldGNoTW9kZSBtb2RlID0gQ29weSk7CisKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZsdXNoKCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGdldEN1cnJlbnRGcmFtZUJvdW5kcyh1aW50NjRfdCAmc3RhcnRUaW1lLCB1aW50NjRfdCAmZW5k
VGltZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDdXJyZW50RnJhbWVCb3VuZHModWlu
dDY0X3Qgc3RhcnRGcmFtZSwgdWludDY0X3QgZW5kRnJhbWUpOworCisgICAgdWludDMyX3QgY2hh
bm5lbENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jaGFubmVsQ291bnQ7IH0KKyAgICBDQVJpbmdC
dWZmZXJTdG9yYWdlJiBzdG9yYWdlKCkgeyByZXR1cm4gbV9idWZmZXJzOyB9CisKK3ByaXZhdGU6
CisgICAgc2l6ZV90IGZyYW1lT2Zmc2V0KHVpbnQ2NF90IGZyYW1lTnVtYmVyKSB7IHJldHVybiAo
ZnJhbWVOdW1iZXIgJiBtX2ZyYW1lQ291bnRNYXNrKSAqIG1fYnl0ZXNQZXJGcmFtZTsgfQorCisg
ICAgdm9pZCBjbGlwVGltZUJvdW5kcyh1aW50NjRfdCYgc3RhcnRSZWFkLCB1aW50NjRfdCYgZW5k
UmVhZCk7CisKKyAgICB1aW50NjRfdCBjdXJyZW50U3RhcnRGcmFtZSgpIGNvbnN0OworICAgIHVp
bnQ2NF90IGN1cnJlbnRFbmRGcmFtZSgpIGNvbnN0OworCisgICAgVW5pcXVlUmVmPENBUmluZ0J1
ZmZlclN0b3JhZ2U+IG1fYnVmZmVyczsKKyAgICBWZWN0b3I8Qnl0ZSo+IG1fcG9pbnRlcnM7Cisg
ICAgdWludDMyX3QgbV9jaGFubmVsQ291bnQgeyAwIH07CisgICAgc2l6ZV90IG1fYnl0ZXNQZXJG
cmFtZSB7IDAgfTsKKyAgICB1aW50MzJfdCBtX2ZyYW1lQ291bnQgeyAwIH07CisgICAgdWludDMy
X3QgbV9mcmFtZUNvdW50TWFzayB7IDAgfTsKKyAgICBzaXplX3QgbV9jYXBhY2l0eUJ5dGVzIHsg
MCB9OworCisgICAgc3RydWN0IFRpbWVCb3VuZHMgeworICAgICAgICBUaW1lQm91bmRzKCkKKyAg
ICAgICAgICAgIDogbV9zdGFydEZyYW1lKDApCisgICAgICAgICAgICAsIG1fZW5kRnJhbWUoMCkK
KyAgICAgICAgICAgICwgbV91cGRhdGVDb3VudGVyKDApCisgICAgICAgIHsKKyAgICAgICAgfQor
ICAgICAgICB2b2xhdGlsZSB1aW50NjRfdCBtX3N0YXJ0RnJhbWU7CisgICAgICAgIHZvbGF0aWxl
IHVpbnQ2NF90IG1fZW5kRnJhbWU7CisgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90IG1fdXBkYXRl
Q291bnRlcjsKKyAgICB9OworCisgICAgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIG1fZGVzY3Jp
cHRpb247CisgICAgVmVjdG9yPFRpbWVCb3VuZHM+IG1fdGltZUJvdW5kc1F1ZXVlOworICAgIExv
Y2sgbV9jdXJyZW50RnJhbWVCb3VuZHNMb2NrOworICAgIHN0ZDo6YXRvbWljPGludDMyX3Q+IG1f
dGltZUJvdW5kc1F1ZXVlUHRyIHsgMCB9OworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
Ql9BVURJTykgJiYgVVNFKE1FRElBVE9PTEJPWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ZmMwMmQ4ZDkwM2U3MDJhZGUyMjQ2NGVjOWM4MWE2
ODZlODQwNTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJB
dWRpb1NhbXBsZUJ1ZmZlckxpc3QuaCIKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLSNp
bmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiVmVjdG9yTWF0aC5oIgotI2luY2x1ZGUgPEFj
Y2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9BdWRpb0NvbnZl
cnRlci5oPgotI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLVJlZjxBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q+IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6
Y3JlYXRlKGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZm9ybWF0LCBzaXplX3QgbWF4
aW11bVNhbXBsZUNvdW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEF1ZGlvU2FtcGxl
QnVmZmVyTGlzdChmb3JtYXQsIG1heGltdW1TYW1wbGVDb3VudCkpOwotfQotCi1BdWRpb1NhbXBs
ZUJ1ZmZlckxpc3Q6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdChjb25zdCBDQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24mIGZvcm1hdCwgc2l6ZV90IG1heGltdW1TYW1wbGVDb3VudCkKLSAgICA6IG1faW50
ZXJuYWxGb3JtYXQobWFrZVVuaXF1ZVJlZjxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+KGZvcm1h
dCkpCi0gICAgLCBtX3NhbXBsZUNhcGFjaXR5KG1heGltdW1TYW1wbGVDb3VudCkKLSAgICAsIG1f
bWF4QnVmZmVyU2l6ZVBlckNoYW5uZWwobWF4aW11bVNhbXBsZUNvdW50ICogZm9ybWF0LmJ5dGVz
UGVyRnJhbWUoKSAvIGZvcm1hdC5udW1iZXJPZkNoYW5uZWxTdHJlYW1zKCkpCi0gICAgLCBtX2J1
ZmZlckxpc3QobWFrZVVuaXF1ZVJlZjxXZWJBdWRpb0J1ZmZlckxpc3Q+KG1faW50ZXJuYWxGb3Jt
YXQsIG1fbWF4QnVmZmVyU2l6ZVBlckNoYW5uZWwpKQotewotICAgIEFTU0VSVChmb3JtYXQuc2Ft
cGxlUmF0ZSgpID49IDApOwotfQotCi1BdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6On5BdWRpb1NhbXBs
ZUJ1ZmZlckxpc3QoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpz
ZXRTYW1wbGVDb3VudChzaXplX3QgY291bnQpCi17Ci0gICAgQVNTRVJUKGNvdW50IDw9IG1fc2Ft
cGxlQ2FwYWNpdHkpOwotICAgIGlmIChjb3VudCA8PSBtX3NhbXBsZUNhcGFjaXR5KQotICAgICAg
ICBtX3NhbXBsZUNvdW50ID0gY291bnQ7Ci19Ci0KLXZvaWQgQXVkaW9TYW1wbGVCdWZmZXJMaXN0
OjphcHBseUdhaW4oQXVkaW9CdWZmZXJMaXN0JiBidWZmZXJMaXN0LCBmbG9hdCBnYWluLCBBdWRp
b1N0cmVhbURlc2NyaXB0aW9uOjpQQ01Gb3JtYXQgZm9ybWF0KQotewotICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBidWZmZXJMaXN0Lm1OdW1iZXJCdWZmZXJzOyArK2kpIHsKLSAgICAgICAg
c3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpJ
bnQxNjogewotICAgICAgICAgICAgaW50MTZfdCogYnVmZmVyID0gc3RhdGljX2Nhc3Q8aW50MTZf
dCo+KGJ1ZmZlckxpc3QubUJ1ZmZlcnNbaV0ubURhdGEpOwotICAgICAgICAgICAgaW50IGZyYW1l
Q291bnQgPSBidWZmZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgLyBzaXplb2YoaW50
MTZfdCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYW1lQ291bnQ7IGkrKykK
LSAgICAgICAgICAgICAgICBidWZmZXJbaV0gKj0gZ2FpbjsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6SW50MzI6IHsK
LSAgICAgICAgICAgIGludDMyX3QqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PGludDMyX3QqPihidWZm
ZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhKTsKLSAgICAgICAgICAgIGludCBmcmFtZUNvdW50ID0g
YnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplIC8gc2l6ZW9mKGludDMyX3QpOwot
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFtZUNvdW50OyBpKyspCi0gICAgICAg
ICAgICAgICAgYnVmZmVyW2ldICo9IGdhaW47Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bjo6RmxvYXQzMjogewotICAgICAgICAgICAgZmxvYXQqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PGZs
b2F0Kj4oYnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5tRGF0YSk7Ci0gICAgICAgICAgICB2RFNQX3Zz
bXVsKGJ1ZmZlciwgMSwgJmdhaW4sIGJ1ZmZlciwgMSwgYnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5t
RGF0YUJ5dGVTaXplIC8gc2l6ZW9mKGZsb2F0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OkZsb2F0NjQ6IHsKLSAg
ICAgICAgICAgIGRvdWJsZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8ZG91YmxlKj4oYnVmZmVyTGlz
dC5tQnVmZmVyc1tpXS5tRGF0YSk7Ci0gICAgICAgICAgICBkb3VibGUgZ2FpbkFzRG91YmxlID0g
Z2FpbjsKLSAgICAgICAgICAgIHZEU1BfdnNtdWxEKGJ1ZmZlciwgMSwgJmdhaW5Bc0RvdWJsZSwg
YnVmZmVyLCAxLCBidWZmZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgLyBzaXplb2Yo
ZG91YmxlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEF1
ZGlvU3RyZWFtRGVzY3JpcHRpb246Ok5vbmU6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEF1
ZGlvU2FtcGxlQnVmZmVyTGlzdDo6YXBwbHlHYWluKGZsb2F0IGdhaW4pCi17Ci0gICAgYXBwbHlH
YWluKG1fYnVmZmVyTGlzdC5nZXQoKSwgZ2FpbiwgbV9pbnRlcm5hbEZvcm1hdC0+Zm9ybWF0KCkp
OwotfQotCi1zdGF0aWMgdm9pZCBtaXhCdWZmZXJzKFdlYkF1ZGlvQnVmZmVyTGlzdCYgZGVzdGlu
YXRpb25CdWZmZXIsIGNvbnN0IEF1ZGlvQnVmZmVyTGlzdCYgc291cmNlQnVmZmVyLCBBdWRpb1N0
cmVhbURlc2NyaXB0aW9uOjpQQ01Gb3JtYXQgZm9ybWF0LCBzaXplX3QgZnJhbWVDb3VudCkKLXsK
LSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgZGVzdGluYXRpb25CdWZmZXIuYnVmZmVyQ291
bnQoKTsgaSsrKSB7Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbjo6SW50MTY6IHsKLSAgICAgICAgICAgIEFTU0VSVChmcmFtZUNv
dW50IDw9IGRlc3RpbmF0aW9uQnVmZmVyLmJ1ZmZlcihpKS0+bURhdGFCeXRlU2l6ZSAvIDIpOwot
ICAgICAgICAgICAgQVNTRVJUKGZyYW1lQ291bnQgPD0gc291cmNlQnVmZmVyLm1CdWZmZXJzW2ld
Lm1EYXRhQnl0ZVNpemUgLyAyKTsKLQotICAgICAgICAgICAgYXV0byogZGVzdGluYXRpb24gPSBz
dGF0aWNfY2FzdDxpbnQxNl90Kj4oZGVzdGluYXRpb25CdWZmZXIuYnVmZmVyKGkpLT5tRGF0YSk7
Ci0gICAgICAgICAgICBhdXRvKiBzb3VyY2UgPSBzdGF0aWNfY2FzdDxpbnQxNl90Kj4oc291cmNl
QnVmZmVyLm1CdWZmZXJzW2ldLm1EYXRhKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZnJhbWVDb3VudDsgaSsrKQotICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldICs9
IHNvdXJjZVtpXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6SW50MzI6IHsKLSAgICAgICAgICAgIEFTU0VSVChmcmFt
ZUNvdW50IDw9IGRlc3RpbmF0aW9uQnVmZmVyLmJ1ZmZlcihpKS0+bURhdGFCeXRlU2l6ZSAvIDQp
OwotICAgICAgICAgICAgQVNTRVJUKGZyYW1lQ291bnQgPD0gc291cmNlQnVmZmVyLm1CdWZmZXJz
W2ldLm1EYXRhQnl0ZVNpemUgLyA0KTsKLQotICAgICAgICAgICAgYXV0byogZGVzdGluYXRpb24g
PSBzdGF0aWNfY2FzdDxpbnQzMl90Kj4oZGVzdGluYXRpb25CdWZmZXIuYnVmZmVyKGkpLT5tRGF0
YSk7Ci0gICAgICAgICAgICB2RFNQX3ZhZGRpKGRlc3RpbmF0aW9uLCAxLCByZWludGVycHJldF9j
YXN0PGludDMyX3QqPihzb3VyY2VCdWZmZXIubUJ1ZmZlcnNbaV0ubURhdGEpLCAxLCBkZXN0aW5h
dGlvbiwgMSwgZnJhbWVDb3VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OkZsb2F0MzI6IHsKLSAgICAgICAgICAg
IEFTU0VSVChmcmFtZUNvdW50IDw9IGRlc3RpbmF0aW9uQnVmZmVyLmJ1ZmZlcihpKS0+bURhdGFC
eXRlU2l6ZSAvIDQpOwotICAgICAgICAgICAgQVNTRVJUKGZyYW1lQ291bnQgPD0gc291cmNlQnVm
ZmVyLm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgLyA0KTsKLQotICAgICAgICAgICAgYXV0byog
ZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdCo+KGRlc3RpbmF0aW9uQnVmZmVyLmJ1ZmZl
cihpKS0+bURhdGEpOwotICAgICAgICAgICAgdkRTUF92YWRkKGRlc3RpbmF0aW9uLCAxLCByZWlu
dGVycHJldF9jYXN0PGZsb2F0Kj4oc291cmNlQnVmZmVyLm1CdWZmZXJzW2ldLm1EYXRhKSwgMSwg
ZGVzdGluYXRpb24sIDEsIGZyYW1lQ291bnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpGbG9hdDY0OiB7Ci0gICAg
ICAgICAgICBBU1NFUlQoZnJhbWVDb3VudCA8PSBkZXN0aW5hdGlvbkJ1ZmZlci5idWZmZXIoaSkt
Pm1EYXRhQnl0ZVNpemUgLyA4KTsKLSAgICAgICAgICAgIEFTU0VSVChmcmFtZUNvdW50IDw9IHNv
dXJjZUJ1ZmZlci5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplIC8gOCk7Ci0KLSAgICAgICAgICAg
IGF1dG8qIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8ZG91YmxlKj4oZGVzdGluYXRpb25CdWZm
ZXIuYnVmZmVyKGkpLT5tRGF0YSk7Ci0gICAgICAgICAgICB2RFNQX3ZhZGREKGRlc3RpbmF0aW9u
LCAxLCByZWludGVycHJldF9jYXN0PGRvdWJsZSo+KHNvdXJjZUJ1ZmZlci5tQnVmZmVyc1tpXS5t
RGF0YSksIDEsIGRlc3RpbmF0aW9uLCAxLCBmcmFtZUNvdW50KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6Tm9uZToK
LSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLU9TU3RhdHVzIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6bWl4
RnJvbShjb25zdCBBdWRpb1NhbXBsZUJ1ZmZlckxpc3QmIHNvdXJjZSwgc2l6ZV90IGZyYW1lQ291
bnQpCi17Ci0gICAgQVNTRVJUKHNvdXJjZS5zdHJlYW1EZXNjcmlwdGlvbigpID09IHN0cmVhbURl
c2NyaXB0aW9uKCkpOwotCi0gICAgaWYgKHNvdXJjZS5zdHJlYW1EZXNjcmlwdGlvbigpICE9IHN0
cmVhbURlc2NyaXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBrQXVkaW9fUGFyYW1FcnJvcjsKLQot
ICAgIGlmIChmcmFtZUNvdW50ID4gc291cmNlLnNhbXBsZUNvdW50KCkpCi0gICAgICAgIGZyYW1l
Q291bnQgPSBzb3VyY2Uuc2FtcGxlQ291bnQoKTsKLQotICAgIGlmIChmcmFtZUNvdW50ID4gbV9z
YW1wbGVDYXBhY2l0eSkKLSAgICAgICAgcmV0dXJuIGtBdWRpb19QYXJhbUVycm9yOwotCi0gICAg
bV9zYW1wbGVDb3VudCA9IGZyYW1lQ291bnQ7Ci0KLSAgICBtaXhCdWZmZXJzKGJ1ZmZlckxpc3Qo
KSwgc291cmNlLmJ1ZmZlckxpc3QoKSwgbV9pbnRlcm5hbEZvcm1hdC0+Zm9ybWF0KCksIGZyYW1l
Q291bnQpOwotICAgIHJldHVybiAwOwotfQotCi1PU1N0YXR1cyBBdWRpb1NhbXBsZUJ1ZmZlckxp
c3Q6OmNvcHlGcm9tKGNvbnN0IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCYgc291cmNlLCBzaXplX3Qg
ZnJhbWVDb3VudCkKLXsKLSAgICBBU1NFUlQoc291cmNlLnN0cmVhbURlc2NyaXB0aW9uKCkgPT0g
c3RyZWFtRGVzY3JpcHRpb24oKSk7Ci0KLSAgICBpZiAoc291cmNlLnN0cmVhbURlc2NyaXB0aW9u
KCkgIT0gc3RyZWFtRGVzY3JpcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGtBdWRpb19QYXJhbUVy
cm9yOwotCi0gICAgaWYgKGZyYW1lQ291bnQgPiBzb3VyY2Uuc2FtcGxlQ291bnQoKSkKLSAgICAg
ICAgZnJhbWVDb3VudCA9IHNvdXJjZS5zYW1wbGVDb3VudCgpOwotCi0gICAgaWYgKGZyYW1lQ291
bnQgPiBtX3NhbXBsZUNhcGFjaXR5KQotICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7
Ci0KLSAgICBtX3NhbXBsZUNvdW50ID0gZnJhbWVDb3VudDsKLQotICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBtX2J1ZmZlckxpc3QtPmJ1ZmZlckNvdW50KCk7IGkrKykgewotICAgICAgICB1
aW50OF90KiBzb3VyY2VEYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHNvdXJjZS5idWZmZXJM
aXN0KCkuYnVmZmVyKGkpLT5tRGF0YSk7Ci0gICAgICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uID0g
c3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fYnVmZmVyTGlzdC0+YnVmZmVyKGkpLT5tRGF0YSk7Ci0g
ICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNlRGF0YSwgZnJhbWVDb3VudCAqIG1faW50
ZXJuYWxGb3JtYXQtPmJ5dGVzUGVyUGFja2V0KCkpOwotICAgIH0KLQotICAgIHJldHVybiAwOwot
fQotCi1PU1N0YXR1cyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNvcHlUbyhBdWRpb0J1ZmZlckxp
c3QmIGJ1ZmZlciwgc2l6ZV90IGZyYW1lQ291bnQpCi17Ci0gICAgaWYgKGZyYW1lQ291bnQgPiBt
X3NhbXBsZUNvdW50KQotICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7Ci0gICAgaWYg
KGJ1ZmZlci5tTnVtYmVyQnVmZmVycyA+IG1fYnVmZmVyTGlzdC0+YnVmZmVyQ291bnQoKSkKLSAg
ICAgICAgcmV0dXJuIGtBdWRpb19QYXJhbUVycm9yOwotCi0gICAgZm9yICh1aW50MzJfdCBpID0g
MDsgaSA8IGJ1ZmZlci5tTnVtYmVyQnVmZmVyczsgaSsrKSB7Ci0gICAgICAgIHVpbnQ4X3QqIHNv
dXJjZURhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9idWZmZXJMaXN0LT5idWZmZXIoaSkt
Pm1EYXRhKTsKLSAgICAgICAgdWludDhfdCogZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDx1aW50
OF90Kj4oYnVmZmVyLm1CdWZmZXJzW2ldLm1EYXRhKTsKLSAgICAgICAgbWVtY3B5KGRlc3RpbmF0
aW9uLCBzb3VyY2VEYXRhLCBmcmFtZUNvdW50ICogbV9pbnRlcm5hbEZvcm1hdC0+Ynl0ZXNQZXJQ
YWNrZXQoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLU9TU3RhdHVzIEF1ZGlvU2Ft
cGxlQnVmZmVyTGlzdDo6bWl4RnJvbShjb25zdCBBdWRpb0J1ZmZlckxpc3QmIHNvdXJjZSwgc2l6
ZV90IGZyYW1lQ291bnQpCi17Ci0gICAgaWYgKGZyYW1lQ291bnQgPiBtX3NhbXBsZUNvdW50KQot
ICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7Ci0gICAgaWYgKHNvdXJjZS5tTnVtYmVy
QnVmZmVycyA+IG1fYnVmZmVyTGlzdC0+YnVmZmVyQ291bnQoKSkKLSAgICAgICAgcmV0dXJuIGtB
dWRpb19QYXJhbUVycm9yOwotCi0gICAgbWl4QnVmZmVycyhidWZmZXJMaXN0KCksIHNvdXJjZSwg
bV9pbnRlcm5hbEZvcm1hdC0+Zm9ybWF0KCksIGZyYW1lQ291bnQpOwotICAgIHJldHVybiAwOwot
fQotCi12b2lkIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6cmVzZXQoKQotewotICAgIG1fc2FtcGxl
Q291bnQgPSAwOwotICAgIG1fdGltZXN0YW1wID0gMDsKLSAgICBtX2hvc3RUaW1lID0gLTE7Ci0K
LSAgICBtX2J1ZmZlckxpc3QtPnJlc2V0KCk7Ci19Ci0KLXZvaWQgQXVkaW9TYW1wbGVCdWZmZXJM
aXN0Ojp6ZXJvKCkKLXsKLSAgICB6ZXJvQUJMKG1fYnVmZmVyTGlzdC5nZXQoKSwgbV9pbnRlcm5h
bEZvcm1hdC0+Ynl0ZXNQZXJQYWNrZXQoKSAqIG1fc2FtcGxlQ2FwYWNpdHkpOwotfQotCi12b2lk
IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChBdWRpb0J1ZmZlckxpc3QmIGJ1ZmZlciwg
c2l6ZV90IGJ5dGVDb3VudCkKLXsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYnVmZmVy
Lm1OdW1iZXJCdWZmZXJzOyArK2kpCi0gICAgICAgIG1lbXNldChidWZmZXIubUJ1ZmZlcnNbaV0u
bURhdGEsIDAsIGJ5dGVDb3VudCk7Ci19Ci0KLXN0cnVjdCBBdWRpb0NvbnZlcnRlckZyb21BQkxD
b250ZXh0IHsKLSAgICBjb25zdCBBdWRpb0J1ZmZlckxpc3QmIGJ1ZmZlcjsKLSAgICBzaXplX3Qg
cGFja2V0c0F2YWlsYWJsZVRvQ29udmVydDsKLSAgICBzaXplX3QgYnl0ZXNQZXJQYWNrZXQ7Ci19
OwotCi1zdGF0aWMgY29uc3QgT1NTdGF0dXMga1Jhbk91dE9mSW5wdXREYXRhU3RhdHVzID0gJyFt
b3InOwotCi1zdGF0aWMgT1NTdGF0dXMgYXVkaW9Db252ZXJ0ZXJGcm9tQUJMQ2FsbGJhY2soQXVk
aW9Db252ZXJ0ZXJSZWYsIFVJbnQzMiogaW9OdW1iZXJEYXRhUGFja2V0cywgQXVkaW9CdWZmZXJM
aXN0KiBpb0RhdGEsIEF1ZGlvU3RyZWFtUGFja2V0RGVzY3JpcHRpb24qKiwgdm9pZCogaW5SZWZD
b24pCi17Ci0gICAgaWYgKCFpb051bWJlckRhdGFQYWNrZXRzIHx8ICFpb0RhdGEgfHwgIWluUmVm
Q29uKSB7Ci0gICAgICAgIExPR19FUlJPUigiQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjphdWRpb0Nv
bnZlcnRlckNhbGxiYWNrKCkgaW52YWxpZCBpbnB1dCB0byBBdWRpb0NvbnZlcnRlcklucHV0Iik7
Ci0gICAgICAgIHJldHVybiBrQXVkaW9Db252ZXJ0ZXJFcnJfVW5zcGVjaWZpZWRFcnJvcjsKLSAg
ICB9Ci0KLSAgICBhdXRvJiBjb250ZXh0ID0gKnN0YXRpY19jYXN0PEF1ZGlvQ29udmVydGVyRnJv
bUFCTENvbnRleHQqPihpblJlZkNvbik7Ci0gICAgaWYgKCFjb250ZXh0LnBhY2tldHNBdmFpbGFi
bGVUb0NvbnZlcnQpIHsKLSAgICAgICAgKmlvTnVtYmVyRGF0YVBhY2tldHMgPSAwOwotICAgICAg
ICByZXR1cm4ga1Jhbk91dE9mSW5wdXREYXRhU3RhdHVzOwotICAgIH0KLQotICAgICppb051bWJl
ckRhdGFQYWNrZXRzID0gc3RhdGljX2Nhc3Q8VUludDMyPihjb250ZXh0LnBhY2tldHNBdmFpbGFi
bGVUb0NvbnZlcnQpOwotCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGlvRGF0YS0+bU51
bWJlckJ1ZmZlcnM7ICsraSkgewotICAgICAgICBpb0RhdGEtPm1CdWZmZXJzW2ldLm1EYXRhID0g
Y29udGV4dC5idWZmZXIubUJ1ZmZlcnNbaV0ubURhdGE7Ci0gICAgICAgIGlvRGF0YS0+bUJ1ZmZl
cnNbaV0ubURhdGFCeXRlU2l6ZSA9IGNvbnRleHQucGFja2V0c0F2YWlsYWJsZVRvQ29udmVydCAq
IGNvbnRleHQuYnl0ZXNQZXJQYWNrZXQ7Ci0gICAgfQotICAgIGNvbnRleHQucGFja2V0c0F2YWls
YWJsZVRvQ29udmVydCA9IDA7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotT1NTdGF0dXMgQXVkaW9T
YW1wbGVCdWZmZXJMaXN0Ojpjb3B5RnJvbShjb25zdCBBdWRpb0J1ZmZlckxpc3QmIHNvdXJjZSwg
c2l6ZV90IGZyYW1lQ291bnQsIEF1ZGlvQ29udmVydGVyUmVmIGNvbnZlcnRlcikKLXsKLSAgICBy
ZXNldCgpOwotCi0gICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIGlucHV0Rm9ybWF0Owot
ICAgIFVJbnQzMiBwcm9wZXJ0eURhdGFTaXplID0gc2l6ZW9mKGlucHV0Rm9ybWF0KTsKLSAgICBB
dWRpb0NvbnZlcnRlckdldFByb3BlcnR5KGNvbnZlcnRlciwga0F1ZGlvQ29udmVydGVyQ3VycmVu
dElucHV0U3RyZWFtRGVzY3JpcHRpb24sICZwcm9wZXJ0eURhdGFTaXplLCAmaW5wdXRGb3JtYXQp
OwotICAgIEFTU0VSVChmcmFtZUNvdW50IDw9IHNvdXJjZS5tQnVmZmVyc1swXS5tRGF0YUJ5dGVT
aXplIC8gaW5wdXRGb3JtYXQubUJ5dGVzUGVyUGFja2V0KTsKLQotICAgIEF1ZGlvQ29udmVydGVy
RnJvbUFCTENvbnRleHQgY29udGV4dCB7IHNvdXJjZSwgZnJhbWVDb3VudCwgaW5wdXRGb3JtYXQu
bUJ5dGVzUGVyUGFja2V0IH07Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgQXVkaW9TdHJlYW1C
YXNpY0Rlc2NyaXB0aW9uIG91dHB1dEZvcm1hdDsKLSAgICBwcm9wZXJ0eURhdGFTaXplID0gc2l6
ZW9mKG91dHB1dEZvcm1hdCk7Ci0gICAgQXVkaW9Db252ZXJ0ZXJHZXRQcm9wZXJ0eShjb252ZXJ0
ZXIsIGtBdWRpb0NvbnZlcnRlckN1cnJlbnRPdXRwdXRTdHJlYW1EZXNjcmlwdGlvbiwgJnByb3Bl
cnR5RGF0YVNpemUsICZvdXRwdXRGb3JtYXQpOwotCi0gICAgQVNTRVJUKENBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbihvdXRwdXRGb3JtYXQpLm51bWJlck9mQ2hhbm5lbFN0cmVhbXMoKSA9PSBtX2J1
ZmZlckxpc3QtPmJ1ZmZlckNvdW50KCkpOwotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBt
X2J1ZmZlckxpc3QtPmJ1ZmZlckNvdW50KCk7ICsraSkgewotICAgICAgICBBU1NFUlQobV9idWZm
ZXJMaXN0LT5idWZmZXIoaSktPm1EYXRhKTsKLSAgICAgICAgQVNTRVJUKG1fYnVmZmVyTGlzdC0+
YnVmZmVyKGkpLT5tRGF0YUJ5dGVTaXplKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIFVJbnQzMiBz
YW1wbGVzQ29udmVydGVkID0gbV9zYW1wbGVDYXBhY2l0eTsKLSAgICBPU1N0YXR1cyBlcnIgPSBB
dWRpb0NvbnZlcnRlckZpbGxDb21wbGV4QnVmZmVyKGNvbnZlcnRlciwgYXVkaW9Db252ZXJ0ZXJG
cm9tQUJMQ2FsbGJhY2ssICZjb250ZXh0LCAmc2FtcGxlc0NvbnZlcnRlZCwgbV9idWZmZXJMaXN0
LT5saXN0KCksIG51bGxwdHIpOwotICAgIGlmICghZXJyIHx8IGVyciA9PSBrUmFuT3V0T2ZJbnB1
dERhdGFTdGF0dXMpIHsKLSAgICAgICAgbV9zYW1wbGVDb3VudCA9IHNhbXBsZXNDb252ZXJ0ZWQ7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIExPR19FUlJPUigiQXVkaW9TYW1wbGVC
dWZmZXJMaXN0Ojpjb3B5RnJvbSglcCkgQXVkaW9Db252ZXJ0ZXJGaWxsQ29tcGxleEJ1ZmZlciBy
ZXR1cm5lZCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwot
ICAgIG1fc2FtcGxlQ291bnQgPSBzdGQ6Om1pbihtX3NhbXBsZUNhcGFjaXR5LCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KHNhbXBsZXNDb252ZXJ0ZWQpKTsKLSAgICB6ZXJvKCk7Ci0gICAgcmV0dXJuIGVy
cjsKLX0KLQotT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb3B5RnJvbShBdWRpb1Nh
bXBsZUJ1ZmZlckxpc3QmIHNvdXJjZSwgc2l6ZV90IGZyYW1lQ291bnQsIEF1ZGlvQ29udmVydGVy
UmVmIGNvbnZlcnRlcikKLXsKLSAgICByZXR1cm4gY29weUZyb20oc291cmNlLmJ1ZmZlckxpc3Qo
KSwgZnJhbWVDb3VudCwgY29udmVydGVyKTsKLX0KLQotT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZm
ZXJMaXN0Ojpjb3B5RnJvbShDQVJpbmdCdWZmZXImIHJpbmdCdWZmZXIsIHNpemVfdCBzYW1wbGVD
b3VudCwgdWludDY0X3Qgc3RhcnRGcmFtZSwgQ0FSaW5nQnVmZmVyOjpGZXRjaE1vZGUgbW9kZSkK
LXsKLSAgICByZXNldCgpOwotICAgIGlmIChyaW5nQnVmZmVyLmZldGNoKGJ1ZmZlckxpc3QoKS5s
aXN0KCksIHNhbXBsZUNvdW50LCBzdGFydEZyYW1lLCBtb2RlKSAhPSBDQVJpbmdCdWZmZXI6Ok9r
KQotICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7Ci0KLSAgICBtX3NhbXBsZUNvdW50
ID0gc2FtcGxlQ291bnQ7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxNTJmODYwMGJkOTQ5MTAwYjYyOTJiOGY2YTQ4
NDMwZTFkOGVjMzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlz
dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCi0KLSNpbmNsdWRlICJDQVJpbmdCdWZmZXIuaCIKLSNpbmNsdWRlICJXZWJBdWRp
b0J1ZmZlckxpc3QuaCIKLSNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KLSNp
bmNsdWRlIDx3dGYvTG9jay5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgotCi10eXBlZGVmIHN0cnVjdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3Jp
cHRpb24gQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uOwotdHlwZWRlZiBzdHJ1Y3QgT3BhcXVl
QXVkaW9Db252ZXJ0ZXIqIEF1ZGlvQ29udmVydGVyUmVmOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPEF1ZGlv
U2FtcGxlQnVmZmVyTGlzdD4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8QXVkaW9TYW1wbGVC
dWZmZXJMaXN0PiBjcmVhdGUoY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiwgc2l6ZV90
KTsKLQotICAgIH5BdWRpb1NhbXBsZUJ1ZmZlckxpc3QoKTsKLQotICAgIHN0YXRpYyBpbmxpbmUg
c2l6ZV90IGF1ZGlvQnVmZmVyTGlzdFNpemVGb3JTdHJlYW0oY29uc3QgQ0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uJik7Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUdhaW4oQXVkaW9CdWZmZXJMaXN0
JiwgZmxvYXQsIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OlBDTUZvcm1hdCk7Ci0gICAgdm9pZCBh
cHBseUdhaW4oZmxvYXQpOwotCi0gICAgT1NTdGF0dXMgY29weUZyb20oY29uc3QgQXVkaW9TYW1w
bGVCdWZmZXJMaXN0Jiwgc2l6ZV90IGNvdW50ID0gU0laRV9NQVgpOwotICAgIE9TU3RhdHVzIGNv
cHlGcm9tKGNvbnN0IEF1ZGlvQnVmZmVyTGlzdCYsIHNpemVfdCBmcmFtZUNvdW50LCBBdWRpb0Nv
bnZlcnRlclJlZik7Ci0gICAgT1NTdGF0dXMgY29weUZyb20oQXVkaW9TYW1wbGVCdWZmZXJMaXN0
Jiwgc2l6ZV90IGZyYW1lQ291bnQsIEF1ZGlvQ29udmVydGVyUmVmKTsKLSAgICBPU1N0YXR1cyBj
b3B5RnJvbShDQVJpbmdCdWZmZXImLCBzaXplX3QgZnJhbWVDb3VudCwgdWludDY0X3Qgc3RhcnRG
cmFtZSwgQ0FSaW5nQnVmZmVyOjpGZXRjaE1vZGUpOwotCi0gICAgT1NTdGF0dXMgbWl4RnJvbShj
b25zdCBBdWRpb1NhbXBsZUJ1ZmZlckxpc3QmLCBzaXplX3QgY291bnQgPSBTSVpFX01BWCk7Ci0K
LSAgICBPU1N0YXR1cyBtaXhGcm9tKGNvbnN0IEF1ZGlvQnVmZmVyTGlzdCYsIHNpemVfdCBjb3Vu
dCA9IFNJWkVfTUFYKTsKLSAgICBPU1N0YXR1cyBjb3B5VG8oQXVkaW9CdWZmZXJMaXN0Jiwgc2l6
ZV90IGNvdW50ID0gU0laRV9NQVgpOwotCi0gICAgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2Ny
aXB0aW9uJiBzdHJlYW1EZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJuYWxGb3Jt
YXQtPnN0cmVhbURlc2NyaXB0aW9uKCk7IH0KLSAgICBjb25zdCBXZWJBdWRpb0J1ZmZlckxpc3Qm
IGJ1ZmZlckxpc3QoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlckxpc3Q7IH0KLSAgICBXZWJBdWRp
b0J1ZmZlckxpc3QmIGJ1ZmZlckxpc3QoKSB7IHJldHVybiBtX2J1ZmZlckxpc3Q7IH0KLQotICAg
IHVpbnQzMl90IHNhbXBsZUNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVDYXBhY2l0
eTsgfQotICAgIHVpbnQzMl90IHNhbXBsZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVD
b3VudDsgfQotICAgIHZvaWQgc2V0U2FtcGxlQ291bnQoc2l6ZV90KTsKLQotICAgIHVpbnQ2NF90
IHRpbWVzdGFtcCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZXN0YW1wOyB9Ci0gICAgZG91YmxlIGhv
c3RUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9ob3N0VGltZTsgfQotICAgIHZvaWQgc2V0VGltZXMo
dWludDY0X3QgdGltZSwgZG91YmxlIGhvc3RUaW1lKSB7IG1fdGltZXN0YW1wID0gdGltZTsgbV9o
b3N0VGltZSA9IGhvc3RUaW1lOyB9Ci0KLSAgICB2b2lkIHJlc2V0KCk7Ci0KLSAgICBzdGF0aWMg
dm9pZCB6ZXJvQUJMKEF1ZGlvQnVmZmVyTGlzdCYsIHNpemVfdCk7Ci0gICAgdm9pZCB6ZXJvKCk7
Ci0KLXByb3RlY3RlZDoKLSAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3QoY29uc3QgQ0FBdWRpb1N0
cmVhbURlc2NyaXB0aW9uJiwgc2l6ZV90KTsKLQotICAgIFVuaXF1ZVJlZjxDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24+IG1faW50ZXJuYWxGb3JtYXQ7Ci0KLSAgICB1aW50NjRfdCBtX3RpbWVzdGFt
cCB7IDAgfTsKLSAgICBkb3VibGUgbV9ob3N0VGltZSB7IC0xIH07Ci0gICAgc2l6ZV90IG1fc2Ft
cGxlQ291bnQgeyAwIH07Ci0gICAgc2l6ZV90IG1fc2FtcGxlQ2FwYWNpdHkgeyAwIH07Ci0gICAg
c2l6ZV90IG1fbWF4QnVmZmVyU2l6ZVBlckNoYW5uZWwgeyAwIH07Ci0gICAgc2l6ZV90IG1fYnVm
ZmVyTGlzdEJhc2VTaXplIHsgMCB9OwotICAgIFVuaXF1ZVJlZjxXZWJBdWRpb0J1ZmZlckxpc3Q+
IG1fYnVmZmVyTGlzdDsKLX07Ci0KLWlubGluZSBzaXplX3QgQXVkaW9TYW1wbGVCdWZmZXJMaXN0
OjphdWRpb0J1ZmZlckxpc3RTaXplRm9yU3RyZWFtKGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24pCi17Ci0gICAgcmV0dXJuIG9mZnNldG9mKEF1ZGlvQnVmZmVyTGlz
dCwgbUJ1ZmZlcnMpICsgKHNpemVvZihBdWRpb0J1ZmZlcikgKiBzdGQ6Om1heDx1aW50MzJfdD4o
MSwgZGVzY3JpcHRpb24ubnVtYmVyT2ZDaGFubmVsU3RyZWFtcygpKSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVEYXRhU291
cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVEYXRh
U291cmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5OWI5NGFmMTYzNzAxZGFk
NWYzM2NlMjI2YjMyMDM1MzdhZWM4NTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2Ft
cGxlRGF0YVNvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLSNpbmNsdWRlICJBdWRpb1NhbXBsZUJ1ZmZlckxpc3Qu
aCIKLSNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYv
TG9nZ2VySGVscGVyLmg+Ci0jaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotdHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVl
Q01Gb3JtYXREZXNjcmlwdGlvbiAqQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsKLXR5cGVkZWYgc3Ry
dWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyICpDTVNhbXBsZUJ1ZmZlclJlZjsKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb247Ci1jbGFzcyBDQVJp
bmdCdWZmZXI7Ci0KLWNsYXNzIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZSA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxBdWRpb1NhbXBsZURhdGFTb3VyY2UsIFdURjo6RGVzdHJ1Y3Rpb25UaHJl
YWQ6Ok1haW5SdW5Mb29wPgotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgICwgcHJpdmF0
ZSBMb2dnZXJIZWxwZXIKLSNlbmRpZgotICAgIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEF1
ZGlvU2FtcGxlRGF0YVNvdXJjZT4gY3JlYXRlKHNpemVfdCwgV1RGOjpMb2dnZXJIZWxwZXImKTsK
LQotICAgIH5BdWRpb1NhbXBsZURhdGFTb3VyY2UoKTsKLQotICAgIE9TU3RhdHVzIHNldElucHV0
Rm9ybWF0KGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYpOwotICAgIE9TU3RhdHVzIHNl
dE91dHB1dEZvcm1hdChjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mKTsKLQotICAgIHZv
aWQgcHVzaFNhbXBsZXMoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgUGxhdGZvcm1BdWRpb0RhdGEm
LCBzaXplX3QpOwotICAgIHZvaWQgcHVzaFNhbXBsZXMoY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rl
c2NyaXB0aW9uJiwgQ01TYW1wbGVCdWZmZXJSZWYpOwotCi0gICAgZW51bSBQdWxsTW9kZSB7IENv
cHksIE1peCB9OwotICAgIGJvb2wgcHVsbFNhbXBsZXMoQXVkaW9TYW1wbGVCdWZmZXJMaXN0Jiwg
c2l6ZV90LCB1aW50NjRfdCwgZG91YmxlLCBQdWxsTW9kZSk7Ci0gICAgYm9vbCBwdWxsU2FtcGxl
cyhBdWRpb0J1ZmZlckxpc3QmLCBzaXplX3QsIHVpbnQ2NF90LCBkb3VibGUsIFB1bGxNb2RlKTsK
LQotICAgIGJvb2wgcHVsbEF2YWxhaWJsZVNhbXBsZXNBc0NodW5rcyhBdWRpb0J1ZmZlckxpc3Qm
LCBzaXplX3QgZnJhbWVDb3VudCwgdWludDY0X3QgdGltZVN0YW1wLCBGdW5jdGlvbjx2b2lkKCk+
JiYpOwotCi0gICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKSB7IG1fdm9sdW1lID0gdm9s
dW1lOyB9Ci0gICAgZmxvYXQgdm9sdW1lKCkgY29uc3QgeyByZXR1cm4gbV92b2x1bWU7IH0KLQot
ICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCBtdXRlZCkgeyBtX211dGVkID0gbXV0ZWQ7IH0KLSAgICBi
b29sIG11dGVkKCkgY29uc3QgeyByZXR1cm4gbV9tdXRlZDsgfQotCi0gICAgY29uc3QgQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uKiBpbnB1dERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9p
bnB1dERlc2NyaXB0aW9uLmdldCgpOyB9Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAg
ICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbG9nZ2VyOyB9
Ci0gICAgY29uc3Qgdm9pZCogbG9nSWRlbnRpZmllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
bG9nSWRlbnRpZmllcjsgfQotICAgIHZvaWQgc2V0TG9nZ2VyKFJlZjxjb25zdCBMb2dnZXI+JiYs
IGNvbnN0IHZvaWQqKTsKLSNlbmRpZgotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBFcXVp
dmFsZW50VG9NYXhWb2x1bWUgPSAwLjk1OwotCi1wcml2YXRlOgotICAgIEF1ZGlvU2FtcGxlRGF0
YVNvdXJjZShzaXplX3QsIExvZ2dlckhlbHBlciYpOwotCi0gICAgT1NTdGF0dXMgc2V0dXBDb252
ZXJ0ZXIoKTsKLSAgICBib29sIHB1bGxTYW1wbGVzSW50ZXJuYWwoQXVkaW9CdWZmZXJMaXN0Jiwg
c2l6ZV90JiwgdWludDY0X3QsIGRvdWJsZSwgUHVsbE1vZGUpOwotCi0gICAgdm9pZCBwdXNoU2Ft
cGxlc0ludGVybmFsKGNvbnN0IEF1ZGlvQnVmZmVyTGlzdCYsIGNvbnN0IE1lZGlhVGltZSYsIHNp
emVfdCBmcmFtZUNvdW50KTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24+IG1faW5wdXREZXNjcmlwdGlvbjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uPiBtX291dHB1dERlc2NyaXB0aW9uOwotCi0gICAgTWVkaWFUaW1l
IGhvc3RUaW1lKCkgY29uc3Q7Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBjb25z
dCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiQXVkaW9TYW1wbGVE
YXRhU291cmNlIjsgfQotICAgIFdURkxvZ0NoYW5uZWwmIGxvZ0NoYW5uZWwoKSBjb25zdCBmaW5h
bDsKLSNlbmRpZgotCi0gICAgdWludDY0X3QgbV9sYXN0UHVzaGVkU2FtcGxlQ291bnQgeyAwIH07
Ci0gICAgTWVkaWFUaW1lIG1fZXhwZWN0ZWROZXh0UHVzaGVkU2FtcGxlVGltZSB7IE1lZGlhVGlt
ZTo6aW52YWxpZFRpbWUoKSB9OwotCi0gICAgTWVkaWFUaW1lIG1faW5wdXRTYW1wbGVPZmZzZXQ7
Ci0gICAgaW50NjRfdCBtX291dHB1dFNhbXBsZU9mZnNldCB7IDAgfTsKLQotICAgIEF1ZGlvQ29u
dmVydGVyUmVmIG1fY29udmVydGVyOwotICAgIFJlZlB0cjxBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q+
IG1fc2NyYXRjaEJ1ZmZlcjsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDQVJpbmdCdWZmZXI+IG1f
cmluZ0J1ZmZlcjsKLSAgICBzaXplX3QgbV9tYXhpbXVtU2FtcGxlQ291bnQgeyAwIH07Ci0KLSAg
ICBmbG9hdCBtX3ZvbHVtZSB7IDEuMCB9OwotICAgIGJvb2wgbV9tdXRlZCB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBtX3Nob3VsZENvbXB1dGVPdXRwdXRTYW1wbGVPZmZzZXQgeyB0cnVlIH07Ci0gICAg
dWludDY0X3QgbV9lbmRGcmFtZVdoZW5Ob3RFbm91Z2hEYXRhIHsgMCB9OwotCi0jaWYgIVJFTEVB
U0VfTE9HX0RJU0FCTEVECi0gICAgUmVmPGNvbnN0IExvZ2dlcj4gbV9sb2dnZXI7Ci0gICAgY29u
c3Qgdm9pZCogbV9sb2dJZGVudGlmaWVyOwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFTb3VyY2Uu
bW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMmM3MjE2ZDRjYzBiMTdlMDJiMjY5
NDBhYzM2OGFhYjI3MTA3NTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlRGF0
YVNvdXJjZS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDM4MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1w
b3J0ICJBdWRpb1NhbXBsZURhdGFTb3VyY2UuaCIKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
Ci0KLSNpbXBvcnQgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgotI2ltcG9ydCAiQ0FSaW5n
QnVmZmVyLmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZS5oIgotI2ltcG9ydCA8QXVkaW9Ub29sYm94L0F1ZGlvQ29udmVydGVyLmg+Ci0jaW1w
b3J0IDxtYWNoL21hY2guaD4KLSNpbXBvcnQgPG1hY2gvbWFjaF90aW1lLmg+Ci0jaW1wb3J0IDxt
dXRleD4KLSNpbXBvcnQgPHBhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmg+
Ci0jaW1wb3J0IDxzeXNsb2cuaD4KLSNpbXBvcnQgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgot
Ci0jaW1wb3J0IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotdXNpbmcgbmFtZXNwYWNlIFBBTDsKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLVJlZjxB
dWRpb1NhbXBsZURhdGFTb3VyY2U+IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6Y3JlYXRlKHNpemVf
dCBtYXhpbXVtU2FtcGxlQ291bnQsIExvZ2dlckhlbHBlciYgbG9nZ2VySGVscGVyKQotewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZShtYXhpbXVtU2FtcGxl
Q291bnQsIGxvZ2dlckhlbHBlcikpOwotfQotCi1BdWRpb1NhbXBsZURhdGFTb3VyY2U6OkF1ZGlv
U2FtcGxlRGF0YVNvdXJjZShzaXplX3QgbWF4aW11bVNhbXBsZUNvdW50LCBMb2dnZXJIZWxwZXIm
IGxvZ2dlckhlbHBlcikKLSAgICA6IG1faW5wdXRTYW1wbGVPZmZzZXQoTWVkaWFUaW1lOjppbnZh
bGlkVGltZSgpKQotICAgICwgbV9tYXhpbXVtU2FtcGxlQ291bnQobWF4aW11bVNhbXBsZUNvdW50
KQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgICwgbV9sb2dnZXIobG9nZ2VySGVscGVy
LmxvZ2dlcigpKQotICAgICwgbV9sb2dJZGVudGlmaWVyKGxvZ2dlckhlbHBlci5sb2dJZGVudGlm
aWVyKCkpCi0jZW5kaWYKLXsKLSNpZiBSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIFVOVVNFRF9Q
QVJBTShsb2dnZXJIZWxwZXIpOwotI2VuZGlmCi19Ci0KLUF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6
fkF1ZGlvU2FtcGxlRGF0YVNvdXJjZSgpCi17Ci0gICAgbV9pbnB1dERlc2NyaXB0aW9uID0gbnVs
bHB0cjsKLSAgICBtX291dHB1dERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICBtX3JpbmdCdWZm
ZXIgPSBudWxscHRyOwotICAgIGlmIChtX2NvbnZlcnRlcikgewotICAgICAgICBBdWRpb0NvbnZl
cnRlckRpc3Bvc2UobV9jb252ZXJ0ZXIpOwotICAgICAgICBtX2NvbnZlcnRlciA9IG51bGxwdHI7
Ci0gICAgfQotfQotCi1PU1N0YXR1cyBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnNldHVwQ29udmVy
dGVyKCkKLXsKLSAgICBBU1NFUlQobV9pbnB1dERlc2NyaXB0aW9uICYmIG1fb3V0cHV0RGVzY3Jp
cHRpb24pOwotCi0gICAgaWYgKG1fY29udmVydGVyKSB7Ci0gICAgICAgIEF1ZGlvQ29udmVydGVy
RGlzcG9zZShtX2NvbnZlcnRlcik7Ci0gICAgICAgIG1fY29udmVydGVyID0gbnVsbHB0cjsKLSAg
ICB9Ci0KLSAgICBpZiAoKm1faW5wdXREZXNjcmlwdGlvbiA9PSAqbV9vdXRwdXREZXNjcmlwdGlv
bikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBPU1N0YXR1cyBlcnIgPSBBdWRpb0NvbnZlcnRl
ck5ldygmbV9pbnB1dERlc2NyaXB0aW9uLT5zdHJlYW1EZXNjcmlwdGlvbigpLCAmbV9vdXRwdXRE
ZXNjcmlwdGlvbi0+c3RyZWFtRGVzY3JpcHRpb24oKSwgJm1fY29udmVydGVyKTsKLSAgICBpZiAo
ZXJyKSB7Ci0gICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZlB0cigqdGhpcyksIGVycl0gewotICAgICAg
ICAgICAgRVJST1JfTE9HKCJBdWRpb0NvbnZlcnRlck5ldyByZXR1cm5lZCBlcnJvciAiLCBlcnIp
OwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZXJyOwotCi19Ci0KLU9TU3RhdHVz
IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6c2V0SW5wdXRGb3JtYXQoY29uc3QgQ0FBdWRpb1N0cmVh
bURlc2NyaXB0aW9uJiBmb3JtYXQpCi17Ci0gICAgQVNTRVJUKGZvcm1hdC5zYW1wbGVSYXRlKCkg
Pj0gMCk7Ci0KLSAgICBtX2lucHV0RGVzY3JpcHRpb24gPSBtYWtlVW5pcXVlPENBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbj4oZm9ybWF0KTsKLSAgICBpZiAobV9vdXRwdXREZXNjcmlwdGlvbikKLSAg
ICAgICAgcmV0dXJuIHNldHVwQ29udmVydGVyKCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotT1NT
dGF0dXMgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpzZXRPdXRwdXRGb3JtYXQoY29uc3QgQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uJiBmb3JtYXQpCi17Ci0gICAgQVNTRVJUKG1faW5wdXREZXNjcmlw
dGlvbik7Ci0gICAgQVNTRVJUKGZvcm1hdC5zYW1wbGVSYXRlKCkgPj0gMCk7Ci0KLSAgICBtX291
dHB1dERlc2NyaXB0aW9uID0gbWFrZVVuaXF1ZTxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+KGZv
cm1hdCk7Ci0gICAgaWYgKCFtX3JpbmdCdWZmZXIpCi0gICAgICAgIG1fcmluZ0J1ZmZlciA9IG1h
a2VVbmlxdWU8Q0FSaW5nQnVmZmVyPigpOwotCi0gICAgbV9yaW5nQnVmZmVyLT5hbGxvY2F0ZShm
b3JtYXQsIHN0YXRpY19jYXN0PHNpemVfdD4obV9tYXhpbXVtU2FtcGxlQ291bnQpKTsKLSAgICBt
X3NjcmF0Y2hCdWZmZXIgPSBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNyZWF0ZShtX291dHB1dERl
c2NyaXB0aW9uLT5zdHJlYW1EZXNjcmlwdGlvbigpLCBtX21heGltdW1TYW1wbGVDb3VudCk7Ci0K
LSAgICByZXR1cm4gc2V0dXBDb252ZXJ0ZXIoKTsKLX0KLQotTWVkaWFUaW1lIEF1ZGlvU2FtcGxl
RGF0YVNvdXJjZTo6aG9zdFRpbWUoKSBjb25zdAotewotICAgIC8vIEJhc2VkIG9uIGxpc3Rpbmcg
IzIgZnJvbSBBcHBsZSBUZWNobmljYWwgUSZBIFFBMTM5OCwgbW9kaWZpZWQgdG8gYmUgdGhyZWFk
LXNhZmUuCi0gICAgc3RhdGljIGRvdWJsZSBmcmVxdWVuY3k7Ci0gICAgc3RhdGljIG1hY2hfdGlt
ZWJhc2VfaW5mb19kYXRhX3QgdGltZWJhc2VJbmZvOwotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxh
ZyBpbml0aWFsaXplVGltZXJPbmNlRmxhZzsKLSAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXpl
VGltZXJPbmNlRmxhZywgW10gewotICAgICAgICBrZXJuX3JldHVybl90IGtyID0gbWFjaF90aW1l
YmFzZV9pbmZvKCZ0aW1lYmFzZUluZm8pOwotICAgICAgICBmcmVxdWVuY3kgPSAxZS05ICogc3Rh
dGljX2Nhc3Q8ZG91YmxlPih0aW1lYmFzZUluZm8ubnVtZXIpIC8gc3RhdGljX2Nhc3Q8ZG91Ymxl
Pih0aW1lYmFzZUluZm8uZGVub20pOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGtyLCBrciA9PSBL
RVJOX1NVQ0NFU1MpOwotICAgICAgICBBU1NFUlQodGltZWJhc2VJbmZvLmRlbm9tKTsKLSAgICB9
KTsKLQotICAgIHJldHVybiBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUobWFjaF9hYnNvbHV0
ZV90aW1lKCkgKiBmcmVxdWVuY3kpOwotfQotCi12b2lkIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6
cHVzaFNhbXBsZXNJbnRlcm5hbChjb25zdCBBdWRpb0J1ZmZlckxpc3QmIGJ1ZmZlckxpc3QsIGNv
bnN0IE1lZGlhVGltZSYgcHJlc2VudGF0aW9uVGltZSwgc2l6ZV90IHNhbXBsZUNvdW50KQotewot
ICAgIE1lZGlhVGltZSBzYW1wbGVUaW1lID0gcHJlc2VudGF0aW9uVGltZTsKLQotICAgIGNvbnN0
IEF1ZGlvQnVmZmVyTGlzdCogc2FtcGxlQnVmZmVyTGlzdDsKLSAgICBpZiAobV9jb252ZXJ0ZXIp
IHsKLSAgICAgICAgbV9zY3JhdGNoQnVmZmVyLT5yZXNldCgpOwotICAgICAgICBPU1N0YXR1cyBl
cnIgPSBtX3NjcmF0Y2hCdWZmZXItPmNvcHlGcm9tKGJ1ZmZlckxpc3QsIHNhbXBsZUNvdW50LCBt
X2NvbnZlcnRlcik7Ci0gICAgICAgIGlmIChlcnIpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgc2FtcGxlQnVmZmVyTGlzdCA9IG1fc2NyYXRjaEJ1ZmZlci0+YnVmZmVyTGlzdCgpLmxp
c3QoKTsKLSAgICAgICAgc2FtcGxlQ291bnQgPSBtX3NjcmF0Y2hCdWZmZXItPnNhbXBsZUNvdW50
KCk7Ci0gICAgICAgIHNhbXBsZVRpbWUgPSBwcmVzZW50YXRpb25UaW1lLnRvVGltZVNjYWxlKG1f
b3V0cHV0RGVzY3JpcHRpb24tPnNhbXBsZVJhdGUoKSwgTWVkaWFUaW1lOjpSb3VuZGluZ0ZsYWdz
OjpUb3dhcmRaZXJvKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2FtcGxlQnVmZmVyTGlzdCA9ICZi
dWZmZXJMaXN0OwotCi0gICAgaWYgKG1fZXhwZWN0ZWROZXh0UHVzaGVkU2FtcGxlVGltZS5pc1Zh
bGlkKCkgJiYgYWJzKG1fZXhwZWN0ZWROZXh0UHVzaGVkU2FtcGxlVGltZSAtIHNhbXBsZVRpbWUp
LnRpbWVWYWx1ZSgpID09IDEpCi0gICAgICAgIHNhbXBsZVRpbWUgPSBtX2V4cGVjdGVkTmV4dFB1
c2hlZFNhbXBsZVRpbWU7Ci0gICAgbV9leHBlY3RlZE5leHRQdXNoZWRTYW1wbGVUaW1lID0gc2Ft
cGxlVGltZSArIE1lZGlhVGltZShzYW1wbGVDb3VudCwgc2FtcGxlVGltZS50aW1lU2NhbGUoKSk7
Ci0KLSAgICBpZiAobV9pbnB1dFNhbXBsZU9mZnNldCA9PSBNZWRpYVRpbWU6OmludmFsaWRUaW1l
KCkpIHsKLSAgICAgICAgbV9pbnB1dFNhbXBsZU9mZnNldCA9IE1lZGlhVGltZSgxIC0gc2FtcGxl
VGltZS50aW1lVmFsdWUoKSwgc2FtcGxlVGltZS50aW1lU2NhbGUoKSk7Ci0gICAgICAgIGRpc3Bh
dGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtsb2dJZGVudGlmaWVyID0gTE9H
SURFTlRJRklFUiwgaW5wdXRTYW1wbGVPZmZzZXQgPSBtX2lucHV0U2FtcGxlT2Zmc2V0LnRpbWVW
YWx1ZSgpLCBtYXhpbXVtU2FtcGxlQ291bnQgPSBtX21heGltdW1TYW1wbGVDb3VudCwgdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWZQdHIoKnRoaXMpXSB7Ci0gICAgICAgICAgICBBTFdBWVNf
TE9HKGxvZ0lkZW50aWZpZXIsICJpbnB1dCBzYW1wbGUgb2Zmc2V0IGlzICIsIGlucHV0U2FtcGxl
T2Zmc2V0LCAiLCBtYXhpbXVtU2FtcGxlQ291bnQgaXMgIiwgbWF4aW11bVNhbXBsZUNvdW50KTsK
LSAgICAgICAgfSk7Ci0gICAgfQotICAgIHNhbXBsZVRpbWUgKz0gbV9pbnB1dFNhbXBsZU9mZnNl
dDsKLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB1aW50NjRfdCBzdGFydEZyYW1lMSA9IDA7Ci0g
ICAgdWludDY0X3QgZW5kRnJhbWUxID0gMDsKLSAgICBtX3JpbmdCdWZmZXItPmdldEN1cnJlbnRG
cmFtZUJvdW5kcyhzdGFydEZyYW1lMSwgZW5kRnJhbWUxKTsKLSNlbmRpZgotCi0gICAgbV9yaW5n
QnVmZmVyLT5zdG9yZShzYW1wbGVCdWZmZXJMaXN0LCBzYW1wbGVDb3VudCwgc2FtcGxlVGltZS50
aW1lVmFsdWUoKSk7Ci0gICAgbV9sYXN0UHVzaGVkU2FtcGxlQ291bnQgPSBzYW1wbGVDb3VudDsK
LX0KLQotdm9pZCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1c2hTYW1wbGVzKGNvbnN0IEF1ZGlv
U3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgc2FtcGxlRGVzY3JpcHRpb24sIENNU2FtcGxlQnVmZmVy
UmVmIHNhbXBsZUJ1ZmZlcikKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHNhbXBsZURlc2NyaXB0aW9u
LCAqbV9pbnB1dERlc2NyaXB0aW9uID09IHNhbXBsZURlc2NyaXB0aW9uKTsKLSAgICBBU1NFUlQo
bV9yaW5nQnVmZmVyKTsKLSAgICAKLSAgICBXZWJBdWRpb0J1ZmZlckxpc3QgbGlzdCgqbV9pbnB1
dERlc2NyaXB0aW9uLCBzYW1wbGVCdWZmZXIpOwotICAgIHB1c2hTYW1wbGVzSW50ZXJuYWwobGlz
dCwgUEFMOjp0b01lZGlhVGltZShQQUw6OkNNU2FtcGxlQnVmZmVyR2V0UHJlc2VudGF0aW9uVGlt
ZVN0YW1wKHNhbXBsZUJ1ZmZlcikpLCBQQUw6OkNNU2FtcGxlQnVmZmVyR2V0TnVtU2FtcGxlcyhz
YW1wbGVCdWZmZXIpKTsKLX0KLQotdm9pZCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1c2hTYW1w
bGVzKGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZSwgY29uc3QgUGxhdGZvcm1BdWRpb0RhdGEm
IGF1ZGlvRGF0YSwgc2l6ZV90IHNhbXBsZUNvdW50KQotewotICAgIEFTU0VSVChpczxXZWJBdWRp
b0J1ZmZlckxpc3Q+KGF1ZGlvRGF0YSkpOwotICAgIHB1c2hTYW1wbGVzSW50ZXJuYWwoKmRvd25j
YXN0PFdlYkF1ZGlvQnVmZmVyTGlzdD4oYXVkaW9EYXRhKS5saXN0KCksIHNhbXBsZVRpbWUsIHNh
bXBsZUNvdW50KTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQ2NF90IGNvbXB1dGVPZmZzZXREZWxh
eShkb3VibGUgc2FtcGxlUmF0ZSwgdWludDY0X3QgbGFzdFB1c2hlZFNhbXBsZUNvdW50KQotewot
ICAgIGNvbnN0IGRvdWJsZSB0d2VudHlNUyA9IC4wMjsKLSAgICBjb25zdCBkb3VibGUgdGVuTVMg
PSAuMDE7Ci0gICAgY29uc3QgZG91YmxlIGZpdmVNUyA9IC4wMDU7Ci0KLSAgICBpZiAobGFzdFB1
c2hlZFNhbXBsZUNvdW50ID4gc2FtcGxlUmF0ZSAqIHR3ZW50eU1TKQotICAgICAgICByZXR1cm4g
c2FtcGxlUmF0ZSAqIHR3ZW50eU1TOwotICAgIGlmIChsYXN0UHVzaGVkU2FtcGxlQ291bnQgPiBz
YW1wbGVSYXRlICogdGVuTVMpCi0gICAgICAgIHJldHVybiBzYW1wbGVSYXRlICogdGVuTVM7Ci0g
ICAgaWYgKGxhc3RQdXNoZWRTYW1wbGVDb3VudCA+IHNhbXBsZVJhdGUgKiBmaXZlTVMpCi0gICAg
ICAgIHJldHVybiBzYW1wbGVSYXRlICogZml2ZU1TOwotICAgIHJldHVybiAwOwotfQotCi1ib29s
IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVsbFNhbXBsZXNJbnRlcm5hbChBdWRpb0J1ZmZlckxp
c3QmIGJ1ZmZlciwgc2l6ZV90JiBzYW1wbGVDb3VudCwgdWludDY0X3QgdGltZVN0YW1wLCBkb3Vi
bGUgLypob3N0VGltZSovLCBQdWxsTW9kZSBtb2RlKQotewotICAgIHNpemVfdCBieXRlQ291bnQg
PSBzYW1wbGVDb3VudCAqIG1fb3V0cHV0RGVzY3JpcHRpb24tPmJ5dGVzUGVyRnJhbWUoKTsKLQot
ICAgIEFTU0VSVChidWZmZXIubU51bWJlckJ1ZmZlcnMgPT0gbV9yaW5nQnVmZmVyLT5jaGFubmVs
Q291bnQoKSk7Ci0gICAgaWYgKGJ1ZmZlci5tTnVtYmVyQnVmZmVycyAhPSBtX3JpbmdCdWZmZXIt
PmNoYW5uZWxDb3VudCgpKSB7Ci0gICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FC
TChidWZmZXIsIGJ5dGVDb3VudCk7Ci0gICAgICAgIHNhbXBsZUNvdW50ID0gMDsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghbV9yaW5nQnVmZmVyIHx8IG1fbXV0ZWQg
fHwgbV9pbnB1dFNhbXBsZU9mZnNldCA9PSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkpIHsKLSAg
ICAgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGJ1ZmZlciwgYnl0ZUNvdW50KTsK
LSAgICAgICAgc2FtcGxlQ291bnQgPSAwOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgdWludDY0X3Qgc3RhcnRGcmFtZSA9IDA7Ci0gICAgdWludDY0X3QgZW5kRnJhbWUgPSAw
OwotICAgIG1fcmluZ0J1ZmZlci0+Z2V0Q3VycmVudEZyYW1lQm91bmRzKHN0YXJ0RnJhbWUsIGVu
ZEZyYW1lKTsKLQotICAgIGlmIChtX3Nob3VsZENvbXB1dGVPdXRwdXRTYW1wbGVPZmZzZXQpIHsK
LSAgICAgICAgdWludDY0X3QgYnVmZmVyZWQgPSBlbmRGcmFtZSAtIHN0YXJ0RnJhbWU7Ci0gICAg
ICAgIGlmIChidWZmZXJlZCA8IHNhbXBsZUNvdW50ICogMiB8fCAobV9lbmRGcmFtZVdoZW5Ob3RF
bm91Z2hEYXRhICYmIG1fZW5kRnJhbWVXaGVuTm90RW5vdWdoRGF0YSA9PSBlbmRGcmFtZSkpIHsK
LSAgICAgICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChidWZmZXIsIGJ5dGVD
b3VudCk7Ci0gICAgICAgICAgICBzYW1wbGVDb3VudCA9IDA7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBtX3Nob3VsZENvbXB1dGVPdXRwdXRTYW1wbGVP
ZmZzZXQgPSBmYWxzZTsKLSAgICAgICAgbV9lbmRGcmFtZVdoZW5Ob3RFbm91Z2hEYXRhID0gMDsK
LQotICAgICAgICBtX291dHB1dFNhbXBsZU9mZnNldCA9IChlbmRGcmFtZSAtIHNhbXBsZUNvdW50
KSAtIHRpbWVTdGFtcDsKLSAgICAgICAgbV9vdXRwdXRTYW1wbGVPZmZzZXQgLT0gY29tcHV0ZU9m
ZnNldERlbGF5KG1fb3V0cHV0RGVzY3JpcHRpb24tPnNhbXBsZVJhdGUoKSwgbV9sYXN0UHVzaGVk
U2FtcGxlQ291bnQpOwotICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBbbG9nSWRlbnRpZmllciA9IExPR0lERU5USUZJRVIsIG91dHB1dFNhbXBsZU9mZnNl
dCA9IG1fb3V0cHV0U2FtcGxlT2Zmc2V0LCB0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZlB0
cigqdGhpcyldIHsKLSAgICAgICAgICAgIEFMV0FZU19MT0cobG9nSWRlbnRpZmllciwgInNldHRp
bmcgbmV3IG9mZnNldCB0byAiLCBvdXRwdXRTYW1wbGVPZmZzZXQpOwotICAgICAgICB9KTsKLSAg
ICB9Ci0KLSAgICB0aW1lU3RhbXAgKz0gbV9vdXRwdXRTYW1wbGVPZmZzZXQ7Ci0KLSAgICBpZiAo
dGltZVN0YW1wIDwgc3RhcnRGcmFtZSB8fCB0aW1lU3RhbXAgKyBzYW1wbGVDb3VudCA+IGVuZEZy
YW1lKSB7Ci0gICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IFtsb2dJZGVudGlmaWVyID0gTE9HSURFTlRJRklFUiwgdGltZVN0YW1wLCBzdGFydEZyYW1lLCBl
bmRGcmFtZSwgc2FtcGxlQ291bnQsIG91dHB1dFNhbXBsZU9mZnNldCA9IG1fb3V0cHV0U2FtcGxl
T2Zmc2V0LCB0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZlB0cigqdGhpcyldIHsKLSAgICAg
ICAgICAgIEVSUk9SX0xPRyhsb2dJZGVudGlmaWVyLCAibm90IGVub3VnaCBkYXRhLCBzYW1wbGUg
IiwgdGltZVN0YW1wLCAiIHdpdGggb2Zmc2V0ICIsIG91dHB1dFNhbXBsZU9mZnNldCwgIiwgdHJ5
aW5nIHRvIGdldCAiLCBzYW1wbGVDb3VudCwgIiBzYW1wbGVzLCBidXQgbm90IGNvbXBsZXRlbHkg
aW4gcmFuZ2UgWyIsIHN0YXJ0RnJhbWUsICIgLi4gIiwgZW5kRnJhbWUsICJdIik7Ci0gICAgICAg
IH0pOwotCi0gICAgICAgIGlmICh0aW1lU3RhbXAgPCBzdGFydEZyYW1lIHx8IHRpbWVTdGFtcCA+
PSBlbmRGcmFtZSkgewotICAgICAgICAgICAgLy8gV2UgYXJlIG91dCBvZiB0aGUgd2luZG93LCBs
ZXQncyByZXN0YXJ0IHRoZSBvZmZzZXQgY29tcHV0YXRpb24uCi0gICAgICAgICAgICBtX3Nob3Vs
ZENvbXB1dGVPdXRwdXRTYW1wbGVPZmZzZXQgPSB0cnVlOwotCi0gICAgICAgICAgICBpZiAodGlt
ZVN0YW1wID49IGVuZEZyYW1lKQotICAgICAgICAgICAgICAgIG1fZW5kRnJhbWVXaGVuTm90RW5v
dWdoRGF0YSA9IGVuZEZyYW1lOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2Ug
YXJlIHRvbyBjbG9zZSBmcm9tIGVuZEZyYW1lLCBsZXQncyBiYWNrIHVwIGEgbGl0dGxlIGJpdC4K
LSAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lc0F2YWlsYWJsZSA9IGVuZEZyYW1lIC0gdGltZVN0
YW1wOwotICAgICAgICAgICAgbV9vdXRwdXRTYW1wbGVPZmZzZXQgLT0gc2FtcGxlQ291bnQgLSBm
cmFtZXNBdmFpbGFibGU7Ci0gICAgICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRf
bWFpbl9xdWV1ZSgpLCBbbG9nSWRlbnRpZmllciA9IExPR0lERU5USUZJRVIsIG91dHB1dFNhbXBs
ZU9mZnNldCA9IG1fb3V0cHV0U2FtcGxlT2Zmc2V0LCB0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZlB0cigqdGhpcyldIHsKLSAgICAgICAgICAgICAgICBBTFdBWVNfTE9HKGxvZ0lkZW50aWZp
ZXIsICJ1cGRhdGluZyBvZmZzZXQgdG8gIiwgb3V0cHV0U2FtcGxlT2Zmc2V0KTsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICB9Ci0gICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FC
TChidWZmZXIsIGJ5dGVDb3VudCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpZiAobW9kZSA9PSBDb3B5KSB7Ci0gICAgICAgIG1fcmluZ0J1ZmZlci0+ZmV0Y2goJmJ1ZmZl
ciwgc2FtcGxlQ291bnQsIHRpbWVTdGFtcCwgQ0FSaW5nQnVmZmVyOjpDb3B5KTsKLSAgICAgICAg
aWYgKG1fdm9sdW1lIDwgRXF1aXZhbGVudFRvTWF4Vm9sdW1lKQotICAgICAgICAgICAgQXVkaW9T
YW1wbGVCdWZmZXJMaXN0OjphcHBseUdhaW4oYnVmZmVyLCBtX3ZvbHVtZSwgbV9vdXRwdXREZXNj
cmlwdGlvbi0+Zm9ybWF0KCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBp
ZiAobV92b2x1bWUgPj0gRXF1aXZhbGVudFRvTWF4Vm9sdW1lKSB7Ci0gICAgICAgIG1fcmluZ0J1
ZmZlci0+ZmV0Y2goJmJ1ZmZlciwgc2FtcGxlQ291bnQsIHRpbWVTdGFtcCwgQ0FSaW5nQnVmZmVy
OjpNaXgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobV9zY3JhdGNo
QnVmZmVyLT5jb3B5RnJvbSgqbV9yaW5nQnVmZmVyLmdldCgpLCBzYW1wbGVDb3VudCwgdGltZVN0
YW1wLCBDQVJpbmdCdWZmZXI6OkNvcHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBt
X3NjcmF0Y2hCdWZmZXItPmFwcGx5R2FpbihtX3ZvbHVtZSk7Ci0gICAgbV9zY3JhdGNoQnVmZmVy
LT5taXhGcm9tKGJ1ZmZlciwgc2FtcGxlQ291bnQpOwotICAgIGlmIChtX3NjcmF0Y2hCdWZmZXIt
PmNvcHlUbyhidWZmZXIsIHNhbXBsZUNvdW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpwdWxsQXZh
bGFpYmxlU2FtcGxlc0FzQ2h1bmtzKEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyLCBzaXplX3Qgc2Ft
cGxlQ291bnRQZXJDaHVuaywgdWludDY0X3QgdGltZVN0YW1wLCBGdW5jdGlvbjx2b2lkKCk+JiYg
Y29uc3VtZUZpbGxlZEJ1ZmZlcikKLXsKLSAgICBpZiAoIW1fcmluZ0J1ZmZlcikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKGJ1ZmZlci5tTnVtYmVyQnVmZmVycyA9PSBtX3Jp
bmdCdWZmZXItPmNoYW5uZWxDb3VudCgpKTsKLSAgICBpZiAoYnVmZmVyLm1OdW1iZXJCdWZmZXJz
ICE9IG1fcmluZ0J1ZmZlci0+Y2hhbm5lbENvdW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHVpbnQ2NF90IHN0YXJ0RnJhbWUgPSAwOwotICAgIHVpbnQ2NF90IGVuZEZyYW1lID0g
MDsKLSAgICBtX3JpbmdCdWZmZXItPmdldEN1cnJlbnRGcmFtZUJvdW5kcyhzdGFydEZyYW1lLCBl
bmRGcmFtZSk7Ci0gICAgaWYgKG1fc2hvdWxkQ29tcHV0ZU91dHB1dFNhbXBsZU9mZnNldCkgewot
ICAgICAgICBtX291dHB1dFNhbXBsZU9mZnNldCA9IHRpbWVTdGFtcCArIChlbmRGcmFtZSAtIHNh
bXBsZUNvdW50UGVyQ2h1bmspOwotICAgICAgICBtX3Nob3VsZENvbXB1dGVPdXRwdXRTYW1wbGVP
ZmZzZXQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICB0aW1lU3RhbXAgKz0gbV9vdXRwdXRTYW1wbGVP
ZmZzZXQ7Ci0KLSAgICBpZiAodGltZVN0YW1wIDwgc3RhcnRGcmFtZSkKLSAgICAgICAgdGltZVN0
YW1wID0gc3RhcnRGcmFtZTsKLQotICAgIHN0YXJ0RnJhbWUgPSB0aW1lU3RhbXA7Ci0KLSAgICBp
ZiAobV9tdXRlZCkgewotICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm9BQkwoYnVm
ZmVyLCBzYW1wbGVDb3VudFBlckNodW5rICogbV9vdXRwdXREZXNjcmlwdGlvbi0+Ynl0ZXNQZXJG
cmFtZSgpKTsKLSAgICAgICAgd2hpbGUgKGVuZEZyYW1lIC0gc3RhcnRGcmFtZSA+PSBzYW1wbGVD
b3VudFBlckNodW5rKSB7Ci0gICAgICAgICAgICBjb25zdW1lRmlsbGVkQnVmZmVyKCk7Ci0gICAg
ICAgICAgICBzdGFydEZyYW1lICs9IHNhbXBsZUNvdW50UGVyQ2h1bms7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgd2hpbGUgKGVuZEZyYW1lIC0gc3RhcnRG
cmFtZSA+PSBzYW1wbGVDb3VudFBlckNodW5rKSB7Ci0gICAgICAgIGlmIChtX3JpbmdCdWZmZXIt
PmZldGNoKCZidWZmZXIsIHNhbXBsZUNvdW50UGVyQ2h1bmssIHN0YXJ0RnJhbWUsIENBUmluZ0J1
ZmZlcjo6Q29weSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNvbnN1bWVG
aWxsZWRCdWZmZXIoKTsKLSAgICAgICAgc3RhcnRGcmFtZSArPSBzYW1wbGVDb3VudFBlckNodW5r
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBBdWRpb1NhbXBsZURhdGFTb3Vy
Y2U6OnB1bGxTYW1wbGVzKEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyLCBzaXplX3Qgc2FtcGxlQ291
bnQsIHVpbnQ2NF90IHRpbWVTdGFtcCwgZG91YmxlIGhvc3RUaW1lLCBQdWxsTW9kZSBtb2RlKQot
ewotICAgIGlmICghbV9yaW5nQnVmZmVyKSB7Ci0gICAgICAgIHNpemVfdCBieXRlQ291bnQgPSBz
YW1wbGVDb3VudCAqIG1fb3V0cHV0RGVzY3JpcHRpb24tPmJ5dGVzUGVyRnJhbWUoKTsKLSAgICAg
ICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGJ1ZmZlciwgYnl0ZUNvdW50KTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBwdWxsU2FtcGxlc0ludGVy
bmFsKGJ1ZmZlciwgc2FtcGxlQ291bnQsIHRpbWVTdGFtcCwgaG9zdFRpbWUsIG1vZGUpOwotfQot
Ci1ib29sIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVsbFNhbXBsZXMoQXVkaW9TYW1wbGVCdWZm
ZXJMaXN0JiBidWZmZXIsIHNpemVfdCBzYW1wbGVDb3VudCwgdWludDY0X3QgdGltZVN0YW1wLCBk
b3VibGUgaG9zdFRpbWUsIFB1bGxNb2RlIG1vZGUpCi17Ci0gICAgaWYgKCFtX3JpbmdCdWZmZXIp
IHsKLSAgICAgICAgYnVmZmVyLnplcm8oKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGlmICghcHVsbFNhbXBsZXNJbnRlcm5hbChidWZmZXIuYnVmZmVyTGlzdCgpLCBzYW1w
bGVDb3VudCwgdGltZVN0YW1wLCBob3N0VGltZSwgbW9kZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGJ1ZmZlci5zZXRUaW1lcyh0aW1lU3RhbXAsIGhvc3RUaW1lKTsKLSAgICBidWZm
ZXIuc2V0U2FtcGxlQ291bnQoc2FtcGxlQ291bnQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLXZvaWQgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpz
ZXRMb2dnZXIoUmVmPGNvbnN0IExvZ2dlcj4mJiBsb2dnZXIsIGNvbnN0IHZvaWQqIGxvZ0lkZW50
aWZpZXIpCi17Ci0gICAgbV9sb2dnZXIgPSBXVEZNb3ZlKGxvZ2dlcik7Ci0gICAgbV9sb2dJZGVu
dGlmaWVyID0gbG9nSWRlbnRpZmllcjsKLX0KLQotV1RGTG9nQ2hhbm5lbCYgQXVkaW9TYW1wbGVE
YXRhU291cmNlOjpsb2dDaGFubmVsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gTG9nV2ViUlRDOwot
fQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShN
RURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9t
YWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA1ZDNiYzdkNmIzZTAwMzhmOGU3MzhjZDAzMGE5MjU2NjE2MzI4NmUxLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpDQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24oKQotICAgIDogbV9zdHJlYW1EZXNjcmlwdGlvbih7IH0pCi17Ci19Ci0gICAgCi1DQUF1
ZGlvU3RyZWFtRGVzY3JpcHRpb246On5DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oKSA9IGRlZmF1
bHQ7Ci0KLUNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9u
KGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiAmZGVzYykKLSAgICA6IG1fc3RyZWFt
RGVzY3JpcHRpb24oZGVzYykKLXsKLX0KLQotQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpDQUF1
ZGlvU3RyZWFtRGVzY3JpcHRpb24oZG91YmxlIHNhbXBsZVJhdGUsIHVpbnQzMl90IG51bUNoYW5u
ZWxzLCBQQ01Gb3JtYXQgZm9ybWF0LCBib29sIGlzSW50ZXJsZWF2ZWQpCi17Ci0gICAgbV9zdHJl
YW1EZXNjcmlwdGlvbi5tRm9ybWF0SUQgPSBrQXVkaW9Gb3JtYXRMaW5lYXJQQ007Ci0gICAgbV9z
dHJlYW1EZXNjcmlwdGlvbi5tU2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGU7Ci0gICAgbV9zdHJlYW1E
ZXNjcmlwdGlvbi5tRnJhbWVzUGVyUGFja2V0ID0gMTsKLSAgICBtX3N0cmVhbURlc2NyaXB0aW9u
Lm1DaGFubmVsc1BlckZyYW1lID0gbnVtQ2hhbm5lbHM7Ci0gICAgbV9zdHJlYW1EZXNjcmlwdGlv
bi5tQnl0ZXNQZXJGcmFtZSA9IDA7Ci0gICAgbV9zdHJlYW1EZXNjcmlwdGlvbi5tQnl0ZXNQZXJQ
YWNrZXQgPSAwOwotICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzID0ga0F1ZGlv
Rm9ybWF0RmxhZ3NOYXRpdmVFbmRpYW4gfCBrQXVkaW9Gb3JtYXRGbGFnSXNQYWNrZWQ7Ci0gICAg
bV9zdHJlYW1EZXNjcmlwdGlvbi5tUmVzZXJ2ZWQgPSAwOwotCi0gICAgaW50IHdvcmRzaXplOwot
ICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBJbnQxNjoKLSAgICAgICAgd29yZHNpemUg
PSAyOwotICAgICAgICBtX3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFncyB8PSBrQXVkaW9G
b3JtYXRGbGFnSXNTaWduZWRJbnRlZ2VyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludDMy
OgotICAgICAgICB3b3Jkc2l6ZSA9IDQ7Ci0gICAgICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubUZv
cm1hdEZsYWdzIHw9IGtBdWRpb0Zvcm1hdEZsYWdJc1NpZ25lZEludGVnZXI7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRmxvYXQzMjoKLSAgICAgICAgd29yZHNpemUgPSA0OwotICAgICAgICBt
X3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFncyB8PSBrQXVkaW9Gb3JtYXRGbGFnSXNGbG9h
dDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGbG9hdDY0OgotICAgICAgICB3b3Jkc2l6ZSA9
IDg7Ci0gICAgICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzIHw9IGtBdWRpb0Zv
cm1hdEZsYWdJc0Zsb2F0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5vbmU6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB3b3Jkc2l6ZSA9IDA7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubUJpdHNQZXJDaGFubmVsID0g
d29yZHNpemUgKiA4OwotICAgIGlmIChpc0ludGVybGVhdmVkKQotICAgICAgICBtX3N0cmVhbURl
c2NyaXB0aW9uLm1CeXRlc1BlckZyYW1lID0gbV9zdHJlYW1EZXNjcmlwdGlvbi5tQnl0ZXNQZXJQ
YWNrZXQgPSB3b3Jkc2l6ZSAqIG51bUNoYW5uZWxzOwotICAgIGVsc2UgewotICAgICAgICBtX3N0
cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFncyB8PSBrQXVkaW9Gb3JtYXRGbGFnSXNOb25JbnRl
cmxlYXZlZDsKLSAgICAgICAgbV9zdHJlYW1EZXNjcmlwdGlvbi5tQnl0ZXNQZXJGcmFtZSA9IG1f
c3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVyUGFja2V0ID0gd29yZHNpemU7Ci0gICAgfQotfQot
Ci1jb25zdCBQbGF0Zm9ybURlc2NyaXB0aW9uJiBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OnBs
YXRmb3JtRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9
IHsgUGxhdGZvcm1EZXNjcmlwdGlvbjo6Q0FBdWRpb1N0cmVhbUJhc2ljVHlwZSwgJm1fc3RyZWFt
RGVzY3JpcHRpb24gfTsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybURlc2NyaXB0aW9uOwotfQotCi1B
dWRpb1N0cmVhbURlc2NyaXB0aW9uOjpQQ01Gb3JtYXQgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9u
Ojpmb3JtYXQoKSBjb25zdAotewotICAgIGlmIChtX2Zvcm1hdCAhPSBOb25lKQotICAgICAgICBy
ZXR1cm4gbV9mb3JtYXQ7Ci0KLSAgICBpZiAobV9zdHJlYW1EZXNjcmlwdGlvbi5tRm9ybWF0SUQg
IT0ga0F1ZGlvRm9ybWF0TGluZWFyUENNKQotICAgICAgICByZXR1cm4gTm9uZTsKLSAgICBpZiAo
bV9zdHJlYW1EZXNjcmlwdGlvbi5tRnJhbWVzUGVyUGFja2V0ICE9IDEpCi0gICAgICAgIHJldHVy
biBOb25lOwotICAgIGlmIChtX3N0cmVhbURlc2NyaXB0aW9uLm1CeXRlc1BlckZyYW1lICE9IG1f
c3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVyUGFja2V0KQotICAgICAgICByZXR1cm4gTm9uZTsK
LSAgICBpZiAobV9zdHJlYW1EZXNjcmlwdGlvbi5tQml0c1BlckNoYW5uZWwgLyBzaXplb2YoZG91
YmxlKSA+IG1fc3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVyRnJhbWUpCi0gICAgICAgIHJldHVy
biBOb25lOwotICAgIGlmICghbV9zdHJlYW1EZXNjcmlwdGlvbi5tQ2hhbm5lbHNQZXJGcmFtZSkK
LSAgICAgICAgcmV0dXJuIE5vbmU7Ci0KLSAgICB1bnNpZ25lZCB3b3Jkc2l6ZSA9IG1fc3RyZWFt
RGVzY3JpcHRpb24ubUJ5dGVzUGVyRnJhbWU7Ci0gICAgaWYgKGlzSW50ZXJsZWF2ZWQoKSkgewot
ICAgICAgICBpZiAod29yZHNpemUgJSBtX3N0cmVhbURlc2NyaXB0aW9uLm1DaGFubmVsc1BlckZy
YW1lKQotICAgICAgICAgICAgcmV0dXJuIE5vbmU7Ci0KLSAgICAgICAgd29yZHNpemUgLz0gbV9z
dHJlYW1EZXNjcmlwdGlvbi5tQ2hhbm5lbHNQZXJGcmFtZTsKLSAgICB9Ci0KLSAgICBpZiAoaXNO
YXRpdmVFbmRpYW4oKSAmJiB3b3Jkc2l6ZSAqIHNpemVvZihkb3VibGUpID09IG1fc3RyZWFtRGVz
Y3JpcHRpb24ubUJpdHNQZXJDaGFubmVsKSB7Ci0gICAgICAgIC8vIFBhY2tlZCBhbmQgbmF0aXZl
IGVuZGlhbiwgZ29vZAotICAgICAgICBpZiAobV9zdHJlYW1EZXNjcmlwdGlvbi5tRm9ybWF0Rmxh
Z3MgJiBrTGluZWFyUENNRm9ybWF0RmxhZ0lzRmxvYXQpIHsKLSAgICAgICAgICAgIGlmIChtX3N0
cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFncyAmIChrTGluZWFyUENNRm9ybWF0RmxhZ0lzU2ln
bmVkSW50ZWdlciB8IGtMaW5lYXJQQ01Gb3JtYXRGbGFnc1NhbXBsZUZyYWN0aW9uTWFzaykpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIE5vbmU7Ci0KLSAgICAgICAgICAgIGlmICh3b3Jkc2l6ZSA9
PSBzaXplb2YoZmxvYXQpKQotICAgICAgICAgICAgICAgIHJldHVybiBtX2Zvcm1hdCA9IEZsb2F0
MzI7Ci0gICAgICAgICAgICBpZiAod29yZHNpemUgPT0gc2l6ZW9mKGRvdWJsZSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG1fZm9ybWF0ID0gRmxvYXQ2NDsKLQotICAgICAgICAgICAgcmV0dXJu
IE5vbmU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9zdHJlYW1EZXNjcmlwdGlvbi5tRm9y
bWF0RmxhZ3MgJiBrTGluZWFyUENNRm9ybWF0RmxhZ0lzU2lnbmVkSW50ZWdlcikgewotICAgICAg
ICAgICAgdW5zaWduZWQgZnJhY3Rpb25CaXRzID0gKG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1h
dEZsYWdzICYga0xpbmVhclBDTUZvcm1hdEZsYWdzU2FtcGxlRnJhY3Rpb25NYXNrKSA+PiBrTGlu
ZWFyUENNRm9ybWF0RmxhZ3NTYW1wbGVGcmFjdGlvblNoaWZ0OwotICAgICAgICAgICAgaWYgKCFm
cmFjdGlvbkJpdHMpIHsKLSAgICAgICAgICAgICAgICBpZiAod29yZHNpemUgPT0gc2l6ZW9mKGlu
dDE2X3QpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9mb3JtYXQgPSBJbnQxNjsKLSAg
ICAgICAgICAgICAgICBpZiAod29yZHNpemUgPT0gc2l6ZW9mKGludDMyX3QpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbV9mb3JtYXQgPSBJbnQzMjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBOb25lOwotfQotCi1ib29sIG9wZXJhdG9yPT0oY29u
c3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBhLCBjb25zdCBBdWRpb1N0cmVhbUJhc2lj
RGVzY3JpcHRpb24mIGIpCi17Ci0gICAgcmV0dXJuIGEubVNhbXBsZVJhdGUgPT0gYi5tU2FtcGxl
UmF0ZQotICAgICAgICAmJiBhLm1Gb3JtYXRJRCA9PSBiLm1Gb3JtYXRJRAotICAgICAgICAmJiBh
Lm1Gb3JtYXRGbGFncyA9PSBiLm1Gb3JtYXRGbGFncwotICAgICAgICAmJiBhLm1CeXRlc1BlclBh
Y2tldCA9PSBiLm1CeXRlc1BlclBhY2tldAotICAgICAgICAmJiBhLm1GcmFtZXNQZXJQYWNrZXQg
PT0gYi5tRnJhbWVzUGVyUGFja2V0Ci0gICAgICAgICYmIGEubUJ5dGVzUGVyRnJhbWUgPT0gYi5t
Qnl0ZXNQZXJGcmFtZQotICAgICAgICAmJiBhLm1DaGFubmVsc1BlckZyYW1lID09IGIubUNoYW5u
ZWxzUGVyRnJhbWUKLSAgICAgICAgJiYgYS5tQml0c1BlckNoYW5uZWwgPT0gYi5tQml0c1BlckNo
YW5uZWw7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L21hYy9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggN2E3MzkyOWUxMzg0NzMyOWUwYzlmN2E1M2I3ZmYwN2JkZmQxNjQyYi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgPENvcmVBdWRpby9Db3Jl
QXVkaW9UeXBlcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdFQkNPUkVfRVhQT1JUIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mLCBjb25zdCBB
dWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mKTsKLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBhLCBjb25zdCBBdWRpb1N0cmVhbUJhc2lj
RGVzY3JpcHRpb24mIGIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQotCi1jbGFzcyBXRUJDT1JFX0VY
UE9SVCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gZmluYWwgOiBwdWJsaWMgQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0KLXB1YmxpYzoKLQot
ICAgIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbigpOwotICAgIENBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbihjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mKTsKLSAgICBDQUF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24oZG91YmxlLCB1aW50MzJfdCwgUENNRm9ybWF0LCBib29sKTsKLSAgICB+
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKCk7Ci0KLSAgICBjb25zdCBQbGF0Zm9ybURlc2NyaXB0
aW9uJiBwbGF0Zm9ybURlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7Ci0KLSAgICBQQ01Gb3JtYXQg
Zm9ybWF0KCkgY29uc3QgZmluYWw7Ci0KLSAgICBkb3VibGUgc2FtcGxlUmF0ZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fc3RyZWFtRGVzY3JpcHRpb24ubVNhbXBsZVJhdGU7IH0KLSAgICBib29s
IGlzUENNKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zdHJlYW1EZXNjcmlwdGlvbi5tRm9ybWF0
SUQgPT0ga0F1ZGlvRm9ybWF0TGluZWFyUENNOyB9Ci0gICAgYm9vbCBpc0ludGVybGVhdmVkKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gIShtX3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFncyAm
IGtBdWRpb0Zvcm1hdEZsYWdJc05vbkludGVybGVhdmVkKTsgfQotICAgIGJvb2wgaXNTaWduZWRJ
bnRlZ2VyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gaXNQQ00oKSAmJiAobV9zdHJlYW1EZXNjcmlw
dGlvbi5tRm9ybWF0RmxhZ3MgJiBrQXVkaW9Gb3JtYXRGbGFnSXNTaWduZWRJbnRlZ2VyKTsgfQot
ICAgIGJvb2wgaXNGbG9hdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGlzUENNKCkgJiYgKG1fc3Ry
ZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzICYga0F1ZGlvRm9ybWF0RmxhZ0lzRmxvYXQpOyB9
Ci0gICAgYm9vbCBpc05hdGl2ZUVuZGlhbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGlzUENNKCkg
JiYgKG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzICYga0F1ZGlvRm9ybWF0RmxhZ0lz
QmlnRW5kaWFuKSA9PSBrQXVkaW9Gb3JtYXRGbGFnc05hdGl2ZUVuZGlhbjsgfQotCi0gICAgdWlu
dDMyX3QgbnVtYmVyT2ZJbnRlcmxlYXZlZENoYW5uZWxzKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
aXNJbnRlcmxlYXZlZCgpID8gbV9zdHJlYW1EZXNjcmlwdGlvbi5tQ2hhbm5lbHNQZXJGcmFtZSA6
IDE7IH0KLSAgICB1aW50MzJfdCBudW1iZXJPZkNoYW5uZWxTdHJlYW1zKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gaXNJbnRlcmxlYXZlZCgpID8gMSA6IG1fc3RyZWFtRGVzY3JpcHRpb24ubUNoYW5u
ZWxzUGVyRnJhbWU7IH0KLSAgICB1aW50MzJfdCBudW1iZXJPZkNoYW5uZWxzKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9zdHJlYW1EZXNjcmlwdGlvbi5tQ2hhbm5lbHNQZXJGcmFtZTsgfQotICAg
IHVpbnQzMl90IHNhbXBsZVdvcmRTaXplKCkgY29uc3QgZmluYWwgewotICAgICAgICByZXR1cm4g
KG1fc3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVyRnJhbWUgPiAwICYmIG51bWJlck9mSW50ZXJs
ZWF2ZWRDaGFubmVscygpKSA/IG1fc3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVyRnJhbWUgLyBu
dW1iZXJPZkludGVybGVhdmVkQ2hhbm5lbHMoKSA6ICAwOwotICAgIH0KLSAgICB1aW50MzJfdCBi
eXRlc1BlckZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9zdHJlYW1EZXNjcmlwdGlvbi5tQnl0ZXNQ
ZXJGcmFtZTsgfQotICAgIHVpbnQzMl90IGJ5dGVzUGVyUGFja2V0KCkgY29uc3QgeyByZXR1cm4g
bV9zdHJlYW1EZXNjcmlwdGlvbi5tQnl0ZXNQZXJQYWNrZXQ7IH0KLSAgICB1aW50MzJfdCBmb3Jt
YXRGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdz
OyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0
aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9zdHJlYW1EZXNjcmlwdGlvbiA9PSBvdGhlcjsg
fQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24m
IG90aGVyKSBjb25zdCB7IHJldHVybiAhb3BlcmF0b3IgPT0gKG90aGVyKTsgfQotICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKLSAg
ICB7Ci0gICAgICAgIGlmIChvdGhlci5wbGF0Zm9ybURlc2NyaXB0aW9uKCkudHlwZSAhPSBQbGF0
Zm9ybURlc2NyaXB0aW9uOjpDQUF1ZGlvU3RyZWFtQmFzaWNUeXBlKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiBvcGVyYXRvcj09KCpXVEY6OmdldDxjb25zdCBB
dWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPihvdGhlci5wbGF0Zm9ybURlc2NyaXB0aW9uKCku
ZGVzY3JpcHRpb24pKTsKLSAgICB9Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdCB7IHJldHVybiAhb3BlcmF0b3IgPT0gKG90aGVy
KTsgfQotCi0gICAgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBzdHJlYW1EZXNj
cmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RyZWFtRGVzY3JpcHRpb247IH0KLSAgICBBdWRp
b1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIHN0cmVhbURlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9z
dHJlYW1EZXNjcmlwdGlvbjsgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIENBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbiYpOwotCi1wcml2YXRlOgotICAgIHZvaWQgY2FsY3VsYXRlRm9ybWF0KCk7Ci0K
LSAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gbV9zdHJlYW1EZXNjcmlwdGlvbjsKLSAg
ICBtdXRhYmxlIFBsYXRmb3JtRGVzY3JpcHRpb24gbV9wbGF0Zm9ybURlc2NyaXB0aW9uOwotICAg
IG11dGFibGUgUENNRm9ybWF0IG1fZm9ybWF0IHsgTm9uZSB9OwotfTsKLQotdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KLXZvaWQgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmbV9zdHJlYW1EZXNjcmlwdGlvbiksIHNp
emVvZihtX3N0cmVhbURlc2NyaXB0aW9uKSwgMSk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+Ci1ib29sIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCi17Ci0gICAgcmV0dXJu
IGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KCZkZXNjcmlwdGlvbi5tX3N0cmVhbURlc2NyaXB0aW9uKSwgc2l6ZW9mKGRlc2NyaXB0aW9uLm1f
c3RyZWFtRGVzY3JpcHRpb24pLCAxKTsKLX0KLQotaW5saW5lIENBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbiB0b0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbikKLXsKLSAgICBBU1NFUlQoZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNj
cmlwdGlvbigpLnR5cGUgPT0gUGxhdGZvcm1EZXNjcmlwdGlvbjo6Q0FBdWRpb1N0cmVhbUJhc2lj
VHlwZSk7Ci0gICAgcmV0dXJuIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbigqV1RGOjpnZXQ8Y29u
c3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4oZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNj
cmlwdGlvbigpLmRlc2NyaXB0aW9uKSk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGVkN2E3YTViYzE0MzM2MmY5N2FmOWNhZDkyMTEwOGZiMzIxZmY4N2UuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwz
NDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJD
QVJpbmdCdWZmZXIuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pICYmIFVTRShNRURJQVRPT0xC
T1gpCi0KLSNpbmNsdWRlICJDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlIDxB
Y2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlw
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1jb25zdCB1aW50MzJfdCBrR2Vu
ZXJhbFJpbmdUaW1lQm91bmRzUXVldWVTaXplID0gMzI7Ci1jb25zdCB1aW50MzJfdCBrR2VuZXJh
bFJpbmdUaW1lQm91bmRzUXVldWVNYXNrID0ga0dlbmVyYWxSaW5nVGltZUJvdW5kc1F1ZXVlU2l6
ZSAtIDE7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ0FSaW5nQnVmZmVyOjpDQVJpbmdCdWZm
ZXIoKQotICAgIDogbV9idWZmZXJzKG1ha2VVbmlxdWVSZWY8Q0FSaW5nQnVmZmVyU3RvcmFnZVZl
Y3Rvcj4oKSkKLSAgICAsIG1fdGltZUJvdW5kc1F1ZXVlKGtHZW5lcmFsUmluZ1RpbWVCb3VuZHNR
dWV1ZVNpemUpCi17Ci19Ci0KLUNBUmluZ0J1ZmZlcjo6fkNBUmluZ0J1ZmZlcigpCi17Ci0gICAg
ZGVhbGxvY2F0ZSgpOwotfQotCi1DQVJpbmdCdWZmZXI6OkNBUmluZ0J1ZmZlcihVbmlxdWVSZWY8
Q0FSaW5nQnVmZmVyU3RvcmFnZT4mJiBzdG9yYWdlKQotICAgIDogbV9idWZmZXJzKFdURk1vdmUo
c3RvcmFnZSkpCi0gICAgLCBtX3RpbWVCb3VuZHNRdWV1ZShrR2VuZXJhbFJpbmdUaW1lQm91bmRz
UXVldWVTaXplKQotewotfQotCi12b2lkIENBUmluZ0J1ZmZlcjo6YWxsb2NhdGUoY29uc3QgQ0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uJiBmb3JtYXQsIHNpemVfdCBmcmFtZUNvdW50KQotewotICAg
IG1fZGVzY3JpcHRpb24gPSBmb3JtYXQ7Ci0gICAgZGVhbGxvY2F0ZSgpOwotCi0gICAgZnJhbWVD
b3VudCA9IFdURjo6cm91bmRVcFRvUG93ZXJPZlR3byhmcmFtZUNvdW50KTsKLQotICAgIG1fY2hh
bm5lbENvdW50ID0gZm9ybWF0Lm51bWJlck9mQ2hhbm5lbFN0cmVhbXMoKTsKLSAgICBtX2J5dGVz
UGVyRnJhbWUgPSBmb3JtYXQuYnl0ZXNQZXJGcmFtZSgpOwotICAgIG1fZnJhbWVDb3VudCA9IGZy
YW1lQ291bnQ7Ci0gICAgbV9mcmFtZUNvdW50TWFzayA9IGZyYW1lQ291bnQgLSAxOwotICAgIG1f
Y2FwYWNpdHlCeXRlcyA9IG1fYnl0ZXNQZXJGcmFtZSAqIGZyYW1lQ291bnQ7Ci0KLSAgICBtX2J1
ZmZlcnMtPmFsbG9jYXRlKG1fY2FwYWNpdHlCeXRlcyAqIG1fY2hhbm5lbENvdW50KTsKLQotICAg
IG1fcG9pbnRlcnMucmVzaXplKG1fY2hhbm5lbENvdW50KTsKLSAgICBCeXRlKiBjaGFubmVsRGF0
YSA9IHN0YXRpY19jYXN0PEJ5dGUqPihtX2J1ZmZlcnMtPmRhdGEoKSk7Ci0KLSAgICBmb3IgKGF1
dG8mIHBvaW50ZXIgOiBtX3BvaW50ZXJzKSB7Ci0gICAgICAgIHBvaW50ZXIgPSBjaGFubmVsRGF0
YTsKLSAgICAgICAgY2hhbm5lbERhdGEgKz0gbV9jYXBhY2l0eUJ5dGVzOwotICAgIH0KLQotICAg
IGZsdXNoKCk7Ci19Ci0KLXZvaWQgQ0FSaW5nQnVmZmVyOjpkZWFsbG9jYXRlKCkKLXsKLSAgICBt
X2J1ZmZlcnMtPmRlYWxsb2NhdGUoKTsKLSAgICBtX3BvaW50ZXJzLmNsZWFyKCk7Ci0gICAgbV9j
aGFubmVsQ291bnQgPSAwOwotICAgIG1fY2FwYWNpdHlCeXRlcyA9IDA7Ci0gICAgbV9mcmFtZUNv
dW50ID0gMDsKLX0KLQotc3RhdGljIHZvaWQgWmVyb1JhbmdlKFZlY3RvcjxCeXRlKj4mIHBvaW50
ZXJzLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbmJ5dGVzKQotewotICAgIGZvciAoYXV0byYgcG9p
bnRlciA6IHBvaW50ZXJzKQotICAgICAgICBtZW1zZXQocG9pbnRlciArIG9mZnNldCwgMCwgbmJ5
dGVzKTsKLX0KLQotc3RhdGljIHZvaWQgU3RvcmVBQkwoVmVjdG9yPEJ5dGUqPiYgcG9pbnRlcnMs
IHNpemVfdCBkZXN0T2Zmc2V0LCBjb25zdCBBdWRpb0J1ZmZlckxpc3QqIGxpc3QsIHNpemVfdCBz
cmNPZmZzZXQsIHNpemVfdCBuYnl0ZXMpCi17Ci0gICAgQVNTRVJUKGxpc3QtPm1OdW1iZXJCdWZm
ZXJzID09IHBvaW50ZXJzLnNpemUoKSk7Ci0gICAgY29uc3QgQXVkaW9CdWZmZXIqIHNyYyA9IGxp
c3QtPm1CdWZmZXJzOwotICAgIGZvciAoYXV0byYgcG9pbnRlciA6IHBvaW50ZXJzKSB7Ci0gICAg
ICAgIGlmIChzcmNPZmZzZXQgPiBzcmMtPm1EYXRhQnl0ZVNpemUpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgbWVtY3B5KHBvaW50ZXIgKyBkZXN0T2Zmc2V0LCBzdGF0aWNfY2FzdDxC
eXRlKj4oc3JjLT5tRGF0YSkgKyBzcmNPZmZzZXQsIHN0ZDo6bWluPHNpemVfdD4obmJ5dGVzLCBz
cmMtPm1EYXRhQnl0ZVNpemUgLSBzcmNPZmZzZXQpKTsKLSAgICAgICAgKytzcmM7Ci0gICAgfQot
fQotCi1zdGF0aWMgdm9pZCBGZXRjaEFCTChBdWRpb0J1ZmZlckxpc3QqIGxpc3QsIHNpemVfdCBk
ZXN0T2Zmc2V0LCBWZWN0b3I8Qnl0ZSo+JiBwb2ludGVycywgc2l6ZV90IHNyY09mZnNldCwgc2l6
ZV90IG5ieXRlcywgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6UENNRm9ybWF0IGZvcm1hdCwgQ0FS
aW5nQnVmZmVyOjpGZXRjaE1vZGUgbW9kZSkKLXsKLSAgICBBU1NFUlQobGlzdC0+bU51bWJlckJ1
ZmZlcnMgPT0gcG9pbnRlcnMuc2l6ZSgpKTsKLSAgICBBdWRpb0J1ZmZlciogZGVzdCA9IGxpc3Qt
Pm1CdWZmZXJzOwotICAgIGZvciAoYXV0byYgcG9pbnRlciA6IHBvaW50ZXJzKSB7Ci0gICAgICAg
IGlmIChkZXN0T2Zmc2V0ID4gZGVzdC0+bURhdGFCeXRlU2l6ZSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIG5ieXRlcyA9IHN0ZDo6bWluPHNpemVfdD4obmJ5dGVzLCBkZXN0LT5t
RGF0YUJ5dGVTaXplIC0gZGVzdE9mZnNldCk7Ci0gICAgICAgIGlmIChtb2RlID09IENBUmluZ0J1
ZmZlcjo6Q29weSkKLSAgICAgICAgICAgIG1lbWNweShzdGF0aWNfY2FzdDxCeXRlKj4oZGVzdC0+
bURhdGEpICsgZGVzdE9mZnNldCwgcG9pbnRlciArIHNyY09mZnNldCwgbmJ5dGVzKTsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICAgICAgY2Fz
ZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpJbnQxNjogewotICAgICAgICAgICAgICAgIGludDE2
X3QqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8aW50MTZfdCo+KGRlc3QtPm1EYXRhKTsKLSAg
ICAgICAgICAgICAgICBpbnQxNl90KiBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGludDE2X3Qq
Pihwb2ludGVyICsgc3JjT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG5ieXRlcyAvIHNpemVvZihpbnQxNl90KTsgaSsrKQotICAgICAgICAgICAgICAgICAg
ICBkZXN0aW5hdGlvbltpXSArPSBzb3VyY2VbaV07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246Oklu
dDMyOiB7Ci0gICAgICAgICAgICAgICAgaW50MzJfdCogZGVzdGluYXRpb24gPSBzdGF0aWNfY2Fz
dDxpbnQzMl90Kj4oZGVzdC0+bURhdGEpOwotICAgICAgICAgICAgICAgIHZEU1BfdmFkZGkoZGVz
dGluYXRpb24sIDEsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KHBvaW50ZXIgKyBzcmNPZmZz
ZXQpLCAxLCBkZXN0aW5hdGlvbiwgMSwgbmJ5dGVzIC8gc2l6ZW9mKGludDMyX3QpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbjo6RmxvYXQzMjogewotICAgICAgICAgICAgICAgIGZsb2F0KiBkZXN0
aW5hdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0Kj4oZGVzdC0+bURhdGEpOwotICAgICAgICAgICAg
ICAgIHZEU1BfdmFkZChkZXN0aW5hdGlvbiwgMSwgcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHBv
aW50ZXIgKyBzcmNPZmZzZXQpLCAxLCBkZXN0aW5hdGlvbiwgMSwgbmJ5dGVzIC8gc2l6ZW9mKGZs
b2F0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OkZsb2F0NjQ6IHsKLSAgICAgICAgICAgICAg
ICBkb3VibGUqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8ZG91YmxlKj4oZGVzdC0+bURhdGEp
OwotICAgICAgICAgICAgICAgIHZEU1BfdmFkZEQoZGVzdGluYXRpb24sIDEsIHJlaW50ZXJwcmV0
X2Nhc3Q8ZG91YmxlKj4ocG9pbnRlciArIHNyY09mZnNldCksIDEsIGRlc3RpbmF0aW9uLCAxLCBu
Ynl0ZXMgLyBzaXplb2YoZG91YmxlKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246Ok5vbmU6Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgKytkZXN0OwotICAgIH0KLX0K
LQotaW5saW5lIHZvaWQgWmVyb0FCTChBdWRpb0J1ZmZlckxpc3QqIGxpc3QsIHNpemVfdCBkZXN0
T2Zmc2V0LCBzaXplX3QgbmJ5dGVzKQotewotICAgIGludCBuQnVmZmVycyA9IGxpc3QtPm1OdW1i
ZXJCdWZmZXJzOwotICAgIEF1ZGlvQnVmZmVyKiBkZXN0ID0gbGlzdC0+bUJ1ZmZlcnM7Ci0gICAg
d2hpbGUgKC0tbkJ1ZmZlcnMgPj0gMCkgewotICAgICAgICBpZiAoZGVzdE9mZnNldCA+IGRlc3Qt
Pm1EYXRhQnl0ZVNpemUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbWVtc2V0KHN0
YXRpY19jYXN0PEJ5dGUqPihkZXN0LT5tRGF0YSkgKyBkZXN0T2Zmc2V0LCAwLCBzdGQ6Om1pbjxz
aXplX3Q+KG5ieXRlcywgZGVzdC0+bURhdGFCeXRlU2l6ZSAtIGRlc3RPZmZzZXQpKTsKLSAgICAg
ICAgKytkZXN0OwotICAgIH0KLX0KLQotdm9pZCBDQVJpbmdCdWZmZXI6OmZsdXNoKCkKLXsKLSAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2N1cnJlbnRGcmFtZUJvdW5kc0xvY2spOwotICAgIGZvciAo
YXV0byYgdGltZUJvdW5kcyA6IG1fdGltZUJvdW5kc1F1ZXVlKSB7Ci0gICAgICAgIHRpbWVCb3Vu
ZHMubV9zdGFydEZyYW1lID0gMDsKLSAgICAgICAgdGltZUJvdW5kcy5tX2VuZEZyYW1lID0gMDsK
LSAgICAgICAgdGltZUJvdW5kcy5tX3VwZGF0ZUNvdW50ZXIgPSAwOwotICAgIH0KLSAgICBtX3Rp
bWVCb3VuZHNRdWV1ZVB0ciA9IDA7Ci19Ci0KLUNBUmluZ0J1ZmZlcjo6RXJyb3IgQ0FSaW5nQnVm
ZmVyOjpzdG9yZShjb25zdCBBdWRpb0J1ZmZlckxpc3QqIGxpc3QsIHNpemVfdCBmcmFtZXNUb1dy
aXRlLCB1aW50NjRfdCBzdGFydEZyYW1lKQotewotICAgIGlmICghZnJhbWVzVG9Xcml0ZSkKLSAg
ICAgICAgcmV0dXJuIE9rOwotCi0gICAgaWYgKGZyYW1lc1RvV3JpdGUgPiBtX2ZyYW1lQ291bnQp
Ci0gICAgICAgIHJldHVybiBUb29NdWNoOwotCi0gICAgdWludDY0X3QgZW5kRnJhbWUgPSBzdGFy
dEZyYW1lICsgZnJhbWVzVG9Xcml0ZTsKLQotICAgIGlmIChzdGFydEZyYW1lIDwgY3VycmVudEVu
ZEZyYW1lKCkpIHsKLSAgICAgICAgLy8gVGhyb3cgZXZlcnl0aGluZyBvdXQgd2hlbiBnb2luZyBi
YWNrd2FyZHMuCi0gICAgICAgIHNldEN1cnJlbnRGcmFtZUJvdW5kcyhzdGFydEZyYW1lLCBzdGFy
dEZyYW1lKTsKLSAgICB9IGVsc2UgaWYgKGVuZEZyYW1lIC0gY3VycmVudFN0YXJ0RnJhbWUoKSA8
PSBtX2ZyYW1lQ291bnQpIHsKLSAgICAgICAgLy8gVGhlIGJ1ZmZlciBoYXMgbm90IHlldCB3cmFw
cGVkIGFuZCB3aWxsIG5vdCBuZWVkIHRvLgotICAgICAgICAvLyBOby1vcC4KLSAgICB9IGVsc2Ug
ewotICAgICAgICAvLyBBZHZhbmNlIHRoZSBzdGFydCB0aW1lIHBhc3QgdGhlIHJlZ2lvbiB3ZSBh
cmUgYWJvdXQgdG8gb3ZlcndyaXRlCi0gICAgICAgIC8vIHN0YXJ0aW5nIG9uZSBidWZmZXIgb2Yg
dGltZSBiZWhpbmQgd2hlcmUgd2UncmUgd3JpdGluZy4KLSAgICAgICAgdWludDY0X3QgbmV3U3Rh
cnRGcmFtZSA9IGVuZEZyYW1lIC0gbV9mcmFtZUNvdW50OwotICAgICAgICB1aW50NjRfdCBuZXdF
bmRGcmFtZSA9IHN0ZDo6bWF4KG5ld1N0YXJ0RnJhbWUsIGN1cnJlbnRFbmRGcmFtZSgpKTsKLSAg
ICAgICAgc2V0Q3VycmVudEZyYW1lQm91bmRzKG5ld1N0YXJ0RnJhbWUsIG5ld0VuZEZyYW1lKTsK
LSAgICB9Ci0KLSAgICAvLyBXcml0ZSB0aGUgbmV3IGZyYW1lcy4KLSAgICBzaXplX3Qgb2Zmc2V0
MDsKLSAgICBzaXplX3Qgb2Zmc2V0MTsKLSAgICB1aW50NjRfdCBjdXJFbmQgPSBjdXJyZW50RW5k
RnJhbWUoKTsKLQotICAgIGlmIChzdGFydEZyYW1lID4gY3VyRW5kKSB7Ci0gICAgICAgIC8vIFdl
IGFyZSBza2lwcGluZyBzb21lIHNhbXBsZXMsIHNvIHplcm8gdGhlIHJhbmdlIHdlIGFyZSBza2lw
cGluZy4KLSAgICAgICAgb2Zmc2V0MCA9IGZyYW1lT2Zmc2V0KGN1ckVuZCk7Ci0gICAgICAgIG9m
ZnNldDEgPSBmcmFtZU9mZnNldChzdGFydEZyYW1lKTsKLSAgICAgICAgaWYgKG9mZnNldDAgPCBv
ZmZzZXQxKQotICAgICAgICAgICAgWmVyb1JhbmdlKG1fcG9pbnRlcnMsIG9mZnNldDAsIG9mZnNl
dDEgLSBvZmZzZXQwKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBaZXJvUmFuZ2UobV9w
b2ludGVycywgb2Zmc2V0MCwgbV9jYXBhY2l0eUJ5dGVzIC0gb2Zmc2V0MCk7Ci0gICAgICAgICAg
ICBaZXJvUmFuZ2UobV9wb2ludGVycywgMCwgb2Zmc2V0MSk7Ci0gICAgICAgIH0KLSAgICAgICAg
b2Zmc2V0MCA9IG9mZnNldDE7Ci0gICAgfSBlbHNlCi0gICAgICAgIG9mZnNldDAgPSBmcmFtZU9m
ZnNldChzdGFydEZyYW1lKTsKLQotICAgIG9mZnNldDEgPSBmcmFtZU9mZnNldChlbmRGcmFtZSk7
Ci0gICAgaWYgKG9mZnNldDAgPCBvZmZzZXQxKQotICAgICAgICBTdG9yZUFCTChtX3BvaW50ZXJz
LCBvZmZzZXQwLCBsaXN0LCAwLCBvZmZzZXQxIC0gb2Zmc2V0MCk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIHNpemVfdCBuYnl0ZXMgPSBtX2NhcGFjaXR5Qnl0ZXMgLSBvZmZzZXQwOwotICAgICAgICBT
dG9yZUFCTChtX3BvaW50ZXJzLCBvZmZzZXQwLCBsaXN0LCAwLCBuYnl0ZXMpOwotICAgICAgICBT
dG9yZUFCTChtX3BvaW50ZXJzLCAwLCBsaXN0LCBuYnl0ZXMsIG9mZnNldDEpOwotICAgIH0KLQot
ICAgIC8vIE5vdyB1cGRhdGUgdGhlIGVuZCB0aW1lLgotICAgIHNldEN1cnJlbnRGcmFtZUJvdW5k
cyhjdXJyZW50U3RhcnRGcmFtZSgpLCBlbmRGcmFtZSk7Ci0KLSAgICByZXR1cm4gT2s7Ci19Ci0K
LXZvaWQgQ0FSaW5nQnVmZmVyOjpzZXRDdXJyZW50RnJhbWVCb3VuZHModWludDY0X3Qgc3RhcnRU
aW1lLCB1aW50NjRfdCBlbmRUaW1lKQotewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fY3VycmVu
dEZyYW1lQm91bmRzTG9jayk7Ci0gICAgdWludDMyX3QgbmV4dFB0ciA9IG1fdGltZUJvdW5kc1F1
ZXVlUHRyLmxvYWQoKSArIDE7Ci0gICAgdWludDMyX3QgaW5kZXggPSBuZXh0UHRyICYga0dlbmVy
YWxSaW5nVGltZUJvdW5kc1F1ZXVlTWFzazsKLQotICAgIG1fdGltZUJvdW5kc1F1ZXVlW2luZGV4
XS5tX3N0YXJ0RnJhbWUgPSBzdGFydFRpbWU7Ci0gICAgbV90aW1lQm91bmRzUXVldWVbaW5kZXhd
Lm1fZW5kRnJhbWUgPSBlbmRUaW1lOwotICAgIG1fdGltZUJvdW5kc1F1ZXVlW2luZGV4XS5tX3Vw
ZGF0ZUNvdW50ZXIgPSBuZXh0UHRyOwotICAgIG1fdGltZUJvdW5kc1F1ZXVlUHRyKys7Ci19Ci0K
LXZvaWQgQ0FSaW5nQnVmZmVyOjpnZXRDdXJyZW50RnJhbWVCb3VuZHModWludDY0X3QgJnN0YXJ0
VGltZSwgdWludDY0X3QgJmVuZFRpbWUpCi17Ci0gICAgdWludDMyX3QgY3VyUHRyID0gbV90aW1l
Qm91bmRzUXVldWVQdHIubG9hZCgpOwotICAgIHVpbnQzMl90IGluZGV4ID0gY3VyUHRyICYga0dl
bmVyYWxSaW5nVGltZUJvdW5kc1F1ZXVlTWFzazsKLSAgICBDQVJpbmdCdWZmZXI6OlRpbWVCb3Vu
ZHMmIGJvdW5kcyA9IG1fdGltZUJvdW5kc1F1ZXVlW2luZGV4XTsKLQotICAgIHN0YXJ0VGltZSA9
IGJvdW5kcy5tX3N0YXJ0RnJhbWU7Ci0gICAgZW5kVGltZSA9IGJvdW5kcy5tX2VuZEZyYW1lOwot
fQotCi12b2lkIENBUmluZ0J1ZmZlcjo6Y2xpcFRpbWVCb3VuZHModWludDY0X3QmIHN0YXJ0UmVh
ZCwgdWludDY0X3QmIGVuZFJlYWQpCi17Ci0gICAgdWludDY0X3Qgc3RhcnRUaW1lOwotICAgIHVp
bnQ2NF90IGVuZFRpbWU7Ci0KLSAgICBnZXRDdXJyZW50RnJhbWVCb3VuZHMoc3RhcnRUaW1lLCBl
bmRUaW1lKTsKLQotICAgIGlmIChzdGFydFJlYWQgPiBlbmRUaW1lIHx8IGVuZFJlYWQgPCBzdGFy
dFRpbWUpIHsKLSAgICAgICAgZW5kUmVhZCA9IHN0YXJ0UmVhZDsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIHN0YXJ0UmVhZCA9IHN0ZDo6bWF4KHN0YXJ0UmVhZCwgc3RhcnRUaW1lKTsK
LSAgICBlbmRSZWFkID0gc3RkOjptaW4oZW5kUmVhZCwgZW5kVGltZSk7Ci0gICAgZW5kUmVhZCA9
IHN0ZDo6bWF4KGVuZFJlYWQsIHN0YXJ0UmVhZCk7Ci19Ci0KLXVpbnQ2NF90IENBUmluZ0J1ZmZl
cjo6Y3VycmVudFN0YXJ0RnJhbWUoKSBjb25zdAotewotICAgIHVpbnQzMl90IGluZGV4ID0gbV90
aW1lQm91bmRzUXVldWVQdHIubG9hZCgpICYga0dlbmVyYWxSaW5nVGltZUJvdW5kc1F1ZXVlTWFz
azsKLSAgICByZXR1cm4gbV90aW1lQm91bmRzUXVldWVbaW5kZXhdLm1fc3RhcnRGcmFtZTsKLX0K
LQotdWludDY0X3QgQ0FSaW5nQnVmZmVyOjpjdXJyZW50RW5kRnJhbWUoKSBjb25zdAotewotICAg
IHVpbnQzMl90IGluZGV4ID0gbV90aW1lQm91bmRzUXVldWVQdHIubG9hZCgpICYga0dlbmVyYWxS
aW5nVGltZUJvdW5kc1F1ZXVlTWFzazsKLSAgICByZXR1cm4gbV90aW1lQm91bmRzUXVldWVbaW5k
ZXhdLm1fZW5kRnJhbWU7Ci19Ci0KLUNBUmluZ0J1ZmZlcjo6RXJyb3IgQ0FSaW5nQnVmZmVyOjpm
ZXRjaChBdWRpb0J1ZmZlckxpc3QqIGxpc3QsIHNpemVfdCBuRnJhbWVzLCB1aW50NjRfdCBzdGFy
dFJlYWQsIEZldGNoTW9kZSBtb2RlKQotewotICAgIGlmICghbkZyYW1lcykKLSAgICAgICAgcmV0
dXJuIE9rOwotICAgIAotICAgIHN0YXJ0UmVhZCA9IHN0ZDo6bWF4PHVpbnQ2NF90PigwLCBzdGFy
dFJlYWQpOwotICAgIAotICAgIHVpbnQ2NF90IGVuZFJlYWQgPSBzdGFydFJlYWQgKyBuRnJhbWVz
OwotICAgIAotICAgIHVpbnQ2NF90IHN0YXJ0UmVhZDAgPSBzdGFydFJlYWQ7Ci0gICAgdWludDY0
X3QgZW5kUmVhZDAgPSBlbmRSZWFkOwotICAgIAotICAgIGNsaXBUaW1lQm91bmRzKHN0YXJ0UmVh
ZCwgZW5kUmVhZCk7Ci0KLSAgICBpZiAoc3RhcnRSZWFkID09IGVuZFJlYWQpIHsKLSAgICAgICAg
WmVyb0FCTChsaXN0LCAwLCBuRnJhbWVzICogbV9ieXRlc1BlckZyYW1lKTsKLSAgICAgICAgcmV0
dXJuIE9rOwotICAgIH0KLSAgICAKLSAgICBzaXplX3QgYnl0ZVNpemUgPSBzdGF0aWNfY2FzdDxz
aXplX3Q+KChlbmRSZWFkIC0gc3RhcnRSZWFkKSAqIG1fYnl0ZXNQZXJGcmFtZSk7Ci0gICAgCi0g
ICAgc2l6ZV90IGRlc3RTdGFydEJ5dGVPZmZzZXQgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0ZDo6
bWF4PHVpbnQ2NF90PigwLCAoc3RhcnRSZWFkIC0gc3RhcnRSZWFkMCkgKiBtX2J5dGVzUGVyRnJh
bWUpKTsKLSAgICAKLSAgICBpZiAoZGVzdFN0YXJ0Qnl0ZU9mZnNldCA+IDApCi0gICAgICAgIFpl
cm9BQkwobGlzdCwgMCwgc3RkOjptaW48c2l6ZV90PihuRnJhbWVzICogbV9ieXRlc1BlckZyYW1l
LCBkZXN0U3RhcnRCeXRlT2Zmc2V0KSk7Ci0KLSAgICBzaXplX3QgZGVzdEVuZFNpemUgPSBzdGF0
aWNfY2FzdDxzaXplX3Q+KHN0ZDo6bWF4PHVpbnQ2NF90PigwLCBlbmRSZWFkMCAtIGVuZFJlYWQp
KTsKLSAgICBpZiAoZGVzdEVuZFNpemUgPiAwKQotICAgICAgICBaZXJvQUJMKGxpc3QsIGRlc3RT
dGFydEJ5dGVPZmZzZXQgKyBieXRlU2l6ZSwgZGVzdEVuZFNpemUgKiBtX2J5dGVzUGVyRnJhbWUp
OwotCi0gICAgc2l6ZV90IG9mZnNldDAgPSBmcmFtZU9mZnNldChzdGFydFJlYWQpOwotICAgIHNp
emVfdCBvZmZzZXQxID0gZnJhbWVPZmZzZXQoZW5kUmVhZCk7Ci0gICAgc2l6ZV90IG5ieXRlczsK
LSAgICAKLSAgICBpZiAob2Zmc2V0MCA8IG9mZnNldDEpIHsKLSAgICAgICAgbmJ5dGVzID0gb2Zm
c2V0MSAtIG9mZnNldDA7Ci0gICAgICAgIEZldGNoQUJMKGxpc3QsIGRlc3RTdGFydEJ5dGVPZmZz
ZXQsIG1fcG9pbnRlcnMsIG9mZnNldDAsIG5ieXRlcywgbV9kZXNjcmlwdGlvbi5mb3JtYXQoKSwg
bW9kZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbmJ5dGVzID0gbV9jYXBhY2l0eUJ5dGVzIC0g
b2Zmc2V0MDsKLSAgICAgICAgRmV0Y2hBQkwobGlzdCwgZGVzdFN0YXJ0Qnl0ZU9mZnNldCwgbV9w
b2ludGVycywgb2Zmc2V0MCwgbmJ5dGVzLCBtX2Rlc2NyaXB0aW9uLmZvcm1hdCgpLCBtb2RlKTsK
LSAgICAgICAgaWYgKG9mZnNldDEpCi0gICAgICAgICAgICBGZXRjaEFCTChsaXN0LCBkZXN0U3Rh
cnRCeXRlT2Zmc2V0ICsgbmJ5dGVzLCBtX3BvaW50ZXJzLCAwLCBvZmZzZXQxLCBtX2Rlc2NyaXB0
aW9uLmZvcm1hdCgpLCBtb2RlKTsKLSAgICAgICAgbmJ5dGVzICs9IG9mZnNldDE7Ci0gICAgfQot
ICAgIAotICAgIGludCBjaGFubmVsQ291bnQgPSBsaXN0LT5tTnVtYmVyQnVmZmVyczsKLSAgICBB
dWRpb0J1ZmZlciogZGVzdCA9IGxpc3QtPm1CdWZmZXJzOwotICAgIHdoaWxlICgtLWNoYW5uZWxD
b3VudCA+PSAwKSB7Ci0gICAgICAgIGRlc3QtPm1EYXRhQnl0ZVNpemUgPSBuYnl0ZXM7Ci0gICAg
ICAgIGRlc3QrKzsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIE9rOwotfQotCi19Ci0KLSNlbmRp
ZiAvLyBFTkFCTEUoV0VCX0FVRElPKSAmJiBVU0UoTUVESUFUT09MQk9YKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwNGFjZWZjOGRhYWQ3MTMyOGE0ZGRmYWJiZDA0YWY5ZWNkOGViOTVj
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuaAorKysgL2Rldi9udWxsCkBA
IC0xLDEyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUo
V0VCX0FVRElPKSAmJiBVU0UoTUVESUFUT09MQk9YKQotCi0jaW5jbHVkZSAiQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FycmF5QnVmZmVyLmg+Ci0jaW5jbHVkZSA8d3RmL0xvY2su
aD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
Ci10eXBlZGVmIHN0cnVjdCBBdWRpb0J1ZmZlckxpc3QgQXVkaW9CdWZmZXJMaXN0OwotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENBUmluZ0J1ZmZlclN0b3JhZ2UgewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHZpcnR1YWwgfkNBUmluZ0J1ZmZlclN0
b3JhZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgdmlydHVhbCB2b2lkIGFsbG9jYXRlKHNpemVfdCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBkZWFsbG9jYXRlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCog
ZGF0YSgpID0gMDsKLX07Ci0KLWNsYXNzIENBUmluZ0J1ZmZlclN0b3JhZ2VWZWN0b3IgZmluYWwg
OiBwdWJsaWMgQ0FSaW5nQnVmZmVyU3RvcmFnZSB7Ci1wdWJsaWM6Ci0gICAgfkNBUmluZ0J1ZmZl
clN0b3JhZ2VWZWN0b3IoKSA9IGRlZmF1bHQ7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBhbGxvY2F0
ZShzaXplX3QgYnl0ZUNvdW50KSBmaW5hbCB7IG1fYnVmZmVyLmdyb3coYnl0ZUNvdW50KTsgfQot
ICAgIHZvaWQgZGVhbGxvY2F0ZSgpIGZpbmFsIHsgbV9idWZmZXIuY2xlYXIoKTsgfQotICAgIHZv
aWQqIGRhdGEoKSBmaW5hbCB7IHJldHVybiBtX2J1ZmZlci5kYXRhKCk7IH0KLSAgICBWZWN0b3I8
dWludDhfdD4gbV9idWZmZXI7Ci19OwotCi1jbGFzcyBDQVJpbmdCdWZmZXIgewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIENBUmluZ0J1
ZmZlcigpOwotICAgIFdFQkNPUkVfRVhQT1JUIENBUmluZ0J1ZmZlcihVbmlxdWVSZWY8Q0FSaW5n
QnVmZmVyU3RvcmFnZT4mJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgfkNBUmluZ0J1ZmZlcigpOwot
Ci0gICAgZW51bSBFcnJvciB7Ci0gICAgICAgIE9rLAotICAgICAgICBUb29NdWNoLCAvLyBmZXRj
aCBzdGFydCB0aW1lIGlzIGVhcmxpZXIgdGhhbiBidWZmZXIgc3RhcnQgdGltZSBhbmQgZmV0Y2gg
ZW5kIHRpbWUgaXMgbGF0ZXIgdGhhbiBidWZmZXIgZW5kIHRpbWUKLSAgICB9OwotCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBhbGxvY2F0ZShjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24m
LCBzaXplX3QpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGVhbGxvY2F0ZSgpOwotCi0gICAg
V0VCQ09SRV9FWFBPUlQgRXJyb3Igc3RvcmUoY29uc3QgQXVkaW9CdWZmZXJMaXN0Kiwgc2l6ZV90
IGZyYW1lQ291bnQsIHVpbnQ2NF90IHN0YXJ0RnJhbWUpOwotCi0gICAgZW51bSBGZXRjaE1vZGUg
eyBDb3B5LCBNaXggfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFcnJvciBmZXRjaChBdWRpb0J1ZmZl
ckxpc3QqLCBzaXplX3QgZnJhbWVDb3VudCwgdWludDY0X3Qgc3RhcnRGcmFtZSwgRmV0Y2hNb2Rl
IG1vZGUgPSBDb3B5KTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmx1c2goKTsKLQotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0Q3VycmVudEZyYW1lQm91bmRzKHVpbnQ2NF90ICZzdGFy
dFRpbWUsIHVpbnQ2NF90ICZlbmRUaW1lKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEN1
cnJlbnRGcmFtZUJvdW5kcyh1aW50NjRfdCBzdGFydEZyYW1lLCB1aW50NjRfdCBlbmRGcmFtZSk7
Ci0KLSAgICB1aW50MzJfdCBjaGFubmVsQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2NoYW5uZWxD
b3VudDsgfQotICAgIENBUmluZ0J1ZmZlclN0b3JhZ2UmIHN0b3JhZ2UoKSB7IHJldHVybiBtX2J1
ZmZlcnM7IH0KLQotcHJpdmF0ZToKLSAgICBzaXplX3QgZnJhbWVPZmZzZXQodWludDY0X3QgZnJh
bWVOdW1iZXIpIHsgcmV0dXJuIChmcmFtZU51bWJlciAmIG1fZnJhbWVDb3VudE1hc2spICogbV9i
eXRlc1BlckZyYW1lOyB9Ci0KLSAgICB2b2lkIGNsaXBUaW1lQm91bmRzKHVpbnQ2NF90JiBzdGFy
dFJlYWQsIHVpbnQ2NF90JiBlbmRSZWFkKTsKLQotICAgIHVpbnQ2NF90IGN1cnJlbnRTdGFydEZy
YW1lKCkgY29uc3Q7Ci0gICAgdWludDY0X3QgY3VycmVudEVuZEZyYW1lKCkgY29uc3Q7Ci0KLSAg
ICBVbmlxdWVSZWY8Q0FSaW5nQnVmZmVyU3RvcmFnZT4gbV9idWZmZXJzOwotICAgIFZlY3RvcjxC
eXRlKj4gbV9wb2ludGVyczsKLSAgICB1aW50MzJfdCBtX2NoYW5uZWxDb3VudCB7IDAgfTsKLSAg
ICBzaXplX3QgbV9ieXRlc1BlckZyYW1lIHsgMCB9OwotICAgIHVpbnQzMl90IG1fZnJhbWVDb3Vu
dCB7IDAgfTsKLSAgICB1aW50MzJfdCBtX2ZyYW1lQ291bnRNYXNrIHsgMCB9OwotICAgIHNpemVf
dCBtX2NhcGFjaXR5Qnl0ZXMgeyAwIH07Ci0KLSAgICBzdHJ1Y3QgVGltZUJvdW5kcyB7Ci0gICAg
ICAgIFRpbWVCb3VuZHMoKQotICAgICAgICAgICAgOiBtX3N0YXJ0RnJhbWUoMCkKLSAgICAgICAg
ICAgICwgbV9lbmRGcmFtZSgwKQotICAgICAgICAgICAgLCBtX3VwZGF0ZUNvdW50ZXIoMCkKLSAg
ICAgICAgewotICAgICAgICB9Ci0gICAgICAgIHZvbGF0aWxlIHVpbnQ2NF90IG1fc3RhcnRGcmFt
ZTsKLSAgICAgICAgdm9sYXRpbGUgdWludDY0X3QgbV9lbmRGcmFtZTsKLSAgICAgICAgdm9sYXRp
bGUgdWludDMyX3QgbV91cGRhdGVDb3VudGVyOwotICAgIH07Ci0KLSAgICBDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24gbV9kZXNjcmlwdGlvbjsKLSAgICBWZWN0b3I8VGltZUJvdW5kcz4gbV90aW1l
Qm91bmRzUXVldWU7Ci0gICAgTG9jayBtX2N1cnJlbnRGcmFtZUJvdW5kc0xvY2s7Ci0gICAgc3Rk
OjphdG9taWM8aW50MzJfdD4gbV90aW1lQm91bmRzUXVldWVQdHIgeyAwIH07Ci19OwotCi19Ci0K
LSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKSAmJiBVU0UoTUVESUFUT09MQk9YKQo=
</data>
<flag name="commit-queue"
          id="426971"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410902</attachid>
            <date>2020-10-08 19:46:30 -0700</date>
            <delta_ts>2020-10-08 20:37:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>217497.patch</filename>
            <type>text/plain</type>
            <size>16559</size>
            <attacher name="Peng Liu">peng.liu6</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3MDYzOWU1MjBjN2QuLjg3ZjlmMDI3M2I3NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDM5IEBACisyMDIwLTEwLTA4ICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+
CisKKyAgICAgICAgTW92ZSBzb21lIGF1ZGlvIGJ1ZmZlciBtYW5hZ2VtZW50IHJlbGF0ZWQgZmls
ZXMgZnJvbSBmb2xkZXIg4oCcbWFj4oCdIHRvIGZvbGRlciDigJxjb2NvYeKAnQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3NDk3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVy
TGlzdC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9TYW1wbGVCdWZm
ZXJMaXN0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMv
QXVkaW9TYW1wbGVCdWZmZXJMaXN0LmguCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2Ev
QXVkaW9TYW1wbGVEYXRhU291cmNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLmguCisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vY29jb2EvQXVkaW9TYW1wbGVEYXRhU291cmNlLm1tOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24u
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb246OnNhbXBsZVJhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uOjppc1BDTSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQUF1
ZGlvU3RyZWFtRGVzY3JpcHRpb246OmlzSW50ZXJsZWF2ZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjppc1NpZ25lZEludGVnZXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjppc0Zsb2F0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6aXNOYXRpdmVF
bmRpYW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9u
OjpudW1iZXJPZkludGVybGVhdmVkQ2hhbm5lbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpudW1iZXJPZkNoYW5uZWxTdHJlYW1zIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6bnVtYmVyT2ZDaGFu
bmVscyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246
OnNhbXBsZVdvcmRTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbjo6Ynl0ZXNQZXJGcmFtZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQUF1
ZGlvU3RyZWFtRGVzY3JpcHRpb246OmJ5dGVzUGVyUGFja2V0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6Zm9ybWF0RmxhZ3MgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpvcGVyYXRvcj09IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6b3BlcmF0b3Ih
PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OnN0
cmVhbURlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbjo6c3RyZWFtRGVzY3JpcHRpb24pOgorICAgICAgICBNb3ZlIHRoZSBpbmxpbmUg
ZnVuY3Rpb24gZGVmaW5pdGlvbnMgb3V0LW9mLWxpbmUgdG8gZml4IHN0eWxpbmcgaXNzdWVzLgor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbi5oLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2NvY29hL0NBUmlu
Z0J1ZmZlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9t
YWMvQ0FSaW5nQnVmZmVyLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9DQVJp
bmdCdWZmZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21h
Yy9DQVJpbmdCdWZmZXIuaC4KKwogMjAyMC0xMC0wOCAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9y
aS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBbV2luQ2Fpcm9dIEFTU0VSVElPTiBGQUlMRUQ6
IG1fcmVuZGVyaW5nVXBkYXRlUmVtYWluaW5nU3RlcHMubGFzdCgpLmlzRW1wdHkoKSBpbiBXZWJD
b3JlOjpQYWdlOjpmaW5hbGl6ZVJlbmRlcmluZ1VwZGF0ZSBzaW5jZSByMjY4MDc1CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291
cmNlc0NvY29hLnR4dAppbmRleCBlM2IyZTI5ZTgwMmEuLjFhZmNiODA3ZGRlOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzQ29jb2EudHh0CkBAIC0yMDMsNiArMjAzLDEwIEBAIHBhZ2Uvc2Nyb2xsaW5nL21hYy9T
Y3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTWFjLm1tCiBwYWdlL3Njcm9sbGluZy9t
YWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbQogcGxhdGZvcm0vYXVk
aW8vQXVkaW9TZXNzaW9uLmNwcAogcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9EZXN0aW5hdGlv
bkNvY29hLmNwcAorcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNw
cAorcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9TYW1wbGVEYXRhU291cmNlLm1tCitwbGF0Zm9y
bS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwCitwbGF0Zm9ybS9hdWRp
by9jb2NvYS9DQVJpbmdCdWZmZXIuY3BwCiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9NZWRpYVNlc3Np
b25NYW5hZ2VyQ29jb2EubW0KIHBsYXRmb3JtL2F1ZGlvL2NvY29hL1dlYkF1ZGlvQnVmZmVyTGlz
dC5jcHAKIHBsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmNwcCBAbm8tdW5p
ZnkKQEAgLTIxNCwxMSArMjE4LDcgQEAgcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvQnVzTWFjLm1t
CiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5jcHAKIHBsYXRmb3JtL2F1
ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuY3BwCiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9I
YXJkd2FyZUxpc3RlbmVyTWFjLmNwcAotcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVm
ZmVyTGlzdC5jcHAKLXBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFTb3VyY2UubW0K
IHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1Nlc3Npb25NYWMubW0KLXBsYXRmb3JtL2F1ZGlvL21h
Yy9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwCi1wbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5n
QnVmZmVyLmNwcAogcGxhdGZvcm0vYXVkaW8vbWFjL0ZGVEZyYW1lTWFjLmNwcAogcGxhdGZvcm0v
Y2YvS2V5ZWREZWNvZGVyQ0YuY3BwCiBwbGF0Zm9ybS9jZi9LZXllZEVuY29kZXJDRi5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBjMGI1NmU2MDUyZmMuLmU4MDA0Y2I2ZDEzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjczNjIsNiArMjczNjIsMTQgQEAK
IAkJCWNoaWxkcmVuID0gKAogCQkJCTQxMzE1MTg0MjM1Nzc0NUUwMDExNUU2RSAvKiBBdWRpb0Rl
c3RpbmF0aW9uQ29jb2EuY3BwICovLAogCQkJCTQxMzE1MTg2MjM1Nzc0NUUwMDExNUU2RSAvKiBB
dWRpb0Rlc3RpbmF0aW9uQ29jb2EuaCAqLywKKwkJCQkwNzNCODc2MjFFNDM4NTlEMDA3MUMwRUMg
LyogQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcCAqLywKKwkJCQkwNzNCODc2MzFFNDM4NTlEMDA3
MUMwRUMgLyogQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmggKi8sCisJCQkJMDczQjg3NjUxRTQzODU5
RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oICovLAorCQkJCTA3M0I4NzY0MUU0
Mzg1OUQwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZURhdGFTb3VyY2UubW0gKi8sCisJCQkJMDczQjg3
NTcxRTQwRENGRDAwNzFDMEVDIC8qIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5jcHAgKi8sCisJ
CQkJMDczQjg3NTgxRTQwRENGRDAwNzFDMEVDIC8qIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5o
ICovLAorCQkJCUNEQzczNDEyMTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuY3BwICov
LAorCQkJCUNEQzczNDEzMTk3Nzg5NkMwMDQ2QkZDNSAvKiBDQVJpbmdCdWZmZXIuaCAqLywKIAkJ
CQk0MTdGN0FFRDIxMzlCRjY1MDBGQkE3RUMgLyogTWVkaWFTZXNzaW9uTWFuYWdlckNvY29hLmgg
Ki8sCiAJCQkJNDE3RjdBRUEyMTM5QkY2NDAwRkJBN0VDIC8qIE1lZGlhU2Vzc2lvbk1hbmFnZXJD
b2NvYS5tbSAqLywKIAkJCQk0MTdGN0FFQjIxMzlCRjY0MDBGQkE3RUMgLyogV2ViQXVkaW9CdWZm
ZXJMaXN0LmNwcCAqLywKQEAgLTMwMjY5LDE1ICszMDI3Nyw3IEBACiAJCQkJRkQzMTYwQjkxMkIw
MjcyQTAwQzFBMzU5IC8qIEF1ZGlvRmlsZVJlYWRlck1hYy5oICovLAogCQkJCUNEMkY0QTI1MThE
OEEzNDkwMDYzNzQ2RCAvKiBBdWRpb0hhcmR3YXJlTGlzdGVuZXJNYWMuY3BwICovLAogCQkJCUNE
MkY0QTI2MThEOEEzNDkwMDYzNzQ2RCAvKiBBdWRpb0hhcmR3YXJlTGlzdGVuZXJNYWMuaCAqLywK
LQkJCQkwNzNCODc2MjFFNDM4NTlEMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNw
cCAqLywKLQkJCQkwNzNCODc2MzFFNDM4NTlEMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVCdWZmZXJM
aXN0LmggKi8sCi0JCQkJMDczQjg3NjUxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlRGF0
YVNvdXJjZS5oICovLAotCQkJCTA3M0I4NzY0MUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRpb1NhbXBs
ZURhdGFTb3VyY2UubW0gKi8sCiAJCQkJQ0Q1NERFNDkxNzQ2OUM2RDAwNUU1QjM2IC8qIEF1ZGlv
U2Vzc2lvbk1hYy5tbSAqLywKLQkJCQkwNzNCODc1NzFFNDBEQ0ZEMDA3MUMwRUMgLyogQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uLmNwcCAqLywKLQkJCQkwNzNCODc1ODFFNDBEQ0ZEMDA3MUMwRUMg
LyogQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggKi8sCi0JCQkJQ0RDNzM0MTIxOTc3ODk2QzAw
NDZCRkM1IC8qIENBUmluZ0J1ZmZlci5jcHAgKi8sCi0JCQkJQ0RDNzM0MTMxOTc3ODk2QzAwNDZC
RkM1IC8qIENBUmluZ0J1ZmZlci5oICovLAogCQkJCUZEMzE2MEJBMTJCMDI3MkEwMEMxQTM1OSAv
KiBGRlRGcmFtZU1hYy5jcHAgKi8sCiAJCQkpOwogCQkJcGF0aCA9IG1hYzsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9TYW1wbGVCdWZm
ZXJMaXN0LmNwcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAKcmVuYW1lIHRv
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxlQnVmZmVyTGlz
dC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRp
b1NhbXBsZUJ1ZmZlckxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29h
L0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0
LmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2Ft
cGxlQnVmZmVyTGlzdC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9jb2NvYS9BdWRpb1NhbXBsZURhdGFTb3VyY2UuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUK
cmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxl
RGF0YVNvdXJjZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2Nv
YS9BdWRpb1NhbXBsZURhdGFTb3VyY2UuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbQpzaW1pbGFyaXR5
IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFj
L0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbQpyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vY29jb2EvQXVkaW9TYW1wbGVEYXRhU291cmNlLm1tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbi5jcHAKc2ltaWxhcml0eSBpbmRleCA2OCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5jcHAKcmVuYW1l
IHRvIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbi5jcHAKaW5kZXggNWQzYmM3ZDZiM2UwLi40Y2E0ZWZjOGY0Y2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbi5jcHAKQEAgLTMyLDcgKzMyLDcgQEAgQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oKQogICAgIDogbV9zdHJlYW1EZXNjcmlw
dGlvbih7IH0pCiB7CiB9Ci0gICAgCisKIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6fkNBQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbigpID0gZGVmYXVsdDsKIAogQ0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2Ny
aXB0aW9uICZkZXNjKQpAQCAtMTU0LDQgKzE1NCwxMDIgQEAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgYSwgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rl
c2MKICAgICAgICAgJiYgYS5tQml0c1BlckNoYW5uZWwgPT0gYi5tQml0c1BlckNoYW5uZWw7CiB9
CiAKK2RvdWJsZSBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OnNhbXBsZVJhdGUoKSBjb25zdAor
eworICAgIHJldHVybiBtX3N0cmVhbURlc2NyaXB0aW9uLm1TYW1wbGVSYXRlOworfQorCitib29s
IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6aXNQQ00oKSBjb25zdAoreworICAgIHJldHVybiBt
X3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRJRCA9PSBrQXVkaW9Gb3JtYXRMaW5lYXJQQ007Cit9
CisKK2Jvb2wgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjppc0ludGVybGVhdmVkKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gIShtX3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFncyAmIGtBdWRp
b0Zvcm1hdEZsYWdJc05vbkludGVybGVhdmVkKTsKK30KKworYm9vbCBDQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb246OmlzU2lnbmVkSW50ZWdlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzUENNKCkg
JiYgKG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzICYga0F1ZGlvRm9ybWF0RmxhZ0lz
U2lnbmVkSW50ZWdlcik7Cit9CisKK2Jvb2wgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjppc0Zs
b2F0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNQQ00oKSAmJiAobV9zdHJlYW1EZXNjcmlwdGlv
bi5tRm9ybWF0RmxhZ3MgJiBrQXVkaW9Gb3JtYXRGbGFnSXNGbG9hdCk7Cit9CisKK2Jvb2wgQ0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uOjppc05hdGl2ZUVuZGlhbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGlzUENNKCkgJiYgKG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzICYga0F1ZGlv
Rm9ybWF0RmxhZ0lzQmlnRW5kaWFuKSA9PSBrQXVkaW9Gb3JtYXRGbGFnc05hdGl2ZUVuZGlhbjsK
K30KKwordWludDMyX3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpudW1iZXJPZkludGVybGVh
dmVkQ2hhbm5lbHMoKSBjb25zdAoreworICAgIHJldHVybiBpc0ludGVybGVhdmVkKCkgPyBtX3N0
cmVhbURlc2NyaXB0aW9uLm1DaGFubmVsc1BlckZyYW1lIDogMTsKK30KKwordWludDMyX3QgQ0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uOjpudW1iZXJPZkNoYW5uZWxTdHJlYW1zKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gaXNJbnRlcmxlYXZlZCgpID8gMSA6IG1fc3RyZWFtRGVzY3JpcHRpb24ubUNo
YW5uZWxzUGVyRnJhbWU7Cit9CisKK3VpbnQzMl90IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6
bnVtYmVyT2ZDaGFubmVscygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RyZWFtRGVzY3JpcHRp
b24ubUNoYW5uZWxzUGVyRnJhbWU7Cit9CisKK3VpbnQzMl90IENBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbjo6c2FtcGxlV29yZFNpemUoKSBjb25zdAoreworICAgIHJldHVybiAobV9zdHJlYW1EZXNj
cmlwdGlvbi5tQnl0ZXNQZXJGcmFtZSA+IDAgJiYgbnVtYmVyT2ZJbnRlcmxlYXZlZENoYW5uZWxz
KCkpID8gbV9zdHJlYW1EZXNjcmlwdGlvbi5tQnl0ZXNQZXJGcmFtZSAvIG51bWJlck9mSW50ZXJs
ZWF2ZWRDaGFubmVscygpIDogIDA7Cit9CisKK3VpbnQzMl90IENBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbjo6Ynl0ZXNQZXJGcmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RyZWFtRGVzY3Jp
cHRpb24ubUJ5dGVzUGVyRnJhbWU7Cit9CisKK3VpbnQzMl90IENBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbjo6Ynl0ZXNQZXJQYWNrZXQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0cmVhbURlc2Ny
aXB0aW9uLm1CeXRlc1BlclBhY2tldDsKK30KKwordWludDMyX3QgQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uOjpmb3JtYXRGbGFncygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RyZWFtRGVzY3Jp
cHRpb24ubUZvcm1hdEZsYWdzOworfQorCitib29sIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6
b3BlcmF0b3I9PShjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIG90aGVyKSBjb25z
dAoreworICAgIHJldHVybiBtX3N0cmVhbURlc2NyaXB0aW9uID09IG90aGVyOworfQorCitib29s
IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6b3BlcmF0b3IhPShjb25zdCBBdWRpb1N0cmVhbUJh
c2ljRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiAhb3BlcmF0b3IgPT0g
KG90aGVyKTsKK30KKworYm9vbCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246Om9wZXJhdG9yPT0o
Y29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG90
aGVyLnBsYXRmb3JtRGVzY3JpcHRpb24oKS50eXBlICE9IFBsYXRmb3JtRGVzY3JpcHRpb246OkNB
QXVkaW9TdHJlYW1CYXNpY1R5cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biBvcGVyYXRvcj09KCpXVEY6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24q
PihvdGhlci5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3JpcHRpb24pKTsKK30KKworYm9vbCBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246Om9wZXJhdG9yIT0oY29uc3QgQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbiYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICFvcGVyYXRvciA9PSAob3RoZXIp
OworfQorCitjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIENBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbjo6c3RyZWFtRGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3N0
cmVhbURlc2NyaXB0aW9uOworfQorCitBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIENBQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbjo6c3RyZWFtRGVzY3JpcHRpb24oKQoreworICAgIHJldHVybiBt
X3N0cmVhbURlc2NyaXB0aW9uOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaApzaW1p
bGFyaXR5IGluZGV4IDYyJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9tYWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCmluZGV4IDdh
NzM5MjllMTM4NC4uMDhlYTJmMjZkNDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9tYWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKQEAg
LTM1LDkgKzM1LDcgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdWRpb1N0cmVhbUJh
c2ljRGVzY3JpcHRpb24mIGEsIGNvbnN0IEF1ZGlvU3RyZWFtQmEKIAogY2xhc3MgV0VCQ09SRV9F
WFBPUlQgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIGZpbmFsIDogcHVibGljIEF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotCiBwdWJsaWM6Ci0K
ICAgICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oKTsKICAgICBDQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24oY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJik7CiAgICAgQ0FBdWRpb1N0
cmVhbURlc2NyaXB0aW9uKGRvdWJsZSwgdWludDMyX3QsIFBDTUZvcm1hdCwgYm9vbCk7CkBAIC00
NywzNiArNDUsMjggQEAgcHVibGljOgogCiAgICAgUENNRm9ybWF0IGZvcm1hdCgpIGNvbnN0IGZp
bmFsOwogCi0gICAgZG91YmxlIHNhbXBsZVJhdGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3N0
cmVhbURlc2NyaXB0aW9uLm1TYW1wbGVSYXRlOyB9Ci0gICAgYm9vbCBpc1BDTSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdElEID09IGtBdWRpb0Zvcm1h
dExpbmVhclBDTTsgfQotICAgIGJvb2wgaXNJbnRlcmxlYXZlZCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuICEobV9zdHJlYW1EZXNjcmlwdGlvbi5tRm9ybWF0RmxhZ3MgJiBrQXVkaW9Gb3JtYXRGbGFn
SXNOb25JbnRlcmxlYXZlZCk7IH0KLSAgICBib29sIGlzU2lnbmVkSW50ZWdlcigpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIGlzUENNKCkgJiYgKG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdz
ICYga0F1ZGlvRm9ybWF0RmxhZ0lzU2lnbmVkSW50ZWdlcik7IH0KLSAgICBib29sIGlzRmxvYXQo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBpc1BDTSgpICYmIChtX3N0cmVhbURlc2NyaXB0aW9uLm1G
b3JtYXRGbGFncyAmIGtBdWRpb0Zvcm1hdEZsYWdJc0Zsb2F0KTsgfQotICAgIGJvb2wgaXNOYXRp
dmVFbmRpYW4oKSBjb25zdCBmaW5hbCB7IHJldHVybiBpc1BDTSgpICYmIChtX3N0cmVhbURlc2Ny
aXB0aW9uLm1Gb3JtYXRGbGFncyAmIGtBdWRpb0Zvcm1hdEZsYWdJc0JpZ0VuZGlhbikgPT0ga0F1
ZGlvRm9ybWF0RmxhZ3NOYXRpdmVFbmRpYW47IH0KLQotICAgIHVpbnQzMl90IG51bWJlck9mSW50
ZXJsZWF2ZWRDaGFubmVscygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGlzSW50ZXJsZWF2ZWQoKSA/
IG1fc3RyZWFtRGVzY3JpcHRpb24ubUNoYW5uZWxzUGVyRnJhbWUgOiAxOyB9Ci0gICAgdWludDMy
X3QgbnVtYmVyT2ZDaGFubmVsU3RyZWFtcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGlzSW50ZXJs
ZWF2ZWQoKSA/IDEgOiBtX3N0cmVhbURlc2NyaXB0aW9uLm1DaGFubmVsc1BlckZyYW1lOyB9Ci0g
ICAgdWludDMyX3QgbnVtYmVyT2ZDaGFubmVscygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3Ry
ZWFtRGVzY3JpcHRpb24ubUNoYW5uZWxzUGVyRnJhbWU7IH0KLSAgICB1aW50MzJfdCBzYW1wbGVX
b3JkU2l6ZSgpIGNvbnN0IGZpbmFsIHsKLSAgICAgICAgcmV0dXJuIChtX3N0cmVhbURlc2NyaXB0
aW9uLm1CeXRlc1BlckZyYW1lID4gMCAmJiBudW1iZXJPZkludGVybGVhdmVkQ2hhbm5lbHMoKSkg
PyBtX3N0cmVhbURlc2NyaXB0aW9uLm1CeXRlc1BlckZyYW1lIC8gbnVtYmVyT2ZJbnRlcmxlYXZl
ZENoYW5uZWxzKCkgOiAgMDsKLSAgICB9Ci0gICAgdWludDMyX3QgYnl0ZXNQZXJGcmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVyRnJhbWU7IH0KLSAgICB1
aW50MzJfdCBieXRlc1BlclBhY2tldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyZWFtRGVzY3JpcHRp
b24ubUJ5dGVzUGVyUGFja2V0OyB9Ci0gICAgdWludDMyX3QgZm9ybWF0RmxhZ3MoKSBjb25zdCB7
IHJldHVybiBtX3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFnczsgfQotCi0gICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuIG1fc3RyZWFtRGVzY3JpcHRpb24gPT0gb3RoZXI7IH0KLSAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gIW9wZXJhdG9yID09IChvdGhlcik7IH0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAo
b3RoZXIucGxhdGZvcm1EZXNjcmlwdGlvbigpLnR5cGUgIT0gUGxhdGZvcm1EZXNjcmlwdGlvbjo6
Q0FBdWRpb1N0cmVhbUJhc2ljVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICByZXR1cm4gb3BlcmF0b3I9PSgqV1RGOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rl
c2NyaXB0aW9uKj4ob3RoZXIucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKSk7Ci0g
ICAgfQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBv
dGhlcikgY29uc3QgeyByZXR1cm4gIW9wZXJhdG9yID09IChvdGhlcik7IH0KLQotICAgIGNvbnN0
IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgc3RyZWFtRGVzY3JpcHRpb24oKSBjb25zdCB7
IHJldHVybiBtX3N0cmVhbURlc2NyaXB0aW9uOyB9Ci0gICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2Ny
aXB0aW9uJiBzdHJlYW1EZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fc3RyZWFtRGVzY3JpcHRpb247
IH0KKyAgICBkb3VibGUgc2FtcGxlUmF0ZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNQQ00o
KSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzSW50ZXJsZWF2ZWQoKSBjb25zdCBmaW5hbDsKKyAg
ICBib29sIGlzU2lnbmVkSW50ZWdlcigpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNGbG9hdCgp
IGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNOYXRpdmVFbmRpYW4oKSBjb25zdCBmaW5hbDsKKwor
ICAgIHVpbnQzMl90IG51bWJlck9mSW50ZXJsZWF2ZWRDaGFubmVscygpIGNvbnN0IGZpbmFsOwor
ICAgIHVpbnQzMl90IG51bWJlck9mQ2hhbm5lbFN0cmVhbXMoKSBjb25zdCBmaW5hbDsKKyAgICB1
aW50MzJfdCBudW1iZXJPZkNoYW5uZWxzKCkgY29uc3QgZmluYWw7CisgICAgdWludDMyX3Qgc2Ft
cGxlV29yZFNpemUoKSBjb25zdCBmaW5hbDsKKyAgICB1aW50MzJfdCBieXRlc1BlckZyYW1lKCkg
Y29uc3Q7CisgICAgdWludDMyX3QgYnl0ZXNQZXJQYWNrZXQoKSBjb25zdDsKKyAgICB1aW50MzJf
dCBmb3JtYXRGbGFncygpIGNvbnN0OworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF1ZGlv
U3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdDsKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0
OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBvdGhl
cikgY29uc3Q7CisKKyAgICBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIHN0cmVh
bURlc2NyaXB0aW9uKCkgY29uc3Q7CisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBz
dHJlYW1EZXNjcmlwdGlvbigpOwogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIENBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
bWFjL0NBUmluZ0J1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2Nv
YS9DQVJpbmdCdWZmZXIuY3BwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmNwcApyZW5hbWUgdG8g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQ0FSaW5nQnVmZmVyLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQ0FSaW5nQnVmZmVyLmgKc2lt
aWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vbWFjL0NBUmluZ0J1ZmZlci5oCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9jb2NvYS9DQVJpbmdCdWZmZXIuaAppbmRleCAwNGFjZWZjOGRhYWQuLjNkODk0YjA2NWUx
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1
ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBUmluZ0J1
ZmZlci5oCkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBFcnJv
ciBzdG9yZShjb25zdCBBdWRpb0J1ZmZlckxpc3QqLCBzaXplX3QgZnJhbWVDb3VudCwgdWludDY0
X3Qgc3RhcnRGcmFtZSk7CiAKICAgICBlbnVtIEZldGNoTW9kZSB7IENvcHksIE1peCB9OwotICAg
IFdFQkNPUkVfRVhQT1JUIEVycm9yIGZldGNoKEF1ZGlvQnVmZmVyTGlzdCosIHNpemVfdCBmcmFt
ZUNvdW50LCB1aW50NjRfdCBzdGFydEZyYW1lLCBGZXRjaE1vZGUgbW9kZSA9IENvcHkpOworICAg
IFdFQkNPUkVfRVhQT1JUIEVycm9yIGZldGNoKEF1ZGlvQnVmZmVyTGlzdCosIHNpemVfdCBmcmFt
ZUNvdW50LCB1aW50NjRfdCBzdGFydEZyYW1lLCBGZXRjaE1vZGUgPSBDb3B5KTsKIAogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZmx1c2goKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410904</attachid>
            <date>2020-10-08 20:37:29 -0700</date>
            <delta_ts>2020-10-08 20:50:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>217497.patch</filename>
            <type>text/plain</type>
            <size>16551</size>
            <attacher name="Peng Liu">peng.liu6</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3MDYzOWU1MjBjN2QuLjg3ZjlmMDI3M2I3NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDM5IEBACisyMDIwLTEwLTA4ICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+
CisKKyAgICAgICAgTW92ZSBzb21lIGF1ZGlvIGJ1ZmZlciBtYW5hZ2VtZW50IHJlbGF0ZWQgZmls
ZXMgZnJvbSBmb2xkZXIgIm1hYyIgdG8gZm9sZGVyICJjb2NvYSIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzQ5NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vY29jb2EvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3Bw
LgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2Ft
cGxlQnVmZmVyTGlzdC5oLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2Ft
cGxlRGF0YVNvdXJjZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vbWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlv
L2NvY29hL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFTb3VyY2UubW0uCisgICAgICAg
ICogcGxhdGZvcm0vYXVkaW8vY29jb2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uOjpzYW1wbGVSYXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbjo6aXNQQ00gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVh
bURlc2NyaXB0aW9uOjppc0ludGVybGVhdmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6aXNTaWduZWRJbnRlZ2VyIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6aXNGbG9hdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmlzTmF0aXZlRW5kaWFuIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6bnVtYmVy
T2ZJbnRlcmxlYXZlZENoYW5uZWxzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbjo6bnVtYmVyT2ZDaGFubmVsU3RyZWFtcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246Om51bWJlck9mQ2hhbm5lbHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpzYW1wbGVX
b3JkU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b246OmJ5dGVzUGVyRnJhbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVh
bURlc2NyaXB0aW9uOjpieXRlc1BlclBhY2tldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmZvcm1hdEZsYWdzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246Om9wZXJhdG9yIT0gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpzdHJlYW1EZXNj
cmlwdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b246OnN0cmVhbURlc2NyaXB0aW9uKToKKyAgICAgICAgTW92ZSB0aGUgaW5saW5lIGZ1bmN0aW9u
IGRlZmluaXRpb25zIG91dC1vZi1saW5lIHRvIGZpeCBzdHlsaW5nIGlzc3Vlcy4KKyAgICAgICAg
KiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24uaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9DQVJpbmdCdWZmZXIu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmlu
Z0J1ZmZlci5jcHAuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2EvQ0FSaW5nQnVmZmVy
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5n
QnVmZmVyLmguCisKIDIwMjAtMTAtMDggIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlA
c29ueS5jb20+CiAKICAgICAgICAgW1dpbkNhaXJvXSBBU1NFUlRJT04gRkFJTEVEOiBtX3JlbmRl
cmluZ1VwZGF0ZVJlbWFpbmluZ1N0ZXBzLmxhc3QoKS5pc0VtcHR5KCkgaW4gV2ViQ29yZTo6UGFn
ZTo6ZmluYWxpemVSZW5kZXJpbmdVcGRhdGUgc2luY2UgcjI2ODA3NQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKaW5kZXggZTNiMmUyOWU4MDJhLi4xYWZjYjgwN2RkZTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0Nv
Y29hLnR4dApAQCAtMjAzLDYgKzIwMywxMCBAQCBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZU1hYy5tbQogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0KIHBsYXRmb3JtL2F1ZGlvL0F1ZGlv
U2Vzc2lvbi5jcHAKIHBsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRGVzdGluYXRpb25Db2NvYS5j
cHAKK3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAKK3BsYXRm
b3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbQorcGxhdGZvcm0vYXVkaW8v
Y29jb2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmNwcAorcGxhdGZvcm0vYXVkaW8vY29jb2Ev
Q0FSaW5nQnVmZmVyLmNwcAogcGxhdGZvcm0vYXVkaW8vY29jb2EvTWVkaWFTZXNzaW9uTWFuYWdl
ckNvY29hLm1tCiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9XZWJBdWRpb0J1ZmZlckxpc3QuY3BwCiBw
bGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAgQG5vLXVuaWZ5CkBAIC0y
MTQsMTEgKzIxOCw3IEBAIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0J1c01hYy5tbQogcGxhdGZv
cm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuY3BwCiBwbGF0Zm9ybS9hdWRpby9tYWMv
QXVkaW9GaWxlUmVhZGVyTWFjLmNwcAogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvSGFyZHdhcmVM
aXN0ZW5lck1hYy5jcHAKLXBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3Qu
Y3BwCi1wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLm1tCiBwbGF0Zm9y
bS9hdWRpby9tYWMvQXVkaW9TZXNzaW9uTWFjLm1tCi1wbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uLmNwcAotcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5j
cHAKIHBsYXRmb3JtL2F1ZGlvL21hYy9GRlRGcmFtZU1hYy5jcHAKIHBsYXRmb3JtL2NmL0tleWVk
RGVjb2RlckNGLmNwcAogcGxhdGZvcm0vY2YvS2V5ZWRFbmNvZGVyQ0YuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzBiNTZl
NjA1MmZjLi5lODAwNGNiNmQxMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI3MzYyLDYgKzI3MzYyLDE0IEBACiAJCQljaGls
ZHJlbiA9ICgKIAkJCQk0MTMxNTE4NDIzNTc3NDVFMDAxMTVFNkUgLyogQXVkaW9EZXN0aW5hdGlv
bkNvY29hLmNwcCAqLywKIAkJCQk0MTMxNTE4NjIzNTc3NDVFMDAxMTVFNkUgLyogQXVkaW9EZXN0
aW5hdGlvbkNvY29hLmggKi8sCisJCQkJMDczQjg3NjIxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlv
U2FtcGxlQnVmZmVyTGlzdC5jcHAgKi8sCisJCQkJMDczQjg3NjMxRTQzODU5RDAwNzFDMEVDIC8q
IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oICovLAorCQkJCTA3M0I4NzY1MUU0Mzg1OUQwMDcxQzBF
QyAvKiBBdWRpb1NhbXBsZURhdGFTb3VyY2UuaCAqLywKKwkJCQkwNzNCODc2NDFFNDM4NTlEMDA3
MUMwRUMgLyogQXVkaW9TYW1wbGVEYXRhU291cmNlLm1tICovLAorCQkJCTA3M0I4NzU3MUU0MERD
RkQwMDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwICovLAorCQkJCTA3M0I4
NzU4MUU0MERDRkQwMDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCAqLywKKwkJ
CQlDREM3MzQxMjE5Nzc4OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmNwcCAqLywKKwkJCQlD
REM3MzQxMzE5Nzc4OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmggKi8sCiAJCQkJNDE3RjdB
RUQyMTM5QkY2NTAwRkJBN0VDIC8qIE1lZGlhU2Vzc2lvbk1hbmFnZXJDb2NvYS5oICovLAogCQkJ
CTQxN0Y3QUVBMjEzOUJGNjQwMEZCQTdFQyAvKiBNZWRpYVNlc3Npb25NYW5hZ2VyQ29jb2EubW0g
Ki8sCiAJCQkJNDE3RjdBRUIyMTM5QkY2NDAwRkJBN0VDIC8qIFdlYkF1ZGlvQnVmZmVyTGlzdC5j
cHAgKi8sCkBAIC0zMDI2OSwxNSArMzAyNzcsNyBAQAogCQkJCUZEMzE2MEI5MTJCMDI3MkEwMEMx
QTM1OSAvKiBBdWRpb0ZpbGVSZWFkZXJNYWMuaCAqLywKIAkJCQlDRDJGNEEyNTE4RDhBMzQ5MDA2
Mzc0NkQgLyogQXVkaW9IYXJkd2FyZUxpc3RlbmVyTWFjLmNwcCAqLywKIAkJCQlDRDJGNEEyNjE4
RDhBMzQ5MDA2Mzc0NkQgLyogQXVkaW9IYXJkd2FyZUxpc3RlbmVyTWFjLmggKi8sCi0JCQkJMDcz
Qjg3NjIxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAgKi8sCi0J
CQkJMDczQjg3NjMxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oICov
LAotCQkJCTA3M0I4NzY1MUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZURhdGFTb3VyY2Uu
aCAqLywKLQkJCQkwNzNCODc2NDFFNDM4NTlEMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVEYXRhU291
cmNlLm1tICovLAogCQkJCUNENTRERTQ5MTc0NjlDNkQwMDVFNUIzNiAvKiBBdWRpb1Nlc3Npb25N
YWMubW0gKi8sCi0JCQkJMDczQjg3NTcxRTQwRENGRDAwNzFDMEVDIC8qIENBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbi5jcHAgKi8sCi0JCQkJMDczQjg3NTgxRTQwRENGRDAwNzFDMEVDIC8qIENBQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbi5oICovLAotCQkJCUNEQzczNDEyMTk3Nzg5NkMwMDQ2QkZDNSAv
KiBDQVJpbmdCdWZmZXIuY3BwICovLAotCQkJCUNEQzczNDEzMTk3Nzg5NkMwMDQ2QkZDNSAvKiBD
QVJpbmdCdWZmZXIuaCAqLywKIAkJCQlGRDMxNjBCQTEyQjAyNzJBMDBDMUEzNTkgLyogRkZURnJh
bWVNYWMuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5j
cHAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3BwCnJlbmFtZSB0byBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVC
dWZmZXJMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb1Nh
bXBsZUJ1ZmZlckxpc3QuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oCnJlbmFt
ZSB0byBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZUJ1ZmZl
ckxpc3QuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1
ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29j
b2EvQXVkaW9TYW1wbGVEYXRhU291cmNlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFTb3Vy
Y2UuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9T
YW1wbGVEYXRhU291cmNlLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFTb3VyY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZURhdGFTb3VyY2UubW0Kc2ltaWxhcml0eSBpbmRleCAx
MDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1Nh
bXBsZURhdGFTb3VyY2UubW0KcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2NvY29hL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24u
Y3BwCnNpbWlsYXJpdHkgaW5kZXggNjglCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwCnJlbmFtZSB0byBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24u
Y3BwCmluZGV4IDVkM2JjN2Q2YjNlMC4uNGNhNGVmYzhmNGNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24uY3BwCkBAIC0zMiw3ICszMiw3IEBAIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKCkKICAgICA6IG1fc3RyZWFtRGVzY3JpcHRpb24oeyB9
KQogewogfQotICAgIAorCiBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246On5DQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24oKSA9IGRlZmF1bHQ7CiAKIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6Q0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uKGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiAm
ZGVzYykKQEAgLTE1NCw0ICsxNTQsMTAyIEBAIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdWRpb1N0
cmVhbUJhc2ljRGVzY3JpcHRpb24mIGEsIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjCiAgICAg
ICAgICYmIGEubUJpdHNQZXJDaGFubmVsID09IGIubUJpdHNQZXJDaGFubmVsOwogfQogCitkb3Vi
bGUgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpzYW1wbGVSYXRlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9zdHJlYW1EZXNjcmlwdGlvbi5tU2FtcGxlUmF0ZTsKK30KKworYm9vbCBDQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb246OmlzUENNKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHJlYW1E
ZXNjcmlwdGlvbi5tRm9ybWF0SUQgPT0ga0F1ZGlvRm9ybWF0TGluZWFyUENNOworfQorCitib29s
IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6aXNJbnRlcmxlYXZlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuICEobV9zdHJlYW1EZXNjcmlwdGlvbi5tRm9ybWF0RmxhZ3MgJiBrQXVkaW9Gb3JtYXRG
bGFnSXNOb25JbnRlcmxlYXZlZCk7Cit9CisKK2Jvb2wgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9u
Ojppc1NpZ25lZEludGVnZXIoKSBjb25zdAoreworICAgIHJldHVybiBpc1BDTSgpICYmIChtX3N0
cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFncyAmIGtBdWRpb0Zvcm1hdEZsYWdJc1NpZ25lZElu
dGVnZXIpOworfQorCitib29sIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6aXNGbG9hdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGlzUENNKCkgJiYgKG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1h
dEZsYWdzICYga0F1ZGlvRm9ybWF0RmxhZ0lzRmxvYXQpOworfQorCitib29sIENBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbjo6aXNOYXRpdmVFbmRpYW4oKSBjb25zdAoreworICAgIHJldHVybiBpc1BD
TSgpICYmIChtX3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFncyAmIGtBdWRpb0Zvcm1hdEZs
YWdJc0JpZ0VuZGlhbikgPT0ga0F1ZGlvRm9ybWF0RmxhZ3NOYXRpdmVFbmRpYW47Cit9CisKK3Vp
bnQzMl90IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6bnVtYmVyT2ZJbnRlcmxlYXZlZENoYW5u
ZWxzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNJbnRlcmxlYXZlZCgpID8gbV9zdHJlYW1EZXNj
cmlwdGlvbi5tQ2hhbm5lbHNQZXJGcmFtZSA6IDE7Cit9CisKK3VpbnQzMl90IENBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbjo6bnVtYmVyT2ZDaGFubmVsU3RyZWFtcygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGlzSW50ZXJsZWF2ZWQoKSA/IDEgOiBtX3N0cmVhbURlc2NyaXB0aW9uLm1DaGFubmVsc1Bl
ckZyYW1lOworfQorCit1aW50MzJfdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246Om51bWJlck9m
Q2hhbm5lbHMoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0cmVhbURlc2NyaXB0aW9uLm1DaGFu
bmVsc1BlckZyYW1lOworfQorCit1aW50MzJfdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OnNh
bXBsZVdvcmRTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fc3RyZWFtRGVzY3JpcHRpb24u
bUJ5dGVzUGVyRnJhbWUgPiAwICYmIG51bWJlck9mSW50ZXJsZWF2ZWRDaGFubmVscygpKSA/IG1f
c3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVyRnJhbWUgLyBudW1iZXJPZkludGVybGVhdmVkQ2hh
bm5lbHMoKSA6ICAwOworfQorCit1aW50MzJfdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmJ5
dGVzUGVyRnJhbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0cmVhbURlc2NyaXB0aW9uLm1C
eXRlc1BlckZyYW1lOworfQorCit1aW50MzJfdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmJ5
dGVzUGVyUGFja2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHJlYW1EZXNjcmlwdGlvbi5t
Qnl0ZXNQZXJQYWNrZXQ7Cit9CisKK3VpbnQzMl90IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6
Zm9ybWF0RmxhZ3MoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0cmVhbURlc2NyaXB0aW9uLm1G
b3JtYXRGbGFnczsKK30KKworYm9vbCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246Om9wZXJhdG9y
PT0oY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9zdHJlYW1EZXNjcmlwdGlvbiA9PSBvdGhlcjsKK30KKworYm9vbCBDQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb246Om9wZXJhdG9yIT0oY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2Ny
aXB0aW9uJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gIW9wZXJhdG9yID09IChvdGhlcik7
Cit9CisKK2Jvb2wgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpvcGVyYXRvcj09KGNvbnN0IEF1
ZGlvU3RyZWFtRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdAoreworICAgIGlmIChvdGhlci5wbGF0
Zm9ybURlc2NyaXB0aW9uKCkudHlwZSAhPSBQbGF0Zm9ybURlc2NyaXB0aW9uOjpDQUF1ZGlvU3Ry
ZWFtQmFzaWNUeXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gb3BlcmF0
b3I9PSgqV1RGOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4ob3RoZXIu
cGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKSk7Cit9CisKK2Jvb2wgQ0FBdWRpb1N0
cmVhbURlc2NyaXB0aW9uOjpvcGVyYXRvciE9KGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24m
IG90aGVyKSBjb25zdAoreworICAgIHJldHVybiAhb3BlcmF0b3IgPT0gKG90aGVyKTsKK30KKwor
Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b246OnN0cmVhbURlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHJlYW1EZXNj
cmlwdGlvbjsKK30KKworQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb246OnN0cmVhbURlc2NyaXB0aW9uKCkKK3sKKyAgICByZXR1cm4gbV9zdHJlYW1E
ZXNjcmlwdGlvbjsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vbWFjL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vY29jb2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKc2ltaWxhcml0eSBp
bmRleCA2MiUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAppbmRleCA3YTczOTI5ZTEz
ODQuLjA4ZWEyZjI2ZDQ5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vbWFjL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCkBAIC0zNSw5ICsz
NSw3IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2Ny
aXB0aW9uJiBhLCBjb25zdCBBdWRpb1N0cmVhbUJhCiAKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIENB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBmaW5hbCA6IHB1YmxpYyBBdWRpb1N0cmVhbURlc2NyaXB0
aW9uIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLQogcHVibGljOgotCiAgICAgQ0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uKCk7CiAgICAgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKGNv
bnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYpOwogICAgIENBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbihkb3VibGUsIHVpbnQzMl90LCBQQ01Gb3JtYXQsIGJvb2wpOwpAQCAtNDcsMzYgKzQ1
LDI4IEBAIHB1YmxpYzoKIAogICAgIFBDTUZvcm1hdCBmb3JtYXQoKSBjb25zdCBmaW5hbDsKIAot
ICAgIGRvdWJsZSBzYW1wbGVSYXRlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zdHJlYW1EZXNj
cmlwdGlvbi5tU2FtcGxlUmF0ZTsgfQotICAgIGJvb2wgaXNQQ00oKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRJRCA9PSBrQXVkaW9Gb3JtYXRMaW5lYXJQ
Q007IH0KLSAgICBib29sIGlzSW50ZXJsZWF2ZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiAhKG1f
c3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzICYga0F1ZGlvRm9ybWF0RmxhZ0lzTm9uSW50
ZXJsZWF2ZWQpOyB9Ci0gICAgYm9vbCBpc1NpZ25lZEludGVnZXIoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBpc1BDTSgpICYmIChtX3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFncyAmIGtBdWRp
b0Zvcm1hdEZsYWdJc1NpZ25lZEludGVnZXIpOyB9Ci0gICAgYm9vbCBpc0Zsb2F0KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gaXNQQ00oKSAmJiAobV9zdHJlYW1EZXNjcmlwdGlvbi5tRm9ybWF0Rmxh
Z3MgJiBrQXVkaW9Gb3JtYXRGbGFnSXNGbG9hdCk7IH0KLSAgICBib29sIGlzTmF0aXZlRW5kaWFu
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gaXNQQ00oKSAmJiAobV9zdHJlYW1EZXNjcmlwdGlvbi5t
Rm9ybWF0RmxhZ3MgJiBrQXVkaW9Gb3JtYXRGbGFnSXNCaWdFbmRpYW4pID09IGtBdWRpb0Zvcm1h
dEZsYWdzTmF0aXZlRW5kaWFuOyB9Ci0KLSAgICB1aW50MzJfdCBudW1iZXJPZkludGVybGVhdmVk
Q2hhbm5lbHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBpc0ludGVybGVhdmVkKCkgPyBtX3N0cmVh
bURlc2NyaXB0aW9uLm1DaGFubmVsc1BlckZyYW1lIDogMTsgfQotICAgIHVpbnQzMl90IG51bWJl
ck9mQ2hhbm5lbFN0cmVhbXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBpc0ludGVybGVhdmVkKCkg
PyAxIDogbV9zdHJlYW1EZXNjcmlwdGlvbi5tQ2hhbm5lbHNQZXJGcmFtZTsgfQotICAgIHVpbnQz
Ml90IG51bWJlck9mQ2hhbm5lbHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3N0cmVhbURlc2Ny
aXB0aW9uLm1DaGFubmVsc1BlckZyYW1lOyB9Ci0gICAgdWludDMyX3Qgc2FtcGxlV29yZFNpemUo
KSBjb25zdCBmaW5hbCB7Ci0gICAgICAgIHJldHVybiAobV9zdHJlYW1EZXNjcmlwdGlvbi5tQnl0
ZXNQZXJGcmFtZSA+IDAgJiYgbnVtYmVyT2ZJbnRlcmxlYXZlZENoYW5uZWxzKCkpID8gbV9zdHJl
YW1EZXNjcmlwdGlvbi5tQnl0ZXNQZXJGcmFtZSAvIG51bWJlck9mSW50ZXJsZWF2ZWRDaGFubmVs
cygpIDogIDA7Ci0gICAgfQotICAgIHVpbnQzMl90IGJ5dGVzUGVyRnJhbWUoKSBjb25zdCB7IHJl
dHVybiBtX3N0cmVhbURlc2NyaXB0aW9uLm1CeXRlc1BlckZyYW1lOyB9Ci0gICAgdWludDMyX3Qg
Ynl0ZXNQZXJQYWNrZXQoKSBjb25zdCB7IHJldHVybiBtX3N0cmVhbURlc2NyaXB0aW9uLm1CeXRl
c1BlclBhY2tldDsgfQotICAgIHVpbnQzMl90IGZvcm1hdEZsYWdzKCkgY29uc3QgeyByZXR1cm4g
bV9zdHJlYW1EZXNjcmlwdGlvbi5tRm9ybWF0RmxhZ3M7IH0KLQotICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdCB7IHJldHVy
biBtX3N0cmVhbURlc2NyaXB0aW9uID09IG90aGVyOyB9Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICFv
cGVyYXRvciA9PSAob3RoZXIpOyB9Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKG90aGVyLnBs
YXRmb3JtRGVzY3JpcHRpb24oKS50eXBlICE9IFBsYXRmb3JtRGVzY3JpcHRpb246OkNBQXVkaW9T
dHJlYW1CYXNpY1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0
dXJuIG9wZXJhdG9yPT0oKldURjo6Z2V0PGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlv
bio+KG90aGVyLnBsYXRmb3JtRGVzY3JpcHRpb24oKS5kZXNjcmlwdGlvbikpOwotICAgIH0KLSAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuICFvcGVyYXRvciA9PSAob3RoZXIpOyB9Ci0KLSAgICBjb25zdCBBdWRpb1N0
cmVhbUJhc2ljRGVzY3JpcHRpb24mIHN0cmVhbURlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zdHJlYW1EZXNjcmlwdGlvbjsgfQotICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYg
c3RyZWFtRGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3N0cmVhbURlc2NyaXB0aW9uOyB9CisgICAg
ZG91YmxlIHNhbXBsZVJhdGUoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzUENNKCkgY29uc3Qg
ZmluYWw7CisgICAgYm9vbCBpc0ludGVybGVhdmVkKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBp
c1NpZ25lZEludGVnZXIoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzRmxvYXQoKSBjb25zdCBm
aW5hbDsKKyAgICBib29sIGlzTmF0aXZlRW5kaWFuKCkgY29uc3QgZmluYWw7CisKKyAgICB1aW50
MzJfdCBudW1iZXJPZkludGVybGVhdmVkQ2hhbm5lbHMoKSBjb25zdCBmaW5hbDsKKyAgICB1aW50
MzJfdCBudW1iZXJPZkNoYW5uZWxTdHJlYW1zKCkgY29uc3QgZmluYWw7CisgICAgdWludDMyX3Qg
bnVtYmVyT2ZDaGFubmVscygpIGNvbnN0IGZpbmFsOworICAgIHVpbnQzMl90IHNhbXBsZVdvcmRT
aXplKCkgY29uc3QgZmluYWw7CisgICAgdWludDMyX3QgYnl0ZXNQZXJGcmFtZSgpIGNvbnN0Owor
ICAgIHVpbnQzMl90IGJ5dGVzUGVyUGFja2V0KCkgY29uc3Q7CisgICAgdWludDMyX3QgZm9ybWF0
RmxhZ3MoKSBjb25zdDsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdWRpb1N0cmVhbUJh
c2ljRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdDsKKyAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0
OworCisgICAgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBzdHJlYW1EZXNjcmlw
dGlvbigpIGNvbnN0OworICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgc3RyZWFtRGVz
Y3JpcHRpb24oKTsKIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgV0FSTl9V
TlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJp
bmdCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQ0FSaW5n
QnVmZmVyLmNwcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5jcHAKcmVuYW1lIHRvIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBUmluZ0J1ZmZlci5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBUmluZ0J1ZmZlci5oCnNpbWlsYXJpdHkg
aW5kZXggOTglCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9D
QVJpbmdCdWZmZXIuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29j
b2EvQ0FSaW5nQnVmZmVyLmgKaW5kZXggMDRhY2VmYzhkYWFkLi4zZDg5NGIwNjVlMWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQVJpbmdCdWZmZXIuaApA
QCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgRXJyb3Igc3RvcmUo
Y29uc3QgQXVkaW9CdWZmZXJMaXN0Kiwgc2l6ZV90IGZyYW1lQ291bnQsIHVpbnQ2NF90IHN0YXJ0
RnJhbWUpOwogCiAgICAgZW51bSBGZXRjaE1vZGUgeyBDb3B5LCBNaXggfTsKLSAgICBXRUJDT1JF
X0VYUE9SVCBFcnJvciBmZXRjaChBdWRpb0J1ZmZlckxpc3QqLCBzaXplX3QgZnJhbWVDb3VudCwg
dWludDY0X3Qgc3RhcnRGcmFtZSwgRmV0Y2hNb2RlIG1vZGUgPSBDb3B5KTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBFcnJvciBmZXRjaChBdWRpb0J1ZmZlckxpc3QqLCBzaXplX3QgZnJhbWVDb3VudCwg
dWludDY0X3Qgc3RhcnRGcmFtZSwgRmV0Y2hNb2RlID0gQ29weSk7CiAKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGZsdXNoKCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410905</attachid>
            <date>2020-10-08 20:50:07 -0700</date>
            <delta_ts>2020-10-09 10:10:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>217497.patch</filename>
            <type>text/plain</type>
            <size>16547</size>
            <attacher name="Peng Liu">peng.liu6</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3MDYzOWU1MjBjN2QuLjk3MzA1NzIzZWI3YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDM5IEBACisyMDIwLTEwLTA4ICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+
CisKKyAgICAgICAgTW92ZSBzb21lIGF1ZGlvIGJ1ZmZlciBtYW5hZ2VtZW50IHJlbGF0ZWQgZmls
ZXMgZnJvbSBmb2xkZXIgIm1hYyIgdG8gZm9sZGVyICJjb2NvYSIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzQ5NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vY29jb2EvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3Bw
LgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2Ft
cGxlQnVmZmVyTGlzdC5oLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2Ft
cGxlRGF0YVNvdXJjZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vbWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlv
L2NvY29hL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFTb3VyY2UubW0uCisgICAgICAg
ICogcGxhdGZvcm0vYXVkaW8vY29jb2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uOjpzYW1wbGVSYXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbjo6aXNQQ00gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVh
bURlc2NyaXB0aW9uOjppc0ludGVybGVhdmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6aXNTaWduZWRJbnRlZ2VyIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6aXNGbG9hdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmlzTmF0aXZlRW5kaWFuIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6bnVtYmVy
T2ZJbnRlcmxlYXZlZENoYW5uZWxzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbjo6bnVtYmVyT2ZDaGFubmVsU3RyZWFtcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246Om51bWJlck9mQ2hhbm5lbHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpzYW1wbGVX
b3JkU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b246OmJ5dGVzUGVyRnJhbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVh
bURlc2NyaXB0aW9uOjpieXRlc1BlclBhY2tldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmZvcm1hdEZsYWdzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246Om9wZXJhdG9yIT0gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpzdHJlYW1EZXNj
cmlwdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b246OnN0cmVhbURlc2NyaXB0aW9uKToKKyAgICAgICAgTW92ZSB0aGUgaW5saW5lIGZ1bmN0aW9u
IGRlZmluaXRpb25zIG91dC1vZi1saW5lIHRvIGZpeCBzdHlsaW5nIGlzc3Vlcy4KKyAgICAgICAg
KiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24uaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9DQVJpbmdCdWZmZXIu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmlu
Z0J1ZmZlci5jcHAuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2EvQ0FSaW5nQnVmZmVy
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5n
QnVmZmVyLmguCisKIDIwMjAtMTAtMDggIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlA
c29ueS5jb20+CiAKICAgICAgICAgW1dpbkNhaXJvXSBBU1NFUlRJT04gRkFJTEVEOiBtX3JlbmRl
cmluZ1VwZGF0ZVJlbWFpbmluZ1N0ZXBzLmxhc3QoKS5pc0VtcHR5KCkgaW4gV2ViQ29yZTo6UGFn
ZTo6ZmluYWxpemVSZW5kZXJpbmdVcGRhdGUgc2luY2UgcjI2ODA3NQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKaW5kZXggZTNiMmUyOWU4MDJhLi4xYWZjYjgwN2RkZTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0Nv
Y29hLnR4dApAQCAtMjAzLDYgKzIwMywxMCBAQCBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZU1hYy5tbQogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0KIHBsYXRmb3JtL2F1ZGlvL0F1ZGlv
U2Vzc2lvbi5jcHAKIHBsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRGVzdGluYXRpb25Db2NvYS5j
cHAKK3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAKK3BsYXRm
b3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbQorcGxhdGZvcm0vYXVkaW8v
Y29jb2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmNwcAorcGxhdGZvcm0vYXVkaW8vY29jb2Ev
Q0FSaW5nQnVmZmVyLmNwcAogcGxhdGZvcm0vYXVkaW8vY29jb2EvTWVkaWFTZXNzaW9uTWFuYWdl
ckNvY29hLm1tCiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9XZWJBdWRpb0J1ZmZlckxpc3QuY3BwCiBw
bGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAgQG5vLXVuaWZ5CkBAIC0y
MTQsMTEgKzIxOCw3IEBAIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0J1c01hYy5tbQogcGxhdGZv
cm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuY3BwCiBwbGF0Zm9ybS9hdWRpby9tYWMv
QXVkaW9GaWxlUmVhZGVyTWFjLmNwcAogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvSGFyZHdhcmVM
aXN0ZW5lck1hYy5jcHAKLXBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3Qu
Y3BwCi1wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLm1tCiBwbGF0Zm9y
bS9hdWRpby9tYWMvQXVkaW9TZXNzaW9uTWFjLm1tCi1wbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uLmNwcAotcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5j
cHAKIHBsYXRmb3JtL2F1ZGlvL21hYy9GRlRGcmFtZU1hYy5jcHAKIHBsYXRmb3JtL2NmL0tleWVk
RGVjb2RlckNGLmNwcAogcGxhdGZvcm0vY2YvS2V5ZWRFbmNvZGVyQ0YuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzBiNTZl
NjA1MmZjLi5lODAwNGNiNmQxMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI3MzYyLDYgKzI3MzYyLDE0IEBACiAJCQljaGls
ZHJlbiA9ICgKIAkJCQk0MTMxNTE4NDIzNTc3NDVFMDAxMTVFNkUgLyogQXVkaW9EZXN0aW5hdGlv
bkNvY29hLmNwcCAqLywKIAkJCQk0MTMxNTE4NjIzNTc3NDVFMDAxMTVFNkUgLyogQXVkaW9EZXN0
aW5hdGlvbkNvY29hLmggKi8sCisJCQkJMDczQjg3NjIxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlv
U2FtcGxlQnVmZmVyTGlzdC5jcHAgKi8sCisJCQkJMDczQjg3NjMxRTQzODU5RDAwNzFDMEVDIC8q
IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oICovLAorCQkJCTA3M0I4NzY1MUU0Mzg1OUQwMDcxQzBF
QyAvKiBBdWRpb1NhbXBsZURhdGFTb3VyY2UuaCAqLywKKwkJCQkwNzNCODc2NDFFNDM4NTlEMDA3
MUMwRUMgLyogQXVkaW9TYW1wbGVEYXRhU291cmNlLm1tICovLAorCQkJCTA3M0I4NzU3MUU0MERD
RkQwMDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwICovLAorCQkJCTA3M0I4
NzU4MUU0MERDRkQwMDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCAqLywKKwkJ
CQlDREM3MzQxMjE5Nzc4OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmNwcCAqLywKKwkJCQlD
REM3MzQxMzE5Nzc4OTZDMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmggKi8sCiAJCQkJNDE3RjdB
RUQyMTM5QkY2NTAwRkJBN0VDIC8qIE1lZGlhU2Vzc2lvbk1hbmFnZXJDb2NvYS5oICovLAogCQkJ
CTQxN0Y3QUVBMjEzOUJGNjQwMEZCQTdFQyAvKiBNZWRpYVNlc3Npb25NYW5hZ2VyQ29jb2EubW0g
Ki8sCiAJCQkJNDE3RjdBRUIyMTM5QkY2NDAwRkJBN0VDIC8qIFdlYkF1ZGlvQnVmZmVyTGlzdC5j
cHAgKi8sCkBAIC0zMDI2OSwxNSArMzAyNzcsNyBAQAogCQkJCUZEMzE2MEI5MTJCMDI3MkEwMEMx
QTM1OSAvKiBBdWRpb0ZpbGVSZWFkZXJNYWMuaCAqLywKIAkJCQlDRDJGNEEyNTE4RDhBMzQ5MDA2
Mzc0NkQgLyogQXVkaW9IYXJkd2FyZUxpc3RlbmVyTWFjLmNwcCAqLywKIAkJCQlDRDJGNEEyNjE4
RDhBMzQ5MDA2Mzc0NkQgLyogQXVkaW9IYXJkd2FyZUxpc3RlbmVyTWFjLmggKi8sCi0JCQkJMDcz
Qjg3NjIxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAgKi8sCi0J
CQkJMDczQjg3NjMxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oICov
LAotCQkJCTA3M0I4NzY1MUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZURhdGFTb3VyY2Uu
aCAqLywKLQkJCQkwNzNCODc2NDFFNDM4NTlEMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVEYXRhU291
cmNlLm1tICovLAogCQkJCUNENTRERTQ5MTc0NjlDNkQwMDVFNUIzNiAvKiBBdWRpb1Nlc3Npb25N
YWMubW0gKi8sCi0JCQkJMDczQjg3NTcxRTQwRENGRDAwNzFDMEVDIC8qIENBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbi5jcHAgKi8sCi0JCQkJMDczQjg3NTgxRTQwRENGRDAwNzFDMEVDIC8qIENBQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbi5oICovLAotCQkJCUNEQzczNDEyMTk3Nzg5NkMwMDQ2QkZDNSAv
KiBDQVJpbmdCdWZmZXIuY3BwICovLAotCQkJCUNEQzczNDEzMTk3Nzg5NkMwMDQ2QkZDNSAvKiBD
QVJpbmdCdWZmZXIuaCAqLywKIAkJCQlGRDMxNjBCQTEyQjAyNzJBMDBDMUEzNTkgLyogRkZURnJh
bWVNYWMuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5j
cHAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3BwCnJlbmFtZSB0byBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVC
dWZmZXJMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb1Nh
bXBsZUJ1ZmZlckxpc3QuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oCnJlbmFt
ZSB0byBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZUJ1ZmZl
ckxpc3QuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1
ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29j
b2EvQXVkaW9TYW1wbGVEYXRhU291cmNlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFTb3Vy
Y2UuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9T
YW1wbGVEYXRhU291cmNlLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFTb3VyY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZURhdGFTb3VyY2UubW0Kc2ltaWxhcml0eSBpbmRleCAx
MDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1Nh
bXBsZURhdGFTb3VyY2UubW0KcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2NvY29hL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24u
Y3BwCnNpbWlsYXJpdHkgaW5kZXggNjglCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwCnJlbmFtZSB0byBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24u
Y3BwCmluZGV4IDVkM2JjN2Q2YjNlMC4uYTYxOTAyOGJkNzc3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24uY3BwCkBAIC0zMiw3ICszMiw3IEBAIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKCkKICAgICA6IG1fc3RyZWFtRGVzY3JpcHRpb24oeyB9
KQogewogfQotICAgIAorCiBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246On5DQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24oKSA9IGRlZmF1bHQ7CiAKIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6Q0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uKGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiAm
ZGVzYykKQEAgLTE1NCw0ICsxNTQsMTAyIEBAIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdWRpb1N0
cmVhbUJhc2ljRGVzY3JpcHRpb24mIGEsIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjCiAgICAg
ICAgICYmIGEubUJpdHNQZXJDaGFubmVsID09IGIubUJpdHNQZXJDaGFubmVsOwogfQogCitkb3Vi
bGUgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpzYW1wbGVSYXRlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9zdHJlYW1EZXNjcmlwdGlvbi5tU2FtcGxlUmF0ZTsKK30KKworYm9vbCBDQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb246OmlzUENNKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHJlYW1E
ZXNjcmlwdGlvbi5tRm9ybWF0SUQgPT0ga0F1ZGlvRm9ybWF0TGluZWFyUENNOworfQorCitib29s
IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6aXNJbnRlcmxlYXZlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuICEobV9zdHJlYW1EZXNjcmlwdGlvbi5tRm9ybWF0RmxhZ3MgJiBrQXVkaW9Gb3JtYXRG
bGFnSXNOb25JbnRlcmxlYXZlZCk7Cit9CisKK2Jvb2wgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9u
Ojppc1NpZ25lZEludGVnZXIoKSBjb25zdAoreworICAgIHJldHVybiBpc1BDTSgpICYmIChtX3N0
cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFncyAmIGtBdWRpb0Zvcm1hdEZsYWdJc1NpZ25lZElu
dGVnZXIpOworfQorCitib29sIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6aXNGbG9hdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGlzUENNKCkgJiYgKG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1h
dEZsYWdzICYga0F1ZGlvRm9ybWF0RmxhZ0lzRmxvYXQpOworfQorCitib29sIENBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbjo6aXNOYXRpdmVFbmRpYW4oKSBjb25zdAoreworICAgIHJldHVybiBpc1BD
TSgpICYmIChtX3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFncyAmIGtBdWRpb0Zvcm1hdEZs
YWdJc0JpZ0VuZGlhbikgPT0ga0F1ZGlvRm9ybWF0RmxhZ3NOYXRpdmVFbmRpYW47Cit9CisKK3Vp
bnQzMl90IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6bnVtYmVyT2ZJbnRlcmxlYXZlZENoYW5u
ZWxzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNJbnRlcmxlYXZlZCgpID8gbV9zdHJlYW1EZXNj
cmlwdGlvbi5tQ2hhbm5lbHNQZXJGcmFtZSA6IDE7Cit9CisKK3VpbnQzMl90IENBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbjo6bnVtYmVyT2ZDaGFubmVsU3RyZWFtcygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGlzSW50ZXJsZWF2ZWQoKSA/IDEgOiBtX3N0cmVhbURlc2NyaXB0aW9uLm1DaGFubmVsc1Bl
ckZyYW1lOworfQorCit1aW50MzJfdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246Om51bWJlck9m
Q2hhbm5lbHMoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0cmVhbURlc2NyaXB0aW9uLm1DaGFu
bmVsc1BlckZyYW1lOworfQorCit1aW50MzJfdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OnNh
bXBsZVdvcmRTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fc3RyZWFtRGVzY3JpcHRpb24u
bUJ5dGVzUGVyRnJhbWUgPiAwICYmIG51bWJlck9mSW50ZXJsZWF2ZWRDaGFubmVscygpKSA/IG1f
c3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVyRnJhbWUgLyBudW1iZXJPZkludGVybGVhdmVkQ2hh
bm5lbHMoKSA6ICAwOworfQorCit1aW50MzJfdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmJ5
dGVzUGVyRnJhbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0cmVhbURlc2NyaXB0aW9uLm1C
eXRlc1BlckZyYW1lOworfQorCit1aW50MzJfdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmJ5
dGVzUGVyUGFja2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHJlYW1EZXNjcmlwdGlvbi5t
Qnl0ZXNQZXJQYWNrZXQ7Cit9CisKK3VpbnQzMl90IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6
Zm9ybWF0RmxhZ3MoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0cmVhbURlc2NyaXB0aW9uLm1G
b3JtYXRGbGFnczsKK30KKworYm9vbCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246Om9wZXJhdG9y
PT0oY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9zdHJlYW1EZXNjcmlwdGlvbiA9PSBvdGhlcjsKK30KKworYm9vbCBDQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb246Om9wZXJhdG9yIT0oY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2Ny
aXB0aW9uJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gIW9wZXJhdG9yPT0ob3RoZXIpOwor
fQorCitib29sIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6b3BlcmF0b3I9PShjb25zdCBBdWRp
b1N0cmVhbURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAob3RoZXIucGxhdGZv
cm1EZXNjcmlwdGlvbigpLnR5cGUgIT0gUGxhdGZvcm1EZXNjcmlwdGlvbjo6Q0FBdWRpb1N0cmVh
bUJhc2ljVHlwZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG9wZXJhdG9y
PT0oKldURjo6Z2V0PGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbio+KG90aGVyLnBs
YXRmb3JtRGVzY3JpcHRpb24oKS5kZXNjcmlwdGlvbikpOworfQorCitib29sIENBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbjo6b3BlcmF0b3IhPShjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBv
dGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gIW9wZXJhdG9yPT0ob3RoZXIpOworfQorCitjb25z
dCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6
c3RyZWFtRGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3N0cmVhbURlc2NyaXB0
aW9uOworfQorCitBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIENBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbjo6c3RyZWFtRGVzY3JpcHRpb24oKQoreworICAgIHJldHVybiBtX3N0cmVhbURlc2Ny
aXB0aW9uOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9tYWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9jb2NvYS9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaApzaW1pbGFyaXR5IGluZGV4
IDYyJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2NvY29hL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCmluZGV4IDdhNzM5MjllMTM4NC4u
MDhlYTJmMjZkNDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9t
YWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vY29jb2EvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKQEAgLTM1LDkgKzM1LDcg
QEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRp
b24mIGEsIGNvbnN0IEF1ZGlvU3RyZWFtQmEKIAogY2xhc3MgV0VCQ09SRV9FWFBPUlQgQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uIGZpbmFsIDogcHVibGljIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24g
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotCiBwdWJsaWM6Ci0KICAgICBDQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24oKTsKICAgICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oY29uc3Qg
QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJik7CiAgICAgQ0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uKGRvdWJsZSwgdWludDMyX3QsIFBDTUZvcm1hdCwgYm9vbCk7CkBAIC00NywzNiArNDUsMjgg
QEAgcHVibGljOgogCiAgICAgUENNRm9ybWF0IGZvcm1hdCgpIGNvbnN0IGZpbmFsOwogCi0gICAg
ZG91YmxlIHNhbXBsZVJhdGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3N0cmVhbURlc2NyaXB0
aW9uLm1TYW1wbGVSYXRlOyB9Ci0gICAgYm9vbCBpc1BDTSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdElEID09IGtBdWRpb0Zvcm1hdExpbmVhclBDTTsg
fQotICAgIGJvb2wgaXNJbnRlcmxlYXZlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICEobV9zdHJl
YW1EZXNjcmlwdGlvbi5tRm9ybWF0RmxhZ3MgJiBrQXVkaW9Gb3JtYXRGbGFnSXNOb25JbnRlcmxl
YXZlZCk7IH0KLSAgICBib29sIGlzU2lnbmVkSW50ZWdlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IGlzUENNKCkgJiYgKG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzICYga0F1ZGlvRm9y
bWF0RmxhZ0lzU2lnbmVkSW50ZWdlcik7IH0KLSAgICBib29sIGlzRmxvYXQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBpc1BDTSgpICYmIChtX3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFncyAm
IGtBdWRpb0Zvcm1hdEZsYWdJc0Zsb2F0KTsgfQotICAgIGJvb2wgaXNOYXRpdmVFbmRpYW4oKSBj
b25zdCBmaW5hbCB7IHJldHVybiBpc1BDTSgpICYmIChtX3N0cmVhbURlc2NyaXB0aW9uLm1Gb3Jt
YXRGbGFncyAmIGtBdWRpb0Zvcm1hdEZsYWdJc0JpZ0VuZGlhbikgPT0ga0F1ZGlvRm9ybWF0Rmxh
Z3NOYXRpdmVFbmRpYW47IH0KLQotICAgIHVpbnQzMl90IG51bWJlck9mSW50ZXJsZWF2ZWRDaGFu
bmVscygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGlzSW50ZXJsZWF2ZWQoKSA/IG1fc3RyZWFtRGVz
Y3JpcHRpb24ubUNoYW5uZWxzUGVyRnJhbWUgOiAxOyB9Ci0gICAgdWludDMyX3QgbnVtYmVyT2ZD
aGFubmVsU3RyZWFtcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGlzSW50ZXJsZWF2ZWQoKSA/IDEg
OiBtX3N0cmVhbURlc2NyaXB0aW9uLm1DaGFubmVsc1BlckZyYW1lOyB9Ci0gICAgdWludDMyX3Qg
bnVtYmVyT2ZDaGFubmVscygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3RyZWFtRGVzY3JpcHRp
b24ubUNoYW5uZWxzUGVyRnJhbWU7IH0KLSAgICB1aW50MzJfdCBzYW1wbGVXb3JkU2l6ZSgpIGNv
bnN0IGZpbmFsIHsKLSAgICAgICAgcmV0dXJuIChtX3N0cmVhbURlc2NyaXB0aW9uLm1CeXRlc1Bl
ckZyYW1lID4gMCAmJiBudW1iZXJPZkludGVybGVhdmVkQ2hhbm5lbHMoKSkgPyBtX3N0cmVhbURl
c2NyaXB0aW9uLm1CeXRlc1BlckZyYW1lIC8gbnVtYmVyT2ZJbnRlcmxlYXZlZENoYW5uZWxzKCkg
OiAgMDsKLSAgICB9Ci0gICAgdWludDMyX3QgYnl0ZXNQZXJGcmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVyRnJhbWU7IH0KLSAgICB1aW50MzJfdCBieXRl
c1BlclBhY2tldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVy
UGFja2V0OyB9Ci0gICAgdWludDMyX3QgZm9ybWF0RmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX3N0
cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFnczsgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1f
c3RyZWFtRGVzY3JpcHRpb24gPT0gb3RoZXI7IH0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gIW9wZXJh
dG9yID09IChvdGhlcik7IH0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAob3RoZXIucGxhdGZv
cm1EZXNjcmlwdGlvbigpLnR5cGUgIT0gUGxhdGZvcm1EZXNjcmlwdGlvbjo6Q0FBdWRpb1N0cmVh
bUJhc2ljVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1cm4g
b3BlcmF0b3I9PSgqV1RGOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4o
b3RoZXIucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKSk7Ci0gICAgfQotICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gIW9wZXJhdG9yID09IChvdGhlcik7IH0KLQotICAgIGNvbnN0IEF1ZGlvU3RyZWFt
QmFzaWNEZXNjcmlwdGlvbiYgc3RyZWFtRGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0
cmVhbURlc2NyaXB0aW9uOyB9Ci0gICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBzdHJl
YW1EZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fc3RyZWFtRGVzY3JpcHRpb247IH0KKyAgICBkb3Vi
bGUgc2FtcGxlUmF0ZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNQQ00oKSBjb25zdCBmaW5h
bDsKKyAgICBib29sIGlzSW50ZXJsZWF2ZWQoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzU2ln
bmVkSW50ZWdlcigpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNGbG9hdCgpIGNvbnN0IGZpbmFs
OworICAgIGJvb2wgaXNOYXRpdmVFbmRpYW4oKSBjb25zdCBmaW5hbDsKKworICAgIHVpbnQzMl90
IG51bWJlck9mSW50ZXJsZWF2ZWRDaGFubmVscygpIGNvbnN0IGZpbmFsOworICAgIHVpbnQzMl90
IG51bWJlck9mQ2hhbm5lbFN0cmVhbXMoKSBjb25zdCBmaW5hbDsKKyAgICB1aW50MzJfdCBudW1i
ZXJPZkNoYW5uZWxzKCkgY29uc3QgZmluYWw7CisgICAgdWludDMyX3Qgc2FtcGxlV29yZFNpemUo
KSBjb25zdCBmaW5hbDsKKyAgICB1aW50MzJfdCBieXRlc1BlckZyYW1lKCkgY29uc3Q7CisgICAg
dWludDMyX3QgYnl0ZXNQZXJQYWNrZXQoKSBjb25zdDsKKyAgICB1aW50MzJfdCBmb3JtYXRGbGFn
cygpIGNvbnN0OworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNE
ZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdWRp
b1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIG90aGVyKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBvdGhlcikgY29uc3Q7CisK
KyAgICBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIHN0cmVhbURlc2NyaXB0aW9u
KCkgY29uc3Q7CisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBzdHJlYW1EZXNjcmlw
dGlvbigpOwogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBXQVJOX1VOVVNF
RF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1
ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9DQVJpbmdCdWZm
ZXIuY3BwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmNwcApyZW5hbWUgdG8gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQ0FSaW5nQnVmZmVyLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQ0FSaW5nQnVmZmVyLmgKc2ltaWxhcml0eSBpbmRl
eCA5OCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmlu
Z0J1ZmZlci5oCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9D
QVJpbmdCdWZmZXIuaAppbmRleCAwNGFjZWZjOGRhYWQuLjNkODk0YjA2NWUxYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0NBUmluZ0J1ZmZlci5oCkBAIC03
Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBFcnJvciBzdG9yZShjb25z
dCBBdWRpb0J1ZmZlckxpc3QqLCBzaXplX3QgZnJhbWVDb3VudCwgdWludDY0X3Qgc3RhcnRGcmFt
ZSk7CiAKICAgICBlbnVtIEZldGNoTW9kZSB7IENvcHksIE1peCB9OwotICAgIFdFQkNPUkVfRVhQ
T1JUIEVycm9yIGZldGNoKEF1ZGlvQnVmZmVyTGlzdCosIHNpemVfdCBmcmFtZUNvdW50LCB1aW50
NjRfdCBzdGFydEZyYW1lLCBGZXRjaE1vZGUgbW9kZSA9IENvcHkpOworICAgIFdFQkNPUkVfRVhQ
T1JUIEVycm9yIGZldGNoKEF1ZGlvQnVmZmVyTGlzdCosIHNpemVfdCBmcmFtZUNvdW50LCB1aW50
NjRfdCBzdGFydEZyYW1lLCBGZXRjaE1vZGUgPSBDb3B5KTsKIAogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZmx1c2goKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>